klg-asutk-app/backend/app/schemas/audit.py
Yuriy 62958239ac feat: 8 шаблонов чек-листов аудита ВС (РФ/ИКАО/EASA/FAA) + редактирование
- 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>
2026-02-15 15:37:55 +03:00

115 lines
2.4 KiB
Python

"""Pydantic-схемы для чек-листов, аудитов и находок."""
from datetime import datetime
from typing import Optional
from pydantic import BaseModel, Field
# --- Checklist ---
class ChecklistItemCreate(BaseModel):
code: str
text: str
domain: Optional[str] = None
sort_order: int = 0
class ChecklistItemOut(BaseModel):
id: str
template_id: str
code: str
text: str
domain: Optional[str] = None
sort_order: int
class Config:
from_attributes = True
class ChecklistTemplateCreate(BaseModel):
name: str
version: int = 1
description: Optional[str] = None
domain: Optional[str] = None
items: Optional[list[ChecklistItemCreate]] = None
class ChecklistTemplateOut(BaseModel):
id: str
name: str
version: int
description: Optional[str] = None
domain: Optional[str] = None
is_active: bool
created_at: datetime
items: Optional[list[ChecklistItemOut]] = None
class Config:
from_attributes = True
class ChecklistTemplateUpdate(BaseModel):
name: Optional[str] = None
description: Optional[str] = None
domain: Optional[str] = None
class ChecklistItemUpdate(BaseModel):
code: Optional[str] = None
text: Optional[str] = None
sort_order: Optional[int] = None
# --- Audit ---
class AuditCreate(BaseModel):
template_id: str
aircraft_id: str
planned_at: Optional[datetime] = None
class AuditOut(BaseModel):
id: str
template_id: str
aircraft_id: str
status: str
planned_at: Optional[datetime] = None
completed_at: Optional[datetime] = None
notes: Optional[str] = None
created_at: datetime
class Config:
from_attributes = True
class AuditResponseCreate(BaseModel):
item_id: str
answer: str = Field(..., pattern="^(compliant|non_compliant|not_applicable)$")
comment: Optional[str] = None
evidence_attachment_ids: Optional[str] = None
class AuditResponseOut(BaseModel):
id: str
audit_id: str
item_id: str
answer: str
comment: Optional[str] = None
evidence_attachment_ids: Optional[str] = None
class Config:
from_attributes = True
# --- Finding ---
class FindingOut(BaseModel):
id: str
audit_id: str
item_id: str
severity: str
risk_score: int
status: str
description: Optional[str] = None
created_at: datetime
class Config:
from_attributes = True