616 lines
13 KiB
Markdown
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
|