dana-medical-site/docs/onec-autonomous.md

6.0 KiB
Raw Permalink Blame History

Автономная интеграция 1С

1С сама вызывает HTTPS API сайта; API не вызывает bridge или MCP. Запуск RunOneCSync удален, обратные сетевые вызовы создания, привязки и отмены из API удалены. Настройка ONEC_WEBHOOK_KEY включает автономный режим; Compose очищает старые ONEC_API_URL, ONEC_MCP_URL, ONEC_MCP_TOKEN в контейнере.

Контракт

  • POST /api/v1/onec/sync/all: полный снимок branches, doctors, services, slots, диапазон from/to. Пустое расписание очищает горизонт; успешный прием обновляет свежесть Push. При дубликатах слота busy имеет приоритет. Для совместимости снимок старого отправителя без границ принимает диапазон входящих слотов.
  • GET /api/v1/onec/appointments/pending: data.appointments, data.commands, data.sync_requested. Начало передается со смещением Москвы, включая комментарий и дату рождения, если они были указаны пользователем.
  • POST /api/v1/onec/appointments/{id}/confirm: UUID документа и окончание приема. Повтор с тем же UUID безопасен, несовместимое подтверждение/отказ после создания дает 409.
  • POST /api/v1/onec/appointments/{id}/reject: причина отказа, перевод в заявку оператору, если настроен CRM-контур.
  • POST /api/v1/onec/events: события статуса и запроса нового Push. Обратных HTTP-вызовов нет; устаревший booked не возвращает отмененную заявку. Изменение времени переносит интервал локальной занятости.
  • POST /api/v1/onec/commands/{id}/ack: {success:true} либо {success:false,error:"..."}. Неуспешная команда остается доступной. Типы команд: link_bitrix, link_crm, cancel. Отмена остается cancel_pending и занимает интервал до ACK 1С. После ACK просроченной записи отдельный повторяемый шаг закрывает лид Б24.

Все методы защищены ключом 1С. Привязка Б24 сохраняется долговечно и повторяется, даже если первый обмен после получения ID не удался. Создание самого лида Б24 остается существующим REST-клиентом; отдельная сделка не гарантируется одним наличием лида.

Занятость и повторы

BeginOnecAppointment блокирует ключ запроса и врача через PostgreSQL advisory locks; выбор свободного окна и вставка pending выполняются в одной транзакции. Публичные свободные окна исключают пересечения с pending/booked/arrived по врачу, включая другие филиалы. Это правило действует и после следующего снимка, содержащего free. Заявки, отсеянные защитой от ботов, сразу сохраняются как failed для оператора и никогда не попадают в Pull-создание.

Миграция 0027_onec_autonomous.sql добавляет комментарий/дату рождения в очередь, таблицы состояния Push и команд. Она не удаляет клинические данные и совместима со старым API при возврате образа. Перед применением нужен серверный pg_dump и сохраненный предыдущий образ.

Приемка

Проверки запускаются на Linux в отдельной временной PostgreSQL:

DANA_AUTONOMY_TEST_DSN=postgres://postgres:TEST_PASSWORD@127.0.0.1:5432/dana_autonomy_test?sslmode=disable go test -p 1 -count=1 ./...
go vet ./...

DSN должен указывать исключительно на временную тестовую базу. В сценариях проверяются публичный POST → pending, скрытие зарезервированного времени после Push, 12 конкурирующих запросов, повторный ключ, callbacks/409, запрос снимка, долговечные команды, ACK/повтор ACK и очистка пустого горизонта. Тесты не доказывают исполнение BSL на платформе 1С.

Обновление 1С: пять общих модулей ДМ_СайтAPI, ДМ_СайтРасписание, ДМ_СайтЗапись, ДМ_СайтХуки, ДМ_СайтПодписки из пакета в проекте config_dump. Нужны проверка на Test, обновление UMC и новый сквозной тест после загрузки. Резервный входящий HTTP-сервис 1С не нужен этому маршруту.

После проверки здоровья API deploy.sh останавливает только контейнер dana-1c-bridge и снимает его автозапуск. Сохраняются DB/media и общий Caddy. Откат: предыдущий образ и прежний Compose из серверного каталога rollback; bridge запускается вручную только если возвращен прежний режим.