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.