mahnung/CHANGELOG.md
Eduard Wisch d1db85322b
All checks were successful
Deploy mahnung / deploy (push) Successful in 14s
Initiales Release: Mahnung-Modul v0.1.0 [deploy]
Vollstaendiges 3-stufiges Mahnwesen nach BGB §288:
- SQL-Schema (llx_mahnung_mahnung, llx_mahnung_stufe)
- CRUD-Klassen (Mahnung, MahnungStufe, MahnungVorschlag)
- TCPDF DIN-5008 PDF-Generierung
- Verzugszinsberechnung B2C/B2B + §288 Abs.5 Pauschale
- Trigger: offene Mahnungen bei Zahlungseingang schliessen
- Hook: Tab + Button auf Rechnungs-/Kundenkarte
- Cron: taegl. Vorschlagsliste + Ntfy-Push
- Deploy-Pipeline (.forgejo/workflows/deploy.yml)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 12:09:37 +02:00

4.2 KiB
Raw Blame History

Changelog

[0.1.0] — 2026-05-07 — Erstveröffentlichung (Phase 110)

DB-Schema (Phase 1)

  • llx_mahnung_mahnung — Mahnvorgänge mit Stufe, Beträgen, Zinsen, Status, Snapshot des Basiszinses für Reproduzierbarkeit
  • llx_mahnung_stufe — pro Stufe konfigurierbar: Frist, neue Frist, Gebühren B2C/B2B, optional Zinssatz-Override, Versandart, E-Mail-/PDF-Templates
  • 3 Default-Stufen werden bei Aktivierung idempotent eingefügt

Modul-Descriptor (Phase 1)

  • numero 500037 (500033500036 sind durch Bericht belegt), family financial, FA-Picto fa-envelope-open-o
  • Modul-Konstanten: MAHNUNG_BASISZINS, MAHNUNG_AUFSCHLAG_B2C, MAHNUNG_AUFSCHLAG_B2B, MAHNUNG_PAUSCHALE_B2B, MAHNUNG_NTFY_TOPIC
  • Rechte: read, write, send, delete, setup
  • Cron-Job MahnungCronBuildVorschlag (täglich, default deaktiviert)
  • Linkes Menü unter „Rechnungen" (mainmenu=billing) mit Vorschlagsliste / Archiv

CRUD + Setup (Phase 2)

  • class/mahnung.class.php — CRUD, Status-Konstanten, Verzugszinsen-Berechnung nach BGB §288
  • class/mahnungstufe.class.php — Stufen-Konfiguration, Override-Helfer für Zinsen/Gebühren
  • admin/setup.php — Stufen-Tabelle vollständig pflegbar, Konstanten persistent

Vorschlagsliste + Cron (Phase 3)

  • class/mahnungvorschlag.class.php — gemeinsamer Service: ermittelt pro überfälliger Rechnung die nächste vorgeschlagene Stufe, B2C/B2B-Erkennung via tva_intra, offener Betrag aus paiement_facture
  • class/mahnungcron.class.php — Cron sammelt Vorschläge, sendet Ntfy-Push (Topic aus Setup), schreibt zusätzlich GlobalNotify-Action wenn aktiv
  • class/mahnungntfy.class.php — schmaler Ntfy-Push-Wrapper
  • list.php — Vorschlagsliste-UI mit Multi-Select, Filter nach Stufe / Verzugstagen / Kunde, Buttons „Mahnungen erzeugen" und „Sammelbrief"

PDF-Generator + Erstellen (Phase 4)

  • class/mahnungpdf.class.php — TCPDF-basierter Generator (DIN-5008 Form A): Adressfenster, Bezugszeichenzeile, Tabelle, Gebührenblock, Verzugszinsen mit Snapshot-Zinssatz, neue Frist, Bankverbindungs-Footer
  • PDFs landen in documents/facture/{ref}/mahnung-{stufe}-{ref-mahn}.pdf und erscheinen automatisch im Dokumente-Tab der Rechnung
  • ajax/createmahnung.php — Bulk-Endpoint mit CSRF + Permission-Check, erzeugt Mahnung + PDF, behandelt §288 Abs. 5 Pauschale einmalig pro Rechnung

Hooks + Trigger (Phase 5)

  • core/triggers/interface_99_modMahnung_MahnungTriggers.class.phpBILL_PAYED und PAYMENT_CUSTOMER_CREATE setzen offene Mahnungen auf erledigt
  • class/actions_mahnung.class.php — Hook auf Rechnungs- und Kundenkarte: Tab „Mahnungen (n)" mit Badge, Button „Mahnung erstellen" wenn überfällig
  • card.php — Detailansicht eines Mahnvorgangs mit Storno-Aktion (formconfirm-Modal, kein confirm()-Dialog)

E-Mail + Sammelbrief (Phase 6)

  • ajax/sendmail.php — sendet Mahnung-PDF via CMailFile an die Kunden-Mail; Subject/Body mit Platzhaltern aus Stufen-Konfig
  • ajax/sammelbrief.php — erzeugt Mahnungen für Auswahl, konkateniert ihre PDFs via TCPDI in eine Datei, liefert Download

Integrationen (Phase 7 + 8)

  • GlobalNotify: Cron sendet zusätzlich actionRequired-Notification ins Dolibarr-UI (wenn Modul aktiv)
  • Tab „Mahnungen" auf Kundenkarte (thirdpartycard) zusätzlich zur Rechnungskarte

Audit + Doku (Phase 9)

  • Alle in PHP referenzierten Sprach-Keys in de_DE und en_US vorhanden
  • Alle SQL-Statements parametrisiert über (int)-Cast oder db->escape()
  • Alle AJAX-Endpoints mit CSRF + Permission-Check
  • README + CHANGELOG vollständig

Pipeline (Phase 10)

  • .forgejo/workflows/deploy.yml — Deploy auf /mnt/appdata/firma/dolibarr-202509/modules/mahnung bei Push auf main mit [deploy] oder Tag v*, Ntfy-Notify auf Topic vk-builds

Verifizierte Fundamente

  • DB-Schema in dolibarr_test (192.168.155.11) angelegt, Indizes + Seed-Daten korrekt
  • PHP-Lint sauber für alle 16 PHP-Dateien

Bekannte Lücken / Folge-Tasks

  • ODT-Vorlagen (Pfad in Setup hinterlegbar) für späteren Ausbau — nicht im Erst-Release
  • B2C/B2B-Erkennung pragmatisch via tva_intra — Setup-Toggle für andere Erkennungsregeln folgt
  • Halbjährliche Basiszins-Erinnerung (1.1./1.7.) per Cron-Reminder noch offen