""" Seed 25 шаблонов документов авиационной отрасли в стиле REFLY. """ import logging from app.db.session import SessionLocal from app.models.document_template import DocumentTemplate logger = logging.getLogger(__name__) _STYLE = """ """ _HEADER = """
АСУ ТК КЛГ — Контроль лётной годности
АО «REFLY» · г. Калининград · тел. +7 (4012) ХХХ-ХХ-ХХ · info@refly.ru
""" _FOOTER = """ """ def _wrap(title: str, subtitle: str | None, content: str) -> str: sub = f'
{subtitle}
' if subtitle else "" return ( _STYLE + '
' + _HEADER + f'
{title}
' + sub + '
[___________] от [дата]
' + content + _FOOTER + "
" ) def _templates_data() -> list[dict]: return [ { "code": "APP-246", "name": "Заявка на получение сертификата эксплуатанта (ФАП-246)", "category": "application", "standard": "RF", "description": "Заявка на получение сертификата эксплуатанта ВК РФ", "sort_order": 1, "html_content": _wrap( "Заявка на получение сертификата эксплуатанта", "ФАП-246", """

Наименование организации: [___________]

ИНН: [___] ОГРН: [___]

Адрес: [___________]

Типы ВС: [___________]

Виды авиаработ: [___________]

Ответственное лицо: [___________]

Подпись руководителя
ФИО
М.П.
""", ), }, { "code": "APP-145", "name": "Заявка на одобрение организации ТОиР (ФАП-145)", "category": "application", "standard": "RF", "description": "Заявка на одобрение организации по техническому обслуживанию", "sort_order": 2, "html_content": _wrap( "Заявка на одобрение организации ТОиР", "ФАП-145", """

Наименование: [___________]

Область одобрения: [___________]

Типы ВС: [___________]

Категории работ: [___________]

Подпись
""", ), }, { "code": "APP-SLG", "name": "Заявка на выдачу/продление СЛГ", "category": "application", "standard": "RF", "description": "Заявка на выдачу или продление сертификата лётной годности", "sort_order": 3, "html_content": _wrap( "Заявка на выдачу/продление сертификата лётной годности", None, """

Рег. номер ВС: [___] Тип: [___]

Серийный №: [___] Собственник: [___________]

Дата последнего ТО: [дата]

Подпись
""", ), }, { "code": "APP-MOD", "name": "Заявка на одобрение модификации ВС", "category": "application", "standard": "RF", "description": "Заявка на одобрение модификации воздушного судна", "sort_order": 4, "html_content": _wrap( "Заявка на одобрение модификации ВС", None, """

Описание модификации: [___________]

STC: [___] Основание: [___]

ВС (рег. №): [___]

Подпись
""", ), }, { "code": "CERT-SLG", "name": "Сертификат лётной годности (СЛГ) — бланк", "category": "certificate", "standard": "RF", "description": "Бланк сертификата лётной годности", "sort_order": 5, "html_content": _wrap( "Сертификат лётной годности", None, """

Государство регистрации: [___] Рег. знак: [___]

Тип: [___] Серийный №: [___]

Категория: [___]

Дата выдачи: [дата] Срок действия: [дата]

Орган выдачи: [___________]

Печать
""", ), }, { "code": "CERT-CRS", "name": "Свидетельство о допуске к эксплуатации (CRS)", "category": "certificate", "standard": "RF", "description": "ФАП-145 / EASA Part-145.A.50 — Certificate of Release to Service", "sort_order": 6, "html_content": _wrap( "Свидетельство о допуске к эксплуатации", "ФАП-145 / EASA Part-145.A.50", """

Организация ТОиР: [___________]

ВС: [рег. №] Тип: [___]

Выполненные работы: [___________]

Наряд №: [___] Дата: [дата]

Подпись уполномоченного лица: _____________________

М.П.
""", ), }, { "code": "CERT-EASA1", "name": "EASA Form 1 — Authorized Release Certificate", "category": "certificate", "standard": "EASA", "description": "Форма 1 EASA — сертификат авторизованного выпуска", "sort_order": 7, "html_content": _wrap( "EASA Form 1 — Authorized Release Certificate", "EASA", """
Part NumberDescriptionQuantitySerial NoStatusRemarks
[___][___][___][___][___][___]

Authorized Signature: [___________]

""", ), }, { "code": "CERT-8130", "name": "FAA Form 8130-3 — Airworthiness Approval Tag", "category": "certificate", "standard": "FAA", "description": "Форма 8130-3 FAA — ярлык одобрения лётной годности", "sort_order": 8, "html_content": _wrap( "FAA Form 8130-3 — Airworthiness Approval Tag", "FAA", """

Part No: [___] Serial No: [___]

Description: [___________]

Status: [___] Remarks: [___]

Approved by: [___________]

""", ), }, { "code": "ACT-INSP", "name": "Акт инспекционной проверки ВС", "category": "act", "standard": "RF", "description": "Акт инспекционной проверки воздушного судна", "sort_order": 9, "html_content": _wrap( "Акт инспекционной проверки ВС", None, """

Дата: [дата] Место: [___________]

Борт: [рег. №] Инспектор: [___________]

Результат: [годен / не годен]

Замечания: [___________]

Инспектор
Представитель организации
""", ), }, { "code": "ACT-AUDIT", "name": "Акт аудита организации", "category": "act", "standard": "RF", "description": "Акт проведения аудита организации", "sort_order": 10, "html_content": _wrap( "Акт аудита организации", None, """

Организация: [___________]

Дата: [дата] Аудитор: [___________]

Область проверки: [___________]

Несоответствия (level 1/2): [___________]

Корректирующие действия, срок: [___________]

Аудитор
Представитель организации
""", ), }, { "code": "ACT-DEFECT", "name": "Акт дефектации", "category": "act", "standard": "RF", "description": "Акт дефектации компонента/ВС", "sort_order": 11, "html_content": _wrap( "Акт дефектации", None, """

ВС: [рег. №] ATA chapter: [___]

Описание дефекта: [___________]

MEL категория: [___] Решение: [___________]

Подпись
""", ), }, { "code": "ACT-ACCEPT", "name": "Акт приёмки ВС после ТО", "category": "act", "standard": "RF", "description": "Акт приёмки воздушного судна после технического обслуживания", "sort_order": 12, "html_content": _wrap( "Акт приёмки ВС после ТО", None, """

Наряд №: [___] ВС: [рег. №]

Выполненные работы: [___________]

Замечания: [___________]

CRS: [___]

Заказчик
Исполнитель
""", ), }, { "code": "LTR-FAVT", "name": "Сопроводительное письмо в ФАВТ (Росавиация)", "category": "letter", "standard": "RF", "description": "Сопроводительное письмо в Федеральное агентство воздушного транспорта", "sort_order": 13, "html_content": _wrap( "Сопроводительное письмо", "в ФАВТ (Росавиация)", """

Исх. № [___] от [дата]

Кому: [___________]

От кого: [___________]

Тема: [___________]

Текст: [___________]

Приложения: [___________]

Подпись
""", ), }, { "code": "LTR-MRO", "name": "Письмо-заказ в организацию ТОиР", "category": "letter", "standard": "RF", "description": "Письмо-заказ на выполнение работ организацией ТОиР", "sort_order": 14, "html_content": _wrap( "Письмо-заказ в организацию ТОиР", None, """

Наименование ТОиР: [___________]

Запрос на выполнение работ: [___________]

ВС: [рег. №] Сроки: [___________]

Контакт: [___________]

Подпись
""", ), }, { "code": "LTR-SB", "name": "Уведомление о выполнении сервисного бюллетеня (SB)", "category": "letter", "standard": "RF", "description": "Уведомление о выполнении SB", "sort_order": 15, "html_content": _wrap( "Уведомление о выполнении SB", None, """

№ SB: [___] ВС: [рег. №]

Дата выполнения: [дата]

Ссылка на наряд: [___]

Подпись
""", ), }, { "code": "LTR-AD", "name": "Отчёт о выполнении директивы ЛГ (AD/ДЛГ)", "category": "letter", "standard": "RF", "description": "Отчёт о выполнении воздушной директивы", "sort_order": 16, "html_content": _wrap( "Отчёт о выполнении директивы ЛГ", "AD / ДЛГ", """

№ AD: [___] ВС: [рег. №]

Метод выполнения: [___________]

Дата: [дата]

Подтверждение: [___________]

Подпись
""", ), }, { "code": "FORM-TECHLOG", "name": "Technical Log / Бортовой журнал", "category": "form", "standard": "ICAO", "description": "Бортовой журнал (ICAO)", "sort_order": 17, "html_content": _wrap( "Technical Log / Бортовой журнал", "ICAO", """
Flight NoDateDepartureArrivalBlock TimeDefectsActionsCRS
[___][___][___][___][___][___][___][___]
""", ), }, { "code": "FORM-MEL", "name": "MEL Deferral Form / Форма отложенного дефекта", "category": "form", "standard": "ICAO", "description": "Форма отложенного дефекта по MEL", "sort_order": 18, "html_content": _wrap( "MEL Deferral Form", None, """

ВС: [___] ATA: [___]

Item: [___] Category (A/B/C/D): [___]

Deferred By: [___] Expiry Date: [дата]

Rectified By: [___]

""", ), }, { "code": "FORM-WEIGHT", "name": "Weight & Balance Sheet / Весовая ведомость", "category": "form", "standard": "ICAO", "description": "Весовая ведомость ВС", "sort_order": 19, "html_content": _wrap( "Weight & Balance Sheet", "Весовая ведомость", """

ВС: [___]

Empty Weight: [___] CG: [___]

Fuel: [___] Payload: [___]

Max TOW: [___] Actual TOW: [___]

""", ), }, { "code": "FORM-WO", "name": "Work Order / Наряд-задание на ТО", "category": "form", "standard": "RF", "description": "Наряд-задание на техническое обслуживание", "sort_order": 20, "html_content": _wrap( "Work Order / Наряд-задание на ТО", None, """

WO №: [___] ВС: [рег. №]

Тип работ: [___________]

Плановые ч/ч: [___] Исполнитель: [___________]

Инструмент, запчасти: [___________]

CRS: [___]

Подпись
""", ), }, { "code": "RPT-ANNUAL", "name": "Годовой отчёт о состоянии парка ВС", "category": "report", "standard": "RF", "description": "Годовой отчёт по парку воздушных судов", "sort_order": 21, "html_content": _wrap( "Годовой отчёт о состоянии парка ВС", None, """
Парк ВС

[___________]

Наработка, ТО

[___________]

Инциденты, AD/SB, риски

[___________]

Руководитель
""", ), }, { "code": "RPT-SMS", "name": "Отчёт по SMS (Safety Management System)", "category": "report", "standard": "ICAO", "description": "Отчёт по системе управления безопасностью", "sort_order": 22, "html_content": _wrap( "Отчёт по SMS", "Safety Management System", """
Показатели безопасности (SPI)

[___________]

Происшествия, риски

[___________]

Корректирующие действия

[___________]

Подпись
""", ), }, { "code": "RPT-RISK", "name": "Отчёт об оценке риска", "category": "report", "standard": "RF", "description": "Отчёт об оценке риска", "sort_order": 23, "html_content": _wrap( "Отчёт об оценке риска", None, """

Опасность: [___________]

Вероятность: [___] Серьёзность: [___]

Матрица риска: [___]

Меры: [___________]

Остаточный риск: [___]

Подпись
""", ), }, { "code": "ORD-PILOT", "name": "Приказ о допуске экипажа к полётам", "category": "order", "standard": "RF", "description": "Приказ о допуске пилота/экипажа к полётам", "sort_order": 24, "html_content": _wrap( "Приказ о допуске экипажа к полётам", None, """

ФИО: [___________] Должность: [___]

Свидетельство №: [___]

Типы ВС: [___________]

Дата: [дата]

Руководитель
""", ), }, { "code": "ORD-INSPECT", "name": "Распоряжение о проведении инспекции", "category": "order", "standard": "RF", "description": "Распоряжение о проведении инспекционной проверки", "sort_order": 25, "html_content": _wrap( "Распоряжение о проведении инспекции", None, """

Основание: [___________]

Объект: [___________]

Дата: [дата] Инспектор: [___________]

Задачи: [___________]

Подпись
""", ), }, ] def seed_document_templates(): db = SessionLocal() try: for d in _templates_data(): if db.query(DocumentTemplate).filter(DocumentTemplate.code == d["code"]).first(): continue db.add( DocumentTemplate( code=d["code"], name=d["name"], category=d["category"], standard=d["standard"], description=d.get("description"), html_content=d["html_content"], version=1, is_active=True, sort_order=d["sort_order"], ) ) db.commit() logger.info("Document templates seed complete: up to 25 templates") except Exception as e: db.rollback() logger.exception("Document templates seed failed: %s", e) raise finally: db.close()