{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://vyloca.com/partner-capability-manifest.schema.json",
  "title": "Vyloca licensed-provider certification manifest",
  "description": "A non-secret evidence manifest used to decide whether a licensed provider adapter may be activated. It must contain references only, never credentials or customer data.",
  "type": "object",
  "additionalProperties": false,
  "required": ["providerId", "licensedEntityName", "stage", "approvedFundingModes", "evidence"],
  "properties": {
    "providerId": { "type": "string", "minLength": 3, "maxLength": 100 },
    "licensedEntityName": { "type": "string", "minLength": 3, "maxLength": 200 },
    "stage": {
      "enum": ["due_diligence", "technical_validation", "compliance_review", "production_approved", "suspended"]
    },
    "approvedFundingModes": {
      "type": "array",
      "uniqueItems": true,
      "items": { "enum": ["just_in_time", "partner_balance"] }
    },
    "approvedAt": { "type": "string", "format": "date-time" },
    "validUntil": { "type": "string", "format": "date-time" },
    "evidence": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "licensed_entity_authority": { "$ref": "#/$defs/evidenceRecord" },
        "kyc_aml_controls": { "$ref": "#/$defs/evidenceRecord" },
        "international_funding": { "$ref": "#/$defs/evidenceRecord" },
        "fx_authority": { "$ref": "#/$defs/evidenceRecord" },
        "account_resolution": { "$ref": "#/$defs/evidenceRecord" },
        "nip_payout": { "$ref": "#/$defs/evidenceRecord" },
        "signed_webhooks": { "$ref": "#/$defs/evidenceRecord" },
        "reconciliation": { "$ref": "#/$defs/evidenceRecord" },
        "reversals_disputes": { "$ref": "#/$defs/evidenceRecord" },
        "incident_support": { "$ref": "#/$defs/evidenceRecord" },
        "data_protection": { "$ref": "#/$defs/evidenceRecord" },
        "stored_value_authority": { "$ref": "#/$defs/evidenceRecord" },
        "fund_safeguarding": { "$ref": "#/$defs/evidenceRecord" },
        "authoritative_balance_ledger": { "$ref": "#/$defs/evidenceRecord" },
        "top_up_refund_redemption": { "$ref": "#/$defs/evidenceRecord" }
      }
    }
  },
  "allOf": [
    {
      "if": { "properties": { "stage": { "const": "production_approved" } } },
      "then": {
        "required": ["approvedAt", "validUntil"],
        "properties": {
          "approvedFundingModes": { "minItems": 1 },
          "evidence": {
            "required": [
              "licensed_entity_authority",
              "kyc_aml_controls",
              "international_funding",
              "fx_authority",
              "account_resolution",
              "nip_payout",
              "signed_webhooks",
              "reconciliation",
              "reversals_disputes",
              "incident_support",
              "data_protection"
            ]
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "approvedFundingModes": { "contains": { "const": "partner_balance" } }
        }
      },
      "then": {
        "properties": {
          "evidence": {
            "required": [
              "stored_value_authority",
              "fund_safeguarding",
              "authoritative_balance_ledger",
              "top_up_refund_redemption"
            ]
          }
        }
      }
    }
  ],
  "$defs": {
    "evidenceRecord": {
      "type": "object",
      "additionalProperties": false,
      "required": ["status", "reference"],
      "properties": {
        "status": { "enum": ["pending", "verified", "rejected", "expired"] },
        "reference": { "type": "string", "minLength": 3, "maxLength": 200 },
        "reviewedAt": { "type": "string", "format": "date-time" },
        "expiresAt": { "type": "string", "format": "date-time" }
      }
    }
  }
}
