Cost Allocations
Distribute shared costs across departments, projects, and business units with plugin-based allocation logic
Overview#
Cost allocation distributes shared costs to the business units, departments, projects, or products that benefit from them. Artifi uses a plugin-based architecture where:
- The backend stores data -- allocation runs, lines, validation, and GL posting
- Plugins and agents handle the logic -- reading data, applying allocation formulas, and submitting results
- No hardcoded drivers -- no headcount, revenue, or formula logic is built into the system
- Fully customizable -- clients can modify the starter plugin or build their own
- Full document traceability -- bidirectional linking from source document through allocation to target GL entry
What Is Allocation?#
Cost allocation redistributes shared costs to the areas that benefit from them:
| Scenario | Source | Targets | Method |
|---|---|---|---|
| IT costs to departments | IT expense account | Department dimensions | Headcount, fixed percentage |
| Rent to business units | Facilities account | Business unit dimensions | Square footage |
| Shared services | Corporate overhead | Subsidiaries | Revenue proportion |
| Bill cost distribution | AP invoice line | Department dimensions | Fixed percentage, usage |
| Revenue recognition | Deferred revenue | Revenue accounts | Contract terms |
Allocation Types#
| Type | Description |
|---|---|
| Cost Allocation | Distribute expense costs across departments, projects, etc. |
| Revenue Allocation | Allocate revenue across business units or products |
| Intercompany Charge | Charge costs between entities within the same organization |
How It Works#
Standalone Allocation (No Source Document)#
For periodic cost distributions (e.g., monthly IT overhead split):
- Plugin reads GL balances using standard query tools
- Plugin applies allocation logic (fixed percentages, headcount ratios, etc.)
- Plugin calculates debit/credit splits across target dimensions
- Preview shown to user for review
- Allocation run created in draft status
- Lines submitted -- system validates balance and accounts
- Approved -- ready for GL posting
- Executed -- GL journal entry posted
Document-Linked Allocation (From Source Transaction)#
For allocating specific invoices or transactions:
- Plugin reads source transaction (e.g., an AP invoice for Slack at 120 EUR)
- Plugin calculates splits across teams
- Allocation run created with link to source transaction
- Lines submitted -- system validates source accounts match the original transaction
- Approved and executed -- GL journal entry posted with full document chain
Document Chain#
When allocating from a source document, the system maintains a complete audit trail:
Source Transaction Allocation Run Target Transaction
(e.g., AP Invoice) (ALLOC-0007) (GL Journal Entry)
EE-BILL000527 <---- Source link ----> EE-CAL000006
Account: 60002 Run details DR/CR from lines
Amount: 120.00 Lines + dims
From any document in the chain, you can navigate to every related document -- in the admin dashboard or through the AI assistant.
Allocation Run Lifecycle#
Draft --> Calculated --> Approved --> Posted
--> Rejected
Voided <----------------- Posted
| Status | Description |
|---|---|
| Draft | Run created, no lines yet |
| Calculated | Lines submitted and validated |
| Approved | Ready for GL posting |
| Posted | GL journal entry created |
| Voided | Reversed (creates reversing GL entry) |
| Rejected | Rejected during approval |
Allocation Lines#
Each allocation run contains source and target lines:
- Source lines represent the cost being redistributed (typically credits removing cost from the original dimension)
- Target lines represent where the cost is allocated to (typically debits with specific dimensions)
- Total debits must equal total credits across all lines
Line Fields#
| Field | Required | Description |
|---|---|---|
| Line type | Yes | "source" or "target" |
| Account number | Yes | GL account (must exist and be active) |
| Amount | Yes | Positive amount |
| Debit/Credit | Yes | DR or CR |
| Description | No | Line description |
| Dimensions | No | Up to 3 dimension code/value pairs (e.g., DEPT: SALES) |
Validation Rules#
Basic Validations#
- Balance -- Total debits must equal total credits (tolerance: $0.01)
- Accounts -- All account numbers must exist and be active
- Source + Target -- At least one source line and one target line required
- Minimum lines -- At least 2 lines
- Positive amounts -- All amounts must be greater than zero
Source Document Validations#
When an allocation is linked to a source transaction:
- Account match -- Source allocation lines must use accounts that appear in the source transaction's GL lines
- Allocation limit -- The allocation amount cannot exceed the remaining unallocated balance for each account
- Partial allocation -- A multi-line source transaction can have separate allocations per account line
Example Validation Messages#
- "Source line accounts do not appear in the source transaction's GL lines. Available accounts: 2000, 60002"
- "Account 60002 is already fully allocated (120.00 of 120.00) by ALLOC-0007. Void existing allocations first."
- "Source amount 80.00 exceeds remaining unallocated balance of 50.00."
Usage Examples#
Example 1: Monthly IT Overhead Split#
Split 10,000 in IT overhead across departments at 60/25/15:
| Line | Type | Account | Amount | DR/CR | Dimension |
|---|---|---|---|---|---|
| 1 | Source | 6900 | 10,000 | CR | DEPT: IT |
| 2 | Target | 6900 | 6,000 | DR | DEPT: SALES |
| 3 | Target | 6900 | 2,500 | DR | DEPT: MARKETING |
| 4 | Target | 6900 | 1,500 | DR | DEPT: FINANCE |
Example 2: Allocating an AP Invoice Across Teams#
Allocate a Slack bill (120 EUR, account 60002) across engineering, product, and sales:
| Line | Type | Account | Amount | DR/CR | Dimension |
|---|---|---|---|---|---|
| 1 | Source | 60002 | 120.00 | CR | (from source) |
| 2 | Target | 60002 | 60.00 | DR | DEPT: ENGINEERING |
| 3 | Target | 60002 | 36.00 | DR | DEPT: PRODUCT |
| 4 | Target | 60002 | 24.00 | DR | DEPT: SALES |
The source account (60002) must match the source transaction, and the total (120.00) cannot exceed the unallocated balance.
Example 3: Partial Allocation#
An invoice has two expense lines (60002 for 120 and 61000 for 350). You can allocate just the office expense (60002) now and create a separate allocation for travel (61000) later. Each account tracks its own allocation balance independently.
Example 4: Voiding an Allocation#
If incorrect percentages were used, void the allocation:
- Creates a reversing GL journal entry automatically
- Frees up the source account amounts for re-allocation
GL Posting#
When an allocation run is executed:
- The allocation type is mapped to a transaction type (COST_ALLOCATION, REVENUE_ALLOCATION, or INTERCOMPANY_CHARGE)
- An open fiscal period is validated for the run date
- A GL journal entry is posted with all source and target lines
- The allocation is recorded in history
- The run status updates to "posted" with a link to the GL transaction
Voiding#
When an allocation is voided:
- A reversing GL journal entry is created (all debits become credits and vice versa)
- The allocation history is marked as reversed
- The run status changes to "voided"
- Source account amounts are freed up for re-allocation
Admin Dashboard#
Allocation Runs List#
View all allocation runs with filters for entity, status, type, and period. Shows run number, date, type, status, amounts, and document links.
Allocation Run Detail#
Detailed view showing:
- Document Chain -- Visual flow from source document through allocation to target GL entry (with links)
- Run details -- Status, dates, amounts, entity
- Allocation lines -- All source and target lines with accounts, amounts, and dimensions
- Execution history -- Timeline of status changes
Transaction Detail Integration#
When viewing a transaction linked to an allocation:
- As source (e.g., viewing the AP invoice) -- Shows "Allocated" badge with link to allocation run and target GL document
- As target (e.g., viewing the allocation GL entry) -- Shows "Created by allocation" badge with link to source document
Starter Plugin#
Every organization ships with the arfiti-core-cost-allocation plugin providing:
- Step-by-step allocation workflow with checkpoints
- Commands for running and previewing allocations
- Reference documentation for 6 allocation methods
- Submission format specification
Clients can customize this plugin or build their own for specialized allocation needs -- revenue sharing, intercompany charges, or industry-specific distribution methods.
Subscribe to new posts
Get notified when we publish new insights on AI-native finance.