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