PSA/docs/archive/itil-consolidation-cleanup-plan.md
Hermes 284313f908
Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Initial import of AlgaPSA codebase from PSA server
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz

Source: /opt/alga-psa on psa.joliet.tech
2026-06-22 16:12:17 -05:00

9.8 KiB
Raw Permalink Blame History

ITIL Consolidation Cleanup Plan

Date: 2025-09-18 Issue: Incomplete consolidation, cleanup needed

Original Implementation Plan (From Previous Claude)

🎯 Design Decision Summary

  • ITIL remains rigid - no user modifications allowed
  • Per-board configuration - each channel chooses custom OR ITIL (not tenant-level)
  • Full consolidation - migrate ITIL data to standard priority/category tables
  • Immediate implementation - go straight to consolidation (no interim fixes)

📋 Original Implementation Plan

Phase 1: Create ITIL Standard Records

1.1 ITIL Priority Records Create migration to populate standard_priorities table with ITIL standards:

-- 5 ITIL priority records (GLOBAL, not per tenant)
INSERT INTO standard_priorities (priority_id, priority_name, color, order_number, is_itil_standard, item_type, itil_priority_level)
VALUES
  (uuid(), 'Critical', '#EF4444', 1, true, 'ticket', 1),
  (uuid(), 'High', '#F97316', 2, true, 'ticket', 2),
  (uuid(), 'Medium', '#EAB308', 3, true, 'ticket', 3),
  (uuid(), 'Low', '#3B82F6', 4, true, 'ticket', 4),
  (uuid(), 'Planning', '#6B7280', 5, true, 'ticket', 5);

1.2 ITIL Category Records Create migration to populate standard_categories table with ITIL tree:

-- Parent categories: Hardware, Software, Network, Security, Service Request
-- Child categories: Server, Application, VPN, Malware, Access Request, etc.
-- Mark all with is_itil_standard: true

Phase 2: Update Channel Configuration

  • Add ITIL capability flags to standard_channels and channels tables
  • Modify channel priority/category type validation
  • Ensure channels using ITIL only reference ITIL standard records
  • Add UI warnings if ITIL standards are attempted to be modified

Phase 3: Update ITIL Components

3.1 Impact × Urgency Calculation

  • Keep existing calculation logic in UI components
  • Map calculated priority level (1-5) to corresponding ITIL priority record ID
  • Store in standard priority_id field instead of itil_priority_level

3.2 Category Selection

  • ItilFields, TicketInfo, QuickAddTicket already use CategoryPicker
  • Update to use ITIL records from categories table instead of hardcoded ItilCategories
  • Filter CategoryPicker to show only ITIL records when channel uses ITIL

Phase 4: Database Schema Updates

4.1 Add ITIL Standard Flags

-- Add to standard_priorities table (NOT per tenant)
ALTER TABLE standard_priorities ADD COLUMN is_itil_standard BOOLEAN DEFAULT false;
ALTER TABLE standard_priorities ADD COLUMN itil_priority_level INTEGER; -- 1-5 mapping

-- Add to standard_categories table (NOT per tenant)
ALTER TABLE standard_categories ADD COLUMN is_itil_standard BOOLEAN DEFAULT false;

-- Add ITIL capability flags to channels
ALTER TABLE channels ADD COLUMN supports_itil_priorities BOOLEAN DEFAULT false;
ALTER TABLE channels ADD COLUMN supports_itil_categories BOOLEAN DEFAULT false;

-- Add ITIL capability flags to standard_channels
ALTER TABLE standard_channels ADD COLUMN supports_itil_priorities BOOLEAN DEFAULT false;
ALTER TABLE standard_channels ADD COLUMN supports_itil_categories BOOLEAN DEFAULT false;

4.2 Migration Script for Existing Tickets SKIPPED - No tickets with ITIL in production (branch not published yet)

Phase 5: Update Business Logic

5.1 Ticket Creation/Updates

  • Remove dual priority/category handling
  • Always use priority_id and category_id
  • For ITIL channels: map Impact×Urgency to ITIL priority record ID

5.2 Filtering & Queries

  • Remove dual filtering logic from optimizedTicketActions.ts
  • All tickets now filter by standard priority_id and category_id
  • ITIL tickets appear in filters automatically (same table, same fields)

5.3 Display Logic

  • Update ticket-columns.tsx to remove ITIL-specific display paths
  • All tickets use same priority/category display logic
  • ITIL calculation details (Impact×Urgency) remain in ticket details

Phase 6: Cleanup

6.1 Remove Redundant Fields After migration validation:

-- Remove old ITIL fields from tickets table
ALTER TABLE tickets DROP COLUMN itil_priority_level;
ALTER TABLE tickets DROP COLUMN itil_category;
ALTER TABLE tickets DROP COLUMN itil_subcategory;

6.2 Remove Hardcoded ITIL Data

  • Remove ItilCategories object from utils
  • Remove hardcoded priority mapping logic
  • Keep ItilLabels for Impact/Urgency display only

User Feedback on Original Plan

  • Step 4.2 not necessary - no tickets with ITIL in production (branch has not been published)
  • Migration files can be edited - they were rolled back, so direct editing is possible
  • Step 1.1 - priorities should not be per tenant, add them to standard_priorities to make ITIL available for import
  • 4.1 Add ITIL Standard Flags - these should go to standard_priorities, standard_categories (not tenant tables)
  • Need ITIL capability flags - add to both standard_channels and channels tables

Post-Implementation Assessment

Date: 2025-09-18 Status: Plan approximately 70% completed - significant cleanup work remains

What Was Successfully Implemented:

Database Schema Updates:

  • Added ITIL flags to standard_priorities, standard_categories, standard_channels, and channels tables
  • ITIL priorities added to standard_priorities table with proper mapping
  • ITIL categories added to standard_categories table
  • Removed redundant itil_category, itil_subcategory, and itil_priority_level fields from tickets table migration
  • Priority calculation and mapping logic updated in ticketActions.ts
  • Priority display logic consolidated in ticket-columns.tsx

Business Logic:

  • Updated optimizedTicketActions.ts to fetch both custom and ITIL priorities/categories
  • Priority calculation maps ITIL Impact×Urgency to correct standard_priorities record

Why The Plan Was Not Fully Executed:

The implementation stopped at the database/backend level but did not complete the frontend component cleanup. Many files still reference the deprecated fields that should have been removed:

  • itil_priority_level - found in 15+ files
  • itil_category - found in 20+ files
  • itil_subcategory - found in 15+ files

Root Cause: The original implementation focused on making the new system work alongside the old system, but did not complete the removal of the old system, leaving a dual-system approach instead of true consolidation.


Completion Plan - Remaining Work

The following phases will complete the ITIL consolidation by removing all legacy dual-system references and fully implementing the unified priority/category system.

Phase 1: Interface & Schema Cleanup (High Priority)

1.1 Update Ticket Interfaces

  • File: server/src/interfaces/ticket.interfaces.tsx
  • Remove deprecated fields from ITicket interface: itil_priority_level, itil_category, itil_subcategory
  • Update comment on priority_id to reflect unified system
  • Update ITicketListItem interface accordingly

1.2 Update Ticket Schemas

  • File: server/src/lib/schemas/ticket.schema.ts
  • Remove from ticketFormSchema: itil_priority_level, itil_category, itil_subcategory
  • Remove validation rule requiring priority_id OR itil_priority_level
  • Remove corresponding fields from ticketSchema and ticketUpdateSchema

1.3 Update Channel Interface

  • File: server/src/interfaces/channel.interface.ts
  • Remove display_itil_category field if no longer needed

Phase 2: Component Logic Updates (Critical)

2.1 Modernize ItilFields Component

  • File: server/src/components/tickets/ItilFields.tsx
  • Remove hardcoded ItilCategories import and usage
  • Update to receive ITIL categories as props from parent components
  • Remove category/subcategory selection logic (use unified CategoryPicker)
  • Keep only Impact/Urgency fields and resolution fields

2.2 Complete QuickAddTicket Updates

  • File: server/src/components/tickets/QuickAddTicket.tsx
  • Remove all references to itil_category and itil_subcategory
  • Remove hardcoded category handling logic
  • Ensure ITIL categories are properly filtered from unified categories list

2.3 Complete TicketInfo Updates

  • File: server/src/components/tickets/ticket/TicketInfo.tsx
  • Remove legacy ITIL category handling
  • Ensure category changes go through unified category system only

2.4 Update TicketDetails Component

  • File: server/src/components/tickets/ticket/TicketDetails.tsx
  • Remove separate ITIL category state management
  • Remove legacy field handling in update logic
  • Ensure all category/priority updates use unified system

Phase 3: Business Logic Cleanup (Medium Priority)

3.1 Update Service Layer

  • File: server/src/lib/services/itilService.ts
  • Update category references to use category_id
  • Modify metrics collection to work with unified category system

3.2 Update Workflow Logic

  • File: server/src/lib/workflows/itilIncidentLifecycleWorkflow.ts
  • Update category validation to use unified category system

3.3 Clean Up Remaining Components

  • Update any remaining files with legacy field references
  • Ensure all ticket queries only use unified fields

Phase 4: Testing & Validation (Critical)

4.1 Functional Testing

  • Test ITIL ticket creation with Impact/Urgency calculation
  • Verify ITIL categories display correctly in CategoryPicker
  • Confirm priority mapping works correctly
  • Test ticket updates maintain ITIL functionality

4.2 Database Verification

  • Confirm no code references removed database fields
  • Verify ITIL priorities/categories are properly loaded from standard tables

Success Criteria

No references to itil_priority_level, itil_category, itil_subcategory in codebase All ITIL tickets use unified priority_id and category_id fields ITIL Impact/Urgency calculation still works and maps to correct priorities ITIL categories display correctly using unified CategoryPicker All tests pass and ITIL functionality is preserved