- seed_checklists.py: 8 шаблонов (~120 пунктов) — ФАП-148, ФАП-145, ФАП-147, ICAO Annex 8, ICAO Annex 19 SMS, EASA Part-M, EASA Part-CAMO, FAA Part 43/91 - checklists.py: PATCH template, PATCH/POST/DELETE items - ChecklistEditModal.tsx: модальное окно с inline-edit пунктов - api-client.ts: updateTemplate, addItem, updateItem, deleteItem - FilterBar: фильтры по стандартам (ФАП/ИКАО/EASA/FAA) - Автозагрузка шаблонов при первом запуске (lifespan + demo seed) Co-authored-by: Cursor <cursoragent@cursor.com>
179 lines
11 KiB
Python
179 lines
11 KiB
Python
"""
|
||
Seed 8 шаблонов чек-листов аудита ВС (РФ/ИКАО/EASA/FAA).
|
||
Проверка на дубликаты по имени перед созданием.
|
||
"""
|
||
import logging
|
||
from app.db.session import SessionLocal
|
||
from app.models import ChecklistTemplate, ChecklistItem
|
||
|
||
logger = logging.getLogger(__name__)
|
||
|
||
|
||
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)
|
||
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))
|
||
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", "Страховой полис ОСАГО действителен"),
|
||
])
|
||
|
||
# 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", "Привилегии: работы выполняются в рамках области одобрения"),
|
||
])
|
||
|
||
# 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", "Привилегии"),
|
||
])
|
||
|
||
# 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"),
|
||
])
|
||
|
||
# 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", "Содействие — отчетность"),
|
||
])
|
||
|
||
# 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 — хранение"),
|
||
])
|
||
|
||
# 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"),
|
||
])
|
||
|
||
# 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"),
|
||
])
|
||
|
||
db.commit()
|
||
logger.info("Checklist seed complete: 8 templates")
|
||
except Exception as e:
|
||
db.rollback()
|
||
logger.exception("Checklist seed failed: %s", e)
|
||
raise
|
||
finally:
|
||
db.close()
|