{
  "format": "vercy-model-allocation-candidate/v1",
  "contourId": "EM-OPS-04",
  "proposedName": "Lot / Batch",
  "modelId": null,
  "registryId": null,
  "allocationState": "unassigned",
  "decision": "NEW MODEL (unassigned; no identifier may be allocated by this audit)",
  "canonicalPublishable": false,
  "identityTest": {
    "stableIdentity": "A produced or received bulk cohort remains identifiable independently of serialized members, product type and production order.",
    "versionIdentity": "Corrections preserve the stable lot identity and append provenance assertions rather than reusing identifiers.",
    "independentLifecycle": [
      "created",
      "released",
      "partiallyConsumed",
      "exhausted",
      "closed"
    ],
    "mastership": "authorized bulk-cohort identity and lot-genealogy authority (cohort identity only; no composition state)"
  },
  "boundary": {
    "owns": [
      "lot identity",
      "issuer-scoped lot identifiers",
      "product and process context",
      "quantity and unit history",
      "production or receipt interval",
      "membership and split/merge provenance",
      "quality and disposition state"
    ],
    "references": [
      {
        "target": "WM-OBJ-002",
        "purpose": "Product type",
        "status": "verified-supplied"
      },
      {
        "target": "WM-OBJ-001",
        "purpose": "Serialized member",
        "status": "verified-supplied"
      },
      {
        "target": "WM-OBJ-019",
        "purpose": "BOM effectivity",
        "status": "verified-supplied"
      },
      {
        "target": "WM-ACT-034",
        "purpose": "Quality assessment",
        "status": "unverified-draft"
      }
    ],
    "excludes": [
      "serialized item identity",
      "product definition",
      "work order",
      "transformation event",
      "as-built assembly",
      "universal serial identity"
    ]
  },
  "objects": {
    "Lot": {
      "identity": [
        "lotId"
      ],
      "required": [
        "issuerRef",
        "identifierSchemeRef",
        "lotCode",
        "productRef",
        "lifecycleState",
        "dispositionState",
        "dispositionValidFrom"
      ],
      "optional": [
        "producedInterval",
        "quantity",
        "parentLotRefs"
      ],
      "retirement": {
        "retiredAt": "<rfc3339-with-offset>",
        "tombstoneRef": "<string>",
        "reason": "<string>"
      },
      "alternateKeys": [
        [
          "issuerRef",
          "identifierSchemeRef",
          "lotCode"
        ]
      ],
      "uniqueness": {
        "lotId": "global",
        "alternateKey:issuerRef+identifierSchemeRef+lotCode": "unique-per-issuer-scheme"
      },
      "conditionalRequired": [
        {
          "when": "status in [corrected,superseded]",
          "require": [
            "supersedesRef"
          ]
        }
      ]
    },
    "LotMembership": {
      "identity": [
        "lotId",
        "membershipId"
      ],
      "required": [
        "memberRef",
        "memberKind",
        "validFrom",
        "sourceEventRef",
        "assertionBasis"
      ],
      "optional": [
        "validTo",
        "closingEventRef"
      ],
      "enums": {
        "memberKind": [
          "serialized-item",
          "child-lot"
        ]
      }
    },
    "LotGenealogyEdge": {
      "identity": [
        "lotId",
        "edgeId"
      ],
      "required": [
        "edgeKind",
        "counterpartLotRef",
        "sourceEventRef"
      ],
      "enums": {
        "edgeKind": [
          "split-from",
          "merged-from",
          "split-into",
          "merged-into"
        ]
      }
    }
  },
  "invariants": [
    "Lot codes are issuer and scheme scoped.",
    "A lot is not a serialized instance.",
    "Lot membership is provenance, not identity.",
    "Quantities carry unit, basis and unit code-list version.",
    "Splits and merges preserve parent provenance.",
    "Lot-based effectivity requires a resolvable lot.",
    "Quality state is time-bounded.",
    "Recall never deletes genealogy.",
    "Identifiers are never reused.",
    "Missing evidence remains explicitly unknown and never defaults to zero, absent or not-applicable.",
    "Identifiers are never reused; retirement writes a tombstone and the retired identifier stays resolvable.",
    "This model never asserts as-built composition state."
  ],
  "holds": [
    "Registry allocation is pending and no identifier may be guessed.",
    "Independent Grok review and one frozen semantic audit are pending.",
    "Base specifications and approved relations remain incomplete.",
    "Package conversion and live verification are pending.",
    "WM-OBJ-019 to WM-OBJ-002 is simultaneously asserted as parent, COMPOSE and REFERENCE; unresolved.",
    "WM-OBJ-018 as child of WM-OBJ-002 conflicts with its own required REFERENCE boundary; unresolved.",
    "WM-SFT-012 and WM-SFT-008 claim CHILD of WM-SFT-007 while the ledger records REFERENCE or no edge; unresolved.",
    "WM-OBJ-012, WM-OBJ-020, WM-OBJ-021, WM-OBJ-022 and WM-ACT-015 are dangling relation targets.",
    "CLASSIFIES is absent from the relation enum; WM-OBJ-017 expresses it as REFERENCE, diverging from the relations ledger.",
    "WM-ACT-007 is maintenance-scoped with unresolved K11 duplication."
  ],
  "promotionBlocked": true,
  "identifierAllocationBlocked": true,
  "publicationHold": true,
  "decisionEnum": "NEW_MODEL_UNASSIGNED",
  "sharedShapes": {
    "Quantity": {
      "value": "<decimal-string|null>",
      "unitCode": "<string>",
      "unitCodeListRef": "<string>",
      "unitCodeListVersion": "<string>",
      "basis": "per-each|per-parent-assembly|per-batch|per-unit-length|per-unit-mass|per-unit-volume|per-operation",
      "basisParentQuantity": {
        "value": "<decimal-string>",
        "unitCode": "<string>"
      },
      "rounding": "none|half-up|half-even|ceil|floor",
      "unknownReason": "null|unknown|not-applicable|withheld"
    },
    "AssertionBasis": "declared|observed|inferred",
    "Timestamp": "<rfc3339-with-mandatory-explicit-offset>"
  },
  "sharedRules": [
    "Quantity.value and Quantity.unknownReason are mutually exclusive and exactly one is non-null.",
    "Zero never denotes unknown, not-applicable or withheld.",
    "Declared, observed and inferred assertions never merge and never overwrite one another.",
    "Event, effective, observation, record, posting, ingestion, publication and correction times are distinct fields and never collapse."
  ],
  "enums": {
    "referenceStatus": [
      "verified-supplied",
      "unverified-draft",
      "dangling",
      "unassigned-candidate"
    ]
  },
  "dispositionStates": [
    "unrestricted",
    "quarantined",
    "blocked",
    "recalled"
  ],
  "unresolvedReferences": [
    {
      "targetName": "Actual Transformation Event",
      "state": "unassigned-candidate",
      "field": "sourceEventRef|derivedFromEventRefs"
    }
  ],
  "resolutionHold": true
}
