Skip to main content

Kapitel 4 – Stammdatenverwaltung

Ziel dieses Kapitels

Die Stammdaten bilden das Fundament der ERPNext-Lösung. Sämtliche nachgelagerten Prozesse – von der Vertragsverwaltung über die Verarbeitung von Ladevorgängen bis hin zur Rechnungsstellung – greifen auf diese Daten zu.

Dieses Kapitel beschreibt den Aufbau der Stammdaten, deren Herkunft sowie deren Zusammenspiel innerhalb der ERPNext-Lösung.

Nach diesem Kapitel soll der Leser verstehen,

  • welche Stammdaten innerhalb ERPNext verwaltet werden,

  • aus welchem System diese stammen,

  • wie die Synchronisation erfolgt,

  • welche Daten manuell gepflegt werden dürfen,

  • welche Stammdaten ausschließlich aus Gridware übernommen werden.

4.1 Überblick

Die Stammdatenverwaltung umfasst sämtliche dauerhaft benötigten Informationen innerhalb der ERPNext-Lösung.

Hierzu gehören insbesondere:

Stammdaten Beschreibung Quelle
Typ CustomerGridware Party RechnungsempfängerTechnischer Vertragspartner aus Gridware API Automat. Customer Rechnungsempfänger Party Automat. Supplier Betreiber bzw. Lieferanten ContactParty Ansprechpartnerdetails Automat. Contact Ansprechpartnerdetails Party Automat. Address Rechnungs-, Liefer- und Standortadressen Gridware Party Technischer Vertragspartner aus GridwareAutomat. Company Eigene Gesellschaft(en) innerhalb ERPNext ERPNext Manuell Item Artikel für Rechnungs- und Lieferantenabrechnung ERPNext Manuell Subscription Wiederkehrende und variable Gebühren Payment TermsERPNext ZahlungsbedingungenManuell SEPAPayment MandateTerms LastschriftmandateZahlungsbedingungen ERPNext Manuell SEPA Mandate Lastschriftmandate Gridware Automat. Bank Accounts Bankkonten für SEPA Lastschriftverfahren Gridware Automat.

Diese Stammdaten werden in nahezu allen Geschäftsprozessen verwendet.

4.2 Gridware Party (Custom) 

Zweck

Die Gridware Party bildet die zentrale Integrationsschicht zwischen der Datenstruktur von Gridware und der kaufmännischen Datenstruktur von ERPNext.

Während ERPNext zwischen Customer und Supplier unterscheidet, verfolgt Gridware einen anderen Ansatz. Dort wird zunächst in Entitäten (Parties) gedacht. Eine Entität repräsentiert entweder eine Person oder eine Organisation und beschreibt damit den eigentlichen Vertragspartner.

Erst innerhalb eines bestimmten Vertrags oder Geschäftsprozesses erhält diese Entität eine fachliche Rolle. Eine Entität kann beispielsweise:

  • ausschließlich Kunde sein,
  • ausschließlich Lieferant sein oder
  • gleichzeitig Kunde und Lieferant sein.

Diese Flexibilität lässt sich mit den Standard-Doctypes von ERPNext nicht abbilden, da Customer und Supplier dort voneinander getrennte Stammdatenobjekte sind.

Aus diesem Grund wurde der Gridware Party Doctype als zentrale Integrationsschicht entwickelt.

Rolle innerhalb der Systemarchitektur
Gridware API
    ↓
[Authentifizierung & Datenabfrage]
    ↓
Gridware Party (zentrale Integrationsschicht)
    ↓
    ├─→ Customer (wenn is_customer=1)
    ├─→ Supplier (wenn is_supplier=1)
    ├─→ Contact (Ansprechpartner)
    ├─→ Address (Adressen)
    └─→ Gridware Payment Method (SEPA-Mandate)

Der Gridware Party Doctype steht im Zentrum der Stammdatensynchronisation

drawing-11-1784821527.png

Alle späteren Geschäftsprozesse greifen indirekt auf den Gridware Party Datensatz zurück.

Aufbau des Doctypes

Der Gridware Party Doctype speichert sämtliche grundlegenden Informationen eines Vertragspartners.

Screenshot 2026-07-23 at 17.39.01.png

Die Informationen lassen sich in mehrere Bereiche unterteilen.

Tab 1 – Details

Der Reiter Details enthält die grundlegenden Stammdaten sowie die fachliche Klassifizierung der Entität.

Connections

Im oberen Bereich werden sämtliche Beziehungen der Gridware Party zu anderen ERPNext-Objekten dargestellt.

Hierzu gehören insbesondere:

  • Customer – Verknüpfung zum kaufmännischen Kunden
  • Supplier – Verknüpfung zum Lieferanten
  • Gridware Contract – Zugeordnete Verträge

Dadurch ist jederzeit nachvollziehbar, in welchen kaufmännischen Prozessen die Entität verwendet wird.

Basic Identity

Dieser Bereich beschreibt die eigentliche Identität der Entität.

Gespeichert werden unter anderem:

    DisplayNamePartyFeld KindDatentyp Quelle Beschreibung display_name Text Gridware API Anzeigename (Person oder Organisation)Organization) party_kind Select Gridware SubjectAPI IDOrganization Vorname Nachname Anrede Aktivstatus

    Die/ Person / User

    gridware_subject_id Text (eindeutig) Gridware SubjectAPI ID stellt den eindeutigen technischenTechnischer Identifikator daraus undGridware organization_name Text Gridware API Name der Organisation (bei party_kind="Organization") first_name Text Gridware API Vorname (bei party_kind="Person"/"User") last_name Text Gridware API Nachname (bei party_kind="Person"/"User") salutation Link→Salutation Gridware API Anrede (Herr/Frau/etc.) is_active Check Gridware API Aktiv-Status (0/1) is_employee Check Gridware API Mitarbeiter-Flag (0/1)

    Wichtig: Die gridware_subject_id ist der eindeutige technische Identifikator. Sie dient als Referenz für sämtliche Synchronisationsprozesse.Synchronisationsprozesse und wird von Gridware als subjectId für Personen oder Organisationen vergeben.

    Contact

    Hier werden die grundlegenden Kommunikationsinformationen gespeichert.

    Screenshot 2026-07-23 at 17.46.46.png

    Beispiele:

    • Telefonnummer
    • E-Mail-Adresse
    Feld Datentyp Quelle contact_id Text Gridware API email Email Gridware API phone Text Gridware API (Funktion: sanitize_phone_number)

    Diese Daten dienen später als Grundlage für die automatische Erstellung bzw. Aktualisierung von ERPNext Contacts.

    Role Classification and Links

    Dieser Bereich definiert die fachliche Rolle der Entität innerhalb des Systems.

    Eine Entität kann dabei folgende Rollen besitzen:

    • Customer
    • Supplier
    • Customer und Supplier gleichzeitig

    Zusätzlich werden hier die jeweiligen Gridware-spezifischen Nummern gespeichert.

    Beispiele:

    • Feld Datentyp Wert Beschreibung
    is_customer Check 0/1 Ist diese Party ein Kunde? gridware_customer_number Text z.B. "BEC-K-00001058" Eindeutige Kundennummer aus Gridware Customer NumberGridwareexternal_customer_number SupplierText Numberz.B. "EXT-789" Externe Kundennummer (z.B. vom CPO) is_supplier Check 0/1 Ist diese Party ein Lieferant? gridware_supplier_number Text z.B. "BEC-L-00001143" Eindeutige Lieferantennummer aus Gridware

    Diese Informationen werden in späteren Geschäftsprozessen, insbesondere im Vertragsmanagement und in der Abrechnung, verwendet.

    Tab 2 – Address & Contact

    Der Reiter Address & Contact verwaltet sämtliche Adressinformationen einer Gridware Party.

    Dabei wird bewusst zwischen den Originaldaten aus Gridware und den innerhalb ERPNext erzeugten Stammdaten unterschieden.

    Die Adress und Kontaktdatensätze werden sowohl vom DocType Supplier als auch Customer verwendet, sodass es nicht zu Duplikaten kommt. Jeder Adress- und Kontaktdatensatz wird mit einer ID versehen, die direkt zu der Gridware Party zugeordnet werden kann. 

    Raw Address

    Im oberen Bereich werden sämtliche Adressen gespeichert, die direkt aus Gridware synchronisiert wurden.

    Hierzu gehören beispielsweise:

      Feld Beschreibung gridware_address_id Eindeutige Address ID aus Gridware address_type Adresstyp (z. B. POSTAL)"POSTAL", "LOCATION", etc.) street Straße house_number Hausnummer postal_code Postleitzahl Ort city Stadt country Land additional_info Zusatzinformationen

      Diese Daten stellen den unveränderten Datenbestand aus Gridware dar und dienen als Grundlage für die weitere Verarbeitung innerhalb ERPNext.

      Address & Contact

      Screenshot 2026-07-23 at 17.52.14.png

      Screenshot 2026-07-23 at 18.22.54.png

      Im unteren Bereich können aus den synchronisierten Rohdaten automatisch ERPNext-Stammdaten erstellt werden.

      Hier werden anschließend die eigentlichen ERPNext-Objekte verwaltet:

      • Address
      • Contact

      Dadurch erfolgt eine klare Trennung zwischen den synchronisierten Gridware-Daten und den kaufmännischen Stammdaten innerhalb ERPNext.

      Diese Struktur ermöglicht es, Änderungen an den Originaldaten nachzuvollziehen und gleichzeitig die ERPNext-Standards vollständig zu nutzen.

      Tab 3 – Payment Method

      Der Reiter Payment Method enthält sämtliche Zahlungsmethoden, die einer Gridware Party zugeordnet sind.

      Da eine Entität mehrere Zahlungsmethoden besitzen kann (immer nur eine Methode aktiv, die anderen als Historie), wurde dieser Bereich als Child Table umgesetzt.

      Jede Zeile repräsentiert eine einzelne Gridware Payment Method.

      Gridware Payment Method

      Für jede Zahlungsmethode werden unter anderem folgende Informationen gespeichert:

        Feld Beschreibung Quelle gridware_payment_id Eindeutige ID aus Gridware Gridware PaymentAPI ID Payment Typepayment_type (z. B. SEPA)"SEPA", ERPNext"CARD", etc. Gridware API erpnext_bank_account Link→Bank Account Automatisch gemappt bank_name Name der Bank Gridware API iban Kontonummer Gridware API bic Bank NameClearing IBANCode BICGridware ERPNextAPI erpnext_sepa_mandate Link→SEPA Mandate SEPAAutomatisch Mandateerstellt sepa_mandate_id SEPA-ID aus Gridware Gridware API created_date Erstellungsdatum KennzeichnungGridware alsAPI is_default Standard-Zahlungsmethode Gridware API
        Screenshot 2026-07-23 at 17.58.40.pngScreenshot 2026-07-23 at 17.58.46.png
        Zweck

        Dieser Bereich bildet die Grundlage für sämtliche Zahlungsprozesse innerhalb der ERPNext-Lösung.

        Die gespeicherten Informationen werden insbesondere verwendet für:

        • Erstellung von SEPA-Mandaten
        • Zuordnung von Bankkonten
        • Generierung von SEPA-XML-Dateien
        • Zahlungsabwicklung
        • Payment Entries

        Durch die Verknüpfung zwischen der Gridware Payment ID und dem ERPNext Bank Account kann jederzeit nachvollzogen werden, welche Zahlungsmethode aus Gridware welchem Bankkonto und welchem SEPA-Mandat in ERPNext entspric

        Typische Anwendungsfälle

        Ein Gridware Party Datensatz wird unter anderem verwendet für:

        • Synchronisation neuer Kunden

        • Synchronisation neuer Lieferanten

        • Aktualisierung von Kontaktdaten

        • Verknüpfung mit Gridware Contracts

        • Zuordnung von Payment Methods

        • Erstellung von Customer- und Supplier-Beziehungen

        • Grundlage für Customer Portal Benutzer

        • Identifikation von Vertragspartnern während der Abrechnung

        4.3 Customer

        Zweck

        Der Customer repräsentiert den kaufmännischen Rechnungsempfänger innerhalb ERPNext.

        Ein Customer kann sowohl eine Privatperson als auch ein Unternehmen sein.

        Der Customer bildet die Grundlage für:

        • Angebote

        • Aufträge

        • Rechnungen

        • Payment Entries

        • Subscriptions

        • Customer Portal

        • Customer Usage Data (für Ladevorgänge)

        Herkunft

        Customer werden nicht in ERP Next manuell angelegt. Sie entstehen durch die Synchronisation der entsprechenden Organisation oder Person aus Gridware. 

        Während der Synchronisation erfolgt zusätzlich die Verknüpfung mit:

        • Contacts

        • Addresses

        • Contracts

        • Payment Methods


        Besondere Anpassungen

        Im Rahmen der Implementierung wurden Customer um projektspezifische Informationen erweitert.

        Hierzu gehören unter anderem:

          Custom
          Fields

          Gridware-ID

          Zuordnung

          Feld zuDatentyp Beschreibung custom_gridware_party Link→Gridware ContractsParty Referenz zur

          API-Synchronisation

          technischen Party

          Customer

          Portalcustom_gridware_customer_number Text Eindeutige

          Vertragsinformationen

          Kundennummer (Index) custom_sepa_mandate_reference Link→SEPA Mandate Standard-Lastschriftmandat

          4.4 Supplier

          Zweck

          Supplier repräsentieren Betreiber oder andere Leistungserbringer, welche später gegenüber becharged abgerechnet werden.

          Sie bilden die Grundlage für:

          • Purchase Invoices

          • Supplier Usage Data

          • Lieferantenabrechnungen

          • Rückvergütungen


          Herkunft

          Wie Customer entstehen auch Supplier auf Basis der Informationen aus Gridware.

           

          Die Zuordnung erfolgt über den jeweiligen Gridware Contract.


          Zukunft

          Mit der Erweiterung der Lieferantenabrechnung wird dieser Bereich deutlich an Bedeutung gewinnen.

          Insbesondere werden zukünftig weitere Funktionen ergänzt:

            Lieferantengutschriften

            Selbstabrechnung

            Auszahlungsprozesse

            Supplier Statements


            4.5 Contacts

            Contacts enthalten sämtliche Ansprechpartner eines Customers oder Suppliers.

            Ein Unternehmen kann mehrere Ansprechpartner besitzen.

            Typische Rollen:

            • Primary Contact

            • Billing Contact

            • Technical Contact

            Bei der Erstellung von Verkaufsdokumenten wird automatisch der passende Ansprechpartner verwendet.


            4.6 Addresses

            Adressen werden getrennt von Customer und Supplier verwaltet.

            Dadurch können mehrere Adressen einem Geschäftspartner zugeordnet werden.

            Beispiele:

            • Rechnungsadresse

            • Lieferadresse

            • Firmenstandort

            • Ladepark

            • Baustelle

            Für die Druckformate gelten projektspezifische Regeln bezüglich Customer Name, Address Title und Contact Person.

            (Verweis auf Kapitel "Druckformate")


            4.7 Items

            Artikel bilden die Grundlage sämtlicher Rechnungs- und Lieferantenabrechnungen.

            Je nach Geschäftsmodell werden unterschiedliche Artikel verwendet.

            Beispiele:

            • Ladevorgänge

            • Monatliche Grundgebühren

            • Hardware

            • Dienstleistungen

            • Erstattungen

            Die Zuordnung erfolgt später über die Vertragslogik.


            Zuordnung

            via Contract Type Mapping

            Quelle: becharged/becharged/utils.py Funktion get_item_code_from_mapping

            # In Becharged Settings: contract_type_mappings (Child Table)
            settings = frappe.get_single("Becharged Settings")
            
            for mapping in settings.contract_type_mappings:
                # Contract Type + VAT → Item Code
                if (mapping.contract_type == "USAGE_POSTPAID" and 
                    mapping.vat_rate == 19):
                    return "CHARGING-POSTPAID-19"  # Item Code
            

            Tabelle (Beispiel):

            Contract Type VAT % Item Code Beschreibung USAGE_POSTPAID 19 CHARGING-POSTPAID-19 Ladung, umsatzsteuerpflichtig USAGE_POSTPAID 0 CHARGING-POSTPAID-0 Ladung, steuerfrei AUTHORIZATION 19 CHARGING-AUTH-19 Autorisierung USAGE_ADHOC 19 CHARGING-ADHOC-19 Ad-hoc-Ladung (übersprungen) 19 (keiner) Nicht verrechenbar

            4.8 Subscriptions

            Subscriptions bilden die Grundlage für wiederkehrende Abrechnungen.

            Sie werden insbesondere verwendet für:

            • monatliche Grundgebühren

            • Vertragsgebühren

            • Servicegebühren

            Zusätzlich werden im Rahmen der monatlichen Abrechnung die entsprechenden Verbrauchsdaten ergänzt.


            4.9 Payment Terms & SEPA

            Für jeden Customer können Zahlungsbedingungen und SEPA-Informationen hinterlegt werden.

            Die SEPA-Stammdaten stammen grundsätzlich aus Gridware und werden nach ERPNext synchronisiert.

            Sie bilden die Grundlage für:

            • SEPA-XML

            • Payment Entries

            • Lastschriftverfahren

            4.10 Synchronisationsprozesse: 

            Daily Scheduler Jobs

            Quelle: hooks.py

            scheduler_events = {
                "daily": [
                    "becharged.becharged.utils.fetch_all_contract_parties",
                    "becharged.becharged.utils.update_gridware_usage_suppliers",
                    "becharged.becharged.doctype.gridware_usage.gridware_usage.retry_failed_usage_completion"
                ]
            }
            

            1. fetch_all_contract_parties() (täglich)

            Quelle: utils.py

            def fetch_all_contract_parties():
                """
                Findet alle Gridware Contracts wo:
                - gridware_supplier_party gesetzt, aber supplier NICHT gesetzt
                - contract_customers.gridware_party gesetzt, aber customer NICHT gesetzt
                
                Erstellt dann die fehlenden Customer/Supplier Links
                """
            

            Logik:

            SELECT DISTINCT gc.name
            FROM `tabGridware Contract` gc
            LEFT JOIN `tabGridware Contract Customer` gcc ON gcc.parent = gc.name
            WHERE 
                (gc.gridware_supplier_party IS NOT NULL 
                 AND gc.gridware_supplier_party != ''
                 AND (gc.supplier IS NULL OR gc.supplier = ''))
                OR
                (gcc.gridware_party IS NOT NULL 
                 AND gcc.gridware_party != ''
                 AND (gcc.customer IS NULL OR gcc.customer = ''))
            

            2. update_gridware_usage_suppliers() (täglich)

            Quelle: utils.py

            def update_gridware_usage_suppliers():
                """
                Updated supplier + gridware_supplier_party in allen Gridware Usage
                basierend auf deren Gridware Contract
                """
            

            Logik:

            SELECT gu.name, gc.supplier, gc.gridware_supplier_party
            FROM `tabGridware Usage` gu
            INNER JOIN `tabGridware Contract` gc ON gu.gridware_contract = gc.name
            WHERE 
                (gc.gridware_supplier_party IS NOT NULL 
                 AND (gu.gridware_supplier_party IS NULL OR gu.gridware_supplier_party = ''))
                OR
                (gc.supplier IS NOT NULL 
                 AND (gu.supplier IS NULL OR gu.supplier = ''))

            4.11 Typische Fehler

            Problem Ursache Lösung
            Customer fehlt Synchronisation nicht durchgeführt API-Synchronisation prüfen
            Supplier fehlt Gridware Party nicht zugeordnet Contract prüfen
            Contact fehlt Ansprechpartner nicht synchronisiert API erneut ausführen
            Adresse falsch Änderungen nur in ERPNext vorgenommen Änderungen in Gridware durchführen
            SEPA fehlt Mandat nicht synchronisiert Payment Method prüfen

            4.12 Best Practices

            Für die Pflege der Stammdaten gelten folgende Grundregeln:

            • Stammdaten grundsätzlich im führenden System pflegen.

            • Manuelle Änderungen an synchronisierten Feldern vermeiden.

            • Änderungen nach Möglichkeit über die vorgesehenen Synchronisationsprozesse durchführen.

            Zusammenfassung

            Die Stammdatenverwaltung bildet die Grundlage aller weiteren Geschäftsprozesse. Eine konsistente Pflege und Synchronisation der Stammdaten ist Voraussetzung für eine fehlerfreie Vertragsverwaltung, Abrechnung und Finanzbuchhaltung.