# 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 – Steuerkonten-Buchungszeilen** (Kz 61/62/67/83/84/91 via Steuerkonten) Normale Buchungen mit 7/19 % erzeugen automatisch Kindzeilen auf den zugehörigen Steuerkonten. Buchungen mit `steuerart=ig_erwerb_19` erzeugen zwei Kindzeilen auf 1574 (Kz 67) und 1774 (Kz 91) – jeweils `netto × 0,19`. Alle anderen EU-Steuerarten erhalten keine Kindzeilen. | Buchungstyp | Steuersatz | Kindzeile Konto | Kennzahl | |---|---|---|---| | Ausgabe, steuerart=normal | 19 % | 1576 | Kz 61 | | Ausgabe, steuerart=normal | 7 % | 1571 | Kz 62 | | Einnahme, steuerart=normal | 19 % | 1776 | Kz 83 | | Einnahme, steuerart=normal | 7 % | 1771 | Kz 84 | | Ausgabe, steuerart=ig_erwerb_19 | – | 1574 (netto×0,19) | Kz 67 | | Ausgabe, steuerart=ig_erwerb_19 | – | 1774 (netto×0,19) | Kz 91 | **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/67 laufen über Kindzeilen (Quelle 2) ### 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 | Steuerkonto | `SUM(betrag_netto)` WHERE `ustva_kz='83'` (Konto 1776) | | **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 | Steuerkonto | `SUM(betrag_netto)` WHERE `ustva_kz='84'` (Konto 1771) | | **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 | Steuerkonto | `SUM(betrag_netto)` WHERE `ustva_kz='91'` (Konto 1774) | | **61** | Vorsteuerbeträge aus Eingangsrechnungen 19 % | § 15 Abs. 1 Nr. 1 UStG | Steuerkonto | `SUM(betrag_netto)` WHERE `ustva_kz='61'` (Konto 1576) | | **62** | Vorsteuerbeträge aus Eingangsrechnungen 7 % | § 15 Abs. 1 Nr. 1 UStG | Steuerkonto | `SUM(betrag_netto)` WHERE `ustva_kz='62'` (Konto 1571) | | **67** | Vorsteuer aus innergemeinschaftlichem Erwerb | § 15 Abs. 1 Nr. 3 UStG | Steuerkonto | `SUM(betrag_netto)` WHERE `ustva_kz='67'` (Konto 1574) | | **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 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** | 1576 (Abziehbare Vorsteuer 19 %) | VSt-Buchungszeilen; Betriebsausgabe-Konten tragen diese Kennzahl **nicht** mehr | | **62** | 1571 (Abziehbare Vorsteuer 7 %) | VSt-Buchungszeilen; Betriebsausgabe-Konten tragen diese Kennzahl **nicht** mehr | | **83** | 1776 (Umsatzsteuer 19 %) | USt-Buchungszeilen für Ausgangsrechnungen | | **84** | 1771 (Umsatzsteuer 7 %) | USt-Buchungszeilen für Ausgangsrechnungen | 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:** `` - **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 %) | `` | ganzzahlig | Wert 0 → Tag wird weggelassen | | `Kz 83` (USt 19 %) | – | – | **nicht übertragen**, ELSTER leitet serverseitig aus Kz 81 × 19 % ab | | `Kz 86` (Bemessungsgrundlage 7 %) | `` | ganzzahlig | Wert 0 → Tag wird weggelassen | | `Kz 84` (USt 7 %) | – | – | **nicht übertragen**, ELSTER leitet serverseitig aus Kz 86 × 7 % ab | | `Kz 35` | `` | ganzzahlig | – | | `Kz 41` | `` | ganzzahlig | – | | `Kz 44` | `` | ganzzahlig | – | | `Kz 89` | `` | ganzzahlig | – | | `Kz 93` | `` | ganzzahlig | – | | `Kz 61` | `` | 2 Dezimalstellen | – | | `Kz 62` | `` | 2 Dezimalstellen | – | | `Kz 67` | `` | 2 Dezimalstellen | – | | `Kz 66` | `` | 2 Dezimalstellen | – | | `Kz 69` (Zahllast/Erstattung) | `` | 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 `0` 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 `0` 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.