- .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>
101 lines
8.7 KiB
Python
101 lines
8.7 KiB
Python
from datetime import datetime, date
|
||
"""
|
||
Модели для отслеживания технического обслуживания согласно ТЗ.
|
||
|
||
Соответствует формам из ТЗ:
|
||
- Статус выполненного технического обслуживания
|
||
- Статус компонентов с ограниченным межремонтным ресурсом/сроком службы (LLP, HT)
|
||
- Комплектующие изделия с ограниченным ресурсом (шасси)
|
||
"""
|
||
|
||
from sqlalchemy import String, ForeignKey, Integer, DateTime, Text, Numeric
|
||
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
||
|
||
from app.db.base import Base
|
||
from app.models.common import TimestampMixin, uuid4_str
|
||
|
||
|
||
class MaintenanceTask(Base, TimestampMixin):
|
||
"""Статус выполненного технического обслуживания.
|
||
|
||
Соответствует форме из ТЗ: Статус выполненного технического обслуживания.
|
||
"""
|
||
__tablename__ = "maintenance_tasks"
|
||
|
||
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])
|
||
|
||
ata_code: Mapped[str] = mapped_column(String(16), nullable=False, doc="Код ATA")
|
||
task_number: Mapped[str] = mapped_column(String(32), nullable=False, doc="Номер карты программы ТО")
|
||
rev: Mapped[str | None] = mapped_column(String(16), nullable=True, doc="Ревизия карты программы ТО")
|
||
references: Mapped[str | None] = mapped_column(Text, nullable=True, doc="Ссылки")
|
||
type: Mapped[str | None] = mapped_column(String(32), nullable=True, doc="Тип карты программы ТО")
|
||
status: Mapped[str] = mapped_column(String(32), nullable=False, doc="Статус")
|
||
description: Mapped[str | None] = mapped_column(Text, nullable=True, doc="Заголовок карты программы ТО")
|
||
remarks: Mapped[str | None] = mapped_column(Text, nullable=True, doc="Примечания к карте программы ТО")
|
||
threshold: Mapped[str | None] = mapped_column(String(64), nullable=True, doc="Порог выполнения карты")
|
||
interval: Mapped[str | None] = mapped_column(String(64), nullable=True, doc="Интервал выполнения карты")
|
||
last_accomplished: Mapped[str | None] = mapped_column(DateTime(timezone=True), nullable=True, doc="Дата предыдущего выполнения карты")
|
||
next_due: Mapped[str | None] = mapped_column(DateTime(timezone=True), nullable=True, doc="Дата планируемого выполнения карты")
|
||
time_remaining: Mapped[str | None] = mapped_column(String(64), nullable=True, doc="Остаток до наступления Dead-line по таску")
|
||
|
||
|
||
class LimitedLifeComponent(Base, TimestampMixin):
|
||
"""Компоненты с ограниченным межремонтным ресурсом/сроком службы (LLP, HT).
|
||
|
||
Соответствует форме из ТЗ: Статус компонентов с ограниченным межремонтным ресурсом/сроком службы (LLP, HT).
|
||
"""
|
||
__tablename__ = "limited_life_components"
|
||
|
||
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])
|
||
|
||
ata_code: Mapped[str] = mapped_column(String(16), nullable=False, doc="Код ATA")
|
||
part_number: Mapped[str] = mapped_column(String(64), nullable=False, doc="Партийный номер компонента")
|
||
serial_number: Mapped[str] = mapped_column(String(64), nullable=False, doc="Серийный номер компонента")
|
||
description: Mapped[str | None] = mapped_column(Text, nullable=True, doc="Описание события TO")
|
||
current_status: Mapped[str | None] = mapped_column(String(32), nullable=True, doc="Текущий статус компонента")
|
||
position: Mapped[str | None] = mapped_column(String(32), nullable=True, doc="Позиция компонента на ВС")
|
||
release_no: Mapped[str | None] = mapped_column(String(64), nullable=True, doc="Номер релиза/номер ярлыка")
|
||
install_date: Mapped[str | None] = mapped_column(DateTime(timezone=True), nullable=True, doc="Дата установки")
|
||
tah_inst: Mapped[str | None] = mapped_column(String(32), nullable=True, doc="Значение счётчика FH компонента на момент установки")
|
||
tac_inst: Mapped[str | None] = mapped_column(String(32), nullable=True, doc="Значение счётчика FC компонента на момент установки")
|
||
requirement_title: Mapped[str | None] = mapped_column(String(255), nullable=True, doc="Наименование требования")
|
||
requirement_type: Mapped[str | None] = mapped_column(String(32), nullable=True, doc="Тип требования")
|
||
interval: Mapped[str | None] = mapped_column(String(64), nullable=True, doc="Интервал выполнения требования")
|
||
expected_date: Mapped[str | None] = mapped_column(DateTime(timezone=True), nullable=True, doc="Ожидаемая дата выполнения требования")
|
||
to_go: Mapped[str | None] = mapped_column(String(64), nullable=True, doc="Остаток до следствия")
|
||
tsn: Mapped[str | None] = mapped_column(String(32), nullable=True, doc="Текущее значение счётчика FH компонента")
|
||
csn: Mapped[str | None] = mapped_column(String(32), nullable=True, doc="Текущее значение счётчика FC компонента")
|
||
|
||
|
||
class LandingGearComponent(Base, TimestampMixin):
|
||
"""Комплектующие изделия с ограниченным ресурсом (шасси).
|
||
|
||
Соответствует форме из ТЗ: Комплектующие изделия с ограниченным ресурсом (шасси).
|
||
"""
|
||
__tablename__ = "landing_gear_components"
|
||
|
||
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])
|
||
|
||
ata_code: Mapped[str] = mapped_column(String(16), nullable=False, doc="Код ATA")
|
||
part_number: Mapped[str] = mapped_column(String(64), nullable=False, doc="Партийный номер компонента")
|
||
serial_number: Mapped[str] = mapped_column(String(64), nullable=False, doc="Серийный номер компонента")
|
||
description: Mapped[str | None] = mapped_column(Text, nullable=True, doc="Описание события технического обслуживания")
|
||
position: Mapped[str | None] = mapped_column(String(32), nullable=True, doc="Позиция компонента на ВС")
|
||
release_no: Mapped[str | None] = mapped_column(String(64), nullable=True, doc="Номер релиза/номер ярлыка")
|
||
install_date: Mapped[str | None] = mapped_column(DateTime(timezone=True), nullable=True, doc="Дата установки")
|
||
tsn: Mapped[str | None] = mapped_column(String(32), nullable=True, doc="Текущее значение счётчика FH компонента")
|
||
csn: Mapped[str | None] = mapped_column(String(32), nullable=True, doc="Текущее значение счётчика FC компонента")
|
||
requirement: Mapped[str | None] = mapped_column(String(255), nullable=True, doc="Требование по обслуживанию")
|
||
dim: Mapped[str | None] = mapped_column(String(32), nullable=True, doc="Единица изменения")
|
||
due_at: Mapped[str | None] = mapped_column(DateTime(timezone=True), nullable=True, doc="Дедлайн")
|
||
interval: Mapped[str | None] = mapped_column(String(64), nullable=True, doc="Интервал выполнения требования")
|
||
tsr: Mapped[str | None] = mapped_column(String(32), nullable=True, doc="Значение, прошедшее с момента крайнего выполнения требования")
|
||
expected: Mapped[str | None] = mapped_column(DateTime(timezone=True), nullable=True, doc="Ожидаемая дата")
|
||
to_go: Mapped[str | None] = mapped_column(String(64), nullable=True, doc="Остаток до наступления требования")
|