Bilanz & Offenlegung
EN Mit Digi Soft Hub anmelden

Entwickler-Dokumentation

Aufbau, lokale Entwicklung, Tests und Erweiterungspunkte von digisoft-bilanz (privates Repo digi-soft-ug/digisoft-bilanz).

Architektur

CSV --> Import\CsvTrialBalanceImporter --> Domain\TrialBalance (Cent, Soll +, Haben -)
                                              |
                       Mapping\Skr03Mapper --> Engine\BalanceSheetBuilder --> BalanceSheet
                                              |                                   |
                                    Engine\Validator (Issues)        Render\BalanceSheetPdf / BalanceSheetXml
                                                                                  |
                                                         Submit\Submitter (ManualUploadExport)

Lokal arbeiten

sh dev-test.sh      # composer install, phpcs (PSR-12), phpunit in Docker
docker compose up   # Dienst auf Port 8080 (Traefik-Labels, Host aus .env DOMAIN)

Tests liegen in tests/; Golden-Datei: tests/golden/ug_first_year.csv (Erwartung: Aktiva B 550,00; Passiva A 400,00; Passiva C 150,00; Ergebnis -600,00). OffenlegungSchemaTest validiert gegen das offizielle XSD, sobald es unter specs/offenlegung/ liegt (lizenzpflichtig, nicht im Git; siehe specs/MANIFEST.md).

Hub-Login

Anmeldung gehört dem Digi Soft Hub. Ablauf: /login leitet auf https://digi-soft.app/sso/bilanz; der Hub stellt ein 60-Sekunden-JWT (HS256, Secret HUB_SSO_SECRET) mit sub, email, name, jti, aud=bilanz aus und leitet auf /sso/callback?token=…. Auth::verify() verlangt aud=bilanz und löst jede jti nur einmal ein. In der Sitzung liegen nur id, email, name.

Umgebungsvariablen (nur serverseitig in .env, nie im Repo): DOMAIN, HUB_URL, HUB_SSO_SECRET.

Erweitern

Neuer Importer

Klasse mit import(string $content): array{TrialBalance, list<Issue>} schreiben (siehe CsvTrialBalanceImporter), in Draft::compute() einhängen. Fehler als Issue::error() melden, nie stillschweigend Zeilen verwerfen.

Neuer Einreicher

Submit\Submitter implementieren (Unternehmensregister) oder Submit\EBilanzSubmitter (Finanzamt, bewusst getrennt). Standard ist ManualUploadExport: sendet nichts. Echte Einreichungen müssen standardmäßig im Test-/Dry-Run-Modus laufen und eine ausdrückliche Bestätigung verlangen. Vorgesehen: BundesanzeigerMassenschnittstelle (nach Vertrag mit dem Verlag), NotImplementedEBilanzSubmitter ist der Stub für M4 (ERiC nur als Docker-Dienst auf Hetzner, Zertifikate über Secrets).

Kontenrahmen

Mapping\Skr03Mapper trägt die Bereiche (Entwurf, ungeprüft). SKR04 und Überschreibungen pro Mandant sind offen.

Deployment

Hetzner, Verzeichnis ~/digisoft-infra/projects/bilanz/, ein zustandsloser Apache/PHP-Container im Netz web, Traefik mit Let's Encrypt (letsencrypt-Resolver, security-headers@file). Dockerfile-Änderungen erfordern up -d --build; Änderungen an .env erfordern --force-recreate.

Grenzen