#Launch: запуск из МИС
Launch — это кнопка «Smartica» в карточке конкретного приёма. Врач нажимает её, попадает в Smartica уже авторизованным, записывает разговор — и заполненный протокол возвращается в тот же самый приём.
Это основной сценарий для врачей, которые работают за компьютером с открытой МИС. Если запись начинается вне МИС — с телефона, на выезде, — вам нужен Import: импорт из Smartica.
Эта статья описывает поток целиком. Технические детали каждого запроса — в отдельных статьях, ссылки по тексту.
#Что должна сделать кнопка
Главное правило: кнопка не ведёт на Smartica напрямую. Она обращается к вашему бэкенду, а тот уже к нам.
Так сделано не из вредности. Для получения ссылки нужен секретный ключ клиники, и если положить его в JavaScript, его увидит любой, кто откроет исходный код страницы. Кроме того, только ваш бэкенд может достоверно сказать, какой врач сейчас работает и имеет ли он доступ к этому приёму.
Правильный поток:
- Фронтенд передаёт бэкенду только внутренний ID приёма. Ничего больше.
- Бэкенд проверяет, что текущий врач действительно имеет доступ к этому приёму.
- Бэкенд сам достаёт
user_emailиuser_full_nameиз своей базы. - Бэкенд запрашивает у Smartica одноразовую ссылку, авторизуясь ключом клиники.
- Бэкенд отвечает браузеру редиректом
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, там описан тот же механизм.
#Что происходит при первом открытии приёма
- Smartica авторизует врача по одноразовому токену: находит существующий аккаунт или создаёт новый по email и ФИО.
- Токен убирается из адресной строки редиректом на чистый адрес, чтобы не остался в истории браузера.
- Для приёма создаётся связанная запись.
- Smartica запрашивает контекст приёма, если поля не были переданы заранее.
- Полученные
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 после регистрации подключения.
#Связанные статьи
- Launch URL и SSO — как получить ссылку и все коды ошибок
- GET: контекст приёма — что вернуть на запрос контекста
- PUT: запись протокола — как принять результат
- Import: импорт из Smartica — второй сценарий
- Диагностика: если что-то не работает