NEXOWARE ConnectSchema-Explorer · Kafka-Backbone

Verträge / WebAccountState

Web-Konto State

WebAccountState · com.nexoware.connect.events

Aggregat
WebAccount
Topic
webaccount.state je Mandant mit Präfix, z. B. <mandant>.webaccount.state
Key
WebAccountUuid
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
106

Vertragsentwurf: vollstaendiger veroeffentlichter Zustand fuer Web-Konto. Feldumfang aus dem archivierten WebAccountChanged; kein fachlicher Vergleich beider Produkte. Direkte Veroeffentlichung durch centron; kein Patch-Pfad. Grenzen, Migration und offene Fachregeln: docs/contracts/webaccount.md.

Fassungen

Felder

Referenziert von

Kein Vertrag verweist auf diesen.

Rohfassung

Schema dieser Fassung (Avro)
{
  "type": "record",
  "name": "WebAccountState",
  "namespace": "com.nexoware.connect.events",
  "doc": "Vertragsentwurf: vollstaendiger veroeffentlichter Zustand fuer Web-Konto. Feldumfang aus dem archivierten WebAccountChanged; kein fachlicher Vergleich beider Produkte. Direkte Veroeffentlichung durch centron; kein Patch-Pfad. Grenzen, Migration und offene Fachregeln: docs/contracts/webaccount.md.",
  "fields": [
    {
      "name": "WebAccountUuid",
      "type": {
        "type": "string",
        "logicalType": "uuid"
      },
      "doc": "Stabile, global eindeutige Identitaet des Web-Kontos (Matching-Schluessel; zugleich Message-Key)."
    },
    {
      "name": "AccountUuid",
      "type": {
        "type": "string",
        "logicalType": "uuid"
      },
      "doc": "Referenz auf den Geschaeftspartner, zu dem das Web-Konto gehoert, ueber dessen UUID (Quelle AccountI3D). Parent-Referenz und damit Pflicht: kann der Producer sie nicht aufloesen, scheitert er laut, statt still null zu senden (event-envelope.md). Die Legacy fuehrt denselben Bezug als customer_id am ES-User und ueberspringt ein Web-Konto, dessen Eltern-Kunde nicht gemappt ist.",
      "default": "00000000-0000-0000-0000-000000000000"
    },
    {
      "name": "AccountAddressUuid",
      "type": [
        "null",
        {
          "type": "string",
          "logicalType": "uuid"
        }
      ],
      "doc": "Referenz auf die Anschrift des Geschaeftspartners, an der das Web-Konto haengt, ueber deren UUID (Quelle AccountAddressI3D). Es reist die Referenz, nicht die Anschrift: Rechnungs- und Lieferanschrift, die der Legacy-UserSync an den ES-User schreibt, liest der Konsument aus AddressState. Der Feldname ist derselbe wie am ContactPersonState - beide meinen die Anschrift eines Accounts, und der Identitaets-Index kennt nur AddressUuid (deshalb references am Feld). Vorsorglich optional geschnitten: ob AccountAddressI3D quellseitig garantiert ist, ist am c-entron-Quellcode nicht verifiziert (c-entron-schema-cut.md, Abschnitt 9). Ist die Referenz garantiert, gehoert das Feld auf Pflicht hochgezogen.",
      "default": null,
      "references": "Address"
    },
    {
      "name": "ContactPersonUuid",
      "type": [
        "null",
        {
          "type": "string",
          "logicalType": "uuid"
        }
      ],
      "doc": "Referenz auf den Ansprechpartner, der dieses Web-Konto benutzt, ueber dessen UUID (Quelle AccountAddressContactI3D) - bereits akzeptierter Uebergangsfall fuer Personenbezug, wie am TicketState; die Identitaet des Ansprechpartners heisst ContactUuid (deshalb references am Feld). Es reist die Referenz, nicht die Person: Name, Mail, Telefon, Abteilung und Funktion stehen im ContactPersonState. Der Konsument braucht sie - ohne Mail-Adresse gibt es keine Registrierungs-Mail und damit kein Startpasswort (ADR-0017, Punkt 2). Vorsorglich optional geschnitten; null, solange kein Kontakt gepflegt ist. Ob AccountAddressContactI3D quellseitig garantiert ist, ist am c-entron-Quellcode nicht verifiziert (c-entron-schema-cut.md, Abschnitt 9) - ist die Referenz garantiert, gehoert das Feld auf Pflicht hochgezogen.",
      "default": null,
      "references": "ContactPerson"
    },
    {
      "name": "Username",
      "type": "string",
      "doc": "Anmeldename des Web-Kontos, wie ihn c-entron fuehrt - meist eine Mail-Adresse und damit personenbeziehbar. Als Pflicht geschnitten: ein Web-Konto ohne Anmeldenamen ist keines, und die Legacy findet ein bestehendes Shop-Konto genau ueber Username und Kunde. Das zugehoerige Passwort ist nicht Teil dieses Vertrags und wird es nicht (ADR-0017, Punkt 1; siehe doc des Records). Die quellseitige Nullability ist noch nicht verifiziert (c-entron-schema-cut.md, Abschnitt 9).",
      "default": ""
    },
    {
      "name": "EsRoleUuid",
      "type": [
        "null",
        {
          "type": "string",
          "logicalType": "uuid"
        }
      ],
      "doc": "Zuweisung des Web-Kontos zu einer ElectronicSales-Benutzerrolle, ueber die UUID des Rollen-Stammdatums (EsRoleState, Quelle EsRoleI3D). Die Rolle entsteht im Shop, die Zuweisung ist eine Eigenschaft des Web-Kontos und damit c-entron-Wahrheit - dasselbe Muster wie AccountState.EsGroupUuid beim Kunden (ADR-0016, Punkt 2). Erster Referent, den EsRoleState im Korpus hat. Null, wenn dem Konto keine Rolle zugewiesen ist. Was daraus folgt, entscheidet der Konsument: die Legacy sperrt ein Konto ohne Rolle im Shop (locked=1, approved=0). Das ist eine Shop-Regel und kein Quell-Zustand - sie faellt deshalb NICHT in State. Sonst liesse sich nicht mehr unterscheiden, ob c-entron das Konto deaktiviert hat oder ob nur die Rolle fehlt, und der Producer muesste eine Konsumenten-Auswertung mitrechnen (event-envelope.md, Leitprinzip).",
      "default": null
    },
    {
      "name": "State",
      "type": "int",
      "doc": "LWW-Statusfeld: 1 = aktiv, 0 = deaktiviert (Quelle WebAccountDTO.Status). Es traegt ausschliesslich den Zustand, den c-entron am Web-Konto selbst fuehrt; die Shop-Sperre, die der Legacy-UserSync aus einer fehlenden Rolle ableitet, gehoert nicht hierher (siehe EsRoleUuid). Deaktivierung reist als Voll-Snapshot mit geaendertem State, kein Tombstone; ein terminaler Tombstone bleibt der DSGVO-Erasure vorbehalten und ist eigener Track (ADR-0009, Punkt 9). 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": "WebAccount",
  "label": "Web-Konto",
  "topic": "webaccount.state",
  "key": "WebAccountUuid",
  "cleanupPolicy": "compact",
  "partitions": 1,
  "writers": [
    "centron"
  ],
  "readers": [
    "shop",
    "nexoware-erp"
  ]
}