{
  "name": "company_finance_intake_rules_draft",
  "version": "0.1.0",
  "updated_at": "2026-06-03T21:25:53+08:00",
  "description": "公司财务报销与走账系统一期：机器人入库规则草案。供 finance_get_intake_rules / finance_validate_intake_draft / MCP 后端实现参考。",
  "global_principles": [
    "机器人必须先查规则，再决定追问。",
    "关键财务事实不得猜测：金额、主体、项目/基础经营归属、收付款方、发票状态、资金账户。",
    "先创建 intake_draft，确认/审批后再写正式事实表。",
    "真实资金流只进入 fund_transaction；应收/应付/报销的已收已付由核销表派生。",
    "个人账是派生口径，不作为第一层事实表。",
    "缺少非关键字段可标待确认；缺少阻塞字段必须追问。",
    "所有机器人写入接口必须携带或生成 idempotency_key，避免重复入库。"
  ],
  "field_levels": {
    "blocking": "缺失时不得提交审批/正式入库，机器人必须追问。",
    "warning": "可生成草稿，但预览和审批摘要必须提示风险。",
    "optional": "可空或待确认，不阻塞草稿。"
  },
  "intents": [
    {
      "intent": "record_reimbursement",
      "name": "记录报销/个人垫付",
      "trigger_examples": ["我要报销", "某人垫付了", "这笔无票先记一下", "这个费用走公司"],
      "creates": ["intake_draft", "reimbursement_order", "reimbursement_item", "approval_instance?"],
      "not_creates_until_payment": ["fund_transaction", "reimbursement_payment"],
      "required_fields": [
        {"field": "applicant_subject", "label": "申请/经办人", "level": "blocking", "question": "这笔是谁申请或经办的？如果就是你，我先按你作为经办人记录。"},
        {"field": "payee_subject", "label": "收款/报销对象", "level": "blocking", "question": "这笔最终要报销给谁或记到谁的个人账？"},
        {"field": "items[].amount", "label": "每条明细金额", "level": "blocking", "question": "每一笔分别是多少钱？"},
        {"field": "items[].project_or_owner_subject", "label": "费用归属项目或主体基础经营", "level": "blocking", "question": "这笔费用归哪个项目？如果不是具体项目，请告诉我是哪个主体的基础经营/公共支出。"},
        {"field": "items[].invoice_status", "label": "发票状态", "level": "blocking", "question": "这笔有没有发票？是有票、待补票，还是无票？"},
        {"field": "items[].description", "label": "费用说明", "level": "blocking", "question": "这笔费用具体是什么？"}
      ],
      "optional_fields": [
        {"field": "occurred_at", "default": "待确认", "question": "发生日期是哪天？不知道可以先记待确认。"},
        {"field": "expense_category", "default": "待分类", "question": "费用大类是什么？例如采购、打样、物流、AI工具、办公、差旅等。"},
        {"field": "attachments", "default": "空", "question": "有没有发票、截图或付款凭证要附上？"},
        {"field": "advancer_subject", "default": "payee_subject", "question": "实际垫付人是不是收款/报销对象本人？"}
      ],
      "defaulting_rules": [
        "如果有 project_id，则 owner_subject 由 project.owner_subject 推导。",
        "如果无业务项目但明确主体，则挂该主体默认 BASE_OPERATION 项目。",
        "无票报销默认进入个人账派生候选；有票报销默认不进入个人账，除非规则另设。"
      ],
      "risk_flags": ["无发票", "待补票", "归属基础经营项目", "金额较大但无附件", "项目归属不明确"],
      "commit_boundary": "审批或人工确认后才创建正式 reimbursement_order/reimbursement_item；付款发生后再用 fund_transaction + reimbursement_payment 核销。"
    },
    {
      "intent": "record_receivable",
      "name": "记录应收/合同款/项目收入计划",
      "trigger_examples": ["这个项目要收多少钱", "合同款", "尾款", "对方还欠我们"],
      "creates": ["intake_draft", "receivable", "commercial_order?"],
      "not_creates_until_payment": ["fund_transaction", "receivable_settlement"],
      "required_fields": [
        {"field": "project", "label": "归属项目", "level": "blocking", "question": "这笔应收归哪个项目？"},
        {"field": "owner_subject", "label": "收入归属主体", "level": "blocking", "question": "这笔收入归哪个主体？如果项目已配置主体，可由项目自动推导。"},
        {"field": "amount", "label": "应收金额", "level": "blocking", "question": "应收金额是多少？"},
        {"field": "counterparty_subject", "label": "客户/付款方", "level": "blocking", "question": "应该由谁付款？客户或对方主体是谁？"},
        {"field": "receivable_name", "label": "款项名称", "level": "blocking", "question": "这笔款叫什么？例如首款、尾款、设计费、货款等。"}
      ],
      "optional_fields": [
        {"field": "expected_date", "default": "待确认", "question": "预计什么时候收？"},
        {"field": "contract_or_order", "default": "可空", "question": "有没有对应合同、订单或报价单？"},
        {"field": "expected_receiver_subject", "default": "owner_subject", "question": "预计打到哪个主体或账户？"},
        {"field": "invoice_requirement", "default": "待确认", "question": "是否需要开票？"}
      ],
      "defaulting_rules": ["项目唯一命中时 owner_subject 自动由项目推导。", "没有合同编号时仍可创建 receivable 草稿，但标记缺合同/订单依据。"],
      "risk_flags": ["缺合同依据", "付款方不明确", "收款主体与项目归属主体不一致", "预计收款账户未填"],
      "commit_boundary": "审批/确认后创建应收；真实到账必须另记 fund_transaction，再 allocate_receipt 核销。"
    },
    {
      "intent": "record_fund_in",
      "name": "记录真实收款流水",
      "trigger_examples": ["钱进来了", "客户打款了", "收到一笔款", "到账了"],
      "creates": ["intake_draft", "fund_transaction(direction=IN)"],
      "not_creates_until_allocation": ["receivable_settlement"],
      "required_fields": [
        {"field": "amount", "label": "到账金额", "level": "blocking", "question": "实际到账金额是多少？"},
        {"field": "occurred_at", "label": "到账日期", "level": "blocking", "question": "哪一天到账？"},
        {"field": "receiver_subject_or_account", "label": "收款主体/账户", "level": "blocking", "question": "钱进到哪个主体或账户？"},
        {"field": "payer_or_counterparty", "label": "付款方", "level": "blocking", "question": "付款方是谁？"},
        {"field": "source_category", "label": "资金来源分类", "level": "blocking", "question": "这笔是项目收款、个人注资、退款，还是其他来源？"}
      ],
      "optional_fields": [
        {"field": "bank_transaction_no", "default": "可空", "question": "有没有银行/支付宝/微信流水号？"},
        {"field": "proof_attachment", "default": "可空", "question": "有没有到账截图或银行回单？"},
        {"field": "candidate_receivable", "default": "待核销", "question": "这笔对应哪个项目/应收？如果不确定，可先作为未分配到账。"}
      ],
      "defaulting_rules": ["只有一个活跃收款账户时可作为候选，仍需预览提示。", "若用户明确‘个人打给公司周转’，source_category=personal_injection。"],
      "risk_flags": ["未分配到账", "付款方不明确", "收款账户不明确", "与应收金额不一致"],
      "commit_boundary": "真实资金流水可先确认入账；业务归属通过 allocate_receipt 单独核销，可部分核销/多笔核销。"
    },
    {
      "intent": "allocate_receipt",
      "name": "核销收款到应收/项目",
      "trigger_examples": ["这笔到账对应某项目", "把这笔收款核到尾款", "这笔钱是哪个项目的"],
      "creates": ["intake_draft", "receivable_settlement"],
      "required_fields": [
        {"field": "fund_transaction", "label": "待核销资金流水", "level": "blocking", "question": "要核销哪一笔到账？"},
        {"field": "receivable_or_project", "label": "对应应收/项目", "level": "blocking", "question": "这笔到账对应哪个应收或项目？"},
        {"field": "amount", "label": "核销金额", "level": "blocking", "question": "核销金额是多少？如果全额核销，我按到账剩余未分配金额处理。"}
      ],
      "optional_fields": [
        {"field": "settled_at", "default": "fund_transaction.occurred_at", "question": "核销日期是否按到账日期？"},
        {"field": "remark", "default": "空", "question": "有没有备注？"}
      ],
      "defaulting_rules": ["如果 fund_transaction 未分配余额等于 receivable 未收余额，可默认全额核销。", "支持一笔到账拆到多个应收；支持一个应收被多笔到账核销。"],
      "risk_flags": ["核销金额超过未分配余额", "核销金额超过应收未收余额", "项目/付款方不匹配"],
      "commit_boundary": "只创建 settlement，不改写 receivable.received_amount 原始字段；已收金额由 settlement 汇总派生。"
    },
    {
      "intent": "record_payable",
      "name": "记录应付/费用义务",
      "trigger_examples": ["供应商款待付", "采购款", "合同已签待付", "有一笔费用要付"],
      "creates": ["intake_draft", "payable"],
      "not_creates_until_payment": ["fund_transaction", "payable_settlement"],
      "required_fields": [
        {"field": "project_or_owner_subject", "label": "费用归属项目或主体基础经营", "level": "blocking", "question": "这笔应付归哪个项目？如果不是项目，归哪个主体的基础经营？"},
        {"field": "counterparty_subject", "label": "收款方/供应商", "level": "blocking", "question": "应付给谁？供应商或收款对象是谁？"},
        {"field": "amount", "label": "应付金额", "level": "blocking", "question": "应付金额是多少？"},
        {"field": "paying_subject", "label": "预计付款主体", "level": "blocking", "question": "预计由哪个主体付款？"},
        {"field": "name_or_description", "label": "应付事项", "level": "blocking", "question": "这笔应付是什么事项？"}
      ],
      "optional_fields": [
        {"field": "due_date", "default": "待确认", "question": "预计什么时候付？"},
        {"field": "invoice_status", "default": "待确认", "question": "对方是否会开发票？现在有票吗？"},
        {"field": "expense_category", "default": "待分类", "question": "费用大类是什么？"},
        {"field": "contract_or_order", "default": "可空", "question": "有没有采购合同或订单？"}
      ],
      "defaulting_rules": ["项目唯一命中时 owner_subject 自动推导；无项目但主体明确时挂基础经营项目。", "paying_subject 可默认项目归属主体，但若实际付款主体不同必须显式记录。"],
      "risk_flags": ["付款主体与费用归属主体不一致", "缺发票信息", "缺供应商", "归属基础经营项目"],
      "commit_boundary": "确认后创建 payable；实际付款必须另记 fund_transaction，再 allocate_payment 核销。"
    },
    {
      "intent": "record_fund_out",
      "name": "记录真实付款流水",
      "trigger_examples": ["已经付款了", "打款给供应商", "公司还给个人", "钱出去了"],
      "creates": ["intake_draft", "fund_transaction(direction=OUT)"],
      "not_creates_until_allocation": ["payable_settlement", "reimbursement_payment"],
      "required_fields": [
        {"field": "amount", "label": "付款金额", "level": "blocking", "question": "实际付款金额是多少？"},
        {"field": "occurred_at", "label": "付款日期", "level": "blocking", "question": "哪一天付出的？"},
        {"field": "payer_subject_or_account", "label": "付款主体/账户", "level": "blocking", "question": "从哪个主体或账户付出？"},
        {"field": "receiver_or_counterparty", "label": "收款方", "level": "blocking", "question": "付给谁？"},
        {"field": "source_category", "label": "付款分类", "level": "blocking", "question": "这笔是供应商付款、报销付款、公司还个人、退款，还是其他？"}
      ],
      "optional_fields": [
        {"field": "proof_attachment", "default": "可空", "question": "有没有付款凭证？"},
        {"field": "candidate_payable_or_reimbursement", "default": "待核销", "question": "这笔对应哪个应付或报销单？不确定可以先记未分配付款。"}
      ],
      "defaulting_rules": ["若 source_category=company_repay_person，后续优先核销个人相关报销/借款。", "真实付款不等同于费用归属，必须通过核销/分配表挂业务对象。"],
      "risk_flags": ["未分配付款", "付款账户不明确", "收款方不明确", "付款金额与应付/报销不一致"],
      "commit_boundary": "真实付款可先入 fund_transaction；业务归属通过 allocate_payment 绑定 payable 或 reimbursement_order。"
    },
    {
      "intent": "allocate_payment",
      "name": "核销付款到应付/报销",
      "trigger_examples": ["这笔付款对应供应商款", "这笔打款是报销", "把付款核掉"],
      "creates": ["intake_draft", "payable_settlement 或 reimbursement_payment"],
      "required_fields": [
        {"field": "fund_transaction", "label": "待核销付款流水", "level": "blocking", "question": "要核销哪一笔付款？"},
        {"field": "target_type", "label": "核销对象类型", "level": "blocking", "question": "这笔付款是核销应付，还是核销报销单？"},
        {"field": "target_id", "label": "核销对象", "level": "blocking", "question": "对应哪一张应付/报销单？"},
        {"field": "amount", "label": "核销金额", "level": "blocking", "question": "核销金额是多少？如果全额核销，我按未分配余额处理。"}
      ],
      "optional_fields": [
        {"field": "settled_at", "default": "fund_transaction.occurred_at", "question": "核销日期是否按付款日期？"},
        {"field": "remark", "default": "空", "question": "有没有备注？"}
      ],
      "defaulting_rules": ["若付款收款方与报销 payee 或 payable counterparty 唯一匹配，可作为候选但需预览。", "支持部分付款和一笔付款分摊多个对象。"],
      "risk_flags": ["核销金额超过付款未分配余额", "核销金额超过对象未付余额", "收款方不匹配"],
      "commit_boundary": "只创建 settlement/payment 关联；对象已付金额由关联汇总派生。"
    },
    {
      "intent": "personal_injection",
      "name": "个人注资/借给公司",
      "trigger_examples": ["某人打钱进公司", "我先借给公司", "个人注资", "公司周转款"],
      "creates": ["intake_draft", "fund_transaction(direction=IN)", "personal_ledger_derived_entry?"],
      "required_fields": [
        {"field": "person_subject", "label": "出资个人", "level": "blocking", "question": "是哪位个人打给公司的？"},
        {"field": "receiver_subject_or_account", "label": "收款主体/账户", "level": "blocking", "question": "钱进到哪个公司/主体或账户？"},
        {"field": "amount", "label": "金额", "level": "blocking", "question": "金额是多少？"},
        {"field": "occurred_at", "label": "发生日期", "level": "blocking", "question": "哪一天到账？"},
        {"field": "nature", "label": "性质", "level": "blocking", "question": "这笔是借款周转、投资注资，还是临时垫资？"}
      ],
      "optional_fields": [
        {"field": "repayment_expectation", "default": "待确认", "question": "后续是否需要还给个人？预计什么时候还？"},
        {"field": "remark", "default": "空", "question": "有没有备注或凭证？"}
      ],
      "defaulting_rules": ["默认 source_category=personal_injection，影响个人账派生。", "若性质为投资/资本性投入，个人账派生方向需要单独标注，不自动等同应还款。"],
      "risk_flags": ["借款/投资性质不明确", "收款账户不明确", "无凭证"],
      "commit_boundary": "先作为资金流入与个人账派生来源；是否形成应还款视性质和规则决定。"
    },
    {
      "intent": "company_repay_person",
      "name": "公司还个人/报销付款",
      "trigger_examples": ["公司还了某人的款", "报销款已付", "还给我了", "公司转给个人"],
      "creates": ["intake_draft", "fund_transaction(direction=OUT)", "reimbursement_payment 或 personal_ledger_settlement?"],
      "required_fields": [
        {"field": "payer_subject_or_account", "label": "付款主体/账户", "level": "blocking", "question": "从哪个公司/主体或账户付出？"},
        {"field": "person_subject", "label": "收款个人", "level": "blocking", "question": "还给哪位个人？"},
        {"field": "amount", "label": "金额", "level": "blocking", "question": "还款/报销金额是多少？"},
        {"field": "occurred_at", "label": "发生日期", "level": "blocking", "question": "哪一天付出的？"},
        {"field": "repayment_target", "label": "对应事项", "level": "blocking", "question": "这笔是还哪一类钱：报销、个人借款、个人垫资，还是历史调整？"}
      ],
      "optional_fields": [
        {"field": "target_reimbursement_order", "default": "待匹配", "question": "是否对应某张报销单？"},
        {"field": "proof_attachment", "default": "可空", "question": "有没有付款凭证？"}
      ],
      "defaulting_rules": ["若 repayment_target=报销 且有唯一未付报销单，可提示候选。", "不得直接减少个人账余额，必须通过资金流水与核销/派生规则实现。"],
      "risk_flags": ["未匹配报销/借款来源", "付款账户不明确", "金额超过个人账待还余额"],
      "commit_boundary": "创建付款流水并按目标核销；个人账余额由来源与还款核销派生。"
    },
    {
      "intent": "query_project",
      "name": "查询项目账务",
      "trigger_examples": ["查一下这个项目", "项目收支", "这个项目还欠多少钱"],
      "creates": [],
      "required_fields": [
        {"field": "project_or_keyword", "label": "项目或关键词", "level": "blocking", "question": "要查哪个项目？可以给项目名、客户、关键词或时间范围。"}
      ],
      "optional_fields": [
        {"field": "date_range", "default": "不限", "question": "要限定时间范围吗？"},
        {"field": "view", "default": "summary", "question": "看汇总、明细、应收应付，还是资金流水？"}
      ],
      "defaulting_rules": ["默认返回摘要，再按用户追问展开明细。"],
      "risk_flags": ["项目候选不唯一"],
      "commit_boundary": "只读查询，不写入。"
    },
    {
      "intent": "query_personal_ledger",
      "name": "查询个人账派生余额",
      "trigger_examples": ["查个人账", "我还垫了多少钱", "公司还欠谁多少钱"],
      "creates": [],
      "required_fields": [
        {"field": "person_subject", "label": "个人主体", "level": "blocking", "question": "要查哪位个人的账？"}
      ],
      "optional_fields": [
        {"field": "date_range", "default": "不限", "question": "要查哪个时间段？"},
        {"field": "include_sources", "default": "全部个人账来源", "question": "是否只看无票报销、个人注资、公司还款等某一类？"}
      ],
      "defaulting_rules": ["默认展示派生余额 + 来源分类明细，不把个人账作为原始表。"],
      "risk_flags": ["存在待确认/未审批草稿", "存在无票或未匹配还款"],
      "commit_boundary": "只读查询，不写入。"
    },
    {
      "intent": "query_subject_summary",
      "name": "查询主体汇总",
      "trigger_examples": ["查公司账", "这个主体还有多少应收应付", "现金余额"],
      "creates": [],
      "required_fields": [
        {"field": "subject", "label": "主体", "level": "blocking", "question": "要查哪个主体？"}
      ],
      "optional_fields": [
        {"field": "date_range", "default": "不限", "question": "要限定时间范围吗？"},
        {"field": "view", "default": "cash_receivable_payable", "question": "看现金、应收、应付、报销，还是综合？"}
      ],
      "defaulting_rules": ["默认返回现金账户余额/待核对、应收未收、应付未付、待报销未付。"],
      "risk_flags": ["现金账户未核对", "存在未分配资金流水"],
      "commit_boundary": "只读查询，不写入。"
    }
  ]
}
