Vorlage an JC · STEUER#03 · Register #4066 · 11.10.2026 · entschieden: JE-216 · JE-217
Deine Brillen-Rechnung gehört buchhalterisch niemandem: sie ist privat. Für deine private Steuererklärung kann sie trotzdem zählen. Heute kann TGV genau diesen Satz nicht festhalten. Das Werkzeug zum Erkennen gibt es schon, aber es läuft nur, wenn der Planer es zufällig wählt. Die Felder zum Ablegen gibt es auch, aber sie sind leer. Und es gibt keinen Ort, an dem sich daraus eine Mappe für die Steuerberaterin bildet.
Anlass: JC 11.10. „Wir haben Buchhaltungsrelevant aber AUCH STEUERRELEVANT. … Neue Achse: Wie gehen wir damit um?“Live gemessen 11.10.: documents · txn_master · tax_filings · md_tax_tags · md_persons · information_schema (nur lesend)Code-Stand: master 92c1b9a66Nichts geschrieben
Entschieden am 11.10.
„Ja B“ — „Mit allen 4 Empfehlungen unter ‚Deine Entscheidungen — vier Fragen‘ einverstanden.“
Dazu JE-217: Der Steuer-Agent beherrscht drei Prozesse: ① Eingang prüfen und einordnen, ② vor dem Senden fehlende Belege nach JCs Situation finden, ③ neue Regelungen melden. KAI hilft beim Zusammentragen. Die vier roten Punkte der Lage-Tabelle werden gelöst.
Erster Echtfall: die Brillen-Rechnungen #8527 und #8528. Rechnungsdatum 02.10.2026, aber Leistung und Zahlung 2025 — du hast entschieden: Erklärung 2025. Daraus die Regel: die Mappe richtet sich nach dem Leistungszeitraum, nicht nach dem Rechnungsdatum. Das Feld dafür gibt es (period_from/period_to), an den Brillen ist es leer. Die Checkliste deiner Steuerberaterin ist angekommen (#8563, streng vertraulich).
Bau: STEUER#04 Bau-Blatt (05_SCHEMA/319_steuer04_steuer_zuordnung_und_mappe.sql) · STEUER#05 Vorschlag · STEUER#06 Mappe + Übergabe.
Empfehlung (vor dem Entscheid)
① Steuerrelevanz ist eine Zuordnung, kein Häkchen. Ein Beleg (oder eine Buchung) kann keiner, einer oder mehreren Steuererklärungen zugeordnet werden. Jede Zuordnung nennt Jahr, Person, Land und Kategorie. Eine Firmen-Gehaltsabrechnung gehört der C3 und ist Arbeitsmaterial für deine private Erklärung.
② TGV schlägt vor, du bestätigst. ORCH prüft jeden Privatbeleg und jeden Lohnbeleg der Firmen, nur mit einem EU-Modell. Der Vorschlag landet in der Mappe „Steuererklärung 2025 · JC · DE“. Erst dein Klick macht ihn gültig.
③ Die Mappe ist das Arbeitsmaterial. Sie ist nach der Checkliste deiner Steuerberaterin gegliedert: was da ist, was vorgeschlagen ist, was fehlt. Am Ende geht sie mit deiner Freigabe als ein Paket an die Beraterin. Steuerrelevante Privatbelege sind dabei mindestens vertraulich, Gesundheitsbelege streng vertraulich.
⛔ TGV rechnet keine Steuer und sagt nicht, was absetzbar ist. Es findet, ordnet und liefert. Ob und wie viel zählt, entscheidet die Steuerberaterin. Diese Grenze steht schon im Brief STEUER#01 (21.06.).
Lage · heute gemessen
| Ort | Was es kann | Was heute damit passiert |
|---|---|---|
Triage (agent_orch01/taxonomy.py) |
Belegart Steuer und Strom STEUER. Das bezeichnet aber nur, was ein Papier ist (Bescheid, Bescheinigung), nicht wofür es zählt. |
Eine Brillen-Rechnung wird zur Rechnung · privat. Ein Steuer-Merkmal bekommt sie nicht. Der Strom STEUER läuft durch dieselbe Kette wie Rechnungen. |
tax-extract (02_SKILLS/tgv-skill-tax-extract) |
Ordnet 12 Steuer-Kategorien zu, darunter Anlage N, KAP, Vorsorge, Spende, Handwerker/haushaltsnah, Krankheitskosten, außergewöhnliche Belastungen und Werbungskosten. Dazu Jahr, Betrag und Konfidenz. | Steht in keinem Worker-Set, nur auf der Erlaubt-Liste (taxonomy.py:177). Der LLM-Planer darf es trotzdem wählen, und er tut es manchmal: bis 11.10. 15 Belege, zuletzt deine Checkliste #8563 (korrigiert; vorher stand hier „ruft niemand auf“), Ergebnis nur im Rohfeld ai_suggestion. Ruft ein US-Modell direkt (claude-haiku) und überschreibt documents.status (skill.py:406–427). Und er liest nur die Vorschau extracted_text_snippet (skill.py:332), die bei 2.000 Zeichen abgeschnitten ist. Bei Privatbelegen stoßen 33 von 170 an diese Grenze, und 52 haben ein längeres extracted_markdown. Eine mehrseitige Jahresbescheinigung wird so nur halb gelesen. (Befund RAG#09, von mir nachgemessen.) Für einen Breitenlauf taugt er so nicht. |
Buchungen (txn_master) |
Spalten tax_flag und tax_tag → Katalog md_tax_tags (9 Einträge aus dem V3-Schema: ESt-VA/NZ, Spende, Rente-AV, KFZ, Werbung, USt-VA, 2× Grundsteuer) |
tax_tag ist an 0 von 1.640 Buchungen gesetzt, tax_flag an 4. Kein Code im Dienst liest oder schreibt sie. |
Steuer-Mappe (tax_filings, Mig 027) |
Je (Jahr, Entität, Eigner) ein Bündel mit Status collecting → ready_to_send → sent. Dazu der Zeiger documents.tax_filing_id. |
Genau eine Mappe: privat 2026, „ready_to_send“, Belegliste leer. Trotzdem zeigt #7321 auf sie. Kein Mandant, keine Person, kein Land. Nur für Admins (Mig 157). Der Versand-Skill ist eine n8n-Vorschau. |
Verträge (prf_contracts.tax_flags) |
Freitext-Liste je Vertrag, z. B. „Rentenbezugsmitteilung §22a EStG“ | Lebt, aber nur am Vertrag. Kein Beleg erbt es. |
Personen (md_persons) |
steuerlicher_kontext, haushaltsbezug, user_id |
8 Personen, 4 mit Steuer-Kontext. Das ist die fertige Antwort auf „wessen Erklärung?“. |
USt-Liste (fes_ap3/ustva_prep.py) · Buchhalter-Paket (WF-E) |
Umsatzsteuer je Firma × Monat · Versand je Entität | Firmen-Achse, kein Privatbeleg. Bleibt, wie es ist. |
KAI (chat_engine/executors_steuer.py) |
Pendlerpauschale und Fahrtenbuch-Summe, nur lesend | Die Steuer-Persona gibt es. Eine Frage wie „welche Belege fehlen für meine Steuer?“ beantwortet sie nicht. |
Privater Bestand (11.10.): 198 Belege, davon 74 Rechnung · 54 Sonstiges ·
25 Kontoauszug · 20 Vertrag · 9 Quittung · 8 Steuer · 4 Zahlungsbeleg · 1 Gutschrift. Korrigiert am Abend des 11.10.: Die Brillen-Rechnungen sind darunter, als #8527 und #8528 (Sichtwechsel Berlin, seit 02.10.). Meine Suche nach Brille, Optik, Fielmann und Augen in Lieferant, Betreff und Dateiname
hat den Namen „Sichtwechsel“ nicht getroffen. Die Reichweite stand dabei, das Urteil „nicht darunter“ war trotzdem zu groß. Daraus folgt: Stichwörter reichen nicht, die Erkennung muss den Inhalt lesen (STEUER#05).
Dazu kommt #7919, eine Apotheken-Rechnung aus Frankreich, Kategorie „Alltag“. Unter „vertraulich“ liegen 11 Privatbelege (Stufe „intern“). Korrigiert: Die 32 ohne Stufe zählen in der Rechtevergabe schon als „streng vertraulich“ (rag_conf_rank(NULL)=6, fail-closed); ich hatte sie fälschlich mitgezählt.
Reichweite der Suche nach einem „steuerrelevant“-Feld:
alle Spalten des Schemas public mit tax · steuer · deduct · abzug · categor · kategor im Namen, dazu 05_SCHEMA/*.sql,
02_SKILLS, 08_OPS und das Kompendium. Gefunden habe ich nur, was in der Tabelle steht.
Grafik · die neue Achse
Vorschau · Frage ①
documents und noch einmal an txn_master.tax_filings, um diese vier Felder ergänzt; eine zweite Mappen-Tabelle entsteht nicht.md_tax_tags wird um Land und Gruppe erweitert, keine neue Liste.documents.tags, und KAI sucht bei Bedarf.Vorschau · Arbeitsmaterial
Gegliedert nach der Checkliste deiner Steuerberaterin. 3 bestätigt · 2 Vorschläge · 2 fehlen.
| Kategorie | Belege | Stand |
|---|---|---|
| Einkünfte nichtselbständig | Lohnsteuerbescheinigung 2025 | fehlt |
| Kapitalerträge | #8057 · #8061 | bestätigt |
| Vorsorge | #8054 | bestätigt |
| Krankheitskosten | #7919 Apotheke | Vorschlag |
| unklar | #8052 | Vorschlag |
| Spenden | — | fehlt? |
Die Zahlen sind Beispiele. Die Belegnummern sind echt: tax-extract hat sie für das Steuerjahr 2025 so eingestuft. Die Einstufung von #7919 ist ein angenommener Vorschlag. Bauform: Ergebnis-Karte und Bestätigungs-Karte der Klärung. Die Übergabe nutzt die Freigabe-Karte wie beim Buchhalter-Versand. Keine neue Komponente.
Zum Abhaken
| Nr | Was ist darin | Konkrete Frage | Empfehlung |
|---|---|---|---|
| 1 | Datenform. Heute gibt es drei halbe Ansätze nebeneinander (tax_tag, tax_filings, ai_suggestion.tax_extract), und keiner ist im Einsatz. |
Variante A (Felder am Beleg), B (Zuordnung + Mappe) oder C (nur Etikett)? | B. Sie baut auf dem Vorhandenen auf: tax_filings wird die Mappe, md_tax_tags der Katalog, md_persons die Person. Neu ist nur die Zuordnungszeile. Die DDL legt dir das Bau-Blatt vor. |
| 2 | Erkennung. tax-extract kann es, läuft aber nicht. In der heutigen Form würde er Belegstatus überschreiben und Daten in die USA schicken. | ORCH macht für jeden Privatbeleg und jeden Lohnbeleg der Firmen einen Steuer-Vorschlag, nur mit EU-Modell. Gültig wird er erst mit deinem Klick in der Mappe. Einverstanden? | Ja. tax-extract kommt als Schritt in die bestehende Kaskade, kein neuer Agent. Er schreibt die Vorschlag-Zeile statt status. Zuerst ein Probelauf über die 198 Privatbelege; die Liste siehst du, bevor etwas gilt. |
| 3 | Datenschutz. 11 Privatbelege liegen unter „vertraulich“ (korrigiert von 43: Belege ohne Stufe gelten schon als streng). Gesundheitsbelege (Brille, Apotheke) sind nach DSGVO eine besondere Kategorie. | Regel: eine Steuer-Zuordnung hebt den Beleg auf mindestens „vertraulich“ und senkt ihn nie; die Kategorie Krankheitskosten hebt auf „streng vertraulich“. Die Mappe sieht nur, wer im Mandanten berechtigt ist, und die Person selbst. Einverstanden? | Ja. Das entspricht dem Ablage-Baum (Dokumentmanagement §5: „(Privat) Gesundheit · streng vertraulich“). Der Bau zeigt den Gegenbeweis: ein Viewer im Mandanten sieht die Mappe nicht, auch nicht über KAI. |
| 4 | Erste Mappe und Katalog. Die Checkliste deiner Steuerberaterin (STEUER#01: Checkliste Steuererklärung.xlsx) liegt nicht im Repo; gesucht im ganzen Repo-Baum nach dem Dateinamen. | (a) Mit welcher Erklärung fangen wir an: ESt 2025 · DE (falls noch offen) oder 2026? Und braucht es FR von Anfang an? (b) Schickst du die Checkliste, falls vorhanden auch das französische Gegenstück? | Deine Antwort. Mein Vorschlag: 2025 DE zuerst, weil mindestens vier Privatbelege dafür schon eingestuft sind (#8052, #8054, #8057, #8061). FR als zweites Land, sobald die Liste da ist. Bis dahin dienen die 12 Kategorien von tax-extract als Startliste. |
Danach
PROPOSED_-Datei. Die DDL fährst du. Dazu die Daten-Korrektur der Leiche #7321 / Mappe 1.extracted_markdown statt der 2.000-Zeichen-Vorschau, Ausgabe als Vorschlag-Zeile, Aufnahme ins Worker-Set; Probelauf über den Privatbestand.Hintergrund
02_SKILLS/tgv-skill-tax-extract/skill.py mit 12 Kategorien, Jahr, Betrag und Konfidenz, als Dienst-Endpunkt /api/skill/tax-extract (dispatch.py:416).tax_filings (Mig 027) mit Status-Kette bis sent.md_tax_tags (9 Einträge, Steuerart) und das Fremdschlüssel-Feld txn_master.tax_tag.md_persons mit steuerlicher_kontext und user_id.prf_contracts.tax_flags; ein Vertrag kann seinen Belegen die Kategorie vorschlagen (z. B. Vorsorge).core_tax (executors_steuer.py) mit Pendlerpauschale und Fahrtenbuch (STEUER#02, RKA).Wo das im Haus steht
01_ITERATIONS/STEUER_01_TAX_DOSSIER_ASSISTANT/BRIEF.md: Ziel, Phasen P0–P6, Grenze „nicht rechnen“.01_ITERATIONS/STEUER_02_PENDLERPAUSCHALE/: der erste gebaute Steuer-Baustein (tax_commute_configs).08_OPS/aufbewahrung_kanon.yaml:184: Aufbewahrungsfristen für steuerrelevante Unterlagen.tax_filings steht in der Admin-Liste von Mig 157; mit Mandant wandert es an die Mandanten-Wand.