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
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz Source: /opt/alga-psa on psa.joliet.tech
278 lines
7.5 KiB
Markdown
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
|