diff --git a/components/UserInfoCard.vue b/components/UserInfoCard.vue
index d9ccb0a..2853c66 100644
--- a/components/UserInfoCard.vue
+++ b/components/UserInfoCard.vue
@@ -23,8 +23,8 @@
{{ networkStatus == 1 ? '正常' : '停机' }}
- 立即续费
+
diff --git a/docs/2026-10-26-轮询按运营商账户限流-前端接口变更说明.md b/docs/2026-10-26-轮询按运营商账户限流-前端接口变更说明.md
new file mode 100644
index 0000000..ad376ce
--- /dev/null
+++ b/docs/2026-10-26-轮询按运营商账户限流-前端接口变更说明.md
@@ -0,0 +1,1754 @@
+# 轮询按运营商账户限流:前端接口变更说明
+
+更新日期:2026-10-26
+适用分支:`Iteration/8-11`(测试环境已部署)
+对应方案:`docs/engineering/轮询按运营商账户限流技术方案.md` 第五部分第 3 节的 7 个提案
+
+本文给前端工程师用:列出这次方案新增、改动和废弃的后台接口,以及每个页面要改什么。字段级定义以接口文档(`/api/admin` 的 OpenAPI)为准,本文附录列出了全部新增接口的字段表,由接口文档直接生成。
+
+- 新增接口 46 个,删除 0 个,改动 16 个(与方案开始前的代码逐接口对比得出)。
+- 所有接口都要登录。列表接口分页参数统一为 `page`、`page_size`(最大 100),返回 `items`、`total`、`page`、`size`。
+- "仅超级管理员" 的修改接口,其他账号调用返回 403;"仅平台账号" 指超级管理员与平台账号可用。
+- 枚举优先从 `GET /polling-options` 取;不在其中的(见第 9 节)以本文与接口文档的说明为准。
+
+---
+
+## 1. 需要新增和改造的页面一览
+
+| 页面 | 类型 | 主要接口 | 对应章节 |
+|---|---|---|---|
+| 网关限流组 | 新增 | `/polling-rate-limit-groups` | 2.1 |
+| 上游错误分类规则(含测试) | 新增 | `/gateway-error-classifications` | 2.2 |
+| 停复机记录 | 新增 | `/card-stop-resume-records`、`/iot-cards/:id/stop-resume-records` | 2.3 |
+| 网关调用监控(按运营商账户) | 新增 | `/polling-stats/carriers`、`/polling-stats/carriers/:carrier_id/trend` | 2.4 |
+| 轮询配置 | 改造 | `/polling-configs` 及匹配预览、优先级、重算到期 | 3 |
+| 分层与重置日前统计 | 新增 | `/polling-stats/tiers`、`/polling-stats/pre-reset` | 3.4 |
+| 资产详情(后台与 C 端) | 改造 | 去掉保护期展示 | 4 |
+| 停复机规则演练 | 新增 | `/stop-resume-rule/dry-run` | 5 |
+| 运营商账户调度参数 | 新增 | `/polling-carrier-params` | 6.1 |
+| 请求检查场景 | 新增 | `/polling-check-scenes` | 6.2 |
+| 失败告警(含账户汇总、停机被拒视图) | 新增 | `/polling-failure-alerts` | 6.3、8.5 |
+| 按账户轮询队列监控 | 新增 | `/polling-stats/carrier-queues` | 6.4、7 |
+| 单卡轮询状态(排查用) | 新增 | `/iot-cards/:id/polling-state` | 6.5、7 |
+| 系统配置 | 改造 | `/system-configs` 增加 `polling` 模块 | 9 |
+| 不轮询清单 | 新增 | `/card-polling-pauses` | 8.3 |
+| 轮询开关文件导入 | 新增 | `/polling-status-imports` | 8.2 |
+| 卡列表、设备列表 | 改造 | 是否轮询筛选与列、批量开关轮询 | 8.1、8.4 |
+| 轮询并发配置 | 保留、加提示 | `/polling-concurrency` | 6.6 |
+
+---
+
+## 2. 网关限流与停复机记录(第 1 个提案)
+
+### 2.1 网关限流组页面(新增)
+
+| 接口 | 说明 |
+|---|---|
+| `GET /polling-rate-limit-groups` | 列表 |
+| `GET /polling-rate-limit-groups/:id` | 详情 |
+| `POST /polling-rate-limit-groups` | 新建(仅超级管理员) |
+| `PUT /polling-rate-limit-groups/:id` | 修改(仅超级管理员) |
+| `PUT /polling-rate-limit-groups/:id/status` | 启停(仅超级管理员),`status`:1 启用、0 停用 |
+| `DELETE /polling-rate-limit-groups/:id` | 删除(仅超级管理员) |
+
+- `carrier_id` 为空表示全局组(各账户合计);有值表示该运营商账户的组。
+- `operations` 取值见 `GET /polling-options` 的 `gateway_operations`(查流量、查状态、查实名、停机、复机)。
+- 限流是否真正拦截由系统配置 `polling.gateway.rate_limit_mode` 决定(`observe` 只统计、`enforce` 拦截,见第 9 节),页面上建议展示当前模式。
+
+### 2.2 上游错误分类规则页面(新增)
+
+| 接口 | 说明 |
+|---|---|
+| `GET /gateway-error-classifications` | 列表 |
+| `POST /gateway-error-classifications` | 新建(仅超级管理员) |
+| `PUT /gateway-error-classifications/:id` | 修改(仅超级管理员) |
+| `PUT /gateway-error-classifications/:id/status` | 启停(仅超级管理员) |
+| `DELETE /gateway-error-classifications/:id` | 删除(仅超级管理员) |
+| `POST /gateway-error-classifications/test` | 测试:输入操作与上游返回信息,返回命中的分类,不写数据 |
+
+- 类别(`category`)取值见 `GET /polling-options` 的 `error_categories`;匹配方式见 `match_types`。
+- "自动关闭轮询"只对终态类别生效。
+
+### 2.3 停复机记录页面(新增)
+
+| 接口 | 说明 |
+|---|---|
+| `GET /card-stop-resume-records` | 全部记录,时间范围必填,跨度不超过 31 天 |
+| `GET /iot-cards/:id/stop-resume-records` | 单卡历史(可放在卡详情或告警详情里,用于查看最近停复机记录) |
+
+- 结果、动作取值见 `GET /polling-options` 的 `stop_resume_results`、`stop_resume_actions`。
+
+### 2.4 网关调用监控(新增)
+
+| 接口 | 说明 |
+|---|---|
+| `GET /polling-stats/carriers` | 按运营商账户汇总最近若干分钟的网关调用(成功率、QPS、耗时、错误类别) |
+| `GET /polling-stats/carriers/:carrier_id/trend` | 单个账户的分钟级趋势 |
+| `GET /polling-options` | 本方案后台页面用的枚举(操作、错误类别、匹配方式、限流模式、豁免来源、停复机结果与动作) |
+
+---
+
+## 3. 轮询配置改造(第 2 个提案:分层轮询)
+
+### 3.1 字段变化:`POST /polling-configs`、`PUT /polling-configs/:id`、列表与详情
+
+| 变化 | 字段 | 说明 |
+|---|---|---|
+| 新增 | `asset_status` | 资产状态匹配(1 在库、2 已销售、3 已换货、4 已停用),为空不限 |
+| 新增 | `package_state` | 套餐状态匹配(`active` 有生效套餐、`depleted` 已用完、`pending` 只有待生效、`none` 无套餐),为空不限 |
+| 新增 | `pre_reset_window`、`pre_reset_carddata_interval` | 重置日前加密:窗口长度与窗口内流量检查间隔(秒),两者同时配置才生效 |
+| 新增(仅修改接口) | `clear_fields` | 要清空为空值的字段名列表:间隔清空即改为继承,匹配条件清空即不限 |
+| 新增(返回) | `warnings` | 保存提示(如与其他配置优先级相同且条件可能重叠),不影响保存结果,页面应展示 |
+| **删除** | `protect_check_interval` | 保护期已下线,请求与返回都不再有该字段,页面去掉该输入项 |
+| 含义变化 | 四个检查间隔 `*_check_interval` | 三态:正数按间隔;`0` 不检查且不再继承;不传或为空继承优先级更低的配置。页面要能区分"0"和"空" |
+
+### 3.2 匹配预览(新增)
+
+| 接口 | 说明 |
+|---|---|
+| `GET /polling-configs/match-preview?iccid=` | 按当前已保存配置,预览某张卡命中哪些配置、各检查类型的最终间隔 |
+| `POST /polling-configs/match-preview` | 同上,但可带未保存的修改(`overrides`),用于编辑弹窗里"保存前预览",不写数据 |
+
+### 3.3 优先级与重算到期(新增)
+
+| 接口 | 说明 |
+|---|---|
+| `PUT /polling-configs/priorities` | 整体调整优先级(拖拽排序后提交 `ordered_ids`),仅超级管理员 |
+| `POST /polling-configs/recalculate-due` | 立即重算轮询到期时间(可按运营商账户),异步,只提前不推后,仅超级管理员;返回 `task_id` |
+| `GET /polling-configs/recalculate-due/:task_id` | 查询重算进度 |
+
+### 3.4 统计(新增)
+
+| 接口 | 说明 |
+|---|---|
+| `GET /polling-stats/tiers` | 各层卡数、漏配告警卡数(结果缓存 5 分钟) |
+| `GET /polling-stats/pre-reset` | 重置日前加密效果:按账户统计窗口内未查到流量的卡数、最后一次查询距重置时刻分布 |
+
+---
+
+## 4. 保护期下线(第 3 个提案)
+
+- `device_protect_status` 字段**保留但已废弃**,固定返回 `none`,涉及:
+ - `GET /assets/resolve/:identifier`
+ - `GET /assets/:identifier/realtime-status`
+ - `POST /assets/:identifier/refresh`
+ - C 端 `GET /api/c/v1/asset/info`
+- 前端:后台资产详情与 C 端去掉保护期状态的展示;轮询配置去掉保护期间隔(见 3.1)。
+
+---
+
+## 5. 停复机规则演练(第 4 个提案)
+
+| 接口 | 说明 |
+|---|---|
+| `GET /stop-resume-rule/dry-run` | 对全部卡按停复机新规则只判断不执行:按运营商账户 × 当前停机原因 × 判断结果的汇总,加分页明细;可传"假设的实名管控配置"预演;仅平台账号 |
+| `POST /stop-resume-rule/dry-run/export` | 导出明细(导出场景 `stop_resume_rule_dry_run`),筛选与假设配置同演练接口 |
+
+- 运营商账户的"实名管控"开关(`realname_control_enabled`)在运营商账户编辑里(`PUT /carriers/:id`)。从 0 改为 1 时必须带 `realname_control_confirm=true`,否则接口返回提示文案(含将被停机的卡数),前端应把这段提示作为二次确认展示,确认后带上参数重新提交。
+
+---
+
+## 6. 按运营商账户调度(第 5 个提案)
+
+### 6.1 运营商账户调度参数页面(新增)
+
+| 接口 | 说明 |
+|---|---|
+| `GET /polling-carrier-params` | 全部运营商账户的生效参数;未单独配置的账户返回全局默认并标记 `is_default` |
+| `GET /polling-carrier-params/:carrier_id` | 单个账户 |
+| `PUT /polling-carrier-params/:carrier_id` | 保存(仅超级管理员)。字段为空表示该项用全局默认;执行上限不得大于订阅进程 `max_in_flight` 之和,超出会被拒绝 |
+| `DELETE /polling-carrier-params/:carrier_id` | 删除,恢复全局默认(仅超级管理员) |
+
+字段:`inflight_limit`、`card_max_in_flight`(卡任务执行上限与每进程并发),`sr_inflight_limit`、`stop_resume_max_in_flight`(停复机执行上限与每进程并发),`priority_max_ratio`(优先队列最大占比),`stop_resume_min_interval`(单卡两次停复机调用最小间隔,秒),`stop_resume_confirm_delay`(停复机结果未知后的确认延迟,秒)。
+
+### 6.2 请求检查场景页面(新增)
+
+| 接口 | 说明 |
+|---|---|
+| `GET /polling-check-scenes` | 全部场景(代码预置 8 个:订单支付、套餐激活、停复机成功、设备操作、自动续费购包、C 端资产详情、后台资产实时状态、实名链接) |
+| `PUT /polling-check-scenes/:scene` | 修改(仅超级管理员):只可改检查类型、延迟确认序列(递增)与冷却时长 |
+
+### 6.3 失败告警页面(新增)
+
+| 接口 | 说明 |
+|---|---|
+| `GET /polling-failure-alerts` | 列表,可按运营商账户、检查类型、错误类别、状态、告警级别、ICCID、时间筛选;`view=stop_refused` 见 8.5 |
+| `GET /polling-failure-alerts/summary` | 未处理告警按运营商账户 × 错误类别汇总(账户汇总视图) |
+| `GET /polling-failure-alerts/:id` | 详情;需要看该卡最近的停复机记录时调 `GET /iot-cards/:id/stop-resume-records` |
+| `PUT /polling-failure-alerts/:id/status` | 标记已处理(只有未处理的告警可以标记) |
+| `POST /polling-failure-alerts/close-polling` | 勾选告警批量关闭对应卡的轮询,见 8.5 |
+
+- 告警级别:`card` 卡级、`carrier` 账户级(窗口内同账户告警数超过阈值时产生,`card_id` 为 0)。
+- 检查类型:`card_status`、`carddata`、`realname`、`package`、`stop_resume`(停复机,第 6 个提案新增)、`all`(账户级)。
+- 状态:1 未处理、2 已恢复(首次成功后自动转入)、3 已关闭轮询、4 已处理。
+
+### 6.4 按账户轮询队列监控(新增)
+
+`GET /polling-stats/carrier-queues`:调度模式、新结构初始化状态,以及每个运营商账户的队列长度、已到期、执行中、执行上限、上一分钟 QPS、限流等待与拒绝、近 1 小时处理中标记到期次数、未处理告警数(含按错误类别)。停复机相关字段见第 7 节。
+
+### 6.5 单卡轮询状态(新增,排查用)
+
+`GET /iot-cards/:id/polling-state`:卡所在队列、下次可领取时间、是否执行中、各检查类型的下次到期、最近成功、连续失败与最近错误、待执行的延迟确认。停复机相关字段见第 7 节。建议放在卡详情的"轮询"页签。
+
+### 6.6 轮询并发配置页面(保留)
+
+`/polling-concurrency` 仍然存在,但**只对旧分片调度(`polling.scheduler.mode = legacy`)生效**,新调度下修改没有效果。页面上请加提示:"仅旧调度生效,按运营商账户调度时请使用运营商账户调度参数"。该页面会在旧调度代码下线时一并删除。
+
+### 6.7 调度模式切换
+
+通过系统配置 `polling.scheduler.mode`(`legacy` / `carrier`)切换,`GET /polling-stats/init-progress`(原有接口)查看新结构初始化进度。
+
+---
+
+## 7. 停复机指令队列(第 6 个提案)
+
+没有新增接口,只在已有接口上加字段:
+
+- **全局开关**:系统配置 `polling.stop_resume.queue_enabled`(默认关闭)。开启后自动停复机经指令队列执行;关闭即回到各入口当场执行。
+- `GET /polling-stats/carrier-queues` 每个账户新增:
+
+| 字段 | 说明 |
+|---|---|
+| `stop_resume_queue_length` | 停复机指令队列长度 |
+| `stop_resume_due` | 已到期指令数 |
+| `stop_resume_running` | 执行中指令数 |
+| `stop_resume_pending` | 结果未知待确认的指令数(按队列前 500 条统计) |
+| `stop_resume_success_1h`、`stop_resume_failed_1h`、`stop_resume_retry_1h`、`stop_resume_unknown_1h` | 近 1 小时成功、失败、推后重试、结果未知次数 |
+
+- `GET /iot-cards/:id/polling-state` 新增:
+
+| 字段 | 说明 |
+|---|---|
+| `stop_resume_queue_enabled` | 停复机出口开关是否开启 |
+| `stop_resume_command` | 当前停复机指令,没有时为 `null`:`action`(`stop` / `start`)、`reason`、`scenes`、`source`、`version`、`fail_count`、`last_error`、`pending`(结果未知待确认)、`unknown`、`written_at`、`next_at`(下次可执行时间,受单卡最小间隔约束) |
+| `last_stop_resume_call_at` | 最近一次停复机网关调用时间 |
+
+- 失败告警的检查类型新增 `stop_resume`(见 6.3)。
+
+---
+
+## 8. 不轮询清单与批量开关轮询(第 7 个提案)
+
+### 8.1 卡列表、设备列表:批量开关轮询(新增)
+
+| 接口 | 说明 |
+|---|---|
+| `POST /iot-cards/batch-update-polling-status` | 勾选卡批量开关轮询 |
+| `POST /devices/batch-update-polling-status` | 勾选设备批量开关轮询(级联到设备下各卡) |
+
+请求:`asset_ids`(1~500 个,不能重复)、`enable_polling`(true 开启、false 关闭)、`reason`(必填,写入不轮询清单)。
+
+返回:`success_count`、`skip_count`、`fail_count`、`items`(逐项结果)、`impact`(本次目标状态的影响说明)。逐项 `status`:
+
+| 值 | 含义 | 典型 `reason` |
+|---|---|---|
+| 1 | 成功 | |
+| 2 | 跳过 | "已是目标状态"、"已销户,不能开启轮询"、"风险停机,不能开启轮询" |
+| 3 | 失败 | 具体错误信息 |
+| 4 | 无权限或资产不存在 | "无权限操作该资产或资产不存在" |
+
+- 部分成功不会回滚,请把逐项结果展示给用户(例如结果弹窗按状态分组)。
+- 企业账号调用返回 403;代理账号只能操作本店及下级店铺的资产。
+- 超过 500 个或 ID 重复直接返回参数错误。
+
+### 8.2 轮询开关文件导入(新增,仅平台账号)
+
+流程:
+
+1. `POST /storage/upload-url`,`purpose` 传 **`polling_status_import`**(新增用途),文件名用 `.csv`,拿到 `upload_url` 和 `file_key`。
+2. 用 `PUT` 把 CSV 传到 `upload_url`。CSV 格式:**首行为表头**,**首列**为 ICCID(卡,19 位或 20 位都可以)或 IMEI/虚拟号(设备),空行忽略,最多 50000 行。
+3. `POST /polling-status-imports`:`file_key`(必须以 `polling-status-imports/` 开头)、`asset_type`(`iot_card` / `device`)、`enable_polling`、`reason`。返回任务(状态 1 待处理)。
+4. `GET /polling-status-imports` 看任务列表与进度(状态:1 待处理、2 处理中、3 已完成、4 失败);`GET /polling-status-imports/:id` 看逐行结果 `items`(`line`、`identifier`、`asset_id`、`status`、`status_name`、`reason`,状态取值同 8.1)。
+
+- 逐行处理规则与勾选批量相同,每行独立,部分成功不回滚;任务级失败(文件不是 CSV、编码无法识别、没有数据行等)看 `error_message`。
+
+### 8.3 不轮询清单页面(新增,仅平台账号)
+
+`GET /card-polling-pauses`,筛选参数:
+
+| 参数 | 说明 |
+|---|---|
+| `asset_type` | `iot_card` / `device` |
+| `carrier_id` | 卡所属运营商账户 |
+| `source` | 关闭来源,取值见下表 |
+| `status` | 1 已关闭、2 已恢复 |
+| `identifier` | ICCID 或 IMEI(精确) |
+| `operator_id` | 关闭操作人账号 ID |
+| `start_time`、`end_time` | 关闭时间范围(带时区的 RFC3339 秒级时间) |
+
+返回每条记录:资产类型与 ID、`identifier`、运营商账户(`carrier_id`、`carrier_name`)、资产当前 `enable_polling`、卡当前 `gateway_extend`、`status`/`status_name`、`close_source`/`close_source_name`、`close_reason`、`closed_by`/`closed_by_name`、`closed_at`、`import_task_id`、`restore_source`/`restore_source_name`、`restore_reason`、`restored_by`/`restored_by_name`、`restored_at`。系统操作时操作人为 0(展示"系统")。
+
+来源取值(关闭来源与恢复来源共用):
+
+| 值 | 名称 |
+|---|---|
+| `single` | 单资产接口 |
+| `batch` | 勾选批量 |
+| `import` | 文件导入 |
+| `risk_auto` | 风险停机或已销户自动关闭 |
+| `cascade` | 设备级联 |
+| `order` | 支付或下单生效(自动恢复) |
+| `expiry_change` | 改有效期(自动恢复) |
+| `alert` | 停机被拒告警处理 |
+| `history` | 历史数据(上线时补写的存量) |
+
+- 每个资产同时只有一条"已关闭"记录;恢复后该记录标为"已恢复"并保留,再次关闭会新增一条,所以同一资产可能有多条历史。
+- 列表勾选批量开启:直接复用 8.1 的批量接口(`enable_polling=true`)。
+- 导出:统一导出任务,场景 `polling_pause`,`query.filters` 与本接口筛选参数相同。
+
+### 8.4 卡列表、设备列表的改动
+
+| 接口 | 变化 |
+|---|---|
+| `GET /iot-cards/standalone` | 新增筛选参数 `enable_polling`(true 轮询中、false 已关闭,不传不过滤);返回原本就有 `enable_polling` |
+| `GET /devices` | 新增筛选参数 `enable_polling`;**返回新增字段 `enable_polling`** |
+| 卡导出(场景 `iot_card`)、设备导出(场景 `device`) | 支持 `enable_polling` 筛选;导出文件**最后一列新增「是否轮询」** |
+| `PATCH /assets/:identifier/polling-status`(单资产开关,原有) | 行为变化:网关扩展状态为风险停机或已销户的卡**不能开启**,返回 403;开关会写入不轮询清单(来源"单资产接口") |
+
+### 8.5 失败告警:停机被拒视图与批量关闭轮询(新增)
+
+- `GET /polling-failure-alerts?view=stop_refused`:停复机方向为停机,且错误类型为终态或业务错误、或停机失败次数达到阈值的告警。
+ - 这个视图只认 `carrier_id`、`status`、`iccid`、`start_time`、`end_time` 筛选,**会忽略** `check_type`、`error_category`、`alert_level`,页面切到该视图时请隐藏这三个筛选项。
+ - 额外返回:`device_id`(所属设备)、`network_status`、`stop_reason`、`enable_polling`(是否已关闭轮询)、`has_package`(是否有生效套餐)、`handled_by_name`。上游返回信息在 `last_error` 中。
+ - 导出:统一导出任务,场景 `polling_stop_refused_alert`,`query.filters` 为 `carrier_id`、`status`、`iccid`、`start_time`、`end_time`。
+- `POST /polling-failure-alerts/close-polling`(仅平台账号):`alert_ids`(1~500)、`reason`。关闭告警对应**卡本身**的轮询(清单来源"停机被拒告警处理"),成功或已关闭的告警状态改为"已关闭轮询"。返回格式同 8.1;不存在或不是卡级告警的 ID 以 `asset_id=0`、状态 4 返回。
+
+### 8.6 开关轮询的确认框文案
+
+`GET /polling-status/impact` 返回 `disable`(关闭的影响)与 `enable`(开启的影响)两组文案,前端在关闭、开启轮询的确认框中直接展示,不要写死。批量接口的返回 `impact` 是同一份内容。
+
+关闭的影响(当前内容):不再查询上游;流量用完、实名不满足不自动停机,套餐激活、流量重置后不自动复机;套餐到期、退款后无可用套餐仍会停机;订单套餐生效、后台改有效期后有生效套餐会自动恢复轮询并按规则复机;人工停复机照常;设备关闭时设备下所有卡同样适用。
+
+### 8.7 自动恢复轮询(无接口变化,影响页面展示)
+
+以下操作会自动把已关闭轮询的卡或设备恢复轮询(风险停机、已销户的卡除外),清单里能看到对应的恢复来源,页面不需要额外处理:
+
+- 订单套餐生效:客户支付成功、后台下单、批量下单、OpenAPI 钱包下单(来源 `order`);
+- 后台修改套餐有效期后资产有未到期的生效套餐(来源 `expiry_change`)。
+
+---
+
+## 9. 系统配置(`/system-configs`)新增 `polling` 模块
+
+`GET /system-configs?module=polling` 可列出以下配置,修改用 `PUT /system-configs/:key`(JSON 类配置会做结构校验,非法时返回错误说明)。
+
+| 配置键 | 类型 | 默认 | 说明 |
+|---|---|---|---|
+| `polling.gateway.rate_limit_mode` | string | `observe` | 网关限流模式:`observe` 只统计不拦截,`enforce` 拦截 |
+| `polling.gateway.default_qps` | int | 10 | 未被启用限流组覆盖的卡网关操作的默认每秒请求上限 |
+| `polling.gateway.rate_limited_retry_delay_seconds` | int | 5 | 任务遇限流后的固定重试延迟(秒) |
+| `polling.gateway.rate_limit_defer_alert_seconds` | int | 600 | 同一任务因限流累计推迟超过该时长时写告警 |
+| `polling.stop_resume_record.retention_months` | int | 6 | 停复机记录保留月数 |
+| `polling.stop_resume_record.premake_months` | int | 3 | 停复机记录提前创建未来分区的月数 |
+| `polling.scheduler.mode` | string | `legacy` | 调度模式:`legacy` 旧分片调度,`carrier` 按运营商账户调度 |
+| `polling.scheduler.step_order` | json | `["card_status","carddata","realname","package"]` | 卡任务步骤顺序 |
+| `polling.scheduler.step_timeout_seconds` | json | `{"card_status":15,"carddata":15,"realname":15,"package":20}` | 各检查类型单步超时(秒) |
+| `polling.scheduler.task_timeout_margin_seconds` | int | 10 | 卡任务总超时余量(秒) |
+| `polling.scheduler.skip_package_after_flow` | bool | true | 同轮流量步骤已触发停复机评估时跳过套餐步骤 |
+| `polling.failure.backoff_seconds` | json | `{"default":[60,300,900,1800,3600]}` | 失败退避序列(秒,递增),可按检查类型覆盖 |
+| `polling.failure.alert_fail_count` | json | `{"default":5}` | 连续失败告警阈值,可按检查类型覆盖 |
+| `polling.failure.alert_fail_duration_seconds` | int | 21600 | 持续失败时长告警阈值(秒) |
+| `polling.failure.immediate_alert_categories` | json | `["account_config"]` | 首次出现即告警的错误类别 |
+| `polling.failure.account_alert_window_seconds` | int | 600 | 账户级告警统计窗口(秒) |
+| `polling.failure.account_alert_threshold` | int | 50 | 账户级告警阈值 |
+| `polling.stop_resume.queue_enabled` | bool | false | 自动停复机经停复机指令队列执行(全局开关) |
+| `polling.stop_resume.unknown_alert_threshold` | int | 3 | 停复机连续结果未知告警阈值 |
+| `polling.stop_resume.backoff_seconds` | json | `[600,900,1800,3600]` | 停复机失败退避序列(秒,递增) |
+| `polling.stop_resume.alert_fail_count` | int | 5 | 停复机连续失败告警阈值 |
+
+`module` 参数和返回的 `module` 枚举新增 `polling`。
+
+---
+
+## 10. 导出场景汇总
+
+`POST /export-tasks` 的 `scene`、`GET /export-tasks` 的 `scene` 筛选新增:
+
+| 场景 | 说明 | `query.filters` |
+|---|---|---|
+| `polling_pause` | 不轮询清单(仅平台账号) | 同 `GET /card-polling-pauses` |
+| `polling_stop_refused_alert` | 停机被拒告警(仅平台账号) | `carrier_id`、`status`、`iccid`、`start_time`、`end_time` |
+| `stop_resume_rule_dry_run` | 停复机规则演练明细(第 4 个提案,建议走 `POST /stop-resume-rule/dry-run/export`) | 同演练接口 |
+
+原有场景 `iot_card`、`device` 支持 `enable_polling` 筛选,导出最后一列新增「是否轮询」。历史导出任务重新导出时列不变。
+
+---
+
+## 11. 前端改动清单(按优先级)
+
+1. 轮询配置页:去掉保护期间隔;加资产状态、套餐状态、重置日前两个字段;间隔支持"0"与"空"两种;修改时支持 `clear_fields`;展示 `warnings`;匹配预览与优先级拖拽;重算到期。(第 2 个提案上线即需要)
+2. 资产详情(后台与 C 端):去掉保护期状态展示。(第 3 个提案)
+3. 运营商账户编辑:实名管控开关与 0→1 二次确认。(第 4 个提案)
+4. 系统配置页:支持 `polling` 模块与 JSON 类配置的编辑。
+5. 新增页面:网关限流组、错误分类规则(含测试)、停复机记录、网关调用监控、停复机规则演练、运营商账户调度参数、请求检查场景、失败告警(含账户汇总)、按账户队列监控、单卡轮询状态。
+6. 卡列表、设备列表:是否轮询筛选与列、批量开关轮询(含逐项结果展示和确认框文案)。
+7. 不轮询清单页(筛选、导出、勾选批量开启)与文件导入页(上传、任务列表、逐行结果)。
+8. 失败告警页:停机被拒视图(切换时隐藏三个筛选项)、导出、勾选批量关闭轮询。
+9. 轮询并发配置页:加"仅旧调度生效"提示。
+
+---
+
+## 附录:新增接口字段表(由接口文档生成)
+
+以下路径省略前缀 `/api/admin`。字段说明与接口文档一致;如有出入,以测试环境接口文档为准。
+
+#### `DELETE /gateway-error-classifications/{id}` 删除上游错误分类规则(仅超级管理员)
+
+参数:
+
+| 位置 | 名称 | 类型 | 必填 | 说明 |
+|---|---|---|---|---|
+| path | `id` | integer | 是 | ID |
+
+#### `DELETE /polling-carrier-params/{carrier_id}` 删除运营商账户调度参数(恢复全局默认,仅超级管理员)
+
+参数:
+
+| 位置 | 名称 | 类型 | 必填 | 说明 |
+|---|---|---|---|---|
+| path | `carrier_id` | integer | 是 | 运营商账户ID |
+
+#### `DELETE /polling-rate-limit-groups/{id}` 删除网关限流组(仅超级管理员)
+
+参数:
+
+| 位置 | 名称 | 类型 | 必填 | 说明 |
+|---|---|---|---|---|
+| path | `id` | integer | 是 | ID |
+
+#### `GET /card-polling-pauses` 查询不轮询清单(仅平台账号)
+
+每个资产只有一条已关闭记录,恢复后保留历史;导出使用统一导出任务,场景 polling_pause,筛选参数同本接口。
+
+参数:
+
+| 位置 | 名称 | 类型 | 必填 | 说明 |
+|---|---|---|---|---|
+| query | `page` | integer | | 页码 |
+| query | `page_size` | integer | | 每页数量 |
+| query | `asset_type` | string | | 资产类型 (iot_card:卡, device:设备) |
+| query | `carrier_id` | integer | | 卡所属运营商账户ID |
+| query | `source` | string | | 关闭来源 (single:单资产接口, batch:勾选批量, import:文件导入, risk_auto:风险停机或已销户自动关闭, cascade:设备级联, order:支付或下单生效, expiry_change:改有效期, alert:停机被拒告警处理, history:历史数据) |
+| query | `status` | integer | | 状态 (1:已关闭, 2:已恢复) |
+| query | `identifier` | string | | ICCID 或 IMEI(精确) |
+| query | `operator_id` | integer | | 关闭操作人账号ID |
+| query | `start_time` | string | | 关闭时间起始(带时区的 RFC3339 秒级时间) |
+| query | `end_time` | string | | 关闭时间结束(带时区的 RFC3339 秒级时间) |
+
+返回 `data`:
+
+| 字段 | 类型 | 说明 |
+|---|---|---|
+| `items` | array