Damit ist der geplante Funktionsumfang beisammen. Phase 4 abgeschlossen - Konfigurierbare Cockpit-Kacheln; abgewählte werden nicht berechnet - Einnahmen/Ausgaben je Monat als Balkenpaare mit Saldolinie, aufgesetzt auf den Summenbericht statt auf eine eigene Abfrage - Meine Ausgaben als Ring auf der obersten Kategorieebene - Offene Vorgänge aus allen Modulen Phase 5 – Online-Banking - nemiah/php-fints als Fork auf Codeberg, psr/log direkt eingebaut: die Anwendung hängt an keinem fremden Update-Zyklus - PIN AES-256-GCM-verschlüsselt; Schlüssel aus APP_KEY oder aus data/schluessel/app_key, den der Entrypoint einmalig erzeugt - TAN-Dialog über mehrere Requests (FinTs::persist plus serialisierte Aktion in der Sitzung) – ein wartender Prozess wäre mit php-fpm der falsche Weg - Abgleich statt Direktbuchung: verbinden, übernehmen oder verwerfen - Regeln mit vier Vergleichsarten, Betragsgrenzen und Split-Schema Phase 6 – Wertpapiere - Depotbuchung und Geldbuchung als zwei Seiten eines Geschäfts; betrag ist der Bruttowert, Nebenkosten stehen daneben - Einstand nach gleitendem Durchschnitt, realisierte Gewinne, Erträge - Kursabruf über Leeway oder FMP, täglicher Lauf per Cron - QIF-Import für !Type:Invst Dabei behoben: Der Import buchte den Geldfluss jedes Wertpapiergeschäfts als Abgang – auch bei Verkäufen und Dividenden; und er erkannte das Verrechnungskonto nicht, wenn dem Konto im L-Feld eine Kategorie vorangeht (bei Verkäufen also immer). Phase 7 – Nebenmodule und Zahlungsverkehr - Buchungsvorlagen inklusive QIF-Import, Splits werden mitskaliert - Regelmäßige Buchungen mit Fälligkeitslauf, Finanzkalender, Erinnerungen - Adressen mit IBAN-Prüfung, Verträge mit Kündigungsfrist, Sparziele - Kredite mit gerechnetem Tilgungsplan - Überweisungen über FinTS; die Buchung entsteht erst nach Annahme durch die Bank. Die pain.001-Nachricht erzeugt SepaXml selbst Nebenbei: .dockerignore ergänzt (ohne sie brach der Build an data/mariadb ab), PlatzhalterController entfernt, zwei Inline-Handler beseitigt, die die Content-Security-Policy ohnehin blockierte. 888 PHP-Prüfungen und 45 E2E-Tests grün. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
40 lines
1.1 KiB
PHP
40 lines
1.1 KiB
PHP
<?php
|
||
|
||
declare(strict_types=1);
|
||
|
||
namespace Finanzmanager\Services;
|
||
|
||
use Psr\Log\AbstractLogger;
|
||
use Stringable;
|
||
|
||
/**
|
||
* Leitet die Meldungen der FinTS-Bibliothek in das Debug-Log der Anwendung.
|
||
*
|
||
* php-fints erwartet einen PSR-3-Logger; die Anwendung hat mit `DebugLog` einen
|
||
* eigenen, schlichteren. Dieser Adapter ist die Naht dazwischen: Er schreibt
|
||
* unter der Kategorie `fints` und nur, wenn das Debug-Log überhaupt
|
||
* eingeschaltet ist – ein FinTS-Dialog erzeugt sonst mehrere hundert Zeilen je
|
||
* Abruf.
|
||
*
|
||
* Die Bibliothek maskiert PIN und TAN bereits selbst (`SanitizingLogger`),
|
||
* `DebugLog` tut dasselbe noch einmal für den Kontext.
|
||
*/
|
||
class DebugLogAdapter extends AbstractLogger
|
||
{
|
||
/**
|
||
* @param mixed $level
|
||
* @param array<string,mixed> $context
|
||
*/
|
||
public function log($level, string|Stringable $message, array $context = []): void
|
||
{
|
||
if (!DebugLog::aktiv()) {
|
||
return;
|
||
}
|
||
|
||
DebugLog::schreibe(
|
||
'fints',
|
||
'[' . (is_scalar($level) ? (string)$level : 'info') . '] ' . (string)$message,
|
||
$context
|
||
);
|
||
}
|
||
}
|