Files
2026-02-28 15:06:52 +08:00

79 lines
3.0 KiB
Python
Raw Permalink 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.

"""
财务核算模型模块
"""
from datetime import datetime
from typing import Optional, List
from sqlalchemy import (
String, Text, Integer, Numeric, Boolean, DateTime, ForeignKey, Enum as SQLEnum,
Index, CheckConstraint
)
from sqlalchemy.orm import Mapped, mapped_column, relationship
from enum import Enum
from app.core.database import Base
class RevenueCategory(str, Enum):
"""收入类别"""
EXAMINATION = "examination" # 检查费
LAB_TEST = "lab_test" # 检验费
RADIOLOGY = "radiology" # 放射费
BED = "bed" # 床位费
NURSING = "nursing" # 护理费
TREATMENT = "treatment" # 治疗费
SURGERY = "surgery" # 手术费
INJECTION = "injection" # 注射费
OXYGEN = "oxygen" # 吸氧费
OTHER = "other" # 其他
class ExpenseCategory(str, Enum):
"""支出类别"""
MATERIAL = "material" # 材料费
PERSONNEL = "personnel" # 人员支出
MAINTENANCE = "maintenance" # 维修费
UTILITY = "utility" # 水电费
OTHER = "other" # 其他
class FinanceType(str, Enum):
"""财务类型"""
REVENUE = "revenue" # 收入
EXPENSE = "expense" # 支出
class DepartmentFinance(Base):
"""科室财务记录"""
__tablename__ = "department_finances"
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
department_id: Mapped[int] = mapped_column(ForeignKey("departments.id"), nullable=False, comment="科室ID")
period_year: Mapped[int] = mapped_column(Integer, nullable=False, comment="年度")
period_month: Mapped[int] = mapped_column(Integer, nullable=False, comment="月份")
finance_type: Mapped[FinanceType] = mapped_column(
SQLEnum(FinanceType, values_callable=lambda x: [e.value for e in x]),
nullable=False,
comment="财务类型"
)
category: Mapped[str] = mapped_column(String(50), nullable=False, comment="类别")
amount: Mapped[float] = mapped_column(Numeric(12, 2), default=0, comment="金额")
source: Mapped[Optional[str]] = mapped_column(String(100), nullable=True, comment="数据来源")
remark: Mapped[Optional[str]] = mapped_column(Text, nullable=True, comment="备注")
created_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow, comment="创建时间")
updated_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, comment="更新时间")
# 关系
department: Mapped["Department"] = relationship("Department", backref="finances")
__table_args__ = (
Index("idx_finance_dept", "department_id"),
Index("idx_finance_period", "period_year", "period_month"),
Index("idx_finance_type", "finance_type"),
Index("idx_finance_category", "category"),
CheckConstraint("amount >= 0", name="ck_finance_amount"),
)
# 为了避免循环导入在models.py中导入时使用
from app.models.models import Department # noqa