docs: 文档全面对齐 MCP 架构,并脱敏公开操作指南
接口与入门: - 新增 docs/MCP.md:注册方法(DSH patch + 通用 client)、返回信封、会话目录布局、标准流程、 硬约束与未实现清单;工具参考段由**运行时 input_schema 自动生成**,与代码同源不会漂移 - 删除 docs/API.md(856 行 Flask 路由/SSE 文档,描述的端点已不存在) - 重写根 README.md:为什么放弃自带前端、职责分工表、快速开始、注册配置、流程链、结构与风险 - 重写 AGENTS.md:命令表换成 mcp/mcp-smoke/upload;mypy 目标改 src;新增「提交纪律」 (pre-commit 的 stash 窗口会回滚未暂存改动)、COM 与 Playwright 线程约束、多进程共存提醒 包文档:src/README.md 与各包 README 按现状重写;新增 src/mcp/README.md(写工具的规矩、 宿主侧四个坑)与 src/upload/README.md(路由表与安全边界);tests/scripts/config 三处索引更新。 提示词迁移:src/infra/llm/ 整个删除,三份系统提示词迁到 .agents/skills/reimbursement/references/ (invoice-fields / travel-info-fields / normal-info-fields),删掉 can_submit 与 suggestion (save_info 也会主动剥离),「严格只输出 JSON」改为「交给对应工具落盘」;新增 SKILL.md 作为 宿主侧操作纪律(已被 DSH 热加载为 reimbursement 技能)。 作废处理:删除 .agents/docs/guides/系统事件流全景图.md(SSE 与 file_events/agent_events 通道已整体 移除,现在没有任何事件流);给项目架构全景图与架构分析-2026-06-15 加「已过时」横幅保留历史; config.example.json 去 consumable_storage 加 upload_pin;.env.example 去 LLM 段并说明已不再自动加载 .env。 安全:docs/报销操作指南.md 的示例配置里原来写着**真实姓名、16 位公务卡号、内网 LLM 地址与工号** (自 9fe5d70/2026-05-25 起在版本历史里),本次全部换成占位符。历史清洗与令牌轮换另议。 门禁(改动含 src/infra/llm 删除,故重跑全部门禁): ruff check PASS | ruff format --check PASS(42) | mypy src PASS(34) | deptry PASS(36) | pytest 107 passed | scripts/mcp_smoke.py PASS(17 工具 / instructions 1449 字节 / case_list ok) 申购单在依赖清理后另已实机复测:2.4s 生成,产物单元格读回正确。
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
---
|
||||
name: reimbursement
|
||||
description: >-
|
||||
财务报销自动化(阜阳师范大学):把发票、支付截图、出差申请单变成结构化报销数据,
|
||||
生成低值易耗品申购单,并在财务系统填报。当用户提到报销、发票、差旅费、公务卡刷卡记录、
|
||||
易耗品申购、财务系统填报时使用本技能。通过 mcp__arb__* 工具操作,禁止臆造财务数据。
|
||||
---
|
||||
|
||||
# 财务报销(MCP 工具版)
|
||||
|
||||
接口细节与参数表见 `docs/MCP.md`。本文件只写"怎么做才对"的操作纪律。
|
||||
|
||||
## 流程
|
||||
|
||||
1. `mcp__arb__case_create` 建会话,记下 `case_id` 与 `upload_page`(手机扫码上传入口,告诉用户)
|
||||
2. 材料入库:本地文件用 `case_add_files(paths=[...])`(**路径必须正斜杠** `D:/Code/...`);
|
||||
手机上传先落 `inbox/`,再 `case_add_files(case_id, source="inbox")` 收取
|
||||
3. `case_render_pages`:`text_chars > 0` 就 `case_read_text` 读文本层(比读图准且省 token),
|
||||
否则读 `pages/<stem>/p01.png`。PDF 自动转正已处理,但**转正角度要看 meta.json**
|
||||
4. 逐张出 JSON → `case_save_extraction`。字段定义用 `extraction_spec`,判读细则见
|
||||
`references/invoice-fields.md`
|
||||
5. `match_payments`:**必须逐条处理 `review_required`**(未匹配、发票总额小于支付总额、
|
||||
一对多凑额)。贪心结果 `ok` 不等于"已核对"
|
||||
6. `info_skeleton(info_type)` 取骨架 → 填值 → `save_info`(自动跑规则校验)。
|
||||
拿不准的字段用 `validate_info(draft=...)` 不落盘反复试;规则原文 `rules_get`
|
||||
7. 普通发票:`doc_requisition` 生成 Excel 申购单(`exclude` 剔除不参与申购的物品)
|
||||
8. `case_status` 复查态势;要重跑用 `case_reset(scope)`
|
||||
|
||||
## 必须遵守
|
||||
|
||||
- **完整性不由你宣布**:以 `validate_info` / `save_info` 返回的校验报告为准;不完整就向用户要材料,
|
||||
禁止说"可以提交了"
|
||||
- **不得臆造财务数据**:金额、日期、发票号、卡号读不清就标出来问用户,不要猜
|
||||
- **双通道冲突要复核**:PDF 文本层与读图结论不一致时(尤其编号、卡号、金额位数),两条都不许默认采信,
|
||||
重新放大该区域确认。已知文本层会把"标签"和"值"分段存储,且康熙部首类字符(`⽇` `⻔`)NFKC 后仍不变形
|
||||
- **不回显密码**,不把凭据写进任何产物或日志
|
||||
- 产物只写 `cases/<case_id>/`(该目录已 gitignore,含身份证号与卡号)
|
||||
- `required: true` 的字段(含值为空串的备注类)**必须存在于 JSON 里**,这是刻意约束;用骨架别凭记忆造结构
|
||||
|
||||
## 尚未实现,不要承诺
|
||||
|
||||
浏览器填报(`browser_*`)、提交预览与执行(`submit_*`)还没做。用户要提交时如实说明该环节在建设中,
|
||||
可临时用旧 Web 流程(代码在 git 提交 `5f57400` 里)。
|
||||
|
||||
## 参考
|
||||
|
||||
- `references/invoice-fields.md` — 七类票据的字段判读细则(火车票/支付截图/酒店/普通发票/事前申请单/出入库单/其他附件)
|
||||
- `references/travel-info-fields.md` — 差旅报销数据:交通/住宿/会议费、支付方式、按人按天的补助清单
|
||||
- `references/normal-info-fields.md` — 普通报销数据:明细与支付方式
|
||||
- `.agents/docs/plans/MCP化改造方案-2026-10-19.md` — 架构决策与实测记录(含抽取质量闸门数据)
|
||||
Reference in New Issue
Block a user