3.8 KiB
ADR-0001: Erster produktiver Rollout — eigene DB-App als Senke UND Datenquelle
- Status: accepted
- Datum: 2026-10-25
- Entscheider: CEO (A. Leinen), CTO
- Betroffene Dokumente:
docs/architecture/v1.1.mdAbschnitte 7.2, 10 (Phase 4), 12
Kontext und Problemstellung
ProofedMesh soll in einem ersten produktiven Durchlauf einen vollständig attestierten Reisekostenprozess abbilden: Benutzer wählt im Chat ein Projekt, Agenten holen Vorab-Infos und bauen eine Buchungsnutzlast, eine Senke übernimmt. Der Trust-Core (Approval, Signing, Verification, OPA, Trillian) muss sich dabei einmal end-to-end gegen echte Komponenten beweisen.
Zwei Fragen sind zu entscheiden: (1) Welche Senke ist die erste produktive? (2) Wo holen Agenten ihre Vorab-Lesedaten?
Entscheidungsoptionen
- Option A — SAP S/4HANA zuerst (Senke + evtl. OData als Datenquelle).
- Option B — eigene kleine Go-DB-App als Senke
sink:expense-db-appund Datenquelleds:expense-db-appim selben Prozess. - Option C — HTTP-Webhook an einen externen Dritt-Dienst als Senke, kein eigener Datenquellen-Dienst.
Entscheidung
Option B. Wir bauen eine kleine Go-DB-App (expense-db-adapter + expense-db-postgres), die zugleich Senke und Datenquelle ist, und nutzen sie für den ersten produktiven Rollout.
Begründung
- Kleinster Blast Radius. Fehler im Trust-Core gefährden hier nur unsere eigene Instanz, keinen produktiven SAP-Mandanten.
- Schema-Hoheit bei uns. Wir können
expense.canonical,ds.expense.project_assignmentundsink.db.expenseso modellieren, wie es für den sauberen Durchlauf gebraucht wird; keine Rücksicht auf vorhandene ERP-Felder in Runde 1. - Deckt beide Pfade in einem Adapter. Lesepfad (project_assignments, account_assignments, cost_centers) und Schreibpfad (expenses) teilen Postgres-Instanz und Sitzungskontext — der Adapter kann in einer Transaktion gegenlesen, was er geschrieben hat, und die Testabdeckung wird trivial.
- Kein externer Vertrauensanker. Keine externen Tokens, keine externe Replay-Tabelle, keine SM59-Rotation in Runde 1. Jede Komponente läuft in unserem Cluster.
- Lieferbar in Wochen, nicht Monaten. SAP-Integration (Option A) hat eigene Produktentscheidungen offen (Travel Management vs. Concur vs. kundeneigener FI-Prozess, siehe
docs/architecture/v1.1.md7.1). Diese Entscheidung können wir treffen, nachdem der Trust-Kern bewiesen ist.
Option C scheidet aus: ohne Datenquellen-Komponente in Runde 1 bleibt der parallele Lesepfad ungetestet, und Attestierungen mit read_materials sind der kryptografisch anspruchsvollere Teil.
Konsequenzen
Positive
- Phase 4 im Phasenplan hat einen klaren Scope mit einem einzigen Deployment (
expense-db-adapter). - Wir können den Adapter-Vertrag aus
docs/architecture/v1.1.md7.0 und 7a.0 an einer realen Komponente härten, bevor wir SAP (sap_abap) oder generische Webhooks angehen. - Das Datenmodell der DB-App ist klein und publishable — es dient später als Referenz für Partner, die eine ähnliche Senke anbinden wollen.
Negative / Trade-offs
- SAP-Buchung schiebt sich auf Phase 6. Bis dahin müssen Reisekosten entweder im Zweistromverfahren (DB-App parallel zu SAP, keine Freigabe-Automatisierung in SAP) oder manuell nachgebucht werden.
- Wir bauen ein Business-Datenmodell neben SAP auf, das wir später konsolidieren müssen. Risiko eines Doppelstammdatens; wird in späterer ADR adressiert.
Folgearbeiten / Open Points
- ADR zur Rolle der DB-App gegenüber SAP (Spiegelung vs. zweite autoritative Quelle).
- ADR zur SAP-Buchungsschnittstelle (Travel Management vs. Concur vs. kundeneigener FI-Prozess), spätestens vor Phase-6-Start.
Links
docs/architecture/v1.1.mdAbschnitte 7.2, 10, 12- Thread auf DEV-598