NEXOWARE ConnectSchema-Explorer · Kafka-Backbone

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

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"
  ]
}