99 lines
3.0 KiB
Python
99 lines
3.0 KiB
Python
"""
|
||
发票数据模型
|
||
"""
|
||
from datetime import datetime
|
||
from typing import Optional, TYPE_CHECKING
|
||
|
||
from sqlalchemy import (
|
||
Boolean,
|
||
Column,
|
||
Date,
|
||
DateTime,
|
||
String,
|
||
Text,
|
||
Float,
|
||
)
|
||
from sqlalchemy.orm import Mapped, mapped_column
|
||
|
||
from app.models.base import BaseModel
|
||
|
||
if TYPE_CHECKING:
|
||
from .streamer import StreamerInfo, McnAgency
|
||
|
||
|
||
class Invoice(BaseModel):
|
||
"""
|
||
发票数据表
|
||
"""
|
||
__tablename__ = "invoice"
|
||
|
||
invoice_id: Mapped[str] = mapped_column(
|
||
String(50), unique=True, nullable=False, comment="发票ID"
|
||
)
|
||
invoice_code: Mapped[str] = mapped_column(
|
||
String(20), nullable=False, comment="发票代码"
|
||
)
|
||
invoice_no: Mapped[str] = mapped_column(
|
||
String(20), nullable=False, comment="发票号码"
|
||
)
|
||
invoice_type: Mapped[str] = mapped_column(
|
||
String(20),
|
||
nullable=False,
|
||
comment="发票类型:vat_special-增值税专用发票,vat_general-增值税普通发票,electronic-电子发票",
|
||
)
|
||
direction: Mapped[str] = mapped_column(
|
||
String(20),
|
||
nullable=False,
|
||
comment="发票方向:issued-已开具,received-已收到",
|
||
)
|
||
invoice_date: Mapped[Date] = mapped_column(
|
||
Date, nullable=False, comment="开票日期"
|
||
)
|
||
purchaser_name: Mapped[str] = mapped_column(
|
||
String(200), nullable=False, comment="购买方名称"
|
||
)
|
||
purchaser_tax_no: Mapped[str] = mapped_column(
|
||
String(18), nullable=False, comment="购买方税号"
|
||
)
|
||
seller_name: Mapped[str] = mapped_column(
|
||
String(200), nullable=False, comment="销售方名称"
|
||
)
|
||
seller_tax_no: Mapped[str] = mapped_column(
|
||
String(18), nullable=False, comment="销售方税号"
|
||
)
|
||
total_amount: Mapped[float] = mapped_column(
|
||
nullable=False, comment="金额合计"
|
||
)
|
||
total_tax: Mapped[float] = mapped_column(
|
||
nullable=False, comment="税额合计"
|
||
)
|
||
total_amount_with_tax: Mapped[float] = mapped_column(
|
||
nullable=False, comment="价税合计"
|
||
)
|
||
amount_in_words: Mapped[str] = mapped_column(
|
||
String(200), nullable=False, comment="大写金额"
|
||
)
|
||
invoice_status: Mapped[str] = mapped_column(
|
||
String(20),
|
||
nullable=False,
|
||
comment="发票状态:normal-正常,cancelled-已作废,red-红字,returned-退回",
|
||
)
|
||
is_verified: Mapped[bool] = mapped_column(
|
||
default=False, comment="是否已验证"
|
||
)
|
||
verified_time: Mapped[Optional[datetime]] = mapped_column(
|
||
DateTime(timezone=True), nullable=True, comment="验证时间"
|
||
)
|
||
is_red_invoice: Mapped[bool] = mapped_column(
|
||
default=False, comment="是否红字发票"
|
||
)
|
||
red_reason: Mapped[Optional[str]] = mapped_column(
|
||
String(100), nullable=True, comment="红字原因"
|
||
)
|
||
remark: Mapped[Optional[str]] = mapped_column(
|
||
Text, nullable=True, comment="备注"
|
||
)
|
||
pdf_url: Mapped[Optional[str]] = mapped_column(
|
||
String(500), nullable=True, comment="PDF文件地址"
|
||
)
|