# 中間サーバ連携基盤（参照実装）

地方公共団体情報システムの標準化において、各標準準拠システムは単独で完結せず、**中間サーバ**を介して情報連携します。本パッケージは、その中間サーバが担う中核機能を学習・検証用に再現した参照実装です。

## 体現しているモデル

- **宛名番号による名寄せ** — 住民を宛名番号で一意に識別し、どの機関（システム）がその人の記録を保有しているかを束ねます。
- **機関別符号** — 宛名番号と機関から導出した不可逆の符号で連携します。**マイナンバーは保持も伝送もしません**（符号同士の突合で名寄せ）。
- **別表に基づく情報照会** — 事務ごとに照会できる特定個人情報の範囲（別表）を定義し、許可された組合せのみ提供。範囲外は拒否します。
- **連携ログ** — 照会・提供・拒否のすべてを時系列で記録（監査）。

## 起動

```bash
npm start          # → http://localhost:4290
```

ブラウザでダッシュボードを開くと、名寄せ／情報照会デモ／別表／連携ログを確認できます。
「情報照会デモ」では、たとえば *国民健康保険資格賦課事務* が *地方税* の所得金額を照会する流れと、範囲外要求が拒否される様子を実演できます。

## API（抜粋）

| メソッド | パス | 説明 |
|---|---|---|
| GET | `/api/health` | ヘルスチェック |
| GET | `/api/v1/residents` | 宛名番号一覧（名寄せ） |
| GET | `/api/v1/residents/:atena` | 名寄せ詳細（保有機関・機関別符号・保有情報） |
| GET | `/api/v1/link-definitions` | 別表（事務×照会可能情報） |
| POST | `/api/v1/query` | 情報照会（別表で可否判定→提供／拒否、ログ記録） |
| POST | `/api/v1/provide` | 副本登録（機関が保有情報を中間サーバへ提供） |
| GET | `/api/v1/audit` | 連携ログ |

### 機関認証

照会（`/api/v1/query`）と副本登録（`/api/v1/provide`）は **`X-Agency-Token` ヘッダ必須**です（無し/不一致は 401）。
トークンは環境変数 `CHUUKAN_AGENCY_TOKEN`（既定 `demo-linkage-token`）。業務システム側はバックエンドだけがこのトークンを保持し、ブラウザには渡しません（参照実装では全機関共通の1トークン。実運用の機関ごとの証明書・専用線接続に相当する部分の簡易代替です）。

### 照会の例

```bash
curl -X POST http://localhost:4290/api/v1/query \
  -H 'content-type: application/json' -H 'x-agency-token: demo-linkage-token' \
  -d '{"requester":"kokuho","atena":"10000001","holder":"tax","item":"所得金額","purpose":"国民健康保険資格賦課事務"}'
```

### 業務システムからの実配線

国保・介護・後期高齢・児童手当・生活保護の各システムは、算定画面の「中間サーバ照会」パネルから本サーバへ実際に照会します（業務システムのバックエンドが `CHUUKAN_BASE`（既定 `http://localhost:4290`）へ転送）。取得値は算定フォームへ自動反映されます。

## 位置づけ・免責

参照実装（モック）です。実際の中間サーバ・情報提供ネットワークシステムの仕様・セキュリティ要件を満たすものではありません。マイナンバーや実在の個人情報は扱わず、収録データはすべて架空です。ライセンスは MIT。
