#PUT: запись протокола
Этот endpoint реализует ваша МИС. Smartica вызывает его асинхронно после подготовки полной стенограммы и значений полей.
Используется метод PUT. POST и PATCH текущим адаптером не вызываются.
#Запрос Smartica
PUT /api/smartica/encounters/12345 HTTP/1.1
Host: mis.example.ru
Authorization: Basic <base64(login:password)>
Content-Type: application/json; charset=utf-8
Accept: application/json
{
"encounter_id": "12345",
"fields": [
{
"id": "complaints",
"value": "Жалобы на головную боль..."
},
{
"id": "diagnosis_primary",
"value": "Гипертоническая болезнь I ст."
}
],
"transcript": "Полная стенограмма разговора врача и пациента..."
}
| Поле | Обязательно | Тип | Описание |
|---|---|---|---|
encounter_id |
да | string | ID приёма из SSO, URL и GET |
fields |
да | array | Поля, для которых Smartica получила содержательные значения; массив может быть пустым |
fields[].id |
да | string | Точный id, ранее полученный в GET |
fields[].value |
да | string | Непустое текстовое значение поля |
transcript |
да | string | Непустая полная объединённая стенограмма |
audio не входит в текущий payload.
#Семантика обновления
Обрабатывайте запрос как upsert существующего приёма по encounter_id:
- Найдите карточку приёма по ID из URL.
- Убедитесь, что
encounter_idв JSON совпадает с URL. - Для каждого элемента
fieldsобновите поле с такимid. - Поля, отсутствующие в массиве, не очищайте.
- Сохраните
transcriptкак актуальную полную версию, заменив предыдущую. - Зафиксируйте результат в одной транзакции, если это поддерживает МИС.
Smartica не отправляет поля без содержательных данных. Значения "", "не указано" и "отсутствует" отбрасываются, поэтому fields: [] является валидным запросом: стенограмму всё равно нужно сохранить.
value может содержать переводы строк и Markdown-списки. Сохраняйте Unicode и многострочный текст без потери. Если МИС отображает HTML, экранируйте или санитизируйте значение на своей стороне.
#Идемпотентность
Отдельного Idempotency-Key в текущем контракте нет. Ключ операции — encounter_id.
Одинаковый PUT может прийти повторно:
- после ручного повтора врачом;
- после повторной записи в том же приёме;
- после повторной генерации результата;
- после изменения механизма доставки в будущих версиях.
Требуемое поведение:
- одинаковый payload не создаёт новую карточку, протокол или вложение;
- изменённые переданные поля обновляются;
- стенограмма заменяется полной версией из последнего успешного запроса;
- ответ остаётся успешным, если данные уже сохранены.
Не рассчитывайте на exactly-once доставку.
#Успешный ответ
Верните 200 OK и JSON-объект:
{
"encounter_id": "12345",
"status": "saved"
}
Smartica проверяет успешный HTTP-код и наличие валидного JSON. Значения полей ответа сейчас не используются, но рекомендуемый формат облегчает диагностику.
Не возвращайте:
204 No Content;- пустое тело;
- HTML-страницу;
- текст, который не декодируется как JSON.
#Ошибки
Для ошибки верните подходящий non-2xx и безопасный JSON:
{
"message": "Приём закрыт для изменения"
}
| Код | Когда использовать |
|---|---|
400 |
Тело не является корректным запросом |
401 |
Неверные credentials |
403 |
Запись в этот ресурс запрещена |
404 |
Приём не найден |
409 |
Текущее состояние приёма не допускает обновление |
422 |
Ошибка полей payload |
5xx |
Временная ошибка МИС |
При non-2xx, timeout или невалидном JSON отправка помечается ошибкой. Врач может повторить её из Smartica. Автоматический сетевой retry для каждого 5xx не гарантирован.
Не возвращайте в message stack trace, SQL, credentials или внутренние сведения о пациенте.
#Проверка через curl
curl --fail-with-body --silent --show-error \
--request PUT \
--user 'LOGIN:PASSWORD' \
--header 'Content-Type: application/json; charset=utf-8' \
--header 'Accept: application/json' \
--data '{
"encounter_id": "12345",
"fields": [
{
"id": "complaints",
"value": "Тестовые жалобы"
},
{
"id": "diagnosis_primary",
"value": "Тестовый диагноз"
}
],
"transcript": "Тестовая стенограмма..."
}' \
'https://mis.example.ru/api/smartica/encounters/12345'
Выполните команду дважды и проверьте, что в МИС остался один обновлённый приём.
#Аудиофайл
Аудиозапись не передаётся в текущем GET/PUT-контракте. Если она нужна вашей МИС, согласуйте отдельное расширение при онбординге; не добавляйте поле audio в базовый payload самостоятельно.