schemaVersion: 1
policyId: loan-approval-business-contract
requiredSuites:
  - suiteId: loan-approval-decisions
    requiredCases: [auto-approve, auto-reject, manual-review]
    minimumDepth: L2
    minimumBusinessExpectations: 6
    minimumReplayAssurance: CONTRACT_CONTROLLED
  - suiteId: loan-funding-resilience
    requiredCases: [funding-success, transient-booking-retried, booking-fallback-used, notification-failure-compensated]
    minimumDepth: L2
    minimumBusinessExpectations: 4
    minimumReplayAssurance: CONTRACT_CONTROLLED
requiredRequirementRefs:
  - LOAN-DECISION-001
  - LOAN-DECISION-002
  - LOAN-DECISION-003
  - LOAN-FUNDING-001
  - LOAN-FUNDING-002
  - LOAN-FUNDING-003
maximumUnverifiedEffects: 0
businessOutputs:
  - {outputId: riskDecision, nodeId: risk, pointer: /decision}
  - {outputId: approvedStatus, nodeId: approve, pointer: /status}
  - {outputId: rejectedStatus, nodeId: reject, pointer: /status}
  - {outputId: manualStatus, nodeId: persistManualReview, pointer: /status}
  - {outputId: fundingStatus, nodeId: notifyBorrower, pointer: /status}
requirementObligations:
  - {requirementRef: LOAN-DECISION-001, suiteId: loan-approval-decisions, minimumPassingCases: 1, minimumDepth: L2, minimumReplayAssurance: CONTRACT_CONTROLLED, minimumEffectSafety: PORT_GUARDED, allowedOracleTypes: [APPROVED_EXAMPLE]}
  - {requirementRef: LOAN-DECISION-002, suiteId: loan-approval-decisions, minimumPassingCases: 1, minimumDepth: L2, minimumReplayAssurance: CONTRACT_CONTROLLED, minimumEffectSafety: PORT_GUARDED, allowedOracleTypes: [APPROVED_EXAMPLE]}
  - {requirementRef: LOAN-DECISION-003, suiteId: loan-approval-decisions, minimumPassingCases: 1, minimumDepth: L2, minimumReplayAssurance: CONTRACT_CONTROLLED, minimumEffectSafety: PORT_GUARDED, allowedOracleTypes: [APPROVED_EXAMPLE]}
  - {requirementRef: LOAN-FUNDING-001, suiteId: loan-funding-resilience, minimumPassingCases: 1, minimumDepth: L2, minimumReplayAssurance: CONTRACT_CONTROLLED, minimumEffectSafety: PORT_GUARDED, allowedOracleTypes: [APPROVED_EXAMPLE]}
  - {requirementRef: LOAN-FUNDING-002, suiteId: loan-funding-resilience, minimumPassingCases: 1, minimumDepth: L2, minimumReplayAssurance: CONTRACT_CONTROLLED, minimumEffectSafety: PORT_GUARDED, allowedOracleTypes: [APPROVED_EXAMPLE]}
  - {requirementRef: LOAN-FUNDING-003, suiteId: loan-funding-resilience, minimumPassingCases: 1, minimumDepth: L2, minimumReplayAssurance: CONTRACT_CONTROLLED, minimumEffectSafety: PORT_GUARDED, allowedOracleTypes: [APPROVED_EXAMPLE]}
requirementBindings:
  - {requirementRef: LOAN-DECISION-001, suiteId: loan-approval-decisions, caseId: auto-approve, expectationIds: [route-to-approval, approval-is-final]}
  - {requirementRef: LOAN-DECISION-002, suiteId: loan-approval-decisions, caseId: auto-reject, expectationIds: [route-to-rejection, rejection-is-final]}
  - {requirementRef: LOAN-DECISION-003, suiteId: loan-approval-decisions, caseId: manual-review, expectationIds: [route-to-manual-review, manual-review-is-final]}
  - {requirementRef: LOAN-FUNDING-001, suiteId: loan-funding-resilience, caseId: funding-success, expectationIds: [funding-notified]}
  - {requirementRef: LOAN-FUNDING-002, suiteId: loan-funding-resilience, caseId: transient-booking-retried, expectationIds: [retried-funding-notified]}
  - {requirementRef: LOAN-FUNDING-003, suiteId: loan-funding-resilience, caseId: notification-failure-compensated, expectationIds: [notification-failure-is-terminal]}
  - {requirementRef: LOAN-FUNDING-002, suiteId: loan-funding-resilience, caseId: booking-fallback-used, expectationIds: [fallback-funding-notified]}
