Files
Hermes CI Fix fb9eba38a8 feat: 多租户隔离P2批2 — 预算/成本/费用/预警规则/BI报表加entity_id
- 12表加entity_id列(预算/偏差/规则/成本4表/费用2表/BI2表/驱动预算)
- 模型: BudgetPlan/StandardCost/ActualCost/AbcActivity/AbcAllocation/DriverFactorBudget/BiReport/Template/BudgetDeviationAlert/ExpenseRule/Reimbursement/AlertRule
- API隔离: budget plans / cost standard+actual / expenses rules+reimb / bi_reports list / alert_rules list 按token企业过滤
- 回填: kpi_id关联按KPI归属, 无关联默认酣客(entity=1); 当前数据全归酣客
- 验证: import+全端点200+pytest 451 passed
2026-08-23 18:20:29 +08:00

37 lines
1.9 KiB
Python

"""驱动因子预算模型 — 业务驱动因子 vs 科目模式"""
from sqlalchemy import Column, Integer, String, Float, DateTime, Text, JSON, func
from app.database import Base
class DriverFactorTemplate(Base):
"""驱动因子模板 — 通用/行业版本"""
__tablename__ = "driver_factor_templates"
id = Column(Integer, primary_key=True, index=True)
name = Column(String(200), nullable=False, comment="模板名称")
industry = Column(String(50), default="general", comment="行业标签: general/trade/it")
category = Column(String(50), default="revenue", comment="类别: revenue/expense")
formula_desc = Column(String(500), nullable=True, comment="公式说明")
formula_text = Column(String(500), nullable=False, comment="公式文本, 如: 客户数×客单价")
factors = Column(JSON, nullable=False, comment="驱动因子列表")
is_active = Column(Integer, default=1, comment="是否启用")
created_at = Column(DateTime, server_default=func.now())
class DriverFactorBudget(Base):
"""驱动因子预算计算结果"""
__tablename__ = "driver_factor_budgets"
id = Column(Integer, primary_key=True, index=True)
entity_id = Column(Integer, default=1, comment="企业ID (P2多租户隔离 2026-08-23)")
name = Column(String(200), nullable=False, comment="预算项名称")
industry = Column(String(50), default="general", comment="行业标签")
template_id = Column(Integer, nullable=True, comment="关联模板ID")
factors = Column(JSON, nullable=False, comment="驱动因子键值对")
calculated_value = Column(Float, nullable=False, comment="计算结果")
formula_text = Column(String(500), nullable=True, comment="公式文本")
period = Column(String(20), nullable=True, comment="期间")
sensitivity = Column(JSON, nullable=True, comment="敏感性分析结果")
created_by = Column(String(100), nullable=True)
created_at = Column(DateTime, server_default=func.now())