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
-
AccountUuid Key uuidStabile, global eindeutige Identitaet des Geschaeftspartners; zugleich Message-Key auf State und Patch.
-
Number intPartnernummer 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 optional stringDefault:
nullName als eine Zeile. Nexoware.ERP fuehrt zwei Namenszeilen und einen Adressatentyp; die Abbildung ist offen (OFFEN-3). -
Matchcode optional stringDefault:
nullSuchbegriff. -
Email optional stringDefault:
null -
Phone optional stringDefault:
null -
Fax optional stringDefault:
null -
WebSite optional stringDefault:
null -
RevenueIdentificationNumber optional stringDefault:
nullUSt-IdNr. -
TaxNumber optional stringDefault:
nullSteuernummer. -
IsActive booleanPflicht bei Anlage - kein Default, damit false keine Vollstaendigkeit vortaeuscht. Deaktivierung ist von der Sperre (IsLocked) unabhaengig.
-
IsLocked booleanSperre. Pflicht bei Anlage, aus demselben Grund wie IsActive.
-
Discount optional decimal(9,2)Default:
nullRabatt-Prozent auf der Kunden-Facette; null, wenn der Account kein Kunde ist. -
AccountTypeUuids Liste ↗ extern: AccountType uuid[]Default:
[]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:
nullZuweisung 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. -
SupplierNumber optional intDefault:
nullKreditorennummer (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. -
SupplierBookKeepingNumber optional stringDefault:
nullFiBu-Kontonummer des Kreditors. -
SupplierBookKeepingCollectionAccount optional stringDefault:
nullFiBu-Sammelkonto des Kreditors. -
SupplierOwnCustomerNumber optional stringDefault:
nullEigene Kundennummer beim Lieferanten. -
SupplierDiscount optional decimal(9,2)Default:
nullRabatt-Prozent auf der Lieferanten-Facette. -
SupplierIsDiscountAtPriceBase optional booleanDefault:
null -
SupplierIsExclusiveOfVAT optional booleanDefault:
null -
SupplierLimit optional decimal(18,2)Default:
nullKreditlimit beim Lieferanten. -
SupplierLimitCalculationKind optional intDefault:
null -
SupplierClassification optional intDefault:
null -
SupplierIsManufacturer optional booleanDefault:
null -
SupplierIsDistributor optional booleanDefault:
null -
SupplierIsCarrier optional booleanDefault:
null -
SupplierCarrierShortSign optional stringDefault:
nullKurzzeichen des Frachtfuehrers. -
SupplierIsIsoCertified optional booleanDefault:
null -
SupplierRMANeeded optional booleanDefault:
nullQuellseitig optional (null = unbestimmt), auch bei vorhandener Facette. -
SupplierRMAInfo optional stringDefault:
null -
SupplierWEEE optional stringDefault:
nullWEEE-Registrierungsnummer. -
SupplierFreightCost optional decimal(18,2)Default:
null -
SupplierFreightCostFree optional decimal(18,2)Default:
nullFrachtfrei-Grenze (Bestellwert). -
SupplierMinimumOrderValue optional decimal(18,2)Default:
null -
SupplierSmallQuantitiesExtraCharge optional decimal(18,2)Default:
nullMindermengenzuschlag. -
SupplierIsDirectDelivery optional booleanDefault:
null -
SupplierFreightCostDirectDelivery optional decimal(18,2)Default:
null -
SupplierFreightCostFreeAtDirectDelivery optional decimal(18,2)Default:
null -
SupplierMinimumOrderValueAtDirectDelivery optional decimal(18,2)Default:
null -
SupplierSmallQuantitiesExtraChargeAtDirectDelivery optional decimal(18,2)Default:
null -
SupplierIsFavorite optional booleanDefault:
null -
SupplierCommentOffer optional stringDefault:
nullHinweistext fuer Anfragen an den Lieferanten. -
SupplierCommentOrder optional stringDefault:
nullHinweistext fuer Bestellungen. -
SupplierCommentDeliveryList optional stringDefault:
nullHinweistext fuer Wareneingaenge. -
SupplierCommentInvoice optional stringDefault:
nullHinweistext fuer Lieferanten-Rechnungen. -
SupplierCommentCreditVoucher optional stringDefault:
nullHinweistext fuer Lieferanten-Gutschriften. -
Revision longAnzahl der zustandsaendernden Patches seit Erstanlage. Streng monoton je Objekt - Consumer ueberspringen Revisionen <= der zuletzt uebernommenen.
-
LastEventId ↗ extern: LastEventId uuidEventId des zuletzt angewandten Patches (Diagnose).
-
ChangedByUuid optional ↗ extern: ChangedBy uuidDefault:
nullUUID des aendernden Mitarbeiters (Employee) aus dem zuletzt angewandten Patch; null, wenn unbekannt. -
ChangedAt timestampAudit aus dem zuletzt angewandten Patch als UTC-Instant - kein Konfliktentscheider, es entscheidet die Kafka-Reihenfolge der Patches.
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"
]
}