# @description: # @author: licanglong # @date: 2025/12/22 20:40 from datetime import date, datetime from decimal import Decimal from typing import Optional, List from pydantic import BaseModel, Field DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S" class InvoicePurchaseDetailDTO(BaseModel): """ 进项发票-信息汇总表(API / 序列化专用) """ id: int = Field(..., description="自增主键") tax_id: str = Field(..., description="购方税号") zzfpdm: str = Field(..., description="发票代码") zzfphm: str = Field(..., description="发票号码") kprq: date = Field(..., description="开票日期") gmfmc: str = Field(..., description="销方名称") gmfnsrsbh: str = Field(..., description="销方税号") ssflbm: Optional[str] = Field(None, description="税收分类编码") tdywlx: Optional[str] = Field(None, description="特定业务类型") hwmc: Optional[str] = Field(None, description="货物或应税劳务名称") easy_hwmc: Optional[str] = Field(None, description="货物名称") ggxh: Optional[str] = Field(None, description="规格型号") dw: Optional[str] = Field(None, description="计量单位名称") dw_symbol: Optional[str] = Field(None, description="计量单位符号") xssl: Optional[Decimal] = Field(None, description="数量") dj: Optional[Decimal] = Field(None, description="单价") hjje: Optional[Decimal] = Field(None, description="金额") sl: Optional[str] = Field(None, description="税率") hjse: Optional[Decimal] = Field(None, description="税额") jshj: Optional[Decimal] = Field(None, description="价税合计") fplydm: str = Field(..., description="发票来源") fppzdm: str = Field(..., description="发票票种") fpztdm: str = Field(..., description="发票状态") sflzfp: str = Field(..., description="发票风险等级") kpr: str = Field(..., description="开票人") created_at: datetime = Field(..., description="创建时间") class Config: from_attributes = True # ORM → Pydantic 的关键 class InvoicePurchaseDetailList(BaseModel): invoice_purchase_details: List[InvoicePurchaseDetailDTO]