Steuerkram/docs/berechnungslogik.md

14 KiB
Raw Blame History

Berichte – Zuordnungsregeln

Dieses Dokument beschreibt, wie Buchungen in die beiden steuerlichen Berichte einfließen. Bei Änderungen an EuerCalculator.php, UstvaCalculator.php oder ElsterXmlService.php muss dieses Dokument mit aktualisiert werden.


EÜR (Einnahmen-Überschuss-Rechnung)

Datei: src/Services/EuerCalculator.php

Die EÜR basiert auf dem Feld accounts.kontenart sowie accounts.euer_zeile des Kategorie-Kontos. Das Feld buchungstyp wird nicht ausgewertet. Stornobuchungen (is_reversal = 1) werden nicht explizit ausgefiltert – sie tragen negative Beträge und heben damit die ursprüngliche Buchung automatisch auf (Summe = 0).

Spaltenauswahl nach Kontenart und euer_zeile

kontenart euer_zeile EÜR-Abschnitt
Betriebseinnahme beliebig Betriebseinnahmen
Betriebsausgabe ≠ '51' Betriebsausgaben (fließen in total_ausgaben und gewinn ein)
Betriebsausgabe '51' Nicht abzugsfähige Betriebsausgaben (KZ 165) – eigener Abschnitt, nicht in total_ausgaben oder gewinn
Privat beliebig nicht in EÜR (Privatentnahmen/-einlagen beeinflussen den Gewinn nicht)
Zahlungskonto, Verbindlichkeit beliebig nicht in EÜR

EÜR-Zeile 51 / KZ 165 entspricht den „Nicht abziehbaren Betriebsausgaben nach § 4 Abs. 5 EStG" (z.B. nicht abzugsfähige Bewirtungskosten auf Konten 4654, 4656; nicht abzugsfähige Geschenke auf 4635, 4636; nicht abzugsfähiger Arbeitszimmeranteil auf 4289). Diese Konten werden im EÜR-Bericht unterhalb der Betriebsausgaben in einem separaten Abschnitt angezeigt.

Vorzeichen

betrag_netto wird ohne abs() direkt summiert:

  • Positiver Wert → addiert zur jeweiligen Spalte
  • Negativer Wert → mindert die jeweilige Spalte (z.B. Gutschriften, Erlösschmälerungen)

Sortierung und Ergebnis

  • Gruppierung: je Kategorie-Konto (accounts.id), ein Eintrag pro Konto
  • Sortierung: nach accounts.kontonummer aufsteigend
  • Ergebnis: total_einnahmen − total_ausgaben = gewinn

UStVA (Umsatzsteuervoranmeldung)

Dateien: src/Services/UstvaCalculator.php, src/Services/ElsterXmlService.php

Die UStVA muss zwei Anforderungen gleichzeitig erfüllen:

  1. ELSTER-Konformität – die exportierte XML-Datei muss dem aktuellen Schema „Anmeldungssteuern Upload" (Namespace http://finkonsens.de/elster/elsteranmeldung/ustva/v{Jahr}) entsprechen, damit sie über Mein ELSTER hochgeladen werden kann.
  2. Materielles deutsches Steuerrecht – jede Buchung muss in die nach § 18 UStG i.V.m. § 3 UStDV inhaltlich richtige Kennzahl einfließen.

Diese Berechnung wird ausschließlich für monatliche Voranmeldungen unterstützt. Quartalsweise oder jährliche UStVA, Dauerfristverlängerung (§ 18 Abs. 6 UStG) und Sondervorauszahlung (§ 47 UStDV) sind nicht implementiert (siehe Abschnitt „Bekannte Einschränkungen").

Datenquellen

UstvaCalculator::calculate(year, month) kombiniert drei Quellen, deren Ergebnisse zusammengeführt werden:

Quelle 1 – kontobasiert (accounts.ustva_kz des Kategorie-Kontos) SKR03-Erlös- und Steuerkonten tragen ihre Kennzahl direkt am Konto. Buchungen mit gefülltem bookings.steuerart werden aus dieser Quelle ausgeschlossen, um Doppelzählung mit Quelle 3 zu vermeiden. Konten mit ustva_kz='61' oder '62' werden nicht mehr kontobasiert ausgewertet (siehe Quelle 2).

Quelle 2 – buchungsbasiert (bookings.ust_satz, nur Vorsteuer) Jede Buchung mit buchungstyp='Ausgabe' und betrag_ust ≠ 0 fließt anhand ihres tatsächlichen USt-Satzes in Kz 61 (19 %) bzw. Kz 62 (7 %) ein. Damit ist es egal, ob das Konto auf USt 19 % oder 7 % gebucht wird – maßgeblich ist allein der Satz auf der Eingangsrechnung. EU-Buchungen (steuerart ∈ {ig_lieferung, export, ig_erwerb_19, ig_erwerb_7}) werden hier ausgeschlossen, da deren Vorsteuer über Kz 67 läuft.

Quelle 3 – steuerartbasiert (bookings.steuerart) Auslandssachverhalte unabhängig vom gebuchten Konto:

  • ig_lieferung → Kz 41 (steuerfreie ig. Lieferung, § 4 Nr. 1b UStG)
  • export → Kz 44 (steuerfreie Ausfuhr in Drittland, § 4 Nr. 1a UStG)
  • ig_erwerb_19 → Kz 89 (Bemessungsgrundlage) + Kz 91 (USt = 19 %)
  • ig_erwerb_7 → Kz 93 (Bemessungsgrundlage) + Kz 94 (USt = 7 %)

Implementierte Kennzahlen

Kz Bezeichnung (ELSTER) Materiell-rechtliche Grundlage Quelle Berechnung
81 Steuerpflichtige Umsätze 19 % – Bemessungsgrundlage § 12 Abs. 1 UStG Konto SUM(betrag_netto) WHERE ustva_kz='81'
83 USt auf steuerpflichtige Umsätze 19 % § 12 Abs. 1 UStG Konto SUM(betrag_ust) WHERE ustva_kz='81'
86 Steuerpflichtige Umsätze 7 % – Bemessungsgrundlage § 12 Abs. 2 UStG Konto SUM(betrag_netto) WHERE ustva_kz='86'
84 USt auf steuerpflichtige Umsätze 7 % § 12 Abs. 2 UStG Konto SUM(betrag_ust) WHERE ustva_kz='86'
35 Umsätze zu anderen Steuersätzen Restkategorie für nicht-Standard-Sätze Konto SUM(betrag_netto) WHERE ustva_kz='35'
41 Steuerfreie ig. Lieferungen mit USt-IdNr. § 4 Nr. 1b i.V.m. § 6a UStG Konto + Steuerart ustva_kz='41' ODER steuerart='ig_lieferung'
44 Steuerfreie Ausfuhrlieferungen Drittland § 4 Nr. 1a i.V.m. § 6 UStG Konto + Steuerart ustva_kz='44' ODER steuerart='export'
89 Ig. Erwerb 19 % – Bemessungsgrundlage § 1a UStG, § 12 Abs. 1 UStG Steuerart SUM(betrag_netto) WHERE steuerart='ig_erwerb_19'
91 USt auf ig. Erwerb 19 % § 1a UStG berechnet Kz 89 × 0,19
93 Ig. Erwerb 7 % – Bemessungsgrundlage § 1a UStG, § 12 Abs. 2 UStG Steuerart SUM(betrag_netto) WHERE steuerart='ig_erwerb_7'
94 USt auf ig. Erwerb 7 % § 1a UStG berechnet Kz 93 × 0,07
61 Vorsteuerbeträge aus Eingangsrechnungen 19 % § 15 Abs. 1 Nr. 1 UStG Buchung SUM(betrag_ust) WHERE buchungstyp='Ausgabe' AND ROUND(ust_satz)=19
62 Vorsteuerbeträge aus Eingangsrechnungen 7 % § 15 Abs. 1 Nr. 1 UStG Buchung SUM(betrag_ust) WHERE buchungstyp='Ausgabe' AND ROUND(ust_satz)=7
67 Vorsteuer aus innergemeinschaftlichem Erwerb § 15 Abs. 1 Nr. 3 UStG abgeleitet Kz 91 + Kz 94
66 Vorsteuerbeträge gesamt § 15 UStG abgeleitet Kz 61 + Kz 62 + Kz 67
69 Verbleibende USt-Vorauszahlung / Erstattung § 18 Abs. 1 UStG abgeleitet (Kz 83 + Kz 84 + Kz 91 + Kz 94) − Kz 66

Hinweis zur Bezeichnung Kz 61/62: Die offizielle ELSTER-Bezeichnung „Kz 61 = Vorsteuer aus innergemeinschaftlichem Erwerb" (§ 15 Abs. 1 Nr. 3 UStG) und „Kz 62 = Einfuhrumsatzsteuer" (§ 15 Abs. 1 Nr. 2 UStG) wird hier abweichend für Inlands-VSt 19 % bzw. 7 % verwendet. Diese Konvention stammt aus den frühen Migrationen und wurde nie auf die offiziellen Kz 66 (Inlandsvorsteuer 19 %) und Kz 66 (Inlandsvorsteuer 7 %) zurückgeführt. Für die ELSTER-Übertragung ist das unkritisch, weil das XML alle Vorsteuerwerte rechnerisch in Kz 66 zusammenfasst – materiell-rechtlich sollte dieser Punkt aber bei der nächsten Refaktorierung geprüft werden (siehe „Offene Punkte"). Migration 017 dokumentiert die Diskrepanz und fixt sie für VSt-Konten teilweise; Migration 022 hat sie für die buchungsbasierte Auswertung bewusst wieder eingeführt.

Kontozuordnung im SKR03-Kontenrahmen

Die folgenden Konten tragen heute eine UStVA-Kennzahl (Stand Migration 026):

ustva_kz Konten Bedeutung
81 8400, 8570, 8720, 8801, 8820, 8922 Inlandsumsätze 19 %, inkl. Eigenverbrauch + Anlageverkäufe
86 8300, 8710, 8921 Inlandsumsätze 7 %, inkl. Eigenverbrauch
35 (derzeit kein Konto) Restkategorie
41 8125 (falls vorhanden) Steuerfreie ig. Lieferung
44 8120 (falls vorhanden) Ausfuhren
61 alle VSt19-Konten (3106, 3400, 4230, 4240, 4250, 4530–4590, 4600–4636, 4650, 4654, 4666, 4676, 4780, 4800–4809, 4900, 4920, 4925, 4930, 4945, 4950, 4955, 4960–4985, …) wird vom Calculator ignoriert, Wert kommt aus bookings.ust_satz
62 alle VSt7-Konten (3108, 3300, 4651, 4656, 4940, …) wird vom Calculator ignoriert, Wert kommt aus bookings.ust_satz

Eingangsumsätze ohne Vorsteuer (Konten 8100, 8105, 8110, 8120) sollten gemäß Migration 017 die Kennzahlen 48 (steuerfrei ohne VoSt-Abzug, § 4 Nr. 8–29) bzw. 43 (Ausfuhr Drittland) tragen. Diese Kennzahlen werden vom UstvaCalculator aktuell nicht berechnet – sie würden also weder im Bericht noch im XML auftauchen, selbst wenn ein Konto so gepflegt ist. Siehe „Offene Punkte".


ELSTER-XML-Export

Datei: src/Services/ElsterXmlService.php

Schema und Format

  • Namespace: http://finkonsens.de/elster/elsteranmeldung/ustva/v{Jahr} – ELSTER-Schema „Anmeldungssteuern Upload" (kein ERiC-Client erforderlich, der Upload erfolgt manuell über Mein ELSTER → Datentransfer → Elster-XML)
  • Wurzelelement: <Anmeldungssteuern version="{Jahr}">
  • Encoding: UTF-8
  • Format: mit formatOutput=true lesbar eingerückt

Pflichtelemente

Anmeldungssteuern
├── DatenLieferant (Name, Strasse, PLZ, Ort, Telefon, Email)
├── Erstellungsdatum (Ymd)
└── Steuerfall
    ├── Berater (alle Felder leer, da Selbstabgabe)
    ├── Mandant (Name = Nachname, Vorname, MandantenNr leer, Bearbeiterkennzeichen leer)
    ├── Unternehmer (Bezeichnung = Firma, Name, Vorname, Str, Hausnummer, PLZ, Ort, Land=Deutschland, …)
    └── Umsatzsteuervoranmeldung
        ├── Jahr
        ├── Zeitraum (zweistellig, "01"–"12")
        ├── Steuernummer (nur Ziffern, ohne Trennzeichen oder Bindestriche)
        └── Kz-Felder (siehe unten)

Mapping interner Kennzahlen → XML-Tags

intern (UstvaCalculator) XML-Tag Format Bemerkung
Kz 81 (Bemessungsgrundlage 19 %) <Kz81> ganzzahlig Wert 0 → Tag wird weggelassen
Kz 83 (USt 19 %) – – nicht übertragen, ELSTER leitet serverseitig aus Kz 81 × 19 % ab
Kz 86 (Bemessungsgrundlage 7 %) <Kz86> ganzzahlig Wert 0 → Tag wird weggelassen
Kz 84 (USt 7 %) – – nicht übertragen, ELSTER leitet serverseitig aus Kz 86 × 7 % ab
Kz 35 <Kz35> ganzzahlig –
Kz 41 <Kz41> ganzzahlig –
Kz 44 <Kz44> ganzzahlig –
Kz 89 <Kz89> ganzzahlig –
Kz 93 <Kz93> ganzzahlig –
Kz 61 <Kz61> 2 Dezimalstellen –
Kz 62 <Kz62> 2 Dezimalstellen –
Kz 67 <Kz67> 2 Dezimalstellen –
Kz 66 <Kz66> 2 Dezimalstellen –
Kz 69 (Zahllast/Erstattung) <Kz39> 2 Dezimalstellen nur bei Zahllast > 0 ausgegeben; Erstattung bleibt komplett ohne Tag, da das Schema keine negativen Vorzeichen zulässt

Rundungs- und Formatregeln

  • Bemessungsgrundlagen werden mit (int)round($v) gerundet und ohne Dezimalpunkt ausgegeben (Kz81, Kz86, Kz35, Kz41, Kz44, Kz89, Kz93).
  • Steuerbeträge werden mit number_format($v, 2, '.', '') ausgegeben (Kz61, Kz62, Kz67, Kz66, Kz39).
  • Felder mit Wert 0 werden weggelassen – ELSTER toleriert fehlende Tags, aber keine <KzXX>0</KzXX> ohne Wert.
  • Steuernummer: alle Nicht-Ziffern werden via preg_replace('/[^0-9]/', '', …) entfernt. ELSTER erwartet die 13-stellige bundeseinheitliche Form (Bundesland-Finanzamt-Stammnummer-Prüfziffer).

Persistenz

Beim Speichern (POST /tax/ustva/{year}/{month}/save) wird die berechnete UStVA in ustva_submissions als (year, month, xml_content, field_values) per UPSERT abgelegt. Beim Download (GET /tax/ustva/{year}/{month}/xml) wird das XML stets neu berechnet, nicht aus der Tabelle gelesen.


Offene Punkte / Bekannte Einschränkungen

Diese Punkte sind nicht abgedeckt und können je nach Sachverhalt zu fehlerhaften Voranmeldungen führen. Vor Abgabe an das Finanzamt manuell prüfen:

Bereich Fehlt Folge
Kz 43 (Ausfuhren Drittland § 4 Nr. 1a) Kennzahl wird nicht berechnet, obwohl Migration 017 sie für Konto 8120 vorsieht Beträge tauchen nicht im Bericht auf, falls ein Konto auf ustva_kz='43' läuft. Die parallele Steuerart export → Kz 44 ist abgedeckt.
Kz 48 (Steuerfreie Umsätze § 4 Nr. 8–29 ohne VoSt-Abzug) Kennzahl wird nicht berechnet Konten 8100, 8105, 8110 mit ustva_kz='48' (Migration 017) werden ignoriert
Reverse-Charge als Empfänger (§ 13b UStG) – Kz 84/85, Kz 67 Steuerart fehlt im Buchungsmodell Bauleistungen, EU-Dienstleistungen, ausländische Subunternehmer können nicht korrekt erfasst werden
Kleinunternehmerregelung (§ 19 UStG) – Kz 35 + Hinweis Kein Schalter im System Wer Kleinunternehmer ist, sollte gar keine UStVA abgeben
Dauerfristverlängerung / Sondervorauszahlung (Kz 38/39) Keine Eingabe für Kz 38 (Anrechnung Sondervorauszahlung Dezember) Kz 39 enthält den vollen Zahlbetrag ohne Anrechnung
Quartals- und Jahres-UStVA Nur Monat möglich (MONTH(buchungs_datum)) Quartals- oder Jahresanmelder müssen die Werte manuell aggregieren
Berichtigte Anmeldung (§ 153 AO) Kein Kennzeichen in ustva_submissions XML enthält keinen Berichtigungs-Hinweis
Nullmeldung Bei leerer UStVA werden alle Tags weggelassen, was ELSTER ablehnt Mindestens ein Wert oder explizites <Kz81>0</Kz81> sollte gesetzt sein
Kz 61/62-Bezeichnung Konvention weicht von offizieller ELSTER-Definition ab (siehe Hinweis oben) Schadet nicht der Übertragung, weil die Summe in Kz 66 stimmt; sollte aber dokumentiert oder bereinigt werden

Verifikation vor Abgabe

  1. Im Bericht (/tax/ustva/{year}/{month}) jede Kennzahl per Drill-down auf zugrundeliegende Buchungen prüfen.
  2. XML herunterladen und im ELSTER-Validator (https://portal.e-rechnung-bund.de gibt es nur für E-Rechnung – für die UStVA-XML in Mein ELSTER → Voranmeldungen → Datei hochladen die Vorprüfung nutzen) testen.
  3. Bei Auslandssachverhalten oder § 13b-Fällen die Werte mit dem amtlichen UStVA-Vordruck abgleichen.