{
  "has_more": false,
  "issues": [
    {
      "assignee_id": "f1b21d73-ee6a-42a5-8db8-4d91424dfae8",
      "assignee_type": "squad",
      "created_at": "2026-06-03T15:59:55Z",
      "creator_id": "2e7bc302-5016-48b6-a4b9-728e720ec622",
      "creator_type": "agent",
      "description": "## 背景\n\n数据库模型 `backend/app/models/order.py` 中 `exchange_rate = Column(Numeric(8, 4), nullable=False)`。理论上不应存在 NULL，但前端代码 18 处 `|| X` 的防御性编程说明历史上可能存在空值。\n\n## 任务\n\n### 1. 数据体检 SQL（先在只读副本执行）\n\n```sql\n-- 总览\nSELECT\n  COUNT(*)                                              AS total_orders,\n  COUNT(exchange_rate)                                  AS non_null,\n  COUNT(*) - COUNT(exchange_rate)                       AS null_count,\n  MIN(exchange_rate)                                    AS min_rate,\n  MAX(exchange_rate)                                    AS max_rate,\n  AVG(exchange_rate)                                    AS avg_rate,\n  PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY exchange_rate) AS median\nFROM orders;\n\n-- 异常范围\nSELECT id, order_number, exchange_rate, created_at, status\nFROM orders\nWHERE exchange_rate IS NULL\n   OR exchange_rate \u003c 6.0\n   OR exchange_rate \u003e 8.0\nORDER BY created_at DESC\nLIMIT 200;\n\n-- 按月分布（看是否是历史某次事故）\nSELECT DATE_TRUNC('month', created_at) AS month,\n       COUNT(*) FILTER (WHERE exchange_rate IS NULL) AS nulls,\n       COUNT(*) AS total\nFROM orders\nGROUP BY 1\nORDER BY 1;\n```\n\n### 2. 如果发现 NULL 数据\n\n- **不要直接 UPDATE** — 需要人工审查\n- 生成 Excel 报告：`order_number, created_at, status, current_exchange_rate, action, reason`\n- 通知产品/运营决定如何补值：\n  - 按订单创建日的 BOC 钞买价回填\n  - 按当前默认 7.20 回填\n  - 标记为需要人工处理\n\n### 3. 如果发现 \u003c 6.0 或 \u003e 8.0 的异常值\n\n- 几乎可以肯定是数据错误（正常 CNY/USD 不会到这个区间）\n- 列出前 50 条供产品确认\n- 修复方案需审批，不在本 issue 内执行\n\n## 验收\n\n- 输出体检报告（markdown + CSV 附件）\n- 异常数据清单（如有）\n- 不在本 issue 内做修改，只汇报\n\n## 阻塞\n\n需要生产/预发环境的只读 DB 访问权限。\n\n## 关联\n\n- 父 issue：FET-134\n- 前置：FET-143（前端默认值统一）\n- 后续：FET-后端API化（待创建）",
      "due_date": null,
      "id": "aaef7299-380e-4b84-9612-bace1823ea8f",
      "identifier": "FET-144",
      "labels": [],
      "metadata": {
        "blocked_reason": "需要生产数据库只读访问权限（本地备份数据14条订单已审计，未发现异常）",
        "deliverables": "审计脚本、文档、前端代码分析",
        "pr_number": 256,
        "pr_url": "https://github.com/martinyyang/fetch-china/pull/256"
      },
      "number": 144,
      "parent_issue_id": "e2645f7d-c3ed-426d-a290-538c64e12f61",
      "position": -1,
      "priority": "high",
      "project_id": "51ec32b5-848a-496c-a573-1006cb2ec058",
      "start_date": null,
      "status": "blocked",
      "title": "数据审计：检查 orders 表 exchange_rate 异常数据",
      "updated_at": "2026-06-17T18:02:59Z",
      "workspace_id": "b5fdce19-2a82-455d-b644-5b83da2b3078"
    }
  ],
  "limit": 50,
  "offset": 0,
  "total": 1
}
