# 订单管理日期偏一天 + 金额数据源修复（2026-09-07）

> 对应前端铁律 #104（SKILL.md 已超 100KB 无法内联，详细内容放这里）

## 根因1：toISOString() 时区偏移（日期偏 -1 天）

**症状**：订单管理「本周/本月/本季/本年」日期范围偏一天（「本月」显示 8/31~9/7，正确应为 9/1~9/7）。

**根因**：`range.start.toISOString().slice(0,10)` 用 **UTC** 时间取日期，中国时区 UTC+8，本地 00:00 被 -8h 倒退回前一天（9/1 00:00 CST = 8/31 16:00 UTC → 显示 8/31）。

**影响面**：全站所有 `new Date().toISOString().slice(0,10)` 取日期的地方都偏一天——日期范围显示、默认日期、客诉「本周新增」过滤、文件名。连 `today()` 函数本身若这么写（`var today = function(){ return new Date().toISOString().slice(0,10); }`）也错。

**修复**：本地时间格式化，禁用 toISOString 取日期：
```javascript
function fmtDate(d){ return d.getFullYear()+'-'+String(d.getMonth()+1).padStart(2,'0')+'-'+String(d.getDate()).padStart(2,'0'); }
```
- 取「今天」用 `fmtDate(new Date())`；取指定 Date 用 `fmtDate(d)`
- 存时间戳的完整 `toISOString()`（无 slice）是 UTC 标准做法，**保留不改**
- YYYY-MM-DD 字符串字典序比较日期范围安全（`'2026-09-01' >= periodStart`）

## 根因2：订单管理金额数据源（MCP 金额 74% 为 0）

**症状**：周/月/季/年金额严重偏低。

**根因**：MCP 订单 `金额` 字段 **74% 为 0**（生命科学部订单 90% 为 0；「MCP 拉单金额恒 0」是已知 Pitfall）。订单管理金额统计用了这个 0 金额。

**修复**：金额统计改用 ERP 数据（权威金额源）：
- `脚本/erp_sales_core.py` 新增 `aggregate_daily()`：按天 + 按客户按月聚合，口径 = 标准销售订单 + 已审核 + 非赠品 + 剔除宝锐系
- `脚本/refresh_erp_amount.py`：生成 `数据/erp_amount.json`（daily / monthly / customer_monthly）
- 前端 `renderOrders`：taxTotal 和客户Top5 从 `state.data.erpAmount` 聚合（`_d >= periodStart && _d <= periodEnd`），移除 MCP 金额统计和 KPI 兜底
- `cb_sync.sh` 纳入 `refresh_erp_amount.py`，`FILES` 加 `数据/erp_amount.json`

## 根因3：新版 ERP 合同日期带时间

新版 ERP 导出的合同日期是字符串 `'2026-09-07 00:00:00'`（带时间），旧版是 Excel 日期序列号。`ser2date` 若不截断，`aggregate_daily` 的 daily key 会带时间，导致前端字符串边界比较（periodEnd 当天被排除）出错。

**修复**：`ser2date` 末尾 `split(' ')[0]` 截断时间 + `replace('/','-')` 兼容斜杠格式。

## 铁律：ERP 文件必须是「全年到最新日期」导出

增量文件（如 `销售订单_20260901-07.xlsx` 只含几天）会被 `find_latest_erp()`（按 mtime 取最新）误选，丢失 1-8 月历史数据。提醒用户上传全年导出（如 `销售订单_20260101-20260907.xlsx`）。
