# 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