{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://credentials.anip.bj/schemas/civil-status/v1/birth-certificate.json",
  "title": "ANIP Birth Certificate Credential Schema v1",
  "description": "Schéma minimal des données vérifiables d’un acte de naissance ANIP destiné à un W3C VC 2.0 JWT.",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "docType",
    "docSubType",
    "docNo",
    "child",
    "birthDate",
    "birthPlace",
    "birthCountryCode",
    "father",
    "mother",
    "declDate",
    "issueDate",
    "validFrom",
    "validUntil",
    "issuePlace",
    "registrar"
  ],
  "properties": {
    "docType": {
      "type": "string",
      "const": "ACTE_DE_NAISSANCE"
    },
    "docSubType": {
      "type": "string",
      "enum": [
        "COPIE_INTEGRALE",
        "NORMAL",
        "RECONSTITUTION",
        "TRANSCRIPTION",
        "COPIE_INTEGRALE_RECONSTITUTION",
        "COPIE_INTEGRALE_TRANSCRIPTION"
      ]
    },
    "docNo": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "child": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "npi",
        "name",
        "firstNames",
        "sex"
      ],
      "properties": {
        "npi": {
          "type": "string",
          "maxLength": 50,
          "description": "NPI de l’enfant. Peut être vide si non disponible."
        },
        "name": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        },
        "firstNames": {
          "type": "string",
          "minLength": 1,
          "maxLength": 150
        },
        "sex": {
          "type": "string",
          "enum": [
            "M",
            "F"
          ]
        }
      }
    },
    "birthDate": {
      "type": "string",
      "format": "date"
    },
    "birthPlace": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "birthCountryCode": {
      "type": "string",
      "pattern": "^[A-Z]{2}$",
      "description": "Code pays ISO 3166-1 alpha-2. Exemple : BJ."
    },
    "father": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "name",
        "firstNames"
      ],
      "properties": {
        "npi": {
          "type": "string",
          "maxLength": 50,
          "description": "NPI du père. Peut être vide si non disponible."
        },
        "name": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        },
        "firstNames": {
          "type": "string",
          "minLength": 1,
          "maxLength": 150
        }
      }
    },
    "mother": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "name",
        "firstNames"
      ],
      "properties": {
        "npi": {
          "type": "string",
          "maxLength": 50,
          "description": "NPI de la mère. Peut être vide si non disponible."
        },
        "name": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        },
        "firstNames": {
          "type": "string",
          "minLength": 1,
          "maxLength": 150
        }
      }
    },
    "declDate": {
      "type": "string",
      "format": "date",
      "description": "Date de déclaration de la naissance."
    },
    "issueDate": {
      "type": "string",
      "format": "date",
      "description": "Date de délivrance de l’acte."
    },
    "issuePlace": {
      "type": "string",
      "minLength": 1,
      "maxLength": 150
    },
    "registrar": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "validFrom": {
      "type": "string",
      "description": "validFrom fourni par l'utilisateur, sans règle de calcul de durée côté issuer."
    },
    "validUntil": {
      "type": "string",
      "description": "validUntil fourni par l'utilisateur, sans règle de calcul de durée côté issuer."
    }
  }
}
