Минтранс ГИС ЭП: что важно знать к обязательности 1 сентября 2026
- Минтранс
- ГИС ЭП
- ЭПД
- 152-ФЗ
- интеграция
- compliance
Электронные перевозочные документы (ЭПД) становятся обязательными для всех грузо- и пассажирских перевозок в РФ с 1 сентября 2026 года. Минтранс уже выделил 152 млн ₽ на модернизацию ГИС ЭП в 2026 году. Те, кто не интегрируются вовремя, получают двойной риск: блокировка работы + штрафы 152-ФЗ за нарушение порядка передачи ПД пассажиров. Делимся реальным опытом интеграции для крупного речного круизного оператора.
Контекст
ГИС ЭП — государственная информационная система электронных перевозочных документов Минтранса. Туроператоры круизных и прогулочных рейсов обязаны передавать туда списки пассажиров с персональными данными до отправки. Формат — CSV-пакеты со строгой структурой, шифрование ГОСТ 28147-89, отправка через FTP, асинхронные XML-квитанции о приёме/отказе.
Параллельно действует 152-ФЗ: те же ПД, но с ограничениями на обработку, передачу третьим лицам, хранение. Между двумя законами нужно пройти, не нарушив ни одного.
Архитектура нашей интеграции
В Круизном флоте (K:/webshturm/germes-frontend/frontend/) интеграция с ГИС ЭП реализована как отдельный pipeline:
[оператор → заявка с ПД пассажиров]
↓
[анонимизатор ФИО → personRef «Имя Отчество Ф.»] ← email-уведомления только так
↓
[CSV-формирователь по схеме АЦБПДП]
↓
[ZIP + GOST 28147-89 шифрование через КриптоПро CSP]
↓
[FTP push → quittance email от Минтранса]
↓
[XML-парсер квитанций → 10 категорий ошибок]
↓
[email-маршрутизация: менеджеру / бухгалтеру / Telegram critical-alert]
Каждый этап решает один тип проблем. Связка такая, потому что любое смешивание (например, отправка с полными ФИО в Telegram) — нарушение 152-ФЗ.
Анонимизация на источнике
Главный принцип: ПД проходят минимальное число точек обработки. Email-уведомления никогда не содержат полных ФИО клиентов — только «personRef» вида Иванов Иван И..
function toPersonRef(fio: string): string {
// "Иванов Иван Иванович" → "Иванов Иван И."
const parts = fio.trim().split(/\s+/);
if (parts.length < 3) return fio;
return `${parts[0]} ${parts[1]} ${parts[2][0]}.`;
}
В админке менеджер видит полные ФИО (для исправления заявки). В письмах, чатах, логах — только personRef. Сами ФИО лежат в одной таблице с RLS, доступ — только авторизованной роли.
CSV-пакеты по схеме АЦБПДП
АЦБПДП (Автоматизированный центр обработки персональных данных пассажиров) — оператор ГИС ЭП. Принимает строго типизированные CSV в кодировке Windows-1251. Любое отклонение — отказ всего пакета.
Шаблон строки (упрощённо):
last_name;first_name;middle_name;birth_date;doc_type;doc_series;doc_number;citizenship;tour_id;cabin_no
Иванов;Иван;Иванович;01.01.1980;01;4509;123456;643;TR2026-0042;A-12
Тонкие места:
doc_type— числовой код (паспорт РФ = 01, загранпаспорт = 03, свидетельство о рождении = 11). Текстовое значение = отказ.citizenship— числовой код страны по ОКСМ (РФ = 643). Не «RU», не «Россия».birth_date—DD.MM.YYYYчерез точку. Тире = отказ.- Кодировка Windows-1251, не UTF-8. БОМ запрещён.
В нашем pipeline это валидируется на этапе формирования CSV, а не на отправке — отказ ловится до того, как пакет ушёл в АЦБПДП.
Шифрование ZIP + ГОСТ 28147-89
АЦБПДП требует ZIP-архив, зашифрованный по ГОСТ 28147-89 через сертифицированное ПО (КриптоПро CSP). Бесплатных Python/Node-библиотек для этого нет — только официальный КриптоПро.
Решение — отдельный shell-скрипт, который вызывается из Node:
#!/bin/bash
# encrypt-package.sh
INPUT="$1"
OUTPUT="$2"
RECIPIENT_CERT="$3"
zip -j "$INPUT.zip" "$INPUT"
csptest -keyset -cont '\\.\HDIMAGE\PassengerCert' -keytype exchange
cryptcp -encr -cert "$RECIPIENT_CERT" "$INPUT.zip" "$OUTPUT"
rm "$INPUT.zip"
Запускается на отдельной Windows-VM (Hyper-V) с установленным КриптоПро CSP — на Linux это не работает.
Парсер XML-квитанций
После приёма АЦБПДП присылает XML-квитанцию по email (наш quittance@-ящик). Парсер раскладывает по 10 категориям ошибок:
const ERROR_CATEGORIES = {
'PD_INVALID': 'Невалидный паспорт',
'PD_FORMAT': 'Формат поля',
'PD_MISSING': 'Отсутствует обязательное поле',
'STAFF_INVALID': 'Экипаж — данные не заполнены',
'TOUR_NOT_FOUND': 'Тур не найден в реестре',
'CABIN_INVALID': 'Каюта не зарегистрирована',
// ...4 ещё
};
В одном прогоне (575 архивных квитанций за весь сезон) парсер автоматически разнёс по категориям все ошибки + отметил default unknown→IT для нестандартных случаев. Из этого формируется email-дайджест с 3 секциями:
- 🚨 Экипаж не заполнен (критично, отдельный Telegram-alert)
- Ошибки данных ПД (менеджеру с конкретным полем)
- Каюты без данных (менеджеру для дозаполнения)
В каждой строке дайджеста — close-button с HMAC close-token (TTL 7 дней) для повторной отправки исправленной квитанции без авторизации.
Реальный E2E-тест с prod-Минтрансом
01 мая 2026 года в 18:03 квитанция от АЦБПДП пришла со статусом «принято» — Уровень A нашего канала был задеплоен в 13:33 того же дня. От разработки до приёма реального prod-пакета — около 4.5 часов, включая отладку кодировки Windows-1251 и пары полей doc_type.
Что мы из этого вынесли
- Анонимизация в email/чатах/логах — не nice-to-have, а compliance. PersonRef «Иванов Иван И.» вместо полных ФИО ставится один раз в pipeline и закрывает 90% риска утечки.
- Валидация CSV до отправки — обязательна. Отказ от АЦБПДП — асинхронный, может вернуться через часы. Поймать ошибку до отправки экономит сутки на исправление.
- КриптоПро CSP не уйдёт никуда. ГИС ЭП требует именно его, ГОСТ-шифрование на open-source библиотеках в РФ юридически не признаётся.
Ссылки
- Минтранс — обязательные ЭПД с 1 сентября 2026 — полный разбор изменений
- CNews — Минтранс модернизирует ГИС ЭП на 152 млн ₽ — публичный тендер
- КриптоПро CSP — официальная документация — единственный сертифицированный путь для ГОСТ-шифрования