Skip to main content

Data Mapping Gridware to ERP Next

Perfekt — dann hier eine konkrete ERPNext-Zielarchitektur für deinen Fall, mit finalen Doctypes, Beziehungen und klarer Prozesslogik.

Ich mache das bewusst so, dass es für dich als Umsetzungsgrundlage für ERPNext + Gridware API taugt.


Zielbild

Architekturfluss

Master Party
→ Customer / Supplier
→ Contract
→ Single Session
→ Billing Run
→ Sales Invoice / Purchase Invoice / SEPA XML / Payment Entry

Das ist aus meiner Sicht die sauberste Struktur, weil du damit trennst zwischen:

  • Stammdaten
  • Vertragslogik
  • Transaktionsdaten
  • Abrechnung
  • Zahlung


1. Zielstruktur der Doctypes

Ich würde das in 3 Ebenen teilen:

A. Stammdaten

  • Master Party
  • Customer
  • Supplier
  • Contact
  • Address
  • Bank Account
  • SEPA Mandate
  • End User

B. Vertrags- und Nutzungsdaten

  • Contract
  • Charging Point / EVSE Mapping
  • Single Session

C. Abrechnung und Zahlung

  • Billing Run
  • Billing Run Item
  • Sales Invoice
  • Purchase Invoice / Credit Settlement
  • Payment Entry
  • SEPA Export Batch


2. Die Doctypes im Detail


2.1 Master Party

Zentrale reale Entität. Eine Person oder Organisation soll nur einmal existieren.

Zweck

Abbildung einer realen Partei unabhängig von ihrer Rolle.

Typ

Custom Doctype

Wichtige Felder

  • party_type → Person / Organization
  • party_name
  • display_name
  • external_source → Gridware / Manual / Other
  • gridware_person_id
  • gridware_organization_id
  • gridware_customer_number
  • gridware_supplier_number
  • tax_id
  • vat_id
  • is_customer
  • is_supplier
  • is_end_user
  • is_contract_giver
  • status
  • raw_payload

Beziehungen

  • 1 Master Party kann haben:
    • 0..1 Customer
    • 0..1 Supplier
    • 0..n Contacts
    • 0..n Addresses
    • 0..n Bank Accounts
    • 0..n SEPA Mandates
    • 0..n Contracts
    • 0..n End Users

Warum wichtig

Damit dieselbe reale Entität nicht doppelt als Customer und Supplier angelegt wird.


2.2 Customer

ERPNext Standard-Doctype, erweitert.

Zweck

Abrechnungsrelevanter Debitor.

Zusätzliche Felder

Nutzung

  • Für Sales Invoice
  • Für Debitorenlogik
  • Für Vertragszuordnung


2.3 Supplier

ERPNext Standard-Doctype, erweitert.

Zweck

Abrechnungsrelevanter Kreditor / Gutschriftempfänger.

Zusätzliche Felder

Nutzung

  • Für Purchase Invoice / Gutschriften / Auszahlungen


2.4 Contact

ERPNext Standard.

Zusätzliche Felder

  • master_party
  • gridware_contact_reference
  • is_billing_contact
  • is_operational_contact


2.5 Address

ERPNext Standard.

Zusätzliche Felder

  • master_party
  • gridware_address_reference
  • address_role → Billing / Installation / Legal / Other


2.6 Bank Account

Kann ERPNext Standard oder eigener Doctype sein, je nach Bedarf.

Zusätzliche Felder

  • master_party
  • customer
  • supplier
  • iban
  • bic
  • account_holder
  • is_default_incoming
  • is_default_outgoing


2.7 SEPA Mandate

Eigener oder bestehender Doctype.

Felder

  • master_party
  • customer
  • iban
  • bic
  • mandate_reference
  • mandate_granted_at
  • status
  • is_active
  • creditor_scheme_id
  • bank_account

Nutzung

  • Direct Debit XML
  • Zahlungsabwicklung


2.8 End User

Würde ich als eigenen Custom Doctype anlegen.

Zweck

Nutzende Person, die laden darf oder lädt, ohne zwingend Rechnungsempfänger oder Lieferant zu sein.

Wichtige Felder

  • end_user_name
  • master_party optional
  • customer
  • contract
  • gridware_user_id
  • recipient_name
  • recipient_number
  • rfid_token
  • app_user_reference
  • vehicle_reference
  • employee_reference
  • status

Warum wichtig

Damit „Mitarbeiter“, „Dienstwagenfahrer“, „Nutzer“, „Empfänger in Sessiondaten“ nicht im Customer/Contact verschwimmen.


3. Vertrags- und Nutzungsdaten


3.1 Contract

Zentraler Kern-Doctype.

Zweck

Technische und fachliche Abbildung eines Gridware Contracts in ERPNext.

Pflichtfelder

  • contract_id / gridware_contract_id
  • contract_number
  • master_party
  • customer
  • supplier
  • end_user optional
  • contract_type
  • classification
  • payment_method
  • price_rule
  • billing_period
  • active_from
  • active_until
  • status

Zusätzliche Fachfelder

  • usage_classification
  • billing_case
  • credit_case
  • invoice_case
  • settlement_logic
  • payment_execution_type

Externe Referenzen

  • gridware_customer_id
  • gridware_supplier_id
  • gridware_creditor_reference
  • gridware_debtor_reference
  • raw_payload

Beispielwerte für Klassifikationen

usage_classification

  • COMPANY_CAR_HOME_CHARGING
  • EMPLOYEE_CHARGING
  • PUBLIC_ADHOC
  • PUBLIC_POSTPAID
  • TENANT_CHARGING

billing_case

  • EMPLOYER_INVOICED
  • END_USER_INVOICED
  • DIRECT_PAY_NO_INVOICE
  • NO_INVOICE

credit_case

  • CONTRACT_GIVER_CREDIT
  • SUPPLIER_CREDIT
  • NO_CREDIT

invoice_case

  • MONTHLY_CONSOLIDATED
  • CONSUMPTION_ONLY
  • STATIC_PLUS_CONSUMPTION
  • ATTACHMENT_PER_END_USER

Warum Contract so wichtig ist

Der Contract ist dein Default-Entscheider für:

  • Wer zahlt
  • Wer Gutschrift bekommt
  • Wie gruppiert wird
  • Wie fakturiert wird
  • Welche Sessions dazugehören


3.2 Charging Point / EVSE Mapping

Optional, aber sehr sinnvoll.

Zweck

Zuordnung technischer Ladepunkte zu Verträgen / Orten / Parteien.

Felder

  • evse_id
  • charging_point_name
  • contract
  • customer
  • supplier
  • location
  • gridware_reference
  • status

Nutzung

  • Session-Zuordnung
  • Plausibilitätsprüfungen
  • Reporting


3.3 Single Session

Eigener Doctype. Ganz wichtig.

Zweck

Jeder einzelne Ladevorgang aus Gridware.

Pflichtfelder

  • session_id / external_session_id
  • document_number
  • contract
  • customer
  • supplier
  • end_user
  • evse_id
  • charging_point
  • start_datetime
  • end_datetime
  • consumption_kwh

Kosten- und Tarifdaten

  • payment_amount_net
  • payment_amount_vat
  • payment_amount_gross
  • energy_net
  • parking_net
  • service_fee_net
  • currency

Technische Daten

  • usage_medium
  • authorization_type
  • billing_period
  • import_run
  • source_system
  • raw_payload

Abgeleitete Felder

  • derived_usage_classification
  • derived_billing_case
  • derived_credit_case
  • derived_invoice_case
  • classification_status
  • classification_note
  • included_in_billing_run
  • billing_run
  • is_billable
  • is_credited

Warum wichtig

Das ist die belastbare Basis für:

  • Anhänge
  • Rechnungen
  • Gutschriften
  • Rekonstruktion
  • Korrekturen
  • Reporting


4. Abrechnungsebene


4.1 Billing Run

Eigener Doctype. Würde ich auf jeden Fall ergänzen.

Zweck

Abrechnungscontainer für einen Zeitraum und eine bestimmte fachliche Kombination.

Felder

  • billing_run_name
  • period_from
  • period_to
  • customer
  • supplier
  • contract
  • billing_case
  • credit_case
  • invoice_case
  • currency
  • status → Draft / Ready / Invoiced / Settled / Error
  • session_count
  • total_consumption_kwh
  • total_amount_net
  • total_amount_vat
  • total_amount_gross

Verlinkungen

  • sales_invoice
  • purchase_invoice
  • payment_entry
  • sepa_export_batch

Zweck in der Praxis

Der Billing Run ist die Ebene, auf der du sagst:

Für Kunde X, Vertrag Y, Zeitraum März 2026, invoice_case MONTHLY_CONSOLIDATED, credit_case CONTRACT_GIVER_CREDIT — diese 173 Sessions gehören zusammen.

Ohne diesen Zwischenschritt wird es später chaotisch.


4.2 Billing Run Item

Kind-Table oder eigener Child-Doctype.

Zweck

Zuordnung der Sessions zum Billing Run.

Felder

  • single_session
  • customer
  • supplier
  • contract
  • end_user
  • amount_net
  • amount_vat
  • amount_gross
  • consumption_kwh
  • invoice_relevant
  • credit_relevant

Vorteil

Dann kannst du später Billing Runs einfrieren und nachvollziehen, was genau enthalten war.


5. ERPNext Output-Dokumente


5.1 Sales Invoice

ERPNext Standard.

Erzeugt aus

Billing Run, wenn billing_case eine Kundenrechnung verlangt.

Typische Fälle

  • Arbeitgeber wird belastet
  • End User wird belastet
  • monatliche Sammelrechnung
  • statisch + Verbrauch
  • Verbrauch only

Empfehlung

Die Invoice sollte nicht direkt aus Single Sessions gebaut werden, sondern aus Billing Run.


5.2 Purchase Invoice oder Supplier Credit Settlement

Für Gutschriften / Auszahlungen an Contract Giver / Supplier.

Je nach ERPNext-Setup:

  • Purchase Invoice mit neg./positiver Logik
  • oder eigener Auszahlungs-Doctype mit späterem Payment Entry
  • oder Gutschriftenprozess

Erzeugt aus

Billing Run, wenn credit_case != NO_CREDIT


5.3 SEPA Export Batch

Eigener Doctype.

Zweck

Gruppierung von Direct-Debit-Zahlungen für XML-Erzeugung.

Felder

  • batch_id
  • company
  • creditor_scheme_id
  • collection_date
  • payment_type
  • message_id
  • payment_info_id
  • control_sum
  • number_of_transactions
  • status
  • xml_file
  • sales_invoices

Nutzung

  • pain.008 XML
  • Nachverfolgung
  • Bankexport


5.4 Payment Entry

ERPNext Standard.

Nutzung

  • Eingang von Customer-Zahlungen
  • Auszahlung an Supplier
  • Verrechnung mit Invoices


6. Beziehungen als Zielmodell

So würde ich die Beziehungen definieren:

Stammdaten

  • Master Party 1 → 0..1 Customer
  • Master Party 1 → 0..1 Supplier
  • Master Party 1 → n Contact
  • Master Party 1 → n Address
  • Master Party 1 → n Bank Account
  • Master Party 1 → n SEPA Mandate
  • Master Party 1 → n End User

Verträge

  • Contract n → 1 Customer
  • Contract n → 1 Supplier
  • Contract n → 0..1 End User
  • Contract n → 1 Master Party optional als Ursprungsentität

Sessions

  • Single Session n → 1 Contract
  • Single Session n → 1 Customer
  • Single Session n → 1 Supplier
  • Single Session n → 0..1 End User
  • Single Session n → 0..1 Charging Point / EVSE

Abrechnung

  • Billing Run n → 1 Contract
  • Billing Run n → 1 Customer
  • Billing Run n → 0..1 Supplier
  • Billing Run 1 → n Billing Run Item
  • Billing Run Item n → 1 Single Session

Output

  • Billing Run 1 → 0..1 Sales Invoice
  • Billing Run 1 → 0..1 Purchase Invoice
  • Billing Run 1 → 0..1 SEPA Export Batch
  • Sales Invoice 1 → 0..1 Payment Entry
  • Purchase Invoice 1 → 0..1 Payment Entry


7. Prozessfluss


Schritt 1: Stammdatenimport

Aus Gridware:

  • Person / Organization
  • Customer-Daten
  • Supplier-Daten
  • Contract-Daten

In ERPNext:

  • Master Party erstellen/finden
  • daraus Customer und/oder Supplier erzeugen
  • Contact / Address / SEPA / Bank anlegen
  • externe IDs speichern


Schritt 2: Contract Import

  • Contract aus Gridware anlegen/aktualisieren
  • Customer/Supplier verlinken
  • Klassifikationsfelder ableiten:
    • usage_classification
    • billing_case
    • credit_case
    • invoice_case


Schritt 3: Session Import

  • Single Sessions importieren
  • Contract zuordnen
  • Customer/Supplier/End User ableiten
  • Session-Klassifikation ableiten
  • Billing Period setzen


Schritt 4: Billing Run erzeugen

Gruppierung z. B. nach:

  • period
  • customer
  • supplier
  • contract
  • billing_case
  • credit_case
  • invoice_case

Dann:

  • passende Sessions sammeln
  • Summen bilden
  • Billing Run erstellen
  • Billing Run Items schreiben


Schritt 5: Fakturierung / Gutschrift

Je nach Klassifikation:

  • Sales Invoice erzeugen
  • Purchase Invoice / Credit erzeugen
  • Anhänge auf Basis Sessions generieren


Schritt 6: Zahlung

Je nach Zahlungsweg:

  • Rechnung offen lassen
  • SEPA XML erzeugen
  • Payment Entry buchen
  • Supplier-Auszahlung buchen


8. Minimalversion für den Start

Falls ihr nicht alles sofort bauen wollt, würde ich mit dieser Minimalversion starten:

Phase 1

  • Customer erweitern
  • Supplier erweitern
  • Contract
  • Single Session
  • Billing Run
  • SEPA Mandate
  • optionale Master Party light

Phase 2

  • End User
  • Charging Point Mapping
  • Billing Run Item
  • SEPA Export Batch
  • Party Master vollständig

Phase 3

  • Automatische Klassifikationsengine
  • automatische Gutschriftenlogik
  • Fehler-/Review-Queue
  • Rebuild von Billing Runs


9. Meine konkrete Empfehlung für euch

Wenn du mich fragst, wie ich es wirklich implementieren würde, dann so:

Unbedingt custom bauen

  • Master Party
  • Contract
  • End User
  • Single Session
  • Billing Run
  • Billing Run Item
  • SEPA Export Batch
  • EVSE Mapping

ERPNext Standard verwenden

  • Customer
  • Supplier
  • Contact
  • Address
  • Sales Invoice
  • Purchase Invoice
  • Payment Entry

ERPNext Standard erweitern

  • Customer
  • Supplier
  • Contact
  • Address
  • ggf. Bank / SEPA


10. Einfache visuelle Zielkette

So soll es am Ende logisch aussehen:

Gridware API
→ importiert Party / Contract / Session
→ ERPNext normalisiert zu Customer / Supplier / End User / Contract / Single Session
→ Sessions werden pro Zeitraum in Billing Runs gruppiert
→ Billing Runs erzeugen Sales Invoice / Supplier Credit / SEPA XML / Payment Entry


11. Mein Fazit

Ja — so sollte es aussehen, wenn du eine robuste, ausbaufähige Architektur für becharged bauen willst.

Der wichtigste Unterschied zu einem reinen ER-Modell ist:

  • nicht nur Tabellen definieren,
  • sondern klare Prozessanker einbauen:
    • Contract für Default-Logik
    • Single Session für Nachvollziehbarkeit
    • Billing Run für Abrechnungskontrolle
    • Master Party für Dublettenfreiheit
    • End User für fachliche Sauberkeit


Als nächsten Schritt kann ich dir das jetzt in einer von zwei Formen aufbereiten:

Variante A: als saubere Tabelle pro Doctype mit Feldname, Feldtyp, Pflicht/optional, Beschreibung
oder
Variante B: als Mermaid ER-Diagramm / Architekturdiagramm zum direkten Kopieren in Doku oder Ticket.