ACUMATICA

Acumatica Revenue Recognition

May 1, 2024 14 min read

Introduction

Revenue recognition in Acumatica enables organizations to comply with ASC 606 and other accounting standards. This guide covers implementing revenue schedules, contract management, and automated recognition.

ASC 606 Overview

ASC 606 requires recognition of revenue when:

  • Contract is identified
  • Performance obligations are defined
  • Transaction price is determined
  • Price is allocated to obligations
  • Revenue is recognized when obligations are met

Contract Management

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

{
  "CustomerID": { "value": "CUST001" },
  "ContractID": { "value": "CONT-2024-001" },
  "Description": { "value": "Annual Service Contract" },
  "StartDate": { "value": "2024-01-01" },
  "EndDate": { "value": "2024-12-31" },
  "TotalValue": { "value": 12000 }
}

Revenue Schedules

async function createRevenueSchedule(contractId, items) {
    const scheduleData = {
        ContractID: { value: contractId },
        RevenueType: { value: 'StraightLine' },
        Schedules: items.map(item => ({
            InventoryID: { value: item.productId },
            RevenueAccount: { value: item.revenueAccount },
            Amount: { value: item.amount },
            StartDate: { value: item.startDate },
            Frequency: { value: item.frequency },
            Periods: { value: item.periods }
        }))
    };

    return await createSchedule(baseUrl, token, scheduleData);
}

Automation

async function runRevenueRecognition(period) {
    const pendingSchedules = await getPendingSchedules(period);
    
    for (const schedule of pendingSchedules) {
        const recognitionAmount = calculateRecognitionAmount(schedule);
        
        const journalEntry = {
            Account: { value: schedule.revenueAccount },
            Amount: { value: -recognitionAmount },
            Description: { value: `Revenue Recognition - ${period}` }
        };
        
        await createJournalEntry(baseUrl, token, journalEntry);
    }
}

Complete Implementation

class RevenueRecognitionManager {
    async processContract(contract) {
        await this.validateContract(contract);
        
        const performanceObligations = await this.identifyObligations(contract);
        
        const transactionPrice = await this.calculatePrice(contract);
        
        await this.createRevenueSchedules(contract, performanceObligations, transactionPrice);
    }

    async runMonthlyRecognition(period) {
        const schedules = await this.getActiveSchedules(period);
        
        for (const schedule of schedules) {
            await this.recognizeRevenue(schedule, period);
        }
    }
}

Summary

Revenue recognition in Acumatica enables compliance with ASC 606 and other accounting standards. By implementing contract management, revenue schedules, and automated recognition, organizations can maintain accurate financial reporting.

For more information, check out our other tutorials on Consolidation Reporting and Advanced Pricing.