NEXOWARE ConnectSchema-Explorer · Kafka-Backbone

Verträge / RmaState

Retoure State

RmaState · com.nexoware.connect.events

Aggregat
Rma · Patch RmaPatch
Topic
rma.state je Mandant mit Präfix, z. B. <mandant>.rma.state
Key
RmaUuid
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
77

Vertragsentwurf: vollstaendiger veroeffentlichter Zustand fuer Retoure. Feldumfang aus dem archivierten RmaChanged; kein fachlicher Vergleich beider Produkte. Einziger State-Writer ist merge; Produkte veroeffentlichen typisierte Patches. Grenzen, Migration und offene Fachregeln: docs/contracts/rma.md.

Fassungen

Felder

Referenziert von

Kein Vertrag verweist auf diesen.

Rohfassung

Schema dieser Fassung (Avro)
{
  "type": "record",
  "name": "RmaState",
  "namespace": "com.nexoware.connect.events",
  "doc": "Vertragsentwurf: vollstaendiger veroeffentlichter Zustand fuer Retoure. Feldumfang aus dem archivierten RmaChanged; kein fachlicher Vergleich beider Produkte. Einziger State-Writer ist merge; Produkte veroeffentlichen typisierte Patches. Grenzen, Migration und offene Fachregeln: docs/contracts/rma.md.",
  "fields": [
    {
      "name": "RmaUuid",
      "type": {
        "type": "string",
        "logicalType": "uuid"
      },
      "doc": "Stabile, global eindeutige Identitaet des RMA-Vorgangs (Matching-Schluessel; zugleich Message-Key)."
    },
    {
      "name": "RmaNumber",
      "type": "int",
      "doc": "Fachliche RMA-Nummer (Business-Key; eigener Nummernraum, Nummerngruppe RMANumber; quellseitig non-null)."
    },
    {
      "name": "Kind",
      "type": "int",
      "doc": "Art des Vorgangs (RmaKind: 0 = unbestimmt, 1 = eigene/Lieferanten-RMA - eigener Bestand zurueck zum Lieferanten, 2 = Kunden-RMA, 3 = Fremdware-RMA - Kundengeraet ohne eigenen Verkaufsbeleg). Kunden- und Lieferanten-RMA reisen im selben Topic; Konsumenten filtern ueber dieses Feld, kein Typ-Split."
    },
    {
      "name": "State",
      "type": "int",
      "doc": "LWW-Statusfeld (RmaClosedState: 0 = offen, 1 = geschlossen, 2 = geloescht). Das Loeschen ist quellseitig ein Soft-Delete und reist als Voll-Snapshot mit State = 2, kein Tombstone."
    },
    {
      "name": "AccountUuid",
      "type": {
        "type": "string",
        "logicalType": "uuid"
      },
      "doc": "Pflicht-Referenz auf den Account, unter dem der Vorgang gefuehrt wird (beim Kunden-/Fremdware-RMA der Kunde), ueber dessen UUID (Quelle AccountI3D, non-null). Kann der Producer sie nicht aufloesen, scheitert die Avro-Projektion laut (Failed-Outbox-Zeile) statt still null zu senden."
    },
    {
      "name": "SupplierAccountUuid",
      "type": [
        "null",
        {
          "type": "string",
          "logicalType": "uuid"
        }
      ],
      "doc": "Referenz auf den Lieferanten des Vorgangs (Account mit Supplier-Facette, QS-1) ueber dessen UUID (Quelle SupplierAccountI3D - direkte Account-Referenz); DB nullable, nur bei Lieferanten-Bezug gesetzt.",
      "default": null,
      "references": "Account"
    },
    {
      "name": "Description",
      "type": [
        "null",
        "string"
      ],
      "doc": "Beschreibung des Vorgangs; DB nullable.",
      "default": null
    },
    {
      "name": "CreatedAt",
      "type": {
        "type": "long",
        "logicalType": "timestamp-millis"
      },
      "doc": "Anlagezeitpunkt des Vorgangs als UTC-Instant (Quelle CreatedDate, non-null; Host-lokale Zeit, beim Publish nach UTC konvertiert) - das fachliche Datum der Retoure (der Vorgang traegt kein separates Belegdatum)."
    },
    {
      "name": "Articles",
      "type": {
        "type": "array",
        "items": {
          "type": "record",
          "name": "RmaArticle",
          "fields": [
            {
              "name": "ArticleUuid",
              "type": [
                "null",
                {
                  "type": "string",
                  "logicalType": "uuid"
                }
              ],
              "doc": "Referenz auf das Artikel-Stammdatum ueber dessen UUID. Fachlich traegt jeder RMA-Artikel einen Artikel; optional, weil die Quell-Referenz mit NotFound.Ignore gemappt ist (fehlendes Stammdatum -> null).",
              "default": null
            },
            {
              "name": "SwapArticleUuid",
              "type": [
                "null",
                {
                  "type": "string",
                  "logicalType": "uuid"
                }
              ],
              "doc": "Referenz auf den Tausch-Artikel (Fremd-Austausch) ueber dessen UUID; DB nullable.",
              "default": null,
              "references": "Article"
            },
            {
              "name": "SerialNumber",
              "type": [
                "null",
                "string"
              ],
              "doc": "Seriennummer des reklamierten Artikels als Wert-Kopie (Quelle Barcode-Referenz SerialNumberI3D); null bei Artikeln ohne Seriennummer. Die Barcode-Datensaetze selbst sind Artikel-Domaene (kein Sub-Topic).",
              "default": null
            },
            {
              "name": "SwapSerialNumber",
              "type": [
                "null",
                "string"
              ],
              "doc": "Seriennummer des Tausch-Artikels als Wert-Kopie (Quelle NewSerialNumberI3D); DB nullable.",
              "default": null
            },
            {
              "name": "Quantity",
              "type": "int",
              "doc": "Menge des RMA-Artikels (quellseitig int; bei Seriennummern-Artikeln 1).",
              "default": 0
            },
            {
              "name": "Warranty",
              "type": "boolean",
              "doc": "Garantie-Kennzeichen (quellseitig non-null).",
              "default": false
            },
            {
              "name": "ErrorDescription",
              "type": [
                "null",
                "string"
              ],
              "doc": "Fehlerbeschreibung der Reklamation; DB nullable.",
              "default": null
            },
            {
              "name": "Description",
              "type": [
                "null",
                "string"
              ],
              "doc": "Beschreibung des RMA-Artikels (Quelle Description, auf 200 Zeichen gekuerzt); DB nullable.",
              "default": null
            },
            {
              "name": "State",
              "type": "int",
              "doc": "Status des Artikels im Vorgang (RmaClosedState: 0 = offen, 1 = geschlossen, 2 = entfernt/geloescht). Entfernte Artikel bleiben Teil des Snapshots (Soft-Delete); DB-Spalte nullable, Altbestand reist als 0 = offen.",
              "default": 0
            },
            {
              "name": "ProcessState",
              "type": "int",
              "doc": "Prozess-Zustand des Artikels (RmaArticleState, Quellspalte RmaState): 0 = keiner, 1 = angelegt, 2 = E-Mail an Lieferant, 3 = Ruecksendung (SendBack), 4 = Ruecksendungs-Eingang (SendForth), 5 = verschrottet, 6 = Ruecklieferschein, 7 = Vorabtausch-Lieferschein, 8 = Leih-Vorabtausch-Lieferschein, 9 = Ruecklieferschein aus Buchung, 10 = Auftrag, 11 = Rechnung, 12 = Lieferantengutschrift, 13 = Kundengutschrift, 14 = Umbuchung, 15 = Abholliste, 16 = Wareneingang, 17 = angenommen, 18 = Bestellung, 19 = entfernt. Traegt den SendBack-/SendForth-Zustand des Klaerungspunkts - die Versand-Dokumente reisen nicht als eigene Records.",
              "default": 0
            },
            {
              "name": "ForthAction",
              "type": "int",
              "doc": "Entschiedene Weiterbehandlung (RmaForthAction: 0 = keine, 1 = 1-zu-1-Austausch, 2 = Fremd-Austausch, 3 = Reparatur, 5 = verschrottet, 6 = unrepariert, 7 = entfernt, 8 = Reparatur vor Ort, 9 = unrepariert vor Ort); DB-Spalte nullable, Altbestand reist als 0 = keine.",
              "default": 0
            },
            {
              "name": "SupplierAccountUuid",
              "type": [
                "null",
                {
                  "type": "string",
                  "logicalType": "uuid"
                }
              ],
              "doc": "Lieferant, der diesen Artikel bearbeitet (Account mit Supplier-Facette, QS-1) ueber dessen UUID. Quellseitig ist SupplierNumber die Kreditor-Nummer (AccountSupplier.Number); der Producer loest sie ueber AccountSupplier -> AccountTypeToAccount -> Account auf. Null ohne Lieferanten-Bezug oder bei Aufloesungsluecke.",
              "default": null,
              "references": "Account"
            },
            {
              "name": "SupplierRmaNumber",
              "type": [
                "null",
                "string"
              ],
              "doc": "RMA-Nummer des Lieferanten (externer Business-Key der Ruecksendung); DB nullable.",
              "default": null
            },
            {
              "name": "SupplierReceiptNumber",
              "type": [
                "null",
                "string"
              ],
              "doc": "Belegnummer des Lieferanten-Einkaufsbelegs (Herkunftsnachweis, Kopie aus der Einkaufs-Kette); DB nullable.",
              "default": null
            },
            {
              "name": "SupplierReceiptDate",
              "type": [
                "null",
                {
                  "type": "long",
                  "logicalType": "timestamp-millis"
                }
              ],
              "doc": "Datum des Lieferanten-Einkaufsbelegs; DB nullable.",
              "default": null
            },
            {
              "name": "OrderUuid",
              "type": [
                "null",
                {
                  "type": "string",
                  "logicalType": "uuid"
                }
              ],
              "doc": "Vorbeleg-Referenz auf den Ursprungs-Auftrag ueber dessen UUID (producer-seitig aus ReceiptKind 2 + ReceiptNumber aufgeloest); null, wenn der Artikel keinen Auftrags-Ursprung hat.",
              "default": null
            },
            {
              "name": "DeliveryListUuid",
              "type": [
                "null",
                {
                  "type": "string",
                  "logicalType": "uuid"
                }
              ],
              "doc": "Vorbeleg-Referenz auf den Ursprungs-Lieferschein ueber dessen UUID (producer-seitig aus ReceiptKind 3 + ReceiptNumber aufgeloest). ACHTUNG: die von Lieferanten-RMA selbst ERZEUGTEN Lieferscheine (Ruecklieferschein/Vorabtausch) sind Folgebelege und reisen als normale DeliveryListState-Events, nicht hier.",
              "default": null
            },
            {
              "name": "InvoiceUuid",
              "type": [
                "null",
                {
                  "type": "string",
                  "logicalType": "uuid"
                }
              ],
              "doc": "Vorbeleg-Referenz auf die Ursprungs-Rechnung ueber dessen UUID (producer-seitig aus ReceiptKind 4 + ReceiptNumber aufgeloest); null ohne Rechnungs-Ursprung.",
              "default": null
            }
          ]
        }
      },
      "doc": "Eingebettete RMA-Artikel (RmaArticle, Cascade am Vorgang), aufsteigend nach Anlage (die Quelle fuehrt keine Positionsnummer). Auch entfernte Artikel reisen mit (State = 2, Soft-Delete). Voll-Snapshot: der Consumer ersetzt die Collection je Event vollstaendig (kein positionsweises Mergen). Default [] nur fuer Schema-Evolution.",
      "default": []
    },
    {
      "name": "Revision",
      "type": "long",
      "doc": "Anzahl der zustandsaendernden Patches seit Anlage; vom Zusammenfuehrungsdienst gesetzt."
    },
    {
      "name": "LastEventId",
      "type": {
        "type": "string",
        "logicalType": "uuid"
      },
      "doc": "EventId des zuletzt angewandten Patches; vom Zusammenfuehrungsdienst gesetzt."
    },
    {
      "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": "Rma",
  "label": "Retoure",
  "topic": "rma.state",
  "key": "RmaUuid",
  "cleanupPolicy": "compact",
  "partitions": 1,
  "writers": [
    "merge"
  ],
  "readers": [
    "centron",
    "nexoware-erp"
  ]
}