# 会计事项工作台 · 页面需求文档

> 定位：本文是《业财一体化财务核算需求文档》**第五章「会计事项需求」的页面级落地**——把"业务事件 → 会计事项确认"这一步拆到字段、按钮、接口粒度，供开发和测试直接使用。
> 原型对照：`accounting-events.html`（工作台）+ `accounting-event-detail.html`（事项详情；工作台的复核/补证/裁定/驳回都必须落到详情完成，两页合为一份需求）。
> 上游文档：《业财一体化财务核算需求文档》§3/§5 ·《自动记账技术方案》§11/§12 ·《会计事项目录》（T1.1/T1.3）·《会计规则目录》（T1.2）·《财务模块开发指南》§2/§3。
> 基准账套：长沙宏达贸易有限公司 · 2026-06（期初 726,240.50 平；14 张凭证基线）。
> 日期：2026-10-09 ｜ 修订：2026-10-10 增补 §1.2 三层定位 / §4.6 关联机制 / §7.7 处理时点与节奏 / §7.8 端到端案例 / 附录 A 行业对照

---

## 一、页面定位与目标

### 1.1 在记账管道中的位置

```
业务动作（合同履约/验收入库/报销批准/收款到账/期末任务…）
   ↓ 业务模块同事务写 outbox_event
【会计事项工作台】← 你现在看的这一环：把"业务事实"翻译成"会计确认"
   ↓ 生成待审核凭证（人工复核通过后）
记账管理（审核 → 入账）→ 账簿 / 报表
   ↘ 旁路：异常处理中心 · 业财对账 · 期末结账 · 规则中心
```

**一句话**：事项是**防重与追溯的枢纽**——同一经济业务的多张发票、多笔收款只对应一组事项；工作台是财务复核岗每天处理的"会计确认队列"。

### 1.2 三层定位：事件 / 事项 / 凭证（先把"事项是什么"说透）

| 层 | 说的是什么话 | 例子（HT2026-001 第2期） |
|---|---|---|
| 业务事件 | "发生了什么"（业务语言） | 第2期履约完成、首款到账 |
| **会计事项** | "财务该怎么处理"（**判断记录**）：该不该记 / 记什么 / 多少钱 / 凭什么 | 要确认收入 10 万；依据=合同+验收单；规则=REVENUE_SERVICE_V2 |
| 凭证 | "账上最终记什么"（会计语言） | 记-0048：借 应收 70,000 + 借 合同负债 30,000 / 贷 收入 100,000 |

四条硬规则：

1. **不是每个业务事件都产生事项**：informational 类（合同签署、下单）不产生；recognition / settlement / adjustment / periodic 类按条件产生。
2. **同一事件可产生 0 / 1 / 多个事项**（按候选会计动作与确认片段 slice）；反过来说，**多张发票、多笔流水可只对应一组事项**（防重目标）。
3. **事项全量留档**：每个事项无论结局都编号存档（含"不确认"，保留原因与规则版本）——凭证只记结果，事项才留判断过程（审计追溯的依据）。
4. **凭证按条件产出，且与事项 N:M**：不确认 → 永不出凭证；待补证 / 待裁定 → 处理完才出；按单生成 1 事项→1 凭证，汇总生成 N 事项→1 凭证。

### 1.3 页面使命

| # | 使命 | 体现 |
|---|---|---|
| 1 | **队列化处理**：把当期 128 个业务事件收敛成"应确认 96 项"，按状态排队等人处理 | 状态筛选 + 状态优先级排序 |
| 2 | **例外管理**：自动能出凭证的直接出；出不了的（待补证/待裁定/异常）显性化，不让问题沉底 | 待补证/待裁定 KPI + 原因展示 |
| 3 | **防重与追溯**：六要素唯一键防重复确认；一事项 ↔ N 证据 ↔ N 凭证双向可查 | 事项编号贯穿全站（来源事项列/关联事项列/对账行） |
| 4 | **盯盘**：自动生成率 / 自动入账率 / 异常结清率 / 业财差异额 | KPI 区第二行（两率分开统计，不以生成率冒充入账率） |

### 1.4 双模式适配（模式 A 业财一体 / 模式 B 纯记账）

| | 模式 A · 业财一体（默认） | 模式 B · 纯记账 |
|---|---|---|
| 事件来源 | 全部五类（业/资/票/手/期） | 票（票据推断）/ 资（银行结算）/ 手 / 期 |
| 事项层 | 用户可见、可处理 | **自动创建、透明化**（用户直接看到"凭证来源"，复核动作不变） |
| 本页作用 | 会计确认主队列 | 复核队列（N5：详情可下钻，审计留痕不丢） |
| 切换 | 账套级 `run_mode` 配置，升降级数据无损（N9/N10） | 同左 |

### 1.5 上下游页面

| 方向 | 页面 | 关系 |
|---|---|---|
| 上游 | 仪表盘「业财核算」卡 | 数字同源，点击进工作台 |
| 上游 | 异常处理中心 | 异常行"关联事项"直达详情 |
| 上游 | 业财对账 | 差异行"生成事项 / 前往裁定"直达详情 |
| 上游 | 票据池（证据中心） | 票据"关联事项"列 / 待补证徽章直达详情 |
| 下游 | 记账管理 | 生成凭证后入列（待审核）；凭证"来源事项"列回跳详情 |
| 旁路 | 规则中心 / 异常中心 / 结账 / 对账 | KPI 与行内链接直达 |

---

## 二、角色与操作权限（谁来操作）

### 2.1 角色总览（引用《开发指南》§2 权限矩阵）

| 角色 | 在本页能做什么 | 硬约束 |
|---|---|---|
| **业务经办** | 只读自己单据关联事项的进度（不展示凭证编辑入口） | 不产生任何会计影响；看不到分录编辑 |
| **财务复核岗（记账岗）** | **本页主用户**：复核 / 批量复核 / 补证 / 裁定 / 驳回 / 生成凭证 / 手工事项 / 查看凭证 | 不能审核自己制单的凭证；不能跳过审核直接入账（P1/P2） |
| **财务负责人** | 复核岗全部 + 大额/跨期例外授权（如超期改期审批）、裁定升级 | 高风险动作二次授权 + 留痕 |
| **规则管理员** | 只读（查看规则命中与执行解释） | 规则改动仅能在规则中心（职责分离 P6） |
| **AI** | 不操作。提供建议、置信度与解释；生成的项标记"含 AI 生成" | 不能裁定、不能过账、不能改规则 |

### 2.2 权限点（本页定义，纳入全局权限点字典）

| 权限点 | 说明 | 默认授予 |
|---|---|---|
| `ae:view` | 查看工作台与事项详情 | 财务复核岗 / 财务负责人 / 规则管理员（只读） |
| `ae:create_manual` | 手工创建事项 | 财务复核岗 |
| `ae:approve` | 复核通过（生成凭证） | 财务复核岗 |
| `ae:batch_approve` | 批量复核（≤20 项/次，且仅同规则同金额量级；超限转逐张，P5） | 财务复核岗 |
| `ae:evidence` | 补充证据（待补证） | 财务复核岗 |
| `ae:resolve` | 人工裁定（待裁定，理由必填） | 财务复核岗；金额 > 50 万升级财务负责人 |
| `ae:reject` | 驳回事项（理由必填） | 财务复核岗 |
| `ae:generate_voucher` | 生成待审核凭证 | 财务复核岗（与凭证审核 `voucher:audit` 分离校验，P1） |

---

## 三、功能点清单

### 3.1 会计事项工作台（8 个区块）

| # | 区块 | 功能点 |
|---|---|---|
| 1 | 页头 | 账套与期间标识（长沙宏达贸易有限公司 · 2026-06）；一句话说明；**手工事项 / 批量复核**两个工具栏按钮 |
| 2 | KPI 第一行（5 项） | 本期事件数 128（去重后接入）/ 应确认事项 96（不含"不确认"）/ **待复核**（实时，含 AI 生成）/ **待补证**（实时，证据不全）/ 异常 5（链接→异常中心） |
| 3 | KPI 第二行（4 项） | 自动生成率 92%（自动生成凭证事项 ÷ 应生成事项）/ 自动入账率 78%（完成过账 ÷ 应生成事项，**≠生成率**）/ 异常结清率 58%（已结清 7 ÷ 本月 12）/ 业财差异额 60,880.00（3 项待处理，链接→对账明细） |
| 4 | 筛选区 | 期间（全部 / 2026-06 / 2026-05）· 状态（7 态）· 会计动作（收入确认/采购确认/费用确认/应收回款/付款核销/预收/支付职工/期末计提/待定性）；三条件叠加生效；右侧来源图例（业/资/票/手/期 五类徽章） |
| 5 | 事项列表（10 列） | 勾选框（仅"待复核"行可勾）· 事项编号 · 来源事件（徽章+摘要）· 业务对象 · 会计动作 · 确认金额 · 金额分层 · 期间 · 状态 · 操作 |
| 6 | 状态图例 | 7 态徽章与配色（与表格、详情页三处同源） |
| 7 | 凭证预览抽屉 | 凭证头（号/日期/状态徽章/来源事项）＋分录表＋借贷合计；底部"在记账管理中打开"深链 |
| 8 | 轻提示（toast） | 复核成功报凭证号；批量复核空选拦截；手工事项示意 |

### 3.2 事项详情（9 个区块）

| # | 区块 | 功能点 |
|---|---|---|
| 1 | 头部 | 返回工作台；`AE-编号 · 会计动作`；摘要（事件/业务对象/期间）；**状态徽章**；**状态驱动的操作按钮组**（见 §6.2） |
| 2 | 金额分层 | 确认金额 / 已结算 / 已开票 / 税额（四者不必相等；"—"表示未发生） |
| 3 | 确认依据 | 命中规则编号 + 版本；确认条件逐条 ✓/✗ + 解释（来自规则执行日志） |
| 4 | 分录预览 | 按状态分级：规则模板预览（待复核）/ 裁定前无分录（待裁定）/ 凭证分录只读（已生成·已入账）/ 无会计影响（不确认） |
| 5 | 结账校验 | 该事项生成时的校验清单（平衡/期间/科目/唯一性） |
| 6 | 证据区 | 发票 / 流水 / 验收影像 N:M 关联；**缺失项高亮**（待补证的依据） |
| 7 | 时间线 | 事件发生 → 接入 → 评估 → 各次状态流转（含裁定留痕） |
| 8 | 关系与图谱 | 合同 / 事项-凭证（深链记账管理）/ 核销记录 / 关联事项；节点图谱（合同→履约→票据/流水→事项→凭证） |
| 9 | 人工裁定弹窗 | 四候选（现销收入/预收款项/冲应收回款/往来款）+ **裁定说明必填**（留痕） |

---

## 四、数据从哪里来（取数设计）

### 4.1 数据链路总览（事件 → 事项 → 页面）

| 步 | 动作 | 落库 | 关键规则 |
|---|---|---|---|
| 1 | 业务动作发生（合同履约确认/验收入库/报销批准/收款到账/期末任务…），业务模块**同事务**写发件箱 | `outbox_event` | 事务性发件箱，业务提交成功才可能投递 |
| 2 | 发布器投递 → 记账服务消费 | `inbox_consume` | 幂等键 `(tenant_id, source_system, event_id)`，重放返回首次结果（O1） |
| 3 | 事件分类 → 候选会计动作（0/1/多项） | `business_event`（事实不可编辑，更正走新 revision） | informational 类不产生事项 |
| 4 | 按**六要素唯一键**取或建事项 | `accounting_event` | 账套+业务对象类型+对象ID+会计动作+确认片段+版本；重复投递不重复建（O1/O10） |
| 5 | 规则引擎匹配（企业规则→行业模板→通用模板→人工），评估确认条件，关联证据 | `accounting_rule` / `rule_execution_log` / `accounting_event_evidence` | 规则版本不可覆盖；试运行不写账；执行日志留输入哈希与结果 |
| 6 | 结果分流写状态 | `accounting_event.status` | 不确认 / 待补证 / 待裁定 / 待复核 / 直接生成待审核凭证（本系统 D3 决策：一律人工复核后入账） |
| 7 | 人工复核（本页）→ 生成待审核凭证 | `voucher` + `accounting_event_voucher`（N:M） | 禁重复生成（DUPLICATE_ACCOUNTING_ACTION）；汇总凭证靠 N:M 关联，不依赖凭证单一 source_id |

### 4.2 列表字段取数（字段级映射）

| 页面元素 | 来源 | 口径说明 |
|---|---|---|
| 事项编号 `AE-0630-001` | `accounting_event.id` 的显示号 | 规范 `AE-{MMDD}-{3位序号}`（见《术语表》§五编号前缀） |
| 来源事件徽章 业/资/票/手/期 | `accounting_event_source` → `business_event.event_type` 归类 | 业=业务事件（recognition_candidate）· 资=资金结算（settlement）· 票=票据推断（bill_pool 兜底）· 手=手工创建 · 期=期末计提（periodic） |
| 来源事件摘要 | `business_event.payload.summary`（如"履约确认 · HT2026-001 第2期"） | 由事件契约 payload 生成 |
| 业务对象 | `business_object_type` + `business_object_id`（合同/入库单/报销单/流水/发票/资产卡片/薪资批次） | 显示时映射为中文名+"编号" |
| 会计动作 | `action_code` → 中文映射（RECEIVE_AR→应收回款…） | 动作字典见《会计事项目录》§四 |
| 确认金额 | `recognized_amount`（DECIMAL(20,4)，接口传十进制字符串） | 未确认时为"—"（如待定性） |
| 金额分层 | `recognized_amount / settled_amount / invoiced_amount / tax_amount` | 四个独立字段，**不必相等**；分层差异是合法信息，不是错误 |
| 期间 | `accounting_period` | 确认归属期间；≠ 事件 occurred_at（跨期即由此暴露，见 O2/EX-2026-0603） |
| 状态 | `status` 枚举 | 7 态 → 前端徽章映射，见 §6.1 |
| 操作列按钮 | **前端由状态派生**（不改数据） | 按钮矩阵见 §5.1/§6.2；后端只校验动作合法性 |
| 勾选框可用性 | `status = 待复核` | 其他状态行不渲染复选框 |

### 4.3 KPI 口径（每个指标的定义与公式）

| 指标 | 公式（期间 = 账套当前会计期间） | 粒度 / 刷新 |
|---|---|---|
| 本期事件数 | `COUNT(DISTINCT event_id) FROM business_event WHERE occurred_at∈期间` | 账套级；页面加载拉取 |
| 应确认事项 | `COUNT(*) FROM accounting_event WHERE accounting_period=期间 AND status<>'NOT_RECOGNIZED'`（六要素天然去重） | 账套级 |
| **待复核** | `status IN ('READY','NEED_REVIEW')`（不含待裁定）；**实时**——复核一项立即 -1 | 账套级；操作后局部刷新 |
| **待补证** | `status='NEED_EVIDENCE'`；**实时** | 同上 |
| 异常 | `COUNT(*) FROM accounting_exception WHERE status<>'CLOSED'`（未关闭数）；点击 → 异常中心 | 账套级 |
| 自动生成率 | 系统自动生成凭证的事项数 ÷ 应生成事项数（应生成 = 应确认 − 待裁定 − 待补证 − 不确认） | 期间级；**与入账率分开统计** |
| 自动入账率 | 完成过账（已入账）事项数 ÷ 应生成事项数；**不得用生成率冒充**（硬规则） | 同上 |
| 异常结清率 | 已结清异常数 ÷ 期间异常总数 | 同上 |
| 业财差异额 | Σ｜业务口径 − 账面口径｜的四组合计（合同↔收入 / 收款↔应收 / 采购↔应付 / 银行↔总账），明细在业财对账页 | 期间级；本页只读展示 + 跳转 |

> 原型口径说明：128/96/5 与三个率值为**宏观示例值**（页面展示稳态）；待复核/待补证/差异额为与列表数据咬合的真实计算值。上线后全部改为接口返回值。

### 4.4 详情页区块取数

| 区块 | 来源 |
|---|---|
| 金额分层 | 事项四金额字段（同上） |
| 确认依据 | `accounting_rule`（code/version/condition_json，版本快照）+ `rule_execution_log.evaluation_json`（条件逐条结果与解释；历史凭证保留旧版本快照，O5） |
| 分录预览 | 未生成：规则 `entry_json` 模板渲染（标注"待生成（预览）"）；已生成/已入账：`voucher_entry` 只读（标注"分录来自凭证 记-XXXX（只读预览）"——**已入账后权威分录是凭证而非规则模板**） |
| 结账校验 | 生成前校验器输出：借贷平衡 / 期间未锁定 / 科目存在 / 六要素唯一 |
| 证据 | `accounting_event_evidence`（relation_type/matched_amount）→ 发票（发票管理）/ 流水（流水管理）/ 验收影像（业务模块）；多候选展示原因与置信度 |
| 时间线 | `business_event.occurred_at` + 状态迁移日志（`op_log`，P8 全覆盖） |
| 关系/图谱 | `accounting_event_source`（来源事件）/ `accounting_event_voucher`（N:M 凭证，深链）/ `settlement_allocation`（核销）/ `supersedes_event_id`（更正链） |

### 4.5 页面入口（数据从哪些路径进来）

| # | 入口 | 落点 |
|---|---|---|
| 1 | 左侧菜单「会计事项工作台」 | 工作台（全部页统一侧边栏） |
| 2 | 仪表盘「业财核算」卡 → 进入事项工作台 | 工作台 |
| 3 | 异常处理中心 → 行内"关联事项" | 详情（`?id=AE-XXXX`） |
| 4 | 业财对账 → 差异行"生成事项 / 前往裁定" | 详情 |
| 5 | 票据池"关联事项"列 / 待补证徽章 | 详情 |
| 6 | 记账管理 → 凭证"来源事项"列 | 详情 |

---

### 4.6 事项的关联机制（"怎么关联到之前的数据"）

关联在**事项创建时即建立**（六要素携带业务对象），不依赖事后人工挂接，也不依赖摘要文字：

| 关联 | 实现 | 例（AE-0630-001） |
|---|---|---|
| 锚定业务对象 | 六要素唯一键含 `业务对象类型 + ID`；同一对象下所有事项**自动成组**；`slice` 支持同一对象多次确认 | 锚 = 合同 HT2026-001 · 第 2 期 |
| 触发来源 | `accounting_event_source`（事项 ↔ 业务事件 N:M） | 履约/交付事件，源单 = 验收单 YS-0630-01 |
| 证据凭据 | `accounting_event_evidence`（事项 ↔ 发票 / 流水 / 验收影像 N:M） | 合同、验收单、预收流水 B20260520001（流水在本事项中是"证据"身份） |
| 前序事项的计量联动 | 收入确认规则按"同一业务对象下**合同负债科目余额**"**自动冲减**，非人工挑单 | 借 合同负债 30,000 —— 冲减 AE-0520-007 的余额；金额分层"已结算 30,000"由前序事项汇总而来 |
| 结算核销 | `settlement_allocation`（结算事件 ↔ 目标事项） | 回款核销应收（核销单 HX-0602-01） |
| 产物凭证 | `accounting_event_voucher`（事项 ↔ 凭证 N:M） | 记-0048 |

> 设计意图：把所有"这笔抵那笔"的关系**结构化落库**（而不是写在摘要里），使防重、自动冲减、审计沿链追溯都可机器校验。

## 五、按钮清单（逐按钮规格）

### 5.1 工作台

| 按钮 | 位置 | 可见条件 | 点击行为 | 权限点 | 接口 | 边界与异常 |
|---|---|---|---|---|---|---|
| **手工事项** | 页头工具栏 | 恒显 | 打开手工事项抽屉：摘要 / 业务对象（类型+编号）/ 会计动作 / 确认金额 / 期间 / 确认日期 / 证据；**附证据 → 生成"手"来源「待复核」事项；未附证据 → 转「待补证」（补齐后自动转待复核）**；新事项直接进队列与详情（详情按参数动态接入） | `ae:create_manual` | `POST /accounting/events`（source=manual） | **六要素防重拦截**（同对象+同动作+同期间重复提交 → 拒绝并提示已存在事项号）；编号按确认日期 `AE-{MMDD}-{序号}` 顺延；复核后凭证按所选动作模板就地预览 |
| **批量复核** | 页头工具栏 | 恒显 | 把勾选事项批量流转为已生成凭证（逐项建凭证） | `ae:batch_approve` | `POST /accounting/events/batch-approve {ids[]}` | 空选拦截提示；>20 项或跨规则/大额转逐张（P5）；部分失败逐项回报 |
| **全选** | 表头 | 列表非空 | 勾选/取消当前可勾行（仅待复核） | `ae:batch_approve` | — | 不含不可勾行 |
| **复核** | 行内（待复核） | `st=待复核` | 打开事项详情处理 | `ae:view` | — | — |
| **直接通过** | 行内（待复核） | `st=待复核` | **不打开详情**，原地复核通过 → 状态转"已生成凭证"，生成待审核凭证（toast 报凭证号），KPI 实时 -1 | `ae:approve`+`ae:generate_voucher` | `POST /events/{id}/generate-voucher` | 幂等：重复点击返回同一凭证（DUPLICATE_ACCOUNTING_ACTION）；制单人=审批人时拒绝（P1） |
| **补证** | 行内（待补证） | `st=待补证` | 打开详情补证区 | `ae:view` | — | — |
| **裁定** | 行内（待裁定） | `st=待裁定` | 打开详情裁定入口 | `ae:view` | — | — |
| **查看凭证** | 行内（已生成/已入账） | 有凭证关联 | 就地弹出**凭证预览抽屉**；抽屉内"在记账管理中打开"深链 `accounting.html?vch=记-XXXX` | `ae:view` | `GET /vouchers/{id}` | 凭证不在当前期间列表时深链页给出提示 |
| **详情** | 行内（已入账/不确认） | 终态行 | 打开详情（只读追溯） | `ae:view` | — | — |
| 异常 KPI 卡 | KPI 行一 | 恒显 | 跳异常中心 | `ae:view` | — | — |
| 对账明细 → | KPI 行二 | 恒显 | 跳业财对账 | `ae:view` | — | — |
| 抽屉关闭 / 遮罩 | 抽屉 | 抽屉打开 | 收起抽屉 | — | — | — |

### 5.2 事项详情 · 头部按钮（按状态可见）

| 状态 | 按钮 | 行为 | 权限点 | 接口 |
|---|---|---|---|---|
| 待复核 | **生成凭证** | 生成待审核凭证 → 状态转"已生成凭证"；分录区改为凭证只读预览 | `ae:generate_voucher` | `POST /events/{id}/generate-voucher`（禁重复） |
| 待补证 | **补充证据** | 上传/关联证据（缺项高亮）→ 补齐后自动转"待复核" | `ae:evidence` | `POST /events/{id}/resolve`（type=evidence） |
| 待裁定 | **人工裁定** | 打开裁定弹窗（四候选 + 说明必填）→ 按裁定规则出分录并转"待复核" | `ae:resolve` | `POST /events/{id}/resolve`（type=adjudicate） |
| 待复核/待补证/待裁定 | **驳回** | 退回来源方补充；留痕 | `ae:reject` | `POST /events/{id}/reject {reason}`（理由必填） |
| 已生成凭证 / 已入账 | **查看凭证** | 就地预览凭证分录（只读）；已入账附"更正走红字冲销"提示 | `ae:view` | `GET /vouchers/{id}` |
| 不确认 | （无按钮） | 终态文案："该事项已判定不确认（终态）" | — | — |

### 5.3 人工裁定弹窗

| 元素 | 规格 |
|---|---|
| 四候选 | 现销收入（借银行/贷收入+销项税）· 预收款项（借银行/贷合同负债）· 冲应收回款（借银行/贷应收）· 往来/借款（借银行/贷其他应付款） |
| 裁定说明 | **必填**（留痕要求）；未填点确认 → 拦截提示"裁定说明必填" |
| 按钮 | 取消 / 确认裁定（`ae:resolve`） |
| 落库 | `resolution_json`（候选+说明+操作人+时间）；条件区追加"裁定留痕"行；时间线留痕 |

### 5.4 凭证预览抽屉

| 元素 | 规格 |
|---|---|
| 凭证头 | 凭证号 / 日期 / 状态徽章（待审核/已审核/已记账/已报税）/ 来源事项 |
| 分录表 | 借/贷 · 科目 · 辅助核算 · 金额；合计行 |
| 底部 | "在记账管理中打开"→ `accounting.html?vch=记-XXXX`（记账管理高亮该行并展开抽屉）；"关闭" |

---

## 六、状态机与"状态 → 按钮"变更机制

### 6.1 七态定义（页面态 ↔ 后端枚举）

| 页面态 | 建议枚举 | 含义 | 进入条件 | 出口 |
|---|---|---|---|---|
| 待评估 | `RECEIVED/EVALUATING` | 事件已接入，规则评估中/待重评 | 事件消费后 | 评估完 → 四分支之一 |
| 待复核 | `READY/NEED_REVIEW` | 条件满足，等待人工复核（含 AI 生成） | 规则命中 + 条件全满足 | 生成凭证 / 驳回 |
| 待补证 | `NEED_EVIDENCE` | 缺履约/交付证据 | 条件缺证据类 | 补证 → 待复核 |
| 待裁定 | `NEED_REVIEW`（原因=AMBIGUOUS_MATCH/未匹配流水） | 款项无法自动定性 | 流水无业务单据 | 裁定 → 待复核 |
| 不确认 | `NOT_RECOGNIZED` | 判定无会计影响（**终态**，保留原因+规则版本） | 规则判不确认 | 不可逆（更正走调整事项） |
| 已生成凭证 | `VOUCHER_DRAFTED` | 已生成待审核凭证（覆盖凭证「待审核 / 已审核」阶段；凭证记账后转「已入账」） | 复核通过 | 凭证入账 → 已入账 |
| 已入账 | `POSTED` | 凭证已记账，事项完成 | 凭证记账回写 | 纠错只能冲销（O6），不可删改 |

> 「已调整」在凭证层以**红字冲销 + 调整事项**承载，不单列事项状态（与需求文档 §五的对应关系在状态字典 T1.x 统一）。
>
> **凭证层 ↔ 事项层 对照（回写规则）**：凭证「待审核 / 已审核」→ 事项「已生成凭证」；凭证「已记账」→ 事项「已入账」（记账时自动回写）；凭证「已报税」→ 事项仍「已入账」（报税状态只存在于凭证层，界面表现为期间锁定）。记账管理里"还没操作"的凭证（待审核）对应工作台正是「已生成凭证」。

### 6.2 状态 × 按钮矩阵（三处联动，同源派生）

**① 工作台行内操作**

| 状态 | 行内按钮 | 去向 |
|---|---|---|
| 待复核 | 复核（→详情）· **直接通过**（原地流转） | 详情 / 原地 |
| 待补证 | 补证 | 详情 |
| 待裁定 | 裁定 | 详情 |
| 已生成凭证 | 查看凭证 | 就地抽屉 |
| 已入账 | 详情 | 详情 |
| 不确认 | 详情 | 详情 |
| 待评估 | （无行内操作，等待评估） | — |

**② 详情页头部按钮**

| 状态 | 主按钮 | 驳回 | 分录区 |
|---|---|---|---|
| 待复核 | 生成凭证 | ✅ | 规则模板预览（"待生成（预览）"） |
| 待补证 | 补充证据 | ✅ | 规则模板预览；补证后转待复核 |
| 待裁定 | 人工裁定 | ✅ | "裁定前无分录" |
| 已生成凭证 | 查看凭证 | ❌ | 凭证分录只读 |
| 已入账 | 查看凭证 | ❌ | 凭证分录只读（更正走冲销） |
| 不确认 | 无（终态文案） | ❌ | "无会计影响" |

**③ 状态徽章配色**（工作台图例 / 表格 / 详情页三处同源）：待评估 灰 · 待补证 青 · 待复核 黄 · 已生成凭证 紫 · 已入账 绿 · 不确认 灰划线 · 待裁定 红。

### 6.3 状态迁移图

```mermaid
stateDiagram-v2
    [*] --> 待评估: 事件接入
    待评估 --> 待复核: 条件满足
    待评估 --> 待补证: 缺证据
    待评估 --> 待裁定: 款项待定性
    待评估 --> 不确认: 规则判不确认
    待补证 --> 待复核: 补充证据
    待裁定 --> 待复核: 人工裁定(四候选+理由)
    待复核 --> 已生成凭证: 生成凭证/直接通过/批量复核
    待复核 --> [*]: 驳回(回流来源方)
    已生成凭证 --> 已入账: 凭证记账(记账管理)
    已入账 --> 已入账: 更正=红字冲销(新凭证)
    不确认 --> 不确认: 终态留痕
```

### 6.4 硬约束（红线）

1. **制单人不可自审**：生成凭证者与凭证审核者不得同一人（P1）；
2. **AI 不裁定**：AI 只给建议与置信度（P2）；
3. **驳回必填理由**、裁定必填说明（留痕）；
4. **已入账不可删改**：纠错只能红字冲销（O6）；
5. **已结账期间锁定**：期间内事项不得生成凭证（迟到单据走跨期异常 + 授权调整，O2）；
6. **生成凭证幂等**：同一事项重复生成返回同一凭证（O1/O3）；
7. **待补证/待裁定不可跳过**：不补证不能生成凭证，不裁定不能出分录（D1：未匹配收款禁止默认认收入）。

---

## 七、业务流程

### 7.1 主流程（自动生成路径，以销售闭环为例）

```mermaid
flowchart LR
    A[业务动作<br/>履约确认/验收入库<br/>报销批准/收款到账] --> B[业务模块<br/>同事务写 outbox]
    B --> C[记账服务消费<br/>inbox 幂等]
    C --> D[事件分类<br/>候选会计动作]
    D --> E[六要素取或建事项<br/>防重]
    E --> F[规则引擎<br/>条件评估+证据关联]
    F --> G{结果}
    G -->|条件满足| H[待复核]
    G -->|缺证据| I[待补证]
    G -->|无法定性| J[待裁定]
    G -->|无会计影响| K[不确认]
    H --> L[财务复核<br/>本页操作]
    L --> M[生成待审核凭证<br/>记账管理]
    M --> N[审核→入账<br/>事项转已入账]
```

1. 业务动作发生在业务模块（不经财务手工发起）；
2. 记账服务消费事件 → 事项创建 → 规则评估；
3. 工作台出现"待复核/待补证/待裁定"条目（队列化）；
4. 复核岗处理（直接通过 / 进详情 / 批量）→ **生成待审核凭证**；
5. 记账管理审核 → 入账 → 事项状态回写"已入账"；
6. 账簿/报表/对账自动取数；KPI 自动更新。

### 7.2 分支一：待补证（补证 → 待复核）

触发：销项票推断收入但缺履约/交付证据（如 AE-0610-005 FP0061 47,000）。
处理：详情证据区缺项高亮 → 财务上传/关联验收单 → 条件行转 ✓ → 事项转"待复核" → 正常生成凭证。

### 7.3 分支二：待裁定（未匹配流水，红线场景）

触发：到账流水无业务单据（如 B20260605002 · 28,000 · 广东粤海贸易）。
处理：**系统不自动判定、不出分录**（D1 红线）→ 裁定弹窗四候选 → 选"现销收入" + 填说明 → 按候选规则出分录（借银行 28,000 / 贷收入 27,184 + 销项税 816）→ 转"待复核" → 生成凭证。理由、操作人、时间留痕。

### 7.4 分支三：驳回回流

复核发现证据/金额不对 → 驳回（理由必填）→ 事项回退来源方补充；若凭证已生成但未入账，旧凭证入回收站，票据回"未记账"重指定模板再生成（O3）；全程不产生重复事项。

### 7.5 期末衔接

结账检查读工作台口径：**未处理事项清单必须清零或逐项留痕**（待裁定/待补证不得静默挂账）→ 计提/调整/结转凭证 → 全部必要凭证审核入账 → 试算平衡与业财勾稽 → 结账锁期 → 税费管理申报完成 → 记账管理批量标记"已报税"（期间锁定，K 组）。

### 7.6 异常与跨期

| 异常 | 页面表现 | 处理分流 |
|---|---|---|
| 未匹配流水 | 待裁定事项 + 异常中心 EX-xxxx | 裁定闭环 |
| 跨期单据（迟到） | 事项期间 ≠ 事件期间（如 FP0064 落入 2026-05） | 跨期异常 + 授权调整，**禁静默改期**（O2） |
| 缺科目规则 | 待评估滞留 | 异常中心 → 规则中心补规则 → 同类自动命中（O9） |
| 重复事项 | 同对象同动作多候选 | 合并/作废其一（O10） |
| 金额不符 | 发票 vs 验收差异 | 按政策调整（O11） |

---

### 7.7 处理时点与节奏（什么时候做）

**总原则：录入由业务触发（不存在"什么时候录"的手工决策），处理由状态定人，底线是本期内清零、结账前清零。**

| 环节 | 触发时机 | 谁 | 时机约束 |
|---|---|---|---|
| 事项进入工作台 | **业务动作提交的瞬间**（事件驱动，实时；期末任务由结账引擎发起；手工事项由人工提交） | 系统自动 | — |
| 复核 / 生成凭证 | 状态=待复核后随时（队列制，非定时） | 财务复核岗 | 必须在凭证生成之前；建议日常日清/周清（资金与往来类尤甚） |
| 审核 | 凭证生成（待审核）后 | 复核/记账岗 | 必须在记账之前；**制单人不可自审** |
| 记账（入账） | 审核（已审核）后 | 记账岗 | **同一开放期间内**；日清或期末集中均可，拖到下期 = 跨期异常 |
| 期末清零 | 结账检查时 | 财务负责人 + 复核岗 | 待复核 / 待补证 / 待裁定必须清零或逐项留痕，否则结账阻断 |
| 报税锁定 | 申报完成回写 | 系统 | 结账后按账套+期间批量标记"已报税"，期间锁定 |

**两个概念不混**：**复核**管事项（该不该记、记什么、证据够不够），**审核**管凭证（科目金额对不对、能否入账）；顺序固定：复核 → 生成凭证 → 审核 → 记账。

**及时入账原则（三时点独立）**：记账跟着"业务发生"走、收入跟着"履约完成"走、资金跟着"到账"走——三者各归各期间，互不等待。以 HT2026-001 为例：5-20 收款归 2026-05、6-30 履约归 2026-06、7-31 尾款归 2026-07；"等尾款再一起记"会把 5 月账做错（银行对不上、报表失真）并触发跨期异常。

### 7.8 端到端案例：合同 HT2026-001（预收 → 履约 → 回款）

> 该案例已完整落在原型中（AE-0520-007 / AE-0630-001 两份完整版详情 + 凭证 记-0003 / 记-0048），可直接作为演示与测试基准。

| # | 业务节点 | 事项 | 凭证 | 结局 |
|---|---|---|---|---|
| 1 | 3-01 合同签署 100 万（informational） | **不产生事项** | — | 仅台账 |
| 2 | 5-20 首款 30,000 到账（收款单 SK-0520-01 / 流水 B20260520001） | AE-0520-007「预收」· ADVANCE_RECEIPT_V1 | 记-0003 借 银行存款 / 贷 合同负债 | 5-21 入账；期间 2026-05 |
| 3 | 6-30 第 2 期履约确认（验收单 YS-0630-01） | AE-0630-001「收入确认」· REVENUE_SERVICE_V2 | 记-0048 借 应收 70,000 + 借 合同负债 30,000 / 贷 收入 100,000 | 已生成凭证（记-0048 待审核 → 审核 → 记账 → 事项回写已入账） |
| 4 | 开票（销项票） | 不重复确认收入，仅税额处理 + 证据关联 | — | 关联 AE-0630-001 |
| 5 | 尾款 70,000 到账（待发生） | 应收回款事项 + 核销 | 借 银行存款 / 贷 应收账款 | 约定 2026-07-31 |

三条可直接用于验收的断言：① 预收阶段无收入凭证（防"收款即认收入"）；② 确认收入时自动冲减合同负债 30,000（按余额，非人工挑单）；③ AE-0520-007 与 AE-0630-001 同属一组（同一业务对象），状态各自独立推进。

## 八、跳转关系与深链

| 从 | 到 | 触发 | 参数 |
|---|---|---|---|
| 工作台行内 | 事项详情 | 复核/补证/裁定/详情 | `accounting-event-detail.html?id=AE-XXXX` |
| 工作台行内 | 凭证预览抽屉（本页） | 查看凭证 | — |
| 抽屉 | 记账管理 | 在记账管理中打开 | `accounting.html?vch=记-XXXX`（高亮行 + 展开抽屉） |
| 详情关系区 | 记账管理 | 事项-凭证 | `accounting.html?vch=记-XXXX` |
| 详情证据区 | 发票/流水/票据池 | 证据链接 | 各页带定位参数 |
| 工作台 KPI | 异常中心 / 业财对账 | 点击 | — |
| 反向 | 工作台/详情 | 异常中心关联事项 / 对账差异行 / 票据池关联事项 / 凭证来源事项列 | `?id=AE-XXXX` |

---

## 九、接口契约（本页所用）

> 对齐《自动记账技术方案》§12；`stats` 为本页新增约定。

| 方法 | 路径 | 用途 | 关键入参 | 权限点 | 主要错误码 |
|---|---|---|---|---|---|
| GET | `/api/v1/accounting/events` | 列表 + 三筛选 | `book_id, period, status, action, keyword, page, size=50, sort=状态优先级` | `ae:view` | `AUTH_FORBIDDEN` |
| GET | `/api/v1/accounting/events/stats` | KPI 九项（口径见 §4.3） | `book_id, period` | `ae:view` | — |
| GET | `/api/v1/accounting/events/{id}` | 详情（金额分层/条件/证据/时间线/关系） | `id` | `ae:view` | — |
| POST | `/api/v1/accounting/events` | 手工事项 | `business_object, action_code, amount, evidence[]` | `ae:create_manual` | `DUPLICATE_ACCOUNTING_ACTION` |
| POST | `/api/v1/accounting/events/{id}/evaluate` | 人工重评 | — | `ae:view`(触发) | `RULE_NOT_FOUND` |
| POST | `/api/v1/accounting/events/{id}/resolve` | 补证 / 裁定 | `type=evidence|adjudicate, payload, reason★` | `ae:evidence` / `ae:resolve` | `EVIDENCE_REQUIRED` `AMBIGUOUS_MATCH` |
| POST | `/api/v1/accounting/events/{id}/generate-voucher` | 生成待审核凭证（禁重复，幂等） | — | `ae:generate_voucher` | `DUPLICATE_ACCOUNTING_ACTION` `PERIOD_CLOSED` `UNBALANCED_VOUCHER` `SUBJECT_MAPPING_MISSING` |
| POST | `/api/v1/accounting/events/{id}/reject` | 驳回回流 | `reason★` | `ae:reject` | — |
| POST | `/api/v1/accounting/events/batch-approve` | 批量复核 | `ids[]（≤20，同规则约束）` | `ae:batch_approve` | 部分失败逐项回报 |
| GET | `/api/v1/accounting/vouchers/{id}` | 凭证预览（抽屉/深链） | `id` | `ae:view` | — |

---

## 十、非功能要求

| # | 要求 |
|---|---|
| 1 | **幂等**：事件消费、生成凭证、批量复核均幂等（O1/O4）；重复点击"直接通过"返回同一凭证 |
| 2 | **并发**：同一事项两处并发操作 → 乐观锁（version）拒绝后到者并提示"已被他人处理" |
| 3 | **留痕**：复核/裁定/补证/驳回/生成凭证全量写 `op_log`（P8）；不确认保留原因与规则版本 |
| 4 | **性能**：列表（50/页）首屏 ≤ 800ms；KPI 与列表并行拉取；操作后 KPI 局部刷新不整页重置 |
| 5 | **权限**：按钮可见性由权限点渲染；接口二次校验（前端隐藏≠后端放行） |
| 6 | **金额规范**：一律十进制字符串传输、`DECIMAL(20,4)` 落库，前端千分位展示 |
| 7 | **双模式**：`run_mode` 决定来源图例与对账组渲染，状态机两模式共用 |

---

## 十一、验收要点（映射《验收测试用例库》）

| 用例 | 覆盖本页什么 |
|---|---|
| A2/A3 ★ | 预收 30 万 / 履约确认（含预收冲抵）——主流程分录与状态流转 |
| B1/B3 ★ | 采购验收与暂估调差——"采购确认"动作与金额分层 |
| C1/C3 ★ | 报销确认一次 / 借款核销——"费用确认"不重复 |
| D1 ★ | 未匹配收款 28,000——待裁定红线（裁定前无分录 + 理由留痕） |
| D5 ★ | 内部账户转账——裁定候选"往来/借款"，全系统无损益 |
| D7 | 票-流-账三证互查——详情证据区与关系区双向可达 |
| D9/D11 | 到账净额拆手续费 / 流水重复导入拦截——金额分层与防重 |
| E1/E2 | 薪资批次确认/发放——"期末计提"来源（AE-0630-010） |
| N2/N3 ★ | 纯记账全流程直通 / 事项透明化——模式 B 适配 |
| N5/N9/N10 | 事项层透明化 / 升降级——本页在模式 B 的行为 |
| O1/O3 | 事件重放 100 次仅 1 链条 / 复核驳回重生成——幂等与回流 |
| O2 ★ | 已结账期间迟到单据——跨期异常（EX-2026-0603 ↔ AE-0611-011） |
| O6 ★ | 已入账纠错——删除被拒、红字冲销 |
| O7~O12 | 五类异常处理——待裁定入口与异常中心分工 |
| P1/P2/P5 | 制单人自审拒绝 / AI 不能直接入账 / 批量边界 |
| P8 | 操作日志全覆盖——本页全部动作 |
| K 组 | 结账前"未处理事项清零"检查 |

---

## 十二、原型口径与边界（已知简化）

1. **KPI 宏观值**："本期事件数 128 / 应确认事项 96 / 异常 5"与三个率值为稳态示例；"待复核 / 待补证 / 业财差异额"为与数据咬合的真实值。
2. **驳回**为 toast 示意（真实实现：理由必填）；**手工事项已实现完整表单**（证据为原型级示意附件，未接真实文件上传）。
3. **复核后新凭证号**（记-0048 之外顺延 记-0050…）只在事项页就地预览；记账管理基线为 记-0007~0048，深链未命中时给出提示。
4. **批量复核**未实现金额/规则上限校验（真实实现需按 P5 约束）。
5. **关联异常未阻断**：如 AE-0610-005 与 AE-0630-001 的疑似重复（EX-2026-0604）目前在异常中心呈现，未在本页阻断生成。
6. 列表无分页/排序控件（样例 12 条全量展示），真实实现按 §10 性能要求分页。

---

## 附录 A 行业对照与设计取舍（背景参考）

| 产品线 | 架构 | 中间层性质 |
|---|---|---|
| 金蝶账无忧 / 云会计（小微、代账） | 票据/单据 → 凭证模板 → 凭证（两层） | 无中间层 |
| 金蝶云·星空（大中型） | 业务单据 → 智能会计平台 / DAP → **业务凭证** → 总账凭证 | "业务凭证"本质已是凭证（一单一张、便于修改与联查） |
| **本设计** | 业务事件 → **会计事项** → 凭证 | 事项是**判断记录**：可无分录（待补证/待裁定/不确认）、六要素防重、承载确认条件与证据 |

- 凭证模板模式解决"**自动生成**"；事项模式解决"**自动判断**"（能不能记、记多少、证据够不够、重复没有）——这是本设计未照搬两层做法的原因。
- "以事项为核算最小单元"的提法与用友 BIP「事项会计」一致；银行核心、保险（IFRS 17）的"会计引擎 / 事件驱动会计"是该架构的成熟实践。
- 可借鉴之处：凭证模板可配置化（对应《会计规则目录》41 条）、按单/汇总两级生成（对应 N 事项→1 凭证的 N:M 关联）、业务单据双向联查（对应事项-凭证双向追溯）。

> 资料参考：金蝶云社区（vip.kingdee.com）、金蝶开发者中心（developer.kingdee.com）"智能会计平台 / 凭证模板 / 业务凭证"公开文档。

> 关联文档：《财务模块开发指南.md》（§2 角色矩阵 / §3 页面流转 / 30 分钟上手点击清单）·《会计事项目录.md》（事件契约）·《会计规则目录.md》（41 条规则）·《验收测试用例库.md》（154 条）。
