Feature: Zählpunkt-Konzept einführen #1
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Kontext:
Aktuell hängen Meter und TariffPeriod unabhängig voneinander. Beim Zählerwechsel entsteht ein neuer Meter-Eintrag, der über replaces_meter_id mit dem alten verkettet wird. Tarife bleiben dabei pro meter_id hinterlegt — bei jedem Zählerwechsel muss der Tarif technisch neu zugeordnet werden, obwohl sich am eigentlichen Vertrag/Anschluss nichts ändert.
Idee:
Ein "Zählpunkt" (MeteringPoint) bildet die physikalische/vertragliche Konstante ab, die sich über Zählerwechsel hinweg nicht ändert (z.B. "Gasanschluss Haus", "Stromanschluss Haus", "Wasseranschluss Garten"). Ein oder mehrere Meter (auch zeitlich nacheinander durch Wechsel) gehören zu genau einem MeteringPoint.
Vorteile:
Tarife werden am MeteringPoint hinterlegt statt am einzelnen Meter — sie überleben Zählerwechsel automatisch, ohne dass man sie neu zuordnen muss.
Saubere fachliche Trennung: "Wie viel habe ich verbraucht/produziert" (Meter/Reading) vs. "Was kostet das" (Tarif am Zählpunkt).
Berücksichtigt auch den Sonderfall Strom, wo ein physischer Zähler mehrere Messgrößen liefert (Bezug + Einspeisung), aber trotzdem ein Zählpunkt ist.
Betroffene Bereiche (grobe Einschätzung, Aufwand mittel-groß):
Neues Modell MeteringPoint (id, label, Verknüpfung zu Metern)
Meter.metering_point_id (statt/zusätzlich zur direkten Tarif-Zuordnung)
TariffPeriod.metering_point_id statt meter_id
Migration für bestehende Daten (jeder existierende Meter bekommt automatisch einen 1:1-Zählpunkt)
Anpassung aller Cost-Endpoints (/api/costs/, /api/costs/wastewater/, /api/costs/yearly-projection), die aktuell Tarife über meter_id nachschlagen
Frontend: Tarifverwaltung müsste auf Zählpunkt statt Meter umgestellt werden
Abgrenzung: Dieses Feature ist unabhängig vom Zählerwechsel-Feature (replaces_meter_id-Kette) und kann separat danach umgesetzt werden.