# 08 — 逐行完成线下支付批量订购

**What to build:** 文件校验通过的线下支付任务可以严格按 CSV 行号逐行订购套餐。每行按资产当前归属确定结算代理，调用统一单资产订购命令创建已支付订单并激活套餐；一行业务失败只记录该行中文原因并继续，成功订单都能追溯批次及整批凭证。

**Blocked by:**

- `.scratch/ur36-bulk-package-purchase/issues/05-single-asset-package-purchase-command.md` — 05 — 提供统一的单资产套餐订购命令
- `.scratch/ur36-bulk-package-purchase/issues/07-validate-csv-persist-items.md` — 07 — 完整校验 CSV 并固化逐行明细

**Status:** ready-for-agent

**架构通道:** 复杂写，Application → Order/Package Domain。

**完整业务边界:** 本票收口批量任务的 `offline` 逐行执行、结果记录和任务终态。明确不建设凭证金额核销、跨批唯一、自动财务对账、单行重试或钱包扣款。

- [ ] Worker 仅按 `row_no ASC` 串行领取待处理或过期处理中明细，不并发改变业务顺序，已有成功或失败终态不可被覆盖。
- [ ] 每行重新读取资产当前归属并解析结算代理，任务创建时不存在单一代理快照，也不接受前端提供的 `shop_id`。
- [ ] 有效行调用统一单资产套餐订购命令，按结算代理当前授权、价格和套餐规则创建已支付订单并激活套餐，不扣任何代理钱包。
- [ ] 整批凭证 Key 快照关联到每个成功订单和批次审计；凭证可以被其他批次使用，不建立内容或金额唯一性。
- [ ] 资产、归属、授权、下架、价格、组合及订单业务错误写稳定失败码和中文原因后继续下一行，底层错误不原样返回。
- [ ] 成功行的订单、套餐使用与激活、明细成功状态、逐行关联、Audit Event 和 Outbox 原子提交；事务失败不会留下可重复执行的部分事实。
- [ ] 所有业务行处理完后任务进入已完成；全部成功、部分成功或全部业务失败只通过计数表达，`processed_count = success_count + fail_count = total_count`。
- [ ] 测试覆盖多代理、凭证 1 个和 5 个、未授权、下架、全部失败、部分成功、重复 Worker 领取和单行事务回滚。

