← ポータル ← 会員管理 ← サポーター → 組織図

🎯 正担当自動算出ロジック

スタッフ別関係値スコアから「正担当」を機械的に算出する仕様
📄 ドキュメント ID: primary-owner-logic 🚧 status: draft 📅 作成: 2026-05-30 🔗 関連: user-levels, members 📂 正本: docs/requirements/primary-owner-logic.md

関係人口 正担当自動算出ロジック

目的: 472 名の関係人口に対し、各支持者の「正担当」をスタッフ別関係値スコアから自動算出する。鈴木代表理事の負担軽減・小澤/藤原/佐々生での負荷分散・各理事の専門性活用を機械的に実現する。

1. 要求 (Why)

関係者・ステークホルダー

2. 要件 (What — 受け入れ基準)

2.1 スコア体系

2.2 担当者カテゴリ

カテゴリ該当者定義
CORE
(基本担当 3 名)
小澤 / 藤原 / 佐々生正担当の主軸。負荷分散の対象
PRESIDENT
(負担軽減対象 1 名)
鈴木鈴木しか高関係値が無い場合のみ正担当に
OTHER_DIR
(他理事・5 名)
渡部 / 畠中 / 中村 / 吉田 / 正樹CORE で適任者なしの時の次候補

※ 瀬川は 2026-05-30 元理事化のため算出対象外(既に削除済)

2.3 算出アルゴリズム

Step 1: CORE で A 以上の人がいる → tie_break(CORE 内候補, 'CORE')
Step 2: OTHER_DIR で A 以上の人がいる → tie_break(OTHER_DIR 内候補, 'OTHER_DIR')
Step 3: 鈴木のみ A 以上 → 鈴木
Step 4: 誰も A 以上いない → CORE 最高スコアの人 + status='UNDETERMINED' フラグ

2.4 tie_break ルール

CORE 内

  1. 件数最少優先(負荷分散)
  2. 藤原の上限: 藤原の担当件数は min(小澤件数, 佐々生件数) × 1.5 まで OK
    • 上限超過で藤原が候補から外れた場合、残り(小澤・佐々生)で件数最少
  3. 同点時の最終固定順: 藤原 → 小澤 → 佐々生

OTHER_DIR 内

  1. 件数最少優先(純粋な負荷分散)
  2. 同点時の固定順: 渡部 → 畠中 → 中村 → 吉田 → 正樹(初期実装は配列順・要確認)

2.5 算出タイミング

方式説明対象
A (保存時即時算出)members.html の保存ボタン押下時、サーバー側で算出 → Notion「正担当」列に書き込み個別保存時
B (一括算出 endpoint)既存 472 件に対して 1 回限り GET /admin/recalc-primary-owners(L1 のみ)で全件再算出 → Notion 一括 PATCH全件再算出時

※ 定期バッチは導入しない(件数変動は保存時に再算出で十分)

2.6 保存先

2.7 既存バグ修正

2.8 UI 変更

2.9 一括算出仕様


3. 実装 (How)

3.1 関連ファイル

3.2 API エンドポイント

3.3 Notion スキーマ変更

新規列(手動 or /admin/ensure-primary-owner-column で確保):

3.4 外部依存

3.5 既知の制限・残課題

  1. 件数情報のクライアント取得: 保存時の件数把握はサーバー側で実施(クライアントへの fetch なし)
  2. OTHER_DIR 同点 tie-breaker: 初期実装は配列順(渡部 → 畠中 → 中村 → 吉田 → 正樹)。運用後に固定優先順位を再決定する場合は要件追記
  3. 算出順序による偏り: 初期実装は単純 1 パス。集計結果に偏りが大きければパス 2 リバランスを後追加

4. 変更履歴


📌 正本: 本 HTML は docs/requirements/primary-owner-logic.md の内容を表示用に整形したものです。仕様変更時はマークダウンを正本とし、本 HTML も同期更新してください。