# Kapitel 8 – Kundenabrechnung (Customer Usage Data)

## Ziel dieses Kapitels

Nachdem sämtliche Ladevorgänge (Gridware Usages) erfolgreich aus Gridware synchronisiert wurden, beginnt die eigentliche kaufmännische Verarbeitung innerhalb von ERPNext.

Da ein einzelner Ladevorgang in der Regel nicht direkt fakturiert wird, müssen zunächst alle abrechnungsrelevanten Nutzungen eines Kunden innerhalb eines Abrechnungszeitraums zusammengefasst werden.

Hierfür wurde der Custom DocType Customer Usage Data entwickelt. Er bildet die erste kaufmännische Aggregation der technischen Gridware-Daten und dient als Grundlage für die spätere Erstellung von Kundenrechnungen.

## 8.1 Fachlicher Hintergrund

Ein Customer Usage Data Datensatz fasst mehrere einzelne Gridware Usages eines Kunden innerhalb einer Billing Period zusammen.

Während ein Gridware Usage lediglich einen einzelnen Ladevorgang beschreibt, repräsentiert Customer Usage Data bereits einen kaufmännischen Abrechnungsdatensatz.

## 8.3 Warum wurde Customer Usage Data entwickelt?

Die technische Struktur der Gridware-Daten eignet sich nicht direkt für eine Rechnungsstellung.

Ein Kunde kann innerhalb eines Monats:

- zahlreiche Ladevorgänge durchführen,
- mehrere Verträge besitzen,
- unterschiedliche Vertragsarten nutzen,
- verschiedene Zahlungsmethoden verwenden.

Eine Rechnung pro Ladevorgang wäre weder fachlich noch kaufmännisch sinnvoll.

Aus diesem Grund werden sämtliche abrechnungsrelevanten Ladevorgänge zunächst zu Customer Usage Data aggregiert.

## 8.4 Rolle innerhalb der Systemarchitektur

Customer Usage Data bildet die Schnittstelle zwischen den technischen Nutzungsdaten und der eigentlichen Rechnungsstellung.

```
Gridware Usage
        ↓
Customer Usage Data
        ↓
Sales Invoice
        ↓
SEPA / Payment Entry
```

## 8.5 Aggregationslogik

Alle Gridware Usages werden nach definierten Regeln zu einem Customer Usage Data Datensatz zusammengefasst. Die genaue Aggregationslogik richtet sich nach den jeweiligen Vertragsmodellen und Abrechnungsregeln.

Typische Kriterien sind:

- Billing Period
- Kunde
- Vertrag
- Company
- Contract Type
- is reimbursement (Dienstwagen-Fall)

Die Aggregation sorgt dafür, dass sämtliche zusammengehörenden Nutzungen gemeinsam fakturiert werden.

## 8.6 Aufbau des Customer Usage Data Doctypes

<table class="sand-dj266r sand-at24cr sand-1mwwwfo sand-1gojbwh" id="bkmrk-bereich-inhalt-gener"><thead class="sand-dj266r sand-at24cr"><tr class="sand-dj266r sand-at24cr"><th class="sand-dj266r sand-at24cr sand-so031l sand-1q0q8m5 sand-17fyfba sand-1yc453h sand-16dsc37 sand-1lqmthn sand-1m31zm8 sand-1rhlpx6 sand-1wd3ewq">Bereich</th><th class="sand-dj266r sand-at24cr sand-so031l sand-1q0q8m5 sand-17fyfba sand-1yc453h sand-16dsc37 sand-1lqmthn sand-1m31zm8 sand-1rhlpx6 sand-1wd3ewq">Inhalt</th></tr></thead><tbody class="sand-dj266r sand-at24cr"><tr class="sand-dj266r sand-at24cr"><td class="sand-dj266r sand-at24cr sand-so031l sand-1q0q8m5 sand-17fyfba sand-1yc453h sand-16dsc37 sand-19aaqeu sand-1lqmthn sand-1m31zm8">General Information</td><td class="sand-dj266r sand-at24cr sand-so031l sand-1q0q8m5 sand-17fyfba sand-1yc453h sand-16dsc37 sand-19aaqeu sand-1lqmthn sand-1m31zm8">**Customer**, **Billing Period**, **Year**, **Month**, **Is Reimbursement**</td></tr><tr class="sand-dj266r sand-at24cr"><td class="sand-dj266r sand-at24cr sand-so031l sand-1q0q8m5 sand-17fyfba sand-1yc453h sand-16dsc37 sand-19aaqeu sand-1lqmthn sand-1m31zm8">Usage Details (Child Table)</td><td class="sand-dj266r sand-at24cr sand-so031l sand-1q0q8m5 sand-17fyfba sand-1yc453h sand-16dsc37 sand-19aaqeu sand-1lqmthn sand-1m31zm8">je Zeile ein Ladevorgang: **Gridware Usage**, Zeiten, kWh, Preise, **Contract Type**, **Item Code**, **Gridware Usage ID**, **Usage Medium Label**</td></tr><tr class="sand-dj266r sand-at24cr"><td class="sand-dj266r sand-at24cr sand-so031l sand-1q0q8m5 sand-17fyfba sand-1yc453h sand-16dsc37 sand-19aaqeu sand-1lqmthn sand-1m31zm8">Totals</td><td class="sand-dj266r sand-at24cr sand-so031l sand-1q0q8m5 sand-17fyfba sand-1yc453h sand-16dsc37 sand-19aaqeu sand-1lqmthn sand-1m31zm8">kWh, Dauer, Anzahl Sessions und Ladepunkte, Preise excl./incl. VAT</td></tr><tr class="sand-dj266r sand-at24cr"><td class="sand-dj266r sand-at24cr sand-so031l sand-1q0q8m5 sand-17fyfba sand-1yc453h sand-16dsc37 sand-19aaqeu sand-1lqmthn sand-1m31zm8">Price Details</td><td class="sand-dj266r sand-at24cr sand-so031l sand-1q0q8m5 sand-17fyfba sand-1yc453h sand-16dsc37 sand-19aaqeu sand-1lqmthn sand-1m31zm8">Fix, Energie, Zeit, Parken getrennt</td></tr><tr class="sand-dj266r sand-at24cr"><td class="sand-dj266r sand-at24cr sand-17fyfba sand-1yc453h sand-16dsc37 sand-19aaqeu sand-1lqmthn sand-1m31zm8 sand-1qhh985 sand-1sy0etr">Rechnungsbezug</td><td class="sand-dj266r sand-at24cr sand-17fyfba sand-1yc453h sand-16dsc37 sand-19aaqeu sand-1lqmthn sand-1m31zm8 sand-1qhh985 sand-1sy0etr">Link zur Sales Invoice, Status</td></tr></tbody></table>

## 8.7 Status

Während seiner Verarbeitung kann ein Customer Usage Data Datensatz verschiedene Status durchlaufen.

Beispielsweise:

```
Draft

↓

Ready for Billing

↓

Invoiced

↓

Paid
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--2"><div class=""><div class="contents"><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback"><div class="relative"><div class="pe-11 pt-3"><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr" dir="ltr" id="bkmrk--3"></div></div></div></div></div></div></div></div></div></div></div></div><span style="color: rgb(34, 34, 34); font-family: -apple-system, 'system-ui', 'Segoe UI', Oxygen, Ubuntu, Roboto, Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; font-size: 2.8275em; font-weight: 400;">8.8 Besonderheiten</span>

- <span class="sand-dj266r sand-at24cr sand-xzm5a7">USAGE\_ADHOC</span> wird bei der Aggregation übersprungen.
- <span class="sand-dj266r sand-at24cr sand-xzm5a7">Hubject:</span> Verbräuche → Kunde = Wert aus <span class="sand-dj266r sand-at24cr sand-xzm5a7">Default Hubject Roaming Customer</span> (#289, #290).
- <span class="sand-dj266r sand-at24cr sand-xzm5a7">Dienstwagen:</span> Haken <span class="sand-dj266r sand-at24cr sand-xzm5a7">Is Reimbursement</span>, ein CUD je Arbeitgeber.
- <span class="sand-dj266r sand-at24cr sand-xzm5a7">Betreibergebühren (Ladepunktliste):</span> Monatliche Gebühren aus Gridware-Ladepunkt-CSV, keine API. Logik (#161): `any_paid_active` → Paid; `only_internal_active` → Internal; Paid schlägt Internal; `mobilithek_sync` zusätzlich zu Paid. Prozess ist Backlog, fachlich aber Kundenabrechnung.
- Historischer Subscription-/CSV-Prozess: siehe vorheriges Kapitel; solange nicht alles auf CUD umgestellt ist, weiter relevant (#2, #32, #63).

## 8.9 Zusammenfassung

Customer Usage Data bildet die erste kaufmännische Verarbeitungsebene innerhalb der ERPNext-Lösung.

Während Gridware Usage einzelne technische Ladevorgänge beschreibt, fasst Customer Usage Data sämtliche abrechnungsrelevanten Nutzungen eines Kunden zusammen und bereitet diese für die spätere Rechnungsstellung vor.