14 KiB
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.kontonummeraufsteigend - 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:
- 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. - 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=truelesbar 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
- Im Bericht (
/tax/ustva/{year}/{month}) jede Kennzahl per Drill-down auf zugrundeliegende Buchungen prüfen. - 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.
- Bei Auslandssachverhalten oder § 13b-Fällen die Werte mit dem amtlichen UStVA-Vordruck abgleichen.