0% ont trouvé ce document utile (0 vote)
5 vues6 pages

Génération d'écritures comptables Python

Le document définit une classe EcritureComptable pour gérer les écritures comptables, incluant des méthodes pour générer des écritures pour des opérations telles que les ventes, les paiements, les achats, et les dépenses. Chaque méthode crée des instances d'EcritureComptable avec des détails spécifiques comme le compte, le montant, et le type d'opération. Le code respecte les normes SYSCOHADA pour la comptabilité et inclut des validations pour les montants et types d'opérations.

Transféré par

ZONGO Soumaila
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
5 vues6 pages

Génération d'écritures comptables Python

Le document définit une classe EcritureComptable pour gérer les écritures comptables, incluant des méthodes pour générer des écritures pour des opérations telles que les ventes, les paiements, les achats, et les dépenses. Chaque méthode crée des instances d'EcritureComptable avec des détails spécifiques comme le compte, le montant, et le type d'opération. Le code respecte les normes SYSCOHADA pour la comptabilité et inclut des validations pour les montants et types d'opérations.

Transféré par

ZONGO Soumaila
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd

from datetime import datetime

class EcritureComptable:
def __init__(self, compte: str, libelle: str, montant: float, type_operation:
str, date: datetime,
journal: str,
reference_document = None, id_facture_vente = None,
id_facture_achat=None, type_document = None):
if type_operation not in ["DEBIT", "CREDIT"]:
raise ValueError("Le type d'opération doit être 'DEBIT' ou 'CREDIT'.")
if montant < 0:
raise ValueError("Le montant doit être positif.")

[Link] = compte
[Link] = libelle
[Link] = montant
self.type_operation = type_operation # "DEBIT" ou "CREDIT"
[Link] = date
[Link] = journal
self.reference_document = reference_document
self.id_facture_vente = id_facture_vente
self.id_facture_achat = id_facture_achat
self.type_document = type_document # 'VENTE', 'ACHAT', 'DEPENSE_DIRECTE',
'PAIEMENT_PAIE', etc.

def __repr__(self):
return (f"Ecriture(Compte: {[Link]}, Libellé: {[Link]}, Montant:
{[Link]},"
f" Type: {self.type_operation}, Date: {[Link]('%Y-%m-
%d')},"
f" Journal: {[Link]}, Ref: {self.reference_document},
TypeDoc: {self.type_document},"
f" FV_ID: {self.id_facture_vente}, FA_ID:
{self.id_facture_achat})")

# --- Fonctions de Génération d'Écritures pour les Opérations ---

def generer_ecritures_facture_vente(montant_ht: float, tva_taux: float,


date_emission: datetime,
numero_facture: str, id_facture_vente: str,
compte_client: str = "411000"):
"""
Génère les écritures pour une facture de vente avec TVA (créance client).
Codes SYSCOHADA: Client (D), Ventes (C), TVA Facturée (C).
"""
montant_tva = round(montant_ht * tva_taux, 2)
montant_ttc = round(montant_ht + montant_tva, 2)

ecritures = []
# 1. Débit du compte client (créance)
[Link](EcritureComptable(compte_client, f"Facture vente
{numero_facture}", montant_ttc, "DEBIT",
date_emission, journal="Ventes",
reference_document=numero_facture,
id_facture_vente=id_facture_vente, type_document="VENTE"))
# 2. Crédit du compte de produit (chiffre d'affaires)
[Link](EcritureComptable("701000", f"Vente marchandises
{numero_facture}", montant_ht, "CREDIT",
date_emission, journal="Ventes",
reference_document=numero_facture,
id_facture_vente=id_facture_vente, type_document="VENTE"))
# 3. Crédit du compte de TVA collectée
[Link](EcritureComptable("443100", f"TVA facturée {numero_facture}",
montant_tva, "CREDIT",
date_emission, journal="Ventes",
reference_document=numero_facture,
id_facture_vente=id_facture_vente, type_document="VENTE"))
return ecritures

def generer_ecritures_paiement_vente(montant_ttc: float, numero_facture: str,


date_paiement: datetime,
id_facture_vente: str, compte_client: str =
"411000", compte_banque: str = "521100"):
"""
Génère les écritures pour l'encaissement d'une facture client.
Codes SYSCOHADA: Banque (D), Client (C).
"""
ecritures = [
# Débit du compte banque (augmentation de l'argent disponible)
EcritureComptable(
compte_banque,
libelle=f"Paiement facture {numero_facture}",
montant=round(montant_ttc, 2),
type_operation="DEBIT",
date=date_paiement,
journal="Banque",
reference_document=f"PAY-{numero_facture}",
id_facture_vente=id_facture_vente,
type_document="PAIEMENT_VENTE"
),
# Crédit du compte client (diminution de la créance)
EcritureComptable(
compte_client,
libelle=f"Paiement facture {numero_facture}",
montant=round(montant_ttc, 2),
type_operation="CREDIT",
date=date_paiement,
journal="Banque",
reference_document=f"PAY-{numero_facture}",
id_facture_vente=id_facture_vente,
type_document="PAIEMENT_VENTE"
)
]
return ecritures

def generer_ecritures_facture_achat(montant_ht: float, tva_taux: float,


date_reception: datetime,
numero_facture: str, compte_charge_affecte:
str,
id_facture_achat: str, compte_fournisseur: str
= "401000"):
"""
Génère les écritures pour une facture d'achat avec TVA (dette fournisseur).
Codes SYSCOHADA: Compte de charge (D), TVA Récupérable (D), Fournisseur (C).
"""
montant_tva = round(montant_ht * tva_taux, 2)
montant_ttc = round(montant_ht + montant_tva, 2)
ecritures = [
# Débit du compte de charge
EcritureComptable(
compte_charge_affecte,
libelle=f"Facture achat {numero_facture}",
montant=round(montant_ht, 2),
type_operation="DEBIT",
date=date_reception,
journal="Achats",
reference_document=numero_facture,
id_facture_achat=id_facture_achat,
type_document="ACHAT"
),
# Débit du compte de TVA déductible
EcritureComptable(
compte="445200", # SYSCOHADA: TVA récupérable
libelle=f"TVA sur achat {numero_facture}",
montant=montant_tva,
type_operation="DEBIT",
date=date_reception,
journal="Achats",
reference_document=numero_facture,
id_facture_achat=id_facture_achat,
type_document="ACHAT"
),
# Crédit du compte fournisseur
EcritureComptable(
compte_fournisseur,
libelle=f"Facture achat {numero_facture}",
montant=montant_ttc,
type_operation="CREDIT",
date=date_reception,
journal="Achats",
reference_document=numero_facture,
id_facture_achat=id_facture_achat,
type_document="ACHAT"
)
]
return ecritures

def generer_ecritures_paiement_achat(montant_ttc: float, numero_facture: str,


date_paiement: datetime,
id_facture_achat: str, compte_fournisseur: str
= "401000", compte_banque: str = "521100"):
"""
Génère les écritures pour le paiement d'une facture fournisseur.
Codes SYSCOHADA: Fournisseur (D), Banque (C).
"""
ecritures = [
# Débit du compte fournisseur (diminution de la dette)
EcritureComptable(
compte_fournisseur,
libelle=f"Paiement facture fournisseur {numero_facture}",
montant=round(montant_ttc, 2),
type_operation="DEBIT",
date=date_paiement,
journal="Banque",
reference_document=f"PAYF-{numero_facture}",
id_facture_achat=id_facture_achat,
type_document="PAIEMENT_ACHAT"
),
# Crédit du compte banque (diminution de la trésorerie)
EcritureComptable(
compte_banque,
libelle=f"Paiement facture fournisseur {numero_facture}",
montant=round(montant_ttc, 2),
type_operation="CREDIT",
date=date_paiement,
journal="Banque",
reference_document=f"PAYF-{numero_facture}",
id_facture_achat=id_facture_achat,
type_document="PAIEMENT_ACHAT"
)
]
return ecritures

def generer_ecritures_depense_directe(montant: float, compte_charge: str, libelle:


str, date_depense: datetime,
compte_tresorerie: str = "521100", journal:
str = "Banque", reference = None):
"""
Génère les écritures pour une dépense payée directement (sans facture préalable
fournisseur).
Codes SYSCOHADA: Compte de charge (D), Trésorerie (C).
"""
ecritures = [
# Débit du compte de charge
EcritureComptable(
compte_charge,
libelle=libelle,
montant=round(montant, 2),
type_operation="DEBIT",
date=date_depense,
journal=journal,
reference_document=reference,
type_document="DEPENSE"
),
# Crédit du compte banque ou caisse
EcritureComptable(
compte_tresorerie,
libelle=libelle,
montant=round(montant, 2),
type_operation="CREDIT",
date=date_depense,
journal=journal,
reference_document=reference,
type_document="DEPENSE"
)
]
return ecritures

def generer_ecritures_depot_especes(montant: float, date_depot: datetime,


compte_destination_banque: str, reference = None):
"""
Génère les écritures pour un dépôt d'espèces de la caisse du magasin vers un
compte bancaire.
Codes SYSCOHADA: Banque (D), Caisse (C).
"""
ecritures = [
# Débit du compte bancaire (augmentation de la trésorerie en banque)
EcritureComptable(
compte_destination_banque,
libelle= compte_destination_banque,
montant=round(montant, 2),
type_operation="DEBIT",
date=date_depot,
journal="Banque", # L'opération impacte le journal de banque
reference_document=reference,
type_document="DEPOT_ESPECES"
),
# Crédit du compte caisse (diminution de la trésorerie en caisse)
EcritureComptable(
compte="571000", # SYSCOHADA: Caisse
libelle=compte_destination_banque,
montant=round(montant, 2),
type_operation="CREDIT",
date=date_depot,
journal="Caisse", # L'opération impacte aussi le journal de caisse
reference_document=reference,
type_document="DEPOT_ESPECES"
)
]
return ecritures

def generer_ecritures_paie_mensuelle(date: datetime, salaire_brut: float,


taux_cnss_salariale: float, taux_cnss_patronale: float,
libelle_periode: str = "du mois",
compte_banque_paiement: str = "521100"):
"""
Génère les écritures pour la comptabilisation de la paie mensuelle (simplifiée
SYSCOHADA).
N'inclut pas l'IRPP.
Inclut la constatation des charges et dettes, et les paiements.
"""
cotisations_salariales = round(salaire_brut * taux_cnss_salariale, 2)
cotisations_patronales = round(salaire_brut * taux_cnss_patronale, 2)
salaire_net_a_payer = round(salaire_brut - cotisations_salariales, 2)
montant_total_cotisations_sociales = round(cotisations_salariales +
cotisations_patronales, 2)

libelle_constatation = f"Constatation paie {libelle_periode}"


libelle_paiement_net = f"Paiement salaire net {libelle_periode}"
libelle_paiement_social = f"Règlement cotisations sociales {libelle_periode}"
journal_paie_constatation = "Opérations Diverses"

ecritures = []

# Étape 1: Constatation de la charge de rémunération et des dettes (souvent en


fin de mois)
# Débit: 631000 Rémunération du personnel (pour le salaire brut total)
[Link](EcritureComptable("631000", libelle_constatation,
salaire_brut, "DEBIT", date, journal_paie_constatation))
# Crédit: 421000 Personnel - Rémunérations dues (pour le net à payer à
l'employé)
[Link](EcritureComptable("421000", libelle_constatation,
salaire_net_a_payer, "CREDIT", date, journal_paie_constatation))
# Crédit: 431000 Organismes sociaux (pour les cotisations salariales)
[Link](EcritureComptable("431000", libelle_constatation,
cotisations_salariales, "CREDIT", date, journal_paie_constatation))

# Étape 2: Constatation des charges patronales et de la dette envers organismes


sociaux
# Débit: 632000 Charges sociales du personnel (pour les cotisations patronales)
[Link](EcritureComptable("632000", libelle_constatation,
cotisations_patronales, "DEBIT", date, journal_paie_constatation))
# Crédit: 431000 Organismes sociaux (pour les cotisations patronales)
[Link](EcritureComptable("431000", libelle_constatation,
cotisations_patronales, "CREDIT", date, journal_paie_constatation))

# Étape 3: Paiement du salaire net à l'employé (à la date du paiement réel)


# Débit: 421000 Personnel - Rémunérations dues (solde la dette envers
l'employé)
[Link](EcritureComptable("421000", libelle_paiement_net,
salaire_net_a_payer, "DEBIT", date, "Banque", type_document="PAIEMENT_PAIE"))
# Crédit: 521XXX Banque (sortie d'argent)
[Link](EcritureComptable(compte_banque_paiement,
libelle_paiement_net, salaire_net_a_payer, "CREDIT", date, "Banque",
type_document="PAIEMENT_PAIE"))

# Étape 4: Paiement des cotisations sociales aux organismes (à la date du


paiement réel)
# Débit: 431000 Organismes sociaux (solde la dette envers les organismes)
[Link](EcritureComptable("431000", libelle_paiement_social,
montant_total_cotisations_sociales, "DEBIT", date, "Banque",
type_document="PAIEMENT_COTISATIONS"))
# Crédit: 521XXX Banque (sortie d'argent)
[Link](EcritureComptable(compte_banque_paiement,
libelle_paiement_social, montant_total_cotisations_sociales, "CREDIT", date,
"Banque", type_document="PAIEMENT_COTISATIONS"))

return ecritures

Vous aimerez peut-être aussi