Files
CapaKraken/docs/dispo-import-implementation-tickets.md
T

616 lines
13 KiB
Markdown

# Dispo Import Implementation Tickets
**Date:** 2026-03-14
**Purpose:** Worker-ready implementation tickets for the clean-slate Dispo v2 import defined in [dispo-import-implementation.md](/home/hartmut/Documents/Copilot/planarchy/docs/dispo-import-implementation.md).
## How To Use This Ticket Pack
- Treat each ticket as a deliverable slice with its own acceptance criteria.
- Respect the dependency graph before starting downstream tickets.
- Parallel workers should only take tickets from the same phase when their touch points do not overlap heavily.
- `[tbd]` project resolution and ambiguous part-time patterns remain review-gated even after implementation.
## Dependency Summary
### Phase 0
- `DISPO-00` must finish first
### Phase 1
- `DISPO-10` depends on `DISPO-00`
- `DISPO-11` depends on `DISPO-00`
- `DISPO-12` depends on `DISPO-00`
### Phase 2
- `DISPO-20` depends on `DISPO-10`
- `DISPO-21` depends on `DISPO-10`, `DISPO-11`
- `DISPO-22` depends on `DISPO-10`, `DISPO-12`
### Phase 3
- `DISPO-30` depends on `DISPO-20`, `DISPO-21`, `DISPO-22`
- `DISPO-31` depends on `DISPO-20`, `DISPO-21`
- `DISPO-32` depends on `DISPO-20`, `DISPO-22`
### Phase 4
- `DISPO-40` depends on `DISPO-30`, `DISPO-31`, `DISPO-32`
- `DISPO-41` depends on `DISPO-10`, `DISPO-30`, `DISPO-32`
- `DISPO-42` depends on `DISPO-40`
## Parallel Worker Lanes
Recommended worker split after `DISPO-00`:
- Worker A: staging schema and import orchestration
- Worker B: reset/reseed and reference-data import
- Worker C: parser and token normalization
- Worker D: resource, role, chapter, and availability normalization
- Worker E: commit pipeline, vacations/public holidays, and reconciliation
## Tickets
### `DISPO-00` Canonical Decisions Lock
**Goal**
Freeze the implementation assumptions so multiple workers do not diverge.
**Scope**
- confirm canonical person ID strategy
- confirm auth reset scope
- confirm `[tbd]` commit policy
- confirm default part-time fallback policy
- confirm internal project bucket naming
**Deliverables**
- decision log appended to [dispo-import-implementation.md](/home/hartmut/Documents/Copilot/planarchy/docs/dispo-import-implementation.md)
- explicit list of values to seed for roles and internal project buckets
**Acceptance Criteria**
- no remaining ambiguous blocking decisions for schema work
- downstream workers can implement without inventing business rules
**Suggested Owner**
- architect / lead worker
**Estimated Effort**
- 0.5 day
### `DISPO-10` Staging Schema And Import Batch Model
**Goal**
Add durable staging persistence for workbook parsing and review.
**Scope**
- add Prisma models for import batches and staged records
- add statuses for parsed, unresolved, approved, committed, failed
- add source-trace fields
- add indexes for batch lookup and unresolved review
**Deliverables**
- Prisma schema changes
- migration
- shared types/schemas for staged entities
**Acceptance Criteria**
- an import batch can store staged resources, projects, assignments, vacations, availability rules, and unresolved rows
- all staged records keep workbook, sheet, row, and raw payload traceability
- migration applies cleanly
**Dependencies**
- `DISPO-00`
**Suggested Owner**
- Worker A
**Estimated Effort**
- 1 day
### `DISPO-11` Full Reset And Bootstrap Reseed
**Goal**
Provide a safe command that wipes the database and recreates the minimum viable platform baseline.
**Scope**
- add full reset script/command
- back up before destructive reset
- recreate admin/bootstrap access
- reseed required platform defaults
**Deliverables**
- reset command
- reseed command or combined bootstrap command
- operator documentation
**Acceptance Criteria**
- command wipes the intended database scope only
- command requires explicit force confirmation
- platform remains sign-in capable after reset
- rerunning in development is deterministic
**Dependencies**
- `DISPO-00`
**Suggested Owner**
- Worker B
**Estimated Effort**
- 1 day
### `DISPO-12` Canonical Identity And Role Seed Preparation
**Goal**
Prepare the canonical master-data rules required by all downstream importers.
**Scope**
- implement single-ID normalization rule for resources
- define role seed list
- define chapter normalization list
- define internal utilization bucket list
**Deliverables**
- shared normalization helpers
- seed updates for roles and internal categories
- test coverage for token-to-role and token-to-chapter mapping
**Acceptance Criteria**
- one canonical person identifier is used throughout import logic
- role seeds exist for `2D Artist`, `3D Artist`, `Project Manager`, `Art Director`
- chapter mapping is deterministic
**Dependencies**
- `DISPO-00`
**Suggested Owner**
- Worker D
**Estimated Effort**
- 0.5 to 1 day
### `DISPO-20` Reference Data Importer
**Goal**
Import and normalize master/reference data from `MandatoryDispoCategories_V3.xlsx`.
**Scope**
- countries
- metro cities
- org units
- management level groups and levels
- client hierarchy
- utilization categories
**Deliverables**
- workbook reader/importer
- reference-data upsert logic
- validation report for unknown values
**Acceptance Criteria**
- importer creates the normalized reference graph without duplicate nodes
- re-run is idempotent
- unknown or unmapped values are surfaced clearly
**Dependencies**
- `DISPO-10`
**Suggested Owner**
- Worker B
**Estimated Effort**
- 1 to 1.5 days
### `DISPO-21` Resource, Chapter, Role, And Availability Staging
**Goal**
Build staged resource records from `ChgFC`, `EID-Attr`, and Dispo row metadata.
**Scope**
- canonical resource identity matching
- resource master field extraction
- chapter mapping
- resource role staging
- baseline FTE and availability staging
**Deliverables**
- resource staging service
- chapter/role mapping helper
- unresolved resource conflict handling
**Acceptance Criteria**
- staged resources deduplicate correctly by canonical ID
- resource chapter is derived consistently from agreed token rules
- project-capable roles are staged for later assignment commit
- unresolved missing person fields are flagged, not silently defaulted
**Dependencies**
- `DISPO-10`
- `DISPO-11`
**Suggested Owner**
- Worker D
**Estimated Effort**
- 1.5 days
### `DISPO-22` Dispo Matrix Parser And Token Normalization
**Goal**
Convert `DISPO_2026.xlsx` matrix cells into normalized staging records.
**Scope**
- parse day/slot structure
- detect project, internal work, absence, holiday, unassigned, weekend, and part-time markers
- extract client token, WBS, win probability, role token, ignore suffixes
- emit structured staged records
**Deliverables**
- parser module
- token normalization library
- parser tests with representative cell examples
**Acceptance Criteria**
- parser handles known token families: `CH`, `MO`, `MD`, `PD`, `AB`, `NA`, `UN`
- parser strips `_HB` and `_SB`
- parser extracts `[BMW]`, `[11035763]`, `{CH80}`, and role prefixes correctly
- unknown token shapes are routed into unresolved staging rows
**Dependencies**
- `DISPO-10`
- `DISPO-12`
**Suggested Owner**
- Worker C
**Estimated Effort**
- 1.5 to 2 days
### `DISPO-30` Staged Project Resolver And Internal Bucket Builder
**Goal**
Resolve staged project identities and create normalized internal planning buckets.
**Scope**
- create WBS-backed staged projects
- link clients to projects
- derive project names
- stage internal `M&O`, `MD&I`, `PD&R` projects/buckets
- keep `[tbd]` rows unresolved
**Deliverables**
- project resolver service
- internal project/bucket seed or creation logic
- unresolved project review list
**Acceptance Criteria**
- WBS-backed projects are unique and deterministic
- internal work records resolve to canonical internal buckets
- `[tbd]` rows do not auto-create final projects
**Dependencies**
- `DISPO-20`
- `DISPO-21`
- `DISPO-22`
**Suggested Owner**
- Worker C or E
**Estimated Effort**
- 1 day
### `DISPO-31` Vacation And Public Holiday Import
**Goal**
Normalize workbook absences and geography-driven holidays into the vacation planner.
**Scope**
- map `AB` rows to vacations
- map public holidays to approved `PUBLIC_HOLIDAY` vacations
- skip weekends as persisted vacation rows
- reconcile workbook holiday markers with generated holidays
**Deliverables**
- staged vacation importer
- holiday generation/commit integration
- tests covering holiday and absence cases
**Acceptance Criteria**
- absences appear as vacation rows
- public holidays are created through the vacation model
- weekends are not persisted as vacations
- duplicate holiday rows are prevented
**Dependencies**
- `DISPO-20`
- `DISPO-21`
**Suggested Owner**
- Worker E
**Estimated Effort**
- 1 day
### `DISPO-32` Part-Time Availability Overlay
**Goal**
Apply part-time logic to resource availability without creating fake bookings.
**Scope**
- parse staged part-time markers
- map percentage to available hours
- apply weekday reductions where explicit
- preserve unresolved patterns for manual review when not explicit
**Deliverables**
- availability overlay service
- unresolved availability pattern review states
- tests for 50%, 75%, 80%, and 100% examples
**Acceptance Criteria**
- 50% maps to 4 hours on a standard day
- 100% maps to 8 hours on a standard day
- explicit non-working weekdays reduce availability to zero on those days
- unresolved part-time patterns do not silently invent weekday schedules
**Dependencies**
- `DISPO-20`
- `DISPO-22`
**Suggested Owner**
- Worker D
**Estimated Effort**
- 1 day
### `DISPO-40` Commit Pipeline
**Goal**
Commit approved staged data into final Planarchy entities.
**Scope**
- create reference entities if missing
- create/update resources and resource roles
- create projects and internal buckets
- create assignments
- create vacations
- apply availability updates
- preserve staging-to-final traceability
**Deliverables**
- commit orchestration service
- commit transaction boundaries
- failure and rollback handling
**Acceptance Criteria**
- only approved/resolved staged rows are committed
- unassigned rows do not create assignments
- unresolved `[tbd]` rows block final project commit
- assignment roles are committed separately from resource chapters
- commit can be replayed safely for a batch
**Dependencies**
- `DISPO-30`
- `DISPO-31`
- `DISPO-32`
**Suggested Owner**
- Worker E
**Estimated Effort**
- 1.5 to 2 days
### `DISPO-41` Review UI Or Operator Workflow For Unresolved Rows
**Goal**
Provide a practical path for resolving staged conflicts and `[tbd]` rows.
**Scope**
- unresolved staged row listing
- filters by type: person, project, part-time pattern, token parse failure
- approve/reject/resolve actions
- batch review workflow or CLI operator tooling
**Deliverables**
- review UI or CLI workflow
- action handlers for staged resolution
- operator documentation
**Acceptance Criteria**
- reviewers can find all unresolved rows by batch
- `[tbd]` rows can be explicitly resolved before commit
- identity conflicts and part-time ambiguities can be reviewed without DB edits
**Dependencies**
- `DISPO-10`
- `DISPO-30`
- `DISPO-32`
**Suggested Owner**
- Worker A or frontend-focused worker
**Estimated Effort**
- 1 to 1.5 days
### `DISPO-42` Reconciliation And Acceptance Report
**Goal**
Validate committed data against the chargeability workbook and expected planning totals.
**Scope**
- resource count reconciliation
- FTE reconciliation
- management-group target reconciliation
- project/client/WBS consistency checks
- public-holiday/vacation visibility checks
- free-capacity vs assignment integrity checks
**Deliverables**
- reconciliation command/report
- machine-readable summary output
- human-readable discrepancy report
**Acceptance Criteria**
- system can produce a batch-level pass/fail report
- discrepancies identify the exact source rows or final entities involved
- report is repeatable for reimports
**Dependencies**
- `DISPO-40`
**Suggested Owner**
- Worker E
**Estimated Effort**
- 1 day
## Suggested Execution Rounds
### Round 1
- `DISPO-00`
### Round 2
- `DISPO-10`
- `DISPO-11`
- `DISPO-12`
### Round 3
- `DISPO-20`
- `DISPO-21`
- `DISPO-22`
### Round 4
- `DISPO-30`
- `DISPO-31`
- `DISPO-32`
### Round 5
- `DISPO-40`
- `DISPO-41`
### Round 6
- `DISPO-42`
## Critical Path
The likely critical path is:
1. `DISPO-00`
2. `DISPO-10`
3. `DISPO-22`
4. `DISPO-30`
5. `DISPO-40`
6. `DISPO-42`
If speed matters most, staff this path first.
## Suggested Definition Of Done
The Dispo import implementation is complete when:
- the database can be reset and bootstrapped safely
- the three source workbooks can be staged deterministically
- unresolved rows are surfaced for review
- approved staged rows can be committed into normalized planning data
- public holidays and absences appear correctly in the vacation planner
- part-time availability affects availability instead of creating fake bookings
- project bookings carry assignment roles
- unassigned time remains free capacity only
- reconciliation passes against the source workbooks within agreed tolerance