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
331 lines
9.8 KiB
Markdown
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
|