PSA/docs/billing/plans/billing-improvement-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

278 lines
7.5 KiB
Markdown

# Billing Feature Improvement for Alga PSA
**📋 STATUS: COMPLETED (94% Implementation)**
This document represents the original improvement plan for the billing system. The work described here has been **substantially completed** as of the time of this update.
**Implementation Summary:**
- ✅ Phases 1-3, 5-9: Fully Implemented
- ⚠️ Phase 4: Partially Implemented (basic support exists, minor UI enhancements pending)
For current billing system documentation, see:
- [billing.md](../billing.md) - Comprehensive billing system overview
- [billing_cycles.md](../billing_cycles.md) - Billing cycle management
- [invoice_templates.md](../invoice_templates.md) - Invoice template system
- [invoice_finalization.md](../invoice_finalization.md) - Invoice finalization
---
## Overview
Completed rename: Plan Bundles → Contracts and Billing Plans → Contract Lines to create an intuitive, MSP-standard billing experience.
## Current State - Database & Code
### Existing Tables (Front End Uses)
- `contract_templates` - Reusable contract blueprints managed by template authoring flows
- `contracts` - Client-specific contract instances (one row per agreement)
- `client_contracts` - Assignment table that links contracts to clients and stores lifecycle metadata (start/end dates, PO info)
- `contract_lines` - Contract line definitions (now store contract association, display order, billing timing, and optional `custom_rate`)
### Existing Code Patterns to Reuse:
- Wizard pattern in `OnboardingWizard.tsx`
- WizardProgress and WizardNavigation components
- Custom UI components (Button, Card, Dialog, Input, CustomSelect)
- Contract CRUD actions
- Billing engine (all billing types supported)
---
## Phase 1: Terminology & Navigation ✓ FRONTEND ONLY
**Files to modify:**
- `/server/src/components/billing-dashboard/BillingDashboard.tsx`
- `/server/src/components/billing-dashboard/contracts/`
- Ensure display text consistently uses "Contracts" and "Contract Lines"
**Changes:**
1. Rename tabs: `['contracts', 'generate-invoices', 'invoices', 'invoice-templates', 'tax-rates', 'billing-cycles']`
2. Hide: `credits`, `reconciliation` (Coming Soon)
3. Add tooltips for key concepts
---
## Phase 2: Contract Wizard ✓ FRONTEND ONLY
**New Component:** `/server/src/components/billing-dashboard/contracts/ContractWizard.tsx`
**Steps:**
```typescript
Step 1: Contract Basics
- Company (required) - CompanyPicker/CustomSelect
- Contract name (required)
- Start date (required)
- End date (optional)
- Description (optional)
Step 2: Fixed Fee Services
- Select services from catalog
- Set monthly base rate
- Proration settings
Step 3: Hourly Services
- Select services
- Set hourly rates
- Minimum billable time
Step 4: Bucket Hours
- Hours per period
- Monthly fee
- Overage rate
- Visual explanation
Step 5: Review & Create
- Show all configured services
- Validation warnings
- Estimated monthly value
```
**Validation:**
- Must have company, contract name, start date
- Must have at least one service line
**Reuse:**
- WizardProgress, WizardNavigation
- Alga PSA UI components
- State management pattern from OnboardingWizard
---
## Phase 3: Contract Management Screen ✓ FRONTEND ONLY
**New Components:**
- `/server/src/components/billing-dashboard/contracts/ContractList.tsx`
- `/server/src/components/billing-dashboard/contracts/ContractDetail.tsx`
**ContractList Features:**
- DataTable with: Company | Contract Name | Status | Monthly Value | Start Date | End Date | Actions
- Status badges: Active (green) | Upcoming (blue) | Expired (gray)
- Search/filter by company, status
- Actions: View, Edit, Renew, Terminate
**ContractDetail Features:**
- Header: Contract info, status badge
- Service Lines section
- Invoices section (list invoices from this contract)
- Actions: Edit, Renew, Terminate
---
## Phase 4: Enhanced Invoice Generation ✓ FRONTEND ONLY
**Modify:** `/server/src/components/billing-dashboard/AutomaticInvoices.tsx`
**Improvements:**
- Two-column layout: "Ready to Invoice" | "Already Invoiced"
- Show contract name in each row
- Batch preview functionality
- Better visual indicators
**Time Entry Association:**
- Show contract name in time entry views
- Warning if no matching contract
---
## Phase 5: Contract Pricing Schedules ⚠️ NEEDS BACKEND
**New Table:** `contract_pricing_schedules`
```sql
- schedule_id, tenant, company_bundle_id
- effective_date, end_date
- custom_rate (cents)
- notes
```
**Frontend Component:** `/server/src/components/billing-dashboard/contracts/PricingSchedules.tsx`
- Timeline visualization
- Add/edit/delete schedules
---
## Phase 6: Bucket Hours UI/UX ✓ FRONTEND ONLY
**Enhancements:**
- Progress bar showing usage
- Color coding: Green/Yellow/Red
- Historical usage chart
- Clear invoice line items
---
## Phase 7: Purchase Orders ⚠️ NEEDS BACKEND
**Alter:** `company_plan_bundles` add `po_number`, `po_amount`, `po_required`
**Frontend:**
- PO fields in wizard
- PO section in contract detail
- Validation in invoice generation
---
## Phase 8: Core Reporting ✓ FRONTEND ONLY (Mock Data)
**New Component:** `/server/src/components/billing-dashboard/reports/ContractReports.tsx`
**Reports:**
1. Contract Revenue Report
2. Contract Expiration Report
3. Bucket Hours Utilization
4. Simple Profitability
---
## Phase 9: Polish & Documentation ✓ FRONTEND ONLY
- In-app tooltips
- Quick start guide component
- Email template previews (design only)
- Loading states, empty states
- Success/error notifications
---
## Frontend Implementation Order
### Sprint 1 (Current): Core Structure
1. Rename `plan-bundles``contracts` directory (complete)
2. Update BillingDashboard tabs and labels
3. Create ContractWizard skeleton
4. Create ContractList skeleton
### Sprint 2: Contract Wizard
1. Implement all 5 wizard steps with form fields
2. Add validation logic (client-side)
3. Wire up state management
4. Add mock data for testing
### Sprint 3: Contract Management
1. Complete ContractList with mock data
2. Complete ContractDetail with mock data
3. Add actions (Edit opens wizard, etc.)
4. Status badges and filters
### Sprint 4: Enhanced Flows
1. Update AutomaticInvoices UI
2. Add contract info to time entry views
3. Bucket hours visualizations
### Sprint 5: Reporting & Polish
1. Contract reports with mock data
2. Tooltips and help text
3. Empty states and loading states
4. Quick start guide
---
## Mock Data Strategy
For frontend development, use mock data that matches existing interfaces:
- Mock contracts (IContract)
- Mock contract assignments (ICompanyContract)
- Mock contract lines (IContractLine)
- Mock companies (ICompany)
- Mock invoices (IInvoice)
---
## File Structure
```
/server/src/components/billing-dashboard/
contracts/
ContractWizard.tsx (NEW)
ContractList.tsx (NEW)
ContractDetail.tsx (NEW)
PricingSchedules.tsx (NEW - Phase 5)
QuickStartGuide.tsx (NEW - Phase 9)
reports/
ContractReports.tsx (NEW - Phase 8)
BillingDashboard.tsx (MODIFY)
AutomaticInvoices.tsx (MODIFY - Phase 4)
/server/src/components/time-management/
time-entry/time-sheet/
TimeSheet.tsx (MODIFY - add contract column)
/docs/
billing-improvement-plan.md (THIS FILE)
```
---
## Success Metrics
- Finance person generates monthly invoices in < 5 min
- New user creates contract in < 5 min
- Wizard completion rate > 95%
- 90% reduction in billing support tickets
- Zero calculation errors
---
## Notes
- Frontend first, backend later
- Use existing actions where possible, mock where needed
- Match Alga PSA design patterns and component library
- Reuse wizard pattern from onboarding
- No schema changes until backend phase