Introduction
La reconnaissance des revenus est un principe comptable clé qui détermine quand une entreprise peut enregistrer un revenu. En 2026, les normes IFRS 15 et ASC 606 restent essentielles pour les développeurs travaillant sur des systèmes financiers. Ce tutoriel vous guide pas à pas pour implémenter ces règles dans une application simple.
Prérequis
- Node.js 18+
- Connaissances basiques de TypeScript
- Compréhension élémentaire de la comptabilité
Initialiser le projet
npm init -y
npm install typescript @types/node
npx tsc --initCette commande crée un projet TypeScript vide prêt à recevoir la logique de reconnaissance des revenus.
Définir le modèle de contrat
export interface Contract {
id: string;
customerName: string;
totalAmount: number;
performanceObligations: number;
startDate: Date;
endDate: Date;
}Ce type représente un contrat client selon IFRS 15 avec ses obligations de performance.
Implémenter la méthode des 5 étapes
import { Contract } from '../models/Contract';
export function recognizeRevenue(contract: Contract): number {
const dailyRevenue = contract.totalAmount /
((contract.endDate.getTime() - contract.startDate.getTime()) / (1000 * 3600 * 24));
const daysElapsed = (new Date().getTime() - contract.startDate.getTime()) / (1000 * 3600 * 24);
return Math.min(Math.max(0, dailyRevenue * daysElapsed), contract.totalAmount);
}Cette fonction calcule le revenu reconnu linéairement sur la durée du contrat, base de la reconnaissance selon IFRS 15.
Créer un exemple de contrat
import { Contract } from '../models/Contract';
import { recognizeRevenue } from '../revenue/recognizeRevenue';
const contract: Contract = {
id: 'C-2026-001',
customerName: 'Client ACME',
totalAmount: 12000,
performanceObligations: 1,
startDate: new Date('2026-01-01'),
endDate: new Date('2026-12-31')
};
console.log(recognizeRevenue(contract));Exemple complet exécutable qui affiche le montant de revenu reconnu à la date du jour.
Ajouter la validation des inputs
import { Contract } from '../models/Contract';
export function validateContract(contract: Contract): boolean {
if (contract.totalAmount <= 0) return false;
if (contract.endDate <= contract.startDate) return false;
return true;
}Validation essentielle pour éviter les calculs erronés sur des contrats invalides.
Bonnes pratiques
- Toujours valider les données de contrat avant calcul
- Stocker les dates en UTC pour éviter les décalages
- Séparer la logique métier des calculs financiers
- Documenter chaque obligation de performance
- Utiliser des tests unitaires pour chaque scénario
Erreurs courantes
- Oublier de vérifier que la date de fin est postérieure à la date de début
- Calculer le revenu sans tenir compte des obligations de performance multiples
- Ignorer les contrats avec paiement anticipé ou échelonné
- Ne pas arrondir correctement les montants monétaires
Pour aller plus loin
Approfondissez la norme IFRS 15 et les cas complexes avec nos formations Learni.