Appearance
要件定義書
転職エージェント業務管理システム
1. プロジェクト概要
1.1 背景・目的
転職エージェント業務において、現在複数のツール(スプレッドシート、社内システム、Matchingood)を併用しており、以下の課題が発生している。
- 複数ツールへの転記作業による工数増大
- 登録漏れ・更新漏れの発生
- 情報の一元管理ができていない
本システムは、これらの課題を解決し、業務効率化と登録漏れ防止を実現することを目的とする。
1.2 対象ユーザー
| 役割 | 人数 | 主な業務 |
|---|---|---|
| エージェント | 2名 | 面談、企業紹介、選考フォロー |
| アシスタント | 1名 | エントリー、企業調整、書類選考対応 |
※ 権限分けは不要(全員が全機能を使用可能)
1.3 スケジュール
| フェーズ | 期限 | 内容 |
|---|---|---|
| MVP | 2025年2月末 | 基本機能(求職者・企業・選考管理、ダッシュボード) |
| フェーズ2 | 2025年3月以降 | メール機能、データ移行、追加機能 |
2. 業務フロー
2.1 求職者対応フロー
[申込受付] ← ステータス: 申込(デフォルト)
│
▼
[電話面談調整]
│
▼
[電話面談実施] ← ステータス: ヒアリング面談(手動)
│
▼
[Zoom面談調整]
│
▼
[Zoom面談実施] ← ステータス: キャリア面談(手動)
│ ※ASP承認ポイント
▼
[求人紹介] ← ステータス: 活動中(選考追加時に自動)
│
▼
[応募書類作成支援]
│
▼
[企業へエントリー]
│
▼
[選考フォロー]
│
▼
[内定] ← ステータス: 内定(選考が内定時に自動)
│
▼
[入社決定] ← ステータス: 入社決定(手動)2.2 求職者ステータス定義
| # | ステータス名 | 説明 | 更新タイミング |
|---|---|---|---|
| 1 | 申込 | 新規登録直後 | 登録時(デフォルト) |
| 2 | ヒアリング面談 | 電話面談完了 | 手動 |
| 3 | キャリア面談 | Zoom面談完了(ASP承認ポイント) | 手動 |
| 4 | 活動中 | 求人紹介〜選考フォロー中 | 選考追加時に自動 |
| 5 | 内定 | 内定獲得 | 選考が内定になったら自動 |
| 6 | 入社決定 | 入社確定 | 手動 |
| 7 | 活動終了 | 途中離脱・終了 | 手動 |
自動ステータス変更ロジック:
- 選考追加時: 現在のステータスが「活動中」より前(申込/ヒアリング面談/キャリア面談)なら「活動中」に自動変更
- 選考が内定時: 選考ステータスが「内定」を含む名前に変更されたら、現在のステータスが「内定」より前なら「内定」に自動変更
2.3 流入パターン
| パターン | 流入経路 | 売上計算 | コスト |
|---|---|---|---|
| スカウト媒体経由 | ビズリーチ、リクルートダイレクトスカウト等 | 決定年収 × (1 - 媒体手数料率) | 媒体手数料 |
| 自社サイト直接 | 自社サイトから直接申込 | 決定年収 | なし |
| 自社サイトASP経由 | ASP経由で自社サイトに流入 | 決定年収 | ASP成果報酬 |
3. 機能要件
3.1 MVP機能一覧
求職者管理
| 機能 | 説明 |
|---|---|
| 求職者一覧 | フィルタ・検索・ソート機能付き一覧表示 |
| 求職者詳細 | 基本情報、選考一覧、面談メモの表示 |
| 求職者登録・編集 | 基本情報の登録・更新 |
| 面談メモ | 面談記録の登録・表示 |
企業管理
| 機能 | 説明 |
|---|---|
| 企業一覧 | フィルタ・検索機能付き一覧表示 |
| 企業詳細 | 基本情報、求人一覧の表示 |
| 企業登録・編集 | 基本情報の登録・更新 |
求人管理
| 機能 | 説明 |
|---|---|
| 求人一覧 | フィルタ・検索機能付き一覧表示 |
| 求人詳細 | 基本情報、選考中求職者一覧、担当者情報、エントリーURL |
| 求人登録・編集 | 基本情報の登録・更新 |
選考管理
| 機能 | 説明 |
|---|---|
| 選考一覧(横断) | 全選考の横断的一覧表示 |
| 選考詳細 | 選考情報、ステータス履歴の表示 |
| 選考登録・編集 | 選考情報の登録・更新 |
| ステータス更新 | ステータス変更(履歴自動追加) |
ダッシュボード
| 機能 | 説明 |
|---|---|
| 未完了タスク | 対応が必要なタスク一覧 |
| 今日の面接予定 | 本日の面接スケジュール |
| 今週の面接予定 | 今週の面接スケジュール |
| 選考結果待ち | 結果待ち選考の一覧 |
| 実績サマリ | 申込数、面談数、内定数等(前月比較付き) |
集計・レポート
| 機能 | 説明 |
|---|---|
| 日次・月次実績 | 期間別の実績集計 |
| 媒体別集計 | 媒体ごとの売上・コスト |
| ASP別集計 | ASPごとのコスト・出金予定 |
| 担当者別集計 | エージェント/アシスタント別の実績 |
マスタ管理
| 機能 | 説明 |
|---|---|
| 応募媒体管理 | 媒体の追加・編集・無効化 |
| ASP管理 | ASPの追加・編集・無効化 |
| ステータス管理 | 各種ステータスの管理 |
| ユーザー管理 | エージェント/アシスタントの管理 |
3.2 フェーズ2機能(MVP後)
- メール送信機能
- 既存データ移行(約1,000人分)
- カレンダー連携
- Matchingood連携
4. データ要件
4.1 主要エンティティ
| エンティティ | 説明 | 想定データ量 |
|---|---|---|
| 求職者(candidates) | 求職者の基本情報 | 約1,000件(既存)+ 月50件 |
| 企業(companies) | 紹介先企業の情報 | 約200件 |
| 求人(jobs) | 企業の求人情報(1企業に複数求人) | 企業あたり平均3件 |
| 選考(applications) | 求職者×求人の選考情報 | 求職者あたり平均5件 |
| 面談メモ(candidate_notes) | 面談記録 | 求職者あたり平均3件 |
4.2 ASP出金日計算ロジック
ASP経由の成果報酬は、締め日と出金月オフセットに基づいて計算する。
計算式:
- 申込日 ≤ 締め日 → 申込月 + offset ヶ月後の月末
- 申込日 > 締め日 → 申込月 + offset + 1 ヶ月後の月末
例(締め日15日、offset=1の場合):
- 1月10日申込 → 2月末出金
- 1月20日申込 → 3月末出金
4.3 ASP承認判定ロジック
| 判定 | 条件 |
|---|---|
| 承認 | ステータスが「キャリア面談」以降(Zoom面談日が入力済み) |
| 否認 | 電話終了理由 または 終了理由が入力済み |
| 対応待ち | 上記以外で進行中 |
※「キャリア面談」ステータスへの手動変更がASP承認ポイントとなる
5. 非機能要件
5.1 性能要件
| 項目 | 要件 |
|---|---|
| 同時接続数 | 3名(社内ツールのため) |
| レスポンス時間 | 一覧表示: 2秒以内、詳細表示: 1秒以内 |
| 可用性 | 99%以上(平日9:00-21:00) |
5.2 セキュリティ要件
| 項目 | 要件 |
|---|---|
| 認証 | Googleアカウント認証(Google Workspace連携) |
| アクセス制限 | 自社ドメインのGoogleアカウントのみ許可 |
| 通信 | HTTPS必須 |
5.3 運用要件
| 項目 | 要件 |
|---|---|
| バックアップ | 日次自動バックアップ(Supabase標準) |
| 監視 | エラーログ監視 |
| デプロイ | GitHub Actionsによる自動デプロイ |
6. 画面一覧
| 画面ID | 画面名 | 説明 |
|---|---|---|
| SC-001 | ログイン画面 | ※Cloudflare Accessで代替、実装不要 |
| SC-002 | ダッシュボード | トップ画面 |
| SC-003 | 求職者一覧画面 | 求職者コレクション |
| SC-004 | 求職者詳細画面 | 求職者シングル |
| SC-005 | 求職者登録・編集モーダル | 求職者フォーム |
| SC-006 | 企業一覧画面 | 企業コレクション |
| SC-007 | 企業詳細画面 | 企業シングル |
| SC-008 | 企業登録・編集モーダル | 企業フォーム |
| SC-009 | 求人一覧画面 | 求人コレクション |
| SC-010 | 求人詳細画面 | 求人シングル |
| SC-011 | 求人登録・編集モーダル | 求人フォーム |
| SC-012 | 選考一覧画面 | 選考コレクション(横断) |
| SC-013 | 選考詳細画面 | 選考シングル |
| SC-014 | 選考登録・編集モーダル | 選考フォーム |
| SC-015 | ステータス更新モーダル | ステータス変更 |
| SC-016 | 集計・レポート画面 | 各種集計表示 |
| SC-017 | マスタ管理画面 | マスタデータ管理 |
7. 外部システム連携
7.1 MVP
| 連携先 | 連携内容 |
|---|---|
| Google Workspace | 認証(Cloudflare Access経由) |
| Supabase | データベース |
7.2 フェーズ2
| 連携先 | 連携内容 |
|---|---|
| Googleカレンダー | 面接予定の同期 |
| Gmail | メール送信 |
| Matchingood | データ連携(詳細未定) |
8. 用語集
| 用語 | 説明 |
|---|---|
| 求職者 | 転職支援サービスを利用する人 |
| エージェント | 面談・企業紹介を担当するスタッフ |
| アシスタント | エントリー・企業調整を担当するスタッフ |
| 企業 | 紹介先の会社 |
| 求人 | 企業が募集する個別ポジション。1企業に複数求人が存在する |
| 選考 | 求職者が特定の求人に応募してから結果が出るまでの過程 |
| 内定確度 | 選考が内定に至る見込み度合い(A/B/C等) |
| ASP | アフィリエイトサービスプロバイダー。自社サイトへの送客に対して成果報酬を支払う |
| 媒体 | 求職者を集客するプラットフォーム(ビズリーチ等) |
| ヒアリング面談 | 電話で行う初回面談 |
| キャリア面談 | Zoomで行う本格的なキャリア相談(ASP承認ポイント) |
| Matchingood | 既存の人材紹介システム |
| 面談シート | 求職者に企業・求人を紹介するためのスプレッドシート資料 |
9. 追加機能要件
9.1 面談シート作成機能
9.1.1 概要
求職者詳細画面から、企業・求人情報を選択してGoogle Sheetsで面談シート(企業紹介資料)を自動生成する機能。
9.1.2 機能要件
| 項目 | 仕様 |
|---|---|
| 出力形式 | Google Sheets(新規スプレッドシート作成) |
| 出力項目 | ユーザーがカスタム選択可能 |
| 選択UI | モーダル(企業タイプ別タブ + 求人チェックボックス) |
| 認証方式 | サービスアカウント(バックエンド認証) |
| シート管理 | DB履歴管理 + Google Drive保存 |
| 選択粒度 | 求人単位で選択 |
9.1.3 出力可能フィールド
企業情報:
- 企業名、企業タイプ、契約ステータス
- 登録媒体URL
求人情報:
- 求人タイトル、求人内容(description)
- 求人カテゴリ、公開URL、登録URL
- 担当者名、担当者メール、担当者電話
9.1.4 シート構成
- 企業タイプごとにシートを分割(例: SI、SES、自社サービス...)
- 各シートに選択した求人を一覧表示
- ヘッダー行 + データ行の表形式
9.1.5 画面仕様
| 画面ID | 画面名 | 説明 |
|---|---|---|
| SC-018 | 面談シート作成モーダル | 求人選択・フィールド選択フォーム |
9.1.6 API仕様
| メソッド | パス | 説明 |
|---|---|---|
| GET | /api/v1/jobs/for-interview-sheet | 面談シート用求人一覧(企業タイプ別) |
| POST | /api/v1/interview-sheets | シート作成 |
| GET | /api/v1/interview-sheets | 履歴取得(candidate_idでフィルタ) |
9.1.7 データモデル
interview_sheets テーブル:
| カラム名 | 型 | 説明 |
|---|---|---|
| id | UUID | 主キー |
| candidate_id | INTEGER | 求職者ID(外部キー) |
| google_sheet_id | VARCHAR(100) | Google SheetsのID |
| google_sheet_url | VARCHAR(500) | Google Sheetsの公開URL |
| title | VARCHAR(200) | シートタイトル |
| selected_fields | JSONB | 選択されたフィールド一覧 |
| job_ids | INTEGER[] | 選択された求人ID配列 |
| created_by | INTEGER | 作成者(外部キー) |
| created_at | TIMESTAMPTZ | 作成日時 |
9.2 求職者向けマイページ機能
9.2.1 概要
求職者が自分の選考状況をリアルタイムで確認できる公開ページ。ログイン不要でUUIDトークンベースのURLでアクセス可能。
9.2.2 機能要件
| 項目 | 仕様 |
|---|---|
| アクセス方式 | URL直接アクセス(認証不要) |
| 認証方式 | UUIDトークン(推測困難な一意識別子) |
| トークン生成 | 求職者登録時に自動生成 |
| 有効期限 | なし(将来的に追加検討) |
| 表示情報 | 選考一覧、ステータス、面接スケジュール |
9.2.3 表示項目
求職者情報:
- 氏名(姓 名)
- 最終更新日時
選考情報(企業ごと):
- 企業名
- 求人タイトル
- 選考ステータス(色分け表示)
- 面接スケジュール(日時、場所、確定/提案)
- 更新日時
9.2.4 ステータス色分け
| ステータス種別 | 色 |
|---|---|
| 内定・採用 | 緑 |
| 不合格・辞退 | 赤 |
| 選考中・面接 | 青 |
| 書類選考 | 紫 |
| その他 | グレー |
9.2.5 画面仕様
| 画面ID | 画面名 | URL | 説明 |
|---|---|---|---|
| PB-001 | マイページ | /mypage/:token | 求職者向け選考状況一覧 |
| PB-002 | エラーページ | (同上) | 無効なトークン時の表示 |
9.2.6 API仕様
| メソッド | パス | 認証 | 説明 |
|---|---|---|---|
| GET | /api/v1/public/candidates/:token | 不要 | 公開用求職者情報取得 |
レスポンス例:
json
{
"data": {
"id": 123,
"name": "山田 太郎",
"applications": [
{
"id": 1,
"company_name": "株式会社A",
"job_title": "エンジニア",
"status": { "id": 1, "name": "書類選考中" },
"schedules": [
{
"id": "uuid",
"start_time": "2025-01-20T10:00:00",
"end_time": "2025-01-20T11:00:00",
"status": "確定",
"location": "本社ビル5F"
}
],
"updated_at": "2025-01-15T10:00:00"
}
],
"updated_at": "2025-01-15T10:00:00"
}
}9.2.7 データモデル
candidates テーブル追加カラム:
| カラム名 | 型 | 制約 | 説明 |
|---|---|---|---|
| public_token | UUID | UNIQUE, NOT NULL | 公開アクセス用トークン |
インデックス:
idx_candidates_public_tokenON candidates(public_token)
9.2.8 セキュリティ考慮
- UUIDv4形式(推測困難)
- 正規表現によるフォーマット検証
- 個人情報は最小限(氏名と選考情報のみ)
- RLSポリシー設定済み
9.2.9 管理画面連携
求職者詳細画面にマイページURLを表示し、コピーボタンで求職者へ共有可能。
マイページURL: https://example.com/mypage/550e8400-e29b-41d4-a716-446655440000 [コピー]