--- phase: 05-visibility-and-client-portal plan: 05 type: execute wave: 3 depends_on: ["05-01", "05-02", "05-03"] files_modified: - src/lib/__tests__/integration/e2e-workflows.test.ts autonomous: true must_haves: truths: - "Subscriber registration through invoice generation through payment recording works as a single workflow" - "Collector collection through remittance verification works end-to-end with correct JE postings" - "Ticket creation through job order completion triggers auto-resolve" - "All JEs produced during workflows are balanced (debits = credits)" - "Data created by workflows appears correctly in dashboard metrics" artifacts: - path: "src/lib/__tests__/integration/e2e-workflows.test.ts" provides: "End-to-end workflow tests for critical business processes" min_lines: 250 key_links: - from: "src/lib/__tests__/integration/e2e-workflows.test.ts" to: "src/lib/services/*.ts" via: "orchestrates multiple services in sequence" pattern: "(SubscriberService|BillingService|PaymentService|CollectorService|RemittanceService|TicketService|JobOrderService|DashboardService)" --- Create end-to-end tests that exercise critical user workflows from start to finish, verifying that all services integrate correctly and produce accurate accounting entries. Purpose: INFRA-04 — prove that the system works as a coherent whole, not just isolated units. Output: E2E workflow test suite covering the three critical business processes. @C:\Users\KevinAsprec\.claude/get-shit-done/workflows/execute-plan.md @C:\Users\KevinAsprec\.claude/get-shit-done/templates/summary.md @.planning/PROJECT.md @.planning/ROADMAP.md @.planning/STATE.md @src/lib/services/subscriber-service.ts @src/lib/services/billing-service.ts @src/lib/services/payment-service.ts @src/lib/services/collector-service.ts @src/lib/services/remittance-service.ts @src/lib/services/ticket-service.ts @src/lib/services/job-order-service.ts @src/lib/services/dashboard-service.ts @src/lib/accounting/journal-entry-service.ts Task 1: Billing workflow end-to-end test src/lib/__tests__/integration/e2e-workflows.test.ts Create the e2e test file with the first critical workflow. **Setup (shared across all workflows in this file):** - Create tenant (triggers COA seed, ticket category seed) - Create admin user, office staff user, collector user, technician user - Create service plan - Create zone, assign collector to zone **Workflow 1: Subscriber Registration -> Invoice Generation -> Payment Recording** Test as a sequential story: ``` describe("E2E: Billing Workflow") test("1. Register a new subscriber") - Call createSubscriber with name, address, plan - Verify: subscriber created with ACTIVE status, accountNumber generated (SUB-NNNN) - Verify: subscriber has the correct plan assigned test("2. Generate invoice for subscriber") - Call generateInvoiceForSubscriber (from BillingService) - Verify: invoice created with correct totalAmount matching plan price - Verify: invoice has UNPAID status - Verify: JE posted (DR 1100 AR, CR 4010 Service Revenue) — verify via JournalEntryService.getTrialBalance or direct query test("3. Record full payment against invoice") - Call recordPayment with full invoice amount - Verify: invoice status = PAID, amountPaid = totalAmount - Verify: payment created with COMPLETED status - Verify: JE posted (DR 1010 Cash, CR 1100 AR) test("4. Record partial payment on second invoice") - Generate second invoice - Record partial payment (50% of amount) - Verify: invoice status = PARTIAL, amountPaid = partial amount - Verify: JE for partial amount is balanced test("5. Verify trial balance is balanced after all transactions") - Call getTrialBalance - Verify: totalDebits === totalCredits (books are self-verifying) test("6. Dashboard reflects billing activity") - Call getRevenueMetrics - Verify: revenueToday includes the payments made - Call getSubscriberMetrics - Verify: active count includes the registered subscriber ``` Use the existing service functions directly (not HTTP calls). This tests the service integration layer. `npx vitest run src/lib/__tests__/integration/e2e-workflows.test.ts` — billing workflow tests pass Billing workflow e2e test passes: subscriber -> invoice -> payment -> balanced books -> dashboard reflects Task 2: Collection and ticket workflow end-to-end tests src/lib/__tests__/integration/e2e-workflows.test.ts Add two more workflow test suites to the same file. **Workflow 2: Collector Collection -> Remittance Verification** ``` describe("E2E: Collection & Remittance Workflow") test("1. Collector records field collection") - Create subscriber with unpaid invoice - Call recordCollection (from CollectorService) as collector - Verify: collection created, invoice allocated via FIFO - Verify: JE posted (DR 1030 Cash in Transit, CR 1100 AR) test("2. Collector submits remittance") - Call createRemittance with the collection amount - Verify: remittance created with SUBMITTED status test("3. Office staff verifies remittance") - Call verifyRemittance with verified total = submitted total - Verify: remittance status = VERIFIED - Verify: JE posted (DR 1010 Cash on Hand, CR 1030 Cash in Transit) - Verify: variance = 0 test("4. Dashboard reflects collection activity") - Call getCollectorSummary - Verify: collectionsToday > 0 - Verify: unverifiedRemittances = 0 (all verified) test("5. Trial balance still balanced after collection workflow") - Verify totalDebits === totalCredits ``` **Workflow 3: Ticket Creation -> Job Order -> Completion -> Auto-Resolve** ``` describe("E2E: Ticket to Job Order Resolution") test("1. Staff creates ticket from client call") - Call createTicket with category, subject, description, source=STAFF - Verify: ticket created with OPEN status, TKT-NNNN number test("2. Convert ticket to job order") - Call createJobOrder linked to ticket - Assign to technician - Verify: job order created with PENDING status - Verify: ticket status auto-transitions to ASSIGNED test("3. Technician completes job order") - Call updateJobOrderStatus to IN_PROGRESS - Call updateJobOrderStatus to COMPLETED with outcomeNotes - Verify: job order status = COMPLETED test("4. Ticket auto-resolves when all jobs complete") - Verify: ticket status = RESOLVED (auto-resolved by checkTicketAutoResolve) - Verify: resolvedAt is set test("5. Staff closes resolved ticket") - Call transitionTicketStatus to CLOSED - Verify: ticket status = CLOSED - Verify: closedAt is set ``` **Cleanup (afterAll):** Use the most comprehensive cleanup order covering all subsystems: ticketComments -> jobOrders -> tickets -> ticketCategories -> collectionAllocations -> collections -> remittances -> paymentAllocations -> payments -> invoiceLines -> invoices -> journalEntryLines -> null reversesEntryId -> journalEntries -> stockMovements -> inventoryItems -> expenses -> vendors -> expenseCategories (custom) -> subscribers -> servicePlans -> tenantSettings -> accountingPeriods -> accounts -> zoneAssignments -> zones -> technicianProfiles -> jobTypeRates -> users -> tenant Minimum total test count across all 3 workflows: 16+ tests. `npx vitest run src/lib/__tests__/integration/e2e-workflows.test.ts` — all workflow tests pass All 3 critical workflows pass e2e: billing, collection/remittance, ticket/job-order; trial balance balanced throughout; dashboard metrics accurate; 16+ tests pass; INFRA-04 satisfied - `npx vitest run src/lib/__tests__/integration/e2e-workflows.test.ts` — all tests pass - Trial balance is balanced after each workflow (self-verifying books) - Dashboard metrics reflect workflow activity - All three critical paths exercised end-to-end - Billing workflow: registration -> invoice -> payment -> balanced books - Collection workflow: field collection -> remittance -> verification -> balanced books - Ticket workflow: create -> job order -> completion -> auto-resolve -> close - Trial balance balanced after every workflow - Dashboard metrics reflect real data from workflows - INFRA-04 requirement satisfied After completion, create `.planning/phases/05-visibility-and-client-portal/05-05-SUMMARY.md`