模块按“模型 + 工件”两层组织: - 核心模型层:dcf.py(WACC、FCFF、双终值、折现与股权桥)、comps.py(EV 桥、财年日历化、五类倍数矩阵与分布)、threestatement.py(损益/现金流/资产负债表联动与循环求解)各自维护独立的 frozen dataclass 结果类型与 run_* 入口,彼此不互相导入。 - 共享契约层:contracts.py 提供 Assumption、MissingInputError、ValuationError、require_inputs、require_positive,所有模型在入口处强制缺失输入即不可运行,禁止静默默认。 - 工件与导出层:artifact.py 通过 _flatten + _normalize_number 对任意输入树做键序无关的扁平化与数值规范化,计算 input_hash;通过读取源码字节计算 model_version;提供 build_dcf_artifact / build_comps_artifact / build_three_statement_artifact 包装各模型结果,并暴露 diff_artifacts 比较两份工件的字段级差异;同时用 openpyxl/pptx 输出工作簿与摘要幻灯片,强制把被排除的同行、省略的 EV 桥项、revolver 抽还等“丑陋部分”写入报告。 依赖方向单向:artifact → dcf/comps/threestatement → contracts;模型之间互不引用,保证任一子模块缺可选依赖不会破坏其他模型。