| from pydantic import BaseModel, ConfigDict |
| from typing import List, Optional, Union |
| from datetime import datetime |
|
|
| class TenderItem(BaseModel): |
| correlative: Optional[int] = None |
| product_code: Optional[str] = None |
| category: Optional[str] = None |
| name: str |
| description: Optional[str] = None |
| quantity: float |
| unit: str |
|
|
| class TenderAttachment(BaseModel): |
| name: str |
| url: str |
| category: Optional[str] = None |
| file_type: Optional[str] = None |
|
|
| class TenderDetailTab(BaseModel): |
| """Detail tab information (Preguntas, Historial, Apertura, Adjudicaci贸n, etc.)""" |
| tab_name: str |
| tab_type: str |
| content_summary: Optional[str] = None |
| metadata: Optional[dict] = None |
| attachment_urls: Optional[List[str]] = None |
|
|
| class Tender(BaseModel): |
| model_config = ConfigDict(from_attributes=True) |
| |
| code: str |
| name: str |
| description: str |
| buyer: str |
| buyer_region: Optional[str] = None |
| status: str |
| status_code: Optional[int] = None |
| type: Optional[str] = None |
| currency: Optional[str] = None |
| closing_date: Union[str, datetime, None] = None |
| publication_date: Union[str, datetime, None] = None |
| estimated_amount: Optional[float] = None |
| source: str = "Mercado P煤blico" |
| region: Optional[str] = None |
| sector: Optional[str] = None |
| items: List[TenderItem] = [] |
| attachments: List[TenderAttachment] = [] |
| evaluation_criteria: List[dict] = [] |
| contract_duration: Optional[str] = None |
| detail_tabs: List[TenderDetailTab] = [] |
| detail_metadata: Optional[dict] = None |
| raw_data: Optional[dict] = None |
|
|