Сервис электронной подписи

Сервис «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

Hostb2b-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
.pdf applicatiapplication/pdfon/pdf
.odt application/vnd.oasis.opendocument.text

6. Доставка (delivery)

Поле Тип Обязательность Описание
delivery array Обязательно

Способы доставки: 
• «sms» 
• «max»
• «mila» 


Важные примечания:

  1. Для полиса ДМС (idDocumentType: 240) обязательно указать второй документ (например, паспорт). Предпочтительнее паспорт.
  2. Если esiaAuth: true, пациент должен авторизоваться через ЕСИА для подписи.
  3. Все даты — в формате 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 не существует» }

Важные примечания

  1. Формат IdPatientMis: Параметр передается как массив строк для поддержки будущей функциональности отправки уведомлений нескольким пациентам по одному отправлению.

  2. Соответствие ID: IdPatientMis должен соответствовать тому, который был указан при первоначальной отправке документа.

  3. Окружения:

    • Тестовое (demo): https://b2b-demo.n3health.ru
    • Продакшен (production): https://b2b.n3health.ru

  4. Способы доставки: Доступные значения для поля delivery:

    • sms — SMS-сообщение

    • max — MAX-сообщение

    • mila — Mila-сообщение

    • goskey — Goskey-сообщение

  5. Таймауты: Рекомендуемый таймаут для запроса — 30 секунд.

  6. Логика биллинга на текущий момент. Если ранее было отправлено не СМС, то отправление снимается тарификации, создается новая биллинговая запись с новым указанными типом. Если СМС, то тарификация по факту отправки.

Будущие обновления

  • Множественная отправка: В ближайших обновлениях будет реализована возможность отправки уведомлений нескольким пациентам по одному отправлению. Для этого массив 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    
  • Тип: string

  • Обязательность: Нет

  • Описание: Отпечаток (thumbprint) сертификата КЭП врача в формате HEX (например, A1B2C3D4E5F6…). Если указан и сертификат с таким отпечатком найден в системе пользователя, он будет автоматически выбран в процессе подписания. Пользователь сохраняет возможность выбрать другой сертификат вручную

 

Пример запроса

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…). Если указан и сертификат с таким отпечатком найден в системе пользователя, он будет автоматически выбран в процессе подписания. Пользователь сохраняет возможность выбрать другой сертификат вручную. Не является фильтром по сертификату. Без других параметров указывается с целью автоматического выбора сертификата на странице подписания для удобства пользователя.

*Если onlyPractitionerCertificateThumbprint = true то certificateThumbprint обязателен

practitioner object

Да**

Данные работника, инициирующего запрос по API важно в текущей редакции — не является фильтром по работнику!  

** должен быть передан один из идентификаторов: practitioner.snils | practitioner.userIdLpu

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 нет

Включает фильтр по работнику (practitioner)
Если true, из всех отобранных отправлений (по параметрам dateFrom/dateTo/statuses) будут включены в сессию только те, которые принадлежат указанному работнику (practitioner) который был указан в запросе на отправку ПЭП в адрес пациента ранее.

По умолчанию false.
При указании конкретных trackingIds — onlyPractitioner также игнорируется как и остальные параметры. 

onlyPractitionerCertificateThumbprint  boolean нет Фильтр по сертификату из текущего запроса (certificateThumbprint)
Если указан, то осуществить подписание возможно будет только с сертификатом работника указанного в certificateThumbprint из текущего запроса.
Если true, то обязательно наличие certificateThumbprint, иначе возвращается ошибка.

  • Обязательно наличие certificateThumbprint и в интерфейсе подписания пользователь не сможет выбрать отличный сертификат  от переданного в запросе.

Если onlyPractitionerCertificateThumbprint = false или не указан:

  • пользователь может выбрать любой сертификат (certificateThumbprint) из доступных в момент инициации подписания в локальном хранилище.

    важно onlyPractitionerCertificateThumbprint  - не игнорируется если передан массив trackingId

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) Святославович
email 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-… не найдено»
  }
}