deep-risk/backend/app/schemas/invoice.py
2025-12-14 20:08:27 +08:00

77 lines
2.7 KiB
Python

"""
发票数据相关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