from pydantic import BaseModel, Field from typing import List, Optional class DocumentMetadata(BaseModel): document_title: Optional[str] = "" cycle_no: Optional[str] = "" cycle_date: Optional[str] = "" cycle_details: Optional[str] = "" furnace: Optional[str] = "" max_thick_loaded: Optional[str] = "" class ProcessDetails(BaseModel): fc_on_time: Optional[str] = "" temp_reach_at: Optional[str] = "" fc_off_time: Optional[str] = "" water_temp_before: Optional[str] = "" water_temp_after: Optional[str] = "" quenching_sec: Optional[str] = "" class PatternData(BaseModel): pattern_code: Optional[str] = "" item_name: Optional[str] = "" remarks: Optional[str] = "" class MainTableData(BaseModel): pour_date: Optional[str] = "" heat_no: Optional[str] = "" grade: Optional[str] = "" sale_order: Optional[str] = "" drawing_no: Optional[str] = "" part_no: Optional[str] = "" description: Optional[str] = "" qty: Optional[str] = "" weight: Optional[str] = "" class Signatures(BaseModel): lab_in_charge: Optional[str] = "" qa_in_charge: Optional[str] = "" verified_sign: Optional[str] = "" class ExtractedDocumentData(BaseModel): """ Main schema that matches the JSON payload returned by the LLM Engine. """ document_metadata: DocumentMetadata = Field(default_factory=DocumentMetadata) process_details: ProcessDetails = Field(default_factory=ProcessDetails) pattern_data: List[PatternData] = Field(default_factory=list) main_table_data: List[MainTableData] = Field(default_factory=list) signatures: Signatures = Field(default_factory=Signatures) # Used for standardizing API responses class DocumentResponse(BaseModel): message: str filename: str task_id: str data: ExtractedDocumentData