feat: Part-M RU checklists replacing ICAO/EASA/FAA

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Yuriy 2026-02-16 01:02:51 +03:00
parent 48d80137ac
commit 25be90de7b
2 changed files with 172 additions and 153 deletions

View File

@ -18,7 +18,7 @@ export default function ChecklistsPage() {
const gen = async (src: string) => { const n = prompt('Название:'); if (!n) return; await checklistsApi.generate(src, n); mutate(); }; const gen = async (src: string) => { const n = prompt('Название:'); if (!n) return; await checklistsApi.generate(src, n); mutate(); };
return ( return (
<PageLayout title="Чек-листы" subtitle={isLoading ? 'Загрузка...' : `Шаблонов: ${data?.total || 0}`} <PageLayout title="Чек-листы Part-M RU" subtitle={isLoading ? 'Загрузка...' : (data?.total ? `Гармонизировано с ICAO Annex 8 · EASA Part-M · FAA 14 CFR Part 43/91 · Шаблонов: ${data.total}` : 'Гармонизировано с ICAO Annex 8 · EASA Part-M · FAA 14 CFR Part 43/91')}
actions={<RequireRole roles={['admin', 'authority_inspector']}> actions={<RequireRole roles={['admin', 'authority_inspector']}>
<button onClick={() => gen('fap_m_inspection')} className="btn-primary">+ ФАП-М</button> <button onClick={() => gen('fap_m_inspection')} className="btn-primary">+ ФАП-М</button>
<button onClick={() => gen('custom')} className="btn-primary bg-blue-500 hover:bg-blue-600">+ Пользовательский</button> <button onClick={() => gen('custom')} className="btn-primary bg-blue-500 hover:bg-blue-600">+ Пользовательский</button>
@ -26,13 +26,14 @@ export default function ChecklistsPage() {
<FilterBar value={domain} onChange={setDomain} className="mb-4" <FilterBar value={domain} onChange={setDomain} className="mb-4"
options={[ options={[
{ value: undefined, label: 'Все' }, { value: undefined, label: 'Все' },
{ value: 'ФАП-148', label: '🇷🇺 ФАП-148' }, { value: 'continuing_airworthiness', label: 'M.A.301 ПЛГ' },
{ value: 'ФАП-145', label: '🇷🇺 ФАП-145' }, { value: 'maintenance_program', label: 'M.A.302 Программа ТО' },
{ value: 'ФАП-147', label: '🇷🇺 ФАП-147' }, { value: 'airworthiness_directives', label: 'M.A.303 ДЛГ/AD' },
{ value: 'ICAO', label: '🌐 ИКАО' }, { value: 'records', label: 'M.A.305 Учёт ПЛГ' },
{ value: 'EASA', label: '🇪🇺 EASA' }, { value: 'maintenance_data', label: 'M.A.401 Данные ТО' },
{ value: 'FAA', label: '🇺🇸 FAA' }, { value: 'components', label: 'M.A.501 Компоненты' },
{ value: 'CSV', label: '📄 CSV' }, { value: 'camo_obligations', label: 'M.A.703 CAMO' },
{ value: 'airworthiness_review', label: 'M.A.901 Проверка ЛГ' },
]} /> ]} />
{!isLoading && templates.length > 0 ? ( {!isLoading && templates.length > 0 ? (
<div className="flex flex-col gap-3"> <div className="flex flex-col gap-3">

View File

@ -1,6 +1,7 @@
""" """
Seed 8 шаблонов чек-листов аудита ВС (РФ/ИКАО/EASA/FAA). Seed чек-листов по Part-M RU (российские правила поддержания лётной годности).
Проверка на дубликаты по имени перед созданием. Гармонизировано с ICAO Annex 8, EASA Part-M, FAA 14 CFR Part 43/91.
Заменяет прежние шаблоны ICAO/EASA/FAA старые удаляются, создаются 8 шаблонов Part-M RU.
""" """
import logging import logging
from app.db.session import SessionLocal from app.db.session import SessionLocal
@ -8,168 +9,185 @@ from app.models import ChecklistTemplate, ChecklistItem
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
REGULATION = "Part-M RU"
def _ensure_template(db, name: str, description: str | None, domain: str, items: list[tuple[str, str]]) -> None:
if db.query(ChecklistTemplate).filter(ChecklistTemplate.name == name).first(): def _add_template(db, name: str, description: str, category: str, items: list[tuple[str, str]]) -> None:
return """Добавить шаблон Part-M RU и его пункты. category хранится в domain для фильтрации."""
t = ChecklistTemplate(name=name, version=1, description=description, domain=domain, is_active=True) t = ChecklistTemplate(
name=name,
version=1,
description=description,
domain=category,
is_active=True,
)
db.add(t) db.add(t)
db.flush() db.flush()
for sort_order, (code, text) in enumerate(items, start=1): for sort_order, (code, text) in enumerate(items, start=1):
db.add(ChecklistItem(template_id=t.id, code=code, text=text, domain=domain, sort_order=sort_order)) db.add(
ChecklistItem(
template_id=t.id,
code=code,
text=text,
domain=category,
sort_order=sort_order,
)
)
logger.info("Created template: %s (%s items)", name, len(items)) logger.info("Created template: %s (%s items)", name, len(items))
def seed_checklists(): def seed_checklists():
db = SessionLocal() db = SessionLocal()
try: try:
# 1. ФАП-148 — Поддержание лётной годности ВС (15 пунктов) # Полная замена: удалить все шаблоны чек-листов (пункты удалятся по CASCADE)
_ensure_template(db, "ФАП-148 — Поддержание лётной годности ВС", None, "ФАП-148", [ deleted = db.query(ChecklistTemplate).delete(synchronize_session=False)
("148.1", "Наличие действующего сертификата лётной годности (СЛГ)"), if deleted:
("148.2", "СЛГ соответствует типу и модификации ВС"), logger.info("Deleted %s old checklist template(s)", deleted)
("148.3", "Наличие утверждённой программы ТО (ПрТО)"), db.commit()
("148.4", "ПрТО соответствует данным разработчика и требованиям ГосЦЕНТР"),
("148.5", "Все директивы лётной годности (ДЛГ) выполнены в установленные сроки"),
("148.6", "Информация о выполнении ДЛГ внесена в формуляр ВС"),
("148.7", "Бюллетени (SB) категории «обязательные» выполнены"),
("148.8", "Наработка ВС (часы, циклы) соответствует записям в формуляре"),
("148.9", "Агрегаты с ограниченным ресурсом не превышают назначенных пределов"),
("148.10", "Весовая ведомость и центровка актуальны"),
("148.11", "Записи о последнем ТО формы A-check / C-check имеются"),
("148.12", "Все открытые дефекты оформлены по MEL/CDL или устранены"),
("148.13", "Бортовая документация укомплектована и актуальна"),
("148.14", "Свидетельство о регистрации действительно"),
("148.15", "Страховой полис ОСАГО действителен"),
])
# 2. ФАП-145 — Аудит организации ТОиР (18 пунктов) # 1. M.A.301 — Задачи по поддержанию лётной годности
_ensure_template(db, "ФАП-145 — Аудит организации ТОиР", None, "ФАП-145", [ _add_template(
("145.A.25", "Наличие одобрения / сертификата ТОиР"), db,
("145.A.30a", "Требования к персоналу: ответственный руководитель назначен"), "M.A.301 — Задачи по поддержанию лётной годности",
("145.A.30b", "Система качества: менеджер по качеству назначен, независим"), "Чек-лист по Part-M RU. Категория: continuing_airworthiness.",
("145.A.35", "Сертифицирующий персонал: квалификация подтверждена"), "continuing_airworthiness",
("145.A.40a", "Оборудование и инструмент: перечень актуален"), [
("145.A.40b", "Калибровка инструмента выполнена в срок"), ("M.A.301(1)", "Выполнение предполётного осмотра ВС"),
("145.A.42", "Компоненты: входной контроль, прослеживаемость, маркировка"), ("M.A.301(2)", "Устранение неисправностей и повреждений в соответствии с утверждёнными данными"),
("145.A.45a", "Техническая документация: актуальность и доступность"), ("M.A.301(3)", "Выполнение всех работ по ТО в соответствии с утверждённой программой ТО"),
("145.A.45b", "Данные производителя (AMM, IPC, SRM) в актуальной ревизии"), ("M.A.301(4)", "Анализ эффективности утверждённой программы ТО"),
("145.A.47", "Планирование ТО: ресурсы, сроки, приоритеты"), ("M.A.301(5)", "Выполнение применимых Директив лётной годности (ДЛГ/AD)"),
("145.A.50a", "Выполнение ТО: соответствие наряду и карте ТО"), ("M.A.301(6)", "Выполнение применимых модификаций и ремонтов"),
("145.A.50b", "CRS (сертификат допуска к эксплуатации) оформлен правильно"), ("M.A.301(7)", "Установление политики модификаций для необязательных модификаций"),
("145.A.55", "Записи о ТО: хранение не менее 3 лет"), ("M.A.301(8)", "Выполнение проверок по поддержанию лётной годности (Airworthiness Review)"),
("145.A.60", "Происшествия/инциденты: сообщения поданы"), ],
("145.A.65a", "Политика безопасности: SMS внедрена"), )
("145.A.65b", "Система управления рисками функционирует"),
("145.A.70", "Руководство MRO (MOE) актуально и одобрено"),
("145.A.75", "Привилегии: работы выполняются в рамках области одобрения"),
])
# 3. ФАП-147 — Аудит учебной организации (9 пунктов) # 2. M.A.302 — Программа технического обслуживания
_ensure_template(db, "ФАП-147 — Аудит учебной организации", None, "ФАП-147", [ _add_template(
("147.A.05", "Область одобрения"), db,
("147.A.10", "Персонал"), "M.A.302 — Программа технического обслуживания",
("147.A.15", "Помещения"), "Чек-лист по Part-M RU. Категория: maintenance_program.",
("147.A.20", "Оборудование"), "maintenance_program",
("147.A.25", "Программы"), [
("147.A.30", "Экзамены"), ("M.A.302(a)", "ТО ВС выполняется по утверждённой программе ТО"),
("147.A.35", "Записи"), ("M.A.302(b)", "Программа ТО содержит периодичность и объём работ, включая специальные требования"),
("147.A.40", "MTOE"), ("M.A.302(c)", "Программа ТО соответствует инструкциям по поддержанию лётной годности (ICA)"),
("147.A.45", "Привилегии"), ("M.A.302(d)", "Программа ТО утверждена компетентным органом (Росавиация)"),
]) ("M.A.302(e)", "Учёт Директив лётной годности в программе ТО"),
("M.A.302(f)", "Учёт Сервисных бюллетеней (SB) обязательного характера"),
("M.A.302(g)", "Программа ТО содержит программу контроля старения конструкции"),
("M.A.302(h)", "Программа ТО содержит программу контроля коррозии"),
],
)
# 4. ICAO Annex 8 — Лётная годность ВС (12 пунктов) # 3. M.A.303 — Директивы лётной годности (AD/ДЛГ)
_ensure_template(db, "ICAO Annex 8 — Лётная годность ВС", None, "ICAO", [ _add_template(
("ICAO-8.3.1", "Сертификаты типа"), db,
("ICAO-8.3.2", "Сертификаты лётной годности"), "M.A.303 — Директивы лётной годности (AD/ДЛГ)",
("ICAO-8.3.3", "Надзор за ЛГ"), "Чек-лист по Part-M RU. Категория: airworthiness_directives.",
("ICAO-8.3.4", "Надзор (продолжение)"), "airworthiness_directives",
("ICAO-8.4.1", "Программа ТО"), [
("ICAO-8.4.2", "Директивы (AD)"), ("M.A.303(a)", "Все применимые ДЛГ выполнены в установленные сроки"),
("ICAO-8.4.3", "Модификации"), ("M.A.303(b)", "Записи о выполнении ДЛГ внесены в бортовую документацию"),
("ICAO-8.4.4", "Ремонты"), ("M.A.303(c)", "Повторяющиеся ДЛГ контролируются и выполняются по графику"),
("ICAO-8.5.1", "Документация"), ("M.A.303(d)", "Альтернативные методы соответствия (AMOC) согласованы с компетентным органом"),
("ICAO-8.5.2", "Весовая ведомость"), ("M.A.303(e)", "Ведётся реестр применимых ДЛГ с указанием статуса выполнения"),
("ICAO-8.6.1", "Годность после ТО"), ("M.A.303(f)", "Новые ДЛГ анализируются на применимость в течение 30 дней"),
("ICAO-8.6.2", "CRS"), ],
]) )
# 5. ICAO Annex 19 — SMS (12 пунктов) # 4. M.A.305 — Система учёта поддержания лётной годности
_ensure_template(db, "ICAO Annex 19 — SMS", None, "ICAO", [ _add_template(
("SMS-1.1", "Политика безопасности — утверждена"), db,
("SMS-1.2", "Политика — доведена до персонала"), "M.A.305 — Система учёта поддержания лётной годности",
("SMS-1.3", "Политика — пересмотр"), "Чек-лист по Part-M RU. Категория: records.",
("SMS-2.1", "Управление рисками — идентификация"), "records",
("SMS-2.2", "Управление рисками — оценка"), [
("SMS-2.3", "Управление рисками — митигация"), ("M.A.305(a)", "Ведение бортового журнала ВС (Aircraft Log Book)"),
("SMS-3.1", "Обеспечение безопасности — обеспечение"), ("M.A.305(b)", "Ведение журнала двигателя (Engine Log Book)"),
("SMS-3.2", "Обеспечение безопасности — мониторинг"), ("M.A.305(c)", "Ведение карт-формуляров компонентов с ограниченным ресурсом"),
("SMS-3.3", "Обеспечение безопасности — улучшение"), ("M.A.305(d)", "Записи о текущем статусе ДЛГ и SB"),
("SMS-4.1", "Содействие — обучение"), ("M.A.305(e)", "Записи о текущем статусе модификаций и ремонтов"),
("SMS-4.2", "Содействие — коммуникация"), ("M.A.305(f)", "Записи о наработке ВС, двигателей и компонентов (часы/циклы)"),
("SMS-4.3", "Содействие — отчетность"), ("M.A.305(g)", "Записи о массе и центровке ВС"),
]) ("M.A.305(h)", "Хранение записей не менее 3 лет после списания ВС"),
],
)
# 6. EASA Part-M — Поддержание ЛГ (20 пунктов) # 5. M.A.401 — Данные по техническому обслуживанию
_ensure_template(db, "EASA Part-M — Поддержание ЛГ", None, "EASA", [ _add_template(
("M.A.201", "Ответственность эксплуатанта"), db,
("M.A.301a", "ТО — соответствие"), "M.A.401 — Данные по техническому обслуживанию",
("M.A.301b", "ТО — AD выполнены"), "Чек-лист по Part-M RU. Категория: maintenance_data.",
("M.A.301c", "Дефекты — устранены или разрешены"), "maintenance_data",
("M.A.302", "Программа ТО"), [
("M.A.303", "Директивы"), ("M.A.401(a)", "Использование актуальных данных по ТО при выполнении работ"),
("M.A.304", "Модификации"), ("M.A.401(b)", "Доступность AMM, SRM, IPC, WDM для персонала"),
("M.A.305", "Документация"), ("M.A.401(c)", "Данные по ТО соответствуют требованиям разработчика типа"),
("M.A.306", "Записи ТО"), ("M.A.401(d)", "Процедура контроля актуальности ревизий документации"),
("M.A.307", "Хранение записей"), ("M.A.401(e)", "Наличие утверждённых технологических карт (Task Cards)"),
("M.A.401", "Выполнение ТО"), ("M.A.401(f)", "Учёт временных ревизий (Temporary Revisions)"),
("M.A.402", "Дефекты при ТО"), ],
("M.A.403", "Компоненты — пригодность"), )
("M.A.501", "Компоненты — установка"),
("M.A.502", "Компоненты — прослеживаемость"),
("M.A.801", "CRS"),
("M.A.901", "ARC — выдача"),
("M.A.902", "ARC — хранение"),
])
# 7. EASA Part-CAMO — Аудит CAMO (12 пунктов) # 6. M.A.501 — Компоненты и запасные части
_ensure_template(db, "EASA Part-CAMO — Аудит CAMO", None, "EASA", [ _add_template(
("CAMO.A.200", "Одобрение CAMO"), db,
("CAMO.A.205", "Управление воздушным судном (AM)"), "M.A.501 — Компоненты и запасные части",
("CAMO.A.210", "Персонал"), "Чек-лист по Part-M RU. Категория: components.",
("CAMO.A.215", "Помещения"), "components",
("CAMO.A.300", "Программа ТО"), [
("CAMO.A.305", "AD — выполнение"), ("M.A.501(a)", "Установка только сертифицированных компонентов с Form 1 / АКТ-8a"),
("CAMO.A.310", "Компоненты"), ("M.A.501(b)", "Прослеживаемость компонентов от изготовителя до установки"),
("CAMO.A.315", "Дефекты"), ("M.A.501(c)", "Контроль ресурсных компонентов (life-limited parts)"),
("CAMO.A.320", "ARC"), ("M.A.501(d)", "Идентификация и изоляция неисправных компонентов"),
("CAMO.A.325", "Записи ARC"), ("M.A.501(e)", "Контроль нестандартных (Standard) деталей"),
("CAMO.A.405", "Качество"), ("M.A.501(f)", "Входной контроль компонентов перед установкой"),
("CAMO.A.410", "SMS"), ("M.A.501(g)", "Система контроля расходных материалов (срок годности, хранение)"),
]) ],
)
# 8. FAA Part 43/91 — Annual/100-hour Inspection (17 пунктов) # 7. M.A.703 — Обязанности организации по управлению ПЛГ (CAMO)
_ensure_template(db, "FAA Part 43/91 — Annual/100-hour Inspection", None, "FAA", [ _add_template(
("43.D-1", "Fuselage and cabin"), db,
("43.D-2", "Cabin — emergency equipment"), "M.A.703 — Обязанности организации по управлению ПЛГ (CAMO)",
("43.D-3", "Engine and nacelle"), "Чек-лист по Part-M RU. Категория: camo_obligations.",
("43.D-4", "Engine — compressor"), "camo_obligations",
("43.D-5", "Propeller"), [
("43.D-6", "Landing gear"), ("M.A.703(a)", "Обеспечение поддержания лётной годности всех управляемых ВС"),
("43.D-7", "Wing and center section"), ("M.A.703(b)", "Заключение договора с утверждённой организацией по ТО (Part-145)"),
("43.D-8", "Empennage"), ("M.A.703(c)", "Контроль выполнения всех работ по ТО в установленные сроки"),
("43.D-9", "Control cables"), ("M.A.703(d)", "Управление программой ТО и её своевременная актуализация"),
("43.D-10", "Instruments"), ("M.A.703(e)", "Управление ресурсными компонентами и контроль их наработки"),
("43.D-11", "Avionics"), ("M.A.703(f)", "Координация планового и внепланового ТО"),
("43.D-12", "Fuel system"), ("M.A.703(g)", "Управление записями по ПЛГ в соответствии с M.A.305"),
("43.D-13", "Hydraulic system"), ("M.A.703(h)", "Анализ эффективности программы ТО и подготовка отчётов"),
("43.D-14", "Miscellaneous"), ],
("43.D-15", "Engine — final check"), )
("91.409", "Inspection status"),
("91.417", "Records"), # 8. M.A.901 — Проверка лётной годности ВС (Airworthiness Review)
]) _add_template(
db,
"M.A.901 — Проверка лётной годности ВС (Airworthiness Review)",
"Чек-лист по Part-M RU. Категория: airworthiness_review.",
"airworthiness_review",
[
("M.A.901(a)", "Проверка ЛГ выполняется ежегодно или при продлении СЛГ"),
("M.A.901(b)", "Физический осмотр ВС проведён"),
("M.A.901(c)", "Проверка статуса выполнения ДЛГ и SB"),
("M.A.901(d)", "Проверка актуальности программы ТО"),
("M.A.901(e)", "Проверка полноты записей по ТО и наработке"),
("M.A.901(f)", "Проверка статуса ресурсных компонентов"),
("M.A.901(g)", "Проверка статуса модификаций и ремонтов"),
("M.A.901(h)", "Проверка массы и центровки"),
("M.A.901(i)", "Выпуск Сертификата проверки лётной годности (ARC) или рекомендации"),
("M.A.901(j)", "Уведомление компетентного органа при выявлении несоответствий"),
],
)
db.commit() db.commit()
logger.info("Checklist seed complete: 8 templates") logger.info("Part-M RU checklist seed complete: 8 templates")
except Exception as e: except Exception as e:
db.rollback() db.rollback()
logger.exception("Checklist seed failed: %s", e) logger.exception("Checklist seed failed: %s", e)