""" 发票数据相关Pydantic模型 """ from datetime import date, datetime from typing import Optional, List from pydantic import BaseModel, Field class InvoiceBase(BaseModel): """发票基础模型""" invoice_code: str = Field(..., description="发票代码") invoice_no: str = Field(..., description="发票号码") invoice_type: str = Field(..., description="发票类型") direction: str = Field(..., description="发票方向") invoice_date: date = Field(..., description="开票日期") purchaser_name: str = Field(..., description="购买方名称") purchaser_tax_no: str = Field(..., description="购买方税号") seller_name: str = Field(..., description="销售方名称") seller_tax_no: str = Field(..., description="销售方税号") total_amount: float = Field(..., description="金额合计") total_tax: float = Field(..., description="税额合计") total_amount_with_tax: float = Field(..., description="价税合计") amount_in_words: str = Field(..., description="大写金额") invoice_status: str = Field(..., description="发票状态") is_verified: bool = Field(..., description="是否已验证") verified_time: Optional[datetime] = Field(None, description="验证时间") is_red_invoice: bool = Field(..., description="是否红字发票") red_reason: Optional[str] = Field(None, description="红字原因") remark: Optional[str] = Field(None, description="备注") pdf_url: Optional[str] = Field(None, description="PDF文件地址") class InvoiceCreate(InvoiceBase): """创建发票""" pass class InvoiceUpdate(BaseModel): """更新发票""" invoice_code: Optional[str] = None invoice_no: Optional[str] = None invoice_type: Optional[str] = None direction: Optional[str] = None invoice_date: Optional[date] = None purchaser_name: Optional[str] = None purchaser_tax_no: Optional[str] = None seller_name: Optional[str] = None seller_tax_no: Optional[str] = None total_amount: Optional[float] = None total_tax: Optional[float] = None total_amount_with_tax: Optional[float] = None amount_in_words: Optional[str] = None invoice_status: Optional[str] = None is_verified: Optional[bool] = None verified_time: Optional[datetime] = None is_red_invoice: Optional[bool] = None red_reason: Optional[str] = None remark: Optional[str] = None pdf_url: Optional[str] = None class InvoiceResponse(InvoiceBase): """发票响应模型""" id: int invoice_id: str class Config: from_attributes = True class InvoiceListResponse(BaseModel): """发票列表响应模型""" records: List[InvoiceResponse] total: int page: int size: int