---
sidebar_position: 5
title: "注文とプロビジョニング（詳細）"
---

# 注文とプロビジョニング（詳細ガイド）

注文作成からフルフィルメントまでの詳細な技術フローを説明します。

## 注文作成フロー

### チェックアウトセッション

- ユーザーがプランを設定すると、チェックアウトセッションがサーバーサイドで構築されます
- セッションには選択されたプラン、アドオン、設置オプション、すべての設定詳細が含まれます
- セッションには有効期限があり、長時間経過すると設定プロセスのやり直しが必要

### 事前検証

1. ユーザーにWHMCSクライアントマッピングが存在すること
2. WHMCSに少なくとも1つの支払い方法が存在すること
3. インターネット注文の場合、WHMCSにアクティブなインターネットサービスがないこと
4. 在留カードが提出済み（SubmittedまたはVerified）であること

### Salesforce Order構造

**Orderオブジェクトフィールド：**

| フィールド | API名 | 値 |
| --- | --- | --- |
| AccountId | `AccountId` | IDマッピングから |
| Status | `Status` | "Draft" |
| Type | `Type__c` | Internet / SIM / VPN |
| EffectiveDate | `EffectiveDate` | 本日の日付 |
| Pricebook2Id | `Pricebook2Id` | ポータル価格表ID |

**OrderItemレコード：**
- Salesforce Composite API経由で作成
- 各SKUに対してPricebookEntryIdからカタログ検索
- UnitPriceとQuantityを価格表から設定

### 住所スナップショット

注文には注文時点の住所が保存されます。後でプロフィールの住所が変更されても、注文の住所は変わりません。

## フルフィルメントプロセス

### トリガー

- Salesforce CDCが注文ステータスの変更を検出（例：「Approved」「Reactivate」）
- イベントがBFFのプロビジョニングキュー（BullMQ）に送信
- べき等キーによる重複処理防止

### プロビジョニングステップ

1. Salesforce `Activation_Status__c` = "Activating" に更新
2. Salesforce OrderItemsをWHMCS商品にマッピング
3. WHMCS `AddOrder` APIアクションを呼び出し：WHMCS注文、請求書、サブスクリプションレコードを作成
4. SIM注文の場合：FreebitアクティベーションAPIを呼び出し
5. SalesforceをWHMCS Order ID、Activation Status、エラー情報で更新
6. 注文キャッシュを無効化
7. UI ライブ更新用のリアルタイムイベントを公開

### 分散トランザクション

フルフィルメントはロールバック付きの分散トランザクションパターンを使用：
- Salesforceステータス更新後にWHMCS作成が失敗 → Salesforceステータスをロールバック
- WHMCSに部分的な注文は残りません

### エラー処理

| シナリオ | 動作 |
| --- | --- |
| 支払い方法不足 | Salesforceに`PAYMENT_METHOD_MISSING`で一時停止 |
| WHMCS APIエラー | 失敗としてマーク、Salesforceステータスをロールバック |
| Freebitエラー | 失敗としてマーク、エラーをSalesforceに記録 |
| 一時的エラー | BullMQキューでバックオフ付きリトライ |

## リアルタイム注文追跡

- 顧客は注文イベントストリーム（SSE）に接続可能
- Salesforceでステータスが変更されると、UIが手動更新なしで自動更新
- 注文詳細ページはServer-Sent Events経由でライブ接続を維持
