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

234 lines
9.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ITIL Consolidation Cleanup Plan
**Date**: 2025-09-18
**Issue**: Incomplete consolidation, cleanup needed
## Original Implementation Plan (From Previous Claude)
### :dart: 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)
### :clipboard: Original Implementation Plan
**Phase 1: Create ITIL Standard Records**
1.1 ITIL Priority Records
Create migration to populate **standard_priorities** table with ITIL standards:
```sql
-- 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:
```sql
-- 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
```sql
-- 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:
```sql
-- 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