# Внешние интеграции — адаптеры (заглушки с «местами под ключ») Единый паттерн: абстрактный адаптер (seam) + `stub` (по умолчанию) + `http` (скелет с местом под ключ). Драйвер выбирается переменной окружения; код приложения не меняется при подключении реального провайдера. | Интеграция | Seam (абстракция) | Stub | HTTP-скелет | env-переключатель | |---|---|---|---|---| | 1С:Университет | `integrations/onec/onec.adapter.ts` | `stub-onec.adapter.ts` | `http-onec.adapter.ts` | `ONEC_DRIVER=stub\|http` | | Эквайринг | `payments/acquiring/acquiring.provider.ts` | `stub-acquiring.provider.ts` | `http-acquiring.provider.ts` | `ACQUIRING_PROVIDER=stub\|` | > **МВД — интеграции нет и не планируется.** Миграционный/визовый учёт ведёт ДМС вручную в кабинете > (создание и обновление визовых записей сотрудником — разделы «Виза и миграционный учёт»). > Соответствующий адаптер и эндпоинт удалены. Выбор драйвера — в `integrations.module.ts` и `payments.module.ts` через `useFactory` по env. Статус всех интеграций: `GET /api/v1/admin/integrations/status` (роль admin). ## Как подключить реальный провайдер 1. Заполнить env (см. `.env.example`): - 1С: `ONEC_DRIVER=http`, `ONEC_BASE_URL`, `ONEC_TOKEN`. - Эквайринг: `ACQUIRING_PROVIDER=`, `ACQUIRING_BASE_URL`, `ACQUIRING_TERMINAL`, `ACQUIRING_SECRET`. 2. Реализовать TODO-места в соответствующем `http-*` файле: - **1С** `http-onec.adapter.ts` — `syncStudent` (выгрузка карточки, сохранить `external_id`/`synced_at`) и `pullStudents` (инкрементальная загрузка, upsert по `external_id`). Сейчас — заглушка. - **Эквайринг** `http-acquiring.provider.ts` — `createPayment` (вернуть `paymentUrl`+`externalId`) и `parseWebhook` (проверка подписи по `ACQUIRING_SECRET`, статус `paid`/`failed`). Вебхук уже принимается контроллером `payments/acquiring/acquiring-webhook.controller.ts`. 3. Секреты — из KMS/секрет-хранилища (не в файле). Структуру БД менять не требуется: задел на полях `external_id` / `source_system` / `synced_at`. Без шага 2 драйвер `http` отвечает `configured:false`/`TODO`, приложение остаётся стабильным. Платёжная квитанция формируется всегда (PDF, только русский) — см. `GET /payments/:id/receipt`, `payments/receipt.service.ts`; не зависит от эквайринга.