Coverage for schemas.py: 100%
39 statements
« prev ^ index » next coverage.py v7.14.1, created at 2026-05-31 21:56 +0000
« prev ^ index » next coverage.py v7.14.1, created at 2026-05-31 21:56 +0000
1from pydantic import BaseModel
2from typing import List, Optional
3from datetime import date
5# --- Vehicle Schemas ---
6class VehicleResponse(BaseModel):
7 vrm: str
8 make: str
9 model: str
10 year: int
11 color: Optional[str] = None
12 mot_expiry: Optional[date] = None
13 generation_id: Optional[int] = None
15# --- MOT Schemas ---
16class MOTItemResponse(BaseModel):
17 item_type: str # e.g., 'ADVISORY', 'FAIL', 'MINOR'
18 description: str
19 pos_code: Optional[str] = None # Positional code e.g. "Nearside Front"
21class MOTTestResponse(BaseModel):
22 test_number: str
23 test_date: date
24 result: str # 'PASS' or 'FAIL'
25 odometer_reading: Optional[int] = None
26 odometer_unit: Optional[str] = None
27 items: List[MOTItemResponse] = []
29class VehicleMOTHistoryResponse(BaseModel):
30 vrm: str
31 tests: List[MOTTestResponse]
33# --- Predictive & Reliability Schemas ---
34class ReliabilityCategoryResponse(BaseModel):
35 category: str
36 incidence_rate: float
38class ReliabilitySummaryResponse(BaseModel):
39 generation_id: int
40 top_categories: List[ReliabilityCategoryResponse]
42class DefectIncidenceResponse(BaseModel):
43 category: str
44 defect_description: str
45 incidence_rate: float
47class PopulationResponse(BaseModel):
48 generation_id: int
49 total_on_road: int
50 total_sorn: int