PSA/ee/docs/guides/xero-csv-integration.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

331 lines
9.8 KiB
Markdown

# Xero CSV Integration Guide
This guide explains how to use the Xero CSV integration to export invoices from Alga PSA to Xero and import tax calculations back into Alga.
## Overview
The Xero CSV integration provides an alternative to OAuth-based integration when:
- You're waiting for Xero OAuth app approval
- You prefer manual control over the import/export process
- You need to work with multiple Xero organisations without OAuth connections
## Setup Requirements
### 1. Create Tracking Categories in Xero
Before exporting invoices, create the following tracking categories in Xero:
1. Go to **Settings > Tracking Categories** in Xero
2. Create a category named **"Source System"**
- Add an option called **"AlgaPSA"**
3. Create a category named **"External Invoice ID"**
- Options will be created automatically during invoice import
These tracking categories allow Alga to identify invoices when importing tax calculations back.
### 2. Configure Service and Tax Mappings
In Alga, you need to map your services and tax regions to Xero equivalents:
1. Go to **Settings > Integrations > Xero**
2. If you have an OAuth connection, you can use it to configure mappings
3. Map each Alga service to:
- **Item Code**: The Xero inventory item code
- **Account Code**: The Xero revenue account code (e.g., "200")
- **Tax Type**: The Xero tax rate code (e.g., "OUTPUT2" for GST)
4. Map each tax region to a Xero tax rate
### 3. Enable CSV Mode
1. Go to **Settings > Integrations > Xero**
2. Click on **"CSV Import/Export"** mode
3. Configure the date format to match your Xero region settings:
- DD/MM/YYYY for UK, NZ, AU
- MM/DD/YYYY for US
4. Optionally set a default currency
---
## Exporting Invoices to Xero
### Step 1: Create an Export Batch
1. Go to **Billing > Accounting Exports**
2. Click **"New Export Batch"**
3. Select **"Xero (CSV)"** as the adapter
4. Set the date range and invoice statuses to include
5. Click **"Create Batch"**
### Step 2: Execute the Export
1. Select the newly created batch
2. Click **"Execute Export"**
3. The system will generate a CSV file with all selected invoices
### Step 3: Download the CSV
1. After execution completes, click **"Download File"**
2. Save the CSV file to your computer
### Step 4: Import into Xero
1. In Xero, go to **Business > Invoices > Import**
2. Upload the CSV file
3. Review the import preview
4. Import the invoices as **Draft** status
5. Xero will calculate tax based on your organisation's tax settings
### Step 5: Review and Approve in Xero
1. Review the imported Draft invoices in Xero
2. Verify tax calculations are correct
3. Approve or send invoices as needed
---
## Importing Tax Calculations from Xero
After Xero calculates tax on the imported invoices, you can import the tax amounts back into Alga.
### When to Import Tax
Import tax when you've configured invoices with **"Pending External"** tax source. This is typically used when:
- Your Xero organisation handles complex tax calculations
- You have tax rules that aren't easily replicated in Alga
- You want Xero to be the system of record for tax
### Step 1: Export Invoice Details Report from Xero
1. In Xero, go to **Reports > All Reports**
2. Find and run the **"Invoice Details"** report
3. Set the date range to include your exported invoices
4. Click **Export** and choose **CSV** format
5. Save the file
### Step 2: Upload to Alga
1. In Alga, go to **Billing > Accounting Exports**
2. Find the **"Import Tax from Xero"** section (or navigate to the Tax Import panel)
3. Drag and drop your CSV file, or click to browse
### Step 3: Preview the Import
The system will:
- Parse the Xero Invoice Details Report
- Match invoices using the tracking categories
- Show a preview with match status for each invoice
Preview statuses:
- **Matched**: Invoice found and ready for tax import
- **Unmatched**: No matching Alga invoice found
- **Already Imported**: Tax has already been imported for this invoice
- **Not Pending**: Invoice doesn't have "Pending External" tax source
### Step 4: Confirm Import
1. Review the matched invoices and tax amounts
2. Click **"Import"** to apply the tax amounts
3. The system will:
- Update invoice charges with external tax amounts
- Change invoice tax source to "External"
- Record the import in the audit trail
---
## CSV Format Reference
### Export CSV Columns
The export CSV follows Xero's Sales Invoice import format:
| Column | Description |
|--------|-------------|
| *ContactName | Customer/client name |
| EmailAddress | Customer email |
| *InvoiceNumber | Invoice number |
| Reference | Alga invoice ID (for reconciliation) |
| *InvoiceDate | Invoice date |
| *DueDate | Payment due date |
| *Description | Line item description |
| *Quantity | Quantity |
| *UnitAmount | Unit price |
| *AccountCode | Xero revenue account |
| *TaxType | Xero tax rate code |
| TrackingName1 | "Source System" |
| TrackingOption1 | "AlgaPSA" |
| TrackingName2 | "External Invoice ID" |
| TrackingOption2 | Alga invoice ID |
| Currency | Currency code |
### Import CSV (Invoice Details Report)
The tax import expects Xero's Invoice Details Report format. Key columns used:
- Invoice Number
- Contact Name
- Line Amount
- Tax Amount
- Tax Rate
- Tracking Category columns
---
## Troubleshooting
### Export Issues
**No invoices in export:**
- Check that the date range includes finalized invoices
- Verify invoice statuses match the export filter
- Ensure invoices have charges with mapped services
**Missing item/account codes:**
- Configure service mappings in Xero Integration settings
- Ensure each service has an Item Code and Account Code
### Import Issues
**Invoices not matched:**
- Ensure invoices were exported from Alga with tracking categories
- Check that tracking categories exist in Xero
- Verify invoice numbers match
**Tax not applied:**
- Invoice must have "Pending External" tax source
- Invoice must not have tax already imported
**CSV parsing errors:**
- Ensure you're uploading Xero's Invoice Details Report
- Check the file is in CSV format
- Verify the report includes tax columns
---
## Exporting Clients (Contacts) to Xero
Before exporting invoices, it's recommended to export your Alga clients to Xero as contacts. This ensures invoice references are consistent.
### Step 1: Export Clients CSV
1. Go to **Settings > Integrations > Xero**
2. Navigate to the **"Client Sync"** section
3. Click **"Export Clients to CSV"**
4. Save the Xero Contacts CSV file
### Step 2: Import into Xero
1. In Xero, go to **Contacts > Import**
2. Upload the contacts CSV
3. Map the columns if needed
4. Complete the import
### Step 3: Verify Mappings
After import, Alga will track which clients have been synced to Xero. This enables:
- Consistent contact names on invoices
- Future client import to sync new contacts created in Xero
---
## Importing Clients from Xero
If you have clients in Xero that don't exist in Alga, you can import them.
### Step 1: Export Contacts from Xero
1. In Xero, go to **Contacts > Export**
2. Download the contacts CSV
### Step 2: Upload to Alga
1. Go to **Settings > Integrations > Xero > Client Sync**
2. Click **"Import Clients from Xero"**
3. Upload the contacts CSV
### Step 3: Review Preview
The system will show:
- **Matched clients**: Existing Alga clients matched by name/email
- **New clients**: Contacts that will be created in Alga
- **Updated clients**: Existing clients with updated information
### Step 4: Confirm Import
Select which clients to create/update and confirm the import.
---
## Re-Exporting and Lock Reset
Once invoices are exported, they're marked as "exported" to prevent duplicate exports. If you need to re-export invoices:
### Invoice-Level Lock Reset
To re-export specific invoices:
1. Go to **Billing > Accounting Exports**
2. Find the batch containing the invoice
3. Click on the invoice to view details
4. Click **"Reset Export Lock"**
5. Confirm the warning about potential duplicates
### Batch-Level Reversal
To reverse an entire batch:
1. Go to **Billing > Accounting Exports**
2. Find the batch to reverse
3. Click **"Reverse Batch"**
4. Confirm the warning
⚠️ **Warning**: Reversing a batch or resetting locks can cause duplicate invoices in Xero if the originals weren't deleted. Always ensure you've removed the original invoices from Xero before re-exporting.
### Already Exported Warnings
When creating a new export batch, the system will warn you if:
- Selected invoices overlap with previous exports
- Date ranges include already-exported invoices
You can choose to:
- **Skip**: Exclude already-exported invoices
- **Include**: Re-export (creates duplicates if not careful)
- **Cancel**: Adjust your selection
---
## Tax Import History and Rollback
### Viewing Import History
1. Go to **Billing > Accounting Exports > Tax Imports**
2. View all previous tax imports with:
- Import date and time
- Number of invoices affected
- User who performed the import
- Source file reference
### Rolling Back a Tax Import
If tax was imported incorrectly:
1. Find the import in the history
2. Click **"Rollback"**
3. Confirm the rollback
This will:
- Remove external tax amounts from affected invoices
- Reset invoice tax source to "Pending External"
- Record the rollback in the audit trail
---
## Best Practices
1. **Consistent Workflow**: Always export as Draft, review in Xero, then import tax back
2. **Regular Reconciliation**: Periodically verify tracking categories are set correctly
3. **Test First**: Test with a small batch before large exports
4. **Keep Records**: The system records all imports in the audit trail
5. **Review Unmatched**: Investigate any unmatched invoices before ignoring them
6. **Export Clients First**: Export clients before invoices for consistent contact names
7. **Delete Before Re-Export**: Always delete invoices from Xero before resetting locks and re-exporting
8. **Verify Tax Import**: Review the preview carefully before confirming tax imports