EÜR umgebaut auf Kontenart statt Buchungstyp

This commit is contained in:
fds2610 2026-03-29 13:38:16 +02:00
parent 452fac2698
commit 37fcf53e8f
3 changed files with 48 additions and 28 deletions

View file

@ -9,33 +9,29 @@ Dieses Dokument beschreibt, wie Buchungen in die beiden steuerlichen Berichte ei
**Datei:** `src/Services/EuerCalculator.php`
Die EÜR basiert ausschließlich auf dem Feld `buchungstyp` der Buchung, kombiniert mit dem verknüpften Kategorie-Konto (`kategorie_konto_id → accounts`). Es gibt keine feste Zuordnung von Kontonummern zu bestimmten EÜR-Zeilen – jedes Konto erscheint als eigene Zeile in der jeweiligen Sektion.
Die EÜR basiert ausschließlich auf dem Feld `accounts.kontenart` des Kategorie-Kontos. Das Feld `buchungstyp` wird nicht ausgewertet. Stornobuchungen (`is_reversal = 1`) werden ausgeschlossen.
### Einnahmen
### Spaltenauswahl nach Kontenart
Bedingung: `buchungstyp = 'Einnahme'`
| kontenart | EÜR-Spalte |
|---|---|
| `Betriebseinnahme` | Einnahmen |
| `Betriebsausgabe` | Ausgaben |
| `Privat` | nicht in EÜR (Privatentnahmen/-einlagen beeinflussen den Gewinn nicht) |
| `Zahlungskonto`, `Verbindlichkeit` | nicht in EÜR |
Alle passenden Buchungen werden nach Kategorie-Konto gruppiert und als Einnahmen ausgewiesen. Der Nettobetrag (`betrag_netto`) wird summiert.
### Vorzeichen
### Ausgaben (Betriebsausgaben)
Bedingung: `buchungstyp = 'Ausgabe'`
Alle passenden Buchungen werden nach Kategorie-Konto gruppiert und als Betriebsausgaben ausgewiesen. Der Nettobetrag wird summiert.
`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
- Sortierung innerhalb beider Sektionen: nach `accounts.kontonummer` aufsteigend
- Stornobuchungen (`is_reversal = 1`) werden ausgeschlossen
- Gruppierung: je Kategorie-Konto (`accounts.id`), ein Eintrag pro Konto
- Sortierung: nach `accounts.kontonummer` aufsteigend
- Ergebnis: `total_einnahmen − total_ausgaben = gewinn`
### Übersicht
| Bedingung | Sektion im Bericht |
|---|---|
| `buchungstyp = 'Einnahme'` | Einnahmen |
| `buchungstyp = 'Ausgabe'` | Ausgaben / Betriebsausgaben |
---
## UStVA (Umsatzsteuervoranmeldung)

View file

@ -2,6 +2,21 @@
---
## 2026-03-29 – EÜR: Spaltenauswahl nach Kontenart statt Buchungstyp
### Geändert
- `EuerCalculator::calculate()` wertet `accounts.kontenart` aus statt `buchungstyp`
- `Betriebseinnahme` → Einnahmen-Spalte, `Betriebsausgabe` → Ausgaben-Spalte
- `Privat`, `Zahlungskonto`, `Verbindlichkeit` als Kategorie-Konto werden nicht in der EÜR ausgewiesen
- Vorzeichen von `betrag_netto` werden beibehalten (kein `abs()` mehr) – negative Beträge mindern die jeweilige Spalte
- Buchungen desselben Kontos werden unabhängig vom `buchungstyp` zu einem Eintrag zusammengefasst
### Betrifft
- `src/Services/EuerCalculator.php`
- `BERICHTE.md` (EÜR-Kapitel aktualisiert)
---
## 2026-03-29 – UStVA: kontonummernbasierte Kennzahlenberechnung
### Geändert

View file

@ -8,7 +8,15 @@ use Steuerkram\Database;
/**
* Berechnet die Einnahmen-Überschuss-Rechnung (EÜR) für ein Geschäftsjahr.
* Gruppiert alle Buchungen nach buchungstyp und Kategorie-Konto.
*
* Maßgeblich ist ausschließlich accounts.kontenart des Kategorie-Kontos:
* Betriebseinnahme → Einnahmen-Spalte
* Betriebsausgabe → Ausgaben-Spalte
* Privat / Zahlungskonto / Verbindlichkeit → nicht in EÜR
*
* Vorzeichen von betrag_netto werden beibehalten:
* positiver Wert → addiert zur jeweiligen Spalte
* negativer Wert → mindert die jeweilige Spalte (z.B. Gutschriften)
*/
class EuerCalculator
{
@ -20,14 +28,15 @@ class EuerCalculator
a.kontonummer,
a.bezeichnung,
a.kontenart,
bk.buchungstyp,
SUM(bk.betrag_netto) as summe_netto,
COUNT(bk.id) as buchungsanzahl
SUM(bk.betrag_netto) AS summe_netto,
COUNT(bk.id) AS buchungsanzahl
FROM bookings bk
JOIN accounts a ON bk.kategorie_konto_id = a.id
JOIN accounts a ON bk.kategorie_konto_id = a.id
JOIN fiscal_years fy ON bk.fiscal_year_id = fy.id
WHERE fy.year = ? AND bk.is_reversal = 0
GROUP BY a.id, a.kontonummer, a.bezeichnung, a.kontenart, bk.buchungstyp
WHERE fy.year = ?
AND bk.is_reversal = 0
AND a.kontenart IN (\'Betriebseinnahme\', \'Betriebsausgabe\')
GROUP BY a.id, a.kontonummer, a.bezeichnung, a.kontenart
HAVING buchungsanzahl > 0
ORDER BY a.kontonummer',
[$year]
@ -37,11 +46,11 @@ class EuerCalculator
$ausgaben = [];
foreach ($rows as $row) {
$netto = round(abs((float)$row['summe_netto']), 2);
$netto = round((float)$row['summe_netto'], 2);
if ($row['buchungstyp'] === 'Einnahme') {
if ($row['kontenart'] === 'Betriebseinnahme') {
$einnahmen[] = array_merge($row, ['netto' => $netto]);
} elseif ($row['buchungstyp'] === 'Ausgabe') {
} else {
$ausgaben[] = array_merge($row, ['netto' => $netto]);
}
}