Folgezähler-Deklaration in der Kundenakte (Auto-Propagation)
- Meter.predecessorMeterId (Self-Relation) + Migration
20260530140000_meter_predecessor mit IF NOT EXISTS
- createMeter akzeptiert optional successorOf:
{predecessorMeterId, installedAt?, finalReadingPrevious?}.
Vorgänger wird validiert (gleicher Kunde + Typ); alle Verträge
mit dem Vorgänger als aktuellen Zähler werden analog zu
addSuccessorMeter automatisch auf den neuen Zähler umgestellt
(ContractMeter-Eintrag mit removedAt/finalReading für den
Vorgänger, neuer ContractMeter mit installedAt + nächster
Position, energyDetails.meterId aktualisiert)
- MeterModal: Checkbox "Als Folgezähler deklarieren" + Dropdown
Vorgänger + Wechseldatum + Endstand. Typ/Tarifmodell/Adresse
werden vom Vorgänger übernommen und disabled. Info-Banner über
Vertragsauto-Update
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -97,6 +97,34 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
|
||||
|
||||
## ✅ Erledigt
|
||||
|
||||
- [x] **🆕 Folgezähler-Deklaration in der Kundenakte (Auto-Propagation)**
|
||||
- **Backend**: Neues Feld `Meter.predecessorMeterId`
|
||||
(Self-Relation, `ON DELETE SET NULL`). Migration
|
||||
`20260530140000_meter_predecessor` mit `IF NOT EXISTS`.
|
||||
`createMeter` akzeptiert optional `successorOf: { predecessorMeterId,
|
||||
installedAt?, finalReadingPrevious? }`. Wenn gesetzt: Vorgänger
|
||||
wird validiert (gleicher Kunde + gleicher Typ), und für alle
|
||||
Verträge, die den Vorgänger als aktuellen Zähler nutzen, wird
|
||||
der ContractMeter-Eintrag analog zu `addSuccessorMeter`
|
||||
propagiert (vorhandener ContractMeter wird `removedAt` +
|
||||
`finalReading` gesetzt; neuer ContractMeter wird mit nächster
|
||||
Position + `installedAt` angelegt; `energyDetails.meterId`
|
||||
auf den Neuzähler aktualisiert). Idempotent gegen Doppel-Klick.
|
||||
- **MeterModal** (Kundenakte → Zähler): Bei Neuanlage neue
|
||||
Checkbox „Diesen Zähler als Folgezähler deklarieren". Wenn
|
||||
aktiv: Dropdown Vorgänger-Zähler (alle Zähler des Kunden,
|
||||
inkl. inaktive – mit Suffix), Wechseldatum (default heute),
|
||||
Endstand alter Zähler (optional). Bei Vorgänger-Auswahl werden
|
||||
Typ, Tarifmodell und Adresse vom Vorgänger übernommen und
|
||||
disabled. Info-Banner: „Alle Verträge mit dem alten Zähler
|
||||
werden automatisch umgestellt".
|
||||
- Audit-Log: „Zähler angelegt als Folgezähler von X für Kunde #N".
|
||||
|
||||
- [x] **🆕 Vertragsansicht: Standort + Inaktiv-Badge beim Zähler**
|
||||
- In den Strom/Gas-Details neben der Zählernummer zusätzlich ein
|
||||
rotes „Inaktiv"-Badge und eine Zeile mit Standort, falls
|
||||
hinterlegt.
|
||||
|
||||
- [x] **🆕 Zähler → Lieferadresse-Pflichtfeld + Vertragsfilter**
|
||||
- **Backend**: Neues Feld `Meter.addressId` (optional FK auf
|
||||
`Address`, `ON DELETE SET NULL`). Migration
|
||||
|
||||
Reference in New Issue
Block a user