# 费用申请审批财务规则概念文档 ## 功能一句话 在财务规则中心新增《公司费用申请审批规则》,统一维护业务招待、办公用品和通用大额费用的事前申请与审批阈值,并让报销风险规则引用该规则执行。 ## 背景与问题 现有系统已经有“业务招待无申请”“办公采购无申请”“大额费用无申请”等风险规则,但制度依据主要以风险规则 JSON 的口径字段存在,财务规则中心缺少一张可被制度管理员查看、编辑和追溯的规则表。 用户明确要求: - 业务招待费超过 500 元需要申请。 - 大额办公用品需要申请。 - 金额超过 2000 元的费用都需要走审批。 - 这些要求最好形成财务规则,而不是散落在代码或前端提示中。 ## 目标与非目标 目标: - 新增一张财务规则资产《公司费用申请审批规则》。 - 规则资产以 Excel 形式进入 `finance-rules` 规则库,并在规则中心按“财务规则”展示。 - 风险规则引用统一的 `finance_rule_code`,不再使用零散口径 code。 - 报销阶段按结构化金额规则判断,而不是只靠关键词命中。 - 关联有效申请单后不触发“缺少申请”风险。 非目标: - 本轮不新增数据库字段。 - 本轮不新增非本体业务字段。 - 本轮不改造完整审批流节点,只补充申请前置与风险执行依据。 ## 用户与场景 - 报销人:上传或录入业务招待、办公用品、大额费用报销时,系统自动识别是否缺少事前申请。 - 直属领导和财务审核人:审核单据时能看到风险来自财务规则。 - 财务制度管理员:能在规则中心看到并维护《公司费用申请审批规则》。 ## 功能能力 ### 财务规则表 规则表包含以下行: - 业务招待费:单次费用金额大于 500 元时,必须先提交费用申请单。 - 办公用品费:单次或批量采购金额大于 2000 元时,必须先提交办公采购或费用申请单。 - 通用大额费用:任意费用金额大于 2000 元时,必须进入审批流程。 ### 风险规则执行 - `meal` 与 `entertainment` 都视为业务招待费。 - `office` 视为办公用品费。 - `all` 视为通用大额费用。 - 报销阶段没有关联有效申请单时,超过阈值命中高风险。 - 已有关联申请单时,不命中缺少申请风险。 ## 方案设计 ### 后端 - 在 `agent_asset_spreadsheet.py` 中新增费用申请审批规则 code 与文件名常量。 - 在财务规则同步中新增该资产的 metadata、Excel 工作簿生成和版本快照。 - 在初始化和补齐逻辑中创建该财务规则资产,确保老库和新库都能看到。 - 将三条风险规则改为 `composite_rule_v1`,使用金额阈值和申请单存在性执行。 - 在 `risk_rule_template_executor.py` 中补齐 `application.*` 字段解析,桥接现有 `application_link` / `application_handoff` / `application_detail` 风险上下文。 ### 前端 本轮不新增前端页面。规则中心已有财务规则和 JSON 风险规则展示能力,后端资产同步后前端可直接展示。 ### 数据与本体 本轮只使用现有本体字段: - `expense_type` - `amount` - `reason` - `application_claim_id` - `application_claim_no` - `application_detail` 不新增非本体字段。 ## 算法与公式 业务招待费规则: $$ hit = expenseType \in \{meal, entertainment\} \land amount > 500 \land \neg hasApplication $$ 办公用品规则: $$ hit = expenseType = office \land amount > 2000 \land \neg hasApplication $$ 通用大额规则: $$ hit = amount > 2000 \land \neg hasApplication $$ 其中: - `amount` 来自 `claim.amount`。 - `hasApplication` 来自 `application.id`、`application.claim_no` 或等价申请单上下文。 ## 测试方案 - 单元测试:验证 `application.*` 字段能从已有申请关联上下文解析。 - 规则执行测试:超过 500 元业务招待费且无申请命中风险。 - 规则执行测试:超过 2000 元办公用品费且无申请命中风险。 - 规则执行测试:超过 2000 元通用费用且无申请命中风险。 - 规则执行测试:已关联申请单的超额费用不命中缺少申请风险。 - 资产测试:规则中心种子数据包含《公司费用申请审批规则》,且 `config_json.tag` 为“财务规则”。 ## 指标与验收 - 财务规则中心能看到新增规则资产。 - 新增资产 `finance_rule_code` 统一为 `expense.preapproval.policy`。 - 三条风险规则均引用该财务规则 code。 - 容器内后端定向测试通过。 - 不新增非本体业务字段。 ## 风险与开放问题 - “大额办公用品”的金额阈值按用户同句“大额/超过 2000 都需要审批”落为 2000 元。 - 当前申请单上下文主要存在 `risk_flags_json` 的申请关联 flag 中,本轮先补执行器解析,不新增外键字段。 - 后续如果要支持不同部门或不同职级阈值,可以在同一张财务规则表中扩展分档行。