Files
verify-invoice-default/SKILL.md

129 lines
10 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.
---
name: 票据合规预审助手
description: "高校报销场景的发票合规性秒级预审:核对字段完整性、购买方税号白名单、开票日期与出差行程逻辑、住宿交通经费标准,对连号、同商家集中开票、节假日开票等风险点红黄灯预警,生成《初审意见单》。"
version: 1.0.2
author: 深圳匠厂科技有限公司
metadata:
openclaw:
slug: verify-invoice-default
platform_kit_min_version: "1.2.11"
emoji: "🧾"
category: "财务"
brands:
- jiangchang
- huashang
developer_ids:
- 79017 # 开发者本人匠厂用户 ID(设置 → 用户信息 → 复制)
allowed-tools:
- bash
---
# 票据合规预审助手(verify-invoice-default)
高校财务报销场景的票据合规性"秒级预审":对发票结构化字段执行**四步审核**(字段完整性 → 三方交叉验真 → 经费标准硬约束 → 风控标记),输出 ✅ 通过 / ⚠️ 待确认 / ❌ 驳回 三色清单并生成《初审意见单》HTML 报告。预审结果仅作提示,不构成最终报销结论;发票真伪以人工/官方查验结果为准(可回填)。
## Agent / 宿主编排
- **Agent 是入口与编排者**:理解用户意图、收集发票字段与报销上下文、选择 Action,并用业务语言解读红黄绿灯结论。
- 发票照片 → 结构化字段的提取由 Agent 多模态能力(或用户粘贴/手工录入)完成;本技能接收**结构化 JSON** 并做确定性规则审核,不做 OCR、不连接外部系统。
- 遇到字段大面积缺失(照片模糊/折叠)时,提示用户重拍或补录,不要编造字段值。
- **RPA功能**:本技能支持从指定网站(sandbox.jc2009.com)自动提取发票信息,需要用户提供登录凭证和浏览器配置目录。RPA功能用于自动化数据采集,不修改外部系统数据。
## 能力类型与触发
| 你要做什么 | Agent 怎么做 | 进任务中心? |
|------------|--------------|--------------|
| 查询初审历史 / 统计 / 查看标准 / 节假日 | 短 CLI:`list-reports` / `stats` / `view-standards` / `list-holidays` | 否 |
| 预审一张或多张发票(同步秒级) | `run_skill_action` → `prereview-invoice`(`input.invoiceJson` + 上下文) | 否 |
| 批量预审 input/ 目录 JSON 文件 | `run_skill_action` → `prereview-batch-input` | 是(该 Action 为 async) |
| 回填人工查验结果 | `run_skill_action` → `mark-verified`(`input.reportId/result/note`) | 否 |
| 重建《初审意见单》HTML | `run_skill_action` → `render-html` | 否 |
| 维护税号白名单 / 经费标准 | 数据管理表上操作,或短 CLI:`add-whitelist` / `remove-whitelist` / `set-standard` | 否 |
| 从网站提取发票信息 | `run_skill_action` → `extract-invoices`(`input.username/password/profileDir`) | 否 |
| 测试RPA连接 | `run_skill_action` → `test-rpa-connection` | 否 |
| 查询RPA提取记录 | `run_skill_action` → `list-rpa-invoices` | 否 |
| 查看RPA提取详情 | `run_skill_action` → `show-rpa-invoice` | 否 |
| RPA提取统计 | `run_skill_action` → `rpa-invoice-stats` | 否 |
| 用户只问用法 / 能做什么 | 读根目录 `README.md`;逐步操作再读 `TUTORIAL.md` | — |
进不进任务中心**只**看该 Action 的 `executionProfile`(sync 当场返回 / async 进任务中心),与数据管理、对话等触发入口**无关**;每个 Action 都已显式声明 `executionProfile`。
本技能为"即时审核"型能力:提交即审、当场出结论,不存在「先准备本地数据、再对外产生副作用」的两段式,因此无需拆分准备与执行;若后续接入需要外部副作用的扩展(如对接报销系统提交),须按「准备 vs 执行」拆分并可由 Agent 分别触发。本技能支持网页RPA功能,用于从指定网站自动提取发票信息,需要账号管理;宿主账号/Profile/租约规范见 `development/ACCOUNT_MANAGER.md`。
## 用户意图路由表
| 用户意图 | Agent 怎么做 | 进任务中心? |
|------------------------|--------------|--------------|
| "帮我预审这张发票 / 查一下这张票能不能报" | 引导用户提供发票字段(照片可由 Agent 读取后转写字段);`run_skill_action` → `prereview-invoice`,`input.invoiceJson` 传结构化字段,差旅场景补 `tripStart/tripEnd/tripCity/staffTitle` | 否 |
| "这批发票一起预审"(input 目录已放 JSON) | `run_skill_action` → `prereview-batch-input` | 是(因该 Action 为 async) |
| "查一下我之前预审了哪些 / 结果怎么样" | 短 CLI:`list-reports [--verdict …]`;详情 `show-report --report-id N` | 否 |
| "我在查验平台查过了,结果是…" | `run_skill_action` → `mark-verified`,`input.result=pass|fail` + 备注 | 否 |
| "重新生成意见单 / 我要那份 PDF 式报告" | `run_skill_action` → `render-html`;结果在数据管理 HTML 报告侧栏 | 否 |
| "住宿标准是多少 / 一线城市的上限" | 短 CLI:`view-standards [--category 住宿费]` | 否 |
| "预审成功率怎么样" | 短 CLI:`stats` | 否 |
| "把 XX 税号加进白名单 / 改一下住宿标准" | 数据管理表上操作;或短 CLI:`add-whitelist` / `set-standard` | 否 |
| "从网站提取发票信息" | `run_skill_action` → `extract-invoices`,需要提供用户名、密码和浏览器配置目录 | 否 |
| "测试RPA连接" | `run_skill_action` → `test-rpa-connection`,需要提供用户名、密码和浏览器配置目录 | 否 |
| "查看RPA提取记录" | `run_skill_action` → `list-rpa-invoices`,可按批次ID、用户名、状态筛选 | 否 |
| "查看RPA提取详情" | `run_skill_action` → `show-rpa-invoice`,需要提供记录ID | 否 |
| "RPA提取统计" | `run_skill_action` → `rpa-invoice-stats` | 否 |
**硬规则:**
1. `prereview-batch-input` 是本技能唯一 async Action;禁止用 bash 跑它再轮询等待。
2. 预审输入必须结构化;Agent 不得替用户编造票面字段(金额、税号、日期)。
3. 预审结论必须向用户说明"不构成最终报销结论";驳回项要读出规则引用。
4. 发票真伪只提示查验指引;除非用户明确说已在官方平台查验,不得代替用户勾选"已查验"。
5. 一个业务能力一个 Action,用多个 placements 挂入口;底层同一 `scripts/main.py` CLI。
6. RPA功能需要用户提供登录凭证和浏览器配置目录;禁止存储用户密码到日志或代码中。
7. RPA提取的发票数据存储在本地数据库,不自动同步到外部系统。
Agent 执行契约细节:`references/CLI.md`、`references/ACTIONS.md`、`references/SCHEMA.md`。
## 共享 Python(必读)
宿主共享 runtime 在 `{JIANGCHANG_DATA_ROOT}/python-runtime/.venv`,并已前置到 PATH(同时设 `VIRTUAL_ENV`)。短 CLI 一条命令直接跑:
```bash
python {baseDir}/scripts/main.py health
python {baseDir}/scripts/main.py version
python {baseDir}/scripts/main.py init-db
python {baseDir}/scripts/main.py prereview --invoice-json <file|-> [--purpose 文本] [--trip-start YYYY-MM-DD] [--staff-title 职级]
```
- 公共库来自共享 venv 的 `jiangchang-platform-kit>=1.2.11`(包名路径 `jiangchang_skill_core`);不要 vendor。
- **禁止**用 `uv run python` 跑技能脚本(会建临时环境,缺 `jiangchang_skill_core`);**禁止** Agent 自行 `pip install`。
- 根目录 `requirements.txt` 只声明技能特有依赖(本技能当前无)。
- 配置:用户 `.env` 在 `{JIANGCHANG_DATA_ROOT}/{JIANGCHANG_USER_ID}/{slug}/.env`;优先级:进程环境变量 > 用户 `.env` > `.env.example`。
## 面向用户问答(LLM 规则)
- 本文(`SKILL.md`)是 LLM / OpenClaw 平台读取的技能入口,**不是**用户市场说明。
- 当用户询问"这个技能是做什么的 / 怎么用 / 适合什么场景 / 用前准备什么 / 得到什么",**必须优先读取**根目录 `README.md`(能力说明)与 `TUTORIAL.md`(逐步用法),并用业务语言回答。
- **回答「怎么用 / 能做什么」时的要求**:优先读 `TUTORIAL.md`;**禁止**在回答中粘贴 `python …/scripts/main.py …` 或其它命令行(除非用户明确索要命令,或自称技术人员/开发者);**禁止**为答用法去 `dir` / `ls` 列技能目录,或默认打开 `references/`、`development/`。
- **禁止**向普通用户暴露 JSON 字段名、表名、`error_code` 等实现细节(除非用户明确询问技术实现)。
- 市场说明 Tab(`README.md`)不含分步操作;排障步骤在 `TUTORIAL.md`「常见卡住怎么办」。
## 文档分工
| 文档 | 读者 | 用途 |
|------|------|------|
| 根目录 `README.md` | 普通用户 | 市场 **说明** Tab(`readme_md`) |
| 根目录 `TUTORIAL.md` | 普通用户 | 市场 **教程** Tab(`tutorial_md`) |
| 根目录 `DEMO.md` | 普通用户 | 市场 **演示** Tab(`demo_video_url` + `demo_md`) |
| 根目录 `CHANGELOG.md` | 普通用户 | 市场 **更新日志** Tab(`changelog`) |
| `SKILL.md`(本文) | LLM / OpenClaw 平台 | 技能入口、触发与运行契约摘要 |
| `references/` | Agent 编排 / 调用 | CLI、Action、schema 契约(Agent 主读) |
| `development/` | 开发者 / AI 编程代理 | 需求、开发教程、测试、深度技术规范 |
## 目录约定
- CLI 入口固定为 `scripts/main.py`;业务逻辑按 `cli / db / service / util` 分层。
- 业务表:`invoice_records`(发票登记)、`prereview_reports`(初审意见)、`expense_standards`(经费标准库)、`taxid_whitelist`(税号白名单)、`holiday_calendar`(节假日)。
- HTML 报告写入技能数据目录 `html/`,重建走固定 Action id `render-html`。
## 平台元数据
- `metadata.openclaw.developer_ids`:发布后默认可见的用户 ID 列表;**发布前必须替换为本人的匠厂用户 ID**(设置 → 用户信息 → 复制),否则开发期自己无法在市场安装自测。
- 当 `access_scope = 0`(不公开)时,平台会把 `developer_ids` 中的用户自动补写到 `skill_user_access`。