# 95598-repair-city-dispatch 操作分析

## 1. 场景概述

`95598-repair-city-dispatch` 对应“95598抢修-市指”场景，目标是监测抢修工单队列，并在必要时触发提醒、日志写入与自动派单等后续动作。根据 `D:\data\ideaSpace\rust\sgClaw\claw\claw\skills\skill_staging\scenes\95598-repair-city-dispatch\scene.json`、`D:\data\ideaSpace\rust\sgClaw\claw\claw\skills\skill_staging\skills\95598-repair-city-dispatch\SKILL.md`、`D:\data\ideaSpace\rust\sgClaw\claw\claw\skills\skill_staging\skills\95598-repair-city-dispatch\scripts\collect_repair_orders.js` 以及两份规则资产，当前最严谨的结论是：本场景的 packaged JS collector 已经实现输入驱动的 `monitor-snapshot` 归一化 / 比较逻辑，会按状态分桶 repair orders、解析 monitor/dispose logs、推导 `pending_ids` / `new_pending_ids`、给出 `success/partial/empty/blocked` 状态，并附带 desk 规则来源、配置基础页与已知问题元数据；但更强的业务监测、提醒与自动派单 workflow 证据仍主要存在于 desk 规则资产中，证据等级分别为 `code-confirmed`。

必须显式区分三层证据：

1. packaged runtime-snapshot-collector：`collect_repair_orders.js` 已直接实现 repair-order 分类、历史比较、状态判定与标准化快照输出，并显式携带 `workflow_rule_sources`、`config_base_page`、`config_base_role`、`packaged_collector_role` 与 `known_issues`，证据等级：`code-confirmed`。
2. 业务监测逻辑：`D:\desk\智能体资料\大四区报告监测项\95598抢修-市指_业务检测配置.txt` 直接展示了队列采集、状态分类、监测日志比较、音频提醒与监测日志写入逻辑，证据等级：`code-confirmed`。
3. 自动派单 / 提醒逻辑：`D:\desk\智能体资料\大四区报告监测项\95598抢修-市指_自动处理配置.txt` 直接展示了去重、班组匹配、自动派单请求、音频提醒、短信发送、外呼触发与处置日志写入逻辑，证据等级：`code-confirmed`。

但这些 `code-confirmed` 只表示“代码或规则资产中存在这些实现分支或动作定义”，不等于“运行时已验证成功”。本文不对运行时成功做任何拔高表述。

## 2. 证据来源

本分析统一只使用四个证据等级标签：`code-confirmed`、`contract-defined`、`implementation intent exists but not rigorous / buggy`、`no direct evidence / candidate only`。

1. `D:\data\ideaSpace\rust\sgClaw\claw\claw\skills\skill_staging\skills\95598-repair-city-dispatch\scripts\collect_repair_orders.js`
   - 直接定义 `STATUS_GROUPS`、`LOCAL_SERVICE_ENDPOINTS`、`WORKFLOW_RULE_SOURCES`、`CONFIG_BASE_PAGE`、`KNOWN_ISSUES`，并实现 repair-order 分类、monitor/dispose log 解析比较、`new_pending_ids` 推导、`success/partial/empty/blocked` 状态判定，以及带 `evidence` / `known_issues` 的 `monitor-snapshot` 输出，证据等级：`code-confirmed`。
2. `D:\desk\智能体资料\大四区报告监测项\95598抢修-市指_业务检测配置.txt`
   - 直接实现工单队列采集、按状态分桶、待处理列表比较、音频提醒、监测日志写入，且暴露待处理分类 bug，证据等级：`code-confirmed`。
3. `D:\desk\智能体资料\大四区报告监测项\95598抢修-市指_自动处理配置.txt`
   - 直接实现处置日志去重、班组范围匹配、自动派单请求、自动派单成功/失败/异常/未匹配分支、音频日志、短信日志、外呼触发与 `setDisposeLog` 写入，证据等级：`code-confirmed`。
4. `D:\data\ideaSpace\rust\sgClaw\claw\claw\skills\skill_staging\skills\95598-repair-city-dispatch\SKILL.md`
   - 定义“优先使用 packaged collector、把监测快照与下游动作分离、允许 partial”的运行契约，证据等级：`contract-defined`。
5. `D:\data\ideaSpace\rust\sgClaw\claw\claw\skills\skill_staging\skills\95598-repair-city-dispatch\references\collection-flow.md`
   - 定义以页面配置为入口、结合规则资产理解语义、采集状态 `00/01/06/08`、对比 monitor/dispose logs 的一阶流程，证据等级：`contract-defined`。
6. `D:\data\ideaSpace\rust\sgClaw\claw\claw\skills\skill_staging\skills\95598-repair-city-dispatch\references\data-quality.md`
   - 定义状态分类、partial 规则、empty/failure 区分和下游副作用边界，证据等级：`contract-defined`。
7. `D:\data\ideaSpace\rust\sgClaw\claw\claw\skills\skill_staging\scenes\95598-repair-city-dispatch\scene.json`
   - 声明场景分类、输入 `time`、依赖和动作类型，证据等级：`code-confirmed`。
8. `D:\data\ideaSpace\rust\sgClaw\claw\claw\skills\skill_staging\scenes\95598-repair-city-dispatch\scene.draft.json`
   - 展示早期推断中对 `trigger-alert`、`configServices` 是否拆分的犹豫，属于候选整理结果，证据等级：`no direct evidence / candidate only`。

## 3. 实际入口与运行边界

实际入口在 `scene.json` 中已固定：场景页面入口为 `index.html`，技能工具名为 `95598-repair-city-dispatch.collect_repair_orders`，输出类型为 `monitor-snapshot`，输入为 `time`，这些都属于 `code-confirmed`。

其中 `assets/scene-snapshot/index.html` 只应被视为配置基础页（例如班组、联系人、范围维护），不应被当作规则 workflow 的主执行证据。

运行边界方面，需要做两个强制区分：

- packaged JS runtime collector 的实际边界：它已经能基于输入 `repair_orders`、`monitor_logs`、`dispose_logs` 做状态分类、历史比较、`new_pending_ids` 推导与 `success/partial/empty/blocked` 判定，并返回标准 `monitor-snapshot`；但它仍是输入驱动归一化 collector，不直接发起浏览器请求，也不直接承载完整业务 workflow，证据等级：`code-confirmed`。
- rule-asset 行为边界：业务检测规则和自动处理规则分别展示了浏览器请求、日志比较、提醒副作用与自动派单副作用，证据等级：`code-confirmed`。

也就是说，本场景不能被单句描述成“统一 packaged collector 已完整实现实时队列监测与自动派单”。更严谨的说法是：packaged collector 已实现可测试的输入驱动快照归一化 / 比较逻辑；而较强的实时监测与自动处理链路证据仍来自 desk 规则资产，证据等级：`code-confirmed`。

同时，`SKILL.md` 与 reference 明确要求把“快照采集成功”与“音频、短信、外呼、自动派单等下游效果”分开表达；这属于运行契约约束，证据等级：`contract-defined`。

## 4. 代码已证实的实际操作流程

### 4.1 packaged runtime-snapshot-collector 已证实流程

`collect_repair_orders.js` 中现在能严格确认：

1. 调用 `collectRepairOrders(input)`，读取 `input.repair_orders`、`input.monitor_logs || input.monitor_log`、`input.dispose_logs || input.dispose_log`、`input.local_write_failures`、`input.blocked_reason` 等输入。
2. 通过 `classifyRepairOrders(...)` 按 `STATUS_GROUPS.pending = ["00", "01"]`、`STATUS_GROUPS.audit = ["06"]`、`STATUS_GROUPS.processed = ["08"]` 对 repair orders 分桶，并记录未知状态。
3. 从 pending orders 提取 `pending_ids`，再解析 monitor/dispose logs，识别 malformed payload，并据此推导 `new_pending_ids`。
4. 按 `blocked > partial > empty > success` 的优先级计算 `status`，并把未知状态、日志缺失、日志解析失败、本地写失败等写入 `partial_reasons`。
5. 返回 `type: "monitor-snapshot"`、`scene: "95598-repair-city-dispatch"`、`pending`、`audit`、`processed`、`pending_ids`、`new_pending_ids`、`status`、`partial_reasons`。
6. 在返回对象中附带 `evidence.workflow_rule_sources`、`evidence.config_base_page`、`evidence.config_base_role`、`evidence.packaged_collector_role = "runtime-snapshot-collector"`，以及 `known_issues`。
7. 模块额外导出 `STATUS_GROUPS`、`LOCAL_SERVICE_ENDPOINTS`、`WORKFLOW_RULE_SOURCES`、`CONFIG_BASE_PAGE`、`KNOWN_ISSUES`。

以上都属于 `code-confirmed`。

### 4.2 业务监测规则已证实流程

`95598抢修-市指_业务检测配置.txt` 中可直接确认：

1. 通过 `BrowserAction("sgBrowerserJsAjax2", ...)` 请求 `repairOrder/list`，查询条件包含 `statusName=00,01,06,08` 与当天时间窗，证据等级：`code-confirmed`。
2. 将返回列表按状态分到 `list`、`shlist`、`ycjList`，并构造 `pending/audit/processed` 与 `pendingList`，证据等级：`code-confirmed`。
3. 读取 `getMonitorLog`，并基于待处理列表对比决定是否播报音频提醒，证据等级：`code-confirmed`。
4. 将监测结果写入 `setMonitorData` 与 `setMonitorLog`，证据等级：`code-confirmed`。
5. 音频提醒结果会写入 `setAudioPlayLog` 成功/失败/异常三类状态，证据等级：`code-confirmed`。

但这里同时存在一个直接可见的 bug：待处理判断写成了 `item.status == "00" && item.status == "01"`，这在单个状态值上不可能同时成立，因此规则中的 `pending` 列表构造逻辑不严谨，证据等级：`implementation intent exists but not rigorous / buggy`。

### 4.3 自动处理规则已证实流程

`95598抢修-市指_自动处理配置.txt` 中可直接确认：

1. 先写一条“进入自动派单”的监测日志，再读取 `getDisposeLog` 做已派单去重，证据等级：`code-confirmed`。
2. 对未派过单的待处理工单，读取 `getClassList`，按 `scope` 对故障地点 `gzdd` 做班组匹配，证据等级：`code-confirmed`。
3. 匹配成功时，请求 `repairOrder/initProcess` 进行自动派单，证据等级：`code-confirmed`。
4. 自动派单成功时，会触发成功音频播报、短信发送、外呼触发，并写 `setDisposeLog(state="成功")`，证据等级：`code-confirmed`。
5. 自动派单失败时，会触发失败音频播报，并写 `setDisposeLog(state="失败")`，证据等级：`code-confirmed`。
6. 自动派单异常时，会触发异常音频播报，并写 `setDisposeLog(state="异常")`，证据等级：`code-confirmed`。
7. 未匹配到班组时，会触发未匹配音频播报，并写 `setDisposeLog(state="未匹配")`，证据等级：`code-confirmed`。

以上动作都只是“规则层实现分支存在”的直接证据，不代表运行时已经验证成功。

## 5. 标准化抽象流程

若为 command-center 做严格抽象，本场景更合理的标准化流程应写成：

1. 接收监测任务输入 `time`。
2. 使用规则资产定义的浏览器请求采集 95598 抢修队列。
3. 将源数据分为 `pending`、`audit`、`processed`，并保留规则层可见的待处理列表语义。
4. 用 monitor log / dispose log 做比较上下文，得出“新增待处理”或待自动处理集合。
5. 若进入标准配置归一层，再把这些结果映射为 `pending_ids`、`new_pending_ids` 等 canonical 字段。
6. 先返回或保留监测快照语义。
7. 再执行音频提醒、短信、外呼、自动派单、日志写入等下游动作。

其中第 1 步可由 packaged collector 的显式输入 `time` 支撑，第 3、4、5、6 步可由 packaged collector 的输入驱动归一化 / 比较逻辑支撑，证据等级：`code-confirmed`；第 2、7 步主要由规则资产直接支撑，证据等级：`code-confirmed`；“快照应先于下游副作用表达”这一边界来自 `SKILL.md` / references，证据等级：`contract-defined`。

如果进一步把这个抽象流程说成“已由统一 packaged collector 严格承载实时浏览器采集与自动派单副作用”，那就不严谨了，因为这些更强 workflow 证据仍在 desk 规则资产而不是 packaged collector 中，证据等级只能降为 `implementation intent exists but not rigorous / buggy`。

## 6. 输入、上下文与依赖

### 输入

- `time` 是 scene 与 packaged script 共同声明的显式输入，证据等级：`code-confirmed`。
- 当天时间窗拼接逻辑出现在业务监测规则中，即 `00:00:00` 到 `23:59:59`，证据等级：`code-confirmed`。
- “当前队列窗口通常是当天”在 reference 中被明确说明，证据等级：`contract-defined`。

### 运行上下文

- 平台 session、org/user 上下文、浏览器可执行 `BrowserAction` 是规则资产和 reference 共同依赖的前提，证据等级分别为 `code-confirmed` 与 `contract-defined`。
- 页面本身更偏配置页，而真正监测语义来自规则资产，这一点在 `collection-flow.md` 中被明确指出，证据等级：`contract-defined`。

### 依赖

- `scene.json` 中声明 `browser`、`local-service`、`repair-order-source`、`history-log`、`status-classification`，证据等级：`code-confirmed`。
- 业务监测规则直接使用 `repairOrder/list`、`MonitorServices/getMonitorLog`、`setMonitorData`、`setMonitorLog`、`setAudioPlayLog`，证据等级：`code-confirmed`。
- 自动处理规则直接使用 `getDisposeLog`、`getClassList`、`repairOrder/initProcess`、`setDisposeLog`、`setSendMessageLog` 与外呼触发 `mac.callOutLogin`，证据等级：`code-confirmed`。
- `configServices` 是否需要单独提升为正式依赖，在 `scene.draft.json` 中仍是待确认项，证据等级：`no direct evidence / candidate only`。

## 7. 输出结构

当前输出结构需要分层描述。

### 7.1 packaged runtime collector 已直接定义的输出

`collect_repair_orders.js` 直接定义：

- `type: "monitor-snapshot"`
- `scene: "95598-repair-city-dispatch"`
- `time`
- `pending`
- `audit`
- `processed`
- `pending_ids`
- `new_pending_ids`
- `status`
- `partial_reasons`
- `evidence.workflow_rule_sources`
- `evidence.config_base_page`
- `evidence.config_base_role`
- `evidence.packaged_collector_role`
- `known_issues`

以上全部属于 `code-confirmed`。

### 7.2 规则资产已展示的实际快照字段语义

业务监测规则直接构造了：

- `time`
- `type: "95598抢修-市指"`
- `pending`
- `pendingList`
- `audit`
- `processed`

这说明规则层实际快照对象与 packaged stub 的字段命名并不完全一致，尤其是 `pendingList` vs `pending_ids`、`type` vs `scene`，证据等级：`code-confirmed`。

### 7.3 `new_pending_ids` 的证据强度

`SKILL.md`、reference 和 `data-quality.md` 都把 `new_pending_ids` 当作期望输出的一部分，证据等级：`contract-defined`。但在已读规则资产里，能直接看到的是“对 monitor log / dispose log 做比较并决定是否提醒或进入自动派单”，而没有看到显式字段 `new_pending_ids` 被直接写出，因此“存在历史比较意图”是 `code-confirmed`，“`new_pending_ids` 已被当前实现严谨产出”只能标为 `implementation intent exists but not rigorous / buggy`。

## 8. 下游动作证据表

| 下游动作 | 当前证据 | 证据等级 | 严谨结论 |
| --- | --- | --- | --- |
| 返回 `monitor-snapshot` runtime collector 输出 | `collect_repair_orders.js` 直接返回对象 | `code-confirmed` | packaged JS 直接证明标准 snapshot 字段、状态判定与 collector metadata 已存在。 |
| 队列采集请求 | 业务监测规则调用 `repairOrder/list` | `code-confirmed` | 队列采集逻辑直接存在于规则资产中。 |
| 音频提醒调用 | 业务监测规则和自动处理规则都调用 `mac.audioPlay(...)` | `code-confirmed` | 只能确认规则层存在音频提醒调用，不代表运行时已验证成功。 |
| 短信发送调用 | 自动处理规则调用 `mac.sendMessages(request)` | `code-confirmed` | 只能确认规则层存在短信发送调用。 |
| 电话 / 外呼触发 | 自动处理规则调用 `mac.callOutLogin(params)` | `code-confirmed` | 只能确认规则层存在外呼触发分支。 |
| 自动派单请求调用 | 自动处理规则请求 `repairOrder/initProcess` | `code-confirmed` | 自动派单请求分支可直接定位。 |
| `setDisposeLog` 成功写入 | 自动处理规则成功分支写 `state="成功"` | `code-confirmed` | 成功路径处置日志写入定义明确存在。 |
| `setDisposeLog` 失败写入 | 自动处理规则失败分支写 `state="失败"` | `code-confirmed` | 失败路径处置日志写入定义明确存在。 |
| `setDisposeLog` 异常写入 | 自动处理规则异常分支写 `state="异常"` | `code-confirmed` | 异常路径处置日志写入定义明确存在。 |
| `setDisposeLog` 未匹配写入 | 自动处理规则未匹配分支写 `state="未匹配"` | `code-confirmed` | 未匹配路径处置日志写入定义明确存在。 |
| `new_pending_ids` 严格产出 | 只在 skill/reference/data-quality 中被要求 | `implementation intent exists but not rigorous / buggy` | 有明确目标语义，但当前读到的规则资产未直接产出同名字段。 |
| 把下游动作结果等同于采集成功 | skill/reference 明确禁止 | `contract-defined` | 契约要求把快照成功与副作用成功分离。 |

## 9. 当前代码疑点 / 不严谨点

1. 最明显的已知 bug 是业务监测规则中的待处理分类条件写成 `item.status == "00" && item.status == "01"`。这会导致 `pending` 分桶逻辑不可能按作者意图工作，证据等级：`implementation intent exists but not rigorous / buggy`。
2. packaged collector 与规则资产的输出命名仍不一致：collector 使用 `scene`、`pending_ids`、`new_pending_ids`，规则对象使用 `type`、`pendingList`，证据等级：`code-confirmed`。
3. `SKILL.md` 把 `new_pending_ids` 作为输出重点，但当前直接证据更强的是“做日志比较并决定提醒/自动派单”，而不是“显式产出同名字段”，证据等级：`implementation intent exists but not rigorous / buggy`。
4. `scene.draft.json` 仍在犹豫 `trigger-alert` 是否拆成 audio-alert、message-alert、callout 三类动作，说明标准动作建模尚未完全收敛，证据等级：`no direct evidence / candidate only`。
5. 虽然规则层存在音频、短信、外呼、自动派单与日志写入定义，但本文不能据此声称这些动作已完成运行时验证，任何这种拔高都不严谨。

## 10. 对 command-center 标准配置的修订建议

1. 对本场景应显式拆分两层实现证据：
   - `packaged_collector`: `collect_repair_orders.js` 的 runtime snapshot collector、状态判定、历史比较与 metadata（规则来源、配置基础页角色、已知问题），证据等级：`code-confirmed`；
   - `rule_asset_workflow`: 业务监测与自动处理规则资产中的真实流程分支，证据等级：`code-confirmed`。
2. 在标准配置中把业务监测与自动处理拆成两个子流程：
   - `monitoring_flow` 对应 `95598抢修-市指_业务检测配置.txt`；
   - `auto_processing_flow` 对应 `95598抢修-市指_自动处理配置.txt`。
   这样可以避免把两份规则混成单一 collector。
3. 输出 schema 建议区分：
   - `canonical_snapshot_fields`: `pending_ids` / `new_pending_ids` 等标准字段；
   - `observed_rule_fields`: `pendingList` / `type` 等规则层字段。
   当前两套命名并存，证据等级：`code-confirmed`。
4. 对状态分类增加 `known_bug_note`，明确记录 `status == "00" && status == "01"` 的待处理分类 bug，防止后续文档误把 pending 计数写成稳定事实，证据等级：`implementation intent exists but not rigorous / buggy`。
5. 对下游动作增加 `effect_channels` 明细，至少拆出 `audio-reminder`、`sms-send`、`callout-trigger`、`auto-dispatch-request`、`dispose-log-write`，因为这些都已在规则资产中直接出现，证据等级：`code-confirmed`。

## 11. 最终严谨结论

关于 `95598-repair-city-dispatch`，当前最可靠的结论是：仓库已经同时存在一个可测试的 packaged JS runtime collector，以及两份更强的 desk 规则脚本实现（`D:\desk\智能体资料\大四区报告监测项\95598抢修-市指_业务检测配置.txt`、`D:\desk\智能体资料\大四区报告监测项\95598抢修-市指_自动处理配置.txt`），其中 packaged collector 已直接实现 repair-order 分类、monitor/dispose log 比较、`new_pending_ids` 推导与 `success/partial/empty/blocked` 状态判定；业务监测规则直接证实了队列采集、日志比较、音频提醒与监测日志写入，自动处理规则直接证实了去重、班组匹配、自动派单请求、短信发送、外呼触发以及 `setDisposeLog` 在成功 / 失败 / 异常 / 未匹配路径上的写入定义，证据等级：`code-confirmed`。

但同样必须严格说明：这些 `code-confirmed` 只证明“代码或规则层存在这些实现分支”，不证明运行时已验证成功。此外，desk 业务监测规则里还存在 `status == "00" && status == "01"` 的待处理分类 bug，因此 rule workflow 本身也不能被描述为严谨无误。对 command-center 而言，本场景最应该被建模为“packaged collector 已具备输入驱动快照归一化能力、desk rule-asset workflow 证据更强、且监测流与自动处理流必须分开表达”的 monitor scene。