Von 104 Belegen ohne Aufbewahrungsfrist haben 7 ein belegbares Belegdatum. Fuer die uebrigen 97 gibt es nur ein Ersatzdatum — Eingang, Scan, Druck, Ablage, Export. Wer eines davon einsetzt, schreibt eine falsche Frist, die richtig aussieht. Diese Vorlage schlaegt deshalb 5 Setzungen vor und 97 Kennzeichnungen.
--apply
documents: 863
Der Nachtrag meldet 104 „kein Belegdatum“.
Das ist richtig gezaehlt und trotzdem nicht die Menge: frist_bestimmen prueft
der Reihe nach Land, dann Regel, dann Datum, und nennt nur den ersten Blocker.
Wer 104 als Bestand liest, uebersieht
247 weitere Belege, denen das Datum ebenfalls fehlt —
es faellt nur nicht auf, weil vorher etwas anderes fehlt.
invoice_date IS NULL.
Nicht „existiert die Quelle“, sondern „wie viele der 104 deckt sie“. Zwei Quellen tragen ein echtes Belegdatum, vier tragen ein Ersatzdatum, und eine Quelle hat sich als Nullbefund entpuppt, obwohl sie voll aussah.
| Quelle | Deckung | Was an dieser Stelle steht | Wert |
|---|---|---|---|
Belegtext + rag_chunks, mit Etikett | 7 / 104 | „Rechnungsdatum“, „Billing date“ — der Beleg sagt es selbst | ECHT |
PDF /CreationDate, Aussteller-Erzeuger | 3 / 104 | Hiscox-Policendruck (Smart Communications) — Erzeugung = Ausstellung | ECHT |
ai_suggestion.invoice_date | 1 / 104 | Der Schluessel steht in 73 Zeilen — 72-mal mit dem Wert null |
ECHT |
PDF /CreationDate, Abbild-Erzeuger | 18 / 104 | RICOH-Scanner, Chrome-Druck, Adobe Scan — Scan- und Druckzeit | Ersatz |
| Dateiname und Ablagepfad | 47 / 104 | A2_JJJJ-MM-TT_ ist das Ablagedatum; bei Banking-CSV das Exportdatum |
Ersatz |
| Belegtext, aber falsches Etikett | 45 / 104 | Faelligkeit, Mail-Kopf, Positionsdaten einer Reisekostenliste | Ersatz |
date_received / date_scanned | 102 / 104 104 / 104 |
Eingang bei uns und Scan der Pipeline — nie das Belegdatum | Ersatz |
EXIF, media_meta, mail_date_received | 0 / 104 | In diesen drei Feldern nicht gefunden — sie sind fuer die 104 durchgehend leer | leer |
Ausdruecklich nicht als Quelle genutzt: intake_text und
der Mailbetreff. Das ist die Weiterleitungsmail samt Signaturblock, nicht der Beleg —
dort stehen 21 Treffer „Gesendet:“ und 18 „Von:“, jeder davon ein
Datum, das richtig gefunden und falsch zugeordnet waere.
Das ist keine Sorge, sondern eine Gegenprobe: an genau den sieben Belegen, deren echtes Belegdatum wir kennen, laesst sich nachrechnen, was ein Ersatzdatum angerichtet haette. Die Frist rechnet ab Jahresende — ein Jahresversatz verschiebt sie um ein volles Jahr.
Der Extremfall liegt ausserhalb dieser sieben: #7484 wurde am 09.01.2023 gescannt und erreichte uns am 20.05.2026. Ein Eingangsdatum als Belegdatum haette die Frist drei Jahre zu spaet enden lassen.
| Beleg | Echtes Belegdatum | Quelle des Fundes | date_received | Jahresversatz |
|---|---|---|---|---|
| #327 | 2026-04-01 | Belegtext „Billing date“ | 2026-04-01 | 0 |
| #7238 | 2025-06-18 | LLM-Auszug + Aussteller-PDF | 2026-05-05 | +1 Jahr |
| #7241 | 2025-06-18 | Aussteller-PDF (Hiscox) | 2026-05-05 | +1 Jahr |
| #7524 | 2026-05-19 | Belegtext „Rechnungsdatum“ | 2026-05-22 | 0 |
| #7782 | 2026-05-01 | Belegtext „Rechnungsdatum“ | 2026-06-08 | 0 |
| #7976 | 2026-04-01 | Belegtext „Billing date“ | 2026-06-12 | 0 |
| #7979 | 2025-06-18 | Aussteller-PDF (Hiscox) | 2026-06-12 | +1 Jahr |
Die Richtung ist die harmlosere — ein Eingangsdatum liegt spaeter,
die Frist endet also zu spaet und nicht zu frueh. Aber aufbewahrung_frueh_bis
steht dann falsch im Bestand und sieht geprueft aus.
Jedes PDF traegt ein /CreationDate, und es sieht ueberall gleich aus.
Erst der /Producer sagt, ob es ein Belegdatum sein kann. Ohne diese Unterscheidung
waere die Metadatenquelle ein Rateautomat mit Beleg: die Fundstelle stimmt, sie beweist nur
etwas anderes.
| Producer | Dateien | Urteil | Was das Datum ist |
|---|---|---|---|
Smart Communications | 3 | Aussteller | Policendruckstrasse von Hiscox — Belegdatum-Indiz |
Skia/PDF (m146, m147) | 11 | Abbild | Chrome „Drucken als PDF“ — Druckzeit |
RICOH IM C3000 | 5 | Abbild | Buerogeraet — Scanzeit |
Microsoft: Print To PDF | 2 | Abbild | Windows-Druck — Druckzeit |
Adobe Scan for iOS, MuPDF, ohne | 8 | Enthaltung | kein CreationDate im Trailer |
Ein unbekannter Producer wird nicht zum Aussteller erklaert. Die Vorgabe ist Enthaltung — Unkenntnis ist kein Beleg.
| Gruppe | Anzahl | Was daraus folgt |
|---|---|---|
| Banking-CSV | 42 | Ein Kontoauszug traegt naturgemaess kein Belegdatum. Die Fristenliste hat fuer ihn eine Regel, die eines voraussetzt — das ist eine Regelluecke, keine Datenluecke. Fristbeginn muesste das Auszugsdatum sein. Entscheidung: Steuerberater. |
duplicate / rejected / test_run | 39 | Darunter 9 Testlaeufe mit Namen wie
iter48_b4_e2e_csv. Diese Zeilen brauchen wahrscheinlich gar keine Frist.
Entscheidung: JC. |
| Lebende Belege | 65 | Davon 5 mit belegbarem Datum, 60 nur mit Ersatzdatum. |
| Drive-Zeiger tot oder unsichtbar | 24 | 12 Zeilen haben gar keine drive_file_id, 12 liefern dem Dienstkonto
einen 404. 404 heisst „ich darf nicht sehen“, nicht „gibt es
nicht“ — kein Beleg wird deshalb als verloren gefuehrt. 80 Zeiger leben. |
05_SCHEMA/PROPOSED_belegdatum01_sieben_belegbare_daten.sql liegt fertig,
mit VERIFY vorher und nachher. Du fuehrst sie aus, nicht die Lane.
Empfehlung: ja — 351 wird zu 346.
aufbewahrung_nachtragen.py --apply noch einmal?
Heute sind die 97 stumm: invoice_date ist leer und nichts sagt, warum.
Diese Frage hat SCREEN#08 schon halb beantwortet — gefunden beim Nachzug,
nicht beim Planen: seit master f43c8374 schreibt der Nachtrag den
aufbewahrung_grund auch fuer Belege ohne Frist. Es braucht also
kein neues Feld und keinen neuen Bau, nur einen erneuten scharfen Lauf.
Gegengemessen 06.09. 01:40: 428 Belege tragen einen Grund,
0 von 435 ohne Frist — der Umbau ist gemergt und
noch nie gelaufen.
Empfehlung: ja, sofort. Offen bleibt nur, ob der Grundtext auch das
gefundene Ersatzdatum nennen soll — damit niemand es spaeter gutmeinend einsetzt.
rejected und
test_run ueberhaupt eine Aufbewahrungspflicht?).
Empfehlung: beide jetzt stellen — sie entlasten 81 der 104.
| Beleg | Entitaet | Belegart | Status | Gefundenes Datum | Quelle des Fundes | Zuversicht |
|---|
Beleg-IDs verlinken auf Drive. Wo der Zeiger fehlt oder das Dienstkonto einen 404 bekommt, steht die ID ohne Link — das ist ein toter Zeiger, kein fehlender Beleg.
Gemessen lesend gegen documents und rag_chunks am
06.09.2026, Basis master a5b4e5eb. Werkzeug:
08_OPS/belegdatum01/vorschlag_belegdatum.py (kein --apply,
10 netzfreie Selbsttests). Es wurde nichts in JCs Bestand geschrieben.
Die Fristenliste selbst ist weiterhin ohne Steuerberater-Testat —
diese Vorlage aendert daran nichts.
Im Werk: Kompendium-Hub ·
Dokumentmanagement im KI-Zeitalter (die Ablage, aus der
diese Belege kommen) ·
Datenfluss — Touch Once (Eingang, Verstehen,
Klaeren — die Kette, in der das Belegdatum haette entstehen sollen).