ACUMATICA

Acumatica Intercompany Transactions

April 5, 2024 12 min read

Introduction

Intercompany transactions in Acumatica enable organizations with multiple legal entities to record and reconcile transactions between subsidiaries. This is essential for accurate consolidated financial reporting.

Multi-Entity Setup

POST /api/data/CR102000
Content-Type: application/json

{
  "CompanyID": { "value": "SUB001" },
  "CompanyName": { "value": "Subsidiary Company" },
  "TaxID": { "value": "12-3456789" },
  "BaseCurrency": { "value": "USD" },
  "Consolidated": { "value": true }
}

Transaction Processing

async function createIntercompanyTransfer(fromEntity, toEntity, amount, items) {
    // Create intercompany AR invoice in source
    const invoiceData = {
        CustomerID: { value: `IC-${toEntity}` },
        Details: items.map(item => ({
            InventoryID: { value: item.sku },
            Qty: { value: item.qty },
            UnitPrice: { value: item.price }
        }))
    };

    await createInvoice(baseUrl, token, fromEntity, 'AR301000', invoiceData);
}

Eliminations

async function generateEliminationEntries(period) {
    const intercompanyBalances = await getIntercompanyBalances(period);
    
    for (const balance of intercompanyBalances) {
        const eliminationEntry = {
            GLAccount: { value: balance.eliminationAccount },
            Amount: { value: -balance.balance },
            Description: { value: `Eliminate IC - ${balance.entity}` }
        };

        await createGLEntry(baseUrl, token, period, eliminationEntry);
    }
}

Transfer Pricing

async function applyTransferPricingRules(fromEntity, toEntity, product, qty) {
    const basePrice = await getBasePrice(product);
    
    const rules = await getTransferPricingRules(product);
    
    let transferPrice = basePrice;
    
    if (rules.method === 'percentage') {
        transferPrice = basePrice * (1 + rules.percentage / 100);
    } else if (rules.method === 'fixed') {
        transferPrice = rules.fixedPrice;
    }
    
    return transferPrice;
}

Complete Integration

class IntercompanyManager {
    async processTransaction(transaction) {
        await this.validateEntities(transaction.from, transaction.to);
        
        const transferPrice = await this.calculateTransferPrice(transaction);
        
        await this.createIntercompanyInvoice(transaction.from, transaction.to, transferPrice);
        
        await this.createIntercompanyBill(transaction.to, transaction.from, transferPrice);
        
        await this.reconcile(transaction);
    }

    async generateConsolidatedReport(period) {
        await this.eliminateIntercompanyBalances(period);
        
        return await this.generateConsolidatedFinancials(period);
    }
}

Summary

Managing intercompany transactions in Acumatica enables accurate accounting across multiple entities. With proper setup, elimination entries, and transfer pricing rules, you can maintain accurate consolidated financial statements.

For more information, check out our other tutorials on Consolidation Reporting and Audit Trails.