GoBD-Unterstützung — Technische Selbstprüfung
MintFolder AI dokumentiert technische Maßnahmen zu 15 Kontrollbereichen der Grundsätze zur ordnungsmäßigen Führung und Aufbewahrung von Büchern, Aufzeichnungen und Unterlagen in elektronischer Form sowie zum Datenzugriff (GoBD). Die Gesamtbewertung hängt von Einrichtung, Nutzung und steuerlicher Prüfung ab.
trg_archive_no_tamper_core schützt 8 Kernfelder, trg_archive_no_tamper_financial schützt 9 Finanzfelder. Kompensierende Kontrolle via kryptographische Verkettung des Audit Trails (§ 146 Abs. 4 AO).archive_audit_trail mit Hash-Chaining (previous_hash → current_hash) + access_log protokollieren Änderungen und Zugriffe. SQLite-Trigger erschweren Manipulationen; es handelt sich nicht um ein externes Testat und nicht um zertifizierten WORM-Speicher.verify_document_hash() validiert Integrität. API-Endpunkt /api/gobd/verify-integrity.trg_archive_retention_guard verhindert vorzeitige Löschung.archive_source in allen log_archive()-Aufrufen (Bot-Kanal: 6 Stellen in bot/handlers/; Web-/B2C-Kanal: separate SHA-256-Pipeline). Lückenlose Nachverfolgung des Eingangskanals./api/gobd/export-z3 (DATEV/Archivdaten, Metadaten).processed_at UTC-Timestamp bei INSERT. trg_archive_auto_lock sperrt automatisch bei erfolgreicher Archivierung./api/gobd/audit-trail für direkte Einsicht in Audit-Trail und Archivdaten durch den Betriebsprüfer./api/gobd/verify-integrity liefert Integritätsprüfung, Hash-Informationen und Prüfergebnisse./api/gobd/export-z3 — ZIP-Download mit Archivdaten und DATEV-Ausgaben für maschinelle Auswertung durch den Prüfer.access_log-Tabelle mit IP- und User-Agent-Protokollierung.| # | Trigger | Typ | Beschreibung | Geschützte Felder |
|---|---|---|---|---|
| 1 | trg_archive_no_tamper_core |
Immutabilität | Blockiert UPDATE auf Kernfelder nach Sperrung | original_name, final_name, document_hash, doc_date, drive_file_id, drive_path, processed_at, archive_source |
| 2 | trg_archive_no_tamper_financial |
Immutabilität | Blockiert UPDATE auf Finanzfelder nach Sperrung | amount, betrag_netto, waehrung, rechnungsnummer, faelligkeitsdatum, ust_id_sender, iban, payment_status, tax_breakdown |
| 3 | trg_archive_no_delete |
Immutabilität | Blockiert DELETE auf alle Archiveinträge | Gesamter Datensatz |
| 4 | trg_archive_retention_guard |
Aufbewahrung | Verhindert Soft-Delete vor Fristablauf | drive_deleted, aufbewahrungsfrist, processed_at |
| 5 | trg_archive_auto_lock |
Immutabilität | Automatische Sperrung bei INSERT (status='success') | locked_at (UTC) |
| 6 | trg_archive_audit_summary |
Audit Trail | Protokolliert ai_summary-Änderungen | ai_summary |
| 7 | trg_archive_audit_status |
Audit Trail | Protokolliert Status-Änderungen | status |
| 8 | trg_archive_audit_drive_deleted |
Audit Trail | Protokolliert Drive-Löschmarkierungen | drive_deleted |
| 9 | trg_archive_audit_category |
Audit Trail | Protokolliert Kategorie-Änderungen | category, kuerzel |
| 10 | trg_audit_trail_no_tamper |
Immutabilität | Audit Trail nach Versiegelung unveränderbar (Hash-Chain sealed) | Gesamter Trail-Datensatz (wenn current_hash gesetzt) |
| 11 | trg_audit_trail_no_tamper_data |
Immutabilität | Datenfelder des Audit Trails immer unveränderbar | archive_id, user_id, action, field_name, old_value, new_value, performed_by, ip_address, user_agent, created_at |
| 12 | trg_audit_trail_no_delete |
Immutabilität | Audit Trail löschgeschützt | Gesamter Trail-Datensatz |
| 13 | trg_credits_non_negative |
Finanz-Integrität | Verhindert negative Guthaben-Salden | credits |
| 14 | trg_ledger_no_tamper |
Finanz-Integrität | Kredit-Ledger unveränderbar | Gesamter Ledger-Datensatz |
| 15 | trg_ledger_no_delete |
Finanz-Integrität | Kredit-Ledger löschgeschützt | Gesamter Ledger-Datensatz |
| 16 | trg_action_ledger_no_tamper |
Finanz-Integrität | Aktions-Ledger unveränderbar | Gesamter Aktions-Ledger |
| 17 | trg_action_ledger_no_delete |
Finanz-Integrität | Aktions-Ledger löschgeschützt | Gesamter Aktions-Ledger |
747; davon 95 Integritäts-/Append-only- und 2 FTS-Trigger) aktiv. Weitere umfassen u. a.:
Vault-Trigger (trg_vault_access_no_tamper, trg_vault_access_no_delete, trg_vault_files_no_tamper, trg_vault_files_no_delete),
Transaktions-Trigger (trg_transactions_no_tamper, trg_transactions_no_delete),
Billing-Trigger (trg_billing_events_no_tamper, trg_billing_events_no_delete),
Credit-Guard (trg_credits_never_negative),
sowie die DATEV-Festschreibungs-Trigger (Sprint 5: b2b_usage_logs.datev_locked + 5 Trigger, § 146 Abs. 4 AO) und weitere DATEV-Sperr-Trigger (Kontierung, OCR, Metadata, Retention, Storno, Locked-At, User-Reassign, Softdelete, Summary, Audit-Fields).
Hasht:
pdf_bytesHasht:
pdf_bytesHasht:
file_bytesHasht:
file_bytesHasht:
pdf_bytesHasht:
file_bytes| # | Datei | Kontext | Hash | Source | Status |
|---|---|---|---|---|---|
| 1 | bot/handlers/chat.py | Chat-Archivierung | ✓ meta | bot |
✓ Umgesetzt |
| 2 | bot/handlers/pdf_tools.py | PDF-Tools Archiv | ✓ meta | bot |
✓ Umgesetzt |
| 3 | bot/handlers/archive.py | AI-Failure-Pfad | n/a (failed) | bot |
✓ Umgesetzt |
| 4 | bot/handlers/archive.py | Erfolgs-Pfad | ✓ meta | bot |
✓ Umgesetzt |
| 5 | bot/handlers/archive.py | Stapel-Loop (ZIP) | ✓ meta | bot |
✓ Umgesetzt |
| 6 | bot/handlers/archive.py | Quick Save | ✓ hash | bot |
✓ Umgesetzt |
Web-/B2C-Kanal: Uploads über das Web-Dashboard nutzen die separate SHA-256-Hash-Pipeline (siehe Abschnitt «SHA-256 Hash Pipelines — 6 Pipelines») mit anschließender DATEV-/Vault-Archivierung. Der Hash-Nachweis ist gleichwertig; archive_source wird durchgängig erfasst.
services/e_rechnung.py, CII via factur-x): wird gegen das EN16931-Schematron geprüft, der Status in e_rechnung_validation_status/_errors markiert und der Beleg immer archiviert — auch bei Verstoß nie verworfen (GoBD-Vollständigkeit, § 147 AO).Ausgehende XRechnung (
services/invoice_generator.py, via saxonche): nur der Finalize wird bei einem Schematron-Verstoß mit HTTP 422 abgelehnt.Hinweis: Es erfolgt eine EN16931-Schematron-Prüfung (kein XSD; XSD ist wegen der CII-Elementreihenfolge bewusst ausgelassen). Die XRechnung-CIUS-Validierung (KoSIT, BR-DE-*) wird beim Finalisieren zusätzlich ausgeführt und am Beleg vermerkt (warn-first); sie ist noch keine harte Sperre — EN16931 bleibt das blockierende Gate.
services/export/gdpdu.py erzeugt ein GDPdU-Datenträgerüberlassungspaket nach Audicon-Beschreibungsstandard:•
index.xml — GDPdU-Beschreibungsdatei•
gdpdu-01-08-2002.dtd — offizielle DTD (verbatim)•
journal.csv — Buchungsjournal (Finanzbuchhaltung)Spaltenmodell ist Single-Source-of-Truth für
index.xml und journal.csv (Reihenfolge tragend, Header stimmt stets mit der XML überein).
delete_user() implementiert trigger-sichere DSGVO-Löschung:1. GoBD-Trigger bleiben durchgehend aktiv — kein Deaktivieren zu irgendeinem Zeitpunkt
2. Pseudonymisierung statt Löschung: PII-Felder →
'DSGVO_REDACTED' (is_gdpr_erased = 1)3. Trigger erlauben ausschließlich diese DSGVO-Pseudonymisierung — alle anderen Änderungen blockiert
4. Audit-Trail bleibt vollständig erhalten — nur PII-Felder pseudonymisiert
5. Aufbewahrungsfristen (§ 147 AO) eingehalten — pseudonymisierte Datensätze bis Fristablauf gespeichert
Für ein rechtsverbindliches Testat wenden Sie sich an eine zugelassene Wirtschaftsprüfungsgesellschaft (z.B. nach IDW PS 880 für GoBD oder ISO 27001 für Informationssicherheit).
Interne Dokumentation · Kein Testat · Stand: 2026-06-09 · Version 2.0