Data Mapping Gridware to ERP Next
In Log the Raw Data is stored
Mapping to Party Master DocType for Master Data
Organisation
|
Gridware field |
API |
Ziel-Doctype |
Ziel-Feld in ERPNext |
Bemerkung |
|
id (Organization ID) |
/services/organizations |
Master Party |
gridware_organization_id |
Eindeutige Org-ID |
|
id (Organization ID) |
/services/organizations |
Master Party |
gridware_subject_id |
Normalisierte Haupt-ID |
|
“ORGANIZATION" set by API URL |
/services/organizations |
Master Party |
gridware_subject_type |
Für einheitliche Importlogik |
|
name |
/services/organizations |
Master Party |
organization_name |
Official Name |
|
name |
/services/organizations |
Master Party |
display_name |
Display Name |
|
type |
/services/organizations |
Master Party |
is_customer / is_supplier |
CUSTOMER → is_customer = 1, is_supplier = 0 SUPPLIER → is_customer = 0, is_supplier = 1 BOTH → is_customer = 1, is_supplier = 1 |
|
customerNumber |
/services/organizations |
Master Party |
gridware_customer_number |
Falls vorhanden |
|
supplierNumber |
/services/organizations |
Master Party |
gridware_supplier_number |
Falls vorhanden |
|
API Payload |
/services/organizations |
Master Party |
raw_payload |
Für Debugging/Sync |
|
Import Datetime |
/services/organizations |
Master Party |
last_imported_at |
Systemseitig setzen |
Person:
|
Gridware Feld |
API |
Ziel-Doctype |
Ziel-Feld in ERPNext |
Bemerkung |
|
ID (Person ID) |
/services/persons/export |
Master Party |
gridware_person_id |
Eindeutige Personen-ID |
|
ID (Person ID) |
/services/persons/export |
Master Party |
gridware_subject_id |
Normalisierte Haupt-ID |
|
"PERSON" set by API URL |
/services/persons/export |
Master Party |
gridware_subject_type |
Für einheitliche Importlogik |
|
Firstname |
/services/persons/export |
Master Party |
first_name |
Vorname |
|
Lastname |
/services/persons/export |
Master Party |
last_name |
Nachname |
|
Firstname + Lastname |
/services/persons/export |
Master Party |
display_name |
Zusammengesetzter Anzeigename |
|
Account.email |
/services/persons/export |
Master Party |
|
Haupt-E-Mail |
|
API Payload komplett |
/services/persons/export |
Master Party |
raw_payload |
Für Debugging/Sync |
|
Import-Zeitpunkt |
/services/persons/export |
Master Party |
last_imported_at |
Systemseitig setzen |
Adress for Organisation or Person
|
Gridware Feld |
API |
Ziel-Doctype |
Ziel-Feld in ERPNext |
Bemerkung |
|
ID (Address) |
/services/addresses/for-organization/{organizationId}/{addressType} OR /services/addresses/for-person/{personId} |
Master Party Address |
external_address_id |
Externe Address-ID |
|
Address Type |
services/addresses/for-organization/{organizationId}/{addressType} OR /services/addresses/for-person/{personId} |
Master Party Address |
address_type |
Postal / Billing / Invoice |
|
Street |
services/addresses/for-organization/{organizationId}/{addressType} OR /services/addresses/for-person/{personId} |
Master Party Address |
street |
Straße |
|
Streetno |
services/addresses/for-organization/{organizationId}/{addressType} OR /services/addresses/for-person/{personId} |
Master Party Address |
street_no |
Hausnummer |
|
zipCode |
services/addresses/for-organization/{organizationId}/{addressType} OR /services/addresses/for-person/{personId} |
Master Party Address |
zip_code |
PLZ |
|
City |
/services/addresses/for-organization/{organizationId}/{services/addresses/for-organization/{organizationId}/{addressType} OR /services/addresses/for-person/{personId}} |
Master Party Address |
city |
Ort |
|
Country |
services/addresses/for-organization/{organizationId}/{addressType} OR /services/addresses/for-person/{personId} |
Master Party Address |
country |
Map on ERPNext Country |
|
Telephone |
services/addresses/for-organization/{organizationId}/{addressType} OR /services/addresses/for-person/{personId} |
Master Party Address |
telephone |
Telefon |
|
|
services/addresses/for-organization/{organizationId}/{addressType} OR /services/addresses/for-person/{personId} |
Master Party Address |
|
Falls auf Address-Level vorhanden |
|
Primary Flag |
? |
Master Party Address |
is_primary |
Falls Gridware so etwas liefert |
|
erzeugter ERPNext Address Datensatz |
Link |
Master Party Address |
erpnext_address |
Optional nachgelagert |
Payment Methode:
|
Gridware Feld |
API adress |
Ziel-Doctype |
Ziel-Feld in ERPNext |
Bemerkung |
|
ID (Payment Method) |
/services/payment-methods |
Master Party Payment Method |
external_payment_id |
Haupt-ID |
|
Type |
/services/payment-methods |
Master Party Payment Method |
payment_type |
z. B. SEPA / Direct Debit |
Then:
|
Gridware Feld |
API adress |
Ziel-Doctype |
Ziel-Feld in ERPNext |
Bemerkung |
|
Iban |
/services/payment-methods/ID |
Master Party Payment Method |
iban |
Wichtig für Bankkonto |
|
BankName |
/services/payment-methods/ID |
Master Party Payment Method |
bank_name |
Falls Detail-Endpoint das liefert |
|
MandateID |
/services/payment-methods/ID |
Master Party Payment Method |
mandate_id |
Wichtig für SEPA Mandate |
|
CreatedAt |
/services/payment-methods/ID |
Master Party Payment Method |
created_at |
|
|
erzeugtes ERPNext Bank Account |
LINK |
Master Party Payment Method |
erpnext_bank_account |
Optional nachgelagert |
|
erzeugtes ERPNext SEPA Mandate |
LINK |
Master Party Payment Method |
erpnext_sepa_mandate |
Optional nachgelagert |
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:
1. Zielstruktur der Doctypes
Ich würde das in 3 Ebenen teilen:
A. Stammdaten
B. Vertrags- und Nutzungsdaten
C. Abrechnung und Zahlung
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
Beziehungen
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
2.3 Supplier
ERPNext Standard-Doctype, erweitert.
Zweck
Abrechnungsrelevanter Kreditor / Gutschriftempfänger.
Zusätzliche Felder
Nutzung
2.4 Contact
ERPNext Standard.
Zusätzliche Felder
2.5 Address
ERPNext Standard.
Zusätzliche Felder
2.6 Bank Account
Kann ERPNext Standard oder eigener Doctype sein, je nach Bedarf.
Zusätzliche Felder
2.7 SEPA Mandate
Eigener oder bestehender Doctype.
Felder
Nutzung
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
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
Zusätzliche Fachfelder
Externe Referenzen
Beispielwerte für Klassifikationen
usage_classification
billing_case
credit_case
invoice_case
Warum Contract so wichtig ist
Der Contract ist dein Default-Entscheider für:
3.2 Charging Point / EVSE Mapping
Optional, aber sehr sinnvoll.
Zweck
Zuordnung technischer Ladepunkte zu Verträgen / Orten / Parteien.
Felder
Nutzung
3.3 Single Session
Eigener Doctype. Ganz wichtig.
Zweck
Jeder einzelne Ladevorgang aus Gridware.
Pflichtfelder
Kosten- und Tarifdaten
Technische Daten
Abgeleitete Felder
Warum wichtig
Das ist die belastbare Basis für:
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
Verlinkungen
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
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
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:
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
Nutzung
5.4 Payment Entry
ERPNext Standard.
Nutzung
6. Beziehungen als Zielmodell
So würde ich die Beziehungen definieren:
Stammdaten
Verträge
Sessions
Abrechnung
Output
7. Prozessfluss
Schritt 1: Stammdatenimport
Aus Gridware:
In ERPNext:
Schritt 2: Contract Import
Schritt 3: Session Import
Schritt 4: Billing Run erzeugen
Gruppierung z. B. nach:
Dann:
Schritt 5: Fakturierung / Gutschrift
Je nach Klassifikation:
Schritt 6: Zahlung
Je nach Zahlungsweg:
8. Minimalversion für den Start
Falls ihr nicht alles sofort bauen wollt, würde ich mit dieser Minimalversion starten:
Phase 1
Phase 2
Phase 3
9. Meine konkrete Empfehlung für euch
Wenn du mich fragst, wie ich es wirklich implementieren würde, dann so:
Unbedingt custom bauen
ERPNext Standard verwenden
ERPNext Standard erweitern
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:
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, BeschreibungoderVariante B: als Mermaid ER-Diagramm / Architekturdiagramm zum direkten Kopieren in Doku oder Ticket.