報酬ライフサイクル設計
概要
Issue駆動の業務委託プラットフォームにおける報酬の設定から支払い完了までのライフサイクルを定義する。
1. 報酬設定フロー
1.1 Issue作成時の報酬設定
PMがIssueを作成する際に、以下の情報を設定する:
| 項目 | 必須 | 説明 |
|---|---|---|
| 難易度 | Yes | easy / medium / hard |
| 見積工数 | Yes | 時間単位(h) |
| 報酬額 | Yes | 円単位。報酬レンジガイドラインに基づく |
| プロジェクトID | Yes | 予算管理対象のプロジェクト |
| 備考 | No | 報酬設定の根拠メモ |
1.2 報酬レンジガイドライン
難易度と見積工数に応じた報酬額の目安を以下に定める。PMはこのレンジ内で報酬を設定することを推奨する。
| 難易度 | 報酬レンジ | 見積工数目安 | 想定タスク例 |
|---|---|---|---|
| easy | 5,000 - 15,000円 | 1 - 4h | ドキュメント修正、軽微なバグ修正、設定変更 |
| medium | 15,000 - 50,000円 | 4 - 16h | 新機能の一部実装、中規模リファクタリング、テスト追加 |
| hard | 50,000 - 150,000円 | 16 - 40h | 新機能設計・実装、大規模改修、アーキテクチャ変更 |
レンジ超過時のルール
- レンジ上限を超える場合: マネージャー承認が必要
- レンジ下限を下回る場合: 設定可能(委託者への配慮として非推奨)
1.3 報酬額の変更
- Issue作業着手前: PMが自由に変更可能
- Issue作業着手後(assigned状態): PM + 委託者の合意が必要
- レビュー承認後: 変更不可
2. 報酬ステータス
報酬は以下の5つのステータスを持つ。
| ステータス | 説明 |
|---|---|
draft | Issue作成時。報酬額は設定済みだが確定前 |
active | 委託者がアサインされ作業中 |
pending | 委託者がMRを提出しレビュー待ち |
confirmed | レビュワー承認済み。支払い対象 |
paid | 月次締めで支払い完了 |
3. ステート遷移図
mermaid
stateDiagram-v2
[*] --> draft: Issue作成・報酬設定
draft --> active: 委託者アサイン
draft --> [*]: Issue取消
active --> pending: MR提出
active --> draft: アサイン解除
pending --> confirmed: レビュワー承認
pending --> active: レビュワーが差し戻し
confirmed --> paid: 月次締め・支払い実行
confirmed --> pending: 確定取消(管理者のみ)
paid --> [*]: 完了4. 報酬確定フロー
4.1 レビュワー承認 → 報酬確定
- 委託者がMR(Merge Request)を提出
- レビュワーがコードレビューを実施
- レビュワーがMRを承認(Approve)
- システムが自動で報酬ステータスを
pending→confirmedに遷移 - 委託者・PMに確定通知を送信
4.2 自動確定の条件
以下の全てを満たす場合に自動確定する:
- MRが承認(Approved)状態である
- MRがマージ済みである
- Issueに報酬額が設定されている
- プロジェクトの残予算が報酬額以上である
4.3 残予算不足時の挙動
- 報酬確定をブロック(
pendingのまま保持) - PM・マネージャーにアラート通知
- マネージャーが予算追加 or PMが報酬額を調整した後に再確定
5. 支払いフロー
5.1 月次締め処理
| ステップ | 処理 | タイミング |
|---|---|---|
| 1 | 締め日確定 | 毎月末日 23:59 |
| 2 | confirmed ステータスの報酬を集計 | 締め日翌日 |
| 3 | 委託者別の支払い明細を生成 | 締め日翌日 |
| 4 | マネージャー承認 | 翌月1-5営業日 |
| 5 | 支払い実行 | マネージャー承認後 |
| 6 | ステータスを confirmed → paid に更新 | 支払い実行後 |
| 7 | 委託者に支払い完了通知 | 支払い実行後 |
5.2 支払い明細に含まれる情報
委託者名: xxx
対象期間: 2026年3月1日 〜 2026年3月31日
─────────────────────────────────────
Issue# | タイトル | 報酬額
#12 | API設計 | 30,000円
#15 | バグ修正 | 8,000円
─────────────────────────────────────
合計 38,000円6. データモデル
6.1 rewards テーブル
| カラム | 型 | 説明 |
|---|---|---|
| id | UUID | 主キー |
| issue_id | UUID | FK: issues.id |
| project_id | UUID | FK: projects.id |
| assignee_id | UUID | FK: users.id(委託者) |
| amount | INTEGER | 報酬額(円) |
| difficulty | ENUM | easy / medium / hard |
| estimated_hours | DECIMAL | 見積工数(時間) |
| status | ENUM | draft / active / pending / confirmed / paid |
| confirmed_at | TIMESTAMP | 確定日時 |
| paid_at | TIMESTAMP | 支払い日時 |
| payment_batch_id | UUID | FK: payment_batches.id |
| created_at | TIMESTAMP | 作成日時 |
| updated_at | TIMESTAMP | 更新日時 |
6.2 payment_batches テーブル
| カラム | 型 | 説明 |
|---|---|---|
| id | UUID | 主キー |
| period_start | DATE | 対象期間開始日 |
| period_end | DATE | 対象期間終了日 |
| status | ENUM | pending / approved / paid |
| approved_by | UUID | FK: users.id(承認マネージャー) |
| approved_at | TIMESTAMP | 承認日時 |
| total_amount | INTEGER | 合計支払額 |
| created_at | TIMESTAMP | 作成日時 |
6.3 reward_history テーブル(監査ログ)
| カラム | 型 | 説明 |
|---|---|---|
| id | UUID | 主キー |
| reward_id | UUID | FK: rewards.id |
| from_status | ENUM | 遷移元ステータス |
| to_status | ENUM | 遷移先ステータス |
| changed_by | UUID | FK: users.id |
| reason | TEXT | 変更理由 |
| created_at | TIMESTAMP | 変更日時 |