Appearance
テーブル定義書
転職エージェント業務管理システム
テーブル一覧
| # | テーブル名 | 説明 | 種別 |
|---|---|---|---|
| 1 | users | ユーザー(エージェント・アシスタント) | マスタ |
| 2 | channels | 応募媒体 | マスタ |
| 3 | asps | ASP | マスタ |
| 4 | candidate_statuses | 求職者全体ステータス | マスタ |
| 5 | selection_statuses | 選考ステータス | マスタ |
| 6 | progress_ranks | 内定確度 | マスタ |
| 7 | company_types | 企業タイプ | マスタ |
| 8 | job_categories | 求人カテゴリ | マスタ |
| 9 | entry_platforms | エントリー媒体 | マスタ |
| 10 | companies | 企業 | マスタ |
| 11 | jobs | 求人 | マスタ |
| 12 | company_type_mappings | 企業×タイプ中間テーブル | 中間テーブル |
| 13 | job_category_mappings | 求人×カテゴリ中間テーブル | 中間テーブル |
| 14 | candidates | 求職者 | トランザクション |
| 15 | candidate_notes | 面談メモ | トランザクション |
| 16 | applications | 選考 | トランザクション |
| 17 | application_status_histories | 選考ステータス履歴 | トランザクション |
1. users(ユーザー)
エージェント・アシスタントの情報を管理する。
| カラム名 | データ型 | NULL | デフォルト | 説明 |
|---|---|---|---|---|
| id | SERIAL | NO | - | PK |
| name | VARCHAR(100) | NO | - | 氏名 |
| VARCHAR(255) | NO | - | メールアドレス(UNIQUE) | |
| password_hash | VARCHAR(255) | YES | - | パスワードハッシュ(CF Access使用時は不要) |
| role | VARCHAR(20) | NO | - | 役割(agent/assistant) |
| color | VARCHAR(20) | NO | 'blue' | バッジ表示色(blue/red/green/purple/yellow/orange/pink/cyan/gray) |
| created_at | TIMESTAMP | NO | CURRENT_TIMESTAMP | 作成日時 |
| updated_at | TIMESTAMP | NO | CURRENT_TIMESTAMP | 更新日時 |
インデックス:
- PRIMARY KEY (id)
- UNIQUE (email)
カラー選択肢:
- blue(デフォルト), red, green, purple, yellow, orange, pink, cyan, gray
2. channels(応募媒体)
求職者の流入元となる媒体を管理する。
| カラム名 | データ型 | NULL | デフォルト | 説明 |
|---|---|---|---|---|
| id | SERIAL | NO | - | PK |
| name | VARCHAR(100) | NO | - | 媒体名 |
| fee_rate | DECIMAL(5,4) | NO | 0 | 手数料率(例: 0.35 = 35%) |
| is_active | BOOLEAN | NO | TRUE | 有効フラグ |
| created_at | TIMESTAMP | NO | CURRENT_TIMESTAMP | 作成日時 |
| updated_at | TIMESTAMP | NO | CURRENT_TIMESTAMP | 更新日時 |
初期データ:
- 自社サイト(fee_rate: 0)
- ビズリーチ(fee_rate: 0.35)
- リクルートダイレクトスカウト(fee_rate: 0.35)
- doda(fee_rate: 0.30)
- Green(fee_rate: 0.30)
3. asps(ASP)
自社サイト経由の成果報酬を管理するASP情報。
| カラム名 | データ型 | NULL | デフォルト | 説明 |
|---|---|---|---|---|
| id | SERIAL | NO | - | PK |
| name | VARCHAR(100) | NO | - | ASP名 |
| cost_per_acquisition | DECIMAL(10,0) | NO | - | 成果報酬単価(円) |
| cutoff_day | INTEGER | NO | - | 締め日(1-31) |
| payment_month_offset | INTEGER | NO | 1 | 出金月オフセット(1=翌月末) |
| is_active | BOOLEAN | NO | TRUE | 有効フラグ |
| created_at | TIMESTAMP | NO | CURRENT_TIMESTAMP | 作成日時 |
| updated_at | TIMESTAMP | NO | CURRENT_TIMESTAMP | 更新日時 |
制約:
- cutoff_day: CHECK (cutoff_day >= 1 AND cutoff_day <= 31)
4. candidate_statuses(求職者全体ステータス)
求職者の活動状態を管理するマスタ。
| カラム名 | データ型 | NULL | デフォルト | 説明 |
|---|---|---|---|---|
| id | SERIAL | NO | - | PK |
| name | VARCHAR(50) | NO | - | ステータス名 |
| display_order | INTEGER | NO | 0 | 表示順(自動ステータス変更時の進行度判定に使用) |
初期データ:
| display_order | name | 説明 | 更新タイミング |
|---|---|---|---|
| 1 | 申込 | 新規登録直後 | 登録時(デフォルト) |
| 2 | ヒアリング面談 | 電話面談完了 | 面談モーダルから |
| 3 | キャリア面談 | Zoom面談完了(ASP承認ポイント) | 面談モーダルから |
| 4 | 活動中 | 求人紹介〜選考フォロー中 | 選考追加時に自動 |
| 5 | 内定 | 内定獲得 | 選考が内定になったら自動 |
| 6 | 入社決定 | 入社確定 | 手動 |
| 101 | 活動終了(ヒアリング) | ヒアリング面談後に終了 | 面談モーダルから |
| 102 | 活動終了(キャリア) | キャリア面談後に終了 | 面談モーダルから |
| 103 | 活動終了(選考) | 選考中に終了 | 選考管理モーダルから |
| 999 | 活動終了 | 途中離脱・終了(非推奨) | 手動 |
終了系ステータスの説明:
- 活動終了(ヒアリング): ヒアリング面談実施後、求職者が活動終了する場合
- 活動終了(キャリア): キャリア面談実施後、求職者が活動終了する場合
- 活動終了(選考): 選考中に他社決定・辞退等で活動終了する場合
※「活動終了」(display_order=999)は既存データ互換のため残存。新規登録では使用しない。
自動ステータス変更ロジック:
- 選考追加時:
display_order < 4なら「活動中」に自動変更 - 選考内定時:
display_order < 5なら「内定」に自動変更
5. selection_statuses(選考ステータス)
選考の進捗状態を管理するマスタ。
| カラム名 | データ型 | NULL | デフォルト | 説明 |
|---|---|---|---|---|
| id | SERIAL | NO | - | PK |
| name | VARCHAR(50) | NO | - | ステータス名 |
| category | VARCHAR(30) | NO | - | カテゴリ(書類/面接/内定) |
| display_order | INTEGER | NO | 0 | 表示順 |
初期データ:
| カテゴリ | ステータス |
|---|---|
| 書類 | 書類選考中、書類選考合格、書類選考不合格、書類選考辞退 |
| 面接 | カジュアル面談、筆記試験、一次面接、一次面接合格、一次面接不合格、一次面接辞退、二次面接、二次面接合格、二次面接不合格、二次面接辞退、三次面接、三次面接合格、三次面接不合格、三次面接辞退、最終面接、最終面接合格、最終面接不合格、最終面接辞退 |
| 内定 | 内定、内定辞退、入社 |
6. progress_ranks(内定確度)
求職者の内定見込み度合いを管理するマスタ。
| カラム名 | データ型 | NULL | デフォルト | 説明 |
|---|---|---|---|---|
| id | SERIAL | NO | - | PK |
| name | VARCHAR(20) | NO | - | 確度名(A/B/C等) |
| description | VARCHAR(200) | YES | - | 説明 |
| display_order | INTEGER | NO | 0 | 表示順 |
初期データ:
- A: 内定見込み高
- B: 選考順調
- C: 選考初期
7. company_types(企業タイプ)
企業のビジネスモデル・業態を分類するマスタ。
| カラム名 | データ型 | NULL | デフォルト | 説明 |
|---|---|---|---|---|
| id | SERIAL | NO | - | PK |
| name | VARCHAR(50) | NO | - | タイプ名(UNIQUE) |
| display_order | INTEGER | NO | 0 | 表示順 |
初期データ:
| name | 説明 |
|---|---|
| SI | システムインテグレーター |
| SES | システムエンジニアリングサービス(派遣) |
| コンサル | ITコンサルティングファーム |
| 自社サービス | 自社プロダクトを持つ事業会社 |
| Web系 | Webサービス企業 |
| SaaS | SaaSプロダクト企業 |
| 受託開発 | 受託開発専門 |
| スタートアップ | 創業間もないベンチャー |
| メガベンチャー | 大規模ベンチャー |
8. job_categories(求人カテゴリ)
求人の職種カテゴリを分類するマスタ。
| カラム名 | データ型 | NULL | デフォルト | 説明 |
|---|---|---|---|---|
| id | SERIAL | NO | - | PK |
| name | VARCHAR(50) | NO | - | カテゴリ名(UNIQUE) |
| display_order | INTEGER | NO | 0 | 表示順 |
初期データ:
| name | 説明 |
|---|---|
| ソフトウェアエンジニア | 汎用的な開発職種 |
| バックエンドエンジニア | サーバーサイド・API開発 |
| フロントエンドエンジニア | Web UI 実装 |
| インフラ/SREエンジニア | クラウド・運用基盤 |
| モバイルエンジニア | iOS/Android 開発 |
| データサイエンティスト | 分析・モデリング |
| プロジェクト/プロダクトマネージャー | PM/PdM |
| ITコンサルタント | ITコンサル領域 |
| QAエンジニア | テスト・品質保証 |
| セキュリティエンジニア | セキュリティ領域 |
| 社内SE(情シス) | コーポレートIT |
| セールス | 営業職 |
| AI/MLエンジニア | 機械学習エンジニア |
| 組み込み/IoTエンジニア | 組み込み・IoT開発 |
| ゲームエンジニア | ゲーム開発 |
| カスタマーサクセス | 導入・活用支援 |
| データエンジニア | データ基盤構築 |
| エンジニアリング責任者(EM/VPoE/CTO) | EM/VPoE/CTO |
| UI/UXデザイナー | プロダクトデザイン・UX設計 |
9. entry_platforms(エントリー媒体)
企業へのエントリー時に利用する媒体を管理するマスタ。
| カラム名 | データ型 | NULL | デフォルト | 説明 |
|---|---|---|---|---|
| id | SERIAL | NO | - | PK |
| name | VARCHAR(100) | NO | - | 媒体名 |
| is_active | BOOLEAN | NO | TRUE | 有効フラグ |
| created_at | TIMESTAMP | NO | CURRENT_TIMESTAMP | 作成日時 |
| updated_at | TIMESTAMP | NO | CURRENT_TIMESTAMP | 更新日時 |
初期データ:
- HRMOS
- Talentio
- ジョブカン
- 採用一括かんりくん
- 直接メール
10. companies(企業)
紹介先企業の情報を管理する。
| カラム名 | データ型 | NULL | デフォルト | 説明 |
|---|---|---|---|---|
| id | SERIAL | NO | - | PK |
| name | VARCHAR(200) | NO | - | 企業名 |
| entry_platform_id | INTEGER | YES | - | FK: entry_platforms.id |
| entry_url | VARCHAR(2048) | YES | - | 応募URL |
| contract_status | VARCHAR(20) | NO | 'active' | 契約状態(active/terminated) |
| contract_start_date | DATE | YES | - | 契約開始日 |
| contract_end_date | DATE | YES | - | 契約終了日 |
| created_at | TIMESTAMP | NO | CURRENT_TIMESTAMP | 作成日時 |
| updated_at | TIMESTAMP | NO | CURRENT_TIMESTAMP | 更新日時 |
インデックス:
- idx_companies_name (name)
- idx_companies_contract_status (contract_status)
※担当者情報はcompany_contactsテーブルで管理
11. jobs(求人)
企業ごとの求人情報を管理する。1企業に複数の求人が存在する。
| カラム名 | データ型 | NULL | デフォルト | 説明 |
|---|---|---|---|---|
| id | SERIAL | NO | - | PK |
| company_id | INTEGER | NO | - | FK: companies.id |
| title | VARCHAR(200) | NO | - | 求人タイトル |
| description | TEXT | YES | - | 求人内容 |
| is_active | BOOLEAN | NO | TRUE | 有効フラグ |
| entry_url | VARCHAR(2048) | YES | - | エントリーURL |
| contact_id | INTEGER | YES | - | FK: company_contacts.id |
| created_at | TIMESTAMP | NO | CURRENT_TIMESTAMP | 作成日時 |
| updated_at | TIMESTAMP | NO | CURRENT_TIMESTAMP | 更新日時 |
制約:
- ON DELETE CASCADE (company_id)
インデックス:
- idx_jobs_company (company_id)
- idx_jobs_is_active (is_active)
12. company_type_mappings(企業×タイプ中間テーブル)
企業とタイプの多対多リレーションを管理する中間テーブル。1企業に複数のタイプを設定可能。
| カラム名 | データ型 | NULL | デフォルト | 説明 |
|---|---|---|---|---|
| id | SERIAL | NO | - | PK |
| company_id | INTEGER | NO | - | FK: companies.id |
| company_type_id | INTEGER | NO | - | FK: company_types.id |
| created_at | TIMESTAMP | NO | CURRENT_TIMESTAMP | 作成日時 |
制約:
- UNIQUE (company_id, company_type_id)
- ON DELETE CASCADE (company_id, company_type_id)
インデックス:
- idx_company_type_mappings_company (company_id)
- idx_company_type_mappings_type (company_type_id)
13. job_category_mappings(求人×カテゴリ中間テーブル)
求人とカテゴリの多対多リレーションを管理する中間テーブル。1求人に複数のカテゴリを設定可能。
| カラム名 | データ型 | NULL | デフォルト | 説明 |
|---|---|---|---|---|
| id | SERIAL | NO | - | PK |
| job_id | INTEGER | NO | - | FK: jobs.id |
| job_category_id | INTEGER | NO | - | FK: job_categories.id |
| created_at | TIMESTAMP | NO | CURRENT_TIMESTAMP | 作成日時 |
制約:
- UNIQUE (job_id, job_category_id)
- ON DELETE CASCADE (job_id, job_category_id)
インデックス:
- idx_job_category_mappings_job (job_id)
- idx_job_category_mappings_category (job_category_id)
14. candidates(求職者)
求職者の基本情報を管理する。
| カラム名 | データ型 | NULL | デフォルト | 説明 |
|---|---|---|---|---|
| id | SERIAL | NO | - | PK |
| last_name | VARCHAR(50) | NO | - | 姓 |
| first_name | VARCHAR(50) | NO | - | 名 |
| last_name_kana | VARCHAR(50) | YES | - | 姓(カナ) |
| first_name_kana | VARCHAR(50) | YES | - | 名(カナ) |
| gender | VARCHAR(10) | YES | - | 性別 |
| birth_date | DATE | YES | - | 生年月日 |
| phone | VARCHAR(20) | YES | - | 電話番号 |
| VARCHAR(255) | YES | - | メールアドレス | |
| current_status | VARCHAR(20) | YES | - | 現況(現職/退職/休職) |
| current_company | VARCHAR(200) | YES | - | 現在の会社名 |
| current_salary | INTEGER | YES | - | 現年収(万円) |
| expected_salary | INTEGER | YES | - | 希望年収(万円) |
| channel_id | INTEGER | NO | - | FK: channels.id |
| asp_id | INTEGER | YES | - | FK: asps.id(自社サイト経由時のみ) |
| status_id | INTEGER | NO | - | FK: candidate_statuses.id |
| agent_id | INTEGER | YES | - | FK: users.id(担当エージェント) |
| assistant_id | INTEGER | YES | - | FK: users.id(担当アシスタント) |
| progress_rank_id | INTEGER | YES | - | FK: progress_ranks.id |
| zoom_interview_date | DATE | YES | - | Zoom面談日(ASP承認判定用) |
| termination_reason | TEXT | YES | - | 終了理由(ASP否認判定用) |
| phone_termination_reason | TEXT | YES | - | 電話終了理由(ASP否認判定用) |
| last_contact_date | TIMESTAMP | YES | - | 最終連絡日(音信不通検知用) |
| registered_at | TIMESTAMP | NO | CURRENT_TIMESTAMP | 登録日 |
| created_at | TIMESTAMP | NO | CURRENT_TIMESTAMP | 作成日時 |
| updated_at | TIMESTAMP | NO | CURRENT_TIMESTAMP | 更新日時 |
必須項目(登録時):
- last_name(姓)
- first_name(名)
- channel_id(応募媒体)
- status_id(ステータス)
インデックス:
- idx_candidates_last_name (last_name)
- idx_candidates_last_name_kana (last_name_kana)
- idx_candidates_status (status_id)
- idx_candidates_agent (agent_id)
- idx_candidates_assistant (assistant_id)
- idx_candidates_channel (channel_id)
- idx_candidates_registered (registered_at)
- idx_candidates_last_contact_date (last_contact_date)
音信不通検知:
last_contact_date を使用して、求職者への連絡が途絶えていないかを検知する。
| ステータス | 警告閾値(日) | 説明 |
|---|---|---|
| 申込 | 7 | 新規登録後、最初の連絡が遅れている |
| ヒアリング面談 | 14 | ヒアリング後のフォローが滞っている |
| キャリア面談 | 14 | キャリア面談後のフォローが滞っている |
| 活動中 | 7 | 選考中の連絡が途絶えている |
| 内定 | 14 | 内定後の入社準備フォローが滞っている |
監視対象外ステータス:
- 活動終了(ヒアリング)
- 活動終了(キャリア)
- 活動終了(選考)
- 入社決定
last_contact_date 更新タイミング:
- 求職者登録時:
registered_atの値で初期化 - メール連絡ボタン押下時: 現在日時で更新
- 面談実施記録時: 現在日時で更新
15. candidate_notes(面談メモ)
求職者との面談記録を管理する。
| カラム名 | データ型 | NULL | デフォルト | 説明 |
|---|---|---|---|---|
| id | SERIAL | NO | - | PK |
| candidate_id | INTEGER | NO | - | FK: candidates.id |
| title | VARCHAR(200) | NO | - | タイトル |
| content | TEXT | YES | - | 本文 |
| created_by | INTEGER | NO | - | FK: users.id(作成者) |
| created_at | TIMESTAMP | NO | CURRENT_TIMESTAMP | 作成日時 |
| updated_at | TIMESTAMP | NO | CURRENT_TIMESTAMP | 更新日時 |
制約:
- ON DELETE CASCADE (candidate_id)
16. applications(選考)
求職者と求人の選考情報を管理する。
| カラム名 | データ型 | NULL | デフォルト | 説明 |
|---|---|---|---|---|
| id | SERIAL | NO | - | PK |
| candidate_id | INTEGER | NO | - | FK: candidates.id |
| job_id | INTEGER | NO | - | FK: jobs.id |
| status_id | INTEGER | NO | - | FK: selection_statuses.id |
| expected_salary | INTEGER | YES | - | 想定年収(万円) |
| final_salary | INTEGER | YES | - | 決定年収(万円) |
| entry_date | DATE | YES | - | エントリー日 |
| offer_date | DATE | YES | - | 内定日 |
| join_date | DATE | YES | - | 入社日 |
| remarks | TEXT | YES | - | 備考 |
| created_at | TIMESTAMP | NO | CURRENT_TIMESTAMP | 作成日時 |
| updated_at | TIMESTAMP | NO | CURRENT_TIMESTAMP | 更新日時 |
制約:
- UNIQUE (candidate_id, job_id)
- ON DELETE CASCADE (candidate_id)
- ON DELETE CASCADE (job_id)
インデックス:
- idx_applications_candidate (candidate_id)
- idx_applications_job (job_id)
- idx_applications_status (status_id)
- idx_applications_entry_date (entry_date)
自動処理:
- 選考追加時: 求職者ステータスが「活動中」より前なら自動で「活動中」に変更
- ステータス更新時: 選考ステータスが「内定」を含む場合、求職者ステータスが「内定」より前なら自動で「内定」に変更
17. application_status_histories(選考ステータス履歴)
選考ステータスの変更履歴を管理する。
| カラム名 | データ型 | NULL | デフォルト | 説明 |
|---|---|---|---|---|
| id | SERIAL | NO | - | PK |
| application_id | INTEGER | NO | - | FK: applications.id |
| status_id | INTEGER | NO | - | FK: selection_statuses.id |
| status_date | DATE | NO | - | ステータス変更日 |
| remarks | TEXT | YES | - | 備考 |
| created_by | INTEGER | NO | - | FK: users.id(更新者) |
| created_at | TIMESTAMP | NO | CURRENT_TIMESTAMP | 作成日時 |
制約:
- ON DELETE CASCADE (application_id)
インデックス:
- idx_histories_application (application_id)
- idx_histories_status_date (status_date)