# 申请单关联归档状态概念文档

## 功能一句话

申请单审批完成后先进入关联单据状态，只有关联的报销单完成付款归档后，申请单才同步归档。

## 背景与问题

当前费用申请单审批完成后，部分列表和进度展示会把申请单视为归档；但业务上申请单只是完成了事前审批，还需要等待后续报销单关联、报销审批、付款完成后，申请单生命周期才真正闭环。

这会导致用户看到报销单仍在处理、申请单却已归档，或者报销单已完成但申请单还停留在进行中的割裂状态。

## 目标

1. 申请单审批完成不直接进入归档中心。
2. 申请单进度在归档前增加“关联单据状态”节点。
3. 已有关联报销单但未付款完成时，该节点显示“关联中”。
4. 没有关联报销单时，该节点显示“未关联”。
5. 关联报销单付款完成后，申请单同步进入“申请归档”。

## 非目标

1. 不新增数据库表。
2. 不改变报销单本身的审批、付款权限。
3. 不改变申请单审批通过自动生成报销草稿的现有能力。

## 用户与场景

涉及角色：

- 申请人：查看申请单是否已经关联后续报销单。
- 审批人：审批申请单后不再误以为该申请已经归档。
- 财务人员：付款完成报销单时，同步闭环关联申请单。

关键场景：

1. 申请单审批通过，但未生成或未关联报销单：显示“关联单据状态 / 未关联”。
2. 申请单审批通过，并已生成报销草稿或报销单仍在流程中：显示“关联单据状态 / 关联中”。
3. 关联报销单已付款：报销单进入已付款，申请单进入“申请归档”。

## 方案设计

后端：

- 申请单 `approved + 审批完成` 不再被归档查询命中。
- 申请单只有 `approved + 申请归档` 才属于归档。
- 报销单付款完成时，从 `application_handoff` 或 `application_link` 风险事件中读取关联申请单。
- 找到关联申请单后，追加同步归档事件，并将申请单阶段置为“申请归档”。

前端：

- 申请单进度增加“关联单据状态”和“已归档”节点。
- 审批完成但未归档的申请单，当前节点停留在“关联单据状态”。
- 根据申请单自身的 `generated_draft_claim_no` 或报销单侧关联事件显示“关联中 / 未关联”。
- 只有“申请归档”阶段才展示归档完成。

## 算法与公式

当前功能不涉及显式数学公式。

关联状态判断：

```text
has_linked_reimbursement = exists(application.generated_draft_claim_no)
  or exists(reimbursement.risk_flags.application_claim_id/no == application.id/no)

application_archived = application.status in {approved, completed}
  and application.approval_stage == "申请归档"
```

## 测试方案

1. 后端状态测试：审批完成申请单不归档，申请归档才归档。
2. 后端付款测试：关联报销单付款后，申请单同步进入“申请归档”。
3. 前端进度测试：审批完成申请单显示“关联单据状态”和“已归档”。
4. 前端归档判断测试：`审批完成` 申请单不算归档，`申请归档` 才算归档。

## 验收标准

1. 单据中心普通视图仍能看到审批完成但未归档的申请单。
2. 归档中心不会提前出现仅审批完成的申请单。
3. 申请单进度在审批完成后能看到“关联单据状态”。
4. 报销单付款完成后，关联申请单同步显示为归档。

## 风险与开放问题

- 旧数据中可能存在已经把申请单审批完成当作归档的数据，本次按新业务规则修正展示与查询口径。
- 如果历史申请单缺少关联报销事件，只能展示“未关联”，不做自动猜测。
