ЕСОЗ - публічна документація

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Current »

Мета

На цій сторінці описано правила перевірки персональних даних (як звичайної особи, так і особи, яка має довірену особу) у рамках процесів реєстрації через інформаційну систему особи (PIS).

Звичайна персона

Ключові положення для набору даних звичайної персони:

  • Схема не дозволяє вказувати блок “confidant_person”

  • Присутня необхідність для перевірки віку персони, чи більше за конфігураційний параметр no_self_registration_age

  • Автентифікаційні методи персони мають містити тільки записи з типом type = 'OTP'

Цей набір правил перевірки зараз використовується наступними WS:

Перевірки

Перевірити схему

Перевірити дані персони у відповідності до схеми JSON:

 Regular person registration request schema
{
  "$schema": "http://json-schema.org/person_request/schema#",
  "definitions": {
    "phone": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "description": "Dictionary: PHONE_TYPE"
        },
        "number": {
          "type": "string",
          "pattern": "^\\+38[0-9]{10}$"
        }
      },
      "required": [
        "type",
        "number"
      ],
      "additionalProperties": false
    },
    "name": {
      "type": "string",
      "pattern": "^(?!.*[ЫЪЭЁыъэё@%&$^#])[a-zA-ZА-ЯҐЇІЄа-яґїіє0-9№\\\"!\\^\\*)\\]\\[(._-].*$"
    },
    "person_name": {
      "type": "string",
      "pattern": "^(?!.*[ЫЪЭЁыъэё@%&$^#])[А-ЯҐЇІЄа-яґїіє\\'\\-]+(\\s(?!.*[ЫЪЭЁыъэё@%&$^#])[А-ЯҐЇІЄа-яґїіє\\'\\-]+)*$",
      "minLength": 1,
      "maxLength": 255
    },
    "unzr": {
      "type": "string",
      "pattern": "^[0-9]{8}-[0-9]{5}$"
    },
    "tax_id": {
      "type": "string",
      "pattern": "^[0-9]{10}$",
      "minLength": 10,
      "maxLength": 255
    },
    "no_tax_id": {
      "type": "boolean",
      "description": "Status person refused tax_id"
    },
    "gender": {
      "type": "string",
      "description": "Dictionary: GENDER",
      "maxLength": 255
    },
    "address": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "description": "Dictionary: ADDRESS_TYPE"
        },
        "country": {
          "type": "string"
        },
        "area": {
          "$ref": "#/definitions/name"
        },
        "region": {
          "$ref": "#/definitions/name"
        },
        "settlement": {
          "$ref": "#/definitions/name"
        },
        "settlement_type": {
          "type": "string",
          "description": "settlement type Dictionary: SETTLEMENT_TYPE"
        },
        "settlement_id": {
          "type": "string",
          "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
        },
        "street_type": {
          "type": "string",
          "description": "street type Dictionary: STREET_TYPE"
        },
        "street": {
          "$ref": "#/definitions/name"
        },
        "building": {
          "type": "string",
          "pattern": "^[1-9]((?![ЫЪЭЁыъэё])()([А-ЯҐЇІЄа-яґїіє \\/\\'\\-0-9])){0,20}$"
        },
        "apartment": {
          "type": "string"
        },
        "zip": {
          "type": "string",
          "pattern": "^[0-9]{5}$"
        },
        "inserted_by": {
          "type": "string"
        },
        "updated_by": {
          "type": "string"
        },
        "inserted_at": {
          "type": "string"
        },
        "updated_at": {
          "type": "string"
        }
      },
      "required": [
        "type",
        "country",
        "area",
        "settlement",
        "settlement_type",
        "settlement_id",
        "inserted_by",
        "updated_by"
      ],
      "additionalProperties": false
    },
    "series_number_document": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "PASSPORT",
            "COMPLEMENTARY_PROTECTION_CERTIFICATE",
            "REFUGEE_CERTIFICATE",
            "TEMPORARY_CERTIFICATE"
          ],
          "description": "Dictionary: DOCUMENT_TYPE"
        },
        "number": {
          "type": "string",
          "pattern": "^((?![ЫЪЭЁ])([А-ЯҐЇІЄ])){2}[0-9]{6}$"
        },
        "issued_by": {
          "type": "string",
          "minLength": 1
        },
        "issued_at": {
          "type": "string",
          "format": "date"
        }
      },
      "required": [
        "type",
        "number"
      ],
      "additionalProperties": false
    },
    "number_document": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "BIRTH_CERTIFICATE",
            "TEMPORARY_PASSPORT"
          ],
          "description": "Dictionary: DOCUMENT_TYPE"
        },
        "number": {
          "type": "string",
          "pattern": "^(?![ЫЪЭЁыъэё@%&$^#`~:,.*|}{?!])[A-ZА-ЯҐЇІЄ0-9№\\/()-]+$",
          "minLength": 1,
          "maxLength": 255
        },
        "issued_by": {
          "type": "string",
          "minLength": 1
        },
        "issued_at": {
          "type": "string",
          "format": "date"
        }
      },
      "required": [
        "type",
        "number"
      ],
      "additionalProperties": false
    },
    "id_card": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "NATIONAL_ID"
          ],
          "description": "Dictionary: DOCUMENT_TYPE"
        },
        "number": {
          "type": "string",
          "pattern": "^[0-9]{9}$"
        },
        "issued_by": {
          "type": "string",
          "minLength": 1
        },
        "issued_at": {
          "type": "string",
          "format": "date"
        }
      },
      "required": [
        "type",
        "number"
      ],
      "additionalProperties": false
    },
    "authentication_method": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "OTP"
          ],
          "description": "Dictionary: AUTHENTICATION_METHOD"
        },
        "phone_number": {
          "type": "string",
          "pattern": "^\\+38[0-9]{10}$"
        },
        "alias": {
          "type": "string",
          "minLength": 1,
          "maxLength": 255
        }
      },
      "required": [
        "type"
      ],
      "additionalProperties": false
    }
  },
  "type": "object",
  "properties": {
    "person": {
      "type": "object",
      "properties": {
        "first_name": {
          "type": "string"
        },
        "last_name": {
          "type": "string"
        },
        "second_name": {
          "type": "string"
        },
        "birth_date": {
          "type": "string"
        },
        "birth_country": {
          "type": "string"
        },
        "birth_settlement": {
          "type": "string"
        },
        "gender": {
          "enum": [
            "MALE",
            "FEMALE"
          ]
        },
        "email": {
          "type": "string"
        },
        "no_tax_id": {
          "type": "boolean"
        },
        "tax_id": {
          "type": "string"
        },
        "secret": {
          "type": "string"
        },
        "documents": {
          "type": "array"
        },
        "addresses": {
          "type": "array"
        },
        "phones": {
          "type": "array"
        },
        "unzr": {
          "type": "string"
        },
        "emergency_contact": {
          "type": "object",
          "properties": {
            "first_name": {
              "type": "string"
            },
            "last_name": {
              "type": "string"
            },
            "second_name": {
              "type": "string"
            },
            "phones": {
              "type": "array"
            }
          },
          "required": [
            "first_name",
            "last_name",
            "phones"
          ]
        },
        "preferred_way_communication": {
          "enum": [
            "email",
            "phone"
          ]
        },
        "authentication_methods": {
          "type": "array"
        }
      },
      "required": [
        "first_name",
        "last_name",
        "birth_date",
        "birth_country",
        "birth_settlement",
        "gender",
        "no_tax_id",
        "tax_id",
        "secret",
        "documents",
        "addresses",
        "emergency_contact",
        "authentication_methods"
      ]
    },
    "patient_signed": {
      "type": "boolean"
    },
    "process_disclosure_data_consent": {
      "type": "boolean"
    }
  },
  "required": [
    "person",
    "patient_signed",
    "process_disclosure_data_consent"
  ]
}
  • якщо значення поля не відповідає схемі - повернути 422 з відповідною полю помилкою

  • якщо в запиті є додаткові поля - повернути 422 ('schema does not allow additional properties')

  • якщо необхідний параметр відсутній у запиті - повернути 422 ('required property %{property} was not present')

  • якщо в запиті немає необхідної кількості параметрів - повернути 422 ('expected a minimum of %{min} items but got %{actual}')

Перевірити персону

Перевірити документи персони

  • Перевірити, що тип вказаних документів пацієнтів вказано в конфігураційному параметрі PIS_PERSON_REGISTRATION_DOCUMENT_TYPES, що містить значення з довідника DOCUMENT_TYPE

    • в разі помилки - повернути 422 ('Submitted document type is not allowed')

  • Перевірити документи, що підтверджують дієздатність особи

    • в разі, якщо вік персони більше значення глобального параметру no_self_registration_age, але менше ніж значення глобального параметру person_full_legal_capacity_age:

      • Перевірити, що вказаний хоча б один тип документів з конфігураційного параметру PIS_PERSON_REGISTRATION_DOCUMENT_TYPES що містить значення з довідника DOCUMENT_TYPE_EXTENDED

        • в разі помилки - повернути 422 ('Document that proves personal data must be submitted')

      • Перевірте, чи існує хоча б один із поданих типів документів про особу в конфігураційному параметрі PIS_PERSON_LEGAL_CAPACITY_DOCUMENT_TYPES, що містить значення з довідника DOCUMENT_TYPE_EXTENDED

        • в разі помилки - повернути 422 ('Document that proves legal capacity must be submitted')

    • Інакше перевірте, чи існує будь-який із надісланих типів документів особи в конфігураційному параметрі PIS_PERSON_REGISTRATION_DOCUMENT_TYPES

      • в разі помилки - повернути 422 ('<Document type> can not be submitted for this person')

  • Перевірте документи особи відповідно до поточних перевірок, описаних тут: https://e-health-ua.atlassian.net/wiki/spaces/EH/pages/589266986/Create+Update+person+request#Validate-person-documents

Перевірити адреси персони

  • Перевірте, що вказано запис адреси з type = 'RESIDENCE'

    • в разі помилки - повернути 422 ('one and only one residence address is required')

Перевірити методи автентифікації персони

Пересона з довіреною особою

Існує кілька відмінностей між перевіркою звичайної особи та перевіркою особи з довіреною особою:

  • Схема дозволяє вказати “confidant_person”

  • Користувач може встановити лише одну довірену особу та лише один метод автентифікації

  • Не потрібно перевіряти вік персони, чи він більше значення конфігураційного параметру no_self_registration_age

  • Для перевірки поданих типів документів використовується інший параметр конфігураці (PIS_PERSON_WITH_CONFIDANT_REGISTRATION_DOCUMENT_TYPES)

  • Методи автентифікації особи повинні містити лише записи з type = 'THIRD_PERSON'

  • Довірена особа має бути перевірена

Цей набір правил перевірки зараз використовується наступними WS:

Перевірки

Перевірити схему

Перевірити дані персони у відповідності до схеми JSON:

 Person with confidant registration request schema
{
  "$schema": "http://json-schema.org/person_request/schema#",
  "definitions": {
    "phone": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "description": "Dictionary: PHONE_TYPE"
        },
        "number": {
          "type": "string",
          "pattern": "^\\+38[0-9]{10}$"
        }
      },
      "required": [
        "type",
        "number"
      ],
      "additionalProperties": false
    },
    "name": {
      "type": "string",
      "pattern": "^(?!.*[ЫЪЭЁыъэё@%&$^#])[a-zA-ZА-ЯҐЇІЄа-яґїіє0-9№\\\"!\\^\\*)\\]\\[(._-].*$"
    },
    "person_name": {
      "type": "string",
      "pattern": "^(?!.*[ЫЪЭЁыъэё@%&$^#])[А-ЯҐЇІЄа-яґїіє\\'\\-]+(\\s(?!.*[ЫЪЭЁыъэё@%&$^#])[А-ЯҐЇІЄа-яґїіє\\'\\-]+)*$",
      "minLength": 1,
      "maxLength": 255
    },
    "unzr": {
      "type": "string",
      "pattern": "^[0-9]{8}-[0-9]{5}$"
    },
    "tax_id": {
      "type": "string",
      "pattern": "^[0-9]{10}$",
      "minLength": 10,
      "maxLength": 255
    },
    "no_tax_id": {
      "type": "boolean",
      "description": "Status person refused tax_id"
    },
    "gender": {
      "type": "string",
      "description": "Dictionary: GENDER",
      "maxLength": 255
    },
    "address": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "description": "Dictionary: ADDRESS_TYPE"
        },
        "country": {
          "type": "string"
        },
        "area": {
          "$ref": "#/definitions/name"
        },
        "region": {
          "$ref": "#/definitions/name"
        },
        "settlement": {
          "$ref": "#/definitions/name"
        },
        "settlement_type": {
          "type": "string",
          "description": "settlement type Dictionary: SETTLEMENT_TYPE"
        },
        "settlement_id": {
          "type": "string",
          "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
        },
        "street_type": {
          "type": "string",
          "description": "street type Dictionary: STREET_TYPE"
        },
        "street": {
          "$ref": "#/definitions/name"
        },
        "building": {
          "type": "string",
          "pattern": "^[1-9]((?![ЫЪЭЁыъэё])()([А-ЯҐЇІЄа-яґїіє \\/\\'\\-0-9])){0,20}$"
        },
        "apartment": {
          "type": "string"
        },
        "zip": {
          "type": "string",
          "pattern": "^[0-9]{5}$"
        },
        "inserted_by": {
          "type": "string"
        },
        "updated_by": {
          "type": "string"
        },
        "inserted_at": {
          "type": "string"
        },
        "updated_at": {
          "type": "string"
        }
      },
      "required": [
        "type",
        "country",
        "area",
        "settlement",
        "settlement_type",
        "settlement_id",
        "inserted_by",
        "updated_by"
      ],
      "additionalProperties": false
    },
    "series_number_document": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "PASSPORT",
            "COMPLEMENTARY_PROTECTION_CERTIFICATE",
            "REFUGEE_CERTIFICATE",
            "TEMPORARY_CERTIFICATE"
          ],
          "description": "Dictionary: DOCUMENT_TYPE"
        },
        "number": {
          "type": "string",
          "pattern": "^((?![ЫЪЭЁ])([А-ЯҐЇІЄ])){2}[0-9]{6}$"
        },
        "issued_by": {
          "type": "string",
          "minLength": 1
        },
        "issued_at": {
          "type": "string",
          "format": "date"
        }
      },
      "required": [
        "type",
        "number"
      ],
      "additionalProperties": false
    },
    "number_document": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "BIRTH_CERTIFICATE",
            "TEMPORARY_PASSPORT"
          ],
          "description": "Dictionary: DOCUMENT_TYPE"
        },
        "number": {
          "type": "string",
          "pattern": "^(?![ЫЪЭЁыъэё@%&$^#`~:,.*|}{?!])[A-ZА-ЯҐЇІЄ0-9№\\/()-]+$",
          "minLength": 1,
          "maxLength": 255
        },
        "issued_by": {
          "type": "string",
          "minLength": 1
        },
        "issued_at": {
          "type": "string",
          "format": "date"
        }
      },
      "required": [
        "type",
        "number"
      ],
      "additionalProperties": false
    },
    "id_card": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "NATIONAL_ID"
          ],
          "description": "Dictionary: DOCUMENT_TYPE"
        },
        "number": {
          "type": "string",
          "pattern": "^[0-9]{9}$"
        },
        "issued_by": {
          "type": "string",
          "minLength": 1
        },
        "issued_at": {
          "type": "string",
          "format": "date"
        }
      },
      "required": [
        "type",
        "number"
      ],
      "additionalProperties": false
    }
  },
  "type": "object",
  "properties": {
    "person": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "first_name": {
          "type": "string"
        },
        "last_name": {
          "type": "string"
        },
        "second_name": {
          "type": "string"
        },
        "birth_date": {
          "type": "string"
        },
        "birth_country": {
          "type": "string"
        },
        "birth_settlement": {
          "type": "string"
        },
        "gender": {
          "enum": [
            "MALE",
            "FEMALE"
          ]
        },
        "email": {
          "type": "string"
        },
        "no_tax_id": {
          "type": "boolean"
        },
        "tax_id": {
          "type": "string"
        },
        "secret": {
          "type": "string"
        },
        "documents": {
          "type": "array"
        },
        "addresses": {
          "type": "array"
        },
        "phones": {
          "type": "array"
        },
        "unzr": {
          "type": "string"
        },
        "emergency_contact": {
          "type": "object",
          "properties": {
            "first_name": {
              "type": "string"
            },
            "last_name": {
              "type": "string"
            },
            "second_name": {
              "type": "string"
            },
            "phones": {
              "type": "array"
            }
          },
          "required": [
            "first_name",
            "last_name",
            "phones"
          ]
        },        
        "confidant_person": {
          "type": "object",
          "properties": {
            "person_id": {
              "type": "string"
            },
            "documents_relationship": {
              "type": "array",
              "properties": {
                "type": {
                  "type": "string",
                  "description": "Dictionary: DOCUMENT_RELATIONSHIP_TYPE"
                },
                "number": {
                  "type": "string",
                  "pattern": "^[0-9]{9}$"
                },
                "issued_by": {
                  "type": "string",
                  "minLength": 1
                },
                "issued_at": {
                  "type": "string",
                  "format": "date"
                },
                "active_to": {
                  "type": "string",
                  "format": "date"
                }
              },
              "required": [
                "type",
                "number"
              ],
              "additionalProperties": false
            }
            }
          },
          "required": [
            "person_id",
            "documents_relationship"
          ]
        },
        "preferred_way_communication": {
          "enum": [
            "email",
            "phone"
          ]
        }
      },
      "required": [
        "first_name",
        "last_name",
        "birth_date",
        "birth_country",
        "birth_settlement",
        "gender",
        "no_tax_id",
        "tax_id",
        "secret",
        "documents",
        "addresses",
        "emergency_contact"
      ]
    },
    "patient_signed": {
      "type": "boolean"
    },
    "process_disclosure_data_consent": {
      "type": "boolean"
    }
  },
  "required": [
    "person",
    "patient_signed",
    "process_disclosure_data_consent"
  ]
}
  • в разі, якщо поле не відповідає схемі - повернути 422 з повідомленням у відповідності до поля

  • в разі, якщо в запиті вказані додаткові поля - повернути 422 ('schema does not allow additional properties')

  • якщо необхідний параметр відсутній у запиті - повернути 422 ('required property %{property} was not present')

  • якщо в запиті немає необхідної кількості параметрів - повернути 422 ('expected a minimum of %{min} items but got %{actual}')

Перевірити персону

Перевірити документи персони

  • Перевірити, що вказані типи документів персони вказані в конфігураційному параметрі PIS_PERSON_WITH_CONFIDANT_REGISTRATION_DOCUMENT_TYPES, що містить значння з довідника DOCUMENT_TYPE

    • в разі помилки - повернути 422 ('Submitted document type is not allowed')

  • Перевірити документи персони у відповідності до існуючих перевірок, описаних тут: https://e-health-ua.atlassian.net/wiki/spaces/EH/pages/589266986/Create+Update+person+request#Validate-person-documents

Перевірити адреси персони

Перевірити довірену особу

  • Перевірити, чи confidant_person.person_id відповідає до person_id користувача, яка ініціює реєстрацію пацієнта

    • в разі помилки - повернути 422 ('Person who initiates registration of patient must be submitted as confidant person')

  • Перевірити, що confidant_person.person_id вказано і таблиці персон (MPI DB)

    • в разі помилки - повернути 422 ('Confidant patient is not found')

  • Перевірити вік довіреної особи, що він >= no_self_registration_age конфігураційного параметру

    • в разі помилки - повернути 422 ('Incorrect person age for such an action')

  • Перевірити, чи немає статусу кумулятивної верифікації довіреної особи в конфігураційному параметріNOT_ALLOWED_CONFIDANT_PERSON_VERIFICATION_STATUSES

    • в разі помилки - повернути 422 ('Person with cumulative verification status <verification_status> can not be submitted as confidant')

  • Перевірити, чи має довірена особа метод автентифікації за допомогою type = OTP, де ended_at рівний або більше за сьогодні

    • в разі помилки - повернути 422 ('Confidant person must have active authentication method with type "OTP" where ended_at is equal to or greater than current date')

Перевірити методи автентифікації персони

  • Перевірити, що вказаний authentication_methods містить тільки один запис і цей запис має тип type = 'THIRD_PERSON'

    • в разі помилки - повернути 422 ('Only THIRD_PERSON authentication method can be created for person')

  • Перевірити, чи THIRD_PERSON та ж персона, яка ініціювала реєстрацію пацієнта та вказана як довірена (authentication_methods = x-person-id з токену)

    1. в разі помилки - повернути 422 ('person.authentication_methods.value must be equal to person.confidant_person.person_id')

  • No labels