{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://observatorioia.org/api/schemas/codebook.schema.json",
  "title": "Codebook y metodología / Codebook and methodology",
  "description": "Schema de la respuesta pública completa; el campo data también se publica por separado. / Full public-response schema; the data field schema is also published separately.",
  "type": "object",
  "required": [
    "version",
    "lastUpdate",
    "count",
    "source",
    "license",
    "data"
  ],
  "additionalProperties": false,
  "properties": {
    "version": {
      "type": "string",
      "minLength": 1
    },
    "lastUpdate": {
      "type": "string",
      "format": "date-time"
    },
    "count": {
      "type": "integer",
      "minimum": 0
    },
    "source": {
      "const": "https://observatorioia.org"
    },
    "license": {
      "const": "CC BY 4.0"
    },
    "data": {
      "$ref": "#/definitions/_dataset"
    }
  },
  "definitions": {
    "bilingual": {
      "type": "object",
      "required": [
        "es",
        "en"
      ],
      "additionalProperties": false,
      "properties": {
        "es": {
          "type": "string",
          "minLength": 1
        },
        "en": {
          "type": "string",
          "minLength": 1
        }
      }
    },
    "campoDocumentado": {
      "type": "object",
      "required": [
        "campo",
        "descripcion"
      ],
      "additionalProperties": false,
      "properties": {
        "campo": {
          "type": "string",
          "minLength": 1
        },
        "descripcion": {
          "$ref": "#/definitions/bilingual"
        }
      }
    },
    "_dataset": {
      "title": "Codebook de la API pública",
      "description": "Contrato, vocabularios, reglas derivadas, datasets y límites de interpretación.",
      "type": "object",
      "required": [
        "schemaVersion",
        "fechaCorte",
        "alcance",
        "contrato",
        "politicaPublicacion",
        "reglaAdopcionVerificada",
        "vocabularios",
        "datasets",
        "procedencia",
        "licencia",
        "fueraDeAlcance"
      ],
      "additionalProperties": false,
      "properties": {
        "schemaVersion": {
          "const": 3
        },
        "fechaCorte": {
          "type": "string",
          "format": "date"
        },
        "alcance": {
          "$ref": "#/definitions/bilingual"
        },
        "contrato": {
          "type": "object",
          "required": [
            "envoltura",
            "bilinguismo",
            "noDeterminado",
            "noAplica",
            "trazabilidad"
          ],
          "additionalProperties": false,
          "properties": {
            "envoltura": {
              "type": "array",
              "minItems": 6,
              "items": {
                "$ref": "#/definitions/campoDocumentado"
              }
            },
            "bilinguismo": {
              "$ref": "#/definitions/bilingual"
            },
            "noDeterminado": {
              "$ref": "#/definitions/bilingual"
            },
            "noAplica": {
              "$ref": "#/definitions/bilingual"
            },
            "trazabilidad": {
              "$ref": "#/definitions/bilingual"
            }
          }
        },
        "politicaPublicacion": {
          "type": "object",
          "required": [
            "release",
            "rolling",
            "datasetsRodantes"
          ],
          "additionalProperties": false,
          "properties": {
            "release": {
              "$ref": "#/definitions/bilingual"
            },
            "rolling": {
              "$ref": "#/definitions/bilingual"
            },
            "datasetsRodantes": {
              "type": "array",
              "minItems": 1,
              "uniqueItems": true,
              "items": {
                "type": "string",
                "pattern": "^[a-z0-9-]+$"
              }
            }
          }
        },
        "reglaAdopcionVerificada": {
          "type": "object",
          "required": [
            "descripcion",
            "condiciones"
          ],
          "additionalProperties": false,
          "properties": {
            "descripcion": {
              "$ref": "#/definitions/bilingual"
            },
            "condiciones": {
              "type": "array",
              "minItems": 1,
              "items": {
                "type": "object",
                "required": [
                  "campo",
                  "operador",
                  "valores"
                ],
                "additionalProperties": false,
                "properties": {
                  "campo": {
                    "type": "string",
                    "minLength": 1
                  },
                  "operador": {
                    "enum": [
                      "igual",
                      "uno-de",
                      "sin-errores"
                    ]
                  },
                  "valores": {
                    "type": "array",
                    "items": {
                      "type": [
                        "string",
                        "number",
                        "boolean",
                        "null"
                      ]
                    },
                    "uniqueItems": true
                  }
                }
              }
            }
          }
        },
        "vocabularios": {
          "type": "array",
          "minItems": 1,
          "items": {
            "type": "object",
            "required": [
              "id",
              "campo",
              "valores"
            ],
            "additionalProperties": false,
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[A-Za-z][A-Za-z0-9]+$"
              },
              "campo": {
                "type": "string",
                "minLength": 1
              },
              "valores": {
                "type": "array",
                "minItems": 1,
                "items": {
                  "type": "object",
                  "required": [
                    "valor",
                    "etiqueta"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "valor": {
                      "type": "string",
                      "minLength": 1
                    },
                    "etiqueta": {
                      "$ref": "#/definitions/bilingual"
                    }
                  }
                }
              }
            }
          }
        },
        "datasets": {
          "type": "array",
          "minItems": 1,
          "items": {
            "type": "object",
            "required": [
              "id",
              "endpoint",
              "schemaUrl",
              "unidadConteo",
              "camposClave"
            ],
            "additionalProperties": false,
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z0-9-]+$"
              },
              "endpoint": {
                "type": "string",
                "pattern": "^/api/[a-z0-9-]+\\.json$"
              },
              "schemaUrl": {
                "type": "string",
                "pattern": "^/api/schemas/[a-z0-9-]+\\.schema\\.json$"
              },
              "publicationMode": {
                "enum": [
                  "release",
                  "rolling"
                ]
              },
              "unidadConteo": {
                "$ref": "#/definitions/bilingual"
              },
              "camposClave": {
                "type": "array",
                "minItems": 1,
                "uniqueItems": true,
                "items": {
                  "type": "string",
                  "minLength": 1
                }
              },
              "notaInterpretacion": {
                "$ref": "#/definitions/bilingual"
              },
              "urlRegistro": {
                "type": "object",
                "required": [
                  "es",
                  "en"
                ],
                "additionalProperties": false,
                "properties": {
                  "es": {
                    "type": "string",
                    "pattern": "^/es/"
                  },
                  "en": {
                    "type": "string",
                    "pattern": "^/en/"
                  }
                }
              }
            }
          }
        },
        "procedencia": {
          "type": "object",
          "required": [
            "brechas",
            "corpusCostaRicaRecursoIds",
            "corpusCostaRicaEndpoints"
          ],
          "additionalProperties": false,
          "properties": {
            "brechas": {
              "$ref": "#/definitions/bilingual"
            },
            "corpusCostaRicaRecursoIds": {
              "type": "array",
              "minItems": 1,
              "uniqueItems": true,
              "items": {
                "type": "string",
                "pattern": "^[a-z0-9-]+$"
              }
            },
            "corpusCostaRicaEndpoints": {
              "type": "array",
              "minItems": 1,
              "uniqueItems": true,
              "items": {
                "type": "string",
                "pattern": "^/api/[a-z0-9-]+\\.json$"
              }
            }
          }
        },
        "licencia": {
          "type": "object",
          "required": [
            "compilacion",
            "url",
            "nota"
          ],
          "additionalProperties": false,
          "properties": {
            "compilacion": {
              "const": "CC BY 4.0"
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "nota": {
              "$ref": "#/definitions/bilingual"
            }
          }
        },
        "fueraDeAlcance": {
          "$ref": "#/definitions/bilingual"
        }
      }
    }
  },
  "x-observatorio-data-schema": "/api/schemas/codebook-data.schema.json"
}