Verträge / ArticlePatch
Artikel Patch
ArticlePatch · com.nexoware.connect.events
- Aggregat
- Article · State ArticleState
- Topic
- article.patch je Mandant mit Präfix, z. B.
<mandant>.article.patch - Key
- ArticleUuid
- Nachrichtenart
- Patch — ausdrückliche Teiländerungen, zusammengeführt vom Zusammenführungsdienst
- Schreiber
- c-entron Webservice (centron) , NEXOWARE.ERP (nexoware-erp)
- Retention
- 30 Tage
- Fassung
- Version 1 (neueste)
- Schema-ID
- 99
Patch-Pfad
- Pflicht bei Anlage
- ArticleCode, Price1, Price2, Price3, Price4, EVP, ListPrice, PurchasePrice, State, Blocked, Deliverable, NotDiscountable, VisibleOnWeb, Vpe, Precision, DeliveryTime, Length, Width, Height, Volume, NetWeight, GrossWeight
Vertragsentwurf: typisierte Teilaenderung fuer Artikel. Nur ChangedFields werden angewandt; null leert nur nullable State-Einheiten. Listen und Unterobjekte sind atomare Ersetzungen mit vollstaendigem Inhalt. Fachliche Freigabe und Regeln gekoppelter Werte sind offen; siehe docs/contracts/article.md.
Fassungen
Felder
-
EventId ↗ extern: EventId uuidBeim ersten Enqueue in die Outbox erzeugt; bei Wiederholung identisch.
-
ArticleUuid Key uuidStabile, global eindeutige Identitaet des Artikels (Matching-Schluessel; zugleich Message-Key).
-
Mode enum(CHANGE|INITIAL_LOAD)
-
ChangedFields Liste string[]Explizite Maske der geaenderten Top-Level-Einheiten; keine Wildcards, Identitaets- oder Auditfelder. Listen und Records werden als Ganzes ersetzt.
-
Data ArticlePatchData
34 Felder von
ArticlePatchData-
ArticleCode optional stringDefault:
nullFachlicher Artikelcode (Business-Key, quellseitig unique + non-null; Uebergangs-Matching-Fallback). -
ManufacturerCode optional stringDefault:
nullHerstellernummer/-code des Artikels; DB nullable. -
EANCode optional stringDefault:
nullEAN/GTIN des Artikels; DB nullable. -
ShortDescription optional stringDefault:
nullKurzbegriff des Artikels; DB nullable. -
Description optional stringDefault:
nullArtikelbeschreibung (Langtext); DB nullable. -
Default:
nullReferenz auf das Warengruppen-Stammdatum ueber dessen UUID; quellseitig nullable. -
Default:
nullReferenz auf das Mehrwertsteuersatz-Stammdatum ueber dessen UUID; Altdaten koennen ohne Satz sein. -
Default:
nullReferenz auf das Artikeleinheiten-Stammdatum ueber dessen UUID; quellseitig nullable. -
Default:
nullRollenreferenz: der Hersteller ist ein Geschaeftspartner (Account mit Manufacturer-Facette, QS-1) und reist ueber dessen UUID (vormals ManufacturerI3D). Erst damit kann ein Consumer den Herstellernamen aus dem AccountState beziehen, statt ihn aufgeloest mitzuschicken. Null ohne Hersteller-Bezug. -
Price1 optional decimal(18,4)Default:
nullVerkaufspreis 1 (netto); quellseitig non-null float, beim Publish kaufmaennisch auf 4 Nachkommastellen gerundet. -
Price2 optional decimal(18,4)Default:
nullVerkaufspreis 2 (netto). -
Price3 optional decimal(18,4)Default:
nullVerkaufspreis 3 (netto). -
Price4 optional decimal(18,4)Default:
nullVerkaufspreis 4 (netto). -
EVP optional decimal(18,4)Default:
nullEmpfohlener Verkaufspreis (EVK). -
ListPrice optional decimal(18,4)Default:
nullListenpreis. -
PurchasePrice optional decimal(18,4)Default:
nullEinkaufspreis (EK, Hauptlager). Wird auch ausserhalb der Stammpflege fortgeschrieben (EK-Fortschreibung beim Wareneingang) - jede Fortschreibung erzeugt ein eigenes ArticleState. -
State optional intDefault:
nullLWW-Statusfeld: 1 = aktiv, 0 = deaktiviert (Quellflag EOL/End-of-Life; Soft-Delete, kein Tombstone). -
Blocked optional booleanDefault:
nullArtikel gesperrt (Gesperrt-Flag der Quelle); unabhaengig vom LWW-Status. -
Deliverable optional booleanDefault:
nullArtikel lieferbar (Lieferbar-Flag der Quelle). -
NotDiscountable optional booleanDefault:
nullArtikel nicht rabattierbar. -
VisibleOnWeb optional booleanDefault:
nullArtikel im Web-Portal sichtbar. -
Vpe optional intDefault:
nullVerpackungseinheit (Menge je Gebinde); non-null Quell-Property. -
Precision optional intDefault:
nullNachkommastellen der artikel-individuellen Preis-/Mengenrundung in der Quelle (Kontext zu den decimal(18,4)-Preisfeldern). -
MinimumOrderQuantity optional doubleDefault:
nullMindestbestellmenge; DB nullable. -
DeliveryTime optional intDefault:
nullLieferzeit in Tagen; non-null Quell-Property. -
Length optional doubleDefault:
nullLaenge (Abmessung); non-null Quell-Property. -
Width optional doubleDefault:
nullBreite (Abmessung). -
Height optional doubleDefault:
nullHoehe (Abmessung). -
Volume optional doubleDefault:
nullVolumen. -
NetWeight optional doubleDefault:
nullNettogewicht. -
GrossWeight optional doubleDefault:
nullBruttogewicht. -
GoodsNumber optional stringDefault:
nullWarennummer (FiBu/Zoll); DB nullable. -
CustomsNumber optional stringDefault:
nullZolltarifnummer; DB nullable. -
IntrastatNumber optional stringDefault:
nullIntrastat-Nummer; DB nullable.
-
-
Default:
nullUUID des aendernden Mitarbeiters (Employee); null, wenn unbekannt. -
ChangedAt timestampZeitpunkt der Aenderung als UTC-Instant.
Referenziert von
- Kundensonderpreis
AccountSpecialPriceState.ArticleUuid - Lagerbestand
ArticleStockPatch.Data.ArticleUuid - Lagerbestand
ArticleStockState.ArticleUuid - Vertrag
ContractPatch.Data.Positions.ArticleUuid - Vertrag
ContractState.Positions.ArticleUuid - Gutschrift
CreditVoucherPatch.Data.Positions.ArticleUuid - Gutschrift
CreditVoucherState.Positions.ArticleUuid - Lieferschein
DeliveryListPatch.Data.Positions.ArticleUuid - Lieferschein
DeliveryListState.Positions.ArticleUuid - Shop-Bestellung
EsOrderState.Positions.ArticleUuid - Rechnung
InvoicePatch.Data.Positions.ArticleUuid - Rechnung
InvoiceState.Positions.ArticleUuid - Angebot
OfferPatch.Data.Positions.ArticleUuid - Angebot
OfferState.Positions.ArticleUuid - Auftrag
OrderPatch.Data.Positions.ArticleUuid - Auftrag
OrderState.Positions.ArticleUuid - Abholschein
PickupListPatch.Data.Positions.ArticleUuid - Abholschein
PickupListState.Positions.ArticleUuid - Retoure
RmaPatch.Data.Articles.ArticleUuid - Retoure
RmaPatch.Data.Articles.SwapArticleUuid - Retoure
RmaState.Articles.ArticleUuid - Retoure
RmaState.Articles.SwapArticleUuid - Lieferanten-Gutschrift
SupplierCreditVoucherPatch.Data.Positions.ArticleUuid - Lieferanten-Gutschrift
SupplierCreditVoucherState.Positions.ArticleUuid - Lieferantenlieferschein
SupplierDeliveryListPatch.Data.Positions.ArticleUuid - Lieferantenlieferschein
SupplierDeliveryListState.Positions.ArticleUuid - Lieferanten-Rechnung
SupplierInvoicePatch.Data.Positions.ArticleUuid - Lieferanten-Rechnung
SupplierInvoiceState.Positions.ArticleUuid - Anfrage
SupplierOfferPatch.Data.Positions.ArticleUuid - Anfrage
SupplierOfferState.Positions.ArticleUuid - Bestellung
SupplierOrderPatch.Data.Positions.ArticleUuid - Bestellung
SupplierOrderState.Positions.ArticleUuid - Ticket-Zeiterfassung
TicketTimerPatch.Data.ArticleUuid - Ticket-Zeiterfassung
TicketTimerState.ArticleUuid
Rohfassung
Schema dieser Fassung (Avro)
{
"type": "record",
"name": "ArticlePatch",
"namespace": "com.nexoware.connect.events",
"doc": "Vertragsentwurf: typisierte Teilaenderung fuer Artikel. Nur ChangedFields werden angewandt; null leert nur nullable State-Einheiten. Listen und Unterobjekte sind atomare Ersetzungen mit vollstaendigem Inhalt. Fachliche Freigabe und Regeln gekoppelter Werte sind offen; siehe docs/contracts/article.md.",
"fields": [
{
"name": "EventId",
"type": {
"type": "string",
"logicalType": "uuid"
},
"doc": "Beim ersten Enqueue in die Outbox erzeugt; bei Wiederholung identisch."
},
{
"name": "ArticleUuid",
"type": {
"type": "string",
"logicalType": "uuid"
},
"doc": "Stabile, global eindeutige Identitaet des Artikels (Matching-Schluessel; zugleich Message-Key)."
},
{
"name": "Mode",
"type": {
"type": "enum",
"name": "PatchMode",
"doc": "CHANGE: lokal autorisierte Aenderung, LWW je Einheit nach Kafka-Reihenfolge. INITIAL_LOAD: Erstbefuellung beim Anschluss eines Produkts - setzt eine Einheit nur, wenn sie noch nie geschrieben wurde; ueberschreibt nie einen vorhandenen oder ausdruecklich geleerten Wert. Bewusst ohne Enum-Default: ein unbekannter kuenftiger Modus darf nicht still als CHANGE gelesen werden.",
"symbols": [
"CHANGE",
"INITIAL_LOAD"
]
}
},
{
"name": "ChangedFields",
"type": {
"type": "array",
"items": "string"
},
"doc": "Explizite Maske der geaenderten Top-Level-Einheiten; keine Wildcards, Identitaets- oder Auditfelder. Listen und Records werden als Ganzes ersetzt."
},
{
"name": "Data",
"type": {
"type": "record",
"name": "ArticlePatchData",
"doc": "Werte der maskierten Einheiten. null ausserhalb der Maske wird ignoriert; innerhalb der Maske entscheidet die Nullability im State.",
"fields": [
{
"name": "ArticleCode",
"type": [
"null",
"string"
],
"doc": "Fachlicher Artikelcode (Business-Key, quellseitig unique + non-null; Uebergangs-Matching-Fallback).",
"default": null
},
{
"name": "ManufacturerCode",
"type": [
"null",
"string"
],
"doc": "Herstellernummer/-code des Artikels; DB nullable.",
"default": null
},
{
"name": "EANCode",
"type": [
"null",
"string"
],
"doc": "EAN/GTIN des Artikels; DB nullable.",
"default": null
},
{
"name": "ShortDescription",
"type": [
"null",
"string"
],
"doc": "Kurzbegriff des Artikels; DB nullable.",
"default": null
},
{
"name": "Description",
"type": [
"null",
"string"
],
"doc": "Artikelbeschreibung (Langtext); DB nullable.",
"default": null
},
{
"name": "MaterialGroupUuid",
"type": [
"null",
{
"type": "string",
"logicalType": "uuid"
}
],
"doc": "Referenz auf das Warengruppen-Stammdatum ueber dessen UUID; quellseitig nullable.",
"default": null
},
{
"name": "VatUuid",
"type": [
"null",
{
"type": "string",
"logicalType": "uuid"
}
],
"doc": "Referenz auf das Mehrwertsteuersatz-Stammdatum ueber dessen UUID; Altdaten koennen ohne Satz sein.",
"default": null
},
{
"name": "ArticleUnitUuid",
"type": [
"null",
{
"type": "string",
"logicalType": "uuid"
}
],
"doc": "Referenz auf das Artikeleinheiten-Stammdatum ueber dessen UUID; quellseitig nullable.",
"default": null
},
{
"name": "ManufacturerUuid",
"type": [
"null",
{
"type": "string",
"logicalType": "uuid"
}
],
"doc": "Rollenreferenz: der Hersteller ist ein Geschaeftspartner (Account mit Manufacturer-Facette, QS-1) und reist ueber dessen UUID (vormals ManufacturerI3D). Erst damit kann ein Consumer den Herstellernamen aus dem AccountState beziehen, statt ihn aufgeloest mitzuschicken. Null ohne Hersteller-Bezug.",
"default": null,
"references": "Account"
},
{
"name": "Price1",
"type": [
"null",
{
"type": "bytes",
"logicalType": "decimal",
"precision": 18,
"scale": 4
}
],
"doc": "Verkaufspreis 1 (netto); quellseitig non-null float, beim Publish kaufmaennisch auf 4 Nachkommastellen gerundet.",
"default": null
},
{
"name": "Price2",
"type": [
"null",
{
"type": "bytes",
"logicalType": "decimal",
"precision": 18,
"scale": 4
}
],
"doc": "Verkaufspreis 2 (netto).",
"default": null
},
{
"name": "Price3",
"type": [
"null",
{
"type": "bytes",
"logicalType": "decimal",
"precision": 18,
"scale": 4
}
],
"doc": "Verkaufspreis 3 (netto).",
"default": null
},
{
"name": "Price4",
"type": [
"null",
{
"type": "bytes",
"logicalType": "decimal",
"precision": 18,
"scale": 4
}
],
"doc": "Verkaufspreis 4 (netto).",
"default": null
},
{
"name": "EVP",
"type": [
"null",
{
"type": "bytes",
"logicalType": "decimal",
"precision": 18,
"scale": 4
}
],
"doc": "Empfohlener Verkaufspreis (EVK).",
"default": null
},
{
"name": "ListPrice",
"type": [
"null",
{
"type": "bytes",
"logicalType": "decimal",
"precision": 18,
"scale": 4
}
],
"doc": "Listenpreis.",
"default": null
},
{
"name": "PurchasePrice",
"type": [
"null",
{
"type": "bytes",
"logicalType": "decimal",
"precision": 18,
"scale": 4
}
],
"doc": "Einkaufspreis (EK, Hauptlager). Wird auch ausserhalb der Stammpflege fortgeschrieben (EK-Fortschreibung beim Wareneingang) - jede Fortschreibung erzeugt ein eigenes ArticleState.",
"default": null
},
{
"name": "State",
"type": [
"null",
"int"
],
"doc": "LWW-Statusfeld: 1 = aktiv, 0 = deaktiviert (Quellflag EOL/End-of-Life; Soft-Delete, kein Tombstone).",
"default": null
},
{
"name": "Blocked",
"type": [
"null",
"boolean"
],
"doc": "Artikel gesperrt (Gesperrt-Flag der Quelle); unabhaengig vom LWW-Status.",
"default": null
},
{
"name": "Deliverable",
"type": [
"null",
"boolean"
],
"doc": "Artikel lieferbar (Lieferbar-Flag der Quelle).",
"default": null
},
{
"name": "NotDiscountable",
"type": [
"null",
"boolean"
],
"doc": "Artikel nicht rabattierbar.",
"default": null
},
{
"name": "VisibleOnWeb",
"type": [
"null",
"boolean"
],
"doc": "Artikel im Web-Portal sichtbar.",
"default": null
},
{
"name": "Vpe",
"type": [
"null",
"int"
],
"doc": "Verpackungseinheit (Menge je Gebinde); non-null Quell-Property.",
"default": null
},
{
"name": "Precision",
"type": [
"null",
"int"
],
"doc": "Nachkommastellen der artikel-individuellen Preis-/Mengenrundung in der Quelle (Kontext zu den decimal(18,4)-Preisfeldern).",
"default": null
},
{
"name": "MinimumOrderQuantity",
"type": [
"null",
"double"
],
"doc": "Mindestbestellmenge; DB nullable.",
"default": null
},
{
"name": "DeliveryTime",
"type": [
"null",
"int"
],
"doc": "Lieferzeit in Tagen; non-null Quell-Property.",
"default": null
},
{
"name": "Length",
"type": [
"null",
"double"
],
"doc": "Laenge (Abmessung); non-null Quell-Property.",
"default": null
},
{
"name": "Width",
"type": [
"null",
"double"
],
"doc": "Breite (Abmessung).",
"default": null
},
{
"name": "Height",
"type": [
"null",
"double"
],
"doc": "Hoehe (Abmessung).",
"default": null
},
{
"name": "Volume",
"type": [
"null",
"double"
],
"doc": "Volumen.",
"default": null
},
{
"name": "NetWeight",
"type": [
"null",
"double"
],
"doc": "Nettogewicht.",
"default": null
},
{
"name": "GrossWeight",
"type": [
"null",
"double"
],
"doc": "Bruttogewicht.",
"default": null
},
{
"name": "GoodsNumber",
"type": [
"null",
"string"
],
"doc": "Warennummer (FiBu/Zoll); DB nullable.",
"default": null
},
{
"name": "CustomsNumber",
"type": [
"null",
"string"
],
"doc": "Zolltarifnummer; DB nullable.",
"default": null
},
{
"name": "IntrastatNumber",
"type": [
"null",
"string"
],
"doc": "Intrastat-Nummer; DB nullable.",
"default": null
}
]
}
},
{
"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": "Article",
"label": "Artikel",
"topic": "article.patch",
"key": "ArticleUuid",
"cleanupPolicy": "delete",
"retentionMs": 2592000000,
"partitions": 1,
"writers": [
"centron",
"nexoware-erp"
],
"requiredOnCreate": [
"ArticleCode",
"Price1",
"Price2",
"Price3",
"Price4",
"EVP",
"ListPrice",
"PurchasePrice",
"State",
"Blocked",
"Deliverable",
"NotDiscountable",
"VisibleOnWeb",
"Vpe",
"Precision",
"DeliveryTime",
"Length",
"Width",
"Height",
"Volume",
"NetWeight",
"GrossWeight"
]
}