Files
PROJECT-CONTORL/openspec/specs/resource-management/spec.md
beabigegg 1fda7da2c2 feat: implement user authentication module
- Backend (FastAPI):
  - External API authentication (pj-auth-api.vercel.app)
  - JWT token validation with Redis session storage
  - RBAC with department isolation
  - User, Role, Department models with pjctrl_ prefix
  - Alembic migrations with project-specific version table
  - Complete test coverage (13 tests)

- Frontend (React + Vite):
  - AuthContext for state management
  - Login page with error handling
  - Protected route component
  - Dashboard with user info display

- OpenSpec:
  - 7 capability specs defined
  - add-user-auth change archived

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 23:41:37 +08:00

101 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Resource Management
資源管理系統,提供負載熱圖與人員容量追蹤,協助主管進行資源分配決策。
## Requirements
### Requirement: Workload Heatmap
系統 SHALL 提供負載熱圖,自動統計每人每週分配的任務總時數。
#### Scenario: 負載正常顯示
- **GIVEN** 某人員本週被指派的任務總時數低於其容量的 80%
- **WHEN** 主管查看負載熱圖
- **THEN** 該人員顯示為綠色(正常)
#### Scenario: 負載警告顯示
- **GIVEN** 某人員本週被指派的任務總時數達到其容量的 80%-100%
- **WHEN** 主管查看負載熱圖
- **THEN** 該人員顯示為黃色(警告)
#### Scenario: 負載超載顯示
- **GIVEN** 某人員本週被指派的任務總時數超過其容量的 100%
- **WHEN** 主管查看負載熱圖
- **THEN** 該人員顯示為紅色(超載)
- **AND** 可點擊查看詳細任務分配
### Requirement: Capacity Planning
系統 SHALL 支援人員容量規劃與追蹤。
#### Scenario: 設定人員容量
- **GIVEN** 管理者需要設定人員的週工時上限
- **WHEN** 管理者更新使用者的 Capacity 值
- **THEN** 系統儲存新的容量設定
- **AND** 重新計算該人員的負載百分比
#### Scenario: 容量調整(如請假)
- **GIVEN** 人員某週有請假安排
- **WHEN** 系統計算該週負載
- **THEN** 考慮實際可用工時進行計算
### Requirement: Multi-Project Health Dashboard
系統 SHALL 提供多專案健康看板,讓主管一覽所有專案狀態。
#### Scenario: 專案健康總覽
- **GIVEN** 主管負責多個專案
- **WHEN** 主管開啟健康看板
- **THEN** 顯示所有專案的進度、風險指標、延遲任務數
- **AND** 可依風險程度排序
#### Scenario: 專案延遲警示
- **GIVEN** 專案有任務超過截止日期
- **WHEN** 主管查看健康看板
- **THEN** 該專案標示為延遲狀態
- **AND** 顯示延遲任務數量與影響
### Requirement: Team Workload Distribution
系統 SHALL 視覺化呈現團隊工作分配狀況。
#### Scenario: 部門負載總覽
- **GIVEN** 主管需要了解部門整體負載
- **WHEN** 主管查看團隊負載視圖
- **THEN** 顯示部門內每位成員的負載狀況
- **AND** 可按專案或任務類型篩選
#### Scenario: 資源分配不均警示
- **GIVEN** 團隊中存在負載差異過大的情況
- **WHEN** 系統偵測到分配不均
- **THEN** 在看板上標示警示
- **AND** 建議可重新分配的任務
## Data Model
```
pjctrl_workload_snapshots
├── id: UUID (PK)
├── user_id: UUID (FK -> users)
├── week_start: DATE
├── allocated_hours: DECIMAL
├── capacity_hours: DECIMAL
├── load_percentage: DECIMAL
├── created_at: TIMESTAMP
└── updated_at: TIMESTAMP
pjctrl_project_health
├── id: UUID (PK)
├── project_id: UUID (FK -> projects)
├── snapshot_date: DATE
├── total_tasks: INT
├── completed_tasks: INT
├── overdue_tasks: INT
├── blocked_tasks: INT
├── risk_score: DECIMAL
├── created_at: TIMESTAMP
└── updated_at: TIMESTAMP
```
## Calculation Rules
- **負載百分比** = (allocated_hours / capacity_hours) × 100
- **風險評分** = f(overdue_tasks, blocked_tasks, timeline_remaining)
- 快取計算結果於 Redis每小時更新或任務變更時即時更新