# Purpose

TBD

# Requirements

## Requirement: Month execution comparison target

The system SHALL compare selected month project allocation against explicit project-month planned hours (not derived or lifecycle assumptions).

### Scenario: Compare row total to month plan
- **GIVEN** selected month plan for project is 1200h
- **AND** project allocations total 1300h
- **THEN** project row variance is +100h
- **AND** row status is `OVER`

### Scenario: Blank month plan comparison
- **GIVEN** selected month has no plan value set
- **AND** project allocations total 50h
- **THEN** comparison target is 0h
- **AND** row status is `OVER`
- **AND** allocation remains allowed

## Requirement: Bulk allocation behavior

The system SHALL save valid items even if some items fail (partial bulk success).

### Scenario: Partial bulk success
- **WHEN** 10 allocation items are submitted and 2 fail validation
- **THEN** 8 valid items are persisted
- **AND** failed items return per-index validation errors
- **AND** response includes summary created/failed counts

## Requirement: Untracked execution semantics

The system SHALL treat `team_member_id = null` as untracked effort.

### Scenario: Untracked counted in project, excluded from capacity
- **WHEN** untracked allocation exists for selected month
- **THEN** project totals include it
- **AND** member capacity/utilization computations exclude it
