klg-asutk-app/backend/app/models/modifications.py
Yuriy aa052763f6 Безопасность и качество: 8 исправлений + обновления
- .env.example: полный шаблон, защита секретов
- .gitignore: явное исключение .env.* и секретов
- layout.tsx: XSS — заменён dangerouslySetInnerHTML на next/script для SW
- ESLint: no-console error (allow warn/error), ignore scripts/
- scripts/remove-console-logs.js: очистка console.log без glob
- backend/routes/modules: README с планом рефакторинга крупных файлов
- SECURITY.md: гид по секретам, XSS, CORS, auth, линту
- .husky/pre-commit: запуск npm run lint

+ прочие правки приложения и бэкенда

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-14 21:29:16 +03:00

60 lines
4.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from datetime import datetime, date
"""
Модели для управления модификациями воздушных судов.
Соответствует требованиям ИКАО Annex 8: отслеживание обязательных модификаций
(AD - Airworthiness Directives, SB - Service Bulletins, STC - Supplemental Type Certificates).
"""
from sqlalchemy import String, ForeignKey, DateTime, Text, Boolean
from sqlalchemy.orm import Mapped, mapped_column, relationship
from app.db.base import Base
from app.models.common import TimestampMixin, uuid4_str
class AircraftModification(Base, TimestampMixin):
"""Модификация воздушного судна.
Отслеживает обязательные и необязательные модификации ВС согласно требованиям ИКАО.
"""
__tablename__ = "aircraft_modifications"
id: Mapped[str] = mapped_column(String(36), primary_key=True, default=uuid4_str)
aircraft_id: Mapped[str] = mapped_column(String(36), ForeignKey("aircraft.id"), nullable=False, index=True)
aircraft = relationship("Aircraft", foreign_keys=[aircraft_id])
modification_number: Mapped[str] = mapped_column(String(64), nullable=False, index=True, doc="Номер модификации (AD, SB, STC номер)")
modification_type: Mapped[str] = mapped_column(String(32), nullable=False, doc="Тип модификации (AD, SB, STC, Service Bulletin)")
title: Mapped[str] = mapped_column(String(255), nullable=False, doc="Название модификации")
description: Mapped[str | None] = mapped_column(Text, nullable=True, doc="Описание модификации")
# Применимость
applicable_aircraft_types: Mapped[str | None] = mapped_column(Text, nullable=True, doc="Типы ВС, к которым применима модификация (JSON или текст)")
# Обязательность
compliance_required: Mapped[bool] = mapped_column(Boolean, nullable=False, default=False, doc="Обязательна ли модификация")
compliance_date: Mapped[DateTime | None] = mapped_column(DateTime(timezone=True), nullable=True, doc="Срок выполнения (для обязательных)")
# Статус выполнения
compliance_status: Mapped[str] = mapped_column(String(32), nullable=False, default="pending", doc="Статус выполнения (pending, complied, deferred, not_applicable)")
compliance_method: Mapped[str | None] = mapped_column(Text, nullable=True, doc="Способ выполнения модификации")
# Выполнение
performed_date: Mapped[DateTime | None] = mapped_column(DateTime(timezone=True), nullable=True, doc="Дата выполнения")
performed_by_org_id: Mapped[str | None] = mapped_column(String(36), ForeignKey("organizations.id"), nullable=True, doc="Организация, выполнившая модификацию")
performed_by_org = relationship("Organization", foreign_keys=[performed_by_org_id])
performed_by_user_id: Mapped[str | None] = mapped_column(String(36), ForeignKey("users.id"), nullable=True, doc="Специалист, выполнивший модификацию")
performed_by_user = relationship("User", foreign_keys=[performed_by_user_id])
# Документы
reference_documents: Mapped[str | None] = mapped_column(Text, nullable=True, doc="Ссылки на документы модификации")
remarks: Mapped[str | None] = mapped_column(Text, nullable=True, doc="Примечания")
# Отложенное выполнение (если применимо)
deferral_reason: Mapped[str | None] = mapped_column(Text, nullable=True, doc="Причина отложения выполнения")
deferral_until: Mapped[DateTime | None] = mapped_column(DateTime(timezone=True), nullable=True, doc="Отложено до даты")