- Extract 711-line App.vue into 15+ focused files across 5 directories - Add data layer (icons, metrics, policies, auditTrail, requests) - Add composables (useNavigation, useRequests, useChat, useToast) - Add layout components (SidebarRail, TopBar, FilterBar) - Add shared components (PanelHead, InfoRow, ToastNotification) - Add business component (RequestTable) and 5 view components - Extract global CSS to assets/styles/global.css - Add start.sh with WSL/Windows cross-platform support - Add .gitignore for node_modules, dist, and IDE dirs
1494 lines
30 KiB
Markdown
1494 lines
30 KiB
Markdown
# AI 报销操作层 / 影子报销账本开发文档
|
||
|
||
> 版本:v0.1
|
||
> 场景范围:仅聚焦“报销”场景,不包含合同审核、采购付款、总账、税务申报等后续场景。
|
||
> 核心思路:以 Agent 层为业务中枢,在现有 OA / ERP / 费控系统之上构建 AI 原生的报销操作层与影子报销账本。
|
||
|
||
---
|
||
|
||
## 1. 项目定位
|
||
|
||
### 1.1 产品名称
|
||
|
||
暂定名称:
|
||
|
||
- AI 报销操作层
|
||
- 智能报销预审 Agent
|
||
- 影子报销账本
|
||
- 报销政策 Agent
|
||
|
||
推荐对外名称:
|
||
|
||
> **AI 报销预审中台**
|
||
|
||
推荐对内技术名称:
|
||
|
||
> **AI Reimbursement Operation Layer**
|
||
|
||
---
|
||
|
||
### 1.2 一句话定义
|
||
|
||
在企业现有 OA、ERP、费控系统之上,构建一个以 Agent 为核心的 AI 报销操作层,让员工不用直接面对复杂系统,只需上传票据和说明事项,由 Agent 自动完成材料整理、报销草稿生成、制度预审、缺件提醒、风险解释和后端系统同步。
|
||
|
||
---
|
||
|
||
### 1.3 核心目标
|
||
|
||
本系统不是替代 ERP,也不是重新做一套完整费控系统,而是作为现有系统之上的智能操作层。
|
||
|
||
核心目标包括:
|
||
|
||
1. 降低员工填单难度。
|
||
2. 减少财务审核打回。
|
||
3. 提高报销制度执行一致性。
|
||
4. 沉淀报销过程证据链。
|
||
5. 为后续扩展付款、采购、合同付款等财务 Agent 场景打基础。
|
||
|
||
---
|
||
|
||
### 1.4 产品边界
|
||
|
||
#### 本期做
|
||
|
||
- 票据 / 附件上传
|
||
- OCR 识别
|
||
- 报销草稿生成
|
||
- 费用类型识别
|
||
- 制度规则预审
|
||
- 缺件提醒
|
||
- 风险解释
|
||
- 用户补充确认
|
||
- 影子报销账本记录
|
||
- 后端系统同步接口预留
|
||
- 审计日志与规则命中记录
|
||
|
||
#### 本期不做
|
||
|
||
- 不做正式总账
|
||
- 不做凭证过账
|
||
- 不做税务申报
|
||
- 不做银行支付
|
||
- 不做完整预算控制
|
||
- 不做合同审核
|
||
- 不替换原 OA / ERP / 费控系统
|
||
|
||
---
|
||
|
||
## 2. 总体架构
|
||
|
||
### 2.1 架构原则
|
||
|
||
系统采用“前台 AI 操作层 + 中台 Agent 编排 + 影子报销账本 + 后端系统同步”的架构。
|
||
|
||
核心原则:
|
||
|
||
> **用户体验在 AI 报销操作层,正式账务仍在 ERP。**
|
||
|
||
> **Agent 负责理解、编排与交互;规则负责判断;系统负责留痕;后端负责正式审批和入账。**
|
||
|
||
---
|
||
|
||
### 2.2 架构分层
|
||
|
||
系统分为 6 层:
|
||
|
||
1. 用户与入口层
|
||
2. AI 报销操作层
|
||
3. Agent 层
|
||
4. 影子报销账本层
|
||
5. Policy & Evidence 层
|
||
6. System Adapter / 后端集成层
|
||
|
||
---
|
||
|
||
### 2.3 分层说明
|
||
|
||
#### 2.3.1 用户与入口层
|
||
|
||
面向对象:
|
||
|
||
- 员工
|
||
- 财务审核人员
|
||
- 制度管理员
|
||
- 系统管理员
|
||
|
||
入口方式:
|
||
|
||
- Web
|
||
- 企业微信
|
||
- 钉钉
|
||
- OA 工作台
|
||
- 移动端 H5
|
||
|
||
职责:
|
||
|
||
- 接收用户报销意图
|
||
- 上传票据和附件
|
||
- 展示预审结果
|
||
- 支持补件交互
|
||
- 支持确认提交
|
||
|
||
---
|
||
|
||
#### 2.3.2 AI 报销操作层
|
||
|
||
这是用户直接感知的业务操作层。
|
||
|
||
主要功能:
|
||
|
||
- 对话式报销入口
|
||
- 票据 / 附件上传
|
||
- 报销草稿展示
|
||
- 风险与缺件提示
|
||
- 预审结果解释
|
||
- 用户确认提交
|
||
|
||
该层的目标是让用户不再直接面对复杂 ERP 字段,而是通过自然语言、文件上传和确认操作完成报销。
|
||
|
||
---
|
||
|
||
#### 2.3.3 Agent 层
|
||
|
||
Agent 层是系统核心中枢,所有业务流程围绕 Agent 层展开。
|
||
|
||
Agent 层负责:
|
||
|
||
- 理解用户意图
|
||
- 编排任务流程
|
||
- 调用 OCR 工具
|
||
- 调用规则引擎
|
||
- 查询主数据
|
||
- 生成报销草稿
|
||
- 发起补件对话
|
||
- 输出风险解释
|
||
- 同步后端系统
|
||
|
||
核心组件:
|
||
|
||
- 受理 Agent
|
||
- 单据解析 Agent
|
||
- 规则校验 Agent
|
||
- 解释与补件 Agent
|
||
- 同步执行 Agent
|
||
- Agent Orchestrator / Workflow
|
||
|
||
---
|
||
|
||
#### 2.3.4 影子报销账本层
|
||
|
||
影子报销账本层用于沉淀报销业务事实,但不是正式总账。
|
||
|
||
它记录:
|
||
|
||
- 报销申请
|
||
- 报销明细
|
||
- 票据索引
|
||
- 附件索引
|
||
- 风险记录
|
||
- 规则命中记录
|
||
- 补件会话记录
|
||
- 后端同步状态
|
||
|
||
作用:
|
||
|
||
- 为前台提供统一业务视图
|
||
- 为 Agent 提供流程状态
|
||
- 为审计提供过程留痕
|
||
- 为后端系统同步提供中间状态
|
||
|
||
注意:
|
||
|
||
> 影子报销账本不是会计账,不承担正式记账职责。
|
||
|
||
---
|
||
|
||
#### 2.3.5 Policy & Evidence 层
|
||
|
||
该层负责规则判断和证据归档。
|
||
|
||
包含:
|
||
|
||
- 报销制度库
|
||
- 费用标准库
|
||
- 费用类型字典
|
||
- 城市等级 / 补贴规则
|
||
- 发票验真结果
|
||
- 发票查重结果
|
||
- 审计日志
|
||
- 证据归档库
|
||
|
||
作用:
|
||
|
||
- 为 Agent 提供制度依据
|
||
- 为规则引擎提供结构化规则
|
||
- 为财务审核提供可追溯证据
|
||
- 为后续审计提供完整证据链
|
||
|
||
---
|
||
|
||
#### 2.3.6 System Adapter / 后端集成层
|
||
|
||
负责连接企业已有系统。
|
||
|
||
可对接系统:
|
||
|
||
- OA / BPM 审批系统
|
||
- ERP / 财务系统
|
||
- 费控报销系统
|
||
- 预算系统
|
||
- 主数据系统
|
||
- 发票平台
|
||
- 税务接口
|
||
- 财务共享中心
|
||
- 企业微信 / 钉钉消息系统
|
||
|
||
职责:
|
||
|
||
- 查询主数据
|
||
- 查询预算信息
|
||
- 查询员工信息
|
||
- 写入报销草稿
|
||
- 发起审批流程
|
||
- 同步审批状态
|
||
- 同步归档结果
|
||
|
||
---
|
||
|
||
## 3. 核心业务流程
|
||
|
||
### 3.1 流程总览
|
||
|
||
完整流程如下:
|
||
|
||
1. 用户上传票据与出差信息
|
||
2. Agent 受理并理解任务
|
||
3. Agent 调用 OCR 和解析工具
|
||
4. Agent 识别费用类型并生成影子报销记录
|
||
5. Agent 调用规则引擎完成制度预审
|
||
6. Agent 输出风险解释和缺件提醒
|
||
7. 用户补充材料并确认
|
||
8. Agent 生成标准报销单
|
||
9. Agent 同步 OA / ERP / 费控系统
|
||
10. 后端完成正式审批、入账与归档
|
||
|
||
---
|
||
|
||
### 3.2 主流程时序
|
||
|
||
```mermaid
|
||
sequenceDiagram
|
||
participant U as 用户
|
||
participant UI as AI报销操作层
|
||
participant AO as Agent Orchestrator
|
||
participant OCR as OCR/票据识别
|
||
participant Rule as 规则引擎
|
||
participant Ledger as 影子报销账本
|
||
participant Adapter as 后端适配器
|
||
participant ERP as OA/ERP/费控系统
|
||
|
||
U->>UI: 上传票据/说明报销事项
|
||
UI->>AO: 创建报销任务
|
||
AO->>OCR: 调用票据识别
|
||
OCR-->>AO: 返回结构化票据信息
|
||
AO->>Ledger: 创建影子报销记录
|
||
AO->>Rule: 调用制度预审
|
||
Rule-->>AO: 返回规则命中与风险结果
|
||
AO->>UI: 展示风险/缺件/草稿
|
||
U->>UI: 补充材料并确认
|
||
UI->>AO: 提交确认
|
||
AO->>Ledger: 更新报销状态
|
||
AO->>Adapter: 生成标准报销单并同步
|
||
Adapter->>ERP: 写入报销单/发起审批
|
||
ERP-->>Adapter: 返回审批单号/状态
|
||
Adapter-->>Ledger: 回写后端同步状态
|
||
```
|
||
|
||
---
|
||
|
||
### 3.3 Agent 驱动运行逻辑
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
A[用户上传票据与出差信息] --> B[受理 Agent 理解任务]
|
||
B --> C[单据解析 Agent 识别票据与附件]
|
||
C --> D[生成影子报销记录]
|
||
D --> E[规则校验 Agent 调用制度规则]
|
||
E --> F{是否存在风险或缺件}
|
||
F -- 是 --> G[解释与补件 Agent 发起补件交互]
|
||
G --> H[用户补充材料并确认]
|
||
H --> E
|
||
F -- 否 --> I[同步执行 Agent 生成标准报销单]
|
||
I --> J[同步 OA / ERP / 费控系统]
|
||
J --> K[后端正式审批、入账与归档]
|
||
```
|
||
|
||
---
|
||
|
||
## 4. Agent 设计
|
||
|
||
### 4.1 Agent 总体分工
|
||
|
||
| Agent | 职责 | 输入 | 输出 |
|
||
|---|---|---|---|
|
||
| 受理 Agent | 理解用户报销意图,收集上下文 | 用户自然语言、上传文件、历史任务 | 报销任务、材料清单、缺失信息 |
|
||
| 单据解析 Agent | OCR 识别、字段抽取、费用归类 | 发票、行程单、酒店单、支付截图 | 结构化票据信息、费用明细建议 |
|
||
| 规则校验 Agent | 制度预审、超标、查重、合规判断 | 报销草稿、规则库、主数据 | 规则命中记录、风险等级 |
|
||
| 解释与补件 Agent | 解释风险、提示缺件、引导修改 | 风险结果、缺件列表、制度依据 | 用户可理解的解释、补件任务 |
|
||
| 同步执行 Agent | 生成标准报销单,调用后端接口 | 最终确认数据、影子账本记录 | 后端报销单号、审批状态 |
|
||
|
||
---
|
||
|
||
### 4.2 Agent Orchestrator
|
||
|
||
Agent Orchestrator 是流程编排器,负责管理任务状态和 Agent 调度。
|
||
|
||
职责:
|
||
|
||
- 创建任务
|
||
- 维护任务状态
|
||
- 决定下一步调用哪个 Agent
|
||
- 管理多轮对话上下文
|
||
- 管理工具调用
|
||
- 处理失败重试
|
||
- 记录流程日志
|
||
- 管理人工确认节点
|
||
|
||
建议状态机:
|
||
|
||
```mermaid
|
||
stateDiagram-v2
|
||
[*] --> Created: 创建任务
|
||
Created --> MaterialCollecting: 收集材料
|
||
MaterialCollecting --> Parsing: 解析单据
|
||
Parsing --> DraftGenerated: 生成草稿
|
||
DraftGenerated --> PreChecking: 制度预审
|
||
PreChecking --> NeedSupplement: 存在缺件/风险
|
||
NeedSupplement --> MaterialCollecting: 用户补件
|
||
PreChecking --> PendingUserConfirm: 预审通过
|
||
PendingUserConfirm --> Submitting: 用户确认
|
||
Submitting --> Synced: 同步后端成功
|
||
Submitting --> SyncFailed: 同步失败
|
||
SyncFailed --> Submitting: 重试
|
||
Synced --> [*]
|
||
```
|
||
|
||
---
|
||
|
||
### 4.3 Agent 调用原则
|
||
|
||
Agent 不直接决定最终财务结果,只负责预审和建议。
|
||
|
||
原则:
|
||
|
||
1. 低风险问题可自动提示。
|
||
2. 中风险问题需要用户确认。
|
||
3. 高风险问题进入人工审核。
|
||
4. 所有规则命中必须留痕。
|
||
5. 所有 AI 解释必须能追溯到制度或证据。
|
||
6. 正式审批和入账仍以后端系统为准。
|
||
|
||
---
|
||
|
||
## 5. 核心数据模型
|
||
|
||
### 5.1 主要实体
|
||
|
||
| 实体 | 说明 |
|
||
|---|---|
|
||
| ReimbursementTask | 报销任务,Agent 处理的最小任务单元 |
|
||
| ShadowReimbursement | 影子报销记录,表示一次报销业务事实 |
|
||
| ReimbursementItem | 报销明细 |
|
||
| ExpenseDocument | 票据 / 附件 |
|
||
| ExpensePolicy | 报销制度 |
|
||
| ExpenseRule | 报销规则 |
|
||
| RuleHit | 规则命中记录 |
|
||
| RiskFinding | 风险提示 |
|
||
| SupplementRequest | 补件请求 |
|
||
| ConversationRecord | 会话记录 |
|
||
| SyncRecord | 后端同步记录 |
|
||
| AuditLog | 审计日志 |
|
||
|
||
---
|
||
|
||
### 5.2 表结构建议
|
||
|
||
#### 5.2.1 reimbursement_task 报销任务表
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
|---|---|---|
|
||
| id | string | 任务ID |
|
||
| user_id | string | 发起人ID |
|
||
| company_id | string | 企业ID |
|
||
| task_type | string | 任务类型,如 travel_expense |
|
||
| status | string | 任务状态 |
|
||
| user_intent | text | 用户原始意图 |
|
||
| current_agent | string | 当前处理 Agent |
|
||
| created_at | datetime | 创建时间 |
|
||
| updated_at | datetime | 更新时间 |
|
||
|
||
---
|
||
|
||
#### 5.2.2 shadow_reimbursement 影子报销记录表
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
|---|---|---|
|
||
| id | string | 影子报销ID |
|
||
| task_id | string | 关联任务ID |
|
||
| applicant_id | string | 报销人 |
|
||
| department_id | string | 部门 |
|
||
| cost_center_id | string | 成本中心 |
|
||
| project_id | string | 项目ID |
|
||
| reimbursement_type | string | 报销类型 |
|
||
| reason | text | 报销事由 |
|
||
| total_amount | decimal | 总金额 |
|
||
| currency | string | 币种 |
|
||
| risk_level | string | 风险等级 |
|
||
| precheck_status | string | 预审状态 |
|
||
| backend_system | string | 目标后端系统 |
|
||
| backend_bill_id | string | 后端单据ID |
|
||
| sync_status | string | 同步状态 |
|
||
| created_at | datetime | 创建时间 |
|
||
| updated_at | datetime | 更新时间 |
|
||
|
||
---
|
||
|
||
#### 5.2.3 reimbursement_item 报销明细表
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
|---|---|---|
|
||
| id | string | 明细ID |
|
||
| reimbursement_id | string | 影子报销ID |
|
||
| expense_type | string | 费用类型 |
|
||
| amount | decimal | 金额 |
|
||
| tax_amount | decimal | 税额 |
|
||
| occurred_at | date | 费用发生日期 |
|
||
| city | string | 发生城市 |
|
||
| vendor_name | string | 商户名称 |
|
||
| invoice_id | string | 关联票据ID |
|
||
| policy_status | string | 规则校验状态 |
|
||
| risk_level | string | 风险等级 |
|
||
| remark | text | 备注 |
|
||
|
||
---
|
||
|
||
#### 5.2.4 expense_document 票据附件表
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
|---|---|---|
|
||
| id | string | 文件ID |
|
||
| reimbursement_id | string | 影子报销ID |
|
||
| item_id | string | 明细ID |
|
||
| document_type | string | 发票、行程单、酒店流水、支付截图等 |
|
||
| file_url | string | 文件地址 |
|
||
| ocr_status | string | OCR 状态 |
|
||
| extracted_json | json | OCR 抽取结果 |
|
||
| invoice_code | string | 发票代码 |
|
||
| invoice_number | string | 发票号码 |
|
||
| invoice_date | date | 开票日期 |
|
||
| amount | decimal | 金额 |
|
||
| tax_amount | decimal | 税额 |
|
||
| seller_name | string | 销售方 |
|
||
| buyer_name | string | 购买方 |
|
||
| verify_status | string | 验真状态 |
|
||
| duplicate_status | string | 查重状态 |
|
||
| created_at | datetime | 创建时间 |
|
||
|
||
---
|
||
|
||
#### 5.2.5 expense_rule 规则表
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
|---|---|---|
|
||
| id | string | 规则ID |
|
||
| rule_code | string | 规则编码 |
|
||
| rule_name | string | 规则名称 |
|
||
| expense_type | string | 适用费用类型 |
|
||
| condition_json | json | 条件表达式 |
|
||
| action | string | 命中动作 |
|
||
| severity | string | 风险等级 |
|
||
| message_template | text | 提示文案模板 |
|
||
| policy_ref | string | 制度依据 |
|
||
| enabled | boolean | 是否启用 |
|
||
| version | string | 规则版本 |
|
||
|
||
---
|
||
|
||
#### 5.2.6 rule_hit 规则命中表
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
|---|---|---|
|
||
| id | string | 命中ID |
|
||
| reimbursement_id | string | 报销ID |
|
||
| item_id | string | 明细ID |
|
||
| rule_id | string | 规则ID |
|
||
| severity | string | 风险等级 |
|
||
| hit_result | json | 命中详情 |
|
||
| explanation | text | 解释说明 |
|
||
| suggestion | text | 修改建议 |
|
||
| created_at | datetime | 创建时间 |
|
||
|
||
---
|
||
|
||
#### 5.2.7 supplement_request 补件请求表
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
|---|---|---|
|
||
| id | string | 补件请求ID |
|
||
| reimbursement_id | string | 报销ID |
|
||
| request_type | string | 补充附件、补充说明、修改字段 |
|
||
| target_item_id | string | 关联明细ID |
|
||
| message | text | 补件提示 |
|
||
| status | string | 待补充、已补充、已关闭 |
|
||
| user_response | text | 用户回复 |
|
||
| created_at | datetime | 创建时间 |
|
||
| resolved_at | datetime | 完成时间 |
|
||
|
||
---
|
||
|
||
#### 5.2.8 sync_record 后端同步记录表
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
|---|---|---|
|
||
| id | string | 同步ID |
|
||
| reimbursement_id | string | 报销ID |
|
||
| target_system | string | 目标系统 |
|
||
| request_payload | json | 请求报文 |
|
||
| response_payload | json | 响应报文 |
|
||
| sync_status | string | 成功、失败、重试中 |
|
||
| backend_bill_id | string | 后端单据ID |
|
||
| error_message | text | 错误信息 |
|
||
| created_at | datetime | 创建时间 |
|
||
|
||
---
|
||
|
||
## 6. 枚举设计
|
||
|
||
### 6.1 报销任务状态
|
||
|
||
| 编码 | 名称 |
|
||
|---|---|
|
||
| created | 已创建 |
|
||
| material_collecting | 收集中 |
|
||
| parsing | 解析中 |
|
||
| draft_generated | 草稿已生成 |
|
||
| prechecking | 预审中 |
|
||
| need_supplement | 需要补件 |
|
||
| pending_user_confirm | 待用户确认 |
|
||
| submitting | 提交中 |
|
||
| synced | 已同步 |
|
||
| sync_failed | 同步失败 |
|
||
| closed | 已关闭 |
|
||
|
||
---
|
||
|
||
### 6.2 费用类型
|
||
|
||
| 编码 | 名称 |
|
||
|---|---|
|
||
| travel_transport | 差旅交通费 |
|
||
| travel_hotel | 差旅住宿费 |
|
||
| travel_meal | 差旅餐补 |
|
||
| local_transport | 市内交通费 |
|
||
| business_meal | 业务招待费 |
|
||
| office_supply | 办公用品费 |
|
||
| communication | 通讯费 |
|
||
| other | 其他 |
|
||
|
||
---
|
||
|
||
### 6.3 票据类型
|
||
|
||
| 编码 | 名称 |
|
||
|---|---|
|
||
| vat_invoice | 增值税发票 |
|
||
| train_ticket | 火车票 |
|
||
| flight_itinerary | 航空行程单 |
|
||
| taxi_receipt | 打车票据 |
|
||
| hotel_bill | 酒店流水 |
|
||
| payment_screenshot | 支付截图 |
|
||
| travel_order | 行程单 |
|
||
| other_attachment | 其他附件 |
|
||
|
||
---
|
||
|
||
### 6.4 风险等级
|
||
|
||
| 编码 | 名称 | 处理方式 |
|
||
|---|---|---|
|
||
| low | 低风险 | 提醒用户 |
|
||
| medium | 中风险 | 需要用户确认或补充说明 |
|
||
| high | 高风险 | 建议人工审核 |
|
||
| blocked | 阻断 | 不允许提交 |
|
||
|
||
---
|
||
|
||
### 6.5 规则动作
|
||
|
||
| 编码 | 名称 |
|
||
|---|---|
|
||
| pass | 通过 |
|
||
| warn | 警告 |
|
||
| require_explanation | 要求说明 |
|
||
| require_attachment | 要求补附件 |
|
||
| require_approval | 要求特殊审批 |
|
||
| block | 阻断提交 |
|
||
|
||
---
|
||
|
||
## 7. 规则引擎设计
|
||
|
||
### 7.1 规则类型
|
||
|
||
MVP 阶段建议支持以下规则:
|
||
|
||
1. 必填字段校验
|
||
2. 附件完整性校验
|
||
3. 票据验真校验
|
||
4. 重复报销校验
|
||
5. 金额超标校验
|
||
6. 日期合理性校验
|
||
7. 出差期间匹配校验
|
||
8. 费用类型与票据类型匹配校验
|
||
9. 发票抬头校验
|
||
10. 项目 / 成本中心校验
|
||
|
||
---
|
||
|
||
### 7.2 规则示例
|
||
|
||
#### 规则 1:住宿费超标
|
||
|
||
```json
|
||
{
|
||
"rule_code": "TRAVEL_HOTEL_LIMIT",
|
||
"rule_name": "住宿费标准校验",
|
||
"expense_type": "travel_hotel",
|
||
"condition": {
|
||
"compare": "amount_per_night",
|
||
"operator": ">",
|
||
"target": "policy.hotel_limit"
|
||
},
|
||
"action": "require_explanation",
|
||
"severity": "medium",
|
||
"message_template": "住宿费超出当前城市和职级标准,请补充超标说明或发起特殊审批。",
|
||
"policy_ref": "差旅报销制度-住宿标准"
|
||
}
|
||
```
|
||
|
||
#### 规则 2:缺少酒店流水
|
||
|
||
```json
|
||
{
|
||
"rule_code": "HOTEL_BILL_REQUIRED",
|
||
"rule_name": "住宿费必须上传酒店流水",
|
||
"expense_type": "travel_hotel",
|
||
"condition": {
|
||
"required_document_type": "hotel_bill"
|
||
},
|
||
"action": "require_attachment",
|
||
"severity": "medium",
|
||
"message_template": "当前住宿费缺少酒店流水,请补充上传。",
|
||
"policy_ref": "差旅报销制度-附件要求"
|
||
}
|
||
```
|
||
|
||
#### 规则 3:票据疑似重复
|
||
|
||
```json
|
||
{
|
||
"rule_code": "DUPLICATE_INVOICE_CHECK",
|
||
"rule_name": "重复发票检查",
|
||
"expense_type": "*",
|
||
"condition": {
|
||
"duplicate_keys": ["invoice_code", "invoice_number", "amount", "invoice_date"]
|
||
},
|
||
"action": "block",
|
||
"severity": "blocked",
|
||
"message_template": "检测到该发票可能已被报销,请确认或联系财务处理。",
|
||
"policy_ref": "费用报销管理办法-重复报销"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 7.3 规则结果结构
|
||
|
||
```json
|
||
{
|
||
"precheck_status": "need_supplement",
|
||
"risk_level": "medium",
|
||
"rule_hits": [
|
||
{
|
||
"rule_code": "HOTEL_BILL_REQUIRED",
|
||
"severity": "medium",
|
||
"message": "当前住宿费缺少酒店流水,请补充上传。",
|
||
"suggestion": "请上传酒店结账单或住宿明细流水。",
|
||
"policy_ref": "差旅报销制度-附件要求"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 8. API 设计
|
||
|
||
### 8.1 创建报销任务
|
||
|
||
```http
|
||
POST /api/reimbursement/tasks
|
||
```
|
||
|
||
请求:
|
||
|
||
```json
|
||
{
|
||
"user_id": "U001",
|
||
"company_id": "C001",
|
||
"user_intent": "我要报这次北京出差的费用",
|
||
"entry_channel": "web"
|
||
}
|
||
```
|
||
|
||
响应:
|
||
|
||
```json
|
||
{
|
||
"task_id": "T202604240001",
|
||
"status": "material_collecting"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 8.2 上传票据附件
|
||
|
||
```http
|
||
POST /api/reimbursement/tasks/{task_id}/documents
|
||
```
|
||
|
||
请求:
|
||
|
||
```json
|
||
{
|
||
"document_type": "vat_invoice",
|
||
"file_url": "https://example.com/file/invoice001.pdf"
|
||
}
|
||
```
|
||
|
||
响应:
|
||
|
||
```json
|
||
{
|
||
"document_id": "D001",
|
||
"ocr_status": "pending"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 8.3 启动 Agent 处理
|
||
|
||
```http
|
||
POST /api/reimbursement/tasks/{task_id}/agent/run
|
||
```
|
||
|
||
请求:
|
||
|
||
```json
|
||
{
|
||
"start_from": "intake",
|
||
"mode": "precheck"
|
||
}
|
||
```
|
||
|
||
响应:
|
||
|
||
```json
|
||
{
|
||
"task_id": "T202604240001",
|
||
"status": "parsing",
|
||
"current_agent": "document_parse_agent"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 8.4 获取报销草稿
|
||
|
||
```http
|
||
GET /api/reimbursement/tasks/{task_id}/draft
|
||
```
|
||
|
||
响应:
|
||
|
||
```json
|
||
{
|
||
"reimbursement_id": "R001",
|
||
"reason": "北京出差",
|
||
"total_amount": 2380.00,
|
||
"items": [
|
||
{
|
||
"item_id": "I001",
|
||
"expense_type": "travel_hotel",
|
||
"amount": 1200.00,
|
||
"occurred_at": "2026-04-20",
|
||
"risk_level": "medium"
|
||
}
|
||
],
|
||
"precheck_status": "need_supplement"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 8.5 获取预审结果
|
||
|
||
```http
|
||
GET /api/reimbursement/tasks/{task_id}/precheck-result
|
||
```
|
||
|
||
响应:
|
||
|
||
```json
|
||
{
|
||
"precheck_status": "need_supplement",
|
||
"risk_level": "medium",
|
||
"summary": "当前报销单存在 1 个缺件问题和 1 个超标风险。",
|
||
"rule_hits": [
|
||
{
|
||
"rule_code": "HOTEL_BILL_REQUIRED",
|
||
"severity": "medium",
|
||
"message": "住宿费缺少酒店流水。",
|
||
"suggestion": "请上传酒店流水。"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 8.6 用户补件
|
||
|
||
```http
|
||
POST /api/reimbursement/tasks/{task_id}/supplements
|
||
```
|
||
|
||
请求:
|
||
|
||
```json
|
||
{
|
||
"supplement_request_id": "S001",
|
||
"response_text": "已补充酒店流水",
|
||
"document_ids": ["D003"]
|
||
}
|
||
```
|
||
|
||
响应:
|
||
|
||
```json
|
||
{
|
||
"status": "received",
|
||
"next_action": "rerun_precheck"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 8.7 用户确认提交
|
||
|
||
```http
|
||
POST /api/reimbursement/tasks/{task_id}/submit
|
||
```
|
||
|
||
请求:
|
||
|
||
```json
|
||
{
|
||
"confirmed": true,
|
||
"submit_to": "expense_system"
|
||
}
|
||
```
|
||
|
||
响应:
|
||
|
||
```json
|
||
{
|
||
"status": "submitting",
|
||
"sync_id": "SYNC001"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 8.8 查询同步状态
|
||
|
||
```http
|
||
GET /api/reimbursement/tasks/{task_id}/sync-status
|
||
```
|
||
|
||
响应:
|
||
|
||
```json
|
||
{
|
||
"sync_status": "success",
|
||
"target_system": "expense_system",
|
||
"backend_bill_id": "BX202604240001"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 9. 前端页面设计
|
||
|
||
### 9.1 页面清单
|
||
|
||
MVP 阶段建议包含以下页面:
|
||
|
||
1. 报销入口页
|
||
2. 票据上传页
|
||
3. 报销草稿页
|
||
4. 预审结果页
|
||
5. 补件交互页
|
||
6. 提交确认页
|
||
7. 任务详情页
|
||
8. 财务审核辅助页
|
||
9. 制度规则管理页
|
||
10. 审计日志页
|
||
|
||
---
|
||
|
||
### 9.2 报销入口页
|
||
|
||
核心元素:
|
||
|
||
- 对话输入框
|
||
- 上传按钮
|
||
- 最近任务
|
||
- 常用报销类型
|
||
- 智能引导问题
|
||
|
||
示例提示:
|
||
|
||
- “我要报一次差旅”
|
||
- “帮我看这些票能不能报”
|
||
- “帮我生成报销单”
|
||
- “这张发票为什么不合规?”
|
||
|
||
---
|
||
|
||
### 9.3 报销草稿页
|
||
|
||
展示内容:
|
||
|
||
- 报销人
|
||
- 部门
|
||
- 成本中心
|
||
- 项目
|
||
- 报销事由
|
||
- 费用明细
|
||
- 票据附件
|
||
- 自动识别结果
|
||
- 可编辑字段
|
||
- 预审状态
|
||
|
||
---
|
||
|
||
### 9.4 预审结果页
|
||
|
||
展示内容:
|
||
|
||
- 总体结论
|
||
- 风险等级
|
||
- 通过项
|
||
- 风险项
|
||
- 缺件项
|
||
- 命中规则
|
||
- 制度依据
|
||
- 修改建议
|
||
- 一键补件按钮
|
||
- 人工确认按钮
|
||
|
||
---
|
||
|
||
### 9.5 财务审核辅助页
|
||
|
||
展示内容:
|
||
|
||
- 报销单摘要
|
||
- AI 预审结论
|
||
- 规则命中列表
|
||
- 用户补件记录
|
||
- 附件证据链
|
||
- 同步状态
|
||
- 审计日志
|
||
|
||
---
|
||
|
||
## 10. 后端服务设计
|
||
|
||
### 10.1 服务拆分建议
|
||
|
||
MVP 阶段可采用模块化单体,后续再微服务化。
|
||
|
||
建议模块:
|
||
|
||
| 模块 | 说明 |
|
||
|---|---|
|
||
| user-service | 用户与权限 |
|
||
| task-service | 报销任务管理 |
|
||
| document-service | 文件与票据管理 |
|
||
| agent-service | Agent 编排 |
|
||
| ocr-service | OCR 调用封装 |
|
||
| rule-service | 规则引擎 |
|
||
| ledger-service | 影子账本 |
|
||
| evidence-service | 证据归档 |
|
||
| adapter-service | 后端系统适配 |
|
||
| audit-service | 审计日志 |
|
||
|
||
---
|
||
|
||
### 10.2 推荐技术栈
|
||
|
||
可选方案:
|
||
|
||
#### 前端
|
||
|
||
- React / Vue
|
||
- Ant Design / Element Plus
|
||
- 企业微信 / 钉钉 H5 SDK
|
||
|
||
#### 后端
|
||
|
||
- Java Spring Boot
|
||
- Python FastAPI
|
||
- Node.js NestJS
|
||
|
||
#### 数据库
|
||
|
||
- PostgreSQL / MySQL
|
||
- Redis
|
||
- MinIO / OSS 文件存储
|
||
- Elasticsearch / OpenSearch,可选,用于检索
|
||
|
||
#### AI / Agent
|
||
|
||
- Agent Orchestrator 自研
|
||
- LangGraph / CrewAI / AutoGen / 自定义 Workflow,可选
|
||
- 大模型 API
|
||
- OCR API
|
||
- 向量数据库,可选
|
||
|
||
#### 规则引擎
|
||
|
||
- JSON Rule Engine
|
||
- Drools
|
||
- 自研轻量规则引擎
|
||
|
||
---
|
||
|
||
## 11. 权限与安全
|
||
|
||
### 11.1 权限角色
|
||
|
||
| 角色 | 权限 |
|
||
|---|---|
|
||
| 员工 | 创建报销、上传材料、查看自己的任务 |
|
||
| 财务审核人员 | 查看待审核报销、查看预审结果、处理风险 |
|
||
| 制度管理员 | 维护制度、规则、费用标准 |
|
||
| 系统管理员 | 管理组织、用户、接口配置 |
|
||
| 审计人员 | 查看日志和证据链 |
|
||
|
||
---
|
||
|
||
### 11.2 安全要求
|
||
|
||
- 文件上传需做病毒扫描。
|
||
- 发票、身份证、银行卡等敏感信息需脱敏展示。
|
||
- 所有 Agent 操作需记录日志。
|
||
- 所有规则版本需保留历史。
|
||
- 所有用户确认动作需留痕。
|
||
- 后端接口需有签名、鉴权和重放保护。
|
||
- 不允许 Agent 绕过人工确认直接提交高风险单据。
|
||
|
||
---
|
||
|
||
## 12. 审计与可解释性
|
||
|
||
### 12.1 必须留痕的动作
|
||
|
||
- 用户上传文件
|
||
- OCR 识别结果
|
||
- Agent 调用记录
|
||
- 规则命中记录
|
||
- 用户补件记录
|
||
- 用户确认记录
|
||
- 后端同步请求
|
||
- 后端同步响应
|
||
- 审核人处理记录
|
||
|
||
---
|
||
|
||
### 12.2 解释输出模板
|
||
|
||
风险解释建议采用统一格式:
|
||
|
||
```text
|
||
问题类型:住宿费超标
|
||
命中规则:TRAVEL_HOTEL_LIMIT
|
||
制度依据:差旅报销制度-住宿标准
|
||
问题说明:当前住宿费为 680 元/晚,超过该城市标准 500 元/晚。
|
||
建议处理:请补充超标说明,或发起特殊审批。
|
||
风险等级:中风险
|
||
```
|
||
|
||
---
|
||
|
||
## 13. MVP 版本规划
|
||
|
||
### 13.1 MVP 目标
|
||
|
||
用最小范围跑通“上传材料 → 识别 → 草稿 → 预审 → 补件 → 确认 → 同步”的完整闭环。
|
||
|
||
---
|
||
|
||
### 13.2 MVP 功能范围
|
||
|
||
#### 必做
|
||
|
||
- 用户创建报销任务
|
||
- 上传票据 / 附件
|
||
- OCR 识别
|
||
- 自动生成报销草稿
|
||
- 费用类型识别
|
||
- 基础规则预审
|
||
- 风险与缺件提示
|
||
- 用户补件
|
||
- 用户确认提交
|
||
- 影子报销账本
|
||
- 审计日志
|
||
- 模拟后端同步
|
||
|
||
#### 可延后
|
||
|
||
- 多企业多租户
|
||
- 复杂审批流
|
||
- 深度 ERP 接口
|
||
- 发票实时验真
|
||
- 预算强控制
|
||
- 移动端完整体验
|
||
- 多语言
|
||
- 行业模板市场
|
||
|
||
---
|
||
|
||
### 13.3 MVP 优先支持的报销类型
|
||
|
||
建议优先支持:
|
||
|
||
> 差旅报销
|
||
|
||
原因:
|
||
|
||
- 票据类型丰富
|
||
- 规则典型
|
||
- 缺件场景多
|
||
- 价值容易演示
|
||
- 客户容易理解
|
||
|
||
优先支持票据:
|
||
|
||
- 增值税发票
|
||
- 火车票
|
||
- 机票行程单
|
||
- 酒店流水
|
||
- 打车票据
|
||
- 支付截图
|
||
|
||
---
|
||
|
||
## 14. 里程碑计划
|
||
|
||
### 阶段 1:原型验证
|
||
|
||
目标:
|
||
|
||
- 完成核心流程 Demo
|
||
- 完成影子账本基础表
|
||
- 完成 OCR 接入
|
||
- 完成 5 条基础规则
|
||
|
||
输出:
|
||
|
||
- Web Demo
|
||
- 报销任务流
|
||
- 草稿生成页面
|
||
- 预审结果页面
|
||
|
||
---
|
||
|
||
### 阶段 2:MVP 可用版本
|
||
|
||
目标:
|
||
|
||
- 完整跑通差旅报销
|
||
- 支持多轮补件
|
||
- 支持规则命中留痕
|
||
- 支持模拟后端同步
|
||
|
||
输出:
|
||
|
||
- MVP 系统
|
||
- 规则配置后台
|
||
- 审计日志
|
||
- 财务审核辅助页
|
||
|
||
---
|
||
|
||
### 阶段 3:试点企业接入
|
||
|
||
目标:
|
||
|
||
- 接入一家试点企业
|
||
- 对接其 OA / 费控 / ERP 中至少一个系统
|
||
- 根据真实制度配置规则
|
||
- 验证打回率降低效果
|
||
|
||
输出:
|
||
|
||
- 试点报告
|
||
- 规则模板
|
||
- 接口适配经验
|
||
- ROI 数据
|
||
|
||
---
|
||
|
||
### 阶段 4:产品化
|
||
|
||
目标:
|
||
|
||
- 多企业配置
|
||
- 多制度模板
|
||
- 多后端适配器
|
||
- 管理后台完善
|
||
- 权限与安全完善
|
||
|
||
输出:
|
||
|
||
- 标准产品版本
|
||
- 部署手册
|
||
- 运维手册
|
||
- 行业模板
|
||
|
||
---
|
||
|
||
## 15. 关键指标
|
||
|
||
### 15.1 业务指标
|
||
|
||
| 指标 | 说明 |
|
||
|---|---|
|
||
| 自动草稿生成率 | 上传材料后成功生成草稿的比例 |
|
||
| 预审命中率 | 规则识别出问题的比例 |
|
||
| 打回率降低 | 接入前后报销打回率变化 |
|
||
| 平均填单时间 | 员工完成报销所需时间 |
|
||
| 平均审核时间 | 财务审核单据所需时间 |
|
||
| 补件一次完成率 | 用户一次补齐材料的比例 |
|
||
|
||
---
|
||
|
||
### 15.2 技术指标
|
||
|
||
| 指标 | 说明 |
|
||
|---|---|
|
||
| OCR 准确率 | 关键字段识别准确率 |
|
||
| 规则执行耗时 | 单次预审耗时 |
|
||
| Agent 成功完成率 | Agent 完整跑完流程的比例 |
|
||
| 后端同步成功率 | 同步 OA / ERP / 费控成功率 |
|
||
| 系统响应时间 | 主要接口响应时延 |
|
||
| 任务异常率 | Agent 流程失败比例 |
|
||
|
||
---
|
||
|
||
## 16. 风险与应对
|
||
|
||
### 16.1 规则不准确
|
||
|
||
风险:
|
||
|
||
- 制度复杂,规则配置错误会导致误判。
|
||
|
||
应对:
|
||
|
||
- 规则上线前必须人工确认。
|
||
- 规则命中要显示依据。
|
||
- 高风险结果只建议,不自动阻断。
|
||
|
||
---
|
||
|
||
### 16.2 OCR 识别错误
|
||
|
||
风险:
|
||
|
||
- 票据字段识别不准,导致草稿错误。
|
||
|
||
应对:
|
||
|
||
- 关键字段允许人工修改。
|
||
- 低置信度字段高亮提示。
|
||
- 原图与识别结果并排展示。
|
||
|
||
---
|
||
|
||
### 16.3 后端系统难对接
|
||
|
||
风险:
|
||
|
||
- 企业 ERP / OA 接口不统一。
|
||
|
||
应对:
|
||
|
||
- 先做模拟同步。
|
||
- 后端适配器标准化。
|
||
- 支持 API 与 RPA 两种方式。
|
||
|
||
---
|
||
|
||
### 16.4 AI 幻觉
|
||
|
||
风险:
|
||
|
||
- Agent 可能生成不符合制度的解释。
|
||
|
||
应对:
|
||
|
||
- 所有解释必须基于规则命中和制度片段。
|
||
- 没有依据时必须显示“未找到明确制度依据”。
|
||
- 高风险判断进入人工审核。
|
||
|
||
---
|
||
|
||
### 16.5 客户担心替换原系统
|
||
|
||
风险:
|
||
|
||
- 客户认为系统会冲击现有 ERP / 费控系统。
|
||
|
||
应对:
|
||
|
||
- 明确定位为“前台 AI 操作层”。
|
||
- 正式审批、入账、归档仍在后端系统完成。
|
||
- 强调不替换原系统。
|
||
|
||
---
|
||
|
||
## 17. 后续扩展方向
|
||
|
||
本期只做报销,后续可扩展到:
|
||
|
||
1. 付款申请
|
||
2. 采购申请
|
||
3. 合同付款
|
||
4. 供应商对账
|
||
5. 发票入账
|
||
6. 预算执行分析
|
||
7. 财务共享审核 Agent
|
||
|
||
长期目标:
|
||
|
||
> 构建企业财务运营 Agent Layer。
|
||
|
||
---
|
||
|
||
## 18. 附录:推荐目录结构
|
||
|
||
```text
|
||
ai-reimbursement-agent/
|
||
├── frontend/
|
||
│ ├── pages/
|
||
│ ├── components/
|
||
│ └── services/
|
||
├── backend/
|
||
│ ├── task-service/
|
||
│ ├── document-service/
|
||
│ ├── agent-service/
|
||
│ ├── rule-service/
|
||
│ ├── ledger-service/
|
||
│ ├── evidence-service/
|
||
│ ├── adapter-service/
|
||
│ └── audit-service/
|
||
├── database/
|
||
│ ├── migrations/
|
||
│ └── seed/
|
||
├── docs/
|
||
│ ├── api.md
|
||
│ ├── rules.md
|
||
│ ├── data-model.md
|
||
│ └── deployment.md
|
||
└── README.md
|
||
```
|
||
|
||
---
|
||
|
||
## 19. 附录:最小开发任务拆分
|
||
|
||
### 后端任务
|
||
|
||
- [ ] 创建报销任务接口
|
||
- [ ] 上传附件接口
|
||
- [ ] OCR 调用封装
|
||
- [ ] 影子报销账本表
|
||
- [ ] 报销明细表
|
||
- [ ] 规则引擎基础能力
|
||
- [ ] 规则命中记录
|
||
- [ ] 补件请求接口
|
||
- [ ] 后端同步模拟接口
|
||
- [ ] 审计日志
|
||
|
||
### 前端任务
|
||
|
||
- [ ] 报销入口页
|
||
- [ ] 上传附件组件
|
||
- [ ] 报销草稿页
|
||
- [ ] 预审结果页
|
||
- [ ] 补件交互页
|
||
- [ ] 提交确认页
|
||
- [ ] 财务审核辅助页
|
||
|
||
### Agent 任务
|
||
|
||
- [ ] 受理 Agent
|
||
- [ ] 单据解析 Agent
|
||
- [ ] 规则校验 Agent
|
||
- [ ] 解释与补件 Agent
|
||
- [ ] 同步执行 Agent
|
||
- [ ] Orchestrator 状态机
|
||
|
||
### 规则任务
|
||
|
||
- [ ] 必填字段规则
|
||
- [ ] 缺附件规则
|
||
- [ ] 重复发票规则
|
||
- [ ] 金额超标规则
|
||
- [ ] 日期异常规则
|
||
- [ ] 费用类型匹配规则
|
||
|
||
---
|
||
|
||
## 20. 总结
|
||
|
||
本系统的核心不是重新做一套报销系统,也不是替换 ERP,而是在企业现有系统之上构建一个以 Agent 为核心的 AI 报销操作层。
|
||
|
||
它的关键价值在于:
|
||
|
||
- 员工只面对简单前台。
|
||
- Agent 负责理解、编排和补件。
|
||
- 影子报销账本沉淀业务事实。
|
||
- Policy & Evidence 层保证判断可解释、证据可追溯。
|
||
- 后端 OA / ERP / 费控系统继续负责正式审批、入账和归档。
|
||
|
||
一句话总结:
|
||
|
||
> **前台体验在 AI 报销操作层,正式账务仍在 ERP;所有业务流程围绕 Agent 层展开。**
|