# Reporting API Contract ## Overview The Reporting API provides aggregated resource planning and execution data for management analysis. It supports three view types (did/is/will) inferred from date ranges. ## Endpoint ``` GET /api/reports/allocations ``` ## Authentication Requires Bearer token authentication. ## Query Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `start_date` | string (YYYY-MM-DD) | Yes | Start of reporting period | | `end_date` | string (YYYY-MM-DD) | Yes | End of reporting period | | `project_ids[]` | array of UUIDs | No | Filter by specific projects | | `member_ids[]` | array of UUIDs | No | Filter by specific team members | ## View Types The `view_type` is inferred from the date range: | View Type | Date Range | Description | |-----------|------------|-------------| | `did` | All dates in past months | Historical execution analysis | | `is` | Includes current month | Active planning vs execution | | `will` | All dates in future months | Forecast and capacity planning | ## Response Structure ```json { "period": { "start": "2026-01-01", "end": "2026-03-31" }, "view_type": "will", "projects": [ { "id": "uuid", "code": "PROJ-001", "title": "Project Name", "approved_estimate": 3000.0, "lifecycle_status": "MATCH", "plan_sum": 2600.0, "period_planned": 2600.0, "period_allocated": 2800.0, "period_variance": 200.0, "period_status": "OVER", "months": [ { "month": "2026-01", "planned_hours": 1200.0, "is_blank": false, "allocated_hours": 1300.0, "variance": 100.0, "status": "OVER" } ] } ], "members": [ { "id": "uuid", "name": "Team Member", "period_allocated": 400.0, "projects": [ { "project_id": "uuid", "project_code": "PROJ-001", "project_title": "Project Name", "total_hours": 400.0 } ] } ], "aggregates": { "total_planned": 2600.0, "total_allocated": 2800.0, "total_variance": 200.0, "status": "OVER" } } ``` ## Status Values | Status | Meaning | Visual | |--------|---------|--------| | `OVER` | Allocated > Planned/Capacity | 🔴 Red | | `UNDER` | Allocated < Planned/Capacity | 🟡 Amber | | `MATCH` | Allocated = Planned/Capacity | 🟢 Green/Neutral | ## Blank vs Zero Distinction - **Blank plan** (`is_blank: true`): No plan entry exists for the month - `planned_hours`: `null` - Used for variance: treated as `0` - **Explicit zero** (`is_blank: false`, `planned_hours: 0`): Plan was explicitly set to zero - `planned_hours`: `0` - Distinct from blank for reporting accuracy ## Dependencies This endpoint combines data from: - `ProjectMonthPlan` - Monthly planning data - `Allocation` - Resource allocations - `Project` - Project metadata (approved_estimate) - `TeamMember` - Team member capacity Calculations use: - `ReconciliationCalculator` - Lifecycle plan vs estimate - `VarianceCalculator` - Period and monthly variances ## Error Responses | Status | Condition | |--------|-----------| | 422 | Missing or invalid date parameters | | 422 | `end_date` before `start_date` | | 401 | Unauthorized (missing/invalid token) |