EÜR umgebaut auf Kontenart statt Buchungstyp
This commit is contained in:
parent
452fac2698
commit
37fcf53e8f
3 changed files with 48 additions and 28 deletions
32
BERICHTE.md
32
BERICHTE.md
|
|
@ -9,33 +9,29 @@ Dieses Dokument beschreibt, wie Buchungen in die beiden steuerlichen Berichte ei
|
||||||
|
|
||||||
**Datei:** `src/Services/EuerCalculator.php`
|
**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)
|
`betrag_netto` wird ohne `abs()` direkt summiert:
|
||||||
|
- Positiver Wert → addiert zur jeweiligen Spalte
|
||||||
Bedingung: `buchungstyp = 'Ausgabe'`
|
- Negativer Wert → mindert die jeweilige Spalte (z.B. Gutschriften, Erlösschmälerungen)
|
||||||
|
|
||||||
Alle passenden Buchungen werden nach Kategorie-Konto gruppiert und als Betriebsausgaben ausgewiesen. Der Nettobetrag wird summiert.
|
|
||||||
|
|
||||||
### Sortierung und Ergebnis
|
### Sortierung und Ergebnis
|
||||||
|
|
||||||
- Sortierung innerhalb beider Sektionen: nach `accounts.kontonummer` aufsteigend
|
- Gruppierung: je Kategorie-Konto (`accounts.id`), ein Eintrag pro Konto
|
||||||
- Stornobuchungen (`is_reversal = 1`) werden ausgeschlossen
|
- Sortierung: nach `accounts.kontonummer` aufsteigend
|
||||||
- Ergebnis: `total_einnahmen − total_ausgaben = gewinn`
|
- Ergebnis: `total_einnahmen − total_ausgaben = gewinn`
|
||||||
|
|
||||||
### Übersicht
|
|
||||||
|
|
||||||
| Bedingung | Sektion im Bericht |
|
|
||||||
|---|---|
|
|
||||||
| `buchungstyp = 'Einnahme'` | Einnahmen |
|
|
||||||
| `buchungstyp = 'Ausgabe'` | Ausgaben / Betriebsausgaben |
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## UStVA (Umsatzsteuervoranmeldung)
|
## UStVA (Umsatzsteuervoranmeldung)
|
||||||
|
|
|
||||||
15
Changes.md
15
Changes.md
|
|
@ -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
|
## 2026-03-29 – UStVA: kontonummernbasierte Kennzahlenberechnung
|
||||||
|
|
||||||
### Geändert
|
### Geändert
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,15 @@ use Steuerkram\Database;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Berechnet die Einnahmen-Überschuss-Rechnung (EÜR) für ein Geschäftsjahr.
|
* 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
|
class EuerCalculator
|
||||||
{
|
{
|
||||||
|
|
@ -20,14 +28,15 @@ class EuerCalculator
|
||||||
a.kontonummer,
|
a.kontonummer,
|
||||||
a.bezeichnung,
|
a.bezeichnung,
|
||||||
a.kontenart,
|
a.kontenart,
|
||||||
bk.buchungstyp,
|
SUM(bk.betrag_netto) AS summe_netto,
|
||||||
SUM(bk.betrag_netto) as summe_netto,
|
COUNT(bk.id) AS buchungsanzahl
|
||||||
COUNT(bk.id) as buchungsanzahl
|
|
||||||
FROM bookings bk
|
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
|
JOIN fiscal_years fy ON bk.fiscal_year_id = fy.id
|
||||||
WHERE fy.year = ? AND bk.is_reversal = 0
|
WHERE fy.year = ?
|
||||||
GROUP BY a.id, a.kontonummer, a.bezeichnung, a.kontenart, bk.buchungstyp
|
AND bk.is_reversal = 0
|
||||||
|
AND a.kontenart IN (\'Betriebseinnahme\', \'Betriebsausgabe\')
|
||||||
|
GROUP BY a.id, a.kontonummer, a.bezeichnung, a.kontenart
|
||||||
HAVING buchungsanzahl > 0
|
HAVING buchungsanzahl > 0
|
||||||
ORDER BY a.kontonummer',
|
ORDER BY a.kontonummer',
|
||||||
[$year]
|
[$year]
|
||||||
|
|
@ -37,11 +46,11 @@ class EuerCalculator
|
||||||
$ausgaben = [];
|
$ausgaben = [];
|
||||||
|
|
||||||
foreach ($rows as $row) {
|
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]);
|
$einnahmen[] = array_merge($row, ['netto' => $netto]);
|
||||||
} elseif ($row['buchungstyp'] === 'Ausgabe') {
|
} else {
|
||||||
$ausgaben[] = array_merge($row, ['netto' => $netto]);
|
$ausgaben[] = array_merge($row, ['netto' => $netto]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue