09Section
データモデル
主要エンティティとその関係。AI 管制塔が消費する形に正規化されている。
6.1 主要エンティティ
| エンティティ | 概要 | 主キー |
|---|---|---|
| Product (商品) | ブランド × 型番で一意なカタログ商品。複数 SupplyOffer を持つ | product_id |
| SupplyOffer (調達オファー) | 本国卸 × 商品 × 価格 × 在庫 × 納期。日次更新 | offer_id |
| Vendor (卸 / 業者) | 本国卸・物流・通関・職人など、サプライチェーン上の事業者 | vendor_id |
| Member (顧客) | 個人顧客 / プロ顧客。Tenant (法人) と紐付く | member_id |
| Tenant (法人) | プロ向けの会社 / 事務所単位の組織 | tenant_id |
| Order (注文) | 顧客が確定した買付。複数 OrderItem を持つ | order_id |
| OrderItem (注文明細) | 商品 × 数量 × 調達オファー × 配送先 × 設置設定 | order_item_id |
| Shipment (出荷) | コンソリ便単位の荷物。複数 OrderItem を持つ | shipment_id |
| MilestoneEvent (進捗イベント) | OrderItem の状態変化 (発注 / 出荷 / 通関 / 配送 / 設置) | event_id |
| Karte (デジタル・カルテ) | 家具 1 台ごとのデジタル証明。OrderItem に 1:1 | karte_id |
| RepairRequest (修理依頼) | Karte に紐付く修理 / 張替えのジョブ | repair_id |
| ResaleListing (リセール出品) | Karte に紐付く委託販売出品 | resale_id |
| Project (プロジェクト) | プロ顧客の案件。複数 Order をグループ化 | project_id |
| ScoringSnapshot | 業者 / 職人のスコア (時系列) | snapshot_id |
6.2 主要関係 (簡易 ER)
Tenant ──┐
│ 1:N
Member ──┴──< Project ──< Order ──< OrderItem ──1:1── Karte
│ │
│ ├── RepairRequest (1:N)
│ └── ResaleListing (0:N)
│
└── SupplyOffer >── Product
│
└── Vendor
Vendor ──< ScoringSnapshot (時系列)
Shipment ──>< OrderItem (M:N: 1 出荷に複数明細)
OrderItem ──< MilestoneEvent (時系列)6.3 Product / SupplyOffer (動的価格の核)
Product
| Field | Type | 説明 |
|---|---|---|
| product_id | UUID | 内部一意 |
| brand | Brand | Cassina / B&B Italia 等 |
| model_code | string | メーカー型番 |
| name | string | 製品名 |
| category | enum | sofa / chair / table / lighting / storage / ... |
| attrs | jsonb | 素材 / カラー / サイズ / オプション |
| msrp_jpy | int | 国内正規参考価格 (円) |
| retail_eu_eur | int | 本国小売参考価格 (EUR) |
SupplyOffer
| Field | Type | 説明 |
|---|---|---|
| offer_id | UUID | 内部一意 |
| product_id | FK | Product への参照 |
| vendor_id | FK | Vendor (卸) |
| price_eur | decimal | 卸価格 (EUR、含税前) |
| lead_time_days | int | 本国卸出荷までの日数 |
| stock_qty | int | 在庫数 (廃業在庫の場合は希少) |
| conditions | jsonb | 最低発注数、決済条件、返品条件 |
| scored_at | timestamp | スコアリング時刻 |
| composite_score | float | AI 算出の総合スコア (価格 + 信用 + 納期) |
価格決定アルゴリズム
顧客が注文した瞬間に、SupplyOffer の `composite_score` を再計算 (リアルタイム為替 + 在庫変動 + 卸の信用度) し、最良の offer を確定。表示価格は 本国卸価格 EUR × 為替 + 通関 + 物流 + マージン の合算。マージンは商品カテゴリと顧客層で動的に変動。
6.4 Karte (デジタル・カルテ)
家具 1 台ごとに発行される一意のデジタル証明。Phase 2 で NFT 化を検討。
| Field | Type | 説明 |
|---|---|---|
| karte_id | UUID | 一意 ID (公開可能なシリアル) |
| order_item_id | FK | 対応する注文明細 |
| vendor_chain | jsonb | 本国卸 → 物流 → 通関 → 国内 → 設置の全業者ログ |
| photos | jsonb[] | 製造・通関・設置時の写真 |
| documents | jsonb[] | 通関書類 / 保証書 / 製造証明 |
| repair_history | jsonb[] | 修理・パーツ交換履歴 |
| estimated_resale_jpy | int[] | 3 年後・5 年後・10 年後の想定買取価格 |
| issued_at | timestamp | 発行日 |
6.5 MilestoneEvent (進捗イベント)
OrderItem の状態変化を時系列で蓄積。顧客の進捗追跡画面の元データ。
| Stage | 説明 | Vendor |
|---|---|---|
| order_confirmed | 注文確定 | 社内 |
| supplier_ordered | 本国卸に発注送信 | 本国卸 |
| supplier_shipped | 本国卸が出荷 | 本国卸 |
| hub_received | 欧州集約倉庫に到着 | 3PL (独・伊) |
| consolidated | コンソリ便に積込済 | 物流 |
| in_transit | 海上輸送 / 航空輸送中 | 物流 |
| customs_cleared | 日本通関完了 | 通関業者 |
| domestic_warehouse | 国内倉庫に到着 | 国内 WMS |
| delivered | 顧客宅に配送 | 配送業者 |
| installed | 設置完了 (カルテ発行) | 設置班 |