{
  "format": "vercy-model-allocation-candidate/v1",
  "contourId": "EM-WRK-05",
  "proposedName": "Resource Demand",
  "modelId": null,
  "registryId": null,
  "allocationState": "unassigned",
  "decision": "NEW MODEL",
  "canonicalPublishable": false,
  "candidateRevision": 2,
  "identityTest": {
    "stableIdentity": "A resource requirement remains identifiable while unmet, planned, allocated, withdrawn or closed independently of pools, assignments and consumption.",
    "versionIdentity": "Any change to requester, class, quantity, interval, priority, substitutability, divisibility or uncertainty creates a new immutable DemandVersion.",
    "independentLifecycle": [
      "draft",
      "submitted",
      "approved",
      "rejected",
      "withdrawn",
      "open",
      "partially-covered",
      "covered",
      "lapsed",
      "closed"
    ],
    "mastership": "work or portfolio demand authority"
  },
  "boundary": {
    "owns": [
      "resource-demand root identity",
      "immutable demand versions",
      "approval and fulfilment axes",
      "quantity and uncertainty",
      "baseline-qualified fulfilment history"
    ],
    "references": [
      {
        "target": "WM-ACT-008",
        "purpose": "requesting work and capacity-plan context"
      },
      {
        "target": "WM-ORG-016",
        "purpose": "referenced downstream assignment, non-causal"
      },
      {
        "target": "WM-PER-001",
        "purpose": "optional non-binding named preference"
      },
      {
        "target": "WM-OBJ-001",
        "purpose": "optional non-binding asset preference"
      },
      {
        "target": "WM-XCT-009",
        "purpose": "calendar and timezone rules"
      },
      {
        "target": "WM-ECO-012",
        "purpose": "external valuation and budget only"
      },
      {
        "target": "WM-FLW-015",
        "purpose": "actual consumption only"
      }
    ],
    "excludes": [
      "mastership of person, asset, assignment or budget",
      "pool, allocation or scenario identity",
      "availability, schedule or actual consumption",
      "automatic assignment",
      "currency as resource quantity"
    ]
  },
  "objects": {
    "ResourceDemand": {
      "identity": [
        "resourceDemandId"
      ],
      "required": [
        "requestMode",
        "requestingWorkRef",
        "resourceClass",
        "quantityKind",
        "unit",
        "unitSchemeVersion",
        "quantity",
        "quantityCharacter",
        "divisibility",
        "prioritySchemeRef",
        "approvalState",
        "fulfilmentState"
      ],
      "optional": [
        "namedPreferenceRef",
        "interval",
        "deadline",
        "substitutability",
        "priority",
        "uncertainty",
        "fulfilmentBasisRef"
      ],
      "constraints": [
        "exactly one of interval or deadline",
        "requestMode is competence or named-preference",
        "named preference never binds a subject"
      ]
    },
    "DemandVersion": {
      "identity": [
        "resourceDemandId",
        "version"
      ],
      "required": [
        "contentDigest",
        "validFrom"
      ],
      "optional": [
        "validTo",
        "supersedesVersion"
      ]
    },
    "Quantity": {
      "required": [
        "quantityKind",
        "unit",
        "unitSchemeVersion",
        "quantityCharacter"
      ],
      "optional": [
        "amount",
        "lower",
        "upper",
        "distributionRef"
      ],
      "quantityCharacter": [
        "stock",
        "rate",
        "share"
      ]
    },
    "TimeInterval": {
      "required": [
        "start",
        "end",
        "ianaZone",
        "offset",
        "tzdbRelease",
        "calendarRef",
        "durationKind",
        "dstPolicy"
      ],
      "durationKind": [
        "elapsed",
        "working",
        "effort"
      ]
    }
  },
  "stateMachines": {
    "approvalState": {
      "states": [
        "draft",
        "submitted",
        "approved",
        "rejected",
        "withdrawn"
      ],
      "terminal": [
        "rejected",
        "withdrawn"
      ]
    },
    "fulfilmentState": {
      "states": [
        "open",
        "partially-covered",
        "covered",
        "lapsed",
        "closed"
      ],
      "terminal": [
        "lapsed",
        "closed"
      ],
      "guards": [
        "lapsed requires deadline",
        "coverage advances only from an authorized baseline scenario release"
      ]
    }
  },
  "invariants": [
    "Demand never asserts person or asset mastership and never binds a named subject.",
    "A named preference still carries resourceClass and competence semantics and grants no reservation, exclusivity or assignment.",
    "Exactly one of interval or deadline is present.",
    "Every quantity declares kind, unit, unit scheme version, character and divisibility.",
    "Substitutability declares its dimension and priority cites a named scheme.",
    "Demand versions are immutable and addressable by resourceDemandId plus version.",
    "Approval and fulfilment states are orthogonal.",
    "A non-baseline scenario never advances a demand root fact.",
    "FulfilmentBasisRef pins the authorized baseline decision and scenario release.",
    "Matching creates candidacy only and never assignment.",
    "Currency is never a demand quantity kind; valuation is an external evidence-bearing conversion.",
    "A declared uncertainty range is never collapsed to a point for capacity evaluation.",
    "Unknown supply never proves demand coverage.",
    "Withdrawal and closure preserve all prior versions and planning references.",
    "Demand writes to no person, assignment, asset, budget, calendar or consumption master."
  ],
  "holds": [
    "Registry allocation is pending and no identifier may be guessed.",
    "Base publication and relation-contract holds remain."
  ]
}
