Files
cma-management/backend/app/models/report_opening.py
T
Hermes CI Fix ae6f71dbc0 feat(cma-report): 建账期初层 + 方向判定可信度 + 权益行科目集(M1/M2/M7,规则表 v1.1)
- M1 时点报表口径:余额 = 期初(report_opening_balances) + 累计发生额;期初只作用于取数层
  (不生成凭证/不写 voucher_details/不改 kpi_values);basis=period 不套期初;受 effective_date 约束
- M2 期初未补 → direction_check_unreliable=true:报表/底稿带"期初未补,方向判定不可信"水印,
  重分类触发只进底稿诊断(diagnostic_only),不落地对外行项目
- M7 权益行科目集 = {3001,3002,3101,3103,3104,3105}(含 4001/4002/4101/4103/4104 别名):补实收资本 3001
- 1901 待处理财产损溢过渡列报「其他流动资产」以保恒等式(M6 归因文案)
- 只读验收脚本 + 幂等导入器(dry-run 默认,--commit 门控)
2026-09-16 01:17:09 +08:00

42 lines
2.3 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.
"""报表科目期初余额(账套建账期初层)— 2026-09-16
时点报表口径铁律(《CMA 资产负债表重分类规则表 v1.1》§零):
余额 = 期初余额 + Σ(借−贷)(资产) / 期初余额 + Σ(贷−借)(负债·权益)
CMA 原有取数只有 `voucher_details` 累计发生额(账套最早期间 2021-03),**不含建账期初**,
使全部往来/税费类科目出现伪反向项(实测:1001 差 346,139.02、1405 差 6,133,427.20……逐月恒定)。
本表只作用于**报表取数层**:
· 不生成记账凭证、不写 `voucher_details`、不改 `kpi_values`;
· 期初数据来源:反解清单(status=derived,待源系统《科目余额表 2021.03》确认 → confirmed)。
"""
from sqlalchemy import Column, Integer, String, Numeric, DateTime, UniqueConstraint, func
from app.database import Base
class ReportOpeningBalance(Base):
"""账套建账期初余额(一账套一科目一期初行)"""
__tablename__ = "report_opening_balances"
__table_args__ = (
UniqueConstraint("entity_id", "subject_code", "effective_date",
name="uq_report_opening_entity_subject_effective"),
)
id = Column(Integer, primary_key=True, index=True)
entity_id = Column(Integer, nullable=False, index=True, comment="账套(实体)ID")
subject_code = Column(String(20), nullable=False, index=True, comment="科目编码(前缀匹配)")
subject_name = Column(String(100), comment="科目名称")
balance_side = Column(String(10), nullable=False, comment="余额方向 debit/credit")
amount = Column(Numeric(18, 2), nullable=False, default=0, comment="期初余额(正数)")
effective_date = Column(String(7), nullable=False, default="2021-03",
comment="生效期间 YYYY-MM(建账期);早于该期的期间不套用")
source = Column(String(50), comment="来源标识,如 reverse-calc-20260916")
evidence = Column(String(255), comment="取证说明")
status = Column(String(20), nullable=False, default="derived",
comment="derived=反解待确认 / confirmed=源系统确认")
created_at = Column(DateTime, server_default=func.now())
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now())