#Лимиты и ограничения
Все числовые ограничения контракта собраны здесь, чтобы не искать их по статьям. Значения приведены по умолчанию — для конкретного подключения их можно обсудить при онбординге.
#Форматы и длины полей
| Поле | Ограничение |
|---|---|
encounter_id |
Строка до 255 символов. Только цифры или UUID в форме 8-4-4-4-12 |
user_email |
Валидный email до 255 символов. Регистр не учитывается |
user_full_name |
Непустая строка до 255 символов |
template |
До 255 символов |
fields |
До 80 элементов в массиве |
fields[].id |
До 128 символов, непустой, уникальный внутри бланка |
fields[].label |
До 255 символов, непустой |
cursor |
До 512 символов |
Превышение любого из этих значений вернёт 422 с разбивкой по полям в объекте errors.
Уникальность fields[].id — единственное ограничение из таблицы, которое не приводит к 422. Если в бланке два поля с одним id, приём врача не срывается: мы берём первое вхождение, остальные пропускаем, а в ответе возвращаем предупреждение duplicate_field_id. Подробнее: Дубликаты id в бланке.
#Частота запросов к Smartica
Лимиты считаются на пару «клиника + ключ», в минуту.
| Запрос | Лимит |
|---|---|
| Получение SSO-ссылки | 30 в минуту |
| Список записей | 60 в минуту |
| Забор протокола, привязка, подтверждение | 120 в минуту |
Отдельно ограничены неудачные попытки авторизации — 30 в минуту на клинику. Если вы упёрлись в этот лимит, значит ключ неверен: перебор не поможет, проверьте секрет.
При превышении приходит 429 с заголовком Retry-After. Дождитесь указанного времени. Не запускайте цикл немедленных повторов — он только продлит блокировку.
#Как выбрать частоту опроса при pull
Лимит в 60 запросов к списку в минуту — это потолок, а не рекомендация. На практике достаточно опрашивать список статуса ready раз в 30–60 секунд на клинику. Заполнение протокола занимает от десятков секунд до нескольких минут, поэтому более частый опрос ничего не ускорит.
#Время жизни и задержки
| Что | Значение |
|---|---|
| Одноразовая ссылка для входа врача | 60 секунд |
| Задержка перед началом заполнения после остановки записи | около 5 секунд |
| Timeout запросов Smartica к вашей МИС | 30 секунд |
| Окно действия предыдущего ключа при ротации | 72 часа |
Время жизни ссылки приходит в поле expires_in ответа. Используйте значение из ответа, а не зашивайте 60 в код — так интеграция переживёт изменение настройки.
Timeout в 30 секунд — это верхний предел, за которым мы считаем запрос неуспешным, а не ориентир. Ваши GET и PUT должны отвечать за доли секунды: читать готовые данные и быстро сохранять payload. Тяжёлую обработку выполняйте после того, как надёжно приняли данные и ответили 200.
#Окно списка записей
| Что | Значение |
|---|---|
| Глубина списка по умолчанию | 30 дней |
Максимальная глубина через since |
90 дней |
| Размер страницы по умолчанию | 50 записей |
| Максимальный размер страницы | 100 записей |
Запрос с since глубже 90 дней вернёт 422. Записи старше этого окна через партнёрский API недоступны.
#Лимит перезаполнений
Один приём можно перезаполнить не более 10 раз. Счётчик растёт каждый раз, когда протокол генерируется заново, — например, когда врач дописывает приём.
При достижении лимита приём переходит в статус failed. Это защита от бесконечного цикла: в нормальной работе врач не приближается к этому числу.
#Ротация ключа
При выпуске нового API-ключа клиники предыдущий продолжает работать 72 часа. За это время пропишите новый ключ во всех окружениях вашей МИС.
После истечения окна старый ключ перестаёт действовать: SSO начнёт возвращать 401, а при pull протоколы перестанут забираться.
#Что не входит в контракт
| Что | Статус |
|---|---|
| Аудиофайл записи | Не передаётся. Нужен — согласуйте отдельное расширение |
| Персональные данные пациента | Не передаются и не должны передаваться |
Заголовок Idempotency-Key |
Не используется. Ключ операции — encounter_id |
| Массовая привязка нескольких записей одним запросом | Не поддерживается, только по одной |
| Отдельный запрос за списком бланков | Не нужен: бланк передаётся в теле запроса |
| Гарантированная повторная доставка на каждую ошибку | Не гарантируется, см. ниже |
| Гарантия ровно одной доставки | Не гарантируется, ваш PUT обязан быть идемпотентным |
#Повторная доставка
Контракт не гарантирует автоматический повтор каждого неуспешного запроса. Фактические способы повторения:
- после ошибки
GETврач заново открывает приём; - после ошибки
PUTврач нажимает повтор отправки в интерфейсе Smartica; - новая запись или перезаполнение в том же приёме порождает новый
PUT.
Отсюда два обязательных требования к вашей стороне: PUT должен быть идемпотентным по encounter_id, и МИС не должна рассчитывать на фиксированное число попыток.
Подробнее: Авторизация, ошибки и повторная доставка.
#Требования к вашему endpoint
| Требование | Обязательность |
|---|---|
| HTTPS с публично доверенным сертификатом | Обязательно |
Ответ 200 с валидным JSON-объектом |
Обязательно |
| Кодировка UTF-8, поддержка многострочного текста | Обязательно |
Ответ 204, пустое тело или HTML |
Считается ошибкой интеграции |
| Поддержка тела запроса в несколько мегабайт | Желательно: длинная стенограмма может быть объёмной |