> ## Documentation Index
> Fetch the complete documentation index at: https://worldmonitor-spike-bun-package-manager.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 贸易政策

> 六标签页贸易政策综合面板，涵盖出口限制措施、关税趋势、双边贸易流、非关税壁垒、美国海关收入以及双边 Comtrade 商品流数据，帮助分析师从多个维度追踪保护主义走向、评估全球供应链风险敞口，并为宏观经济情报、贸易战研判与关税敏感行业的投资与合规决策提供数据支撑。

**Trade Policy** 面板（内部 id `trade-policy`）是仪表盘上获取实时贸易政策上下文的首选面 — 什么正在被限制、关税走向如何、流如何变化、存在哪些壁垒，以及美国海关收入如何作为关税传导的实时信号。

## 面板显示内容

一个数据密集型面板（`defaultRowSpan: 2`）的六个标签页：

| 标签页 id         | 显示内容                                                 |
| -------------- | ---------------------------------------------------- |
| `restrictions` | 活跃贸易限制 — 挂载时的默认标签页。                                  |
| `tariffs`      | 关税趋势（`TariffDataPoint[]`）和 `EffectiveTariffRate` 序列。 |
| `flows`        | 商品贸易流，申报国对世界（World） — `GetTradeFlowsResponse`。       |
| `barriers`     | 非关税壁垒 — `GetTradeBarriersResponse`。                  |
| `revenue`      | 美国财政部海关收入 — 月度数据，附 FYTD 同比比较和峰值高亮。                   |
| `comtrade`     | 完整 Comtrade 双边流搜索 — `ListComtradeFlowsResponse`。     |

`TabId` 是联合类型 `'restrictions' | 'tariffs' | 'flows' | 'barriers' | 'revenue' | 'comtrade'`（`src/components/TradePolicyPanel.ts:17`）。

面板 id 为 `trade-policy`；规范组件为 `src/components/TradePolicyPanel.ts`。标题从 i18n 解析（`panels.tradePolicy`）。

## 如何访问

* **Cmd+K**：输入 *trade*、*tariff* 或 *customs*。
* **按变体的可用性**：在 **full/geopolitical**（`priority: 1`）、**finance**（`priority: 1`）和 **commodity**（`priority: 1`）变体中注册并默认启用。在 tech 或 happy 变体中不存在。来源：`src/config/panels.ts` 中 `FULL_PANELS`、`FINANCE_PANELS`、`COMMODITY_PANELS` 的 `'trade-policy'` 条目。

## 数据来源

来自 `@/services/trade` 的六种响应形状，均由 `TradeService` 中生成的 sebuf REST RPC 支持。面板外壳免费；关税趋势与 Comtrade 调用使用 `premiumFetch`，因为这两条路径是付费传输路径，而限制、流、壁垒与海关收入使用公开客户端。海关收入还会在回退到 RPC 之前检查 bootstrap 缓存键 `customsRevenue`。

| 标签页            | 方法 + 路由                                    | 支撑内容                                          |
| -------------- | ------------------------------------------ | --------------------------------------------- |
| `restrictions` | `GET /api/trade/v1/get-trade-restrictions` | WTO 限制列表，含国家过滤器与上游不可用状态。                      |
| `tariffs`      | `GET /api/trade/v1/get-tariff-trends`      | 付费 MFN 适用关税率时间序列（WTO `TP_A_0010`，按申报国）。       |
| `flows`        | `GET /api/trade/v1/get-trade-flows`        | 商品贸易流行与同比上下文，申报国对世界（World）。                   |
| `barriers`     | `GET /api/trade/v1/get-trade-barriers`     | 按国家或措施类型筛选的 SPS/TBT 壁垒通报。                     |
| `revenue`      | `GET /api/trade/v1/get-customs-revenue`    | 美国财政部海关关税收入；bootstrap 优先，通过 `customsRevenue`。 |
| `comtrade`     | `GET /api/trade/v1/list-comtrade-flows`    | 付费 UN Comtrade 战略商品流搜索，含异常标志。                 |

`revenue` 标签页的美国财政部数据源特别敏感 — 请参见更新日志中 "US Treasury customs revenue in Trade Policy panel" 条目（`#1663`）。

### 贸易流覆盖范围

`get-trade-flows` 完全由 Railway 种子数据提供服务，请求时从不调用 WTO。种子中包含的内容就是全部受支持的空间：

* **申报国（reporter）** — WTO `/reporters` 端点公布的任意 3 位 UN M49 代码。为空时默认为 `840`（美国）。
* **伙伴国（partner）** — 仅 `000`（世界）。支撑这些数据行的 WTO 指标 `ITS_MTV_AX` 与 `ITS_MTV_AM` 只发布世界总计，对任何具名伙伴国均返回 HTTP 204，因此无法获得任何双边组合。为空时默认为 `000`。
* **年数（years）** — `1`–`30`，包含首尾两端（`years=10` 返回 11 个日历年）。种子按申报国保存完整的 30 年窗口，由处理器切片，因此所有回溯窗口都由同一次抓取提供服务。`0` 表示使用默认值 `10`。

格式错误的代码或超出范围的 `years` 会返回 HTTP 400，而不是被默认值静默替换。种子无法回答的合法请求会返回空 `flows` 以及来自封闭词汇表的 `unavailableReason`，从而将覆盖缺口与故障区分开：

`unavailableReason` 是 `TradeFlowUnavailableReason` 枚举，因此该封闭集合可直接从 OpenAPI schema 中发现，而不仅存在于文字说明中。取值均以 `TRADE_FLOW_UNAVAILABLE_REASON_` 为前缀：

| 后缀                  | `upstreamUnavailable` | 含义                                   |
| ------------------- | --------------------- | ------------------------------------ |
| `UNSPECIFIED`       | `false`               | 正常返回数据行。                             |
| `NOT_COVERED`       | `false`               | 请求合法，但该申报国/伙伴国组合不在种子覆盖范围内。并非故障，重试无用。 |
| `SEED_MISSING`      | `true`                | 该组合在覆盖范围内，但其缓存条目已丢失。                 |
| `COVERAGE_UNKNOWN`  | `true`                | 无法读取覆盖清单，因此无法排除上述两种情况。               |
| `CACHE_UNAVAILABLE` | `true`                | 缓存读取本身失败。                            |
| `INVALID_REQUEST`   | `false`               | 代码格式错误（仅在绕过请求校验时可达）。                 |

整体覆盖情况通过 `/api/health` 中的 `tradeFlows` 条目发布，其 `records` 计数为实际种子化的申报国/世界组合数量；数量不足时读作 `COVERAGE_PARTIAL`，而种子器停止运行时读作 `STALE_SEED`。

### 关税趋势覆盖范围

`get-tariff-trends` 同样由种子数据提供服务（付费路径）。Railway 种子器预抓取 WTO MFN 适用平均关税率（`TP_A_0010`），本 API 对该历史做切片服务 — 请求时从不调用 WTO。

* **申报国（reporter）** — WTO `/reporters` 端点公布的任意 3 位 UN M49 代码。为空时默认为 `840`（美国）。
* **伙伴国（partner）** — 为向前兼容而接受；`TP_A_0010` 是申报经济体的 MFN 适用平均关税率，**没有伙伴国维度**，因此该字段不会改变答案。
* **产品部门（product\_sector）** — 为空或 `all` 时选择“全部产品”合计，这是当前唯一被覆盖的部门。任何其他值返回 `NOT_COVERED`。
* **年数（years）** — `1`–`30`，包含首尾两端（`years=10` 返回 11 个日历年）。种子按申报国保存完整的 30 年窗口，由处理器切片。`0` 表示使用默认值 `10`。

格式错误的代码或超出范围的 `years` 会返回 HTTP 400，而不是被静默替换为 `840` / `10`。种子无法回答的合法请求会返回空 `datapoints` 以及来自 `TariffTrendUnavailableReason` 枚举的 `unavailableReason`（前缀 `TARIFF_TREND_UNAVAILABLE_REASON_`）：

| 后缀                  | `upstreamUnavailable` | 含义                        |
| ------------------- | --------------------- | ------------------------- |
| `UNSPECIFIED`       | `false`               | 正常返回数据点。                  |
| `NOT_COVERED`       | `false`               | 请求合法，但该申报国/部门组合不在种子覆盖范围内。 |
| `SEED_MISSING`      | `true`                | 该申报国在覆盖范围内，但其缓存条目已丢失。     |
| `COVERAGE_UNKNOWN`  | `true`                | 无法读取覆盖清单。                 |
| `CACHE_UNAVAILABLE` | `true`                | 缓存读取本身失败。                 |
| `INVALID_REQUEST`   | `false`               | 代码格式错误（仅在绕过请求校验时可达）。      |

整体覆盖情况通过 `/api/health` 中的 `tariffTrendsUs` 条目发布（系列名沿用历史命名；探测目标为舰队级 `seed-meta:trade:tariffs` 记录）。低于最小记录数时读作 `COVERAGE_PARTIAL`，种子器停止运行时读作 `STALE_SEED`。

## 刷新频率

挂载和标签页切换时按标签页获取；无轮询。上游种子器按各数据集的不同频率运行（关税每日，Comtrade 每月）。

## 层级与门控

**面板外壳免费。** 变体注册中无 `premium` 标志。生成的 REST 服务是混合的：限制、流、壁垒与海关收入为公开；`get-tariff-trends` 与 `list-comtrade-flows` 为付费 RPC 路径，在无授权会话或 API 密钥时降级为空数据。

## API 参考

* [Trade service](https://github.com/koala73/worldmonitor/blob/main/docs/api/TradeService.openapi.yaml) — 六个标签页支持 RPC 的完整 schema 与查询参数。
