Verträge / AccountSpecialPriceState
Kundensonderpreis State
AccountSpecialPriceState · com.nexoware.connect.events
- Aggregat
- AccountSpecialPrice
- Topic
- accountspecialprice.state je Mandant mit Präfix, z. B.
<mandant>.accountspecialprice.state - Key
- AccountSpecialPriceUuid
- Nachrichtenart
- State — der aktuelle Zustand, ein Writer
- Schreiber
- c-entron Webservice (centron)
- Leser
- Shop (shop) , NEXOWARE.ERP (nexoware-erp)
- Fassung
- Version 1 (neueste)
- Schema-ID
- 98
Vertragsentwurf: vollstaendiger veroeffentlichter Zustand fuer Kundensonderpreis. Feldumfang aus dem archivierten AccountSpecialPriceChanged; kein fachlicher Vergleich beider Produkte. Direkte Veroeffentlichung durch centron; kein Patch-Pfad. Grenzen, Migration und offene Fachregeln: docs/contracts/accountspecialprice.md.
Fassungen
Felder
-
AccountSpecialPriceUuid Key uuidStabile, global eindeutige Identitaet der Preisregel (Matching-Schluessel; zugleich Message-Key).
-
Default:
"00000000-0000-0000-0000-000000000000"Referenz auf den Geschaeftspartner, fuer den die Regel gilt, ueber dessen UUID. Parent-Referenz und damit Pflicht: kann der Producer sie nicht aufloesen, scheitert er laut, statt still null zu senden (event-envelope.md). Die Legacy adressiert den Kunden hier ueber seine Nummer (ObjectI3D mit ObjectKind CustomerClass); die Nummer selbst ist nicht Teil des Vertrags. -
Default:
nullBezugsobjekt Artikel: Referenz auf das Artikel-Stammdatum ueber dessen UUID. Gesetzt genau dann, wenn MaterialGroupUuid null ist - die Regel gilt dann fuer diesen einen Artikel. -
Default:
nullBezugsobjekt Warengruppe: Referenz auf das Warengruppen-Stammdatum ueber dessen UUID. Gesetzt genau dann, wenn ArticleUuid null ist - die Regel gilt dann fuer alle Artikel der Gruppe. Sie greift nur auf Artikel mit gepflegter Warengruppe, weil ArticleState.MaterialGroupUuid quellseitig nullable ist; das ist fachliche Realitaet der Quelle und kein Vertragsdefekt (ADR-0018, Punkt 4). Dass AccountSpecialPriceDTO.MaterialGroupI3D quellseitig die Warengruppen-Nummer statt der I3D fuehrt, ist Legacy-Mechanik und endet am Vertrag: hier reist die UUID. -
ValueKind enum(UNKNOWN|FIXED_PRICE|EVP_MINUS_PERCENT|SALES_PRICE_MINUS_PERCENT|LIST_PRICE_MINUS_PERCENT|PURCHASE_PRICE_PLUS_PERCENT)Default:
"UNKNOWN"Rechenart der Regel - abgeschlossene Aufzaehlung und damit Vertragsinhalt: jeder preisrechnende Konsument setzt sie exakt gleich um (ADR-0018, Punkt 3). FIXED_PRICE = Value ist der Netto-Endpreis selbst. EVP_MINUS_PERCENT = Abschlag auf ArticleState.EVP. SALES_PRICE_MINUS_PERCENT = Abschlag auf ArticleState.Price1 (VK). LIST_PRICE_MINUS_PERCENT = Abschlag auf ArticleState.ListPrice. PURCHASE_PRICE_PLUS_PERCENT = Aufschlag auf ArticleState.PurchasePrice (EK). UNKNOWN sendet der Producer nie; es ist allein der Landeplatz fuer Leser, die ein spaeter ergaenztes Symbol antreffen, und darf nicht als Preisregel ausgewertet werden. Erste Aufzaehlung des Korpus, die als Avro-Enum statt als int reist: die Wertemenge ist hier Vertragsinhalt und nicht - wie bei den Kind-Feldern - eine roh durchgereichte Quell-Klassifikation. -
Value decimal(18,4)Default:
"\u0000"Wert der Regel; seine Bedeutung haengt an ValueKind. Bei FIXED_PRICE ein Netto-Betrag in Hauswaehrung, bei den Prozent-Rechenarten ein Prozentsatz - 12.5 bedeutet 12,5 Prozent, nicht den Faktor 0,125. Der Wert traegt kein Vorzeichen: ob ab- oder aufgeschlagen wird, steckt in ValueKind. Skala 4 wie die Referenzpreise im ArticleState, damit ein Fixpreis ohne Genauigkeitsverlust reist. -
ValidFrom optional timestampDefault:
nullBeginn des Gueltigkeitszeitraums als UTC-Instant, Grenze einschliesslich: die Regel gilt ab diesem Zeitpunkt. null = nach hinten unbegrenzt. -
ValidTo optional timestampDefault:
nullEnde des Gueltigkeitszeitraums als UTC-Instant, Grenze einschliesslich: die Regel gilt bis zu diesem Zeitpunkt. null = unbefristet. Ein vorzeitiger Widerruf reist als neuer Voll-Snapshot mit verkuerztem ValidTo, kein Tombstone. -
State intDefault:
0LWW-Statusfeld: 1 = aktiv, 0 = deaktiviert. Die Legacy liest nur aktive Regeln (GetAccountSpecialPrices mit ShowOnlyActive); Deaktivierung reist als Voll-Snapshot mit geaendertem State, kein Tombstone. Eine deaktivierte Regel gilt unabhaengig von ihrem Gueltigkeitszeitraum nicht. Die Wertemenge der Quelle ist noch nicht verifiziert. -
Revision longStreng monotone Revision je Objekt, vom publizierenden Produkt bei einer Zustandsaenderung erhoeht und zusammen mit der Outbox persistiert. Wiederholungen behalten die Revision.
-
LastEventId ↗ extern: LastEventId uuidStabile EventId des zuletzt publizierten Zustands; bei Wiederholung derselben Outbox-Nachricht identisch.
-
Default:
nullUUID des aendernden Mitarbeiters (Employee); null, wenn unbekannt. -
ChangedAt timestampZeitpunkt der Aenderung als UTC-Instant.
Referenziert von
Kein Vertrag verweist auf diesen.
Rohfassung
Schema dieser Fassung (Avro)
{
"type": "record",
"name": "AccountSpecialPriceState",
"namespace": "com.nexoware.connect.events",
"doc": "Vertragsentwurf: vollstaendiger veroeffentlichter Zustand fuer Kundensonderpreis. Feldumfang aus dem archivierten AccountSpecialPriceChanged; kein fachlicher Vergleich beider Produkte. Direkte Veroeffentlichung durch centron; kein Patch-Pfad. Grenzen, Migration und offene Fachregeln: docs/contracts/accountspecialprice.md.",
"fields": [
{
"name": "AccountSpecialPriceUuid",
"type": {
"type": "string",
"logicalType": "uuid"
},
"doc": "Stabile, global eindeutige Identitaet der Preisregel (Matching-Schluessel; zugleich Message-Key)."
},
{
"name": "AccountUuid",
"type": {
"type": "string",
"logicalType": "uuid"
},
"doc": "Referenz auf den Geschaeftspartner, fuer den die Regel gilt, ueber dessen UUID. Parent-Referenz und damit Pflicht: kann der Producer sie nicht aufloesen, scheitert er laut, statt still null zu senden (event-envelope.md). Die Legacy adressiert den Kunden hier ueber seine Nummer (ObjectI3D mit ObjectKind CustomerClass); die Nummer selbst ist nicht Teil des Vertrags.",
"default": "00000000-0000-0000-0000-000000000000"
},
{
"name": "ArticleUuid",
"type": [
"null",
{
"type": "string",
"logicalType": "uuid"
}
],
"doc": "Bezugsobjekt Artikel: Referenz auf das Artikel-Stammdatum ueber dessen UUID. Gesetzt genau dann, wenn MaterialGroupUuid null ist - die Regel gilt dann fuer diesen einen Artikel.",
"default": null
},
{
"name": "MaterialGroupUuid",
"type": [
"null",
{
"type": "string",
"logicalType": "uuid"
}
],
"doc": "Bezugsobjekt Warengruppe: Referenz auf das Warengruppen-Stammdatum ueber dessen UUID. Gesetzt genau dann, wenn ArticleUuid null ist - die Regel gilt dann fuer alle Artikel der Gruppe. Sie greift nur auf Artikel mit gepflegter Warengruppe, weil ArticleState.MaterialGroupUuid quellseitig nullable ist; das ist fachliche Realitaet der Quelle und kein Vertragsdefekt (ADR-0018, Punkt 4). Dass AccountSpecialPriceDTO.MaterialGroupI3D quellseitig die Warengruppen-Nummer statt der I3D fuehrt, ist Legacy-Mechanik und endet am Vertrag: hier reist die UUID.",
"default": null
},
{
"name": "ValueKind",
"type": {
"type": "enum",
"name": "AccountSpecialPriceValueKind",
"symbols": [
"UNKNOWN",
"FIXED_PRICE",
"EVP_MINUS_PERCENT",
"SALES_PRICE_MINUS_PERCENT",
"LIST_PRICE_MINUS_PERCENT",
"PURCHASE_PRICE_PLUS_PERCENT"
],
"default": "UNKNOWN"
},
"doc": "Rechenart der Regel - abgeschlossene Aufzaehlung und damit Vertragsinhalt: jeder preisrechnende Konsument setzt sie exakt gleich um (ADR-0018, Punkt 3). FIXED_PRICE = Value ist der Netto-Endpreis selbst. EVP_MINUS_PERCENT = Abschlag auf ArticleState.EVP. SALES_PRICE_MINUS_PERCENT = Abschlag auf ArticleState.Price1 (VK). LIST_PRICE_MINUS_PERCENT = Abschlag auf ArticleState.ListPrice. PURCHASE_PRICE_PLUS_PERCENT = Aufschlag auf ArticleState.PurchasePrice (EK). UNKNOWN sendet der Producer nie; es ist allein der Landeplatz fuer Leser, die ein spaeter ergaenztes Symbol antreffen, und darf nicht als Preisregel ausgewertet werden. Erste Aufzaehlung des Korpus, die als Avro-Enum statt als int reist: die Wertemenge ist hier Vertragsinhalt und nicht - wie bei den Kind-Feldern - eine roh durchgereichte Quell-Klassifikation.",
"default": "UNKNOWN"
},
{
"name": "Value",
"type": {
"type": "bytes",
"logicalType": "decimal",
"precision": 18,
"scale": 4
},
"doc": "Wert der Regel; seine Bedeutung haengt an ValueKind. Bei FIXED_PRICE ein Netto-Betrag in Hauswaehrung, bei den Prozent-Rechenarten ein Prozentsatz - 12.5 bedeutet 12,5 Prozent, nicht den Faktor 0,125. Der Wert traegt kein Vorzeichen: ob ab- oder aufgeschlagen wird, steckt in ValueKind. Skala 4 wie die Referenzpreise im ArticleState, damit ein Fixpreis ohne Genauigkeitsverlust reist.",
"default": "\u0000"
},
{
"name": "ValidFrom",
"type": [
"null",
{
"type": "long",
"logicalType": "timestamp-millis"
}
],
"doc": "Beginn des Gueltigkeitszeitraums als UTC-Instant, Grenze einschliesslich: die Regel gilt ab diesem Zeitpunkt. null = nach hinten unbegrenzt.",
"default": null
},
{
"name": "ValidTo",
"type": [
"null",
{
"type": "long",
"logicalType": "timestamp-millis"
}
],
"doc": "Ende des Gueltigkeitszeitraums als UTC-Instant, Grenze einschliesslich: die Regel gilt bis zu diesem Zeitpunkt. null = unbefristet. Ein vorzeitiger Widerruf reist als neuer Voll-Snapshot mit verkuerztem ValidTo, kein Tombstone.",
"default": null
},
{
"name": "State",
"type": "int",
"doc": "LWW-Statusfeld: 1 = aktiv, 0 = deaktiviert. Die Legacy liest nur aktive Regeln (GetAccountSpecialPrices mit ShowOnlyActive); Deaktivierung reist als Voll-Snapshot mit geaendertem State, kein Tombstone. Eine deaktivierte Regel gilt unabhaengig von ihrem Gueltigkeitszeitraum nicht. Die Wertemenge der Quelle ist noch nicht verifiziert.",
"default": 0
},
{
"name": "Revision",
"type": "long",
"doc": "Streng monotone Revision je Objekt, vom publizierenden Produkt bei einer Zustandsaenderung erhoeht und zusammen mit der Outbox persistiert. Wiederholungen behalten die Revision."
},
{
"name": "LastEventId",
"type": {
"type": "string",
"logicalType": "uuid"
},
"doc": "Stabile EventId des zuletzt publizierten Zustands; bei Wiederholung derselben Outbox-Nachricht identisch."
},
{
"name": "ChangedByUuid",
"type": [
"null",
{
"type": "string",
"logicalType": "uuid"
}
],
"doc": "UUID des aendernden Mitarbeiters (Employee); null, wenn unbekannt.",
"default": null,
"references": "Employee"
},
{
"name": "ChangedAt",
"type": {
"type": "long",
"logicalType": "timestamp-millis"
},
"doc": "Zeitpunkt der Aenderung als UTC-Instant."
}
],
"aggregate": "AccountSpecialPrice",
"label": "Kundensonderpreis",
"topic": "accountspecialprice.state",
"key": "AccountSpecialPriceUuid",
"cleanupPolicy": "compact",
"partitions": 1,
"writers": [
"centron"
],
"readers": [
"shop",
"nexoware-erp"
]
}