3.3 KiB
3.3 KiB
DEV REPORT: FR24 Schedule Supplement
Дата: 2026-04-21
Статус: ✅ DONE
Задача: TZ-fr24-schedule-supplement
Прогресс
- Создан отчёт
- Прочитаны исходники
- Реализована
supplement_schedule()вfr24_worker.py - Баг A (ZBAD/PKX) — уже был исправлен в коде (строка 65 build_mart.py), изменений не потребовалось
- Исправлен баг B (soft match) в
build_mart.py— оба find_fr24_track и find_fa_track - Добавлен вызов
supplement_schedule()вrun()fr24_worker.py (шаг 4) - Синтаксис проверен: оба файла проходят
python3 -m py_compileбез ошибок
Изменённые файлы
1. ingest/tracks_fr24/fr24_worker.py
Добавлено:
- Константы
_MOSCOW_ICAO_TO_IATAи_MOSCOW_ICAO_SET(строки ~302-308) - Функция
supplement_schedule(conn, target_date: date) -> int(строки 312-400) - Вызов
supplement_schedule()вrun()как шаг 4 (строки 475-481) - Новый ключ в
stats:"schedule_supplemented"
Логика supplement_schedule():
- Одним INSERT...SELECT вставляет в
fr24_ext.scheduleвсе рейсы изflight_actual, у которых нет совпадений по нормализованному номеру рейса + дате - Определяет
directionпо московскому аэропорту: origin → departure, dest → arrival airport_iata= московский аэропорт рейса (CASE WHEN по 4 ICAO)flight_number= нормализован (пробелы убраны, UPPER)airline_iata= буквенный префикс номера рейсаscheduled_at= datetime_takeoff для вылетов, datetime_landed для прилётовsource = 'fr24',status = 'actual'ON CONFLICT (flight_number, airport_iata, scheduled_at, direction) DO NOTHING
2. ingest/mart/build_mart.py
Баг A: ZBAD→PKX уже присутствовал в ICAO_TO_IATA (строка 65). Изменений не потребовалось.
Баг B (исправлен в двух местах):
find_fr24_track()строка ~215: убрано условиеnot destination_iata— soft match по origin теперь работает как fallback даже когда destination известенfind_fa_track()строка ~283: аналогично
Было:
if origin_iata and not destination_iata:
Стало:
# Fallback: match by origin only (full route match failed)
if origin_iata:
Результат проверки синтаксиса
fr24_worker.py: OK
build_mart.py: OK
python3 -m py_compile — оба файла без ошибок.
Примечания
- Деплой НЕ выполнялся (согласно ТЗ)
- Non-Moscow аэропорты в
origin_iata/destination_iataбудут NULL — это допустимо, т.к. полный ICAO→IATA словарь в fr24_worker не дублировался - При желании можно расширить CASE WHEN или вынести общий словарь в
config.py/constants.py