Files
verify-invoice-default/development/REQUIREMENTS.md

133 lines
8.1 KiB
Markdown
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.
# REQUIREMENTS —— 票据合规预审助手(verify-invoice-default)
> 需求来源:《核心建设内容:各部门"Skill"深度需求规格书》§4.1 财务处 Skill 001(票据合规性"秒级预审")。
> 详细设计见工作区《财务处Skill001-票据合规秒级预审-开发文档.md》;本文是该技能仓内的需求与验收主文档。
> 定位原则:辅助非决策、审慎非激进 —— AI 只做预审提示,真伪与最终结论由人确认。
## 0. 技能标识
- 拟定 slug:`verify-invoice-default`
- 中文 name:票据合规预审助手
- 中文 description:高校报销场景的发票合规性秒级预审:核对字段完整性、购买方税号白名单、开票日期与出差行程逻辑、住宿交通经费标准,对连号、同商家集中开票、节假日开票等风险点红黄灯预警,生成《初审意见单》。
- account-manager platform_key:不适用(无网页 RPA,无账号下发)
- 命名形态:scope 型(verify ∈ 动词白名单;default ∈ scope 白名单;21 字符)
- 网页 RPA 登录策略:`not_needed`(无浏览器自动化;不使用 account-manager)
## 0.1 宿主入口定位
| 主能力(Action id / CLI) | 对话 | 数据管理 | 定时 | 教程章节 | 不挂理由 |
|---------------------------|------|----------|------|----------|----------|
| `prereview-invoice`(prereview) | 挂 | toolbar(bind invoice_records,表单) | 不挂 | 入口一/入口二 | 预审由单据驱动,无无人值守场景 |
| `prereview-batch-input`(prereview-batch-input,async) | 挂 | 不挂 | 不挂 | 入口二 | 批量输入依赖 input 目录,属对话长任务 |
| `render-html`(render-html) | 挂 | toolbar(bind prereview_reports)+ skill-detail | 不挂 | 入口一/入口二 | 同预审 |
| `mark-verified` | 不挂 | row(prereview_reports,预填 id) | 不挂 | 入口一 | 查验回填是"对着记录"的操作 |
| `list-reports` / `stats` | 挂 | 不挂 | 不挂 | 入口二 | 查询类,对话即达 |
| `view-standards` | 挂 | 仅展示表 | 不挂 | 入口二 | 标准库日常只读 |
| `set-standard` | 不挂 | row(expense_standards,预填键) | 不挂 | 入口一 | 管理员在表上改值更直接 |
| `add-whitelist` | 不挂 | toolbar(taxid_whitelist,表单) | 不挂 | 入口一 | 结构化录入,表单更稳 |
| `remove-whitelist` | 不挂 | row(taxid_whitelist,预填税号) | 不挂 | 入口一 | 同上 |
| `health` / `version` / `config-path` | 不挂 | 不挂 | 不挂 | N/A | 运维诊断,仅 skill-detail |
整技能无 cron placement:`TUTORIAL.md` 入口三已声明"不需要定时"及理由。
## 0.2 AI + RPA 协作与授权边界
- 本技能**无 RPA**:不启动浏览器、不操作桌面/手机、不调用外部 HTTP。
- 发票照片 → 结构化字段由 Agent 多模态能力或用户粘贴完成;技能只接收结构化 JSON。
- 目标系统:无外部系统;全部计算在本地 SQLite。
- 禁止路线(全技能适用):破解 / 逆向 / 私有协议 / 验证码绕过等;本技能不涉及。
- 国税查验接口、OCR API、财务系统对接均为后续扩展,接口到位前预审结果"待人工查验"闭环。
## 0.3 业务行生命周期
不适用:预审为同步单据计算,无"处理队列"状态机;`prereview_reports.verify_status`(待查验/已查验通过/已查验不符)仅记录查验回填状态,不承担抢占/重试语义。
## 1. 文档目标
明确 `verify-invoice-default` 的研发范围、交付标准与验收要求,作为开发与测试统一依据。
## 2. 业务背景
全校教职工报销需财务处逐张人工核验票据(真伪、抬头税号、日期逻辑、经费标准),单张 5-8 分钟、退单率高。需要开发 `verify-invoice-default`:对发票结构化字段自动完成合规预审,输出《初审意见单》(✅/⚠️/❌ 三色清单),把人工审核压缩到秒级并降低退单率。
## 3. 开发目标
- 解析并校验发票字段 JSON(单张/同批多张,上限 50 张/批)
- 实现四步规则引擎(F1-F4 / V1-V3 / S1-S3 / R1-R3,共 13 条规则)
- 输出结构化 JSON + 写入本地业务表 + 生成《初审意见单》HTML(`html/` + `render-html`)
- 支持查验结果回填、标准库/白名单维护、预审统计
- 失败可诊断(稳定错误码 `ERROR:<CODE>:` + 统一日志)
## 4. 功能范围
### 必须实现
- `health` / `version` / `init-db` / `config-path`(模板基座;`run` 为模板演示入口,不承载业务)
- `prereview`(主命令)、`prereview-batch-input`(async Action)
- `render-html` / `list-reports` / `show-report` / `mark-verified`
- `view-standards` / `set-standard` / `list-whitelist` / `add-whitelist` / `remove-whitelist` / `list-holidays` / `stats`
- 业务表 5 张 + `_jiangchang_*` 中文展示元数据 + 种子数据(标准 8 条、税号 1 条、节假日 12 天)
- `assets/actions.json` 按 §0.1 定位表声明
### 可后续扩展
- 国税查验 API 直连、OCR API 集成、财务系统对接(项目余额校验)、PDF 意见单、跨批次连号检测、销方黑名单、定时入口
## 5. 非功能要求
- 目录结构符合 `skill-template` 规范;入口统一 `scripts/main.py`
- 单文件 < 900 行;UTF-8 without BOM;Windows UTF-8 输出兼容
- 机读输出 JSON;错误前缀 `ERROR:`;主命令 `task_start`/`task_failed` 日志齐全,无敏感明文
- 只存发票结构化字段,不存影像与身份证号等个人信息
- 测试离线可过(无网络、无浏览器)
## 6. 输入输出要求
### 输入
- `invoice_json`:发票字段(camelCase,兼容 snake_case/中文键),支持文件路径 / 内联 JSON / stdin
- 上下文:`--purpose` `--project-no` `--trip-start` `--trip-end` `--trip-city` `--staff-title`
- 批量:`input/` 目录 JSON 文件(`{"invoices": [...], "context": {...}}` 或纯数组)
### 输出
- 成功:stdout JSON(`ok/batch_no/count/verdict_counts/reports[]/disclaimer`)
- 失败:`ERROR:INVOICE_INVALID|INVOICE_INPUT_MISSING|REPORT_NOT_FOUND|VERIFY_INPUT_INVALID|STANDARD_INPUT_INVALID|WHITELIST_INPUT_INVALID|ENTITLEMENT_DENIED|QUERY_FAILED` + 中文 message
- 落库:`invoice_records`、`prereview_reports`;文件:`html/report-{id}.html`
## 7. 依赖的兄弟技能或外部系统
- 无兄弟技能依赖;无外部系统
- `requirements.txt`:无特有依赖(公共能力由共享 runtime 提供)
## 8. 不在本次范围内的内容
- 不做自动报销提交、不改财务账务
- 不做发票真伪自动判定(只提示查验 + 回填)
- 不存发票影像;不接 OCR/国税 API/财务系统(扩展项)
- 不兼容旧模板历史结构
## 9. 验收标准
- 目录结构合规;目录名 = `SKILL.md` slug = `constants.SKILL_SLUG`;版本三处一致(SKILL.md/constants/CHANGELOG=1.0.0)
- `health` / `version` / `init-db` 正常;`python tests/run_tests.py -v` 全绿
- 规则引擎金标准测试覆盖 13 条规则正反例;三种代表性场景(通过/驳回/待确认)真实跑通
- `mark-verified` 回填"不符"后结论升级驳回;`stats` 与记录一致
- HTML 意见单生成、可重建、宿主侧栏可预览
- `init_db()` 写入 `_jiangchang_tables/_jiangchang_columns`,中文 display_name 完整,`test_display_metadata` 通过
- `assets/actions.json` 与 §0.1 定位表、`TUTORIAL.md` 章节一致
- 发布前 `developer_ids` 替换为本人匠厂用户 ID;发布后按入口定位表完成宿主多入口验收(含用户体验)
## 10. 开发注意事项
- `cli` 只做参数解析;核心逻辑在 `service`(prereview_service 唯一内核,多入口复用)
- 业务表间禁止 SQLite 外键;时间字段 Unix 秒
- 保留模板演示 `cmd_run`(POLICY-RPA-003 录屏集成守护要求 service 层保留视频集成令牌);本技能业务命令不使用录屏
- 修改开发规范时同步 `POLICY_MATRIX.md` 与对应守护测试
## 11. 变更记录
| 日期 | 版本 | 变更人 | 变更内容 |
|------|------|--------|----------|
| 2026-09-13 | v1.0 | 开发组 | 初版:四步规则引擎 + 标准库/白名单/查验回填 + 初审意见单 |