{
  "lesson_id": "AGN-013",
  "cases": [
    {
      "case": "baseline_monthly_retryable_grace",
      "subscription_id": "SUB-M-001",
      "subscription_state": "PAST_DUE",
      "invoice_id": "INV-1001",
      "payment_state": "FAILED",
      "failure_class": "RETRYABLE",
      "retry_eligible": true,
      "attempt_count": 1,
      "next_attempt_at": "2026-09-15T10:00:00",
      "retry_policy_ref": "RP-MONTHLY-3X",
      "dunning_policy_ref": "DP-MONTHLY-GRACE",
      "notification_state": "FAILURE_NOTICE_SENT",
      "grace_policy_ref": "GRACE-7D",
      "grace_started_at": "2026-09-14T08:00:00",
      "grace_expires_at": "2026-09-21T08:00:00",
      "entitlement_state": "LIMITED",
      "entitlement_reason": "PAYMENT_FAILED_IN_ACTIVE_GRACE",
      "customer_action_required": false,
      "recovery_state": "RETRY_SCHEDULED",
      "policy_version": "SUBPOL-2026.09",
      "audit_ref": "AUDIT-AGN013-BASE",
      "retry_budget": 3,
      "decision_time": "2026-09-14T09:00:00",
      "entitlement_authority": "PRODUCT_POLICY",
      "manual_override": false,
      "override_ref": "NONE",
      "override_owner": "NONE",
      "override_expires_at": "NONE",
      "duplicate_event_after_recovery": false,
      "cancellation_state": "NOT_CANCELED",
      "transfer_variant": "BASELINE",
      "transfer_recomputed": true,
      "baseline_decision_reused": false
    },
    {
      "case": "mutation_nonretryable_retry_conflict",
      "subscription_id": "SUB-M-001",
      "subscription_state": "PAST_DUE",
      "invoice_id": "INV-1001",
      "payment_state": "FAILED",
      "failure_class": "NON_RETRYABLE",
      "retry_eligible": true,
      "attempt_count": 1,
      "next_attempt_at": "2026-09-15T10:00:00",
      "retry_policy_ref": "RP-MONTHLY-3X",
      "dunning_policy_ref": "DP-MONTHLY-GRACE",
      "notification_state": "ACTION_REQUIRED_SENT",
      "grace_policy_ref": "GRACE-7D",
      "grace_started_at": "2026-09-14T08:00:00",
      "grace_expires_at": "2026-09-21T08:00:00",
      "entitlement_state": "LIMITED",
      "entitlement_reason": "PAYMENT_FAILED_IN_ACTIVE_GRACE",
      "customer_action_required": true,
      "recovery_state": "CUSTOMER_ACTION_REQUIRED",
      "policy_version": "SUBPOL-2026.09",
      "audit_ref": "AUDIT-AGN013-MUT1",
      "retry_budget": 3,
      "decision_time": "2026-09-14T09:00:00",
      "entitlement_authority": "PRODUCT_POLICY",
      "manual_override": false,
      "override_ref": "NONE",
      "override_owner": "NONE",
      "override_expires_at": "NONE",
      "duplicate_event_after_recovery": false,
      "cancellation_state": "NOT_CANCELED",
      "transfer_variant": "BASELINE",
      "transfer_recomputed": true,
      "baseline_decision_reused": false
    },
    {
      "case": "transfer_annual_no_grace_nonretryable",
      "subscription_id": "SUB-A-002",
      "subscription_state": "PAST_DUE",
      "invoice_id": "INV-2001",
      "payment_state": "FAILED",
      "failure_class": "NON_RETRYABLE",
      "retry_eligible": false,
      "attempt_count": 1,
      "next_attempt_at": "NONE",
      "retry_policy_ref": "RP-ANNUAL-HARD-DECLINE",
      "dunning_policy_ref": "DP-ANNUAL-ACTION",
      "notification_state": "ACTION_REQUIRED_SENT",
      "grace_policy_ref": "NO_GRACE",
      "grace_started_at": "NONE",
      "grace_expires_at": "NONE",
      "entitlement_state": "SUSPENDED",
      "entitlement_reason": "NO_GRACE_NONRETRYABLE_PAYMENT_FAILURE",
      "customer_action_required": true,
      "recovery_state": "CUSTOMER_ACTION_REQUIRED",
      "policy_version": "SUBPOL-ANNUAL-2026.09",
      "audit_ref": "AUDIT-AGN013-TRANSFER",
      "retry_budget": 1,
      "decision_time": "2026-09-14T09:00:00",
      "entitlement_authority": "PRODUCT_POLICY",
      "manual_override": false,
      "override_ref": "NONE",
      "override_owner": "NONE",
      "override_expires_at": "NONE",
      "duplicate_event_after_recovery": false,
      "cancellation_state": "PENDING_POLICY_CANCELLATION",
      "transfer_variant": "ANNUAL_NO_GRACE_HARD_DECLINE",
      "transfer_recomputed": true,
      "baseline_decision_reused": false
    }
  ]
}
