{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:certarail:schema:event:certarail.checkout.lifecycle.v1",
  "title": "CertaRail checkout lifecycle event v1",
  "description": "PII-minimized lifecycle evidence for the sandbox Crypto Checkout. This event is not proof of a real payment, venue execution, custody balance, or blockchain transfer.",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "event_id",
    "event_type",
    "event_version",
    "tenant_id",
    "occurred_at",
    "aggregate_id",
    "correlation_id",
    "sequence",
    "payload",
    "safety"
  ],
  "properties": {
    "event_id": {
      "type": "string",
      "pattern": "^checkout_evt_[A-Za-z0-9._:/-]{1,112}$"
    },
    "event_type": {
      "enum": [
        "checkout.session.created",
        "checkout.session.expired",
        "deal.action_required",
        "deal.review",
        "deal.confirmed",
        "payment.pending",
        "payment.confirmed",
        "payment.failed",
        "execution.submitted",
        "execution.unknown",
        "execution.filled",
        "delivery.pending",
        "delivery.confirmed",
        "deal.completed",
        "deal.failed",
        "refund.pending",
        "refund.completed"
      ]
    },
    "event_version": { "const": 1 },
    "tenant_id": { "type": "string", "minLength": 1, "maxLength": 128 },
    "occurred_at": { "type": "string", "format": "date-time" },
    "aggregate_id": {
      "type": "string",
      "pattern": "^(checkout_|deal_)[A-Za-z0-9._:/-]{1,120}$"
    },
    "correlation_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128
    },
    "sequence": { "type": "integer", "minimum": 1 },
    "payload": { "$ref": "#/$defs/safePayload" },
    "safety": { "$ref": "#/$defs/safety" }
  },
  "$defs": {
    "axes": {
      "type": "object",
      "additionalProperties": false,
      "required": ["admission", "quote", "payment", "execution", "delivery", "ledger"],
      "properties": {
        "admission": { "enum": ["NOT_STARTED", "EVALUATING", "ALLOW", "DENY", "REVIEW", "ACTION_REQUIRED"] },
        "quote": { "enum": ["NOT_REQUESTED", "REQUESTING", "AVAILABLE", "EXPIRED", "REJECTED", "SUPERSEDED"] },
        "payment": { "enum": ["NOT_STARTED", "RESERVING", "RESERVED", "PENDING", "CONFIRMED", "FAILED", "RELEASE_PENDING", "RELEASED", "REFUND_PENDING", "REFUNDED", "UNKNOWN"] },
        "execution": { "enum": ["NOT_STARTED", "SUBMITTING", "UNKNOWN", "ACKNOWLEDGED", "PARTIALLY_FILLED", "FILLED", "CANCEL_PENDING", "CANCELLED", "REJECTED", "FAILED"] },
        "delivery": { "enum": ["NOT_STARTED", "PENDING", "PROCESSING", "CONFIRMED", "FAILED", "UNKNOWN"] },
        "ledger": { "enum": ["NOT_STARTED", "RESERVED", "POSTED", "REVERSED", "RECONCILIATION_REQUIRED"] }
      }
    },
    "safePayload": {
      "type": "object",
      "additionalProperties": false,
      "required": ["checkout_session_reference", "overall_status", "axes"],
      "properties": {
        "checkout_session_reference": {
          "type": "string",
          "pattern": "^checkout_[A-Za-z0-9._:/-]{1,120}$"
        },
        "deal_reference": {
          "type": "string",
          "pattern": "^deal_[A-Za-z0-9._:/-]{1,120}$"
        },
        "overall_status": {
          "enum": ["DRAFT", "CHECKING", "ACTION_REQUIRED", "READY_TO_CONFIRM", "QUOTE_EXPIRED", "PROCESSING_PAYMENT", "EXECUTING", "DELIVERING", "COMPLETED", "REVIEW", "FAILED", "CANCELLED", "REFUNDING"]
        },
        "axes": { "$ref": "#/$defs/axes" },
        "action": {
          "enum": ["RETRY", "REFRESH_QUOTE", "REDUCE_AMOUNT", "COMPLETE_VERIFICATION", "CHANGE_PAYMENT_METHOD", "CONTACT_SUPPORT", "RETURN_TO_PARTNER", "WAIT", "NONE"]
        },
        "receipt_reference": {
          "type": "string",
          "pattern": "^receipt_[A-Za-z0-9._:/-]{1,118}$"
        }
      }
    },
    "safety": {
      "type": "object",
      "additionalProperties": false,
      "required": ["environment", "external_calls", "monetary", "production_enforceable", "execution_mode"],
      "properties": {
        "environment": { "const": "SANDBOX" },
        "external_calls": { "const": 0 },
        "monetary": { "const": false },
        "production_enforceable": { "const": false },
        "execution_mode": { "const": "SANDBOX" }
      }
    }
  }
}
