#Launch: запуск из МИС

Launch — это кнопка «Smartica» в карточке конкретного приёма. Врач нажимает её, попадает в Smartica уже авторизованным, записывает разговор — и заполненный протокол возвращается в тот же самый приём.

Это основной сценарий для врачей, которые работают за компьютером с открытой МИС. Если запись начинается вне МИС — с телефона, на выезде, — вам нужен Import: импорт из Smartica.

Эта статья описывает поток целиком. Технические детали каждого запроса — в отдельных статьях, ссылки по тексту.

#Что должна сделать кнопка

Главное правило: кнопка не ведёт на Smartica напрямую. Она обращается к вашему бэкенду, а тот уже к нам.

Так сделано не из вредности. Для получения ссылки нужен секретный ключ клиники, и если положить его в JavaScript, его увидит любой, кто откроет исходный код страницы. Кроме того, только ваш бэкенд может достоверно сказать, какой врач сейчас работает и имеет ли он доступ к этому приёму.

Правильный поток:

  1. Фронтенд передаёт бэкенду только внутренний ID приёма. Ничего больше.
  2. Бэкенд проверяет, что текущий врач действительно имеет доступ к этому приёму.
  3. Бэкенд сам достаёт user_email и user_full_name из своей базы.
  4. Бэкенд запрашивает у Smartica одноразовую ссылку, авторизуясь ключом клиники.
  5. Бэкенд отвечает браузеру редиректом 302 на полученную ссылку либо возвращает её для открытия в новой вкладке.

Чего делать нельзя:

  • принимать email врача или platform из браузера без серверной проверки;
  • помещать ключ клиники в JavaScript, в конфиг фронтенда или в параметры страницы;
  • собирать ссылку для входа самостоятельно из кусочков;
  • сохранять ссылку и открывать её повторно.

#Последовательность запросов

Шаг Кто → кому Что происходит
1 Врач → МИС Нажимает «Smartica» в карточке приёма
2 Бэкенд МИС → Smartica Запрашивает одноразовую ссылку
3 Браузер → Smartica Открывает ссылку без изменений
4 Smartica → МИС Запрашивает контекст приёма через GET
5 Врач → Smartica Записывает разговор и останавливает запись
6 Smartica Расшифровывает и заполняет поля
7 Smartica → МИС Асинхронно отправляет PUT с результатом

Один и тот же encounter_id проходит через шаги 2, 4 и 7. Именно он связывает всё вместе.

Шаг 4 можно убрать: если передать template и fields прямо в запросе на шаге 2, Smartica возьмёт бланк оттуда и не станет обращаться к вашему GET. Как это сделать — в статье Launch URL и SSO.

Шаг 7 существует только при доставке push. При pull вы забираете результат сами — см. Import: импорт из Smartica, там описан тот же механизм.

#Что происходит при первом открытии приёма

  1. Smartica авторизует врача по одноразовому токену: находит существующий аккаунт или создаёт новый по email и ФИО.
  2. Токен убирается из адресной строки редиректом на чистый адрес, чтобы не остался в истории браузера.
  3. Для приёма создаётся связанная запись.
  4. Smartica запрашивает контекст приёма, если поля не были переданы заранее.
  5. Полученные template и fields закрепляются за этим приёмом.

Если GET недоступен или вернул невалидный JSON, подготовка завершается ошибкой и врач не сможет начать. Исправьте endpoint и попросите врача открыть приём заново.

#Что происходит при повторном запуске

Тот же encounter_id — значит, тот же приём. Не новый.

  • Врач возвращается в уже существующий приём в Smartica.
  • Простое открытие и закрытие без записи не порождает новый PUT.
  • Новая запись объединяется с предыдущей стенограммой, а не заменяет её.
  • После обработки Smartica отправляет PUT заново, уже с обновлёнными данными.
  • Тот же ID нельзя привязать к другому приёму или переиспользовать для новой карточки.

Отсюда следует главное требование к вашей стороне: PUT должен обновлять существующий протокол, а не создавать вторую запись. Подробнее — в статье PUT: запись протокола.

Это же означает, что врач может дописать приём после перерыва: вернуться по кнопке, записать продолжение, и в МИС приедет объединённый результат.

#Отправка результата асинхронна

После остановки записи расшифровка и заполнение выполняются не внутри браузерного запроса. Врач может закрыть вкладку или выключить компьютер — обработка продолжится на нашей стороне.

Статус отправки виден врачу в интерфейсе Smartica. Если отправка не удалась, там же есть кнопка повтора.

Автоматический повтор на каждую ошибку не гарантируется контрактом. Поэтому:

  • отвечайте на PUT в пределах согласованного timeout — сейчас это 30 секунд;
  • сделайте PUT идемпотентным;
  • не рассчитывайте на то, что запрос придёт ровно один раз.

Подробнее: Авторизация, ошибки и повторная доставка.

#Тестовое и рабочее окружения

Формат запросов в обоих окружениях одинаковый. Меняются только:

  • хосты;
  • секреты;
  • сетевые правила;
  • тестовые данные.

Используйте разные ключи для тестового и рабочего окружений. Это дешёвая страховка от того, чтобы тестовый прогон случайно записал данные в боевую карту.

Адреса обоих контуров и порядок перехода на рабочий — в статье Тестовая площадка.

Прямое открытие адреса запуска без токена допустимо только при локальной отладке, когда врач уже вошёл в Smartica вручную. На общем тестовом стенде и в рабочем окружении так делать нельзя — проверяйте именно тот поток, который пойдёт в продакшн.

#Сводка контрактов

Направление Метод Кто пишет код Назначение
МИС → Smartica POST на выданный SSO endpoint Smartica Получить одноразовую ссылку
Браузер → Smartica GET на полученную ссылку Smartica Авторизовать врача и открыть приём
Smartica → МИС GET /…/encounters/{id} Вы Отдать бланк и поля
Smartica → МИС PUT /…/encounters/{id} Вы Принять поля и стенограмму

Адреса на вашей стороне выбираете вы и согласовываете при подключении. platform и точный SSO endpoint выдаёт Smartica после регистрации подключения.

#Связанные статьи

← Все статьи: Интеграция с МИС Поиск по базе знаний