Skip to content

agendlee スケジュール機能ドキュメント

注意: 求職者サイドの機能は除外しています


1. 機能概要

1.1 エージェント(管理者)向け機能

機能説明
スケジュール一覧表示全求職者のスケジュールをカレンダー形式で表示
求職者フィルター特定の求職者でスケジュールを絞り込み
面談予定の提案求職者に面談候補日時を提案
面談予定の確定提案した予定を確定し、メール通知
スケジュール編集・削除登録済みの予定を変更・削除
日次Slack通知当日の面談予定を毎朝Slackに通知

1.2 企業向け機能(エージェントが企業として操作)

機能説明
求職者の空き予定確認求職者が登録した空き時間を表示
面談予定の確定登録空き予定内に面談予定を確定
再調整依頼求職者に追加の空き予定入力を依頼

2. スケジュールのステータス管理

2.1 ステータス種別

ステータス説明用途
提案エージェントが提案中の候補日求職者への日程打診
確定面談が確定した予定最終決定した面談日程
空き求職者が対応可能な時間帯求職者が登録(参照用)

2.2 面接段階(stage)

  1. カジュアル面談
  2. コーディングテスト
  3. 一次面接
  4. 二次面接
  5. 最終面接
  6. オファー面談
  7. その他

2.3 対応可能形式(adaptability)

  • オンラインのみ可
  • 対面のみ可
  • オンライン・対面可

3. カレンダー表示機能

3.1 表示モード

モード説明
timeGridWeek週表示(デフォルト)
dayGridMonth月表示
timeGridDay日表示
listWeekリスト表示

3.2 営業時間

  • 表示範囲: 8:00 - 21:00
  • 営業日: 月曜〜金曜
  • 祝日: グレー表示(holidays-jp APIで取得)

3.3 カラーコーディング

条件カラーコード
確定・オファー面談#CC0900
確定・その他オレンジ#CC7700
空き予定#009900
提案中#0000FF

3.4 インタラクション

  • ドラッグ&ドロップ: カレンダー上で新規イベント作成
  • クリック: 既存イベントの編集モーダルを開く
  • 今日ボタン: 現在日にスクロール

4. CRUD操作

4.1 スケジュール作成(提案)

エージェントが面談を提案する場合:

入力項目:
- 日時(開始・終了)
- 企業選択
- 面接段階
- ステータス: 「提案」で固定

処理:
1. バリデーション(日付・時間の妥当性)
2. DynamoDBに登録
3. Slack通知

4.2 スケジュール確定

提案から確定に変更する場合:

入力項目:
- 確定メールタイトル
- 確定送信メール文(必須)

処理:
1. ステータスを「提案」→「確定」に更新
2. 求職者にメール送信
3. Slack通知

4.3 スケジュール編集

編集可能項目:
- 開始日時
- 終了日時
- ステータス(提案⇄確定)

4.4 スケジュール削除

  • 確認ダイアログ表示後、削除実行
  • Slack通知

5. 通知機能

5.1 Slack通知

タイミング内容
スケジュール登録時新規予定の詳細
スケジュール変更時変更前後の比較
スケジュール削除時削除された予定の詳細
毎日(定時)当日の全面談予定

日次通知の例:

本日、2024年1月15日(月)の面談予定

1. 14:00-15:00 山田太郎様 / 株式会社ABC(一次面接)
2. 16:00-17:00 鈴木花子様 / DEF株式会社(最終面接)

5.2 メール通知

タイミング宛先内容
確定時求職者面談日程確定のお知らせ

メール件名:

【面接日程確定/[企業名]様】[求職者名]様 / TechClipsエージェント

6. データ構造

6.1 スケジュールオブジェクト

typescript
interface Schedule {
  id: string // スケジュール固有ID
  jobSeekerId: string // 求職者ID
  companyId: string // 企業ID
  companyName: string // 企業名
  jobSeekerName: string // 求職者名
  status: '提案' | '確定' | '空き'
  stage: string // 面接段階
  start: string // ISO8601形式の開始時刻
  end: string // ISO8601形式の終了時刻
  adaptability?: string // 対応可能形式
  createdAt: string
  updatedAt: string
}

6.2 カレンダーイベント(FullCalendar用)

typescript
interface CalendarEvent {
  title: string // 表示タイトル
  start: string // ISO8601形式
  end: string // ISO8601形式
  backgroundColor: string // 背景色
  textColor: string // テキスト色
  extendedProps: {
    status: string
    stage: string
    partnerName: string
    adaptability: string
  }
}

7. API一覧(エージェント/管理者向け)

7.1 スケジュール取得

メソッドパス説明
GET/schedule全スケジュール取得
GET/schedule/{jobSeekerId}/{companyId}特定求職者×企業のスケジュール

7.2 スケジュール操作

メソッドパス説明
POST/schedule新規スケジュール作成(提案)
POST/schedule/{jobSeekerId}/{companyId}面談予定確定
PATCH/scheduleスケジュール更新
DELETE/scheduleスケジュール削除

7.3 その他

メソッドパス説明
GET/user/forfilterフィルター用ユーザーリスト
GET/user/{jobSeekerId}/progress求職者の応募企業リスト
POST/readjustment再調整依頼

8. バリデーションルール

8.1 日時バリデーション

ルール説明
日付過去日は不可
開始時間8:00〜21:00の範囲内
終了時間開始時間より後
時間単位30分単位に正規化

8.2 スケジュール登録時

  • 重複チェック: 同一時間帯に確定・提案予定がないこと
  • 空き予定チェック: 企業側で確定する場合、求職者の空き予定内であること

9. 選考進行管理(ProgressTab)

求職者ごとの選考進行状況を管理する機能。

9.1 進行ステップ

ステップ説明
1. 入力待ち求職者が空き予定を入力中
2. 日程提案エージェントが日程を提案中
3. 調整終了日程が確定
4. 選考終了選考プロセス完了

9.2 データ構造

typescript
interface Progress {
  companyId: string
  companyName: string
  currentStep: number // 0-3
  scheduleURL: string // 日程調整URL
  updatedAt: number // タイムスタンプ
}

10. 使用技術

10.1 フロントエンド

  • カレンダー: FullCalendar(React版)
    • dayGridPlugin, timeGridPlugin, listPlugin, interactionPlugin
  • タイムゾーン: Asia/Tokyo(JST固定)
  • 祝日API: holidays-jp.github.io

10.2 バックエンド

  • データベース: DynamoDB
  • 通知: Slack Webhook, AWS SES(メール)
  • 認証: JWT(Cognito)

11. busonへの移植時の考慮事項

11.1 busonに既存の機能

  • 基本的なスケジュールCRUD
  • カレンダー表示(FullCalendar)
  • ステータス管理(提案/確定)

11.2 追加が必要な機能

機能優先度備考
面接段階(stage)管理7段階のステージ選択

➡ 求職者に紐づいている選考があるので、その選考の選考ステータスを選択させる | 確定時のメール通知 | 高 | 求職者への自動メール | ➡ CloudRunに展開予定なので、それに準じたメール通知の実装の必要あり。 | 日次Slack通知 | 中 | 当日の予定を毎朝通知 | ➡ これもCloudRunに展開予定 | 選考進行管理 | 低 | ステップ管理機能 | ➡ これは求職者に紐づいた選考で管理する | 対応可能形式 | 低 | オンライン/対面の選択 | ➡ これは実装済

11.3 不要な機能

求職者サイド:

  • 求職者による空き予定登録
  • 求職者向けカレンダーページ
  • 求職者向けモーダル
  • 企業向け公開URL(暗号化/復号化)

未完成機能:

  • 再調整依頼機能(agendleeでもバックエンド未実装)