← ドキュメント一覧に戻る 1. 文書管理情報 項目 内容 文書名 機能仕様書(Functional Specification) 対象システム 保険リードマーケットプレイス バージョン v1.0.0 作成日 2026-03-18 最終更新日 2026-03-18 ステータス 承認済み 作成者 開発チーム 承認者 プロダクトオーナー
本文書の目的: 保険リードマーケットプレイスの全機能仕様を定義し、API設計・状態遷移・スコアリングロジック・価格算出・WebSocketイベント・エラーハンドリング・認可制御を網羅的に記述します。 開発チーム・QAチーム・ステークホルダー間の共通認識を確立することを目的とします。
2. API設計 本システムのAPIはRESTfulアーキテクチャに準拠し、JSON形式でリクエスト/レスポンスを行います。 認証にはJWT(JSON Web Token)を使用し、アクセストークン(有効期限15分)とリフレッシュトークン(有効期限7日)の二重トークン方式を採用します。 一覧取得APIにはカーソルベースのページネーションを実装し、大量データの効率的な取得を可能にします。
共通ヘッダー: Authorization: Bearer <access_token>Content-Type: application/jsonX-Request-ID: <uuid>(トレーサビリティ用)
ページネーション(カーソル方式): リクエスト: ?cursor=<encoded_cursor>&limit=20 レスポンス: { "data": [...], "nextCursor": "...", "hasMore": true }
2.1 認証 API(Auth) Method Path 説明 認証 許可ロール POST /api/auth/loginログイン(JWT発行) No - POST /api/auth/register新規ユーザー登録 No - POST /api/auth/refreshアクセストークン再発行 Yes ALL POST /api/auth/mfa/verifyMFA二段階認証コード検証 Yes ALL
2.2 リード API(Leads) Method Path 説明 認証 許可ロール GET /api/leadsリード一覧取得(カーソルページネーション) Yes ADMIN, AGENT POST /api/leadsLP経由リード登録(顧客送信) No - GET /api/leads/:idリード詳細取得 Yes ADMIN, AGENT GET /api/leads/:id/scoreスコアリング結果取得 Yes ADMIN
2.3 オークション API(Auctions) Method Path 説明 認証 許可ロール GET /api/auctionsオークション一覧取得 Yes ADMIN, AGENT GET /api/auctions/activeアクティブオークション一覧 Yes ADMIN, AGENT GET /api/auctions/:idオークション詳細取得 Yes ADMIN, AGENT POST /api/auctions/:id/bid入札実行 Yes AGENT POST /api/auctions/:id/instant-buy即時購入実行 Yes AGENT
2.4 案件 API(Cases) Method Path 説明 認証 許可ロール GET /api/cases案件一覧取得 Yes ADMIN, AGENT GET /api/cases/:id案件詳細取得 Yes ADMIN, AGENT PATCH /api/cases/:id/status案件ステータス更新 Yes ADMIN, AGENT POST /api/cases/:id/contact-log対応履歴追加 Yes AGENT
2.5 返金 API(Refunds) Method Path 説明 認証 許可ロール POST /api/refunds返金リクエスト作成 Yes AGENT GET /api/refunds返金リクエスト一覧取得 Yes ADMIN, AGENT PATCH /api/refunds/:id/review返金リクエスト承認/却下 Yes ADMIN
2.6 請求 API(Billing) Method Path 説明 認証 許可ロール GET /api/invoices請求書一覧取得 Yes ADMIN, AGENT GET /api/invoices/:id請求書詳細取得 Yes ADMIN, AGENT POST /api/billing/setup-intentStripe SetupIntent作成(カード登録) Yes AGENT
2.7 管理 API(Admin) Method Path 説明 認証 許可ロール GET /api/admin/settingsシステム設定取得 Yes ADMIN PATCH /api/admin/settingsシステム設定更新 Yes ADMIN GET /api/admin/statsダッシュボード統計取得 Yes ADMIN
3. 状態遷移図 各エンティティのライフサイクルをステートマシンとして定義します。 不正な遷移が要求された場合は HTTP 409 Conflict を返却します。
3.1 リードステータス(Lead Status) [NEW]
|
| スコアリング完了 & オークション作成
v
[IN_AUCTION]
|
+--- 落札者確定 -----------> [SOLD]
|
+--- 入札なし・期限切れ ---> [UNSOLD]
| |
| +--- 再出品(自動/手動)---> [IN_AUCTION]
|
+--- 管理者による無効化 ---> [INVALID] ステータス 説明 遷移先 NEW LP経由で登録直後。スコアリング処理待ち IN_AUCTION IN_AUCTION オークション出品中。入札受付中 SOLD, UNSOLD, INVALID SOLD 落札済み。案件(Case)が生成される (終了状態) UNSOLD 入札なしで終了。再出品可能 IN_AUCTION(再出品時) INVALID 管理者が無効と判定。重複・不正データ等 (終了状態)
3.2 オークションステータス(Auction Status) [SCHEDULED]
|
| 開始時刻到達
v
[ACTIVE]
|
+--- 終了3分前に入札あり ---> [EXTENDED](3分延長)
| |
| +--- 延長後に再入札 ---> [EXTENDED](再延長)
| |
| +--- 延長終了 ---------> [COMPLETED]
|
+--- 入札あり&時間終了 -----> [COMPLETED]
|
+--- 入札なし&時間終了 -----> [NO_BID]
| |
| +--- 自動再出品 -------> [SCHEDULED]
|
+--- 管理者取消 -------------> [CANCELLED] ステータス 説明 遷移先 SCHEDULED オークション予約済み。開始時刻待ち ACTIVE, CANCELLED ACTIVE オークション進行中。入札受付中 EXTENDED, COMPLETED, NO_BID, CANCELLED EXTENDED 終了間際の入札により3分延長中 EXTENDED(再延長), COMPLETED COMPLETED 落札者確定。最高額入札者が落札 (終了状態) NO_BID 入札ゼロで終了。再出品判定へ SCHEDULED(再出品時) CANCELLED 管理者により取消 (終了状態)
再出品ルール(NO_BID時): 1〜3回目: 同一価格で即時再出品(自動) 4回目: エントリー価格を10%値下げして再出品(自動) 5回目以降: 管理者による手動判断(再出品 or アーカイブ)
3.3 案件ステータス(Case Status) [NOT_CONTACTED]
|
| 初回連絡実施
v
[IN_PROGRESS]
|
+--- 連絡不通(3回以上)---> [UNREACHABLE]
| |
| +--- 返金申請 ---> [REFUND_REQUESTED]
|
+--- 面談実施 -------------> [MET]
| |
| +--- 成約/終了 ---> [CLOSED]
|
+--- 返金申請 -------------> [REFUND_REQUESTED]
| |
| +--- 承認 -------> [CLOSED](返金処理)
| |
| +--- 却下 -------> [IN_PROGRESS]
|
+--- 案件完了 -------------> [CLOSED] ステータス 説明 遷移先 NOT_CONTACTED 落札直後。まだ顧客への連絡未実施 IN_PROGRESS IN_PROGRESS 顧客対応中。連絡履歴を記録 UNREACHABLE, MET, REFUND_REQUESTED, CLOSED UNREACHABLE 3回以上連絡不通。返金申請可能 REFUND_REQUESTED, CLOSED MET 顧客と面談実施済み CLOSED REFUND_REQUESTED 返金申請中。管理者レビュー待ち CLOSED, IN_PROGRESS(却下時) CLOSED 案件完了(成約・返金・終了) (終了状態)
3.4 返金ステータス(Refund Status) [PENDING]
|
+--- 管理者承認 ---> [APPROVED](Stripe経由で返金処理)
|
+--- 管理者却下 ---> [REJECTED](理由通知) ステータス 説明 遷移先 PENDING 返金申請受付済み。管理者レビュー待ち APPROVED, REJECTED APPROVED 返金承認済み。Stripe経由で返金処理実行 (終了状態) REJECTED 返金却下。理由を申請者に通知 (終了状態)
4. スコアリングアルゴリズム詳細 LP経由で登録されたリードの品質を0〜100点で定量評価します。 スコアは3つのサブスコアの合計で算出され、オークションのエントリー価格に直接影響します。
計算式: totalScore = inputScore + temperatureScore + attributeScore 各サブスコアの上限: inputScore(40) + temperatureScore(30) + attributeScore(30) = 100
4.1 入力完全性スコア(inputScore: 0〜40点) フォーム入力の充実度を評価します。必須項目と任意項目の入力率、自由記述の文字数を考慮します。
評価項目 配点 算出方法 必須項目入力率 0〜20点 filledRequired / totalRequired * 20(全必須項目入力で20点満点) 任意項目入力率 0〜10点 filledOptional / totalOptional * 10(全任意項目入力で10点満点) 自由記述文字数 0〜10点 50文字未満: 2点 / 50〜100文字: 5点 / 100〜200文字: 8点 / 200文字以上: 10点
4.2 温度感スコア(temperatureScore: 0〜30点) 顧客の検討緊急度と相談方法から見込み度合いを評価します。
評価項目 値 スコア 検討緊急度 WITHIN_1_MONTH(1ヶ月以内) 30点 検討緊急度 WITHIN_3_MONTHS(3ヶ月以内) 20点 検討緊急度 NOT_URGENT(急ぎではない) 10点 相談方法ボーナス VISIT(来店相談希望) +5点 相談方法ボーナス ONLINE(オンライン相談希望) +3点 相談方法ボーナス PHONE(電話相談希望) +0点
上限制御: temperatureScore = min(urgencyScore + methodBonus, 30)
4.3 属性スコア(attributeScore: 0〜30点) 顧客の属性情報から商談成約の見込み度を評価します。
評価項目 値 スコア 年収レンジ 800万円以上 10点 年収レンジ 500〜800万円 7点 年収レンジ 300〜500万円 4点 年収レンジ 300万円未満 2点 家族構成 既婚・子あり 8点 家族構成 既婚・子なし 5点 家族構成 未婚 3点 住居状況 持ち家(ローンあり) 6点 住居状況 持ち家(ローンなし) 4点 住居状況 賃貸 3点 保険種別 生命保険 / 医療保険 / 学資保険 6点 保険種別 年金保険 5点 保険種別 損害保険 / その他 4点
上限制御: attributeScore = min(incomeScore + familyScore + housingScore + categoryScore, 30)
5. 価格算出ロジック リードのスコアと保険種別に基づき、オークションのエントリー価格・即時購入価格・入札単位を算出します。
5.1 エントリー価格(entryPrice) entryPrice = basePrice + score * scoreCoefficient * categoryMultiplier basePrice = 8,000円(固定基本価格) scoreCoefficient = 200円(スコア1点あたりの加算額) categoryMultiplier = 保険種別に応じた係数(下表参照)
5.2 カテゴリ乗数(categoryMultiplier) 保険種別 カテゴリコード 乗数 説明 生命保険 LIFE 1.0 標準倍率。基準カテゴリ 医療保険 MEDICAL 0.9 成約率がやや低いため減額 学資保険 EDUCATION 1.1 計画的な検討が多く見込み度が高い 損害保険 CASUALTY 0.8 単価が低いため減額 年金保険 PENSION 1.2 高額契約が見込める その他 GENERAL 0.7 カテゴリ不明のため最低倍率
5.3 即時購入価格(instantPrice) instantPrice = entryPrice * instantPriceMultiplier instantPriceMultiplier = 2.0(エントリー価格の2倍)
5.4 入札単位(bidUnit) bidUnit = 500円 入札額は常にbidUnitの倍数でなければならない。 次回最低入札額 = currentPrice + bidUnit
5.5 計算例 項目 値 リードスコア 75点 保険種別 学資保険(EDUCATION: 1.1) entryPrice 8,000 + 75 * 200 * 1.1 = 8,000 + 16,500 = 24,500円 instantPrice 24,500 * 2.0 = 49,000円 bidUnit 500円 最低入札額(初回) 24,500 + 500 = 25,000円
6. WebSocket イベント仕様 リアルタイム通信にはWebSocket(Socket.IO互換)を使用します。 オークションの入札状況・終了通知・各種アラートをクライアントにプッシュ配信します。
接続エンドポイント: wss://api.example.com/ws?token=<access_token> 認証トークンをクエリパラメータで渡し、接続時にサーバー側で検証します。 トークン期限切れ時は自動的に再接続を試行します。
イベント名 方向 ペイロード 説明 auction:updateServer -> Client { auctionId, currentPrice, bidCount, latestBidderId }入札が行われた際にオークション情報を配信 auction:endingServer -> Client { auctionId, remainingSeconds: 180 }オークション終了3分前の警告通知 auction:completedServer -> Client { auctionId, winnerId, finalPrice, status }オークション終了・落札者決定の通知 bid:acceptedServer -> Client { auctionId, bidId, amount, position }自分の入札が受理された通知 bid:rejectedServer -> Client { auctionId, reason, code }自分の入札が拒否された通知(理由付き) notification:newServer -> Client { id, type, title, body, createdAt }新しい通知の配信(落札、返金結果等)
6.1 サブスクリプション管理 クライアントイベント ペイロード 説明 auction:subscribe{ auctionId }特定オークションのリアルタイム更新を購読 auction:unsubscribe{ auctionId }オークションの購読を解除 ping{}接続維持用のハートビート(30秒間隔)
7. エラーコード定義 全APIで統一されたエラーレスポンス形式を使用します。エラーレスポンスには一意のエラーコードを含め、 クライアント側での適切なエラーハンドリングを可能にします。
エラーレスポンス形式: {
"error": {
"code": "AUTH_001",
"message": "認証トークンが無効または期限切れです",
"details": { ... },
"requestId": "550e8400-e29b-41d4-a716-446655440000"
}
}
7.1 認証エラー(AUTH) エラーコード HTTPステータス メッセージ AUTH_001401 認証トークンが無効または期限切れです AUTH_002401 メールアドレスまたはパスワードが正しくありません AUTH_003403 このリソースへのアクセス権限がありません AUTH_004429 ログイン試行回数の上限を超えました。しばらくお待ちください AUTH_005400 MFA認証コードが正しくありません
7.2 リードエラー(LEAD) エラーコード HTTPステータス メッセージ LEAD_001404 指定されたリードが見つかりません LEAD_002422 リード登録の入力値が不正です LEAD_003409 重複するリードが既に登録されています
7.3 オークションエラー(AUCTION) エラーコード HTTPステータス メッセージ AUCTION_001404 指定されたオークションが見つかりません AUCTION_002409 オークションは既に終了しています AUCTION_003409 オークションはまだ開始されていません AUCTION_004409 即時購入は他の入札がある場合利用できません AUCTION_005500 オークション処理中に内部エラーが発生しました
7.4 入札エラー(BID) エラーコード HTTPステータス メッセージ BID_001400 入札金額が現在の最高額を下回っています BID_002400 入札単位(500円)の倍数で指定してください BID_003409 自分が出品したリードには入札できません BID_004429 短時間に連続して入札することはできません
7.5 返金エラー(REFUND) エラーコード HTTPステータス メッセージ REFUND_001400 返金申請期限(購入後72時間)を過ぎています REFUND_002409 この案件は既に返金申請済みです REFUND_003400 返金理由の記載が不十分です
7.6 請求エラー(BILLING) エラーコード HTTPステータス メッセージ BILLING_001402 決済手段が登録されていません BILLING_002402 決済処理に失敗しました BILLING_003404 指定された請求書が見つかりません
8. 認可マトリクス 各APIエンドポイントに対するロール別アクセス権限を定義します。 「OK (own)」は自身が関連するリソースのみアクセス可能であることを示します。
ロール定義: ADMIN - システム管理者。全リソースへのフルアクセス権限AGENT - 保険募集人。リード購入・案件管理・請求確認が可能GUEST - 未認証ユーザー。LP経由のリード登録・ログイン・新規登録のみ
エンドポイント ADMIN AGENT GUEST POST /api/auth/login- - OK POST /api/auth/register- - OK POST /api/auth/refreshOK OK - POST /api/auth/mfa/verifyOK OK - GET /api/leadsOK OK (own) - POST /api/leads- - OK GET /api/leads/:idOK OK (own) - GET /api/leads/:id/scoreOK - - GET /api/auctionsOK OK - GET /api/auctions/activeOK OK - GET /api/auctions/:idOK OK - POST /api/auctions/:id/bid- OK - POST /api/auctions/:id/instant-buy- OK - GET /api/casesOK OK (own) - GET /api/cases/:idOK OK (own) - PATCH /api/cases/:id/statusOK OK (own) - POST /api/cases/:id/contact-log- OK (own) - POST /api/refunds- OK - GET /api/refundsOK OK (own) - PATCH /api/refunds/:id/reviewOK - - GET /api/invoicesOK OK (own) - GET /api/invoices/:idOK OK (own) - POST /api/billing/setup-intent- OK - GET /api/admin/settingsOK - - PATCH /api/admin/settingsOK - - GET /api/admin/statsOK - -
PDF保存 (Ctrl+P)