- Unify API: lib/api.ts uses /api/v1, inbox uses /api/inbox (rewrites) - Remove localhost refs: openapi, inbox page - Add rewrites: /api/inbox|tmc -> inbox-server, /api/v1 -> FastAPI - Add stub routes: knowledge/insights, recommendations, search, log-error - Transfer from PAPA: prompts (inspection, tmc), scripts, supabase, data/tmc-requests - Fix inbox-server: ORDER BY created_at, package.json - Remove redundant app/api/inbox/files route (rewrites handle it) - knowledge/ in gitignore (large PDFs) Co-authored-by: Cursor <cursoragent@cursor.com>
103 lines
2.1 KiB
Python
103 lines
2.1 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
|
|
|
|
|
|
# --- 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
|