chore(repo): initialize planarchy workspace
This commit is contained in:
@@ -0,0 +1,615 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user