Files
erp-nutzfahrzeuge/backend/app/schemas/ocr.py
T

65 lines
1.7 KiB
Python
Raw Normal View History

"""Pydantic schemas for OCR-related request and response bodies."""
import uuid
from datetime import datetime
from typing import Any, Optional
from pydantic import BaseModel, ConfigDict, Field
class OCRUploadResponse(BaseModel):
"""Response for POST /api/v1/ocr/upload."""
message: str = "OCR processing queued"
ocr_result_id: uuid.UUID
status: str = "pending"
class OCRStructuredData(BaseModel):
"""Structured data extracted from OCR scan (ZB I/II fields)."""
brand: Optional[str] = None
model: Optional[str] = None
vin: Optional[str] = None
first_registration: Optional[str] = None
mileage: Optional[int] = None
power_kw: Optional[int] = None
fuel_type: Optional[str] = None
class OCRResultResponse(BaseModel):
"""Response for GET /api/v1/ocr/results/:id."""
model_config = ConfigDict(from_attributes=True)
id: uuid.UUID
vehicle_id: Optional[uuid.UUID] = None
file_path: str
file_name: str
mime_type: str
status: str
raw_text: Optional[str] = None
structured_data: Optional[dict[str, Any]] = None
confidence_score: Optional[float] = None
error_message: Optional[str] = None
created_at: Optional[datetime] = None
updated_at: Optional[datetime] = None
class OCRResultListResponse(BaseModel):
"""Paginated OCR results list response."""
items: list[OCRResultResponse]
total: int
page: int
page_size: int
class OCRApplyResponse(BaseModel):
"""Response for POST /api/v1/ocr/results/:id/apply."""
message: str = "OCR data applied to vehicle"
ocr_result_id: uuid.UUID
vehicle_id: uuid.UUID
updated_fields: list[str] = Field(default_factory=list)