# wsshee 数据库 schema · 4 站分析模型 CSV 导出

> 参照 [`/Users/grace/18_go/construciton-wwz/wsshee/sql/001_schema.sql`](../../../../../wsshee/sql/001_schema.sql) 表结构
> 姊妹参考：[../README.md](../README.md) · [../model.md](../model.md)
> 生成日期：2026-07-20 10:00:00+00

## 5 张表 · 5 份 CSV

| 表 | 行数 | CSV | 说明 |
|---|---:|---|---|
| `projects` | 4 | [projects.csv](projects.csv) | 4 个吉国光伏工程 (id 1001-1004) |
| `project_scenarios` | 4 | [project_scenarios.csv](project_scenarios.csv) | 每工程 1 个"基准方案 · 5+3 免税" (id 2001-2004) |
| `project_params` | 20 | [project_params.csv](project_params.csv) | 每方案 5 模块：basic / funding / cost_solar / revenue_solar / tax (id 3001-3020) |
| `calc_results` | 20 | [calc_results.csv](calc_results.csv) | 每方案 5 sheet：project_cashflow / capital_cashflow / income_statement / loan_repayment / sensitivity (id 4001-4020) |
| `calc_indicators` | 96 | [calc_indicators.csv](calc_indicators.csv) | 每方案 24 KPI (id 5001-5096) |

## 主外键关系

```
projects (id 1001-1004)
  ↓ project_id
project_scenarios (id 2001-2004, is_baseline=true)
  ↓ scenario_id
  ├── project_params (id 3001-3020, 5 modules per scenario)
  ├── calc_results (id 4001-4020, 5 sheets per scenario, JSONB results)
  └── calc_indicators (id 5001-5096, 24 KPIs per scenario)
```

## ID 段分配（避开 wsshee 现有 demo 数据 1-999）

- projects.id: **1001-1004** — KGZ_BATKEN_100 / KGZ_ISSYK_300 / KGZ_KADAM_500 / KGZ_TOKTO_500
- project_scenarios.id: **2001-2004**
- project_params.id: **3001-3020**
- calc_results.id: **4001-4020**
- calc_indicators.id: **5001-5096**

## 直接导入 PostgreSQL

```bash
# 假设已 make db-init 完成 wsshee 数据库
cd /Users/grace/18_go/construciton-wwz/吉尔吉斯/1.投资人文件/wsshee/db_csv

psql -h localhost -p 5434 -U wsshee_user -d wsshee <<EOF
BEGIN;
\copy projects (id, name, name_en, description, country, currency, base_lang, status, owner_id, tags, source, created_at, updated_at, external_id) FROM 'projects.csv' WITH (FORMAT csv, HEADER true);
\copy project_scenarios FROM 'project_scenarios.csv' WITH (FORMAT csv, HEADER true);
\copy project_params FROM 'project_params.csv' WITH (FORMAT csv, HEADER true);
\copy calc_results FROM 'calc_results.csv' WITH (FORMAT csv, HEADER true);
\copy calc_indicators FROM 'calc_indicators.csv' WITH (FORMAT csv, HEADER true);
COMMIT;
EOF
```

> 注：projects.csv 有一个额外字段 `external_id`（KGZ_BATKEN_100 等），需在导入前 `ALTER TABLE projects ADD COLUMN external_id VARCHAR(64);` 或改用 [../wsshee_seed.sql](../wsshee_seed.sql) 完整 SQL 导入方式（推荐）。

## 与其他交付物的关系

| 交付物 | 用途 | 格式 |
|---|---|---|
| [../README.md](../README.md) + [../model.md](../model.md) + [../model.html](../model.html) | 人类阅读 | md + html |
| [../wsshee_seed.sql](../wsshee_seed.sql) | 直接 psql 导入 wsshee | SQL |
| **本目录 5 份 CSV** | **表结构对齐的中间数据**，可直接对比/差分/迁移 | **CSV** |
| [../../pv-decision/](../../pv-decision/) | pv-decision 系统兼容格式 | CSV + SQL |
| [../../光伏4站_经济价值评估.md](../../光伏4站_经济价值评估.md) | 顶层评估报告 | md + html |

## 表字段对照

### projects
`id`, `name`, `name_en`, `description`, `country`, `currency`, `base_lang`, `status`, `owner_id`, `tags` (JSONB), `source`, `created_at`, `updated_at`

### project_scenarios
`id`, `project_id` (FK), `name`, `description`, `is_baseline`, `created_by`, `created_at`

### project_params
`id`, `scenario_id` (FK), `module` (basic/funding/...), `params` (JSONB), `updated_by`, `updated_at`

### calc_results
`id`, `scenario_id` (FK), `sheet` (project_cashflow/...), `results` (JSONB), `calculated_at`, `version`

### calc_indicators
`id`, `scenario_id` (FK), `indicator_key` (irr_project_pretax/...), `indicator_name`, `indicator_value`, `unit`, `calculated_at`
