PSA/ee/docs/plans/progress-quickbooks-csv-export.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

169 lines
6.3 KiB
Markdown

# QuickBooks CSV Export/Import - Progress Tracker
## Overview
This document tracks the implementation progress of the QuickBooks CSV Export/Import feature, which provides an alternative to OAuth integration for QuickBooks.
**Branch:** `feature/quickbooks-csv-export`
**Started:** 2024-12-16
**Status:** Core Implementation Complete
---
## Progress Log
### 2024-12-16 - Initial Setup
- [x] Created feature branch `feature/quickbooks-csv-export` from `release/0.15.0`
- [x] Set up development environment (port 3002)
- [x] Completed comprehensive exploration of existing codebase:
- QuickBooks integration (`quickBooksOnlineAdapter.ts`, `qboClientService.ts`)
- External tax calculation system (`externalTaxImportService.ts`)
- Accounting export batch system (`accountingExportService.ts`)
- Mapping resolver (`accountingMappingResolver.ts`)
- [x] Created implementation plan
- [x] Created feature tracking files:
- `features-quickbooks-csv-export.json` - Task list with completion status
- `progress-quickbooks-csv-export.md` - This progress file
### 2024-12-16 - Core Infrastructure
- [x] Created `csvFieldNormalizer.ts` utility
- Column alias mappings for QuickBooks CSV variations
- Header normalization function
- Levenshtein distance for column suggestions
- Validation utilities for required columns
- [x] Created `csvTaxImportValidator.ts` service
- Structure validation (required columns with alias support)
- Row-level parsing (dates, amounts, tax rates)
- Database cross-referencing (invoice existence, tax_source check)
- Duplicate detection and tax aggregation
- [x] Created `csvTaxImportService.ts` service
- Main `importTaxFromCSV` method with validation and dry-run support
- Proportional tax distribution using floor + remainder algorithm
- Transaction-based updates for atomicity
- Import history tracking in `external_tax_imports` table
- Rollback capability to revert imports
### 2024-12-16 - Export Adapter
- [x] Created `QuickBooksCSVAdapter`
- Implements `AccountingExportAdapter` interface
- File-based delivery mode (generates downloadable CSV)
- Resolves service, tax code, and payment term mappings
- Supports tax delegation mode for external tax calculation
- [x] Registered adapter in `registry.ts`
### 2024-12-16 - API Routes
- [x] Created CSV export API route (`POST /api/accounting/csv/export`)
- [x] Created tax import API route (`POST /api/accounting/csv/import/tax`)
- [x] Created template download route (`GET /api/accounting/csv/import/tax/template`)
- [x] Created import history route (`GET /api/accounting/csv/import/tax/history`)
- [x] Created rollback route (`POST /api/accounting/csv/import/tax/rollback/[importId]`)
### 2024-12-16 - UI Components
- [x] Created `CSVExportPanel` component
- Date range picker
- Invoice status filters
- Tax delegation mode toggle
- Download button with loading state
- [x] Created `CSVTaxImportPanel` component
- File upload (drag & drop)
- Required date range
- Inline help with QuickBooks export instructions
- Validate and Import buttons
- [x] Created `CSVImportPreview` component
- Stats summary (rows, valid, matched)
- Validation status badges
- Error and warning lists
- Import summary with tax totals
- [x] Created `CSVIntegrationSettings` wrapper component
- [x] Integrated into `IntegrationsSettingsPage` under Accounting category
---
## Phase Status
| Phase | Status | Progress |
|-------|--------|----------|
| 1. Core Infrastructure | Mostly Complete | 3/5 tasks |
| 2. Export Adapter | Mostly Complete | 3/4 tasks |
| 3. Import API | Mostly Complete | 2/4 tasks |
| 4. UI Components | Complete | 4/4 tasks |
| 5. Testing & Polish | Not Started | 0/3 tasks |
**Overall Progress:** 12/20 tasks (60%)
---
## Remaining Work
### Phase 1: Core Infrastructure
- [ ] Write unit tests for CSV field normalizer
- [ ] Write unit tests for CSV tax import validator
### Phase 2: Export Adapter
- [ ] Write unit tests for QuickBooksCSVAdapter
### Phase 3: Import API
- [ ] Write integration tests for CSV export flow
- [ ] Write integration tests for CSV tax import flow
### Phase 5: Testing & Polish
- [ ] Write Playwright E2E tests for CSV export UI
- [ ] Write Playwright E2E tests for CSV import UI
- [ ] Add optional database index for CSV import queries
---
## Commits
| Date | Commit | Description |
|------|--------|-------------|
| 2024-12-16 | 18b82a1b2 | feat(csv-import): add CSV field normalizer utility |
| 2024-12-16 | fc0652c8a | feat(csv-import): add CSV tax import validator service |
| 2024-12-16 | c6fb100a3 | feat(csv-import): add CSV tax import service |
| 2024-12-16 | 26f55cf6e | feat(csv-export): add QuickBooks CSV export adapter |
| 2024-12-16 | f586bcfa6 | feat(csv): add CSV accounting API routes |
| 2024-12-16 | 7e008f1ff | feat(csv-ui): add CSV export and import UI components |
| 2024-12-16 | 950ab8671 | feat(csv-ui): integrate CSV panels into integrations settings |
---
## Reference Files
Key files created during implementation:
**Core Services:**
- `server/src/lib/utils/csvFieldNormalizer.ts` - Column name normalization
- `server/src/lib/services/csvTaxImportValidator.ts` - Validation rules
- `server/src/lib/services/csvTaxImportService.ts` - Import logic
**Adapter:**
- `server/src/lib/adapters/accounting/quickBooksCSVAdapter.ts` - CSV export adapter
- `server/src/lib/adapters/accounting/registry.ts` - Adapter registration
**API Routes:**
- `server/src/app/api/accounting/csv/export/route.ts`
- `server/src/app/api/accounting/csv/import/tax/route.ts`
- `server/src/app/api/accounting/csv/import/tax/template/route.ts`
- `server/src/app/api/accounting/csv/import/tax/history/route.ts`
- `server/src/app/api/accounting/csv/import/tax/rollback/[importId]/route.ts`
**UI Components:**
- `server/src/components/integrations/csv/CSVExportPanel.tsx`
- `server/src/components/integrations/csv/CSVTaxImportPanel.tsx`
- `server/src/components/integrations/csv/CSVImportPreview.tsx`
- `server/src/components/settings/integrations/CSVIntegrationSettings.tsx`
---
## Notes
- The CSV integration is accessible from Settings > Integrations > Accounting tab
- Service mappings must be configured in the QuickBooks Online section before exporting
- Unmapped services will cause the entire export to fail (consistent with existing adapters)
- Inline help is provided in the tax import panel with QuickBooks export instructions