Сервис «N3.Health.Сервис электронной подписи»
«N3.Health.СЭП» предназначен для реализации процесса подписания документов с пациентом (клиентом) юридического лица как простой электронной подписью, так и иными видами электронной подписи, в т.ч. квалифицированной.
Пациент подписывает документ простой электронной подписью (ПЭП) или ПЭП с ЕСИА (для определенных типов документов, к примеру: ИДС) через свой смартфон без установки дополнительного ПО.
Для осуществления интеграции требуется создавать комплект документов и передавать их в сервис в соответствии с форматом, указанным в запросе /signing
Сценарий использования предполагает создание комплекта документов на стороне Информационной системы инициирующей запрос (далее ИС) и осуществления их отправки в сервис СЭП – одним post запросом на endpoint /sep/api/signing с указанием типа доставки: (SMS, MAX, MILA) и указание на необходимость авторизации через ЕСИА (для ИДС, Телемедицинских консультаций и иных сценариев требующих подписание с использованием ЕСИА).
Логика типов доставки
SMS – отправлено будет СМС
MAX – для подписания пациенту необходимо перейти в чат-бот (или мини-приложение внутри чат-бота), в чат-бот используемой медицинским учреждением.
Mila – необходимо скачать приложение, если пациент не зарегистрирован в MILA – АВТОМАТИЧЕСКИ будет направлено СМС.
МЕТОДЫ POST
Метод отправки
Эндпоинт https://b2b-demo.n3health.ru/sep/api
- Метод POST /sep/api/signing – направление комплекта документов на подпись в сервис СЭП
Метод осуществляет немедленную доставку ссылки с кодом и паролем указанным способом доставки и возвращает trackingId отправления или ошибку.
Рекомендуем сохранять связь ID отправления СЭП (trackingId) с карточкой Пациента в используемой информационной системе для осуществления запросов GET методами статуса и направленного комплекта документов с визуализацией подписи в дальнейшем.
Пакетное подписание — при передачи нескольких документов, будет осуществлено пакетное подписание всех входящих в запрос документов
Тарификация осуществляется за пакеты (1 документ – 1 пакет, 5 документов в запросе – 1 пакет).
АВТОРИЗАЦИЯ
| Authorization | Обязателен | 44556afd-0e84-b847-2322-75999668f590 | Авторизационный токен. Выдается разработчику МИС администратором Интеграционной платформы; |
| X-Id-Lpu | Обязателен | 12346afd-0e84-b847-2322-75999668f500a | Уникальный идентификатор ЛПУ в системе согласно справочнику 1.2.643.2.69.1.1.1.64 |
Пример запроса
POST /sep/api/signing
HTTP/1.1
Host: b2b-demo.n3health.ru
Authorization: 44556afd-0e84-b847-2312-75999668f777
X-Id-Lpu: 12346afd-0e84-b847-2322-75999668f500a
Content-Type: multipart/form-data; boundary=razdelitel
—razdelitel
Content-Disposition: form-data; name=»meta»
Content-Type: application/json; charset=utf-8
{
«organization«: {
«idLpu»: «d39269b3-289d-4c5d-aa33-b3c945ad22ee»
]
},
«practitioner«: {
«mrProxyNumber»: «12-52884аАА»,
«familyName»: «Иванов»,
«givenName»: «Иван»,
«middleName»: «Иванович»,
«userIdLpu»: «doc-123»,
«snils»: «12345678901» ,
«telecom»: [
{ «system»: «Email», «value»: «email@example.com» },
{ «system»: «Telephone», «value»: «+7XXXXXXXXXX» }
]
},
«patients«: [
{
«idPatientMis»: «patient-456»,
«mpiId»: «123e4567-e89b-12d3-a456-426614174000»,
«familyName»: «Петров»,
«givenName»: «Пётр»,
«middleName»: «Петрович»,
«birthDate»: «1980-01-01»,
«sex»: «male»,
«telecom»: [
{ «system»: «Email», «value»: «email@example.com» },
{ «system»: «Telephone», «value»: «+7XXXXXXXXXX» }
],
«documentDto«: [
{
«providerName»: «ОВД»,
«issuedDate»: «2010-05-15»,
«docN»: «1234»,
«docS»: «123456»,
«documentName»: «Паспорт гражданина РФ»,
«idDocumentType»: 14
}
]
}
],
«medDocument«: {
«esiaAuth»: true,
«attachments»: [
{ «partName»: «file0», «documentType»: «2» },
{ «partName»: «file1», «documentType»: «3» },
{ «partName»: «file2», «documentType»: «4» }
]
},
«delivery«: [«sms»]
}
—razdelitel
Content-Disposition: form-data; name=»file0″; filename=»document.pdf»
Content-Type: application/pdf
<бинарные данные PDF документа>
—razdelitel
Content-Disposition: form-data; name=»file1″; filename=»document.docx»
Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document
<бинарные данные DOCX документа>
—razdelitel—
Ответ сервера
Успех:
HTTP/1.1 201 Created
Location: /sep/api/signing/123e4567-e89b-12d3-a456-426614174000
Content-Type: application/json
{
«status»: «created»,
«trackingId»: «123e4567-e89b-12d3-a456-426614174000»
}
Ошибка:
HTTP/1.1 400 Bad Request
Content-Type: application/json
{
«status»: «error»,
«trackingId»: «123e4567-e89b-12d3-a456-426614174000»,
«errorCode»: «INVALID_ATTACHMENT»,
«errorMessage»: «Файл file1 отсутствует в multipart-теле»
}
* Все варианты ошибок ниже
Метод отмены подписания
Метод позволяет отменить подписание до того, как один из подписантов осуществлено подписание.
POST sep/api/signing/{trackingId}/cancel
trackingId отправления — полученный при выполнении метода отправки на подпись.
Успешный ответ:
{
«status»: «success»
}
Дополнительно возможно отменить отправку до подписания в личном кабинете клиники в Mila при просмотре конкретного отправления через меню опция (Шестеренка отправления)
1. Заголовок (Headers)
| Поле | Тип | Обязательность | Описание |
| Authorization | string | Обязательно | Авторизационный токен. Выдается разработчику МИС администратором Интеграционной платформы. Формат: 44556afd-0e84-b847-2322-75999668f590 |
| X-Id-Lpu | string | Обязательно | Уникальный идентификатор ЛПУ в системе |
| Content-Type | string | Обязательно | multipart/form-data; boundary=—-pepsign |
2. Организация (organization)
| Поле | Тип | Обязательность | Описание |
| idLpu | string | Обязательно | Уникальный идентификатор ЛПУ в системе согласно справочнику 1.2.643.2.69.1.1.1.64 |
Поля объектов в telecom:
| Поле | Тип | Обязательность | Описание |
| system | string | Обязательно | Тип контакта: «Email» или «Telephone» |
| value | string | Обязательно | Значение (email/телефон). Телефон в формате +7XXXXXXXXXX. |
3. Медицинский работник (practitioner)
| Поле | Тип | Обязательность | Описание |
| mrProxyNumber | string | Опционально | Номер машиночитаемой доверенности (например, 12-52884аАА) |
| familyName | string | Обязательно | Фамилия |
| givenName | string | Обязательно | Имя |
| middleName | string | Опционально | Отчество |
| userIdLpu | string | Обязательно | Идентификатор врача в ЛПУ |
| snils | string | Обязательно | СНИЛС сотрудника |
| telecom | array | Опционально | Контактные данные (аналогично organization.telecom) |
4. Пациенты (patients)
Массив объектов, где каждый объект содержит:
| Поле | Тип | Обязательность | Описание |
| idPatientMis | string | Обязательно | ID пациента в МИС (например, patient-456) |
| mpiId | string | Опционально | MPI ID из ИЭМК (например, 123e4567-e89b-12d3-a456-426614174000) |
| familyName | string | Обязательно | Фамилия |
| givenName | string | Обязательно | Имя |
| middleName | string | Опционально | Отчество |
| birthDate | string | Обязательно | Дата рождения в формате YYYY-MM-DD |
| sex | string | Обязательно | Пол: male или female |
| telecom | array | Обязательно | Минимум 1 объект с system: «Telephone». |
Документы пациента (documentDto):
Массив объектов (обязательно хотя бы 1 документ, предпочтительнее передавать номер СНИЛС» (код документа «223»)):
| Поле | Тип | Обязательность | Описание |
| providerName | string | Обязательно | Кто выдал документ (например, «ОВД», «ПФР») |
| issuedDate | string | Опционально | Дата выдачи (YYYY-MM-DD) |
| docN | string | Обязательно | Номер документа |
| docS | string | Обязательно | Серия документа (если есть) |
| documentName | string | Опционально | Название документа (например, «СНИЛС») |
| idDocumentType | integer | Обязательно | Код типа документа: • 14 — паспорт РФ • 223 — СНИЛС • 240 — полис ДМС (полный список в справочнике 1.2.643.2.69.1.1.1.6) |
5. Медицинский документ (medDocument)
| Поле | Тип | Обязательность | Описание |
| esiaAuth | boolean | Опционально | true — требуется подпись через ЕСИА. Если комплект содержит шаблон ИДС – обязательно указывайте TRUE. Рекомендуется предусмотреть в используемой системе флаг для шаблона документа – ИДС. |
| attachments | array | Обязательно | Массив вложений. |
Вложения (attachments):
| Поле | Тип | Обязательность | Описание |
| partName | string | Обязательно | Оригинальное название файла <String> |
| documentType | string | Опционально | Тип вложения: • 1 — медицинские • 2 — бухгалтерские • 3 — прочие |
| MIME Type | |
|---|---|
| .doc | application/msword |
| .docx | application/vnd.openxmlformats-officedocument.wordprocessingml.document |
| applicatiapplication/pdfon/pdf | |
| .odt | application/vnd.oasis.opendocument.text |
6. Доставка (delivery)
| Поле | Тип | Обязательность | Описание |
| delivery | array | Обязательно |
Способы доставки: |
Важные примечания:
- Для полиса ДМС (idDocumentType: 240) обязательно указать второй документ (например, паспорт). Предпочтительнее паспорт.
- Если esiaAuth: true, пациент должен авторизоваться через ЕСИА для подписи.
- Все даты — в формате ISO 8601 (YYYY-MM-DD).
Обработка ошибок
| 400 | INVALID_SIGNTOKEN | Неверный SIGNTOKEN: проверьте, что токен выдан для передаваемых guid и IdLpu |
| 403 | ESIA_AUTH_REQUIRED | Ошибка авторизации ЕСИА |
| 403 | PATIENT_NO_DATA | Не все обязательные поля переданы ВЫВОДИТ СПИСОК ТРЕБУЕМЫХ ПОЛЕЙ |
| 403 | PATIENTS_DENIED | Запрет со стороны пациента |
| 403 | INVALID_BASE64 | «Некорректные данные в поле Content» |
| 403 | EMPTY_ARRAY | Обязательное поле не может быть пустым. |
| 429 | RATE_LIMIT_EXCEEDED | Превышен лимит запросов |
Статусы
| 201 | Создан | Created | Документ создан через API, готов к обработке |
| 202 | Отправлен на подписание | Sent for Signing | Документ отправлен получателю |
| 203 | Просмотрел | Viewed | Документ просмотрен получателем |
| 204 | Подписал | Signed | Документ подписан получателем |
| 205 | Отказался | Rejected | Получатель отказался от подписания |
| 206 | Срок для подписания истек | Signing Period Expired | Срок действия ссылки истек до момента проставления подписи или отказа |
| 207 | Ожидание действий всех получателей | Awaiting Actions from All Recipients | Ожидание действий от всех получателей |
| 210 | Завершено. Подписано всеми | Completed. Fully Signed | Все получатели подписали, документ сохранен |
| 211 | Завершено. Подписано не всеми | Completed. Partially Signed | Не все получатели подписали, документ сохранен |
| 212 | Отменен для получателя | Cancelled for Recipient | Подписание отменено для конкретного получателя |
| 213 | Завершено. Отменено для всех | Completed. Cancelled for All | Подписание отменено для всех получателей |
| 214 | Успешно. Требуется подписание УКЭП | UKEP required | Требуется подписание УКЭП медицинского работника |
| 498 | Завершено. Отклонено всеми | Completed. Rejected by All | Все получатели отказались от подписания |
| 499 | Завершено. Истекло для всех | Completed. Expired for All | Срок ссылки истек для всех получателей |
| 500 | Ошибка обработки | Processing Error | Ошибка во время обработки документа |
| 501 | Ошибка доставки получателю | Delivery Error | Произошла ошибка при доставке конкретному получателю |
Лимиты
| SEP_API_BLOCKED_ALLOW включает и отключает механизм блокировки | |
| SEP_API_BLOCKED_TIME=15 SEP_API_BLOCKED_PERIOD=10 SEP_API_BLOCKED_COUNT=50 SEP_API_BLOCKED_ALLOW=true |
в данной конфигурации можно делать 50 запросов к POST /signing в 10 минут, если больше — блокировка на 15 минут |
Повторная отправка уведомления
Описание
Метод для повторной отправки уведомления о необходимости подписания документа по указанному trackingId. Позволяет изменить способ доставки уведомления.
Базовые параметры
Демо-окружение: https://b2b-demo.n3health.ru
Базовый путь API: /sep/api
Полный базовый URL: https://b2b-demo.n3health.ru/sep/api
HTTP-запрос
POST https://b2b-demo.n3health.ru/sep/api/resend
Заголовки (Headers)
| Authorization | string | Да | Токен доступа СЭП | 44556afd-0e84-b847-2322-75999668f590 |
| X-Id-Lpu | string | Да | Идентификатор медицинской организации (из регионального справочника) | 0453937e-fad5-402d-aacb-3ce6df2bf6fe |
| Content-Type | string | Да | Формат тела запроса | application/json |
{
«trackingId»: «string»,
«delivery»: [«string»],
«IdPatientMis»: [«string»]
}
Параметры
| trackingId | string | Да | Идентификатор отслеживания подписания (полученный при первоначальной отправке) | «8da15c45-3b27-8727-77dd-9de51d0aa920» |
| delivery | array[string] | Да | Способ доставки нового уведомления. Возможные значения: sms, max, mila, goskey | [«mila»] |
| IdPatientMis | array[string] | Да | Идентификатор пациента в отправляющей системе | [«singaevDemo1234»] |
Пример запроса
POST https://b2b-demo.n3health.ru/sep/api/resend Authorization: 53656afd-0e84-77dd-5555-9de51d0aa920 X-Id-Lpu: 1234937e-bla4-707d-abcd-3ce6df2bf6fe Content-Type: application/json { "trackingId": "8da15c45-3b27-8727-77dd-9de51d0aa920", "delivery": ["mila"], "IdPatientMis": ["singaevDemo1234"] }
Ответ
Успешный ответ (200 OK):
{ «success»: true, «message»: «Уведомление успешно повторно отправлено», «tracking_id»: «a8cc6886-956f-42e4-aa3c-742df306930f»}
Ошибка (400 Bad Request):
{ «error»: «Документ не найден», «message»: «Tracking ID не существует» }
{ «error»: «IdPationMis не найден», «message»: «IdPationMis не существует или не соответствует «trackingId» }
Ошибка (404 Not Found):
{ «error»: «Документ не найден», «message»: «Tracking ID не существует» }
Важные примечания
-
Формат IdPatientMis: Параметр передается как массив строк для поддержки будущей функциональности отправки уведомлений нескольким пациентам по одному отправлению.
-
Соответствие ID: IdPatientMis должен соответствовать тому, который был указан при первоначальной отправке документа.
-
Окружения:
- Тестовое (demo): https://b2b-demo.n3health.ru
-
Продакшен (production): https://b2b.n3health.ru
-
Способы доставки: Доступные значения для поля delivery:
-
sms — SMS-сообщение
-
max — MAX-сообщение
-
mila — Mila-сообщение
-
goskey — Goskey-сообщение
-
-
Таймауты: Рекомендуемый таймаут для запроса — 30 секунд.
- Логика биллинга на текущий момент. Если ранее было отправлено не СМС, то отправление снимается тарификации, создается новая биллинговая запись с новым указанными типом. Если СМС, то тарификация по факту отправки.
Будущие обновления
-
Множественная отправка: В ближайших обновлениях будет реализована возможность отправки уведомлений нескольким пациентам по одному отправлению. Для этого массив IdPatientMis может содержать несколько идентификаторов пациентов.
Запрос на локальное подписание КЭП
1. Базовые параметры
Демо-окружение: https://b2b-demo.n3health.ru
Базовый путь API: /sep/api
Полный базовый URL: https://b2b-demo.n3health.ru/sep/api/initqes
Метод: Добавляем файл открепленной подписи к подписанному пациентом отправлению.
Использовать метод возможно только при статусе отправления:
| 208 | Успешно. Подписан всеми — обработка | Success. Fully Signed — Processing | Все получатели подписали, документ обрабатывается |
Статус выведен из эксплуатации, использовался ранее. |
| 209 | Успешно. Подписан не всеми — обработка | Success. Partially Signed — Processing | Не все получатели подписали, документ обрабатывается |
Статус выведен из эксплуатации, использовался ранее. |
| 210 | Завершено. Подписано всеми | Completed. Fully Signed | Все получатели подписали, документ сохранен | Актуальный статус |
| 211 | Завершено. Подписано не всеми | Completed. Partially Signed | Не все получатели подписали, документ сохранен | Актуальный статус |
| 214 | Требует подписания КЭП | UKEP required | Требуется подписание КЭП медицинского работника | Актуальный статус |
Описание
Метод для отправки открепленной подписи КЭП указанному trackingId. После локального подписания КЭПом через initQes комплекта документов.
Доступна выдача при GET запросе по trackingId.
Метод можно будет успешно исполнен при статусах trackingId 208, 209, 201, 211, 214
В ответ возвращается ссылка qesLink переход на которую должен быть осуществлен в браузере имеющем установленный КриптоПро плагин и настроен сертификат с локальным СКЗИ.
После процесса подписания на документ будет наложена визуализация подписи КЭП и возможность скачать результаты: PDF + .SIG А итоговый файл будет помещен в хранилище N3health и доступен для получения через GET методы.
HTTP-запрос
POST https://b2b-demo.n3health.ru/sep/api/initqes
Заголовки (Headers)
| Authorization | string | Да | Токен доступа СЭП | 44556afd-0e84-b847-2322-75999668f590 |
| X-Id-Lpu | string | Да | Идентификатор медицинской организации (из регионального справочника) | 0453937e-fad5-402d-aacb-3ce6df2bf6fe |
| Content-Type | string | Да | Формат тела запроса | application/json |
{
«trackingId»: «8da15c45-3b27-8727-77dd-9de51d0aa920»,
«practitioner»: {
«familyName»: «Иванов»,
«givenName»: «Иван»,
«middleName»: «Иванович»,
«snils«: «12345678912», // Обязательно для валидации
«certificateThumbprint«: «A1B2C3D4E5F6…», // Опционально
«userIdLpu»: «doc-123»,
«telecom»: [
{ «system»: «Email», «value»: «email@example.com» },
{ «system»: «Telephone», «value»: «+71234567890» }
]
}
}
Параметры
| trackingId | string | Да | Идентификатор отслеживания подписания (полученный при первоначальной отправке) | «8da15c45-3b27-8727-77dd-9de51d0aa920» |
| practitioner | string | Да |
Данные работника инициировавшего запрос |
«practitioner»: { «mrProxyNumber»: «12-52884аАА», // номер МЧД — опционально «familyName»: «Иванов», // Обязательно «givenName»: «Иван», // Обязательно «middleName»: «Иванович», // опционально «userIdLpu»: «doc-123», // обязательно «snils»: «12345678912», // обязательно «certificateThumbprint»: «A1B2C3D4E5F6…», // опционально «telecom»: [{ «system»: «Email», «value»: «email@example.com» }, // обязательно { «system»: «Telephone», «value»: «+71234567890» } //обязательно] } |
| practitioner.certificateThumbprint |
|
Пример запроса
POST https://b2b-demo.n3health.ru/sep/api/initqes Authorization: 53656afd-0e84-77dd-5555-9de51d0aa920 X-Id-Lpu: 1234937e-bla4-707d-abcd-3ce6df2bf6fe Content-Type: application/json
{
«trackingId»: «8da15c45-3b27-8727-77dd-9de51d0aa920»,
«practitioner»: {
«mrProxyNumber»: «12-52884аАА»,
«familyName»: «Иванов»,
«givenName»: «Иван»,
«middleName»: «Иванович»,
«userIdLpu»: «doc-123»,
«snils»: «12345678912»,
«certificateThumbprint»: «A1B2C3D4E5F6…»,
«telecom»: [
{ «system»: «Email», «value»: «email@example.com» },
{ «system»: «Telephone», «value»: «+71234567890» }
]
}
Ответ
-
Успешный ответ (200 OK):
{
«success»: true,
«message»: «Подпись успешно добавлена, и будет доступна после индексации»,
«tracking_id»: «a8cc6886-956f-23e4-aa3c-742df306930f»,
«qesLink»: «https://b2b-demo.n3health.ru/sep/mis/qes/addqes-t?trackingId=cd6899fe-9ae6-4b86-ac48-8cefe6db749b&thumbprint=231B6DEE3B12348A3C6BACF943EFD7788B8E69EC«
}
-
Ошибка (400 Bad Request):
{ «error»: «Документ не найден», «message»: «Tracking ID не существует», «tracking_id»: «a8cc6886-956f-42e4-aa3c-742df306930f» }
{ «error»: «Документ не соответствует», «message»: «Tracking ID не соответствует указанной организации, проверьте токен доступа или трекинг номер», «tracking_id»: «a8cc6886-956f-42e4-aa3c-742df306930f» }
{ «error»: «Метод недоступен для текущего статуса trackingId», «message»: «Статус TrackingID должен быть
trackingId 208, 209, 201, 211, 214«, «trackingStatus»: «203» }
2. Предусловия работы, необходимо установить криптопровайдер и плагин в браузер.
https://cryptopro.ru/products/cades/plugin/ плагин
КриптоПро CSP важно — подписание осуществляется локально. Таким образом должна быть приобретена поставка КриптоПро CSP c Поддержкой КриптоПро TSP Клиент 2.0 для проставления метки доверенного времени в состав подписываемой информации для долговременного хранения.
https://docs.cryptopro.ru/cades/plugin/plugin-installation-windows
https://docs.cryptopro.ru/cades/plugin/plugin-installation-unix
https://docs.cryptopro.ru/cades/plugin/plugin-installation-macos
Проверка установки
https://docs.cryptopro.ru/cades/plugin/plugin-usage
ВЕБ ИНСТРУМЕНТЫ ДЛЯ РАБОТЫ С СЕРТИФИКАТАМИ И ПЛАГИНОМ
https://www.cryptopro.ru/sites/default/files/products/cades/demopage_2024-08-09/webtools.html
Запрос на локальное подписание КЭП списка отправлений
Базовые параметры
Демо-окружение: https://b2b-demo.n3health.ru
Базовый путь API: /sep/api
Полный базовый URL: https://b2b-demo.n3health.ru/sep/api
Метод: Инициализирует последовательное проставление квалифицированной электронной подписи (КЭП) списку отправлений, подписанных пациентом.
Описание
Метод пакетного подписания QES (КЭП) работником отправлений по trackingIds ИЛИ заданным параметрам.
В ответ на запрос возвращается ссылка /addbatchqes переход на которую должен быть осуществлен в браузере, имеющем установленный КриптоПро плагин и настроен сертификат с локальным СКЗИ.
onlyPractitioner и onlyPractitionerCertificateThumbprint — передаются в параметрах ссылки вместе с отпечатком.
«batchQesLink»: «https://sep.mila.online/sep/mis/qes/addbatchqes?id=96c6a822-7cc2-4ed9-9ba6-c60b4a468e03&thumbprint=A1B2C3…&onlyPractitioner=true&onlyPractitionerCertificateThumbprint=true»
Перед подписанием на документ будет наложена визуализация подписи КЭП. После подписания документы сохраняются в Сервисе Электронной Подписи и доступны через GET-методы.
Внешняя информационная система может осуществить следующие сценарии:
- Отправка массива trackingIds конкретных отправлений для проставления КЭП
Будет инициировано подписание только trackingIds из запроса. - Отправить запрос по параметрам, без указания конкретных trackingIds
В таком случае будет осуществлена выборка в соответствии с передаваемыми параметрами.
Важно: без явного указания статусов возвращаются отправления в статусе 214 (требуется подписание КЭП).
по дате — все отправления конкретного работника за период.
по дате и статусу — все отправления конкретного работника за период и статусы
Особенности в личном кабинете работника WEB
В личном кабинете работника при выполнении групповой операции подписания initBatchQes — всегда передается practitioner, таким образом в UI возможно инициировать подписание отправлений выполненных от имени текущего работника. Ограничение установлено для избежания наложения подписи на отправления, к которым работник не имеет отношения.
Если медицинскому работнику необходимо подписать отправление КЭП-ом, которое изначально он не инициировал в адрес пациента (например оформлено медицинским регистратором), то такое отправление возможно подписать через соответствующее индивидуальное меню отправления («шестеренку» опций).
Запрос
POST https://b2b-demo.n3health.ru/sep/mis/api/initbatchqes
Заголовки (Headers)
Authorization |
string | Да | Токен доступа СЭП | 44556afd-0e84-b847-2322-75999668f590 |
X-Id-Lpu |
string | Да | Идентификатор медицинской организации (из регионального справочника) | 0453937e-fad5-402d-aacb-3ce6df2bf6fe |
Content-Type |
string | Да | Формат тела запроса | application/json |
{"trackingIds": ["34a987b7-b042-4e6f-a8c1-19ffd9066786", "52c94dcd-b470-48e4-8449-443480732a1b", "5ad07a15-33b6-4699-a0f3-63f9d5b04e2c", "0c585017-e776-4eda-99ba-492959a17736"],
"certificateThumbprint": "A1B2C3...",
"dateFrom": "2025-03-01",
"dateTo": "2025-03-20",
"statuses": ["214", "210", "211"],
"practitioner": {
"snils": "1234567899",
"userIdLpu": "doc-Id123"
},
}
либо
{ "trackingIds": ["34a987b7-b042-4e6f-a8c1-19ffd9066786", "52c94dcd-b470-48e4-8449-443480732a1b", "5ad07a15-33b6-4699-a0f3-63f9d5b04e2c", "0c585017-e776-4eda-99ba-492959a17736"], "practitioner": { "snils": "1234567899", "userIdLpu": "doc-Id123" } }
Параметры тела запроса
| trackingIds | array of strings | Нет* | Приоритет над остальными параметрами. Массив идентификаторов отправлений для подписания. * Должен быть передан либо trackingIds либо параметры для выборки dateFrom, dateTo, statuses |
| certificateThumbprint | string |
Нет (условно обязателен)* |
Отпечаток (thumbprint) сертификата КЭП врача в формате HEX (например, A1B2C3D4E5F6…). Если указан и сертификат с таким отпечатком найден в системе пользователя, он будет автоматически выбран в процессе подписания. Пользователь сохраняет возможность выбрать другой сертификат вручную. Не является фильтром по сертификату. Без других параметров указывается с целью автоматического выбора сертификата на странице подписания для удобства пользователя. *Если |
practitioner |
object |
Да** |
Данные работника, инициирующего запрос по API важно в текущей редакции — не является фильтром по работнику! ** должен быть передан один из идентификаторов: |
practitioner.snils |
string | условно обязателен | СНИЛС работника (приоритет над userIdLpu если переданы оба). |
practitioner.userIdLpu |
string | условно обязателен | Внутренний идентификатор работника в МИС. Используется, если не передан snils. |
dateFrom |
string (ISO 8601) | Нет | Начало периода (включительно), формат YYYY-MM-DD. |
dateTo |
string (ISO 8601) | Нет | Окончание периода (включительно), формат YYYY-MM-DD. |
statuses |
array of strings | Нет | Список статусов. Если не передан или отсутствует — по умолчанию "214". Допустимые: 210, 211, 214. |
| onlyPractitioner | boolean | нет |
Включает фильтр по работнику ( По умолчанию false. |
| onlyPractitionerCertificateThumbprint | boolean | нет | Фильтр по сертификату из текущего запроса (certificateThumbprint) Если указан, то осуществить подписание возможно будет только с сертификатом работника указанного в certificateThumbprint из текущего запроса. Если true, то обязательно наличие certificateThumbprint, иначе возвращается ошибка.
Если
|
| firstTouchCertificateThumbprint | boolean | нет | Фильтр по сертификату из запросов на POST /sep/api/signing ранее направленных для проставления простой электронной подписи. НЕ РЕАЛИЗОВАН. |
* должен быть передан один из идентификаторов. **Либо trackingIds либо параметры.
Примеры запросов
POST https://b2b-demo.n3health.ru/sep/mis/api/initbatchqes Authorization: 53656afd-0e84-77dd-5555-9de51d0aa920 X-Id-Lpu: 1234937e-bla4-707d-abcd-3ce6df2bf6fe Content-Type: application/json {
Примеры запросов
// 1. Подписание конкретных отправлений по trackingIds с авто-выбором сертификата { "trackingIds": [ "8da15c45-3b27-8727-77dd-9de51d0aa920", "a1b2c3d4-5e6f-7890-abcd-ef1234567890" ], "certificateThumbprint": "A1B2C3..." }
// 2. Подписание всех отправлений работника за период (статус 214)
{
"practitioner": {
"snils": "12345678990"
},
"dateFrom": "2025-03-01",
"dateTo": "2025-03-20"
}
// 3. Подписание отправлений работника за период с указанием статусов
{
"practitioner": {
"userIdLpu": "doc-12345"
},
"dateFrom": "2025-03-01",
"dateTo": "2025-03-20",
"statuses": ["210", "214"]
}
// 4. Фильтрация отправлений по работнику + обязательный сертификат этого же работника
{
"practitioner": {
"snils": "12345678990"
},
"dateFrom": "2025-03-01",
"dateTo": "2025-03-20",
"statuses": ["214"],
"onlyPractitioner": true,
"onlyPractitionerCertificateThumbprint": true,
"certificateThumbprint": "A1B2C3..."
}
Примеры ответов
Успешный ответ (200 OK)
{
"success": true,
"message": "Сессия подписания создана",
"batchQesLink": "https://sep.mila.online/sep/mis/qes/addbatchqes?trackingId=96c6a822-7cc2-4ed9-9ba6-c60b4a468e03&thumbprint=A1B2C3...&onlyPractitioner=true&onlyPractitionerCertificateThumbprint=true"
}
Ошибка: не передан ни trackingIds, ни practitioner (400 Bad Request)
{ "error": "Недостаточно параметров", "message": "Необходимо указать trackingIds или practitioner (snils/userIdLpu)" }
Ошибка: не переданы обязательные параметры (400 Bad Request)
{
"error": "Недостаточно параметров",
"message": "onlyPractitionerCertificateThumbprint = true, а certificateThumbprint отсутствует. Для принудительного выбора сертификата необходимо передать certificateThumbprint"
}
Ошибка: работник не найден (404 Not Found)
{ "error": "Practitioner not found", "message": "Работник с указанным snils=12345678990 не найден" }
Ошибка: некорректный формат даты (400 Bad Request)
{ "error": "Invalid date format", "message": "dateFrom должен быть в формате YYYY-MM-DD" }
Примечания
-
Если указан
trackingIds, остальные параметры игнорируются. -
Если
trackingIdsне указан, обязательно должен быть заданpractitioner(черезsnilsилиuserIdLpu). -
Без явного указания
statusesподбираются отправления только в статусе214(ожидают подписания КЭП). -
После получения
batchQesLinkнеобходимо открыть её в браузере с установленным КриптоПро плагином и настроенным сертификатом.
МЕТОДЫ GET
Методы предназначены для получения списка отправлений по организации и пациенту или получения конкретного отправления по его трекинг — ID в системе СЭП.
ЭНДПОИНТ: https://b2b-demo.n3health.ru/sep/api/
Заголовки запроса
| Authorization | string | Да | Токен доступа СЭП | 44556afd-0e84-b847-2322-75999668f590 |
| X-Id-Lpu | string | Да | Идентификатор МО (из регионального справочника) | 0453937e-fad5-402d-aacb-3ce6df2bf6fe |
1. Списочные методы
GET /signing (без параметров)
Получение списка отправлений по query параметрам.
Списочный метод, возвращает все подписания для указанного пользователя через query параметры. Например idPatientMis (id-пациента из информационной системы, который ранее был передан вместе с данными пациента) с указанием пагинации, метод возвращает помимо прочего — {trackingId} отправления.
Параметры запроса:
Если направить запрос без параметров, то вернётся весь перечень отправлений по организации в соответствии с заголовком X-Id-Lpu.
Пример запроса:
Параметры запроса: Без параметров
GET /sep/api/signing Authorization: 44556afd-0e84-b847-2322-75999668f590 X-Id-Lpu: 0453937e-fad5-402d-aacb-3ce6df2bf6fe
Получение отправлений по ID пациента из внешней системы
GET /signing?idPatientMis={id}
Параметры запроса:
| idPatientMis | string | Query | Да |
ID пациента из внешней системы (например в МИС обязателен при отправке на подпись в post) |
123e4567-e89b-12d3-a456-426614174000 |
Пример запроса:
GET /sep/api/signing?idPatientMis=123e4567-e89b-12d3-a456-426614174000 Authorization: 44556afd-0e84-b847-2322-75999668f590 X-Id-Lpu: 0453937e-fad5-402d-aacb-3ce6df2bf6fe
Query-параметры:
| idPatientMis | string | Условно | Уникальный идентификатор пациента в МИС | 1Сmed1235A_6 |
| familyName | string | Условно | Фамилия пациента | Иванов |
| givenName | string | Условно | Имя пациента (только с familyName) | Павел |
| middleName | string | Условно | Отчество пациента (только с familyName и givenName) | Святославович |
| string | Условно | Email пациента | examplename@anydomain.net | |
| telephone | string | Условно | Телефон пациента | 79262119529 |
| limit | number | Нет | Количество элементов (1-50) | 50 |
| offset | number | Нет | Смещение | 0 |
Примеры запросов:
# Поиск по idPatientMis GET /signing?idPatientMis=Красносолнышкин # Поиск по фамилии GET /signing?familyName=Красносолнышкин # Поиск по ФИО GET /signing?familyName=Иванов&givenName=Павел&middleName=Святославович # Поиск по контактным данным GET /signing?email=examplename@anydomain.net GET /signing?telephone=79262119529 # Комбинированный поиск GET /signing?familyName=Иванов&givenName=Павел&telephone=79262119529 # С пагинацией GET /signing?familyName=Иванов&limit=20&offset=40
Формат ответа для списочных методов (200 OK):
"data": [
{
"id": "660b3057-a0dc-4be1-a309-5cd730bf6bf3",
"status": {
"code": 208,
"name": "Успешно. Подписан всеми - обработка",
"message": "Успешно. Подписан всеми - обработка",
"description": "Успешно. Подписан всеми - обработка"
},
"updatedAt": "2025-11-10T14:24:42.604Z",
"practitioner": {
"userIdLpu": "doc-123",
"status": {
"code": 204,
"description": "Получатель подписал документ"
}
},
"patients": [
{
"idPatientMis": "",
"status": {
"code": 204,
"description": "Получатель подписал документ"
}
}
]
},
{
"id": "2eb002f0-5e9e-4ddd-886e-b5c3bcccdb28",
"status": {
"code": 208,
"name": "Успешно. Подписан всеми - обработка",
"message": "Успешно. Подписан всеми - обработка",
"description": "Успешно. Подписан всеми - обработка"
},
"updatedAt": "2025-11-10T12:16:43.420Z",
"practitioner": {
"userIdLpu": "doc-123",
"status": {
"code": 204,
"description": "Получатель подписал документ"
}
},
"patients": [
{
"idPatientMis": "",
"status": {
"code": 204,
"description": "Получатель подписал документ"
}
}
]
}
]
2. МЕТОД: GET /signing/{trackingId}
Получение подписания по трекинг ID отправления СЭП.
Метод получения конкретного отправления. Возвращает одно конкретное подписание с PDF вложением комплекта документов и визуализацией подписи.
Параметры запроса:
|
Параметр |
Тип |
Расположение |
Обязательность |
Описание |
Пример значения |
|
trackingId |
string |
URL (path) |
Да |
это возвращаемый при направлении документа на подпись в ответ на запрос о подписании или при выполнении списочного метода |
a1b2c3d4-5678-90ef-1234-567890abcdef |
Пример запроса:
Host: b2b-demo.n3health.ru
Authorization: 44556afd-0e84-b847-2322-75999668f590
X-Id-Lpu: 12346afd-0e84-b847-2322-75999668f500a
GET /sep/api/signing/a1b2c3d4-5678-90ef-1234-567890abcdef
формат ответа GET /signing/{id} (200 OK):
{
"data": {
"id": "2eb002f0-5e9e-4ddd-886e-b5c3bcbbdb28",
"status": "210",
"createdAt": "2025-11-10T12:15:27.787Z",
"cdaId": "...",
"documentSource": "s3",
"qesStatus": {
"signedAt": "2026-02-24T10:21:57.320Z",
"iemkSaved": "pending",
"thumbprint": "023B6DEE3B71848A3C6DACF993EFD7332B8E23EC",
"certificateSubject": "CN=...",
"certificateSerialNumber": "133E5FE6110BB240B99AB9123B00AF89D3"
},
"practitioner": {
"mrProxyNumber": "10-test-223",
"familyName": "Иванов",
"givenName": "Иван",
"middleName": "Иванович",
"userIdLpu": "doc-123",
"status": {
"code": 204,
"description": "Получатель подписал документ"
}
},
"patients": [
{
"idPatientMis": "sepTestProd07102025",
"familyName": "Виноградов",
"givenName": "Вячеслав",
"middleName": "Александрович",
"status": {
"code": 204,
"description": "Получатель подписал документ"
}
}
],
"medDocument": {
"attachments": [
{
"content": "JVB...."
}
],
"sign": "base64_подписи_КЭП..."
}
}
}
Ошибки
| 400 | Bad Request | Неверный формат UUID. |
| 401 | Unauthorized | Отсутствует/недействительный токен. |
| 404 | Not Found |
Для /signing/{id}: «Подписание с указанным ID не найдено» |
| 404 | Not Found | Для /signing: «Документы для указанного пациента (idPatientMis) в данной МО (idLpu) не найдены» |
{
«error»: {
«code»: «invalid_uuid»,
«message»: «Неправильный формат UUID»
}
}
{
«error»: {
«code»: «signing_not_found»,
«message»: «Подписание с ID a1b2c3d4-… не найдено»
}
}