---
title: Keine Doppelverrechnung
lang: de
audience: platform
status: built
source: hand
proof:
  - billing-redelivery-idempotent
  - billing-crash-then-silence
  - billing-e-billable
  - billing-extract-rounding
  - billing-xs-month
  - rerating-is-idempotent
  - no-intent-left-at-close
  - ledger-matches-rating
  - ledger-nets-to-zero
  - extract-covers-ledger
  - slot-fold-agreement
  - provisional-never-pays
  - rated-values-match-hash
  - rounding-difference-never-booked
---

## Die Zusicherung {#no-double-billing}

Quartura verrechnet jede Viertelstunde eines Messpunkts je Tarifkomponente genau einmal. Eine erneute Lieferung, eine erneute Validierung oder eine erneute Bewertung derselben Werte bewegt kein Geld. Eine Korrektur bucht nur die Differenz zum bereits Gebuchten; betrifft sie einen abgeschlossenen Monat, bucht sie im ersten offenen Monat. Jeder Betrag steht im Hauptbuch als ausgeglichene Buchung, und der Auszug zeigt genau, was das Hauptbuch hält.

## Der Slot als Abrechnungseinheit {#billing-slot}

Die Einheit der Abrechnung ist der Slot: ein Messpunkt, eine Tarifkomponente, eine Viertelstunde. Energiekomponenten bewerten die validierte Menge in Wh mit einem exakten Preis je Wh. Grund- und Messgebühren sind Anteile ihrer Periode, etwa des Monats; jeder Slot trägt seinen Anteil, auf eine ganze Einheit gerundet. Beträge sind ganze Zahlen in Einheiten von 10⁻⁸ CHF, nie Gleitkommazahlen.

Jede Bewertung eines Slots hält ihren Input-Hash fest: einen Fingerabdruck über die Version des Messwerts und seinen Wertestatus, die Version des Preises, die Tarifzuordnung und die Version des Bewertungsverfahrens. Der Input-Hash sagt, worauf ein Betrag steht.

## Wiederholte Bewertung bewegt kein Geld {#idempotent-rating}

- Eine identische Lieferung erkennt Quartura beim Empfang; sie erzeugt keinen neuen Messwert.
- Steht ein Slot bereits auf demselben Input-Hash, bewegt die Bewertung kein Geld.
- Ergibt eine neue Version denselben Betrag, etwa eine erneute Validierung mit gleichen Werten unter einem neuen Regelsatz, wechselt der Input-Hash, die Buchung bleibt.
- Jede Bewertung wird genau einmal gebucht. Das Hauptbuch bestätigt für eine Bewertung nie mehr Buchungen, als ihre Slots Buchungsschritte haben.

Der Wertestatus bestimmt die Art der Buchung: Ein W wird gebucht. Ein E oder V steht zunächst als Vormerkung; ein V zahlt nie. Folgt später ein W, wird die Vormerkung mit dem Betrag des W gebucht, oder die Differenz dazu.

## Doppelte Buchführung {#double-entry-ledger}

Jeder Betrag ist eine ausgeglichene Buchung zwischen der Forderung des Messpunkts je Tarifkomponente und dem Gegenkonto der Tarifkomponente. Je Währung sind Soll und Haben gleich, und die Salden, die das Hauptbuch für seine Konten führt, stimmen mit der Summe der Buchungen überein. Je Slot ist gebucht plus vorgemerkt gleich dem zuletzt bewerteten Betrag.

Gebuchtes wird nie geändert. Ändert sich ein Betrag, bewegt eine weitere Buchung die Differenz oder hebt die Vormerkung auf; danach ist je Slot gebucht plus vorgemerkt wieder gleich dem zuletzt bewerteten Betrag.

## Periodenabschluss {#period-close}

Eine berechtigte Person schliesst einen Monat ab. Der Abschluss prüft jeden Messpunkt und wartet auf die Buchungen, die noch unterwegs sind: Eine offene Buchung blockiert den Abschluss, sie wird nicht übersprungen. Der Abschluss meldet erst, wenn alle Buchungen gelandet sind. Keine Bewertung des Monats bleibt ohne Buchung, ausser das Hauptbuch hat sie wegen einer Abweichung angehalten; dann weist der Abschluss sie als angehalten aus.

Beim Abschluss wird jedes E des Monats final gebucht, ausser es ist angehalten oder sein Messpunkt ist im Bericht des Abschlusses aufgeführt; der Bericht nennt, was offen bleibt. Ein V bleibt vorgemerkt und zahlt nichts. Danach ist der folgende Monat der erste offene Monat. Ein später W oder eine andere Korrektur eines abgeschlossenen Monats bucht im ersten offenen Monat, als Differenz zum Gebuchten, mit Buchungsmonat und Liefermonat. Eine Korrektur behält die Regeln ihres Liefermonats, auch wenn sie in einem späteren Monat gebucht wird; eine geänderte Regel gilt ab ihrem Monat.

## Auszug {#extract}

Der Auszug je Messpunkt und Monat zeigt jede gebuchte Einheit des Monats, nicht mehr und nicht weniger. Er liest jeden Slot so, wie der Slot selbst nach jedem Schritt steht. Die Rundung einer Auszugszeile wird ausgewiesen, nie gebucht.

Der Auszug zum Stand eines Abschlusses bleibt dieser Stand. Eine spätere Korrektur erscheint im Auszug ihres Buchungsmonats, nicht rückwirkend im abgeschlossenen Monat.

## Nachweis {#proof}

Szenarien der Plattform prüfen die Zusicherung von der Lieferung bis zum Auszug, mit synthetischen Daten:

- `billing-redelivery-idempotent`: Dieselben Tage werden zweimal geliefert und validiert, zweimal bewertet, und es bewegt sich kein Geld.
- `billing-crash-then-silence`: Ein Abschluss, der beginnt, während die letzten Buchungen unterwegs sind, wartet auf sie und bucht nichts doppelt.
- `billing-e-billable`: Ein E wird beim Abschluss final gebucht, ein V bleibt vorgemerkt, und der späte W zum Tag des V bucht im ersten offenen Monat.
- `billing-extract-rounding`: Eine geänderte Rundungsregel gilt ab ihrem Monat, eine Korrektur behält die Regel ihres Liefermonats, und der Auszug zum Stand eines Abschlusses nimmt sie nicht auf.
- `billing-xs-month`: Ein Monat von zehn Messpunkten läuft von der Lieferung über Validierung, Bewertung und Hauptbuch bis zum abgeschlossenen Monat und einem Auszug je Kunde.

Jedes dieser Szenarien prüft am Ende dieselben Invarianten über alles, was der Lauf bewertet und gebucht hat:

- `rerating-is-idempotent`: Eine Bewertung auf einem Input-Hash, auf dem der Slot schon steht, bewegt kein Geld; jede Bewertung geschieht genau einmal; nie mehr Buchungen als Buchungsschritte.
- `no-intent-left-at-close`: Keine Bewertung eines abgeschlossenen Monats bleibt vor dem Abschluss ohne ihre Buchung oder ihre Anhaltung wegen einer Abweichung.
- `ledger-matches-rating`: Je Slot ist gebucht plus vorgemerkt gleich dem zuletzt bewerteten Betrag.
- `ledger-nets-to-zero`: Je Währung sind Soll und Haben gleich, und die Salden des Hauptbuchs stimmen überein.
- `extract-covers-ledger`: Jede gebuchte Einheit erscheint im Auszug ihres Monats, nicht mehr und nicht weniger.
- `slot-fold-agreement`: Was der Auszug von einem Slot liest, stimmt nach jedem Schritt mit dem Stand des Slots überein.
- `provisional-never-pays`: Nichts Gebuchtes steht auf einem V oder einem vorläufigen Preis; ein E wird nur durch den Abschluss final gebucht oder als Differenz auf einem bereits finalen Slot, und beim Abschluss ist jedes E des Monats gebucht, angehalten oder im Bericht genannt.
- `rated-values-match-hash`: Jeder bewertete Wert ergibt aus Preis, Menge, Versionen und Wertestatus genau den Input-Hash, auf dem seine Bewertung steht.
- `rounding-difference-never-booked`: Die Rundung einer Auszugszeile steht in keiner Buchung; das Hauptbuch hält den ungerundeten Betrag.

## So läuft es {#how-it-works}

Ein validierter Messwert mit seinem Wertestatus führt zur Bewertung jedes Slots, den er betrifft, mit ihrem Input-Hash. Jede Bewertung wird zu einer Buchungsabsicht. Steht der Slot schon auf diesem Hash oder bleibt sein Betrag gleich, trägt sie keine Buchung; sonst bucht das Hauptbuch sie: W als Buchung, E und V als Vormerkung. Der Periodenabschluss wartet auf alle offenen Buchungsabsichten, bucht die E final, soweit nicht angehalten, und lässt die V vorgemerkt. Der Auszug liest das Ergebnis je Messpunkt und Monat. Eine spätere Korrektur eines abgeschlossenen Monats durchläuft denselben Weg und bucht im ersten offenen Monat.
