{
  "vercy": "1.0-draft",
  "metaModel": {
    "id": "enterprise-counterparty-relationship",
    "registryId": "vr.profile.enterprise-counterparty-relationship",
    "name": "Enterprise Counterparty Relationship",
    "version": "0.1.0",
    "kind": "companion-contract",
    "logicalKind": "cross-model-composition-profile"
  },
  "canonicalUrl": "https://ver.cy/models/enterprise-counterparty-relationship/versions/0.1.0/spec.json",
  "model": {
    "purpose": "Represent customer, supplier and partner roles for one Party without duplicating Party identity, upstream relationship records or contact endpoint values.",
    "scope": "A bounded composition profile over existing Party, commercial-relationship, endpoint and classification authorities.",
    "inScope": [
      "CounterpartyRelationshipSet",
      "CommercialRoleBinding",
      "AccountScopeBinding",
      "ContactAssignment",
      "SegmentationAssertion",
      "rolesAt",
      "contactsFor",
      "segmentsAt"
    ],
    "outOfScope": [
      "Party identity",
      "customer/supplier/partner lifecycle",
      "endpoint values and consent",
      "contracts, orders and invoices",
      "qualification and approval",
      "classification schemes",
      "group membership"
    ]
  },
  "structure": {
    "bundles": [
      {
        "id": "CPR-B1",
        "name": "Identity and authority",
        "description": "Govern identity and authority without duplicating upstream identity or authority.",
        "layers": [
          {
            "id": "CPR-L1",
            "name": "Party anchoring",
            "description": "Make party anchoring explicit and testable.",
            "findings": [
              {
                "id": "CPR-F1",
                "name": "Set identity",
                "description": "Validate set identity against the bounded profile contract.",
                "questions": [
                  {
                    "id": "CPR-Q1",
                    "text": "Which Party and observing Dimension identify this set?",
                    "kind": "evidence",
                    "answer_data": [
                      "Set identity"
                    ]
                  },
                  {
                    "id": "CPR-Q2",
                    "text": "Can any role create another Party?",
                    "kind": "decision",
                    "answer_data": [
                      "Set identity"
                    ]
                  }
                ],
                "artifacts": [
                  {
                    "id": "CPR-A1",
                    "name": "Set identity evidence",
                    "description": "Reference or assertion needed to answer this finding."
                  }
                ],
                "actions": [
                  {
                    "id": "CPR-X1",
                    "name": "Verify set identity",
                    "description": "Run the profile validation without changing an upstream master."
                  }
                ]
              },
              {
                "id": "CPR-F2",
                "name": "Party master",
                "description": "Validate party master against the bounded profile contract.",
                "questions": [
                  {
                    "id": "CPR-Q3",
                    "text": "Which authority resolves partyRef?",
                    "kind": "evidence",
                    "answer_data": [
                      "Party master"
                    ]
                  },
                  {
                    "id": "CPR-Q4",
                    "text": "Is a split Party master held rather than hidden?",
                    "kind": "decision",
                    "answer_data": [
                      "Party master"
                    ]
                  }
                ],
                "artifacts": [
                  {
                    "id": "CPR-A2",
                    "name": "Party master evidence",
                    "description": "Reference or assertion needed to answer this finding."
                  }
                ],
                "actions": [
                  {
                    "id": "CPR-X2",
                    "name": "Verify party master",
                    "description": "Run the profile validation without changing an upstream master."
                  }
                ]
              }
            ]
          },
          {
            "id": "CPR-L2",
            "name": "Commercial authorities",
            "description": "Make commercial authorities explicit and testable.",
            "findings": [
              {
                "id": "CPR-F3",
                "name": "Role ownership",
                "description": "Validate role ownership against the bounded profile contract.",
                "questions": [
                  {
                    "id": "CPR-Q5",
                    "text": "Which upstream model owns this role?",
                    "kind": "evidence",
                    "answer_data": [
                      "Role ownership"
                    ]
                  },
                  {
                    "id": "CPR-Q6",
                    "text": "Does customer resolve only to 014 and supplier/partner to 015?",
                    "kind": "decision",
                    "answer_data": [
                      "Role ownership"
                    ]
                  }
                ],
                "artifacts": [
                  {
                    "id": "CPR-A3",
                    "name": "Role ownership evidence",
                    "description": "Reference or assertion needed to answer this finding."
                  }
                ],
                "actions": [
                  {
                    "id": "CPR-X3",
                    "name": "Verify role ownership",
                    "description": "Run the profile validation without changing an upstream master."
                  }
                ]
              },
              {
                "id": "CPR-F4",
                "name": "Exact referent",
                "description": "Validate exact referent against the bounded profile contract.",
                "questions": [
                  {
                    "id": "CPR-Q7",
                    "text": "Which versioned upstream record is bound?",
                    "kind": "evidence",
                    "answer_data": [
                      "Exact referent"
                    ]
                  },
                  {
                    "id": "CPR-Q8",
                    "text": "Is lifecycle copied into the profile?",
                    "kind": "decision",
                    "answer_data": [
                      "Exact referent"
                    ]
                  }
                ],
                "artifacts": [
                  {
                    "id": "CPR-A4",
                    "name": "Exact referent evidence",
                    "description": "Reference or assertion needed to answer this finding."
                  }
                ],
                "actions": [
                  {
                    "id": "CPR-X4",
                    "name": "Verify exact referent",
                    "description": "Run the profile validation without changing an upstream master."
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "id": "CPR-B2",
        "name": "Scope and roles",
        "description": "Govern scope and roles without duplicating upstream identity or authority.",
        "layers": [
          {
            "id": "CPR-L3",
            "name": "Concurrent roles",
            "description": "Make concurrent roles explicit and testable.",
            "findings": [
              {
                "id": "CPR-F5",
                "name": "Multi-role set",
                "description": "Validate multi-role set against the bounded profile contract.",
                "questions": [
                  {
                    "id": "CPR-Q9",
                    "text": "Which roles are active at the requested time?",
                    "kind": "evidence",
                    "answer_data": [
                      "Multi-role set"
                    ]
                  },
                  {
                    "id": "CPR-Q10",
                    "text": "Does adding a role preserve Party identity?",
                    "kind": "decision",
                    "answer_data": [
                      "Multi-role set"
                    ]
                  }
                ],
                "artifacts": [
                  {
                    "id": "CPR-A5",
                    "name": "Multi-role set evidence",
                    "description": "Reference or assertion needed to answer this finding."
                  }
                ],
                "actions": [
                  {
                    "id": "CPR-X5",
                    "name": "Verify multi-role set",
                    "description": "Run the profile validation without changing an upstream master."
                  }
                ]
              },
              {
                "id": "CPR-F6",
                "name": "Role validity",
                "description": "Validate role validity against the bounded profile contract.",
                "questions": [
                  {
                    "id": "CPR-Q11",
                    "text": "What half-open interval applies to each binding?",
                    "kind": "evidence",
                    "answer_data": [
                      "Role validity"
                    ]
                  },
                  {
                    "id": "CPR-Q12",
                    "text": "How is upstream supersession surfaced?",
                    "kind": "decision",
                    "answer_data": [
                      "Role validity"
                    ]
                  }
                ],
                "artifacts": [
                  {
                    "id": "CPR-A6",
                    "name": "Role validity evidence",
                    "description": "Reference or assertion needed to answer this finding."
                  }
                ],
                "actions": [
                  {
                    "id": "CPR-X6",
                    "name": "Verify role validity",
                    "description": "Run the profile validation without changing an upstream master."
                  }
                ]
              }
            ]
          },
          {
            "id": "CPR-L4",
            "name": "Account scope",
            "description": "Make account scope explicit and testable.",
            "findings": [
              {
                "id": "CPR-F7",
                "name": "Scope kind",
                "description": "Validate scope kind against the bounded profile contract.",
                "questions": [
                  {
                    "id": "CPR-Q13",
                    "text": "Is the frame seller, buyer, legal entity or group?",
                    "kind": "evidence",
                    "answer_data": [
                      "Scope kind"
                    ]
                  },
                  {
                    "id": "CPR-Q14",
                    "text": "Which target resolves the scope?",
                    "kind": "decision",
                    "answer_data": [
                      "Scope kind"
                    ]
                  }
                ],
                "artifacts": [
                  {
                    "id": "CPR-A7",
                    "name": "Scope kind evidence",
                    "description": "Reference or assertion needed to answer this finding."
                  }
                ],
                "actions": [
                  {
                    "id": "CPR-X7",
                    "name": "Verify scope kind",
                    "description": "Run the profile validation without changing an upstream master."
                  }
                ]
              },
              {
                "id": "CPR-F8",
                "name": "Group boundary",
                "description": "Validate group boundary against the bounded profile contract.",
                "questions": [
                  {
                    "id": "CPR-Q15",
                    "text": "Which group perimeter authority is referenced?",
                    "kind": "evidence",
                    "answer_data": [
                      "Group boundary"
                    ]
                  },
                  {
                    "id": "CPR-Q16",
                    "text": "Is membership inferred from tax ID or CRM hierarchy?",
                    "kind": "decision",
                    "answer_data": [
                      "Group boundary"
                    ]
                  }
                ],
                "artifacts": [
                  {
                    "id": "CPR-A8",
                    "name": "Group boundary evidence",
                    "description": "Reference or assertion needed to answer this finding."
                  }
                ],
                "actions": [
                  {
                    "id": "CPR-X8",
                    "name": "Verify group boundary",
                    "description": "Run the profile validation without changing an upstream master."
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "id": "CPR-B3",
        "name": "Contacts and classification",
        "description": "Govern contacts and classification without duplicating upstream identity or authority.",
        "layers": [
          {
            "id": "CPR-L5",
            "name": "Contact assignment",
            "description": "Make contact assignment explicit and testable.",
            "findings": [
              {
                "id": "CPR-F9",
                "name": "Endpoint reference",
                "description": "Validate endpoint reference against the bounded profile contract.",
                "questions": [
                  {
                    "id": "CPR-Q17",
                    "text": "Which WM-PER-010 endpoint is assigned?",
                    "kind": "evidence",
                    "answer_data": [
                      "Endpoint reference"
                    ]
                  },
                  {
                    "id": "CPR-Q18",
                    "text": "Does the assignment copy an endpoint value?",
                    "kind": "decision",
                    "answer_data": [
                      "Endpoint reference"
                    ]
                  }
                ],
                "artifacts": [
                  {
                    "id": "CPR-A9",
                    "name": "Endpoint reference evidence",
                    "description": "Reference or assertion needed to answer this finding."
                  }
                ],
                "actions": [
                  {
                    "id": "CPR-X9",
                    "name": "Verify endpoint reference",
                    "description": "Run the profile validation without changing an upstream master."
                  }
                ]
              },
              {
                "id": "CPR-F10",
                "name": "Assignment context",
                "description": "Validate assignment context against the bounded profile contract.",
                "questions": [
                  {
                    "id": "CPR-Q19",
                    "text": "Which purpose, role, scope and interval apply?",
                    "kind": "evidence",
                    "answer_data": [
                      "Assignment context"
                    ]
                  },
                  {
                    "id": "CPR-Q20",
                    "text": "Does assignment imply consent or reachability?",
                    "kind": "decision",
                    "answer_data": [
                      "Assignment context"
                    ]
                  }
                ],
                "artifacts": [
                  {
                    "id": "CPR-A10",
                    "name": "Assignment context evidence",
                    "description": "Reference or assertion needed to answer this finding."
                  }
                ],
                "actions": [
                  {
                    "id": "CPR-X10",
                    "name": "Verify assignment context",
                    "description": "Run the profile validation without changing an upstream master."
                  }
                ]
              }
            ]
          },
          {
            "id": "CPR-L6",
            "name": "Segmentation assertions",
            "description": "Make segmentation assertions explicit and testable.",
            "findings": [
              {
                "id": "CPR-F11",
                "name": "Sourced segment",
                "description": "Validate sourced segment against the bounded profile contract.",
                "questions": [
                  {
                    "id": "CPR-Q21",
                    "text": "Which code, scheme, version and source support this assertion?",
                    "kind": "evidence",
                    "answer_data": [
                      "Sourced segment"
                    ]
                  },
                  {
                    "id": "CPR-Q22",
                    "text": "Is a bare segment label rejected?",
                    "kind": "decision",
                    "answer_data": [
                      "Sourced segment"
                    ]
                  }
                ],
                "artifacts": [
                  {
                    "id": "CPR-A11",
                    "name": "Sourced segment evidence",
                    "description": "Reference or assertion needed to answer this finding."
                  }
                ],
                "actions": [
                  {
                    "id": "CPR-X11",
                    "name": "Verify sourced segment",
                    "description": "Run the profile validation without changing an upstream master."
                  }
                ]
              },
              {
                "id": "CPR-F12",
                "name": "Assertion history",
                "description": "Validate assertion history against the bounded profile contract.",
                "questions": [
                  {
                    "id": "CPR-Q23",
                    "text": "Which method and asserted time apply?",
                    "kind": "evidence",
                    "answer_data": [
                      "Assertion history"
                    ]
                  },
                  {
                    "id": "CPR-Q24",
                    "text": "Are conflicts retained and corrections appended?",
                    "kind": "decision",
                    "answer_data": [
                      "Assertion history"
                    ]
                  }
                ],
                "artifacts": [
                  {
                    "id": "CPR-A12",
                    "name": "Assertion history evidence",
                    "description": "Reference or assertion needed to answer this finding."
                  }
                ],
                "actions": [
                  {
                    "id": "CPR-X12",
                    "name": "Verify assertion history",
                    "description": "Run the profile validation without changing an upstream master."
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "id": "CPR-B4",
        "name": "Projection and controls",
        "description": "Govern projection and controls without duplicating upstream identity or authority.",
        "layers": [
          {
            "id": "CPR-L7",
            "name": "Current projections",
            "description": "Make current projections explicit and testable.",
            "findings": [
              {
                "id": "CPR-F13",
                "name": "rolesAt",
                "description": "Validate rolesat against the bounded profile contract.",
                "questions": [
                  {
                    "id": "CPR-Q25",
                    "text": "Which bindings are active at time t?",
                    "kind": "evidence",
                    "answer_data": [
                      "rolesAt"
                    ]
                  },
                  {
                    "id": "CPR-Q26",
                    "text": "Does projection mint a relationship?",
                    "kind": "decision",
                    "answer_data": [
                      "rolesAt"
                    ]
                  }
                ],
                "artifacts": [
                  {
                    "id": "CPR-A13",
                    "name": "rolesAt evidence",
                    "description": "Reference or assertion needed to answer this finding."
                  }
                ],
                "actions": [
                  {
                    "id": "CPR-X13",
                    "name": "Verify rolesat",
                    "description": "Run the profile validation without changing an upstream master."
                  }
                ]
              },
              {
                "id": "CPR-F14",
                "name": "contactsFor",
                "description": "Validate contactsfor against the bounded profile contract.",
                "questions": [
                  {
                    "id": "CPR-Q27",
                    "text": "Which assignments match purpose and time?",
                    "kind": "evidence",
                    "answer_data": [
                      "contactsFor"
                    ]
                  },
                  {
                    "id": "CPR-Q28",
                    "text": "Is current permission rechecked at endpoint authority?",
                    "kind": "decision",
                    "answer_data": [
                      "contactsFor"
                    ]
                  }
                ],
                "artifacts": [
                  {
                    "id": "CPR-A14",
                    "name": "contactsFor evidence",
                    "description": "Reference or assertion needed to answer this finding."
                  }
                ],
                "actions": [
                  {
                    "id": "CPR-X14",
                    "name": "Verify contactsfor",
                    "description": "Run the profile validation without changing an upstream master."
                  }
                ]
              }
            ]
          },
          {
            "id": "CPR-L8",
            "name": "Boundary controls",
            "description": "Make boundary controls explicit and testable.",
            "findings": [
              {
                "id": "CPR-F15",
                "name": "Endpoint conflict",
                "description": "Validate endpoint conflict against the bounded profile contract.",
                "questions": [
                  {
                    "id": "CPR-Q29",
                    "text": "Is the PER-010/XCT-024 conflict still visible?",
                    "kind": "evidence",
                    "answer_data": [
                      "Endpoint conflict"
                    ]
                  },
                  {
                    "id": "CPR-Q30",
                    "text": "Can XCT-024 become a second party endpoint master?",
                    "kind": "decision",
                    "answer_data": [
                      "Endpoint conflict"
                    ]
                  }
                ],
                "artifacts": [
                  {
                    "id": "CPR-A15",
                    "name": "Endpoint conflict evidence",
                    "description": "Reference or assertion needed to answer this finding."
                  }
                ],
                "actions": [
                  {
                    "id": "CPR-X15",
                    "name": "Verify endpoint conflict",
                    "description": "Run the profile validation without changing an upstream master."
                  }
                ]
              },
              {
                "id": "CPR-F16",
                "name": "Neighbor exclusion",
                "description": "Validate neighbor exclusion against the bounded profile contract.",
                "questions": [
                  {
                    "id": "CPR-Q31",
                    "text": "Which contract, order, consent and event refs remain external?",
                    "kind": "evidence",
                    "answer_data": [
                      "Neighbor exclusion"
                    ]
                  },
                  {
                    "id": "CPR-Q32",
                    "text": "Does any profile field absorb their lifecycle?",
                    "kind": "decision",
                    "answer_data": [
                      "Neighbor exclusion"
                    ]
                  }
                ],
                "artifacts": [
                  {
                    "id": "CPR-A16",
                    "name": "Neighbor exclusion evidence",
                    "description": "Reference or assertion needed to answer this finding."
                  }
                ],
                "actions": [
                  {
                    "id": "CPR-X16",
                    "name": "Verify neighbor exclusion",
                    "description": "Run the profile validation without changing an upstream master."
                  }
                ]
              }
            ]
          }
        ]
      }
    ]
  },
  "functions": [
    {
      "id": "CPR-FN1",
      "name": "Register relationship set",
      "description": "Idempotently anchor one set to Party and observing Dimension."
    },
    {
      "id": "CPR-FN2",
      "name": "Bind commercial role",
      "description": "Bind an exact upstream 014/015 record without copying its lifecycle."
    },
    {
      "id": "CPR-FN3",
      "name": "Assign contact",
      "description": "Qualify an existing endpoint by purpose, role, scope and time."
    },
    {
      "id": "CPR-FN4",
      "name": "Assert segment",
      "description": "Append a sourced, versioned classification assertion."
    },
    {
      "id": "CPR-FN5",
      "name": "Project current view",
      "description": "Derive roles, contacts and segments at a requested time."
    }
  ],
  "composition": {
    "runtimeImports": [],
    "semanticReferences": [
      {
        "id": "WM-ORG-014",
        "version": "0.3.0-research.1",
        "relation": "REFERENCE",
        "url": "https://ver.cy/models/enterprise-counterparty-relationship/versions/0.1.0/upstream/wm-org-014-customer-account-relationship/spec.yaml",
        "specDigest": "sha256:d6fd208f8fcc40e18c858eaece97fb471b0b26a52ba61ec4a41e9070a029fd60"
      },
      {
        "id": "WM-ORG-015",
        "version": "0.3.0-research.1",
        "relation": "REFERENCE",
        "url": "https://ver.cy/models/enterprise-counterparty-relationship/versions/0.1.0/upstream/wm-org-015-supplier-partner-relationship/spec.yaml",
        "specDigest": "sha256:f9b8dcb2709f25a8ae93cc3de4502bd24443368cdda26be08f4c81ee675f9c06"
      },
      {
        "id": "WM-PER-010",
        "version": "0.3.0-research.1",
        "relation": "REFERENCE",
        "url": "https://ver.cy/models/enterprise-counterparty-relationship/versions/0.1.0/upstream/wm-per-010-contact-point-party-profile/spec.yaml",
        "specDigest": "sha256:0960c82c84d6016784549e2cb8bdf9392b8fc1756f2bb0c41c221cfd79f6fa5e"
      },
      {
        "id": "WM-XCT-024",
        "version": "0.3.0-research.1",
        "relation": "REFERENCE",
        "url": "https://ver.cy/models/enterprise-counterparty-relationship/versions/0.1.0/upstream/wm-xct-024-contact-point/spec.yaml",
        "specDigest": "sha256:c5ab59160a9b9aedd191b319e6150153c56c78d0b212624f910078436ae12389"
      }
    ],
    "limits": "Semantic references only. The profile does not claim parent subtype conformance or settle the WM-PER-010/WM-XCT-024 registry conflict."
  },
  "invariants": [
    "CounterpartyRelationshipSet identity is (partyRef, observerDimensionRef).",
    "A role never creates, merges or splits a Party.",
    "Customer binds only WM-ORG-014; supplier and partner bind only WM-ORG-015.",
    "Every role binding pins the upstream version, digest and source master.",
    "Group scope is explicit and never inferred from tax ID or CRM hierarchy.",
    "ContactAssignment stores no endpoint value, normalization, verification, consent or reachability result.",
    "Contact assignment never authorizes outreach.",
    "A segment is an append-only sourced assertion against a named scheme version.",
    "Current projections mint no identity or authority.",
    "Upstream supersession preserves history and removes obsolete bindings from current projections.",
    "WM-XCT-024 is not a second party-endpoint master in this profile.",
    "Contract, order, invoice, qualification, approval, consent and communication-event lifecycles remain external."
  ],
  "catalogue": {
    "alternateNames": [
      "EM-COM-01",
      "Counterparty Relationship Profile",
      "Customer Supplier Partner Relationship"
    ],
    "domain": [
      "Enterprise",
      "Commercial",
      "Counterparty",
      "CRM",
      "Procurement"
    ],
    "tags": [
      "counterparty",
      "customer",
      "supplier",
      "partner",
      "contact-assignment",
      "segmentation",
      "party-role"
    ],
    "adoption": "Anchor one profile set to an authoritative Party and observing Dimension; bind existing customer/supplier/partner records; assign existing contact endpoints by purpose and time; retain sourced segmentation assertions.",
    "limits": "No Party matching, endpoint ownership, consent decision, contract/order lifecycle or group-membership authority is supplied."
  },
  "researchAdjudication": {
    "decision": "PROFILE",
    "providers": {
      "Claude": "PROFILE (conditional)",
      "Grok": "PROFILE"
    },
    "publicationHolds": [
      "All four upstream models remain reviewable drafts.",
      "WM-ORG-014/015 composition edges are not approved.",
      "WM-PER-010 versus WM-XCT-024 endpoint ownership remains unresolved at source.",
      "The adopting Dimension must supply one authoritative Party resolution policy.",
      "No production CRM, procurement, IAM, consent or classification integration is included."
    ]
  },
  "statistics": {
    "sources": 4,
    "bundles": 4,
    "layers": 8,
    "findings": 16,
    "questions": 32,
    "artifacts": 16,
    "functions": 5
  }
}
