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

Крупный речной оператор (анонимно) Один из крупнейших речных операторов РФ. Десятки тысяч пассажиров/сезон, обязательная передача ПД в АЦБПДП согласно ПП РФ № 1208 Туризм / гос. интеграции / транспортная безопасность 2025-09 — 2026-05 (legacy на проде, миграция в Supabase идёт)
16
типов АЦБПДП документов
100%
успешных приёмок Минтрансом
≤30 мин
регламентная задержка ПД→АЦБПДП

Услуги

  • legacy-modernization
  • complex-systems
  • cybersecurity

Стек

  • КриптоПро CSP в Docker
  • Deno FTP-клиент
  • TypeScript
  • Supabase Edge Functions
  • Cron каждый час
  • HMAC SHA256
  • Supabase Vault
  • GOST 28147-89

Крупный речной оператор — туризм и транспортная безопасность. Интеграция с ЕГИС ОТБ Минтранса: 16 типов АЦБПДП документов, 100% успешных приёмок, регламентная задержка ПД→АЦБПДП ≤30 мин. 2025-09 — 2026-05. Предотвращён штраф до 20 млн ₽ и исключение из реестра перевозчиков.

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

Каждый пассажир должен попасть в АЦБПДП Минтранса не позже 30 минут от изменения данных в системе бронирования — таково требование ПП РФ № 1208. Реализовали оба уровня интеграции (отправка пакетов А+Б и дайджест квитанций об ошибках), прошли E2E-приёмку Минтрансом 1 мая 2026 года.

Контекст

Постановление Правительства № 1208 обязывает всех операторов пассажирских перевозок — водных, железнодорожных, авиа, автомобильных — передавать персональные данные пассажиров в централизованное хранилище АЦБПДП. С 1 ноября 2024 года неаттестованные автоматизированные рабочие места отключаются автоматически. Штраф за систематическую непередачу данных — до 20 млн ₽, плюс риск исключения из реестра допущенных перевозчиков.

Legacy-стек оператора (PHP 5.4) уже умел формировать XML по нужным форматам, однако всё, что касается FTP-транспорта с TLS, подписи через КриптоПро и разбора XML-квитанций об ошибках, требовало полной перестройки. Параллельно шла миграция на Supabase — перенос канала «как есть» в новый стек без потери production-функциональности стал критическим требованием.

Какие вызовы решены

Как подписывать XML через КриптоПро под Linux? КриптоПро CSP запущен в отдельном Docker-контейнере с поддержкой GOST 28147-89 и ГОСТ Р 34.10-2012 для XML-подписи. Сертификаты УКЭП хранятся в Supabase Vault — приватные ключи не попадают ни в переменные среды, ни в логи.

Как реализовать FTP-клиент с TLS на Deno? Supabase Edge Function выстраивает прямое TCP-соединение с поддержкой AUTH TLS и PROT P (зашифрованный data-канал). Параллельные загрузки ограничены тремя потоками — эмпирически найденный предел шлюза Минтранса, при превышении которого шлюз начинает отклонять соединения.

Как парсить XML-квитанции с classifyFault? TypeScript-парсер classifyFault разбивает ответы Минтранса на три категории: personal — ошибки в данных конкретного пассажира (неверный формат паспорта, несоответствие ФИО), reference — несоответствие справочникам АЦБПДП (маршрут, тип транспортного средства), system — ошибки на стороне Минтранса (недоступность сервиса, временный отказ). Категория определяет маршрут уведомления и приоритет переотправки.

Как маршрутизировать ошибки автоматически? Ошибки категории personal уходят менеджеру тура (Telegram + ICQ-уведомление с расшифровкой поля и инструкцией по исправлению); reference — в справочный отдел для актуализации классификаторов; system — в ИТ. Порядок regex-категорий в pipeline фиксирован: reference проверяется перед personal, иначе часть ошибок ссылочных данных ложно попадает в персональные.

Как обеспечить идемпотентность переотправки без таблицы токенов? HMAC SHA256 от содержимого пакета с TTL 7 дней. Минтранс отклоняет повторную отправку пакета с тем же хешем в пределах окна — дублей не возникает, отдельная таблица токенов не нужна.

Как гарантировать, что cron не накапливает параллельные запуски? Distributed lock через Postgres advisory lock на именованном ресурсе mintrans_pull_lock. Если предыдущий запуск ещё обрабатывает квитанции — новый cron-тик пропускается полностью, без ошибки и без дублирования.

Как гарантировать корректность признака успешной переотправки? Критическое правило: признак success=2 ставится только при подтверждённой успешной переотправке от шлюза Минтранса. Автоматическое выставление по таймауту или отсутствию ошибок — запрещено. Нарушение этого правила приводит к тому, что система считает пакет доставленным, хотя он не прошёл, — это прямой путь к штрафу по ПП 1208.

Как поддерживать все 16 типов АЦБПДП документов? Generic XML-builder с 16 type-specific mappers. Для каждого типа — отдельный набор обязательных полей плюс legacy hard-rule: дата рождения пассажира присутствует во всех 16 типах без исключения, независимо от того, входит ли она в минимально необходимый набор по спецификации. Это правило выведено из реальных отказов на тестовом контуре и закреплено как инвариант.

Подход

  1. Edge Function mintrans-build-pack формирует АЦБПДП XML под каждый из 16 типов документов, применяет GOST 28147-89 шифрование содержимого пакета перед отправкой и передаёт на FTP-шлюз.
  2. Edge Function mintrans-pull-quittances по cron каждый час забирает XML-квитанции с FTP, вызывает pipeline parseAckXml → classifyFault → groupFaults → mapLineToTourist и записывает результат в БД.
  3. TypeScript pipeline разбора (parseAckXml / classifyFault / groupFaults / mapLineToTourist) — четыре чётко разделённых шага, каждый покрыт unit-тестами на реальных примерах ответов Минтранса.
  4. API route /api/mintrans/close принимает запрос на закрытие пакета, проверяет HMAC с TTL 7 дней и инициирует переотправку. Хранение токенов в отдельной таблице не требуется.
  5. Supabase Vault хранит FTP-credentials, приватные ключи УКЭП и SSL-сертификаты. Ни одно из этих значений не попадает в переменные среды контейнера или в логи.
  6. Legacy hard-rules сохранены в полном объёме: обязательность даты рождения, формат имён файлов (включая суффикс типа документа и временну́ю метку), порядок отправки пакета A перед пакетом Б.

Результат

  • 100% успешных приёмок production-Минтрансом за сезон 2026 года.
  • E2E-тест принят Минтрансом в мае 2026 года на production-контуре.
  • Регламентная задержка ≤30 минут соблюдается в штатном режиме.
  • Все 16 типов АЦБПДП документов поддержаны, включая редкие типы для нестандартных категорий пассажиров.
  • Автоматический дайджест ошибок устранил ручной разбор XML-квитанций.

Эффект для бизнеса

  • Штраф по ПП 1208 предотвращён. Без работающей интеграции оператор получает автоматическое отключение от АЦБПДП и риск исключения из реестра перевозчиков.
  • −1–2 ч/день — столько занимал ручной разбор XML-квитанций у менеджера. После внедрения дайджеста этот процесс полностью автоматизирован.
  • Gov-compliance сертифицирован — оператор подтверждён в реестре допущенных к перевозкам, аттестация АРМ в силе.
  • Стек готов к миграции в Supabase без потери production-функциональности: Edge Functions работают параллельно с legacy PHP, переключение прозрачное.

Что использовали

КриптоПро CSP в Docker (GOST 28147-89, ГОСТ Р 34.10-2012), Deno Edge Functions для FTP с TLS (AUTH TLS + PROT P), TypeScript pipeline (parseAckXml / classifyFault / groupFaults / mapLineToTourist), HMAC SHA256 для идемпотентности без хранения токенов, Supabase Vault для криптосредств и FTP-credentials, Postgres advisory locks для распределённых cron-локов, GOST 28147-89 для шифрования содержимого пакетов перед отправкой.

Что мы можем сделать у вас

Если у вашего бизнеса (водные, железнодорожные, авиа или автоперевозки) обязательная передача ПД в АЦБПДП — мы делаем интеграцию с ЕГИС ОТБ за 4–8 недель. Включая аттестацию АРМ силами лицензиата ФСТЭК + ФСБ. Написать нам

Часто задаваемые вопросы

Что такое ЕГИС ОТБ и зачем туда передаются данные?
ЕГИС ОТБ — Единая государственная информационная система обеспечения транспортной безопасности Минтранса. Перевозчики (водные, ж/д, авиа, автобусные) обязаны передавать ПД пассажиров в 16 типов АЦБПДП с задержкой ≤30 минут. Регулируется ПП РФ № 1208. Штраф за нарушение — до 20 млн ₽ на юрлицо.
Сколько занимает интеграция для речного оператора?
В этом кейсе — 6-9 месяцев wall-time с учётом аттестации АРМ ФСТЭК, КриптоПро CSP в Docker, разработки 16 типов АЦБПДП-документов и приёмочных тестов с Минтрансом. На сегодня — 100% успешных приёмок Минтрансом, регулярная передача в регламентные 30 минут.
Можно ли использовать агрегатор вместо прямой интеграции?
Можно. Агрегаторы (Транспортная Безопасность РФ, ТКП) принимают на себя интеграцию и переподписывают ответственность. Стоимость — 1-3% от стоимости билетов. Прямая интеграция окупается при объёмах от ~10 тысяч пассажиров/сезон: у клиента десятки тысяч пассажиров/сезон, выбор очевиден.
Какие риски проекта?
КриптоПро CSP в Docker — нетривиальная упаковка, требует custom-сборки. УКЭП квалифицированный — годичная лицензия и зависимость от УЦ. Минтранс меняет регламенты ~1-2 раза/год, нужна поддержка. Тестовый контур нестабилен, что осложняет regression-тестирование. Аттестация ФСТЭК требуется при ПДн III класса.

Похожая задача?

Расскажите контекст — подскажу, что и как делать.

Обсудить похожий проект →