{
  "format": "vercy-model-allocation-candidate/v1",
  "contourId": "EM-FIN-02",
  "proposedName": "Chart of Accounts / Accounting Policy",
  "modelId": null,
  "registryId": null,
  "allocationState": "unassigned",
  "decision": "NEW MODEL",
  "canonicalPublishable": false,
  "identityTest": {
    "stableIdentity": "A governed Chart of Accounts, its Ledger Accounts and accounting-policy basis remain identifiable across hierarchy revisions, ledger adoption, recognition changes and reporting periods.",
    "versionIdentity": "Taxonomy, hierarchy, Ledger Account, mapping, recognition, measurement, currency or close-policy changes create immutable effective-dated revisions with predecessor lineage.",
    "independentLifecycle": [
      "draft",
      "approved",
      "effective",
      "suspended",
      "superseded",
      "retired"
    ],
    "mastership": "accounting-policy and finance-governance authority"
  },
  "boundary": {
    "owns": [
      "stable Chart-of-Accounts identity and immutable revisions",
      "Ledger Account identity, hierarchy, posting eligibility and effective intervals",
      "accounting-policy identity and immutable recognition, measurement, currency and close-rule definitions",
      "explicit effective-dated ledger adoption of one Chart revision and policy set",
      "divergence-reason vocabulary and cross-ledger mapping-rule definitions, never binding instances",
      "Ledger Period calendar and authoritative per-ledger close state",
      "authorised hard-close exception policy"
    ],
    "references": [
      {
        "target": "WM-ECO-015",
        "purpose": "Optional externally serviced Financial Account backing, never Ledger Account identity"
      },
      {
        "target": "WM-ECO-016",
        "purpose": "Entries and postings evaluated against pinned effective Ledger Account and policy revisions"
      },
      {
        "target": "WM-ECO-017",
        "purpose": "Derived per-ledger balance assertions"
      },
      {
        "target": "WM-ECO-008",
        "purpose": "Invoice correlation only"
      },
      {
        "target": "WM-ECO-009",
        "purpose": "Payment correlation only"
      },
      {
        "target": "WM-XCT-014",
        "purpose": "Monetary, currency and rate context where applicable"
      },
      {
        "target": "WM-ECO-016",
        "purpose": "Intra-ledger correction relation with closed kinds reverse, adjust or restate; owned by WM-ECO-016"
      }
    ],
    "excludes": [
      "bank or custody Financial Account identity",
      "journal-entry and posting occurrence identity",
      "external event, invoice or payment identity",
      "balance and position mastership",
      "cross-ledger balancing or netting",
      "automatic accounting conclusion without effective policy and authority"
    ]
  },
  "objects": {
    "ChartOfAccounts": {
      "identity": [
        "chartOfAccountsId"
      ],
      "required": [
        "name",
        "ownerRef",
        "status",
        "currentRevisionRef"
      ],
      "optional": [
        "regimeRef",
        "successorRef"
      ],
      "lifecycle": [
        "draft",
        "approved",
        "effective",
        "suspended",
        "superseded",
        "retired"
      ]
    },
    "ChartRevision": {
      "identity": [
        "chartOfAccountsId",
        "revision"
      ],
      "required": [
        "taxonomy",
        "hierarchy",
        "ledgerAccountNodes",
        "contentDigest",
        "effectiveFrom"
      ],
      "optional": [
        "effectiveTo",
        "supersedesRevision"
      ]
    },
    "LedgerAccount": {
      "identity": [
        "ledgerAccountId"
      ],
      "versionIdentity": [
        "ledgerAccountId",
        "effectiveFrom"
      ],
      "required": [
        "ledgerRef",
        "nodeId",
        "accountCode",
        "chartRevisionRef",
        "postingEligibility",
        "effectiveFrom"
      ],
      "optional": [
        "effectiveTo",
        "policyRevisionRef",
        "predecessorRef",
        "backings"
      ],
      "backingsSchema": {
        "items": {
          "required": [
            "financialAccountRef",
            "contextRef",
            "effectiveFrom"
          ],
          "optional": [
            "effectiveTo"
          ]
        },
        "maxEffectivePerContext": 1
      }
    },
    "AccountingPolicy": {
      "identity": [
        "accountingPolicyId"
      ],
      "required": [
        "policyKind",
        "authorityRef",
        "status",
        "currentRevisionRef",
        "lifecycleState"
      ],
      "optional": [
        "regimeRef",
        "successorRef"
      ],
      "lifecycle": [
        "draft",
        "approved",
        "effective",
        "suspended",
        "superseded",
        "retired"
      ]
    },
    "AccountingPolicyRevision": {
      "identity": [
        "accountingPolicyId",
        "revision"
      ],
      "required": [
        "recognitionRules",
        "measurementRules",
        "currencyRoles",
        "balancingCurrencyRole",
        "scopeDimensionVector",
        "toleranceDetectionThreshold",
        "residualLedgerAccountRef",
        "closeRules",
        "contentDigest",
        "effectiveFrom"
      ],
      "optional": [
        "effectiveTo",
        "supersedesRevision"
      ]
    },
    "LedgerAdoption": {
      "identity": [
        "ledgerRef",
        "effectiveFrom"
      ],
      "required": [
        "chartOfAccountsId",
        "chartRevisionRef",
        "policyRevisionRefs",
        "effectiveFrom",
        "authorityRef"
      ],
      "optional": [
        "effectiveTo",
        "supersedingAdoptionRef"
      ],
      "policyCardinality": "at most one effective revision per policyKind"
    },
    "LedgerPeriod": {
      "identity": [
        "ledgerRef",
        "periodId"
      ],
      "required": [
        "start",
        "end",
        "state",
        "authorityRef",
        "recordedAt"
      ],
      "optional": [
        "successorPeriodRef",
        "exceptionPolicyRef"
      ],
      "stateVocabulary": [
        "open",
        "soft-closed",
        "hard-closed"
      ]
    }
  },
  "holds": [
    "Registry namespace and identifier allocation are pending and no identifier may be guessed.",
    "WM-ECO-015/016/017 ownership contradictions require canonical reconciliation.",
    "LedgerPeriod ownership is proposed here but remains unallocated with the parent candidate.",
    "Currency roles, scope dimensions, tolerance units, CoA-to-ledger cardinality and hard-close exception policy require canonical adjudication.",
    "Base models remain reviewable drafts; fixtures are declarative and non-executable.",
    "Package is declarative and non-publishable."
  ],
  "candidateRevision": 3,
  "candidateStatus": "provider-reconciled-audited-remediated-allocation-held",
  "publishable": false,
  "identityConclusion": "Ledger Account is independently mastered under the Chart-of-Accounts lifecycle and cannot profile WM-ECO-015. Identifier remains unassigned pending registry adjudication.",
  "invariantRules": [
    {
      "id": "I01",
      "rule": "Financial Account, Ledger Account, Chart, Policy, Journal Entry, Posting, external event and Balance retain distinct identities."
    },
    {
      "id": "I02",
      "rule": "WM-ECO-015 owns no Chart membership, hierarchy, rollup or posting eligibility."
    },
    {
      "id": "I03",
      "rule": "Every Ledger Account belongs to exactly one ledger and one effective Chart revision at a posting instant."
    },
    {
      "id": "I04",
      "rule": "Account code equality never proves identity across ledgers or Chart revisions."
    },
    {
      "id": "I05",
      "rule": "Every posting carries accountingDate and recordedAt and pins the Ledger Account and policy revisions effective at accountingDate; close permission is evaluated against LedgerPeriod state at recordedAt."
    },
    {
      "id": "I06",
      "rule": "A Ledger Account backing is context- and interval-qualified and at most one WM-ECO-015 Financial Account is effective per context; it is never identity."
    },
    {
      "id": "I07",
      "rule": "Each Journal Entry belongs to one ledger and its postings sum exactly to zero in that ledger's single declared balancing currency role and declared scope vector."
    },
    {
      "id": "I08",
      "rule": "Cross-ledger correlation sets cite candidate-defined divergence-reason codes and never balance, net, plug or correct one another."
    },
    {
      "id": "I09",
      "rule": "Settlement, transaction, functional and presentation currencies use a closed role vocabulary; every WM-ECO-017 assertion includes currencyRole."
    },
    {
      "id": "I10",
      "rule": "Posted entries and lines are immutable; WM-ECO-016 owns the intra-ledger correction relation with closed kinds reverse, adjust and restate."
    },
    {
      "id": "I11",
      "rule": "Hard close permits a correction only in the earliest open permitted later period or as an appended linked entry under an explicit authorityRef exception; it never permits amendment."
    },
    {
      "id": "I12",
      "rule": "Correcting one sibling neither corrects nor freezes another ledger's correlation set."
    },
    {
      "id": "I13",
      "rule": "Every emitted WM-ECO-017 balance assertion is immutable regardless of period state; recomputation emits a successor with its own as-of and basis."
    },
    {
      "id": "I14",
      "rule": "WM-ECO-017 never nets across ledgers and never fuses treasury position with GL balance; balancing and balance assertions use the same policy-declared scope dimension vector."
    },
    {
      "id": "I15",
      "rule": "External event identity is not Journal Entry identity; event-to-entry correlation is many-to-many and grouping is eventRef plus ledgerRef to a set of entries."
    },
    {
      "id": "I16",
      "rule": "Retired Chart, policy and Ledger Account identifiers and revisions remain resolvable and are never recycled."
    },
    {
      "id": "I17",
      "rule": "Ledger Account versions for one ledgerRef and nodeId never overlap; accountCode is unique within one ledger at an effective instant."
    },
    {
      "id": "I18",
      "rule": "Every Posting targets exactly one Ledger Account; a WM-ECO-015 Financial Account is never a posting target."
    },
    {
      "id": "I19",
      "rule": "Lifecycle transitions never alter pinned revisions; suspension blocks new adoption and new postings from its effective instant while prior pins remain valid."
    },
    {
      "id": "I20",
      "rule": "Retirement requires no effective ledger adoption or an effective-dated successor adoption."
    },
    {
      "id": "I21",
      "rule": "At most one Chart adoption is effective per ledger at any instant across all Charts; supersession closes prospectively and never invalidates a posted pin."
    },
    {
      "id": "I22",
      "rule": "Ledger adoption carries at most one effective policy revision per policyKind; Ledger Account narrowing must remain in the adopted lineage and adoption governs conflict."
    },
    {
      "id": "I23",
      "rule": "Each ledger declares exactly one balancing currency role; translation residuals post inside that ledger to its designated residual Ledger Account."
    },
    {
      "id": "I24",
      "rule": "Tolerance is detection-only; every nonzero residual is posted in-ledger so postings sum exactly to zero in the balancing currency role."
    },
    {
      "id": "I25",
      "rule": "Every translated posting pins WM-XCT-014 rate identity and revision; rate correction requires a linked same-ledger correction and never recomputes posted amount in place."
    },
    {
      "id": "I26",
      "rule": "Close state is authoritative only from the LedgerPeriod object."
    },
    {
      "id": "I27",
      "rule": "Divergence is attached to each ledger's event-correlation set, uses the candidate's closed vocabulary and pins the compared policy revisions."
    },
    {
      "id": "I28",
      "rule": "A Chart revision continuation preserves stable ledgerAccountId and requires predecessorRef; balances remain continuous across the revision boundary."
    }
  ]
}
