Отчёт о работе · FuelProcessing

Топливный марафон

Три дня, 22–24 июня. Сводка по системе топливных карт: какие обращения поступили, что по ним сделано и чем всё закончилось. Формат — «что запрошено → что сделано».

5обращений отработано
6выкатов на прод
10поставщиков защищено
0потерь данных
Период 22.06 → 24.06.2026 · времена по Москве (МСК)
Для людейДля разработчиков →
Чтобы было понятно

О какой системе речь

FuelProcessing — система топливных карт. По каждой карте задан лимит: сколько топлива можно заправить. Лимиты хранятся у нас в базе и должны постоянно совпадать с личными кабинетами поставщиков топлива — ВИНК (Газпром нефть, Роснефть, Татнефть и др.). Если наша база и кабинет поставщика разъезжаются — карты начинают работать не так, как ждёт клиент. Почти все обращения этих трёх дней — именно про такие расхождения.

Карта водителя лимит на топливо FuelProcessing наша база — зеркало лимитов + синхронизация Кабинет ГПН Кабинет Роснефть Кабинет Татнефть синхронизация
Что приходило и что сделали

Пять обращений по порядку

Каждая история — поступивший запрос и что по нему сделано.

Роснефть · СТК-75

«Баланс пополнил, а лимиты слетели»

22 июня, вечер

ЗапросКлиент СТК‑75 (договор А1353): после пополнения баланса карты перестали работать. Поручено разобрать ситуацию по базе прода и логам.

ВыяснилиВ лимитах появились дубли — один и тот же лимит задвоился с противоречивыми значениями, плюс «фантомные» нулевые лимиты. Из‑за этого карты вели себя непредсказуемо.
СделаноОчередь Роснефти остановлена как «стоп‑кран» (обратимо), добавлена защита в код, обновлён прод. Найден и устранён корень дублей, почищены фантомы.
ТребованиеОдни поставщики не должны останавливать других; решение — простое и надёжное «здесь и сейчас», без переусложнения.
ИтогДубли убраны, обработка разнесена по поставщикам — затык у одного больше не вешает остальных.
Роснефть · А1353

«Лимиты не срабатывают»

23 июня, утро

ЗапросЖалобы: лимиты не срабатывают по Роснефти (карта 7826…033) — требуется проверка. План работ: 1) не отправлять ошибочные нули; 2) логировать отправку лимитов; приоритет — договор А1353.

ВыяснилиСистема по ошибке отправляла поставщику «ноль» вместо реального лимита — карта переставала работать. В моменте расхождение затронуло до 93% карт Роснефти.
СделаноЧерез цикл с планированием выкачен «предохранитель»: ошибочный ноль больше не уходит. Проверено на 40 случайных картах.
КонтрольОценка времени починки и мониторинг каждые 20 минут с докладами по прогрессу.
ИтогПосле выката система сама выровняла лимиты, без ручных операций (~9 карт в минуту). Острая жалоба закрыта.
ГПН · Лайт Скай

«Стёрлись лимиты — нужно восстановление»

23 июня, день

ЗапросПо ООО «Лайт Скай» стёрлись лимиты ГПН — проверить наличие лимитов и подготовить восстановление. Дополнительно: написать скрипт, который по всем картам Лайт Ская опрашивает ГПН и синхронизирует лимиты.

ВыяснилиЧасть лимитов в кабинете ГПН действительно разъехалась с нашей базой. Но журнал истории, из которого можно было «восстанавливать», устарел — значения там были некорректные.
СделалиСняли резервную копию, написали и развернули инструмент 3‑сторонней сверки (наша база ↔ история ↔ кабинет ГПН). Восстановление — через штатный механизм, а не вслепую из устаревшей истории.
Порядок действийСначала устранить дубли, затем восстанавливать карты. Приоритет — корректность лимитов в системе; блокировки карт вне задачи.
ИтогИнструмент и резервная копия готовы, корень дублирования найден и устранён. Восстановление идёт безопасно, без риска залить неверные значения.
Почему не «восстановили в лоб»: слепая заливка из устаревшего журнала создала бы неправильные лимиты и реальный денежный ущерб. Правильнее — сверка с актуальным кабинетом и аккуратная синхронизация.
Роснефть · синхра

«Проверь синхронизацию — всё висит»

23 июня, вечер

ЗапросПроверить текущую синхронизацию с Роснефтью. При обнаружении затыка — перезапуск контейнера и MR, чтобы отправка не висела.

ВыяснилиОдин «зависший» сетевой запрос заблокировал всю отправку транзакций на 3,5 часа — как авария на однополосной дороге: встала вся полоса.
СделаноПерезапуск оживил отправку. Затем для каждого поставщика выделена своя «полоса» и добавлен жёсткий таймаут — зависнуть больше нельзя.
ПараллельноПроверка и слияние накопленных MR по дедупу и логам — наведён порядок в доработках.
ИтогСинхронизация устойчива, защита от зависаний выдана сразу всем 10 поставщикам, а не только Роснефти.
Наблюдаемость + карты

«Настрой логи и дашборд, проверь конкретные карты»

24 июня, утро

ЗапросНастроить сбор логов с привязкой к хранилищу и ротацией, проверить поток логов и оформить MR; сделать отдельный дашборд. Плюс точечные проверки конкретных карт ГПН и Татнефти («почему 1 литр», «кто и когда поставил лимит»).

СделаноЗаведён сквозной сбор всех обращений к поставщикам в единое хранилище логов, настроены ротация и отдельный наглядный дашборд. Разобраны конкретные карты по обращениям клиентов.
ИтогТеперь подобные сбои видно сразу — не на глаз по жалобам, а на дашборде. Вопросы по конкретным картам отработаны.
Бонусом

Что попутно улучшили

Кроме тушения пожаров, по ходу дела сделали ещё много полезного.

В разработке

Инструмент, который помогает с такими разборами

Параллельно дорабатывается внутренний инструмент fuel‑architect — чтобы разборы вроде описанных выше делать быстрее и точнее.

fuel‑architect превращает большую и сложную систему топливных карт в понятную карту: на экране — интерактивная схема всей архитектуры, видно, что из чего вызывается и как связаны между собой части системы. Но главная ценность — команда из 11 «доменных экспертов»: каждый знает свой кусок системы (лимиты, биллинг, интеграции с поставщиками, карты, контракты и т.д.) и умеет читать реальный код. Инженер задаёт вопрос или просит найти ошибки — эксперт читает нужные файлы, указывает на проблему с конкретной строкой кода и предлагает готовую правку. Применять её или нет — решает человек.

1 · ВопросИнженер спрашивает или просит найти ошибки в части системы
2 · Эксперт читает кодНужный доменный эксперт открывает реальные файлы системы
3 · Находит проблемуУказывает место с конкретной строкой кода
4 · Предлагает правкуГотовый вариант исправления — решает человек
Зачем это нужно: чтобы разобраться в незнакомой части системы или найти потенциальную ошибку, не требовалось держать в голове всю архитектуру. Эксперты только предлагают правки — финальное решение всегда за человеком.
Одним взглядом

Хронология трёх дней

● 22 июня
● 23 июня
● 24 июня
Подход

Ключевые решения

Главное — правильные лимиты

Фокус на корректности лимитов в системе. Почему карта заблокирована — отдельный вопрос к клиенту, не цель этих работ.

Просто и надёжно «здесь и сейчас»

Двухэтапный подход вместо переусложнения: сначала рабочее и безопасное решение, потом улучшения.

Не восстанавливать вслепую

Сначала сверка с реальным кабинетом поставщика. Заливка из устаревшей истории создала бы неверные лимиты.

Чинить класс, а не случай

Защиту от зависаний и изоляцию поставщиков выдали сразу всем 10, а не только проблемной Роснефти.

Баланс

Сделано и что осталось

✅ Закрыто

  • Роснефть: лимиты доезжают, отправка не зависает, дубли убраны
  • 6 выкатов на прод — все через тесты и сборку
  • Лайт Скай: инструмент сверки и резервная копия готовы, корень устранён
  • Все 10 поставщиков защищены таймаутом и изолированы друг от друга
  • Появились сквозные логи и дашборд активности
  • Татнефть: «мёртвый» адрес заменён рабочим

○ В работе / на потом

  • Пара улучшений по логам ещё в ревью
  • Полная «уборка» по Роснефти (~19 600 карт) доезжает в фоне
  • Отправку транзакций после простоя стоит распараллелить