Сервис цифровой идентификации УПРИД Директ

Сервис-адаптер для выполнения требований 115-ФЗ в части проведения упрощенной идентификации клиентов:

Упрощенная идентификация клиента (физического лица) — это процедура по установлению в отношении клиента - фамилии, имени, отчества, серии и номера документа, удостоверяющего личность, и подтверждению достоверности этих сведений одним из следующих способов:

  • путем предъявления оригинала документа;
  • с использованием информации из различных государственных информационных систем;
  • с использованием Единой системы идентификации и аутентификации (ЕСИА) при условии, что у клиента имеется подтвержденная учетная запись (т.е. человек обратился в центр обслуживания с паспортом и подтвердил свою учетную запись).

Данный сервис относится ко второму пункту - через него можно проводить упрощенную идентификацию не только тех, кто зарегистрирован в ЕСИА, но и всех, у кого есть ИНН или СНИЛС, а это практически все совершеннолетние граждане РФ.

Сервис выполняет дополнительные подзапросы на основании поступивших в запросе данных. Он позволяет проверить данные гражданина с использованием разных сервисов-поставщиков данных и обеспечить проверку по 115-ФЗ в максимально короткие сроки.

Совместимость с УПРИД

Сервис реализует формат ответа полностью совместимый с форматом сервиса УПРИД и УПРИД Шлюз
Подробнее описано далее в разделе Совместимость с УПРИД.

Переменные окружения

Название Описание
SERVICES_CONFIG конфигурация используемых сервисов
DEPRECATION_BATCH_SIZE максимальное количество устаревающих запросов на одном шаге
DEPRECATION_SLEEP_INTERVAL промежуток времени между выполнением проверок устаревания запроса

Переменные для конфигурирования подключения к БД PostgreSQL: DATABASE_HOST, DATABASE_PORT, DATABASE_NAME, DATABASE_USER, DATABASE_PASS.

Переменные для конфигурирования подключения к RabbitMQ: MQ_HOST, MQ_PORT, CA_CERT, CLIENT_CERT, CLIENT_KEY

Переменные для конфигурирования подключения к ELK: ELASTIC_HOST, ELASTIC_PORT, ELASTIC_METRIC_PREFIX

Доступные сервисы (модули)

Для проверки входных данных сервис отправляет подзапросы в различные сервисы, реализованные с помощью конфигурируемых модулей. Подключение в Агредаторе к данным отдельным сервисам не требуется.

Проверка соответствия фамильно-именной группы, даты рождения, пола и СНИЛС (СМЭВ 3)
  • Документация: pfr-snils-validation
  • Название модуля: pfr-snils-validation
  • Обязательные поля: name, surname, snils

Пример корневого xml-документа вида сведений:

<tns:SnilsValidationRequest xmlns:tns="http://kvs.pfr.com/snils-validation/1.0.1" xmlns:smev="urn://x-artefacts-smev-gov-ru/supplementary/commons/1.0.1">
	<smev:FamilyName>ПЕТИНА</smev:FamilyName>
	<smev:FirstName>ЕЛЕНА</smev:FirstName>
	<smev:Patronymic>ВЛАДИМИРОВНА</smev:Patronymic>
	<tns:Snils>02773319862</tns:Snils>
	<tns:Gender>Female</tns:Gender>
	<tns:BirthDate>1966-09-12</tns:BirthDate>
</tns:SnilsValidationRequest>
Проверка соответствия паспортных данных и ИНН физического лица (СМЭВ 3)
  • Документация: fns-paspinn
  • Название модуля: fns-paspinn
  • Обязательные поля: name, surname, inn, pass_series, pass_number

Пример корневого xml-документа вида сведений:

<ns2:FNSPaspINNRequest ИННФЛ="520205004556" xsi:schemaLocation="urn://x-artefacts-ffns-paspinn-tofns-ru/247-01/4.0.0 fns-paspinn-tofns-ru.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="urn://x-artefacts-ffns-paspinn-tofns-ru/247-01/4.0.0">
	<ns2:ФИО FirstName="ПЕТР" Patronymic="АЛЕКСЕЕВИЧ" FamilyName="ЧАХЛОВ"/>
	<ns2:ДокУдЛичн SeriesNumber="22 02 919928" IssuerDate="2002-11-16" DocumentCode="21" IssuerCode="000-000" Issuer="АРОВД"/>
</ns2:FNSPaspINNRequest>
Сведения о действительности паспорта гражданина Российской Федерации, предъявленного на определённое имя (СМЭВ 3)
  • Документация: mvd-passport-validity
  • Название модуля: mvd-passport-validity
  • Обязательные поля: pass_series, pass_number, surname, name, birthdate

Пример корневого xml-документа вида сведений:

<ns:passportValidityExtendedRequest xmlns:ns="urn://mvd/guvm/passport-validity-extended/1.2.0"
                                    xmlns:bt="urn://mvd/guvm/basic-types/1.1.0">
    <ns:personInfo>
        <bt:lastName>Иванов</bt:lastName>
        <bt:firstName>Иван</bt:firstName>
        <bt:middleName>Иванович</bt:middleName>
        <bt:birthDate>1993-03-05</bt:birthDate>
        <bt:birthPlace>г. Москва</bt:birthPlace>
    </ns:personInfo>
    <ns:russianPassport>
        <bt:series>7866</bt:series>
        <bt:number>666666</bt:number>
        <ns:issueDate>2010-10-10</ns:issueDate>
        <ns:issuerCode>666666</ns:issuerCode>
    </ns:russianPassport>
</ns:passportValidityExtendedRequest>

Конфигурация сервисов

Конфигурация представляет строку в JSON формате массива объектов конфигурации сервисов, например:

[
  {
    "module": "mvd-passport-validity",
    "name": "mvd",
    "service_name": "bedrock$$mvd-passport-validity",
    "deprecation_interval": "1d"
  },
  {
    "module": "fns-paspinn",
    "name": "fns",
    "service_name": "bedrock$$fns-paspinn"
  },
  {
    "module": "pfr-snils-validation",
    "name": "pfr",
    "service_name": "bedrock$$pfr-snils-validation"
  }
]

где

Параметр Название Обязательное Пример
module Наименование модуля. Допустимые значения: mvd-passport-validity, fns-paspinn, pfr-snils-validation + mvd-passport-validity
name Имя сервиса, используемое в возвращаемых ответах + mvd
service_name Имя сервиса Агредатора, к которому будет направлен запрос + bedrock$$mvd-passport-validity
deprecation_interval Время устаревания запроса к сервису. По умолчанию 1 неделя (в соответствии с 210-ФЗ срок подготовки ответа на межведомственный запрос составляет не более 5 рабочих дней) - 1w

Принимаемые параметры

Сервис не проверяет входные данные на корректность форматам, специфичным для каждого сервиса. Сервис проверяет, что получен не пустой запрос и создан хотя бы один подзапрос (получено достаточно данных для отправки запроса в один из сервисов). Отправлять или нет подзапрос, определяется на основании обязательных полей для конкретного сервиса.

Параметр Название mvd pfr fns Пример
name Имя Иван
surname Фамилия Иванов
patronymic Отчество Иванович
pass_series Серия паспорта - 1234
pass_number Номер паспорта - 123456
inn ИНН - - 520205004556
snils СНИЛС - - 152-111-22 13
birthdate Дата рождения - 1966-09-12
birthplace Место рождения - - г. Москва
gender Пол - - Female
pass_issuer Орган, выдавший паспорт - - АРОВД
pass_issuer_date Дата выдачи паспорта - 2015-01-09
pass_issuer_code Код выдавшего подразделения - 000-000

✅ - обязательный параметр

⭕ - необязательный параметр

тире - параметр отсутствует в запросе

Параметры ответа

Запрос к сервису находится в статусе waiting до поступления ответов от всех сервисов. Сообщение переходит в статус error, если все запросы завершились ошибкой. Сообщение переходит в статус success, если выполнение всех подзапросов завершилось, и хотя бы один не завершился ошибкой.

Параметр Название Обязательное Пример
fl логическое значение, определяющее выполнение требований ФЗ:
true, если были успешно проверены ФИО и паспорт и подтверждена правильность либо СНИЛС, либо ИНН
false, если проверка не прошла
null, если данных недостаточно или ответы еще не получены
   
services ответы, полученные от каждого сервиса -  
attributes хэш проверяемых параметров, с данными подтверждения сервисами -  
code Код выполнения запроса. Принимает значения:
PROCESSING - запрос обрабатывается
VALID - по переданным данным/параметрам по каждому параметру был получен хотя бы один положительный ответ
INVALID - по всем параметрам проверка вернула негативный результат
FAULT - запрос завершился ошибкой
Параметр требуется для совместимости с использовавшимся ранее видом сведений УПРИД
   

Структура элемента services

Параметр Название Обязательное Пример
status Статус выполнения запроса + success
message Сообщение об ошибке - Timeout error
ticket Идентификатор квитка + 01adc83a-d4a9-4a81-b8dc-7767296bfa4b
service_name Имя сервиса агредатора, обрабатывавшего запрос + pfr-snils-validation
result Результат, полученный от сервиса - {"code": "VALID"}

Совместимость с УПРИД

Формат ответа (поля) совместимы с форматом ответа использовавшегося ранее сервиса uprid3, но одновременно с этим имеет расширенную информацию по каждому запрашиваемому параметру.

При работе по HTTP-API с использованием версии протокола v0 потребуется добавить поле birthdate в поля запроса.

Логика работы сервиса УПРИД Директ

Сервис УПРИД Директ принимает на вход ряд параметров, проверяет комплектность данных: можно ли отправить запрос хотя бы в одно ведомство.

Если данных недостаточно, то сервис вернет ответ с параметром fl: null. Соответственно, упрощенная идентификация не пройдена.

Если данных достаточно для отправки хотя бы одного запроса, сервис отправит запросы в соответствии с полученными данными.

Рассмотрим различные варианты в зависимости от полноты полученных данных.

ФИО, паспортные данные, дата рождения. Данных достаточно для отправки в МВД, но недостаточно для отправки в ФНС и ПФР. До получения ответа от ведомства сервис УПРИД Директ возвращает ответ со статусом waiting. После получения положительного ответа от МВД, параметр fl примет значение null (в связи с тем, что не проверено соответствие ИНН или СНИЛС), ответ сервиса УПРИД Директ получает статус success. Если ответ от МВД будет с ошибкой, параметр fl примет значение null, ответ сервиса УПРИД Директ получает статус error. В обоих случаях решение о прохождении упрощенной идентификации нельзя принять однозначно.

ФИО, паспортные данные, ИНН. Данных достаточно для отправки в ФНС, но недостаточно для отправки в МВД и ПФР. До получения ответа от ведомства сервис УПРИД Директ возвращает ответ со статусом waiting. После получения положительного ответа от ФНС, параметр fl примет значение null (в связи с тем, что не проверено соответствие СНИЛС и действительность паспорта), ответ сервиса УПРИД Директ получает статус success. Если ответ от ФНС будет с ошибкой, параметр fl примет значение null, ответ сервиса УПРИД Директ получает статус error. В обоих случаях решение о прохождении упрощенной идентификации нельзя принять однозначно.

ФИО, СНИЛС. Данных достаточно для отправки в ПФР, но недостаточно для отправки в МВД и ФНС. До получения ответа от ведомства сервис УПРИД Директ возвращает ответ со статусом waiting. После получения положительного ответа от ПФР, параметр fl примет значение null (в связи с тем, что не проверено соответствие ИНН и действительность паспорта), ответ сервиса УПРИД Директ получает статус success. Если ответ от ПФР будет с ошибкой, параметр fl примет значение null, ответ сервиса УПРИД Директ получает статус error. В обоих случаях решение о прохождении упрощенной идентификации нельзя принять однозначно.

ФИО, паспортные данные, дата рождения, ИНН. Данных достаточно для отправки в МВД и ФНС, но недостаточно для отправки в ПФР. До получения ответов от ведомств сервис УПРИД Директ возвращает ответ со статусом waiting. После получения положительного ответа от МВД, параметр fl примет значение null (в связи с тем, что еще не проверено соответствие ИНН), ответ сервиса УПРИД Директ получает статус waiting. После получения положительного ответа от ФНС, параметр fl примет значение true, ответ сервиса УПРИД Директ получает статус success. Это действует и наоборот, если сначала будет получен ответ от ФНС, а позже от МВД. После получения статуса ответа сервиса success и параметра fl: true, решение о прохождении упрощенной идентификации можно принять однозначно. Если одно из ведомств вернет ответ с ошибкой, то параметр fl примет значение false, а сервис УПРИД Директ получает статус success. Если оба запроса вернут ответ с ошибкой, то параметр fl примет значение false, а сервис УПРИД Директ получает статус error. В обоих случаях идентификация считается неуспешной.

ФИО, паспортные данные, дата рождения, СНИЛС. Данных достаточно для отправки в МВД и ПФР, но недостаточно для отправки в ФНС. До получения ответов от ведомств сервис УПРИД Директ возвращает ответ со статусом waiting. После получения положительного ответа от МВД, параметр fl примет значение null (в связи с тем, что еще не проверено соответствие СНИЛС), ответ сервиса УПРИД Директ получает статус waiting. После получения положительного ответа от ПФР, параметр fl примет значение true, ответ сервиса УПРИД Директ получает статус success. Это действует и наоборот, если сначала будет получен ответ от ПФР, а позже от МВД. После получения статуса ответа сервиса success и параметра fl: true, решение о прохождении упрощенной идентификации можно принять однозначно. Если одно из ведомств вернет ответ с ошибкой, то параметр fl примет значение false, а сервис УПРИД Директ получает статус success. Если оба запроса вернут ответ с ошибкой, то параметр fl примет значение false, а сервис УПРИД Директ получает статус error. В обоих случаях идентификация считается неуспешной.

ФИО, паспортные данные, дата рождения, СНИЛС, ИНН. Данных достаточно для отправки в МВД, ПФР и ФНС. До получения ответов от ведомств сервис УПРИД Директ возвращает ответ со статусом waiting. После получения положительного ответа от МВД, параметр fl примет значение null (в связи с тем, что еще не проверено соответствие СНИЛС и ИНН), ответ сервиса УПРИД Директ получает статус waiting. После получения положительного ответа от ФНС, параметр fl примет значение true (в связи с тем, что проверено соответствие ИНН и действительность паспорта), ответ сервиса УПРИД Директ получает статус waiting. После получения положительного ответа от ПФР, параметр fl примет значение true, ответ сервиса УПРИД Директ получает статус success. Это действует и наоборот, если порядок получения ответов будет другой. После получения статуса ответа сервиса success и параметра fl: true, решение о прохождении упрощенной идентификации можно принять однозначно. Если одно или два ведомства вернут ответ с ошибкой, то параметр fl примет значение false, а сервис УПРИД Директ получает статус success. Если все три запроса вернут ответ с ошибкой, то параметр fl примет значение false, а сервис УПРИД Директ получает статус error. В обоих случаях идентификация считается неуспешной.

Соответственно, можно ориентироваться на параметр fl или самостоятельно принимать решение по идентификации на основании данных ответов на запросы в ПФР, ФНС, МВД.

Примеры

Для проверки настройки сервиса можно отправить в консоли отправки панели администрирования следующий запрос:

{
  "name": "ЕЛЕНА",
  "surname": "ПЕТИНА",
  "patronymic": "ВЛАДИМИРОВНА",
  "pass_series": "7866",
  "pass_number": "123456",
  "inn": "520205004556",
  "snils": "027-733-198 62",
  "gender": "Female",
  "birthdate": "1966-09-12",
  "birthplace": "г. Москва",
  "pass_issuer": "АРОВД",
  "pass_issuer_date": "2010-10-10",
  "pass_issuer_code": "666-666"
}

В случае корректной настройки должен прийти следующий ответ (сервисы работают в тестовой среде СМЭВ 3 и для сервиса fns происходит ошибка из-за ненахождения тестового сценария):

{
  "attributes": {
    "surname": {
      "fns": false,
      "pfr": true,
      "mvd": true
    },
    "name": {
      "fns": false,
      "pfr": true,
      "mvd": true
    },
    "patronymic": {
      "fns": false,
      "pfr": true,
      "mvd": true
    },
    "inn": {
      "fns": false
    },
    "pass_series": {
      "fns": false,
      "mvd": true
    },
    "pass_number": {
      "fns": false,
      "mvd": true
    },
    "snils": {
      "pfr": true
    }
  },
  "fl": true,
  "code": "VALID",
  "services": [
    {
      "id": "1dffa9f7-49c2-4c99-9c5c-5346c4a37cd7",
      "service": "fns",
      "status": "error",
      "message": "UNKNOWN_REQUEST_DESCRIPTION: Ошибка идентификации сценария тестирования. Доступны следующие сценарии: [Тестовый сценарий 1 (//ns2:FNSPaspINNRequest/ns2:ФИО[@FamilyName='ЧАХЛОВ']), Тестовый сценарий 2 (//ns2:FNSPaspINNRequest/ns2:ФИО[@FamilyName='НЕЧАХЛОВ'])]"
    },
    {
      "id": "6f991c22-bcdf-4811-a092-670a367702c0",
      "service": "pfr",
      "status": "success",
      "result": {
        "result": true,
        "description": "Сведения соответствуют"
      }
    },
    {
      "id": "71aa61c1-db71-4fce-8829-b9a10dfb6b2d",
      "service": "mvd",
      "status": "success",
      "result": {
        "code": "VALID",
        "valid": true,
        "description": "Данные корректны"
      }
    }
  ]
}

Пример запроса с валидным запросом для fns и постепенным получением результата

Запрос

{
  "name": "ПЕТР",
  "surname": "ЧАХЛОВ",
  "patronymic": "АЛЕКСЕЕВИЧ",
  "pass_series": "1234",
  "pass_number": "123456",
  "inn": "520205004556",
  "snils": "027-733-198 62",
  "gender": "Male",
  "birthdate": "1966-09-12"
}

Цепочка получаемых ответов (здесь приведено полное содержимое payload RabbitMQ сообщения): Получен результат проверки ИНН сервисом ФНС:

{
  "attributes": {
    "surname": {
      "fns": true,
      "pfr": null,
      "mvd": null
    },
    "name": {
      "fns": true,
      "pfr": null,
      "mvd": null
    },
    "patronymic": {
      "fns": true,
      "pfr": null,
      "mvd": null
    },
    "inn": {
      "fns": true
    },
    "pass_series": {
      "fns": true
      "mvd": null
    },
    "pass_number": {
      "fns": true,
      "mvd": null
    },
    "snils": {
      "pfr": null
    }
  },
  "fl": true,
  "code": "VALID",
  "services": [
    {
      "id": "839dfad3-8f90-4e98-8968-eb531482c71f",
      "service": "fns",
      "status": "success",
      "result": {
        "code": 1
      }
    },
    {
      "id": "db2aa325-a356-455d-a787-6f2ecfb61f4a",
      "service": "pfr",
      "status": "waiting"
    },
    {
      "id": "eb82ac87-4eea-4b13-8ff1-01d4b8035fc6",
      "service": "mvd",
      "status": "waiting"
    }
  ]
}

Получен ответ от сервиса ПФР:

{
  "attributes": {
    "surname": {
      "pfr": false,
      "fns": true,
      "mvd": null
    },
    "name": {
      "pfr": false,
      "fns": true,
      "mvd": null
    },
    "patronymic": {
      "pfr": false,
      "fns": true,
      "mvd": null
    },
    "snils": {
      "pfr": false
    },
    "inn": {
      "fns": true
    },
    "pass_series": {
      "fns": true,
      "mvd": null
    },
    "pass_number": {
      "fns": true,
      "mvd": null
    }
  },
  "fl": true,
  "code": "VALID",
  "services": [
    {
      "id": "db2aa325-a356-455d-a787-6f2ecfb61f4a",
      "service": "pfr",
      "status": "error",
      "message": "UNKNOWN_REQUEST_DESCRIPTION: Ошибка проверки содержимого тестового запроса по сценарию 'Тестовый сценарий 1': следующие контрольные примеры не прошли: [//smev:FamilyName='ПЕТИНА' and //smev:FirstName='ЕЛЕНА' and //smev:Patronymic='ВЛАДИМИРОВНА' and //tns:Snils='02773319862' and //tns:Gender='Female' and //tns:BirthDate]"
    },
    {
      "id": "839dfad3-8f90-4e98-8968-eb531482c71f",
      "service": "fns",
      "status": "success",
      "result": {
        "code": 1
      }
    },
    {
      "id": "eb82ac87-4eea-4b13-8ff1-01d4b8035fc6",
      "service": "mvd",
      "status": "waiting"
    }
  ]
}

Получен ответ от сервиса МВД:

{
  "attributes": {
    "name": {
      "mvd": false,
      "pfr": false,
      "fns": true
    },
    "surname": {
      "mvd": false,
      "pfr": false,
      "fns": true
    },
    "patronymic": {
      "mvd": false,
      "pfr": false,
      "fns": true
    },
    "pass_series": {
      "mvd": false,
      "fns": true
    },
    "pass_number": {
      "mvd": false,
      "fns": true
    },
    "snils": {
      "pfr": false
    },
    "inn": {
      "fns": true
    }
  },
  "fl": true,
  "code": "VALID",
  "services": [
    {
      "id": "eb82ac87-4eea-4b13-8ff1-01d4b8035fc6",
      "service": "mvd",
      "status": "error",
      "message": "UNKNOWN_REQUEST_DESCRIPTION: Ошибка идентификации сценария тестирования. Доступны следующие сценарии: [Тестовый сценарий 3 (1.2.0) (//ns:passportValidityExtendedRequest//bt:series='7844'), Тестовый сценарий 2 (1.2.0) (//ns:passportValidityExtendedRequest//bt:series='7801'), Тестовый сценарий 1 (1.2.0) (//ns:passportValidityExtendedRequest//bt:series='7866')]"
    },
    {
      "id": "db2aa325-a356-455d-a787-6f2ecfb61f4a",
      "service": "pfr",
      "status": "error",
      "message": "UNKNOWN_REQUEST_DESCRIPTION: Ошибка проверки содержимого тестового запроса по сценарию 'Тестовый сценарий 1': следующие контрольные примеры не прошли: [//smev:FamilyName='ПЕТИНА' and //smev:FirstName='ЕЛЕНА' and //smev:Patronymic='ВЛАДИМИРОВНА' and //tns:Snils='02773319862' and //tns:Gender='Female' and //tns:BirthDate]"
    },
    {
      "id": "839dfad3-8f90-4e98-8968-eb531482c71f",
      "service": "fns",
      "status": "success",
      "result": {
        "code": 1
      }
    }
  ]
}