Files
shanxia2.0/backend/app/models/bx_models.py
T
2026-06-21 09:19:07 +08:00

272 lines
16 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""报销(bx)模块数据模型 — 对齐 docs/sql/20260606_bx_tables.sql"""
from datetime import datetime
from sqlalchemy import BigInteger, Column, Date, DateTime, DECIMAL, ForeignKey, Integer, SmallInteger, String
from sqlalchemy.orm import relationship
from app.core.database import Base
class BxExpenseItem(Base):
__tablename__ = "bx_expense_item"
id = Column(String(64), primary_key=True, comment="主键ID(UUID)")
parent_id = Column(String(64), nullable=False, default="0", comment="父级项目ID")
item_name = Column(String(128), nullable=False, comment="项目名称")
item_code = Column(String(64), nullable=True, comment="项目编码")
level = Column(SmallInteger, nullable=False, default=1, comment="层级")
sort_order = Column(Integer, nullable=False, default=0, comment="排序号")
status = Column(SmallInteger, nullable=False, default=1, comment="状态")
tenant_no = Column(String(64), nullable=False, default="shanxia2.0", comment="租户编号")
order_num = Column(Integer, nullable=True, comment="排序号(公共)")
remark = Column(String(512), nullable=True, comment="备注")
create_by = Column(String(64), nullable=True, comment="创建人")
create_dept_id = Column(String(64), nullable=False, default="", comment="创建部门")
create_time = Column(DateTime, nullable=False, default=datetime.now, comment="创建时间")
update_by = Column(String(64), nullable=True, comment="更新人")
update_time = Column(
DateTime, nullable=False, default=datetime.now, onupdate=datetime.now, comment="更新时间"
)
del_flag = Column(SmallInteger, nullable=False, default=0, comment="删除标记")
class BxWorkflowDef(Base):
__tablename__ = "bx_workflow_def"
id = Column(String(64), primary_key=True, comment="主键ID(UUID)")
biz_type = Column(String(32), nullable=False, comment="业务类型")
wf_name = Column(String(128), nullable=False, comment="工作流名称")
status = Column(SmallInteger, nullable=False, default=1, comment="状态")
tenant_no = Column(String(64), nullable=False, default="shanxia2.0", comment="租户编号")
order_num = Column(Integer, nullable=True, comment="排序号(公共)")
remark = Column(String(512), nullable=True, comment="备注")
create_by = Column(String(64), nullable=True, comment="创建人")
create_dept_id = Column(String(64), nullable=False, default="", comment="创建部门")
create_time = Column(DateTime, nullable=False, default=datetime.now, comment="创建时间")
update_by = Column(String(64), nullable=True, comment="更新人")
update_time = Column(
DateTime, nullable=False, default=datetime.now, onupdate=datetime.now, comment="更新时间"
)
del_flag = Column(SmallInteger, nullable=False, default=0, comment="删除标记")
nodes = relationship(
"BxWorkflowNode",
back_populates="workflow_def",
primaryjoin="and_(BxWorkflowDef.id == BxWorkflowNode.wf_id, BxWorkflowNode.del_flag == 0)",
foreign_keys="BxWorkflowNode.wf_id",
order_by="BxWorkflowNode.node_order",
lazy="selectin",
)
class BxWorkflowNode(Base):
__tablename__ = "bx_workflow_node"
id = Column(String(64), primary_key=True, comment="主键ID(UUID)")
wf_id = Column(
String(64),
ForeignKey("bx_workflow_def.id"),
nullable=False,
comment="工作流定义ID",
)
node_name = Column(String(128), nullable=False, comment="节点名称")
node_order = Column(Integer, nullable=False, default=0, comment="节点顺序")
approver_id = Column(String(64), nullable=True, comment="审批人用户ID")
approver_name = Column(String(64), nullable=True, comment="审批人姓名")
tenant_no = Column(String(64), nullable=False, default="shanxia2.0", comment="租户编号")
order_num = Column(Integer, nullable=True, comment="排序号(公共)")
remark = Column(String(512), nullable=True, comment="备注")
create_by = Column(String(64), nullable=True, comment="创建人")
create_dept_id = Column(String(64), nullable=False, default="", comment="创建部门")
create_time = Column(DateTime, nullable=False, default=datetime.now, comment="创建时间")
update_by = Column(String(64), nullable=True, comment="更新人")
update_time = Column(
DateTime, nullable=False, default=datetime.now, onupdate=datetime.now, comment="更新时间"
)
del_flag = Column(SmallInteger, nullable=False, default=0, comment="删除标记")
workflow_def = relationship(
"BxWorkflowDef",
back_populates="nodes",
foreign_keys=[wf_id],
)
class BxAdvanceApply(Base):
__tablename__ = "bx_advance_apply"
id = Column(String(64), primary_key=True, comment="主键ID(UUID)")
apply_code = Column(String(32), nullable=False, comment="申请单号")
applicant_id = Column(String(64), nullable=False, comment="申请人用户ID")
applicant_name = Column(String(64), nullable=False, comment="申请人姓名")
reason = Column(String(1024), nullable=False, comment="申请原因")
purpose = Column(String(1024), nullable=True, comment="申请目的")
expense_item_id = Column(String(64), nullable=True, comment="费用项目ID")
amount = Column(DECIMAL(14, 2), nullable=False, comment="申请金额")
status = Column(String(32), nullable=False, default="draft", comment="状态")
current_node = Column(String(128), nullable=True, comment="当前审批节点")
wf_id = Column(String(64), nullable=True, comment="工作流定义ID")
issue_status = Column(String(32), nullable=True, comment="发放状态")
issue_time = Column(DateTime, nullable=True, comment="发放时间")
issue_user_id = Column(String(64), nullable=True, comment="发放操作人ID")
issue_user_name = Column(String(64), nullable=True, comment="发放操作人姓名")
issue_remark = Column(String(512), nullable=True, comment="发放备注")
actual_amount = Column(DECIMAL(14, 2), nullable=True, comment="实际发放金额")
tenant_no = Column(String(64), nullable=False, default="shanxia2.0", comment="租户编号")
order_num = Column(Integer, nullable=True, comment="排序号(公共)")
remark = Column(String(512), nullable=True, comment="备注")
create_by = Column(String(64), nullable=True, comment="创建人")
create_dept_id = Column(String(64), nullable=False, default="", comment="创建部门")
create_time = Column(DateTime, nullable=False, default=datetime.now, comment="创建时间")
update_by = Column(String(64), nullable=True, comment="更新人")
update_time = Column(
DateTime, nullable=False, default=datetime.now, onupdate=datetime.now, comment="更新时间"
)
del_flag = Column(SmallInteger, nullable=False, default=0, comment="删除标记")
class BxAdvanceApproval(Base):
__tablename__ = "bx_advance_approval"
id = Column(String(64), primary_key=True, comment="主键ID(UUID)")
apply_id = Column(String(64), nullable=False, comment="备用金申请单ID")
node_order = Column(Integer, nullable=False, comment="节点顺序")
node_name = Column(String(128), nullable=False, comment="节点名称")
approver_id = Column(String(64), nullable=False, comment="审批人用户ID")
approver_name = Column(String(64), nullable=False, comment="审批人姓名")
approval_status = Column(String(32), nullable=False, comment="审批结果")
approval_opinion = Column(String(1024), nullable=True, comment="审批意见")
approval_time = Column(DateTime, nullable=False, comment="审批时间")
tenant_no = Column(String(64), nullable=False, default="shanxia2.0", comment="租户编号")
order_num = Column(Integer, nullable=True, comment="排序号(公共)")
remark = Column(String(512), nullable=True, comment="备注")
create_by = Column(String(64), nullable=True, comment="创建人")
create_dept_id = Column(String(64), nullable=False, default="", comment="创建部门")
create_time = Column(DateTime, nullable=False, default=datetime.now, comment="创建时间")
update_by = Column(String(64), nullable=True, comment="更新人")
update_time = Column(DateTime, nullable=True, onupdate=datetime.now, comment="更新时间")
del_flag = Column(SmallInteger, nullable=False, default=0, comment="删除标记")
class BxReimburseApply(Base):
__tablename__ = "bx_reimburse_apply"
id = Column(String(64), primary_key=True, comment="主键ID(UUID)")
apply_code = Column(String(32), nullable=False, comment="报销单号")
title = Column(String(256), nullable=False, comment="报销标题")
reimburse_date = Column(Date, nullable=False, comment="报销日期")
title_seq = Column(Integer, nullable=True, comment="标题序号(同租户同报销日期下自增)")
applicant_id = Column(String(64), nullable=False, comment="申请人用户ID")
applicant_name = Column(String(64), nullable=False, comment="申请人姓名")
expense_id = Column(String(64), nullable=False, comment="费用项目ID")
expense_name = Column(String(128), nullable=False, comment="费用项目名称")
amount = Column(DECIMAL(14, 2), nullable=False, comment="报销金额")
invoice_count = Column(Integer, nullable=False, default=0, comment="发票数量")
attach_count = Column(Integer, nullable=False, default=0, comment="附件数量")
status = Column(String(32), nullable=False, default="draft", comment="状态")
current_node = Column(String(128), nullable=True, comment="当前审批节点")
wf_id = Column(String(64), nullable=True, comment="工作流定义ID")
pay_status = Column(String(32), nullable=True, comment="支付状态")
pay_time = Column(DateTime, nullable=True, comment="支付时间")
pay_user_id = Column(String(64), nullable=True, comment="支付操作人ID")
pay_user_name = Column(String(64), nullable=True, comment="支付操作人姓名")
actual_amount = Column(DECIMAL(14, 2), nullable=True, comment="实际发放金额")
offset_advance_id = Column(String(64), nullable=True, comment="冲抵备用金单ID")
offset_amount = Column(DECIMAL(14, 2), nullable=True, comment="冲抵金额")
tenant_no = Column(String(64), nullable=False, default="shanxia2.0", comment="租户编号")
order_num = Column(Integer, nullable=True, comment="排序号(公共)")
remark = Column(String(512), nullable=True, comment="备注说明")
create_by = Column(String(64), nullable=True, comment="创建人")
create_dept_id = Column(String(64), nullable=False, default="", comment="创建部门")
create_time = Column(DateTime, nullable=False, default=datetime.now, comment="创建时间")
update_by = Column(String(64), nullable=True, comment="更新人")
update_time = Column(
DateTime, nullable=False, default=datetime.now, onupdate=datetime.now, comment="更新时间"
)
del_flag = Column(SmallInteger, nullable=False, default=0, comment="删除标记")
class BxReimburseDetail(Base):
__tablename__ = "bx_reimburse_detail"
id = Column(String(64), primary_key=True, comment="主键ID(UUID)")
reimburse_id = Column(String(64), nullable=False, comment="报销单ID")
expense_id = Column(String(64), nullable=False, comment="费用项目ID")
expense_name = Column(String(128), nullable=False, comment="费用项目名称")
amount = Column(DECIMAL(14, 2), nullable=False, comment="报销金额")
tenant_no = Column(String(64), nullable=False, default="shanxia2.0", comment="租户编号")
order_num = Column(Integer, nullable=True, comment="排序号(公共)")
remark = Column(String(512), nullable=True, comment="备注")
create_by = Column(String(64), nullable=True, comment="创建人")
create_dept_id = Column(String(64), nullable=False, default="", comment="创建部门")
create_time = Column(DateTime, nullable=False, default=datetime.now, comment="创建时间")
update_by = Column(String(64), nullable=True, comment="更新人")
update_time = Column(
DateTime, nullable=False, default=datetime.now, onupdate=datetime.now, comment="更新时间"
)
del_flag = Column(SmallInteger, nullable=False, default=0, comment="删除标记")
class BxReimburseApproval(Base):
__tablename__ = "bx_reimburse_approval"
id = Column(String(64), primary_key=True, comment="主键ID(UUID)")
apply_id = Column(String(64), nullable=False, comment="报销申请单ID")
node_order = Column(Integer, nullable=False, comment="节点顺序")
node_name = Column(String(128), nullable=False, comment="节点名称")
approver_id = Column(String(64), nullable=False, comment="审批人用户ID")
approver_name = Column(String(64), nullable=False, comment="审批人姓名")
approval_status = Column(String(32), nullable=False, comment="审批结果")
approval_opinion = Column(String(1024), nullable=True, comment="审批意见")
approval_time = Column(DateTime, nullable=False, comment="审批时间")
tenant_no = Column(String(64), nullable=False, default="shanxia2.0", comment="租户编号")
order_num = Column(Integer, nullable=True, comment="排序号(公共)")
remark = Column(String(512), nullable=True, comment="备注")
create_by = Column(String(64), nullable=True, comment="创建人")
create_dept_id = Column(String(64), nullable=False, default="", comment="创建部门")
create_time = Column(DateTime, nullable=False, default=datetime.now, comment="创建时间")
update_by = Column(String(64), nullable=True, comment="更新人")
update_time = Column(DateTime, nullable=True, onupdate=datetime.now, comment="更新时间")
del_flag = Column(SmallInteger, nullable=False, default=0, comment="删除标记")
class BxReimburseOffset(Base):
__tablename__ = "bx_reimburse_offset"
id = Column(String(64), primary_key=True, comment="主键ID(UUID)")
reimburse_id = Column(String(64), nullable=False, comment="报销申请单ID")
advance_id = Column(String(64), nullable=False, comment="备用金申请单ID")
offset_amount = Column(DECIMAL(14, 2), nullable=False, comment="冲抵金额")
tenant_no = Column(String(64), nullable=False, default="shanxia2.0", comment="租户编号")
order_num = Column(Integer, nullable=True, comment="排序号(公共)")
remark = Column(String(512), nullable=True, comment="备注")
create_by = Column(String(64), nullable=True, comment="创建人")
create_dept_id = Column(String(64), nullable=False, default="", comment="创建部门")
create_time = Column(DateTime, nullable=False, default=datetime.now, comment="创建时间")
update_by = Column(String(64), nullable=True, comment="更新人")
update_time = Column(DateTime, nullable=True, onupdate=datetime.now, comment="更新时间")
del_flag = Column(SmallInteger, nullable=False, default=0, comment="删除标记")
class BxAttachment(Base):
__tablename__ = "bx_attachment"
id = Column(String(64), primary_key=True, comment="主键ID(UUID)")
biz_type = Column(String(32), nullable=False, comment="业务类型")
biz_id = Column(String(64), nullable=False, comment="业务单据ID")
file_name = Column(String(256), nullable=False, comment="文件名")
file_path = Column(String(512), nullable=False, comment="文件存储路径")
file_type = Column(String(128), nullable=True, comment="文件MIME类型")
file_size = Column(BigInteger, nullable=True, comment="文件大小")
attach_type = Column(String(32), nullable=True, default="attachment", comment="附件类型")
sort_order = Column(Integer, nullable=False, default=0, comment="排序号")
tenant_no = Column(String(64), nullable=False, default="shanxia2.0", comment="租户编号")
order_num = Column(Integer, nullable=True, comment="排序号(公共)")
remark = Column(String(512), nullable=True, comment="备注")
create_by = Column(String(64), nullable=True, comment="创建人")
create_dept_id = Column(String(64), nullable=False, default="", comment="创建部门")
create_time = Column(DateTime, nullable=False, default=datetime.now, comment="创建时间")
update_by = Column(String(64), nullable=True, comment="更新人")
update_time = Column(DateTime, nullable=True, onupdate=datetime.now, comment="更新时间")
del_flag = Column(SmallInteger, nullable=False, default=0, comment="删除标记")