Aller au contenu principal

Gestion des Achats & Stock

Enregistrez les acquisitions de stocks, gérez la dette fournisseur et automatisez la variation de stock selon les règles de comptabilité SYSCOHADA. Chaque achat génère automatiquement des écritures de stock pour maintenir une traçabilité d'audit parfaite.

Le Cycle d'Achat

En SYSCOHADA, une transaction d'achat suit un processus en quatre étapes :

  1. Constatation — Enregistrement de la facture et de la dette fournisseur (Compte 4011).
  2. Réduction (optionnel) — Enregistrement des rabais obtenus (RRR, Compte 6019).
  3. Réglement — Enregistrement du/des paiement(s) pour solder la dette.
  4. Variation de Stock — Enregistrement automatique de l'augmentation du stock (Compte 316031).

Chaque étape est une écriture équilibrée séparée pour la conformité de la piste d'audit.

Exemples Rapides

Achat Simple à Crédit

const journal = ohada.recordPurchase({
amount: 100000,
label: "Marchandises",
vatRate: 18
});

Résultat : 2 écritures (Constatation + Variation de Stock)

Achat avec Paiement Immédiat

const journal = ohada.recordPurchase({
amount: 100000,
label: "Table de Bureau",
payments: [{ method: 'cash', amount: 100000 }]
});

Résultat : 3 écritures (Constatation + Réglement + Variation de Stock)


Référence des Types

PurchaseInput

interface PurchaseInput {
// Requis
amount: number; // Montant achat (HT)
label: string; // Description (ex : "Marchandises")

// Optionnel
date?: Date; // Date transaction (défaut : maintenant)
vatRate?: number; // Taux TVA en % (défaut : 18)
charges?: PurchaseCharge[]; // Transport, Douane, etc.
payments?: PurchasePayment[]; // Un ou plusieurs paiements
reduction?: number; // Rabais (RRR obtenus)
stockEntry?: StockEntry; // Compte stock personnalisé (défaut : '31')
}

PurchaseCharge

interface PurchaseCharge {
type: 'Transport' | 'Douane' | 'Divers';
amount: number; // Ajouté à la valeur stock & base TVA
}

PurchasePayment

interface PurchasePayment {
method: 'cash' | 'bank'; // Mode de paiement
amount: number; // Montant payé
}

StockEntry

interface StockEntry {
stockAccount?: string; // Compte stock personnalisé (défaut : '31')
}

Fonctionnalités Principales

Achat avec Transport & Douane

Incluez les frais accessoires qui augmentent la valeur du stock.

const journal = ohada.recordPurchase({
amount: 100000,
label: "Marchandises A",
charges: [
{ type: 'Transport', amount: 5000 },
{ type: 'Douane', amount: 2000 }
],
vatRate: 18
});

Point Clé : La variation de stock inclut les frais → Stock augmente de 100000 + 5000 + 2000 = 107000


Réduction (RRR Obtenus)

Enregistrez les rabais fournisseur automatiquement avec le traitement TVA correct.

Sans TVA

const journal = ohada.recordPurchase({
amount: 100000,
label: "Marchandises",
reduction: 20000
});

Écritures Générées :

  • Constatation (dette 100 000)
  • Réduction : D 4011 / C 6019 pour 20 000
  • Variation de Stock (31/6031 pour 100 000)

Avec TVA (Annulation Automatique)

const journal = ohada.recordPurchase({
amount: 100000,
label: "Marchandises",
vatRate: 18,
reduction: 10000
});

Écriture de Réduction Générée :

  • D 4011 : 11 800 (10 000 base + 1 800 TVA)
  • C 6019 : 10 000 (Base RRR)
  • C 4451 : 1 800 (Annulation TVA — la taxe est annulée sur montants non reçus)

La TVA est automatiquement calculée et annulée car on ne paie pas taxe sur montants non reçus.


Paiements Échelonnés

Divisez les paiements entre caisse et banque.

const journal = ohada.recordPurchase({
amount: 100000,
label: "Marchandises",
payments: [
{ method: 'cash', amount: 50000 },
{ method: 'bank', amount: 50000 }
]
});

Ordre des Écritures :

  1. Constatation (dette 100 000)
  2. Réglement #1 (caisse, -50 000)
  3. Réglement #2 (banque, -50 000)
  4. Variation de Stock

Chaque paiement est une écriture séparée pour piste d'audit claire.


Compte Stock Personnalisé

Utilisez un compte stock différent (défaut : 31).

const journal = ohada.recordPurchase({
amount: 100000,
label: "Matières Premières",
stockEntry: {
stockAccount: '312'
}
});

Correspondance des Comptes

FonctionnalitéCompteDescription
Achat Marchandises6011Achat de marchandises.
Frais6015Transport, douane, frais accessoires.
TVA Récupérable4452TVA sur achats (déductible).
Dette Fournisseur4011Dettes fournisseurs (exploitation).
RRR Obtenus6019Rabais/remises/ristournes obtenus.
TVA sur Avoir4451Annulation TVA sur rabais.
Stock (Inventaire)31Marchandises en magasin.
Variation de Stock6031Variation/coût du stock.
Compte Caisse5711Caisse en main.
Compte Banque5211Virements bancaires.

Exemple Complet : Flux Achat Complet

Un achat réaliste avec transport, rabais et paiement échelonné :

const journal = ohada.recordPurchase({
amount: 1000000,
label: "Achat - Fourniture Bureau",
date: new Date('2026-01-15'),
vatRate: 18,
charges: [
{ type: 'Transport', amount: 50000 },
{ type: 'Douane', amount: 30000 }
],
reduction: 100000,
payments: [
{ method: 'bank', amount: 450000 },
{ method: 'cash', amount: 450000 }
]
});

Écritures de Journal Générées (5 au total) :

#TypeCompteDébitCréditDescription
1Constatation60111 000 000Achat marchandises
1Constatation601580 000Transport + Douane
1Constatation4452194 400TVA (18% sur 1 080 000)
1Constatation40111 274 400Total TTC dû
2Réduction4011118 000Réduction de dette (rabais + TVA)
2Réduction6019100 000Base RRR
2Réduction445118 000Annulation TVA
3Réglement4011412 200Paiement banque
3Réglement5211412 200Sortie banque
4Réglement4011412 200Paiement caisse
4Réglement5711412 200Sortie caisse
5Var. Stock311 080 000Coût : 1 000 000 + 80 000 frais
5Var. Stock60311 080 000Augmentation stock

Règles Clés

Variation de stock automatique — Chaque achat déclenche une écriture stock (31/6031).

Frais inclus — Transport et douane sont capitalisés dans valeur stock.

Annulation TVA sur rabais — Les montants rabais annulent automatiquement TVA proportionnelle.

Protection overpayment — Total paiements ne peut dépasser montant net dû après réduction.

Écritures séparées — Chaque phase (Constatation, Réduction, Paiement, Stock) est écriture distincte.


Référence des Paramètres

ParamètreTypeRequisExempleNotes
amountnumberOui100000Montant achat (HT).
labelstringOui"Marchandises"Description transaction.
dateDateNonnew Date()Défaut : maintenant.
vatRatenumberNon18Taux TVA (défaut : 18, ignoré si disableVAT: true).
chargesPurchaseCharge[]Non[{type: 'Transport', amount: 5000}]Frais accessoires, ajoutés stock & base TVA.
paymentsPurchasePayment[]Non[{method: 'bank', amount: 100000}]Un ou plusieurs paiements.
reductionnumberNon20000Montant rabais ; déclenche annulation TVA si activée.
stockEntryStockEntryNon{stockAccount: '312'}Compte stock personnalisé (défaut : '31').