# S08 · 维修报价与住户确认

状态：**业务评审草案 v0.3 / draft**。更新日期：2026-10-14。
依据：本轮用户明确简化报价、改价与完成逻辑；原 PRD 5.3/5.6、C-02/C-17/A4/R04 中相冲突的旧流程待同步。
依赖：S07 的任务状态、当前维修师傅与提交报修的住户账号。

## 问题与目标

维修师傅在“处理中”填一个预计金额，点击确认发送给报修住户。住户同意就继续维修；不同意或未回复就保持处理中、进度不继续。发现费用不够时，师傅改金额再发；住户同意后才用新金额覆盖原金额，历史改价记录保留。维修完成后由住户点击“完成”结束。

## 使用者与需求

- 当前被分配的维修师傅：任务只要仍处于处理中，就可填写或修改预计金额并发送。
- 报修住户：对当前收到的金额选择同意/不同意；处理完成后点击完成。
- 物业：查看状态、最终已同意金额及金额变更记录，不代住户点同意。

## 一期范围

1. 处理中提供金额输入与“确认并发送”操作，例如“本次维修大约 200 元”。
2. 报修住户对收到的金额选择同意或不同意。
3. 师傅可在处理中改为新的金额，再发送确认；同意后替换已同意金额。
4. 保留每次发送、住户答复，以及已同意金额的变更记录。
5. 维修处理完成后，住户点完成，任务进入已结束（对应 S07 已关闭）。

无需收费的原正常维修路径仍可跳过报价；本 spec 不把所有维修都变成收费，也不增加线上支付。

## 业务规则与确认状态

- **本轮用户确认**：报价入口按“当前任务为处理中 + 当前被分配师傅”判定。第一次进入或后来再次打开都可操作；打开页面本身不自动发送报价或重置确认。
- **本轮用户确认**：师傅填写金额并点击确认，才发送给这条报修的住户账号。师傅的“确认并发送”与住户的“同意”是不同动作。
- **本轮用户确认**：住户不同意或尚未回复，任务主状态保持处理中，收费进度卡住；不能继续该待确认收费流程，不能按正常完成路径提前结束。
- **本轮用户确认**：住户同意后可继续维修，主状态仍是处理中，不因同意报价就认为维修完成。
- **本轮用户确认**：200 元已同意后，师傅改填 300 元并发送，重新等待住户答复。住户同意 300 后，当前已同意金额才由 200 改为 300；同时记录 200 → 300、修改人/时间及住户答复。不同意 300 时，不把 300 写成已同意，任务仍卡在处理中。
- **简单显示**：只向住户显示本次待确认金额、同意/不同意和金额变更记录，不要求理解 V1/V2、选择费用确认人或另外提交作业授权。
- **完整记录**：原已同意金额与当前待确认金额分开处理。新金额还没同意时保留旧金额及其历史；旧同意不代表新金额同意，也不能用旧同意绕过当前等待。
- **本轮用户确认**：维修处理完成后由住户点“完成”结束。金额同意只放行收费处理，不替代完成操作；评价不作为结束前置。
- **沿用边界**：不做线上收款、费用承担人选择或独立线上作业许可流程；实际付款/特殊作业许可由物业线下业务处理，不建成一期小程序审批链。住户同意报价不自动宣称另一个人承担费用。

## 操作前提与业务对象

- 当前任务为处理中，操作者是当前获分配的维修师傅；其他师傅没有该任务改价权。
- 报价发给提交该报修的住户账号，不另外配置“费用确认人”。
- 至少保存：当前已同意金额、当前待确认金额及答复、发送者/时间、住户答复人/时间和变更记录。实现可以用内部记录标识区分请求，用户不操作报价版本。

## 用户主流程

| 步骤 | 谁 | 操作 | 结果 |
|---|---|---|---|
| S08-M01 | 维修师傅 | 打开处于处理中的本人任务 | 无论第一次还是再次打开，都能使用金额输入与发送操作 |
| S08-M02 | 维修师傅 | 填“大约 200 元”，点击确认并发送 | 200 元进入待住户确认；仅填金额、未发送时不生成新的确认请求 |
| S08-M03 | 报修住户 | 查看当前待确认金额，点同意或不同意 | 同意可继续；不同意/未答复保持处理中并卡住收费进度 |
| S08-M04 | 维修师傅 | 住户同意 200 后继续处理 | 当前已同意金额为 200，维修仍处处理中 |
| S08-M05 | 维修师傅 | 发现不够，改填 300 并确认发送 | 300 再次待确认，进度等待；此时不能直接覆盖原已同意 200 |
| S08-M06 | 报修住户 | 同意或不同意 300 | 同意则覆盖为 300，记录 200 → 300，继续处理；不同意仍卡在处理中 |
| S08-M07 | 报修住户 | 维修处理完成后点击完成 | 进入已结束/已关闭，保留最终金额、确认及变更记录 |

## 异常与分支处理

| 编号 | 情况 | 处理结果 | 后续 |
|---|---|---|---|
| S08-E01 | 未回复或不同意当前金额 | 保持处理中，不自动解决/取消，不继续当前待确认收费流程 | 师傅可沟通、改价再发，或住户对当前金额答复 |
| S08-E02 | 200 已同意，300 还没同意或被拒绝 | 原 200 记录保留，300 不写成已同意；不能拿旧同意继续新报价流程 | 再次沟通/改价或等待住户同意 |
| S08-E03 | 住户打开旧 200 页面，但师傅已发 300 | 显示实际最新待确认金额；旧页面同意不能作为 300 同意 | 对当前 300 作答，无需学习版本编号 |
| S08-E04 | 任务已不在处理中，或操作者不是当前师傅 | 不允许本报价操作，不误生成新金额确认 | 查看当前状态，由当前有权师傅在处理中操作 |
| S08-E05 | 重复打开页面或重复点击同次发送/同意 | 页面打开不发送；同次重复点击不生成重复金额记录或重复完成 | 返回实际当前结果 |
| S08-E06 | 新金额尚未同意，却尝试进入正常完成流程 | 收费流程仍保持处理中，不能跳过金额等待 | 先取得当前金额同意；取消/特殊结束规则仍归 S07，不由此自动触发 |
| S08-E07 | 空金额或无效金额输入 | 指出输入问题，不发送给住户 | 师傅修正后再点确认并发送 |

## 待确认与实现边界

本轮已确定当前师傅、处理中准入、报修住户答复、不同意阻断、改价再确认、同意覆盖并留痕、住户完成结束。原多角色费用确认/承担字段、独立线上作业授权、报价版本 UI 和分项目报价方案不再是一期前置。

同一问题多人报修按 S09：师傅现场问清一个报修人，保留其原任务，其他任务后台重复关闭；本 spec 只向保留任务的报修人发金额/改价，其他人不确认，也不复制其他任务的旧同意。账号注销/关系结束后的既有事项权限按 S06/S15 统一处理，不自动替换成另一个确认账号。

## 验收标准与完成条件

| 编号 | 给定 | 当 | 则 |
|---|---|---|---|
| S08-AC01 | 当前师傅的任务处于处理中 | 第一次进入、退出后再次进入或刷新 | 金额填写/发送入口按当前状态可用；不因页面打开自动发送或重置答复 |
| S08-AC02 | 师傅填 200 但未点发送 | 住户查看任务 | 不出现新的待确认报价；师傅点击发送后才出现“预计 200 元”及同意/不同意 |
| S08-AC03 | 当前已发送 200 | 住户不同意或没有答复 | 主状态仍为处理中，当前收费进度不能继续，不自动结束 |
| S08-AC04 | 当前待确认 200 | 住户同意 | 已同意金额为 200，可继续处理；不会直接关闭任务 |
| S08-AC05 | 200 已同意，师傅改填并发送 300 | 住户未答复或拒绝 300 | 300 待确认/被拒绝，旧 200 历史保留；仍处理中，不能直接覆盖或绕过等待 |
| S08-AC06 | 当前待确认 300，原已同意金额为 200 | 住户同意 300 | 当前金额改为 300，记录 200 → 300 与操作/答复信息，继续维修 |
| S08-AC07 | 已发 300，但住户仍在旧 200 页面 | 尝试确认旧金额 | 不能使 300 变成已同意；提示实际当前金额并让住户答复 |
| S08-AC08 | 最新收费金额已同意，维修已处理完成 | 报修住户点击完成 | 任务已结束/已关闭，最终已同意金额及改价历史可查，不要求评价或额外作业授权 |
| S08-AC09 | 其他师傅或任务不在处理中 | 尝试改金额并发送 | 操作不执行，金额与确认结果不改变 |
| S08-AC10 | 同次发送/答复已经成功 | 重复点击或再次打开 | 不生成重复报价、金额变更或关闭记录；展示实际当前结果 |

### 本 spec 完成的判断

- “处理中填金额 → 师傅发送 → 住户同意/不同意 → 同意继续/不同意卡住”可贯通。
- 200 → 300 的再次确认、同意后覆盖及历史留痕可核对；旧同意不会放行新金额。
- 处理完成后住户点完成结束；界面无独立确认人配置、报价版本编号操作或作业授权审批。
- 上述十条验收有实际结果；同一问题现场留单后复用单人闭环，历史权限仍按跨 spec 规则。

## 不在本 spec 内

- 费用确认人、费用承担人、作业许可三套线上角色与审批。
- 报价版本 V1/V2 操作界面、强制分项目/范围表单。
- 提交报修就同意付费；拒绝报价就算解决；同意报价就算维修完成。
- 自动线上收款、退款、分账、物业费抵扣。

## 后续开发切片建议

1. 师傅发 200，住户拒绝保持处理中，再同意后继续。
2. 再改 300、用户确认后覆盖并保留 200 → 300；处理完成点完成结束。
3. 覆盖再次打开、旧页面、重复点击和其他师傅越权。

## 技术设计边界

区分“已同意金额”和“待确认金额”，保留发送及答复记录即可。内部请求标识用于防止把旧同意记给新金额，不要求用户管理版本。是否首次进入页面不作为报价授权依据。

目录与覆盖：[00-拆分总览.md](../specs/00-拆分总览.md)、[16-决策与覆盖矩阵.md](../specs/16-决策与覆盖矩阵.md)、[17-规格完整性检查.md](../specs/17-规格完整性检查.md)。
