NEXOWARE ConnectSchema-Explorer · Kafka-Backbone

Verträge / AccountState

Geschäftspartner State

AccountState · com.nexoware.connect.events

Aggregat
Account · Patch AccountPatch
Topic
account.state je Mandant mit Präfix, z. B. <mandant>.account.state
Key
AccountUuid
Nachrichtenart
State — der aktuelle Zustand, ein Writer
Schreiber
Zusammenführungsdienst (merge)
Leser
c-entron Webservice (centron) , NEXOWARE.ERP (nexoware-erp)
Fassung
Version 1 (neueste)
Schema-ID
53

Kanonischer Vertrag, Version 1: der vollstaendige zusammengefuehrte Zustand eines Geschaeftspartners (Wurzel des Account-Aggregats). Kunde und Lieferant sind Rollen-Facetten desselben Accounts: die Kunden-Facette reist als Discount, die Lieferanten-Facette als Supplier*-Felder - alle null, wenn der Account die Rolle nicht hat; ob er sie hat, sagt der Vertrag nicht ausdruecklich (docs/contracts/account.md, OFFEN-4). Einziger Writer ist der Zusammenfuehrungsdienst (ADR-0023 Punkt 2 und 4); die Produkte schreiben Patches auf account.patch und lesen diesen State mit isolation.level=read_committed. Identitaet und alle Referenzen ausschliesslich ueber UUID; quell-lokale IDs sind nicht Teil des Vertrags. Feldumfang 1:1 aus dem Bestandsvertrag AccountChanged (archiviert), ergaenzt um Revision und LastEventId. Fachliche Anforderungen: docs/contracts/account.md.

Fassungen

Felder

Referenziert von

Kein Vertrag verweist auf diesen.

Rohfassung

Schema dieser Fassung (Avro)
{
  "type": "record",
  "name": "AccountState",
  "namespace": "com.nexoware.connect.events",
  "doc": "Kanonischer Vertrag, Version 1: der vollstaendige zusammengefuehrte Zustand eines Geschaeftspartners (Wurzel des Account-Aggregats). Kunde und Lieferant sind Rollen-Facetten desselben Accounts: die Kunden-Facette reist als Discount, die Lieferanten-Facette als Supplier*-Felder - alle null, wenn der Account die Rolle nicht hat; ob er sie hat, sagt der Vertrag nicht ausdruecklich (docs/contracts/account.md, OFFEN-4). Einziger Writer ist der Zusammenfuehrungsdienst (ADR-0023 Punkt 2 und 4); die Produkte schreiben Patches auf account.patch und lesen diesen State mit isolation.level=read_committed. Identitaet und alle Referenzen ausschliesslich ueber UUID; quell-lokale IDs sind nicht Teil des Vertrags. Feldumfang 1:1 aus dem Bestandsvertrag AccountChanged (archiviert), ergaenzt um Revision und LastEventId. Fachliche Anforderungen: docs/contracts/account.md.",
  "fields": [
    {
      "name": "AccountUuid",
      "type": {
        "type": "string",
        "logicalType": "uuid"
      },
      "doc": "Stabile, global eindeutige Identitaet des Geschaeftspartners; zugleich Message-Key auf State und Patch."
    },
    {
      "name": "Number",
      "type": "int",
      "doc": "Partnernummer des Geschaeftspartners (c-entron Account.Number, eigener Nummernkreis) - nicht die Kundennummer, die der Bestandsvertrag hier faelschlich nannte. Pflicht bei Anlage und danach unveraenderlich: Ein Patch vergibt keine Nummer neu. Ob die Nummer gemeinsam oder je Produkt gefuehrt wird und ob sie alphanumerisch werden muss, ist offen (docs/contracts/account.md, OFFEN-2)."
    },
    {
      "name": "Name",
      "type": [
        "null",
        "string"
      ],
      "doc": "Name als eine Zeile. Nexoware.ERP fuehrt zwei Namenszeilen und einen Adressatentyp; die Abbildung ist offen (OFFEN-3).",
      "default": null
    },
    {
      "name": "Matchcode",
      "type": [
        "null",
        "string"
      ],
      "doc": "Suchbegriff.",
      "default": null
    },
    {
      "name": "Email",
      "type": [
        "null",
        "string"
      ],
      "default": null
    },
    {
      "name": "Phone",
      "type": [
        "null",
        "string"
      ],
      "default": null
    },
    {
      "name": "Fax",
      "type": [
        "null",
        "string"
      ],
      "default": null
    },
    {
      "name": "WebSite",
      "type": [
        "null",
        "string"
      ],
      "default": null
    },
    {
      "name": "RevenueIdentificationNumber",
      "type": [
        "null",
        "string"
      ],
      "doc": "USt-IdNr.",
      "default": null
    },
    {
      "name": "TaxNumber",
      "type": [
        "null",
        "string"
      ],
      "doc": "Steuernummer.",
      "default": null
    },
    {
      "name": "IsActive",
      "type": "boolean",
      "doc": "Pflicht bei Anlage - kein Default, damit false keine Vollstaendigkeit vortaeuscht. Deaktivierung ist von der Sperre (IsLocked) unabhaengig."
    },
    {
      "name": "IsLocked",
      "type": "boolean",
      "doc": "Sperre. Pflicht bei Anlage, aus demselben Grund wie IsActive."
    },
    {
      "name": "Discount",
      "type": [
        "null",
        {
          "type": "bytes",
          "logicalType": "decimal",
          "precision": 9,
          "scale": 2
        }
      ],
      "doc": "Rabatt-Prozent auf der Kunden-Facette; null, wenn der Account kein Kunde ist.",
      "default": null
    },
    {
      "name": "AccountTypeUuids",
      "type": {
        "type": "array",
        "items": {
          "type": "string",
          "logicalType": "uuid"
        }
      },
      "doc": "Die Arten, denen dieser Geschaeftspartner zugeordnet ist, als Referenzen auf das AccountType-Stammdatum ueber dessen UUID. Eine Liste ist eine Einheit: Ein Patch ersetzt sie als Ganzes (kein positionsweises Mergen). Der AccountType-Vertrag folgt mit dem Umzug seines Fachbereichs. Ob ein Partner Webshop-Kunde ist, liest der Consumer aus dem Kind der zugeordneten Arten - der Vertrag transportiert die Zuordnung, nicht die Auslegung.",
      "default": []
    },
    {
      "name": "EsGroupUuid",
      "type": [
        "null",
        {
          "type": "string",
          "logicalType": "uuid"
        }
      ],
      "doc": "Zuweisung des Kunden zu einer Shop-Kundengruppe (ADR-0016): die Gruppe selbst entsteht im Shop, die Zuweisung ist eine Eigenschaft des Kunden. Referenz ueber die UUID des Shop-Gruppen-Stammdatums; dessen Vertrag folgt mit dem Umzug seines Fachbereichs. Null, wenn der Kunde keiner Gruppe angehoert.",
      "default": null
    },
    {
      "name": "SupplierNumber",
      "type": [
        "null",
        "int"
      ],
      "doc": "Kreditorennummer (Lieferanten-Facette AccountSuppliers). Alle Supplier*-Felder sind null, wenn der Account kein Lieferant ist. Nicht Teil des Vertrags: quell-lokale FK-I3Ds, Buchhaltungs-Export-Prozessstatus und Integrations-Konfiguration (EDI-/Plattform-Kennungen); Lieferanten-Artikelnummern gehoeren zum Lieferantenartikel-Kandidaten.",
      "default": null
    },
    {
      "name": "SupplierBookKeepingNumber",
      "type": [
        "null",
        "string"
      ],
      "doc": "FiBu-Kontonummer des Kreditors.",
      "default": null
    },
    {
      "name": "SupplierBookKeepingCollectionAccount",
      "type": [
        "null",
        "string"
      ],
      "doc": "FiBu-Sammelkonto des Kreditors.",
      "default": null
    },
    {
      "name": "SupplierOwnCustomerNumber",
      "type": [
        "null",
        "string"
      ],
      "doc": "Eigene Kundennummer beim Lieferanten.",
      "default": null
    },
    {
      "name": "SupplierDiscount",
      "type": [
        "null",
        {
          "type": "bytes",
          "logicalType": "decimal",
          "precision": 9,
          "scale": 2
        }
      ],
      "doc": "Rabatt-Prozent auf der Lieferanten-Facette.",
      "default": null
    },
    {
      "name": "SupplierIsDiscountAtPriceBase",
      "type": [
        "null",
        "boolean"
      ],
      "default": null
    },
    {
      "name": "SupplierIsExclusiveOfVAT",
      "type": [
        "null",
        "boolean"
      ],
      "default": null
    },
    {
      "name": "SupplierLimit",
      "type": [
        "null",
        {
          "type": "bytes",
          "logicalType": "decimal",
          "precision": 18,
          "scale": 2
        }
      ],
      "doc": "Kreditlimit beim Lieferanten.",
      "default": null
    },
    {
      "name": "SupplierLimitCalculationKind",
      "type": [
        "null",
        "int"
      ],
      "default": null
    },
    {
      "name": "SupplierClassification",
      "type": [
        "null",
        "int"
      ],
      "default": null
    },
    {
      "name": "SupplierIsManufacturer",
      "type": [
        "null",
        "boolean"
      ],
      "default": null
    },
    {
      "name": "SupplierIsDistributor",
      "type": [
        "null",
        "boolean"
      ],
      "default": null
    },
    {
      "name": "SupplierIsCarrier",
      "type": [
        "null",
        "boolean"
      ],
      "default": null
    },
    {
      "name": "SupplierCarrierShortSign",
      "type": [
        "null",
        "string"
      ],
      "doc": "Kurzzeichen des Frachtfuehrers.",
      "default": null
    },
    {
      "name": "SupplierIsIsoCertified",
      "type": [
        "null",
        "boolean"
      ],
      "default": null
    },
    {
      "name": "SupplierRMANeeded",
      "type": [
        "null",
        "boolean"
      ],
      "doc": "Quellseitig optional (null = unbestimmt), auch bei vorhandener Facette.",
      "default": null
    },
    {
      "name": "SupplierRMAInfo",
      "type": [
        "null",
        "string"
      ],
      "default": null
    },
    {
      "name": "SupplierWEEE",
      "type": [
        "null",
        "string"
      ],
      "doc": "WEEE-Registrierungsnummer.",
      "default": null
    },
    {
      "name": "SupplierFreightCost",
      "type": [
        "null",
        {
          "type": "bytes",
          "logicalType": "decimal",
          "precision": 18,
          "scale": 2
        }
      ],
      "default": null
    },
    {
      "name": "SupplierFreightCostFree",
      "type": [
        "null",
        {
          "type": "bytes",
          "logicalType": "decimal",
          "precision": 18,
          "scale": 2
        }
      ],
      "doc": "Frachtfrei-Grenze (Bestellwert).",
      "default": null
    },
    {
      "name": "SupplierMinimumOrderValue",
      "type": [
        "null",
        {
          "type": "bytes",
          "logicalType": "decimal",
          "precision": 18,
          "scale": 2
        }
      ],
      "default": null
    },
    {
      "name": "SupplierSmallQuantitiesExtraCharge",
      "type": [
        "null",
        {
          "type": "bytes",
          "logicalType": "decimal",
          "precision": 18,
          "scale": 2
        }
      ],
      "doc": "Mindermengenzuschlag.",
      "default": null
    },
    {
      "name": "SupplierIsDirectDelivery",
      "type": [
        "null",
        "boolean"
      ],
      "default": null
    },
    {
      "name": "SupplierFreightCostDirectDelivery",
      "type": [
        "null",
        {
          "type": "bytes",
          "logicalType": "decimal",
          "precision": 18,
          "scale": 2
        }
      ],
      "default": null
    },
    {
      "name": "SupplierFreightCostFreeAtDirectDelivery",
      "type": [
        "null",
        {
          "type": "bytes",
          "logicalType": "decimal",
          "precision": 18,
          "scale": 2
        }
      ],
      "default": null
    },
    {
      "name": "SupplierMinimumOrderValueAtDirectDelivery",
      "type": [
        "null",
        {
          "type": "bytes",
          "logicalType": "decimal",
          "precision": 18,
          "scale": 2
        }
      ],
      "default": null
    },
    {
      "name": "SupplierSmallQuantitiesExtraChargeAtDirectDelivery",
      "type": [
        "null",
        {
          "type": "bytes",
          "logicalType": "decimal",
          "precision": 18,
          "scale": 2
        }
      ],
      "default": null
    },
    {
      "name": "SupplierIsFavorite",
      "type": [
        "null",
        "boolean"
      ],
      "default": null
    },
    {
      "name": "SupplierCommentOffer",
      "type": [
        "null",
        "string"
      ],
      "doc": "Hinweistext fuer Anfragen an den Lieferanten.",
      "default": null
    },
    {
      "name": "SupplierCommentOrder",
      "type": [
        "null",
        "string"
      ],
      "doc": "Hinweistext fuer Bestellungen.",
      "default": null
    },
    {
      "name": "SupplierCommentDeliveryList",
      "type": [
        "null",
        "string"
      ],
      "doc": "Hinweistext fuer Wareneingaenge.",
      "default": null
    },
    {
      "name": "SupplierCommentInvoice",
      "type": [
        "null",
        "string"
      ],
      "doc": "Hinweistext fuer Lieferanten-Rechnungen.",
      "default": null
    },
    {
      "name": "SupplierCommentCreditVoucher",
      "type": [
        "null",
        "string"
      ],
      "doc": "Hinweistext fuer Lieferanten-Gutschriften.",
      "default": null
    },
    {
      "name": "Revision",
      "type": "long",
      "doc": "Anzahl der zustandsaendernden Patches seit Erstanlage. Streng monoton je Objekt - Consumer ueberspringen Revisionen <= der zuletzt uebernommenen."
    },
    {
      "name": "LastEventId",
      "type": {
        "type": "string",
        "logicalType": "uuid"
      },
      "doc": "EventId des zuletzt angewandten Patches (Diagnose)."
    },
    {
      "name": "ChangedByUuid",
      "type": [
        "null",
        {
          "type": "string",
          "logicalType": "uuid"
        }
      ],
      "doc": "UUID des aendernden Mitarbeiters (Employee) aus dem zuletzt angewandten Patch; null, wenn unbekannt.",
      "default": null
    },
    {
      "name": "ChangedAt",
      "type": {
        "type": "long",
        "logicalType": "timestamp-millis"
      },
      "doc": "Audit aus dem zuletzt angewandten Patch als UTC-Instant - kein Konfliktentscheider, es entscheidet die Kafka-Reihenfolge der Patches."
    }
  ],
  "aggregate": "Account",
  "label": "Geschäftspartner",
  "topic": "account.state",
  "key": "AccountUuid",
  "cleanupPolicy": "compact",
  "partitions": 1,
  "writers": [
    "merge"
  ],
  "readers": [
    "centron",
    "nexoware-erp"
  ]
}