BELEGDATUM#01 · Entscheidungsvorlage fuer JC

Belegdatum oder Eingangsdatum

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.

Gemessen 06.09.2026, 00:47–01:40 MESZ master b589459b lesend, kein --apply documents: 863
Erstens — die uebernommene Zahl

Nicht 104 Belege haben kein Belegdatum, sondern 351

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.

Diese Vorlage bearbeitet die mittleren 104. Die 184 gehen an den Steuerberater, die 63 an TRIAGE#01. Alle 351 haben invoice_date IS NULL.
Zweitens — die vier Quellen, einzeln gezaehlt

Wie viele deckt jede Quelle wirklich?

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.

QuelleDeckungWas an dieser Stelle stehtWert
Belegtext + rag_chunks, mit Etikett7 / 104 „Rechnungsdatum“, „Billing date“ — der Beleg sagt es selbst ECHT
PDF /CreationDate, Aussteller-Erzeuger3 / 104 Hiscox-Policendruck (Smart Communications) — Erzeugung = Ausstellung ECHT
ai_suggestion.invoice_date1 / 104 Der Schluessel steht in 73 Zeilen — 72-mal mit dem Wert null ECHT
PDF /CreationDate, Abbild-Erzeuger18 / 104 RICOH-Scanner, Chrome-Druck, Adobe Scan — Scan- und Druckzeit Ersatz
Dateiname und Ablagepfad47 / 104 A2_JJJJ-MM-TT_ ist das Ablagedatum; bei Banking-CSV das Exportdatum Ersatz
Belegtext, aber falsches Etikett45 / 104 Faelligkeit, Mail-Kopf, Positionsdaten einer Reisekostenliste Ersatz
date_received / date_scanned102 / 104
104 / 104
Eingang bei uns und Scan der Pipeline — nie das Belegdatum Ersatz
EXIF, media_meta, mail_date_received0 / 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.

Drittens — die gefaehrliche Verwechslung

Bei 3 von 7 haette das Eingangsdatum das falsche Jahr gesetzt

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.

BelegEchtes BelegdatumQuelle des Fundes date_receivedJahresversatz
#3272026-04-01Belegtext „Billing date“2026-04-010
#72382025-06-18LLM-Auszug + Aussteller-PDF2026-05-05+1 Jahr
#72412025-06-18Aussteller-PDF (Hiscox)2026-05-05+1 Jahr
#75242026-05-19Belegtext „Rechnungsdatum“2026-05-220
#77822026-05-01Belegtext „Rechnungsdatum“2026-06-080
#79762026-04-01Belegtext „Billing date“2026-06-120
#79792025-06-18Aussteller-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.

Der Griff, der die Metadaten benutzbar macht

Der Producer sagt, was das Erzeugungsdatum ist

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.

ProducerDateienUrteilWas das Datum ist
Smart Communications3AusstellerPolicendruckstrasse von Hiscox — Belegdatum-Indiz
Skia/PDF (m146, m147)11AbbildChrome „Drucken als PDF“ — Druckzeit
RICOH IM C30005AbbildBuerogeraet — Scanzeit
Microsoft: Print To PDF2AbbildWindows-Druck — Druckzeit
Adobe Scan for iOS, MuPDF, ohne8Enthaltungkein CreationDate im Trailer

Ein unbekannter Producer wird nicht zum Aussteller erklaert. Die Vorgabe ist Enthaltung — Unkenntnis ist kein Beleg.

Was die 104 wirklich sind

39 sind gar keine lebenden Belege, 42 sind Kontoauszuege

GruppeAnzahlWas daraus folgt
Banking-CSV42 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_run39 Darunter 9 Testlaeufe mit Namen wie iter48_b4_e2e_csv. Diese Zeilen brauchen wahrscheinlich gar keine Frist. Entscheidung: JC.
Lebende Belege65 Davon 5 mit belegbarem Datum, 60 nur mit Ersatzdatum.
Drive-Zeiger tot oder unsichtbar24 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.
Empfehlung — drei Fragen, drei Antworten

Was ich vorschlage

1
Setzen wir die 5 lebenden Belege mit belegbarem Datum? #327, #7238, #7241, #7976, #7979. Jedes Datum hat ein Etikett oder einen Aussteller-Erzeuger, drei davon zwei unabhaengige Zeugen. 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.
2
Laeufst du 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.
3
Was ist der Fristbeginn eines Kontoauszugs, und brauchen Testzeilen eine Frist? 42 Banking-CSV und 39 nicht lebende Zeilen machen zusammen drei Viertel der 104 aus. Beides sind Entscheidungen, keine Messungen — die eine gehoert dem Steuerberater (Auszugsdatum als Fristbeginn?), die andere dir (tragen rejected und test_run ueberhaupt eine Aufbewahrungspflicht?). Empfehlung: beide jetzt stellen — sie entlasten 81 der 104.
Die Tabelle — alle 104

Beleg fuer Beleg

104 Zeilen
BelegEntitaetBelegartStatus Gefundenes DatumQuelle des FundesZuversicht

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).