{
  "$id": "urn:statement",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Enunciados",
  "description": "Un arreglo de datos de enunciados.",
  "version": "0.4",
  "type": "array",
  "items": {
    "$ref": "#/$defs/Statement"
  },
  "$defs": {
    "Statement": {
      "title": "Enunciado",
      "description": "Una afirmación sobre una persona, entidad o relación, realizada en un momento particular.",
      "type": "object",
      "properties": {
        "statementId": {
          "title": "Identificador de enunciado",
          "description": "Un identificador único global persistente para este enunciado. La longitud DEBE ser de entre 32 y 64 caracteres (inclusive).",
          "type": "string",
          "minLength": 32,
          "maxLength": 64
        },
        "statementDate": {
          "title": "Fecha del enunciado",
          "description": "La fecha en la que este enunciado fue emitido por la fuente, en formato de fecha completa (AAAA-MM-DD) o fecha-hora (p. ej., AAAA-MM-DDTHH:MM:SSZ). Consulte el estándar IETF RFC3339, sección 5.6.",
          "type": "string",
          "anyOf": [
            {
              "format": "date"
            },
            {
              "format": "date-time"
            }
          ]
        },
        "annotations": {
          "title": "Notas",
          "description": "Notas sobre este enunciado o partes de este enunciado",
          "type": "array",
          "items": {
            "$ref": "#/$defs/Annotation"
          }
        },
        "publicationDetails": {
          "title": "Detalles de la publicación",
          "description": "Información relacionada con la publicación de este enunciado.",
          "type": "object",
          "properties": {
            "publicationDate": {
              "title": "Fecha de publicación",
              "description": "La fecha en la que este enunciado fue publicado, en formato de fecha completa (AAAA-MM-DD) o fecha-hora (p. ej., AAAA-MM-DDTHH:MM:SSZ). Consulte el estándar IETF RFC3339, sección 5.6.",
              "type": "string",
              "anyOf": [
                {
                  "format": "date"
                },
                {
                  "format": "date-time"
                }
              ]
            },
            "bodsVersion": {
              "title": "Versión del BODS",
              "description": "La versión del Estándar de datos sobre beneficiarios finales con la que este enunciado guarda conformidad, expresada como major.minor (p. ej., 0.2 o 1.0). En un conjunto de datos del BODS publicado, todos los enunciados DEBEN tener el mismo número de versión principal.",
              "type": "string",
              "pattern": "^(\\d+\\.)(\\d+)$"
            },
            "license": {
              "title": "URL de la licencia",
              "description": "Un enlace a la licencia que se aplica a este enunciado. DEBERÍA usarse el URI canónico de la licencia. Se recomienda a los publicadores que usen una licencia de inscripción de dominio público o una que cumpla con Open Definition (http://opendefinition.org/licenses/).",
              "type": "string",
              "format": "uri"
            },
            "publisher": {
              "type": "object",
              "title": "Publicador",
              "description": "Detalles de la organización o persona que publica un enunciado.",
              "properties": {
                "name": {
                  "title": "Nombre",
                  "description": "El nombre del publicador.",
                  "type": "string"
                },
                "url": {
                  "title": "URL",
                  "description": "La URL donde pueden encontrarse detalles del conjunto de datos completo o del publicador.",
                  "type": "string",
                  "format": "uri"
                }
              },
              "anyOf": [
                {
                  "required": [
                    "name"
                  ]
                },
                {
                  "required": [
                    "url"
                  ]
                }
              ]
            }
          },
          "required": [
            "publicationDate",
            "bodsVersion",
            "publisher"
          ]
        },
        "source": {
          "title": "Fuente",
          "description": "La fuente de información de este enunciado. Cada enunciado DEBERÍA contener información fuente.",
          "$ref": "urn:components#/$defs/Source"
        },
        "declaration": {
          "title": "Referencia de la declaración",
          "description": "Un identificador o referencia para una declaración dentro del sistema del publicador. Cuando un enunciado es una afirmación de una declaración particular (realizada en un momento determinado por una `source` sobre un `declarationSubject`), este campo identifica la declaración.",
          "type": "string"
        },
        "declarationSubject": {
          "title": "Sujeto de la declaración",
          "description": "Un valor `recordId` para el sujeto de una red de titularidad real (siempre una entidad o persona).",
          "type": "string"
        },
        "recordId": {
          "title": "Identificador de registros",
          "description": "Un identificador único para el registro (dentro del sistema del publicador) relacionado con este enunciado. (Un registro captura información sobre una entidad, persona física o relación dentro de la red de titularidad real del sujeto de una declaración particular).",
          "type": "string"
        },
        "recordType": {
          "title": "Tipo de registro",
          "description": "El tipo de registro (dentro del sistema del publicador) relacionado con este enunciado: entidad, persona o relación.",
          "type": "string",
          "enum": [
            "entity",
            "person",
            "relationship"
          ],
          "codelist": "recordType.csv",
          "openCodelist": false
        },
        "recordStatus": {
          "title": "Estado del registro",
          "description": "El estado del ciclo de vida del registro (dentro del sistema del publicador) relacionado con este enunciado, usando la lista de códigos recordStatus.",
          "type": "string",
          "enum": [
            "new",
            "updated",
            "closed"
          ],
          "codelist": "recordStatus.csv",
          "openCodelist": false
        },
        "recordDetails": {
          "title": "Detalles del registro",
          "description": "Los detalles de la entidad, persona o relación según lo declarado en la fecha del enunciado.",
          "type": "object"
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "recordType": {
                "const": "entity"
              }
            }
          },
          "then": {
            "properties": {
              "recordDetails": {
                "$ref": "urn:entity"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "recordType": {
                "const": "person"
              }
            }
          },
          "then": {
            "properties": {
              "recordDetails": {
                "$ref": "urn:person"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "recordType": {
                "const": "relationship"
              }
            }
          },
          "then": {
            "properties": {
              "recordDetails": {
                "$ref": "urn:relationship"
              }
            }
          }
        }
      ],
      "required": [
        "statementId",
        "declarationSubject",
        "recordId",
        "recordType",
        "recordDetails",
        "statementDate"
      ]
    },
    "Annotation": {
      "title": "Nota",
      "description": "Información adicional sobre los datos incluidos en este enunciado. Las notas pueden aplicarse a un enunciado completo, un objeto o un solo campo. Pueden incluirse propiedades personalizadas dentro del objeto Nota para brindar datos estructurados donde sea necesario.",
      "type": "object",
      "properties": {
        "statementPointerTarget": {
          "title": "Indicador de fragmento de enunciado",
          "description": "Un indicador JSON RFC6901 (https://tools.ietf.org/html/rfc6901) que describe el fragmento objetivo del enunciado al que se aplica esta nota, a partir de la raíz del enunciado. Una cadena de caracteres vacía (\"\") indica que la nota se aplica a todo el enunciado.",
          "type": "string"
        },
        "creationDate": {
          "title": "Fecha de creación",
          "description": "La fecha en la que se creó esta nota, en formato de fecha completa (YYYY-MM-DD) o fecha-hora (p. ej., YYYY-MM-DDTHH:MM:SSZ). Consulte el estándar IETF RFC3339, sección 5.6.",
          "type": "string",
          "anyOf": [
            {
              "format": "date"
            },
            {
              "format": "date-time"
            }
          ]
        },
        "createdBy": {
          "title": "Autor de la nota",
          "description": "La persona, organización o agente que creó esta nota.",
          "type": "object",
          "properties": {
            "name": {
              "title": "Nombre",
              "description": "El nombre de la persona, organización o agente que creó esta nota.",
              "type": "string"
            },
            "uri": {
              "title": "URI",
              "description": "Un URI opcional para identificar a la persona, organización o agente que creó esta nota.",
              "type": "string",
              "format": "uri"
            }
          }
        },
        "motivation": {
          "title": "Motivo",
          "description": "El motivo de esta nota, usando la lista de códigos annotationMotivation.",
          "type": "string",
          "enum": [
            "commenting",
            "correcting",
            "identifying",
            "linking",
            "transformation"
          ],
          "codelist": "annotationMotivation.csv",
          "openCodelist": false
        },
        "description": {
          "title": "Descripción",
          "description": "Una descripción de texto libre que brinda información adicional sobre una parte de este enunciado.",
          "type": "string"
        },
        "transformedContent": {
          "type": "string",
          "title": "Contenido transformado",
          "description": "Una representación del objetivo de la nota después de aplicarse la transformación en el campo `description`. Este campo solo DEBE usarse cuando la `motivation` es 'transformation'."
        },
        "url": {
          "title": "URL",
          "description": "Un recurso enlazado que ofrece notas o contexto para este enunciado, o lo mejora. El contenido del recurso, o la relación con el enunciado, PUEDE describirse en el campo `description`. Este campo es REQUERIDO si el valor de `motivation` es 'linking'.",
          "type": "string",
          "format": "uri"
        }
      },
      "required": [
        "motivation",
        "statementPointerTarget"
      ],
      "allOf": [
        {
          "if": {
            "properties": {
              "motivation": {
                "const": "linking"
              }
            }
          },
          "then": {
            "required": [
              "url"
            ]
          }
        },
        {
          "if": {
            "not": {
              "properties": {
                "motivation": {
                  "const": "transformation"
                }
              }
            }
          },
          "then": {
            "properties": {
              "transformedContent": {
                "const": ""
              }
            }
          }
        }
      ]
    }
  }
}
