diff --git a/CHANGELOG.md b/CHANGELOG.md index a2b38cd..5c5de3f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,22 @@ Das Format folgt [Keep a Changelog](https://keepachangelog.com/de/1.1.0/). ### Added +- Buchungsbericht: Spalte „✓“ (abgeglichen) vor der Spalte „Bar“ des Bargeld-Tools und + Filter „Abgeglichen“ (alle / abgeglichen / nicht abgeglichen); „Buchungen nicht + abgeglichen“ unter den offenen Vorgängen im Cockpit öffnet den Buchungsbericht mit + diesem Filter statt der Kontenübersicht (#137) +- Buchungsmaske: Schalter „Ohne Bargeld-Abgleich“ für Sammelbuchungen und + Differenzausgleiche; solche Buchungen werden nicht mit dem Bargeld-Tool abgeglichen und + erscheinen nicht mehr unter den offenen Vorgängen im Cockpit (#136) +- Depotbuchung erfassen: Bei Kauf und Verkauf rechnet sich aus zwei der drei Felder + Betrag, Stück und Kurs automatisch das dritte (Betrag = Stück × Kurs) (#129) +- Wertpapiere: Beim Buchen eines Wertpapiergeschäfts (Dialog im Kontoblatt und + „Depotbuchung erfassen“) lässt sich eine Klasse wählen; sie gilt für die Buchung samt + aller Splitzeilen der Nebenkosten (#125) +- Kategorieauswahl: Unter den Kategorien stehen überall die aktiven Umbuchungskonten, + sortiert und gruppiert nach Kontengruppe – in Regeln samt Splitzeilen, Umsatzabgleich, + Buchungsvorlagen, Regelmäßigen Buchungen, Zahlungsverkehr, Verträgen sowie in den + Filtern von Buchungsbericht und Export (#124) - Buchungsmaske: Schalter „Bewusst ohne Kategorie“ für Abschreibungen und rein rechnerische Erträge; solche Buchungen gelten im Cockpit, im Monatsabschluss und in der Kontenübersicht nicht als offen (#134) @@ -22,6 +38,12 @@ Das Format folgt [Keep a Changelog](https://keepachangelog.com/de/1.1.0/). ### Fixed +- Offene Vorgänge: „Im Bargeld-Tool nicht gefunden“ und „Bargeld-Tool-Prüfung fehlgeschlagen“ + führen jetzt in den Buchungsbericht mit dem passenden Filter „Bargeld-Tool“ – dort steht die + Spalte Kategorie (bzw. das Gegenkonto) mit; die eigene Liste unter + `/verwaltung/bargeld/fehler` entfällt (#131) +- Anmeldeseite: Die Marke zeigt wie die Seitenleiste nach dem Anmelden das Coinstack-Symbol + und den fetten, zweifarbigen Schriftzug „Finanzmanager“ statt einer grauen Statusmarke (#130) - Buchungsmaske: Eine falsche Splitsumme zeigte zwar die Fehlermeldung, riss aber über die Weiterleitung zur leeren Maske alle gerade erfassten Splitzeilen heraus; jetzt bleibt die Maske mit den eigenen Eingaben stehen, bis die Summe stimmt (#95) diff --git a/Changes.md b/Changes.md index a5deecc..b0b0477 100644 --- a/Changes.md +++ b/Changes.md @@ -1,5 +1,71 @@ # Änderungen +## Buchungsbericht: Spalte und Filter „abgeglichen“ (12.10.2026) + +- Anlass (#137): Der Buchungsbericht zeigte nicht, ob eine Buchung abgeglichen ist, und ließ sich nicht danach filtern. +- Neue Spalte „✓“ (Tooltip „abgeglichen“) vor der Spalte „Bar“ des Bargeld-Tools – wie im Kontoblatt. Splitzeilen erben den Haken ihrer Buchung. +- Neuer Filter „Abgeglichen“ (alle / abgeglichen / nicht abgeglichen), Filterfeld `abgeglichen` mit den Werten `ja`/`nein`; wie der Bargeld-Filter wirkt er nur im Buchungsbericht und wird mit gespeicherten Berichten gesichert. +- Cockpit, *Offene Vorgänge*: „Buchungen nicht abgeglichen“ führt jetzt in den Buchungsbericht mit dem Filter „nicht abgeglichen“ statt in die Kontenübersicht (`Cockpit::nichtAbgeglichenBericht()`). Zeitraum von der ersten betroffenen Buchung bis heute, Umbuchungen eingeschlossen; liegen nicht abgeglichene Buchungen auf aufgelösten Konten, beschränkt sich der Bericht auf die aktiven Konten – so zeigt er genau die gezählten Buchungen. +- Tests: `tests/14_AuswertungTest.php`, `tests/15_CockpitTest.php`, `tests/e2e/specs/auswertungen.spec.js`. + +## Buchen ohne Bargeld-Abgleich (12.10.2026) + +- Anlass (#136): Sammelbuchungen und Differenzausgleiche tragen eine Kategorie, die gegen das Bargeld-Tool geprüft wird, stehen dort aber absichtlich nicht – und wurden deshalb immer wieder als offener Vorgang angemahnt. +- Die Buchungsmaske hat den Schalter „Ohne Bargeld-Abgleich“ (`buchungen.ohne_bargeld_abgleich`, Migration `031_ohne_bargeld_abgleich.sql`). Er erscheint nur, wenn ein Bargeld-Tool eingerichtet ist; sonst trägt die Maske einen gesetzten Wert unsichtbar weiter. +- `BargeldAbgleich::pruefe()` prüft solche Buchungen nicht und löscht einen früheren Status. Sie erscheinen damit weder unter „Bargeld-Tool-Prüfung fehlgeschlagen“ noch unter „im Bargeld-Tool nicht gefunden“. Die Schnellzuordnung im Kontoblatt und die Regelanwendung lassen den Schalter stehen. +- Kontoblatt und Buchungsbericht zeigen in der Spalte „Bar“ einen leeren grauen Kreis mit dem Tooltip „Bewusst ohne Abgleich mit dem Bargeld-Tool“. +- Tests: `tests/65_OhneBargeldAbgleichTest.php`, `tests/e2e/specs/bargeld.spec.js`. + +## Offene Vorgänge des Bargeld-Tools im Buchungsbericht (12.10.2026) + +- Anlass (#131): Der Liste „Im Bargeld-Tool nicht gefunden“, aufgerufen aus *Offene Vorgänge* im Cockpit, fehlte die Spalte Kategorie/Gegenkonto. Gewünscht war statt einer eigenen Liste ein Filter im Buchungsbericht. +- Den Filter „Bargeld-Tool“ hat der Buchungsbericht schon; die beiden offenen Vorgänge „Bargeld-Tool-Prüfung fehlgeschlagen“ und „im Bargeld-Tool nicht gefunden“ führen jetzt dorthin (`Cockpit::bargeldBericht()`): gesamter Zeitraum, Umbuchungen eingeschlossen, Filter „Abruf gescheitert“ bzw. „nicht gefunden“. Der Bericht zeigt Konto, Kategorie bzw. Gegenkonto in eckigen Klammern und Klasse; die Meldung der Gegenstelle steht im Tooltip der Spalte „Bar“. +- Ist einer dieser beiden Filter gesetzt, erklärt der Hinweis unter dem Bericht den Status und dass eine erneute Zuordnung der Kategorie die Prüfung erneut anstößt – der Text der bisherigen Liste. +- Entfernt: die Seite `/verwaltung/bargeld/fehler` (`VerwaltungController::bargeldFehler()`, `Views/verwaltung/bargeld_fehler.php`) und `Buchung::mitBargeldFehler()`. +- Tests: `tests/34_BargeldAbgleichTest.php`, `tests/15_CockpitTest.php`, `tests/e2e/specs/bargeld.spec.js`. + +## Anmeldeseite: Marke wie in der Seitenleiste (12.10.2026) + +- Anlass (#130): Icon und Schrift des Logos auf der Anmeldeseite wichen von der Marke im angemeldeten Zustand ab. +- Der schlichte Rahmen (`src/Views/layout/schlicht.php` – Anmeldung, Ersteinrichtung, Fehlerseite) zeigt jetzt das Coinstack-Symbol und den Schriftzug „Finanz**manager**“ im Schriftschnitt der Seitenleiste. Bisher erbte der Schriftzug die Regeln der kleinen Statusmarke (`.marke`) und stand grau mit Rahmen da. +- Weil die Karte hell ist, trägt die erste Worthälfte die Textfarbe und die zweite die lesbare Akzentfarbe (`--akzent-schrift`); im dunklen Thema entspricht das dem Blau der Seitenleiste. +- Tests: `tests/64_AnmeldeMarkeTest.php`, `tests/e2e/specs/smoke.spec.js`. + +## Depotbuchung erfassen: Stück, Kurs und Betrag rechnen sich (12.10.2026) + +- Anlass (#129): Bei Kauf und Verkauf sollten sich Betrag, Stück und Kurs gegenseitig ergeben – Betrag = Stück × Kurs. +- Die Maske *Depotbuchung erfassen* rechnet bei Kauf und Verkauf das dritte Feld aus, sobald zwei eingetragen sind (`public/static/depotbuchung.js`): den Betrag auf zwei, Kurs und Stück auf sechs Nachkommastellen. Der ausgerechnete Wert ist farblich hinterlegt und zieht nach, wenn sich eines der anderen Felder ändert; selbst umgetippt gilt er als eingetragen, beim Leeren eines der anderen Felder verschwindet er. Bei Dividende, Ein- und Auslieferung wird nicht gerechnet; wechselt der Vorgang auf Kauf oder Verkauf, rechnet die Maske nach. +- Serverseitig dieselbe Regel für den Weg ohne JavaScript (`Depotbuchung::dritterWert()`): Neben dem Betrag ergeben sich jetzt auch Kurs bzw. Stück bei Kauf und Verkauf. +- Der Dialog des Wertpapiergeschäfts im Kontoblatt bleibt unverändert: Dort ist der Buchungsbetrag die feste Größe. +- Tests: `tests/63_DepotbuchungDritterWertTest.php`, `tests/e2e/specs/depotbuchung.spec.js`. + +## Wertpapiere: Klasse beim Buchen wählen (12.10.2026) + +- Anlass (#125): Beim Buchen von Wertpapieren fehlte die Auswahl einer Klasse. +- Die Wertpapiermaske (Dialog im Kontoblatt und Seite `/buchungen/{id}/wertpapier`) hat ein Feld „Klasse“, vorbelegt mit der bisherigen Klasse der Buchung. Die Klasse steht danach an der Buchung und an jeder Splitzeile der Nebenkosten – das Kontoblatt zeigt so die eine Klasse statt „Splitbuchung“. Eine leere Auswahl entfernt die Klasse. +- Auch „Depotbuchung erfassen“ unter *Wertpapiere* bietet die Klasse an; sie gilt der dort erzeugten Geldbuchung auf dem Verrechnungskonto. +- Eine unbekannte Klasse wird abgewiesen, ohne dass ein Geschäft entsteht. +- Tests: `tests/62_WertpapierKlasseTest.php`, `tests/e2e/specs/wertpapiergeschaeft.spec.js`. + +## Umbuchungskonten in jeder Kategorieauswahl (12.10.2026) + +- Anlass (#124): In den Splitzeilen der Regeln, beim Anlegen einer Regel, im Filter des Buchungsberichts und weiteren Listen fehlten die Umbuchungskonten unter den Kategorien. +- Die gemeinsame Liste *Kategorie / Gegenkonto* der Buchungsmaske (`Views/buchungen/zuordnungsliste.php`) steht jetzt überall, wo eine Kategorie gewählt wird: Regeln (Neue Regel, Regeltabelle, Regeldialog im Kontoblatt) samt Splitzeilen, Umsatzabgleich, Buchungsvorlagen, Regelmäßige Buchungen, Zahlungsverkehr und Verträge. Das getrennte Feld „Gegenkonto“ der Regel entfällt; die Regeltabelle verlor bisher beim Speichern ein Gegenkonto, weil sie es gar nicht mitschickte. +- Angeboten werden nur aktive Umbuchungskonten, in eigenen Gruppen je Kontengruppe und in deren Reihenfolge (`Konto::umbuchungsgruppen()`). Ein schon gewähltes inaktives Konto bleibt sichtbar; die übrigen inaktiven stehen verborgen in der Liste, damit bestehende Splitzeilen beim Bearbeiten nicht verloren gehen (`kombobox.js` blendet sie aus). +- Regel-Splitzeilen können auf ein Umbuchungskonto zeigen; daraus wird eine Splitzeile mit Gegenkonto. Auch „Regel anlegen“ aus einer Buchung übernimmt solche Zeilen. +- Buchungsbericht: Umbuchungskonten stehen unter den Kategorien im Filter und bringen ihre Umbuchungen auch ohne „Umbuchungen mitzählen“ mit. Export: Umbuchungskonten unter den Kategorien (`gegenkonten[]`). +- Zahlungsaufträge und Verträge bekommen ein Gegenkonto (Migration `030_gegenkonto_auftrag_vertrag.sql`); eine Überweisung aufs eigene Tagesgeld wird beim Senden als Umbuchung gebucht. +- Nicht betroffen: Auswahllisten, die keine Buchung zuordnen (Wertpapierkosten in den Einstellungen, Bargeld-Tool, Ober-/Zielkategorie in der Kategorieverwaltung, Budgetplaner). +- Tests: `tests/61_UmbuchungskontenAuswahlTest.php`, `tests/e2e/specs/regelausbuchung.spec.js`. + +## Regelmäßige Buchungen: automatisch abgleichen (12.10.2026) + +- Anlass (#123): Buchungen aus regelmäßigen Buchungen mussten nach dem Buchen einzeln abgeglichen werden. +- Neuer Schalter „automatisch abgleichen“ unter „automatisch buchen“ im Dialog „Neue regelmäßige Buchung“, in der Vorgabe eingeschaltet. Gesetzt markiert er die entstandene Buchung als abgeglichen – beim Fälligkeitslauf ebenso wie beim Buchen von Hand. +- Die Übersicht der regelmäßigen Buchungen hat eine neue Spalte „Abgleichen“ zwischen „Auto“ und „Aktiv“, per Klick umschaltbar. +- Migration `029_regelmaessig_abgleichen.sql`; bestehende Reihen übernehmen die Vorgabe (eingeschaltet). +- Tests: `tests/60_RegelmaessigAbgleichenTest.php`, `tests/e2e/specs/module.spec.js`. + ## Buchungen: bewusst ohne Kategorie (12.10.2026) - Anlass (#134): Abschreibungen oder rein rechnerische Solarerträge sollen ohne Kategorie gebucht werden können, ohne immer wieder als offen angemahnt zu werden. Mit Kategorie belastete eine Abschreibung die Auswertung zusätzlich zum gesunkenen Kontowert. diff --git a/README.md b/README.md index be868a5..db9f436 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,8 @@ Haushalt wird beides parallel genutzt. erfasst, sieht beim Zuweisen einer Kategorie sofort, ob die Buchung dort schon steht: grüner Haken, rotes X oder Ausrufezeichen in einer schmalen Spalte des Kontoblatts. Adresse, Zugangsdaten und die abzugleichenden Kategorien stehen unter - *Verwaltung → Bargeld-Tool*. + *Verwaltung → Bargeld-Tool*. Sammelbuchungen und Differenzausgleiche lassen sich in der + Buchungsmaske bewusst ohne Bargeld-Abgleich buchen. Einzelheiten je Modul in `docs/`, die Entwicklung in `Changes.md`. diff --git a/docs/auswertungen.md b/docs/auswertungen.md index 823145f..f5b5d60 100644 --- a/docs/auswertungen.md +++ b/docs/auswertungen.md @@ -48,7 +48,7 @@ Zwei Ausnahmen führen das Vorzeichen mit, weil sie keine Abschnitte haben: der | Typ | Zeilen | Spalten | |---|---|---| | **Summenbericht** | Zeilen-Summe, nach Einnahmen und Ausgaben getrennt | Zeitraum, je nach Spalten-Aufteilung | -| **Buchungsbericht** | Einzelbuchungen, gruppiert nach Zeilen-Summe; bei eingerichtetem Bargeld-Tool mit Spalte „Bar“ und Filter „Bargeld-Tool“ | feste Buchungsspalten | +| **Buchungsbericht** | Einzelbuchungen, gruppiert nach Zeilen-Summe; Spalte „✓“ (abgeglichen) mit Filter „Abgeglichen“ (#137); bei eingerichtetem Bargeld-Tool mit Spalte „Bar“ und Filter „Bargeld-Tool“ | feste Buchungsspalten | | **Vergleichsbericht** | wie Summenbericht | Zeitraum, Vorjahreszeitraum, Differenz, Veränderung | | **Kontostandsbericht** | Konten | Salden zu den Enden der Spaltenzeiträume | | **Budgetbericht** | Kategoriebaum | Budget, Ist, Saldo | @@ -113,6 +113,13 @@ Kategorien zeigen die Summe ihres Astes. Eine gewählte Kategorie **schließt ihre Unterkategorien ein** – wer „400 - Leben“ filtert, meint den ganzen Ast. Nichts ausgewählt heißt alles. +Im **Buchungsbericht** stehen unter den Kategorien zusätzlich die aktiven Umbuchungskonten, +je Kontengruppe (#124). Ihr Wert `konto:7` landet im Filter als `gegenkonten`; eine +Bewegung passt, wenn sie zu einer gewählten Kategorie **oder** einem gewählten +Umbuchungskonto gehört. Ein gewähltes Umbuchungskonto bringt seine Umbuchungen auch ohne +„Umbuchungen mitzählen“ mit – sonst bliebe die Auswahl leer. Die übrigen Berichte zählen +Umbuchungen nicht und bieten die Konten deshalb nicht an. + Zwei Berichte bestimmen ihre Zeilen selbst und sperren das Feld: der Kontostandsbericht führt immer Konten, der Budgetbericht immer Kategorien. Zwei bestimmen ihre Spalten selbst: Vergleichs- und Budgetbericht. diff --git a/docs/banking.md b/docs/banking.md index b7b0b7d..4ff2083 100644 --- a/docs/banking.md +++ b/docs/banking.md @@ -453,13 +453,17 @@ Eine Regel prüft ein Muster gegen Empfänger und/oder Verwendungszweck: so. * **Betragsgrenzen** rechnen mit Vorzeichen: „von −60 bis −40“ trifft Lastschriften zwischen 40 und 60 Euro. -* **Wirkung**: Kategorie, Klasse, Gegenkonto (macht daraus eine Umbuchung) oder eine - **Splitbuchung**. +* **Wirkung**: Kategorie oder Gegenkonto (macht daraus eine Umbuchung) aus der + gemeinsamen Liste *Kategorie / Gegenkonto*, dazu eine Klasse – oder eine + **Splitbuchung**. Die Liste ist dieselbe wie in der Buchungsmaske: unter den Kategorien + die aktiven Umbuchungskonten je Kontengruppe (#124). ### Splitbuchung in einer Regel -Unter jeder Regel klappt *Splitbuchung* die Zeilen auf: je Zeile eine Kategorie, wahlweise -Klasse und Notiz, dazu ein Anteil in Prozent. Greift die Regel, entsteht keine Buchung mit +Unter jeder Regel klappt *Splitbuchung* die Zeilen auf: je Zeile eine Kategorie oder ein +Umbuchungskonto, wahlweise Klasse und Notiz, dazu ein Anteil in Prozent. Eine Zeile mit +Umbuchungskonto wird zur Splitzeile mit Gegenkonto – etwa der Sparanteil einer Überweisung, +die sonst Lebensmittel bezahlt. Greift die Regel, entsteht keine Buchung mit einer Kategorie, sondern eine Splitbuchung mit diesen Zeilen. Die Anteile gelten **zueinander**, nicht als feste Beträge – darin liegt der ganze Zweck: @@ -473,7 +477,7 @@ Fehler wäre in der fertigen Buchung nicht mehr zu sehen. Die letzte Zeile bekom den Rundungsrest, damit die Summe auf den Cent zum Buchungsbetrag passt – bei einem Drittel zu zwei Dritteln ginge sonst ein Cent verloren, und die Buchung ließe sich nicht speichern. -Eine Zeile ohne Kategorie oder ohne Anteil fällt weg; ohne jede Splitzeile bucht die Regel +Eine Zeile ohne Kategorie bzw. Gegenkonto oder ohne Anteil fällt weg; ohne jede Splitzeile bucht die Regel wie zuvor auf ihre Kategorie. Im Abgleichdialog zeigt der Vorschlag die errechneten Zeilen mit ihren Beträgen an und übernimmt sie unverändert – geändert wird eine Aufteilung im Kontoblatt, wo die ganze Buchung samt Summenprüfung vorliegt. diff --git a/docs/buchungen.md b/docs/buchungen.md index c8c51a8..3579e1b 100644 --- a/docs/buchungen.md +++ b/docs/buchungen.md @@ -57,10 +57,14 @@ nicht. Deshalb stehen Kategorien und Konten in derselben Auswahlliste; die Konte in eckigen Klammern, wie das Kategoriefeld im FinanzManager sie schreibt. Das eigene Konto fehlt in der Liste. -Die Liste steht in `Views/buchungen/zuordnungsliste.php` und wird an vier Stellen -eingebunden: Buchungsmaske, deren Splitzeilen, Schnellzuordnung im Kontoblatt und -Splitdialog. Die Werte tragen ein Präfix, das `BuchungenController::zuordnungAus()` wieder -auseinandernimmt: +Die Liste steht in `Views/buchungen/zuordnungsliste.php`. Sie wird nicht nur in der +Buchungsmaske, deren Splitzeilen, der Schnellzuordnung im Kontoblatt und im Splitdialog +eingebunden, sondern überall, wo eine Kategorie gewählt wird (#124): Regeln samt ihren +Splitzeilen, Umsatzabgleich, Buchungsvorlagen, Regelmäßige Buchungen, Zahlungsverkehr und +Verträge. Die Werte tragen ein Präfix, das `BuchungenController::zuordnungAus()` wieder +auseinandernimmt (`zuordnungAusFormular()` nimmt ersatzweise die versteckten Einzelfelder +`kategorie_id`/`gegenkonto_id` einer Tabellenzeile, `zuordnungswert()` baut den Wert für die +Vorauswahl): | Wert | Bedeutung | |---|---| @@ -72,6 +76,17 @@ auseinandernimmt: Die Auswahl *Ausgabe / Einnahme* bestimmt seither nur noch die Richtung des Betrags. +Angeboten werden nur **aktive** Umbuchungskonten, je Kontengruppe in einer eigenen Gruppe +(„Umbuchungskonten – Liquide Mittel“, ohne Kontengruppen schlicht „Umbuchungskonten“) und +in der Reihenfolge der Kontengruppen (`Konto::umbuchungsgruppen()`). Ein inaktives Konto, +das schon gewählt ist, bleibt sichtbar stehen – sonst ginge die Zuordnung beim nächsten +Speichern verloren. Alle übrigen inaktiven Konten stehen als verborgene Einträge +(`