2.1 Weitergabekontrolle
- Sämtliche externen Verbindungen über TLS 1.2 oder höher mit Let's-Encrypt-Zertifikaten; HSTS aktiv (
max-age=31536000; includeSubDomains).
- HTTPS-Erzwingung: alle HTTP-Anfragen werden auf HTTPS umgeleitet; nginx + Cloudflare als TLS-Terminierung.
- Secret-Verteilung: Anwendungs-Geheimnisse liegen in
/etc/mintfolder/secrets.env (root:root, Modus 0600) und werden ausschließlich von systemd via EnvironmentFile= geladen.
- Webhook-Signaturen: ausgehende Webhooks werden mit HMAC-SHA-256 signiert; Stripe-Signaturen werden bei jedem eingehenden Webhook geprüft (Fail-Closed bei fehlendem Secret).
Nachweise: routes/n8n_webhooks.py, stripe_billing.py Signaturprüfung, nginx-Konfiguration /etc/nginx/sites-enabled/*.
2.2 Eingabekontrolle
- Audit-Log auf Datenbankebene: sämtliche Einträge in
action_ledger und credit_ledger sind unveränderlich; SQLite-Trigger verhindern UPDATE und DELETE. Aktueller Stand: 97 aktive Trigger über das Schema (Schema-Version 747, 145 Tabellen; davon 95 Integritäts-/Append-only- und 2 FTS-Trigger).
- GoBD-orientierte Hash-Chain: jeder Audit-Eintrag enthält einen Hash des vorherigen Eintrags; Manipulationen werden vom
gobd_health_check.py-Verfahren erkannt.
- DATEV-Festschreibung (§ 146 Abs. 4 AO): mit DATEV exportierte B2B-Nutzungsprotokolle werden über
b2b_usage_logs.datev_locked festgeschrieben; fünf SQLite-Trigger verhindern nachträgliche Änderung oder Entsperrung bereits exportierter Datensätze. Sprint 5
- CSRF-Schutz: alle zustandsändernden Operationen erfordern einen pro Sitzung erzeugten Token.
- Eingabevalidierung: jedes API-Schema wird per Pydantic geprüft; Datenbank-Zugriffe ausschließlich über parametrisierte Statements.
Nachweise: db/_core.py GoBD-Trigger-Block, scripts/gobd_health_check.py Integritätsprüfung, db/companies.py Festschreibung b2b_usage_logs.datev_locked.
2.3 E-Rechnungs-Validierung und revisionssichere Exporte
- Eingehende E-Rechnungen: ZUGFeRD/Factur-X- und XRechnung-Belege werden gegen die EN-16931-Schematron-Regeln (über die
factur-x-Bibliothek) geprüft; das Ergebnis wird an jedem Beleg vermerkt (e_rechnung_validation_status / e_rechnung_validation_errors). Eingehende Belege werden unabhängig vom Prüfergebnis stets im Originalformat archiviert (Vollständigkeit gemäß § 147 AO — kein Verwerfen). Sprint 6 · #966
- Ausgehende E-Rechnungen: ausgehende XRechnung-Belege (CII-Syntax) werden vor dem Finalisieren per Schematron (Saxon/
saxonche) gegen EN 16931 geprüft; bei einem Schematron-Verstoß wird das Finalisieren mit HTTP 422 abgelehnt. Eine XSD-Validierung wird wegen der Element-Reihenfolge im CII-Format bewusst nicht eingesetzt. Sprint 6 · #966
- XRechnung-CIUS-/BR-DE-Validierung (KoSIT): ausgehende XRechnungen werden beim Finalisieren zusätzlich gegen die KoSIT-XRechnung-3.0-Schematron (BR-DE-Regeln, Leitweg-ID; via
saxonche) geprüft; das Ergebnis wird am Beleg vermerkt (brde_validation_status / brde_validation_errors, nach Finalisierung unveränderbar). Die Prüfung läuft derzeit warnend (warn-first) und ist noch keine harte Sperre — die blockierende EN-16931-Schematron-Prüfung (HTTP 422) bleibt maßgeblich. R2 · #1072
- GDPdU-/Z3-Export (Audicon-Beschreibungsstandard): Datenüberlassung für die Betriebsprüfung als Datenträger-Paket aus
index.xml, gdpdu-01-08-2002.dtd und journal.csv. Sprint 6 · #967
Nachweise: services/e_rechnung.py (eingehende EN-16931-Schematron-Prüfung), services/invoice_generator.py (ausgehende XRechnung-Schematron-Prüfung, HTTP 422), services/export/gdpdu.py (GDPdU/Z3-Export).