## ADDED Requirements ### Requirement: 核销申请付款凭证识别 创建核销申请弹窗 SHALL 将付款凭证字段置于外部交易流水号字段上方,并 SHALL 支持上传付款凭证后自动识别交易流水号预填,同时保留手动「识别凭证」按钮;识别结果 MUST 只作预填且保持可编辑,识别失败 MUST NOT 阻断提交或清空已填内容。 #### Scenario: 上传凭证后自动识别 - **GIVEN** 用户在创建核销申请弹窗上传付款凭证 - **WHEN** 凭证上传成功 - **THEN** 前端 MUST 自动调用付款凭证识别接口 - **AND** 识别成功时 MUST 将返回的 `external_transaction_no` 预填入交易流水号输入框 #### Scenario: 手动识别 - **GIVEN** 付款凭证已上传 - **WHEN** 用户点击「识别凭证」 - **THEN** 前端 MUST 调用识别接口并预填交易流水号 #### Scenario: 识别失败不阻断 - **GIVEN** 识别接口返回失败或超时 - **WHEN** 自动或手动识别结束 - **THEN** 前端 MUST 只展示提示 - **AND** MUST NOT 清空已填写的交易流水号 - **AND** MUST NOT 阻止用户提交 #### Scenario: 字段顺序 - **GIVEN** 用户打开创建核销申请弹窗 - **WHEN** 表单渲染 - **THEN** 付款凭证字段 MUST 位于外部交易流水号字段之上 ### Requirement: 核销申请凭证识别接口契约 核销申请付款凭证识别 SHALL 复用 `POST /api/admin/agent-recharges/payment-voucher-ocr`,请求体 `{ payment_voucher_key }`,响应取 `external_transaction_no`;请求超时 MUST NOT 低于 30 秒,请求期间 MUST 展示 loading 并防止重复触发。 #### Scenario: 识别请求契约 - **GIVEN** 已上传至少 1 个付款凭证 - **WHEN** 前端发起识别 - **THEN** 请求体 MUST 为 `{ payment_voucher_key }`,取首个已上传凭证对象键 - **AND** 响应 MUST 只用于预填 `external_transaction_no` - **AND** 请求超时 MUST NOT 低于 30 秒