{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://docs.elimi.africa/contracts/events/payment.completed.v1.json",
  "title": "payment.completed data",
  "description": "data payload for payment.completed. Emitted by Orchestrator after a provider webhook confirms success. Business services match referenceType + referenceId; Orchestrator never prices.",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "paymentId",
    "referenceType",
    "referenceId",
    "amount",
    "paidAt"
  ],
  "properties": {
    "paymentId": {
      "type": "string",
      "description": "Orchestrator Payment.id"
    },
    "referenceType": {
      "type": "string",
      "examples": ["cap_application", "lms_enrollment"]
    },
    "referenceId": {
      "type": "string",
      "description": "Business-side id (e.g. CAP application id)"
    },
    "amount": {
      "type": "integer",
      "description": "Minor currency units (kobo) — never a float"
    },
    "currency": {
      "type": "string",
      "minLength": 3,
      "maxLength": 3
    },
    "paidAt": {
      "type": "string",
      "format": "date-time"
    },
    "userId": {
      "type": "string"
    },
    "provider": {
      "type": "string",
      "description": "Payment adapter key, e.g. paystack. Additive — consumers must tolerate omission.",
      "examples": ["paystack", "mock"]
    }
  }
}
