# 功能规格：線下轉賬支付（payType=6）

**功能标识**：`027-offline-transfer-payment`

**创建日期**：2026-09-03

**状态**：设计已与需求方确认（对话定稿），进入 plan

**输入**：任务206「支付方式加上转账支付」。用户下单时可选「線下支付」，选中后展开商家的收款账户信息（帳戶名稱/銀行名稱/銀行帳戶）；用户线下银行转账后联系商家，商家线下核对后确认收款，订单进入配送流程。资金流：订单金额含运费全部线下转给商家，骑手正常接单不垫付任何费用，骑手到店后向商家收取运费再配送（运费交接纯线下，系统不处理）。支付方式编号使用 **6**。

## 用户场景与测试

### 用户故事 1 - 用户选择線下支付并完成下单（Priority: P1）

用户在收银台看到支付方式列表，其中「線下支付」选项**仅在该商家收款账户三项信息（帳戶名稱/銀行名稱/銀行帳戶）齐全时**出现；选中后展开提示语（转账后请联系客服确认）与商家收款账户卡片；用户提交订单，订单以转账支付方式创建，进入待商家接单，全程不触发任何线上支付。

**为什么这个优先级**：这是功能的入口与前提，没有它后续环节都无从谈起；单独成立即可验证展示与下单链路。

**独立测试**：商家 A 银行三项齐全、商家 B 缺银行账号；A 店收银台出现「線下支付」并显示三项账户信息，B 店不出现该选项；A 店提交转账单成功创建。

**验收场景**：

1. **假如** 商家银行三项齐全，**当** 用户打开收银台，**那么** 「線下支付」可选，选中后展开三项收款信息与转账提示。
2. **假如** 商家任一银行字段为空，**当** 用户打开收银台，**那么** 不显示「線下支付」选项（不出现空账户卡片）。
3. **假如** 用户以線下支付提交订单，**当** 订单创建，**那么** 订单支付方式=6、待商家接单、未支付，且不发起任何线上支付。
4. **假如** 同一商家旗下多家门店（连锁），**当** 任一门店收银台查询收款账户，**那么** 返回同一份账户信息（收款账户为商家级）。

---

### 用户故事 2 - 商家确认收款解锁配送（Priority: P1）

用户线下转账后联系商家；商家核对到账后，在商家端对该转账单点击「确认收款」，订单标记为已收款；**此后**该订单才对骑手可见、可接单。商家接单、出餐、骑手取餐送达走现有流程不变。

**为什么这个优先级**：确认收款是转账单唯一的资金闸门——未确认的单可能永远收不到钱（用户放弃/谎称已转），必须挡在骑手环节之外；同时骑手到店要向商家收运费，商家没确认收款前运费无从谈起。

**独立测试**：创建转账单后，骑手列表看不到该单、直接调接单被拒；商家确认收款后，骑手列表出现该单，接单成功，后续接单/出餐/取餐/送达全部正常。

**验收场景**：

1. **假如** 转账单未确认收款，**当** 骑手查询订单列表，**那么** 该单不出现；**当** 骑手以订单号强行接单，**那么** 系统拒绝并提示「商家确认收款后才能接单」。
2. **假如** 商家已确认收款，**当** 骑手接单，**那么** 接单成功，订单进入正常配送流。
3. **假如** 商家对已确认收款的转账单再次确认，**当** 调用确认收款，**那么** 系统拒绝并提示已收款。
4. **假如** 订单已取消，**当** 商家尝试确认收款，**那么** 系统拒绝。
5. **假如** 商家确认收款操作发生，**当** 查看订单操作日志，**那么** 记录「商家XX确认转账收款」。

---

### 用户故事 3 - 商家端正确识别转账单（Priority: P2）

商家 Web 端订单列表与订单详情中，转账单的支付方式显示「线下转账」标签（简中/繁中/英文/越南语四语言），商家能一眼区分转账单、到付单与线上支付单。

**为什么这个优先级**：商家需凭支付方式决定核账动作（转账单要查银行流水再确认收款），标签不准则整个线下核对流程都会混乱。

**独立测试**：分别创建到付单、线上单、转账单，商家订单列表三者的支付方式标签各不相同且正确。

**验收场景**：

1. **假如** 订单支付方式=6，**当** 商家在 Web 订单列表或详情查看，**那么** 显示「线下转账」（随界面语言切换为对应译文）。
2. **假如** 界面语言依次切换简中/繁中/英文/越南文，**当** 查看同一转账单，**那么** 标签四种语言均正确显示，无缺失文案。

---

### 用户故事 4 - 资金与运费规则（Priority: P2）

转账单的订单金额（含运费）全部由用户线下转给商家；骑手接单、配送不垫付任何费用；骑手到店取餐时向商家线下收取运费。系统不对运费交接做任何记录或结算处理。

**为什么这个优先级**：这是转账模式与到付模式的本质差异（到付骑手向顾客收全款），必须明确写成规则避免实现时套错模式。

**独立测试**：转账单全流程走完后，系统中不产生任何骑手代收、运费结算相关记录，订单金额与运费数值与用户下单时一致。

**验收场景**：

1. **假如** 转账单完成配送，**当** 查看订单，**那么** 金额与运费保持下单原值，系统内无骑手收款/运费代扣数据。

### 边界场景

- 商家银行信息不全（含审核通过后才补全/被清空）：收银台选项随查询结果实时显隐，已下单的转账单不受影响，仍可确认收款。
- 未确认收款期间用户取消订单：走现有取消流程，无资金争议（用户未付款成功即取消，商家未确认）。
- 未确认收款期间商家取消订单：走现有取消流程（待接单/已接单可取消）。
- 转账单长期无人确认：不做超时自动取消（商家自行管理），商家可手动取消。
- 自取/堂食订单选择線下支付：允许；商家确认收款同样可用，且订单完成时系统按现状自动置为已支付。
- 骑手在商家确认收款前后刷新列表：列表口径与接单口径一致，不出现「看得见接不了」的单。
- 已有线上支付方式（信用卡/LINE Pay/Apple Pay/到付/现金）不受任何影响：现金确认收款（payType=4）逻辑保持原样。

## 需求

### 功能需求

- **FR-001**: 系统 MUST 提供按门店查询商家收款账户的能力（帳戶名稱、銀行名稱、銀行帳戶三项），账户信息为商家级（连锁门店共用同一份）；任一项缺失时 MUST 返回空，客户端据此隐藏「線下支付」选项。
- **FR-002**: 用户以線下支付下单时，系统 MUST 以支付方式值 6 创建订单，订单进入待商家接单、未支付状态，MUST NOT 发起或等待任何线上支付。
- **FR-003**: 系统 MUST 提供商家确认转账收款能力：将转账单标记为已收款并记录操作日志；对非转账单、已收款单、已取消单 MUST 拒绝并给出国际化提示；该能力 MUST NOT 影响现金单（支付方式=4）的现有确认收款逻辑。
- **FR-004**: 商家确认收款前，骑手 MUST NOT 能接转账单：接单请求 MUST 被拒绝并提示「商家确认收款后才能接单」（国际化）。
- **FR-005**: 未确认收款的转账单 MUST NOT 出现在骑手订单列表；如存在向骑手推送新单的链路，同样 MUST 排除。
- **FR-006**: 确认收款后的转账单 MUST 回归现有状态机：商家接单/出餐仍要求骑手已接单（现状约束不变），取餐/送达流程不变。
- **FR-007**: 商家 Web 端订单列表与详情 MUST 正确显示转账支付标签，文案覆盖简中/繁中/英文/越南语四种界面语言。
- **FR-008**: 本功能 MUST NOT 引入数据库结构变更（复用订单现有支付方式与支付状态字段）。
- **FR-009**: 系统 MUST NOT 为转账单生成骑手运费代收、代扣或结算数据（运费交接纯线下）。
- **FR-010**: 客户 App 端与骑手 App 端界面不在本期实现范围；本期交付可用接口与交互说明，App 后续直接复用。

### 关键实体

- **订单支付方式（值域）**：1=外送到付、2=信用卡、3=LINE Pay、4=现金（到店/线下当面）、5=Apple Pay、**6=線下轉賬（本功能新增）**。
- **订单支付状态**：0=未支付、1=已支付；转账单在商家确认收款时由 0 置 1。
- **商家收款账户**：帳戶名稱/銀行名稱/銀行帳戶三项，来自商家审核资料，商家主账号级，连锁门店共享。
- **订单状态机**：state（商家轴：0待接单→1已接单→2已出餐→…）与 deliveryStatus（骑手轴：1已接单→2已取餐→3已送达）；外送单商家接单/出餐要求骑手已接单（现状）。

## 成功标准

### 可度量结果

- **SC-001**: 转账单从下单到商家确认收款，用户端除线下转账本身外零线上支付操作，商家确认后订单 100% 可被骑手正常接单并走完配送流。
- **SC-002**: 未确认收款的转账单在骑手侧可见性与可接单性均为零（列表不可见 + 强行接单被拒，抽查 100% 成立）。
- **SC-003**: 商家银行信息不全的门店，收银台「線下支付」选项出现率为 0，不出现空账户展示。
- **SC-004**: 转账单、现金单、到付单在商家端的支付方式标签互不混淆，四语言显示全部正确。
- **SC-005**: 零数据库结构变更；线上支付方式（信用卡/LINE Pay/Apple Pay）与现金确认收款行为与上线前完全一致。

## 假设

- 商家收款账户数据源为商家审核资料中的银行三字段（2026-09-03 已加），App 端展示文案与交互按参考原型（选项+副标题「轉賬後請聯繫客服確認」+展开卡片+红色提示语）实现，由 App 团队负责。
- 转账凭证核对完全线下（即时通讯联系），系统不做凭证上传、自动对账。
- 转账凭证无超时自动取消机制；长期未确认单由商家手动取消。
- 骑手运费由骑手与商家线下交接，系统不记录、不结算。
- 支付方式值 6 为全新值，无历史数据冲突（历史值域 1-5）。
- 商家确认收款入口同时面向商家 App 与商家 Web 预留（本期实现接口，Web 端按钮可后续按需补）。
