## 1. 基线确认

- [x] 1.1 用目标卡/设备样本确认当前问题基线：卡流量增长但套餐 `data_usage_mb` 不增长
- [x] 1.2 记录基线证据（关键日志、`tb_iot_card` 与 `tb_package_usage` 当前值）用于修复后对比

## 2. 载体路由修复

- [x] 2.1 调整流量扣减链路，确保扣减入口支持“`iot_card` 未命中时回退 `device` 载体”
- [x] 2.2 在 `UsageService` 内统一实现载体命中逻辑，避免轮询与手动刷新分叉
- [x] 2.3 手动验证绑定设备卡场景：设备级套餐 `data_usage_mb` 可随流量同步增长

## 3. 小数流量精度修复

- [x] 3.1 调整扣减入参与内部计算口径，支持 `float64` 增量处理
- [x] 3.2 增加“流量小数余量”Redis 键与读写逻辑，累计后再执行整数 MB 扣减
- [x] 3.3 手动验证 `<1MB` 高频增量场景：多次同步后套餐扣减累计值正确

## 4. 字段语义对齐

- [x] 4.1 更新相关 DTO/文档描述，明确 `current_month_usage_mb` 是自然月口径
- [x] 4.2 在文档中明确 `last_gateway_reading_mb` 用于运营商周期累计口径展示

## 5. 回归与验收

- [x] 5.1 手动回归轮询与手动刷新两条链路，确认扣减逻辑一致
- [x] 5.2 用 PostgreSQL MCP 复核关键数据：`tb_iot_card.last_gateway_reading_mb` 与 `tb_package_usage.data_usage_mb` 变化符合预期
- [x] 5.3 执行 `openspec status --change fix-traffic-deduction-on-device-card`，确认提案进入可执行状态

> 说明：2.3、3.3、5.1、5.2 由用户手动验证并确认通过。
