ЕГИС ОТБ для речных круизов: интеграция АЦБПДП с задержкой ≤30 минут

Веб Штурм
  • ЕГИС ОТБ
  • АЦБПДП
  • транспортная безопасность
  • 152-ФЗ
  • Минтранс
  • интеграции

ЕГИС ОТБ — Единая Государственная Информационная Система Обеспечения Транспортной Безопасности — обязательный канал передачи персональных данных пассажиров и экипажа в АЦБПДП Минтранса для всех видов пассажирских перевозок. Регламентная задержка — не более 30 минут от изменения данных в системе бронирования до их появления в централизованной базе.

Что такое ЕГИС ОТБ и кому это касается

Полная расшифровка: Единая Государственная Информационная Система Обеспечения Транспортной Безопасности. Цель — учёт и контроль персональных данных пассажиров и экипажа транспортных средств в интересах антитеррористической защищённости (Постановление Правительства РФ № 1208).

Кто обязан передавать данные:

Куда уходят данные: в АЦБПДП (Автоматизированные централизованные базы персональных данных о пассажирах и персонале) — единое хранилище Минтранса, к которому имеют доступ силовые ведомства.

Нормативная база

ДокументЧто регулирует
Постановление Правительства РФ № 1208Порядок и требования к передаче ПД пассажиров
TU IVpostinfMoRe v13Технический регламент взаимодействия систем
Requirements ACDPDP MORE rusТребования к структуре передаваемых данных
Руководство по API в4.1Текущая версия протокола взаимодействия
152-ФЗЗащита персональных данных пассажиров и экипажа

АЦБПДП — технические требования

Архитектура нашей интеграции

Реализована production-интеграция для крупного оператора речных круизов. Стек:

Этапы внедрения (6 месяцев)

ЭтапСрокиСодержание
Инфраструктура01.12.2025 — 31.12.2025Получение mTLS-сертификатов, настройка шлюзов FTP+REST, тестовый стенд
Ядро системы01.01.2026 — 31.01.2026Схема БД, валидация ПД на стороне приложения, очереди и retry-логика
Интеграции01.02.2026 — 28.02.2026Подключение к АЦБПДП, smoke-тесты с тестовым контуром Минтранса
Тестирование01.05.2026 — 31.05.2026E2E с реальными бронями, нагрузочное, fault injection, сертификация

Workflow в коде (упрощённо)

// hermes-stack/egis-otb-worker/src/workflows/sync-passenger.ts
import { defineWorkflow } from '@hatchet-dev/typescript-sdk/v1';

export const syncPassengerToACDPDP = defineWorkflow(hatchet)
  .step('validate', async ({ input }) => {
    const errors = validatePD(input.passenger); // 152-ФЗ + personRef anonymization
    if (errors.length) throw new Error(`PD validation failed: ${errors.join(', ')}`);
    return { passenger: anonymize(input.passenger) };
  })
  .step('encode', async ({ parentOutput }) => {
    const csv = toUTF8CSV(parentOutput.passenger); // строго UTF-8 без BOM
    const encrypted = await zipAndEncrypt(csv, GOST_KEY); // ZIP + GOST 28147-89
    return { payload: encrypted };
  })
  .step('transmit', async ({ parentOutput }) => {
    // mTLS POST в АЦБПДП с idempotency-key = SHA256(passenger.id + version)
    const res = await acdpdp.send(parentOutput.payload, {
      mTLS: { cert: process.env.MTLS_CERT, key: process.env.MTLS_KEY },
      idempotencyKey: hash(input.passenger.id + input.version),
    });
    return { receipt: res.receiptId };
  })
  .step('persist', async ({ parentOutput }) => {
    // сохраняем receiptId в БД для аудита и поиска по запросу регулятора
    await db.acdpdpReceipts.insert({ receiptId: parentOutput.receipt, ... });
  });

Типовые нарушения и как мы их избежали

ПроблемаРешение
Превышение SLA 30 минут при пиковых нагрузкахPriority queue на Hatchet, выделенный worker pool на пиковые часы
Ошибки кодировки (cp1251 вместо UTF-8)Строгая валидация кодировки до отправки + fallback с явной перекодировкой
Ротация mTLS-сертификатов без даунтаймаCaddy auto-TLS + симлинк в /etc/ssl/private/egis-otb-current.pem
Дублирующие отправки при retryIdempotency-Key = SHA256(passenger.id + version)
Неконсистентность данных при отмене брониCompensating workflow: cancel-passenger отменяет ранее отправленную запись

Что мы из этого вынесли

Ссылки