{
  "$id": "urn:statement",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Характеристики",
  "description": "Массив Характеристик.",
  "version": "0.4",
  "type": "array",
  "items": {
    "$ref": "#/$defs/Statement"
  },
  "$defs": {
    "Statement": {
      "title": "Характеристика",
      "description": "Заявление о физическом лице, субъекте или отношениях, сделанное в определенный момент времени.",
      "type": "object",
      "properties": {
        "statementId": {
          "title": "Идентификатор характеристики",
          "description": "Постоянный глобальный уникальный идентификатор для данной Характеристики. Длина ДОЛЖНА составлять 32–64 символа (включительно).",
          "type": "string",
          "minLength": 32,
          "maxLength": 64
        },
        "statementDate": {
          "title": "Дата характеристики",
          "description": "Дата, когда данная характеристика была задекларирована в источнике, в формате полной даты (YYYY-MM-DD) или даты и времени (например, YYYY-MM-DDTHH:MM:SSZ). См. стандарт IETF RFC3339 в разделе 5.6.",
          "type": "string",
          "anyOf": [
            {
              "format": "date"
            },
            {
              "format": "date-time"
            }
          ]
        },
        "annotations": {
          "title": "Примечания",
          "description": "Примечания о данной Характеристики или отдельных частях данной Характеристики.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/Annotation"
          }
        },
        "publicationDetails": {
          "title": "Сведения о публикации",
          "description": "Информация касательно публикации данной Характеристики.",
          "type": "object",
          "properties": {
            "publicationDate": {
              "title": "Дата публикации",
              "description": "Дата публикации данной характеристики, в формате полной даты (YYYY-MM-DD) или даты и времени (например, YYYY-MM-DDTHH:MM:SSZ). См. стандарт IETF RFC3339 в разделе 5.6.",
              "type": "string",
              "anyOf": [
                {
                  "format": "date"
                },
                {
                  "format": "date-time"
                }
              ]
            },
            "bodsVersion": {
              "title": "Версия СДБВ",
              "description": "Версия Стандарта данных о бенефициарном владении, которой соответствует данная Характеристика, выраженная в формате «старшая версия.младшая версия» (например, 0.2 или 1.0). В опубликованном наборе данных СДБВ все Характеристики ДОЛЖНЫ иметь одинаковый основной номер версии.",
              "type": "string",
              "pattern": "^(\\d+\\.)(\\d+)$"
            },
            "license": {
              "title": "URL лицензии",
              "description": "Ссылка на лицензию, которая применяется к данной Характеристике. РЕКОМЕНДУЕТСЯ использовать общепринятый URI лицензии. Издателям рекомендуется использовать лицензию, переданную в общественное достояние (Public Domain Dedication), или лицензию, соответствующую определениям о свободном доступе (Open Definition Conformant, http://opendefinition.org/licenses/).",
              "type": "string",
              "format": "uri"
            },
            "publisher": {
              "type": "object",
              "title": "Издатель",
              "description": "Сведения об организации или физическом лице, публикующем Характеристику.",
              "properties": {
                "name": {
                  "title": "Название",
                  "description": "Полное имя/название издателя.",
                  "type": "string"
                },
                "url": {
                  "title": "URL",
                  "description": "URL-адрес, по которому находятся сведения о полном наборе данных или об издателе.",
                  "type": "string",
                  "format": "uri"
                }
              },
              "anyOf": [
                {
                  "required": [
                    "name"
                  ]
                },
                {
                  "required": [
                    "url"
                  ]
                }
              ]
            }
          },
          "required": [
            "publicationDate",
            "bodsVersion",
            "publisher"
          ]
        },
        "source": {
          "title": "Источник",
          "description": "Источник информации, содержащейся в данной характеристике. В каждой характеристике СЛЕДУЕТ указывать источник информации.",
          "$ref": "urn:components#/$defs/Source"
        },
        "declaration": {
          "title": "Ссылка на декларацию",
          "description": "Идентификатор или ссылка для декларации в системе издателя. Если Характеристика является заявлением из конкретной декларации (сделанной в определенный момент времени `источником` касательно предмета декларации (`declarationSubject`)), это поле содержит сведения, идентифицирующие эту декларацию.",
          "type": "string"
        },
        "declarationSubject": {
          "title": "Предмет декларации",
          "description": "Значение свойства `recordId` для предмета сети бенефициарного владения (всегда являющегося субъектом или физическим лицом).",
          "type": "string"
        },
        "recordId": {
          "title": "Идентификатор записи",
          "description": "Уникальный идентификатор записи (в системе издателя), к которому относится данная Характеристика. (В записи зафиксирована информация о субъекте, физическом лице или отношениях внутри сети бенефициарного владения конкретного предмета декларации.)",
          "type": "string"
        },
        "recordType": {
          "title": "Тип записи",
          "description": "Тип записи (в системе издателя), к которому относится данная Характеристика: субъект, физическое лицо или отношения.",
          "type": "string",
          "enum": [
            "entity",
            "person",
            "relationship"
          ],
          "codelist": "recordType.csv",
          "openCodelist": false
        },
        "recordStatus": {
          "title": "Статус записи",
          "description": "Жизненный цикл записи (в системе издателя), к которому относится данная Характеристика, в соответствии со списком допустимых значений для свойства recordStatus.",
          "type": "string",
          "enum": [
            "new",
            "updated",
            "closed"
          ],
          "codelist": "recordStatus.csv",
          "openCodelist": false
        },
        "recordDetails": {
          "title": "Сведения о записи",
          "description": "Сведения о субъекте, физическом лице или отношениях, заявленные по состоянию на дату характеристики.",
          "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": "Примечание",
      "description": "Дополнительная информация о данных, содержащихся в этой Характеристике. Примечания могут касаться характеристики в целом, объекта или отдельного поля. В объект примечания могут быть включены пользовательские свойства для предоставления структурированных данных, когда это необходимо.",
      "type": "object",
      "properties": {
        "statementPointerTarget": {
          "title": "Указатель фрагмента характеристики",
          "description": "Путь к элементу json-документа согласно RFC6901 (https://tools.ietf.org/html/rfc6901), описывающий целевой фрагмент характеристики, к которой применяется это примечание, начиная с корня Характеристики. Пустая строка (\"\") указывает, что примечание применяется ко всей характеристике.",
          "type": "string"
        },
        "creationDate": {
          "title": "Дата создания",
          "description": "Дата создания данного примечания, в формате полной даты (YYYY-MM-DD) или даты и времени (например, YYYY-MM-DDTHH:MM:SSZ). См. стандарт IETF RFC3339 в разделе 5.6.",
          "type": "string",
          "anyOf": [
            {
              "format": "date"
            },
            {
              "format": "date-time"
            }
          ]
        },
        "createdBy": {
          "title": "Кем создано",
          "description": "Физическое лицо, организация или заявитель, создавшие данное примечание.",
          "type": "object",
          "properties": {
            "name": {
              "title": "Название",
              "description": "Полное имя/название физического лица, организации или заявителя, создавших данное примечание.",
              "type": "string"
            },
            "uri": {
              "title": "URI",
              "description": "Необязательный URI для идентификации физического лица, организации или заявителя, создавших данное примечание.",
              "type": "string",
              "format": "uri"
            }
          }
        },
        "motivation": {
          "title": "Мотивация",
          "description": "Причина создания данного примечания в соответствии со списком допустимых значений для свойства annotationMotivation.",
          "type": "string",
          "enum": [
            "commenting",
            "correcting",
            "identifying",
            "linking",
            "transformation"
          ],
          "codelist": "annotationMotivation.csv",
          "openCodelist": false
        },
        "description": {
          "title": "Описание",
          "description": "Описание в виде неструктурированного текста, содержащего дополнительную информацию о части данной Характеристики.",
          "type": "string"
        },
        "transformedContent": {
          "type": "string",
          "title": "Преобразованое содержимое",
          "description": "Представление целевого содержимого примечания после применения преобразования в поле `description`. Это поле ДОЛЖНО использоваться только в том случае, если свойство `motivation` имеет значение 'transformation'."
        },
        "url": {
          "title": "URL",
          "description": "Связанный ресурс, который дополняет данную Характеристику примечаниями, обеспечивает для нее контекст или расширяет ее. Содержимое ресурса или его связь с характеристикой МОГУТ описываться в поле `description`. Это поле является ОБЯЗАТЕЛЬНЫМ, если свойство `motivation` имеет значение '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": ""
              }
            }
          }
        }
      ]
    }
  }
}
