Skip to content

Guide: advisor integration

Status: shape-only. The advisor lens API does not exist yet on the membrane (see 022 gap report item 10). This guide walks how to model a Steuerberater / Kanzlei integration today using fixture evidence bundles, and what it will look like when the lens API lands.

A Steuerberater (tax advisor), Kanzlei (law firm), auditor, or other professional engages with a company Geist through a lens — see concepts: advisor lenses.

Today: model the shape; admit fixture evidence

Section titled “Today: model the shape; admit fixture evidence”

Until the lens API lands, an advisor “intervention” enters the Geist as a fixture evidence bundle that downstream operations cite.

Steuerberater review for a bookkeeping fact

Section titled “Steuerberater review for a bookkeeping fact”

In the German invoice / payment / advisor flow, the bookkeeping fact requires advisor_evidence:

const bookkeeping = await client.economicBookkeepingFact({
tenant: "tenant_node:rheinwerk_calibration",
invoice: "invoice:fixture",
payment_observation: "payment_observation:fixture",
advisor_evidence: "evidence_bundle:steuerberater_review",
});

The evidence_bundle:steuerberater_review is fixture today. In a real Koerper, the Steuerberater console would:

  1. Project the relevant atoms (invoice, payment) into the Steuerberater’s view.
  2. Allow the Steuerberater to approve / request correction.
  3. The Steuerberater’s decision is captured client-side.
  4. The Koerper posts the captured decision through evidence.connector.ingest with kind: "advisor":
const advisorEvidence = await client.connectorEvidenceIngest({
tenant,
subject: "company_geist:rheinwerk_calibration",
kind: "advisor",
idempotency_key: "steuerberater-review-2026-04-001",
source_system: "fixture_steuerberater_console",
source_label: "fixture",
source_hash: "sha256:fixture_advisor_decision",
raw_kind: "fixture_json",
claims: ["bookkeeping_advisor_decision"],
advisor_decision: "clear", // | "reserve"
fixture: true,
});
// advisorEvidence.body.evidenceBundle is now usable as advisor_evidence

The connector-evidence path is the broader fallback for any advisor decision (today it captures the Steuerberater’s choice as redacted hash-only evidence). For first-class advisor opinions tied to a lens and matter, prefer advisor.openMatter and advisor.issueOpinion described next.

The membrane exposes a first-class lens, advisor, and intervention surface today as staging-durable fixture operations. Production admission and real professional-trust cryptography remain closed; raw payloads, full tenant graphs, and biometric material are refused.

const matter = await client.advisorOpenMatter({
tenant,
lens: "lens:rheinwerk_steuerberater_q1_2026",
subject: "company_geist:rheinwerk_calibration",
scope: ["invoice.*", "payment.*", "bookkeeping.*", "period.*"],
validityWindow: { from: "2026-01-01", to: "2026-12-31" },
});
const opinion = await client.advisorIssueOpinion({
tenant,
lens: "lens:rheinwerk_steuerberater_q1_2026",
matter: matter.body.matter,
kind: "vat_treatment_opinion",
reviewedAtoms: ["atom:invoice_...", "atom:payment_..."],
conclusion: "clear",
conditions: ["valid_only_for_period_2026_04"],
validityWindow: { from: "2026-04-26", to: "2027-04-26" },
});

The opinion is recorded as scoped advisor evidence with the Steuerberater’s identity binding, scope, and reliance terms; it is not yet a production opinion atom and the advisor is not an admin.

The console you build today should:

1. Display projections of advisor-visible atoms

Section titled “1. Display projections of advisor-visible atoms”

Define the engagement scope through lens.scope and pull redacted disclosures through lens.disclose rather than filtering raw commit.recent results client-side. Use commit.recent and the read models (read.standing.active, read.proofs.history) for membrane-safe list and detail surfaces inside the lens scope.

2. Render structured atoms, not generic dashboards

Section titled “2. Render structured atoms, not generic dashboards”

Show:

  • the invoice atom (capability ref, amount, currency, customer ref, evidence refs),
  • the payment observation atom (matched amount, source),
  • the closure surface (open / resolved),
  • any existing tensions,
  • the receipts.

3. Allow the Steuerberater to issue a decision

Section titled “3. Allow the Steuerberater to issue a decision”

Preferred: a button that posts advisor.issueOpinion with the matter, lens, reviewed atoms, and conclusion. The connector path (evidence.connector.ingest with kind: "advisor" and advisor_decision: "clear" or "reserve") remains the broader hash-only fallback when no scoped lens or matter is in place yet.

Display fixture: true on every receipt the console shows.

The Steuerberater console must not display data outside the engagement scope. The membrane exposes lens.scope and lens.disclose as staging-durable operations that record explicit field scope and return redacted disclosures; the console should call them rather than relying on client-side filtering. Raw DB rows, raw connector payloads, and biometric material remain refused.

Display the lens’s validity window, scope, and revocation path. These come from the engagement’s lens definition recorded through lens.scope on the membrane.

What an advisor lens engagement will eventually look like

Section titled “What an advisor lens engagement will eventually look like”
lens object
professional ref e.g. steuerberater:meier_partner_munich
subject company e.g. company_geist:rheinwerk_calibration
visible_facts atoms in scope
permissible_operations what the advisor may propose
issueable_opinions opinion kinds
reliance_terms what the company may rely on
confidentiality_terms what the advisor may not disclose
validity_window from / to
revocation_path how either party may revoke
proof_export_rights what proofs the advisor may pull

Each opinion the advisor issues is an atom citing the lens, the matter, and the reviewed atoms. The advisor’s professional standing (through a professional Pendulum) gates which opinion kinds they may issue.

  • A real lens-scoped projection that excludes out-of-scope atoms at the membrane.
  • A signed Steuerberater opinion atom with attested professional standing.
  • A Kanzlei matter with first-class capability gating.
  • A bilateral edge between the company Geist and the advisor’s own Geist (the mesh; see 022 item 13).