ITSkillsCenter
Business Digital

Automatiser sa comptabilité PME

5 دقائق للقراءة
Automatiser sa comptabilité PME

Ce que vous saurez faire

  1. Automatiser OCR factures avec Claude
  2. Écritures SYSCOHADA auto
  3. Rapprochement bancaire Python
  4. Relances impayés automatisées

Étape 1 — Ce qu’on automatise

1. Saisie factures fournisseurs (OCR + catégorisation)
2. Rapprochement bancaire
3. Relances clients impayés
4. Génération/envoi factures clients
5. Déclarations TVA + IS
6. Export SYSCOHADA pour expert-comptable
7. Consolidation multi-entités

Étape 2 — OCR facture PDF avec Claude

import anthropic, base64, json, pathlib

client = anthropic.Anthropic()
pdf = pathlib.Path("factures/FAC_2026_0412.pdf")
b64 = base64.b64encode(pdf.read_bytes()).decode()

r = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=800,
    messages=[{"role":"user","content":[
        {"type":"document","source":{
            "type":"base64","media_type":"application/pdf","data":b64}},
        {"type":"text","text":"""Extrais JSON strict:
{
  "fournisseur": {"nom":"", "ninea":"", "tel":""},
  "numero": "",
  "date_emission": "YYYY-MM-DD",
  "montant_ht": 0,
  "tva_taux": 0.18,
  "tva_montant": 0,
  "montant_ttc": 0,
  "lignes": [{"designation":"","qte":0,"pu":0}],
  "iban": ""
}
Vérifie HT+TVA=TTC à 1 FCFA près. Si incohérent, flag "anomalie"."""}
    ]])
facture = json.loads(r.content[0].text)

Étape 3 — Écritures SYSCOHADA achat

def ecriture_achat(f):
    return [
        {"compte":"601100",
         "libelle":f"Achat {f['fournisseur']['nom']}",
         "debit":f["montant_ht"],"credit":0},
        {"compte":"445620",
         "libelle":"TVA déductible 18%",
         "debit":f["tva_montant"],"credit":0},
        {"compte":"401000",
         "libelle":f"Fournisseur {f['fournisseur']['nom']}",
         "debit":0,"credit":f["montant_ttc"]},
    ]

def ecriture_vente(v):
    return [
        {"compte":"411000","libelle":f"Client {v['client']}",
         "debit":v["montant_ttc"],"credit":0},
        {"compte":"701000","libelle":f"Vente {v['designation']}",
         "debit":0,"credit":v["montant_ht"]},
        {"compte":"443100","libelle":"TVA collectée 18%",
         "debit":0,"credit":v["tva_montant"]},
    ]

def ecriture_paiement(montant, mode="wave"):
    comptes = {"wave":"521100","om":"521200","cb":"512000","cheque":"511000"}
    return [
        {"compte":comptes[mode],"libelle":"Encaissement",
         "debit":montant,"credit":0},
        {"compte":"411000","libelle":"Client",
         "debit":0,"credit":montant},
    ]

Étape 4 — Rapprochement bancaire

import pandas as pd

banque = pd.read_csv("releve_banque.csv", sep=";", parse_dates=["Date"])
ecritures = pd.read_excel("journal_compta.xlsx")

banque["match"] = None
for i, e in ecritures[ecritures.compte.isin(["512000","521100","521200"])].iterrows():
    cond = ((banque["Montant"] == e["debit"] - e["credit"]) &
            (abs((banque["Date"] - e["date_ecriture"]).dt.days) <= 3) &
            (banque["match"].isna()))
    idx = banque[cond].index[:1]
    if len(idx):
        banque.loc[idx, "match"] = e["id_ecriture"]

non_rapproches = banque[banque.match.isna()]
non_rapproches.to_excel("rapproch_a_traiter.xlsx", index=False)
print(f"{len(non_rapproches)} lignes à traiter manuellement")

Étape 5 — Relances clients

from datetime import date, timedelta
import pandas as pd, smtplib
from email.mime.text import MIMEText

impayes = pd.read_sql("""
  SELECT f.id, f.numero, f.date_emission, f.montant_ttc, c.email, c.nom
  FROM factures f JOIN clients c ON c.id = f.client_id
  WHERE f.statut = 'envoyee' AND f.date_emission < CURRENT_DATE - 30
""", engine)

gabarit = """Bonjour {nom},

La facture {numero} du {date} d'un montant de {mt:,.0f} FCFA 
est en attente de règlement ({jours} jours).

Merci de procéder au paiement via Wave au +221 77 123 45 67 
ou par virement (IBAN SN...).

Cordialement,
Service comptable ITSkillsCenter
"""

for _, r in impayes.iterrows():
    jours = (date.today() - r.date_emission.date()).days
    msg = MIMEText(gabarit.format(
        nom=r.nom, numero=r.numero, date=r.date_emission.date(),
        mt=r.montant_ttc, jours=jours).replace(",", " "))
    msg["Subject"] = f"Relance facture {r.numero}"
    msg["From"] = "compta@itsc.sn"
    msg["To"] = r.email
    with smtplib.SMTP("smtp.example.sn", 587) as s:
        s.starttls()
        s.login("compta@itsc.sn", os.environ["SMTP_PWD"])
        s.send_message(msg)

Étape 6 — TVA mensuelle

SELECT 
  SUM(CASE WHEN compte LIKE '443%' THEN credit - debit ELSE 0 END) AS tva_collectee,
  SUM(CASE WHEN compte LIKE '445%' THEN debit - credit ELSE 0 END) AS tva_deductible,
  SUM(CASE WHEN compte LIKE '443%' THEN credit - debit ELSE 0 END) -
  SUM(CASE WHEN compte LIKE '445%' THEN debit - credit ELSE 0 END) AS tva_a_payer
FROM ecritures
WHERE date_ecriture BETWEEN '2026-04-01' AND '2026-04-30';

Étape 7 — Export FEC

df = pd.read_sql("""
  SELECT 
    e.date_ecriture AS "JournalCode",
    j.code AS "JournalLib",
    e.numero AS "EcritureNum",
    e.date_piece AS "PieceDate",
    e.ref AS "PieceRef",
    l.compte AS "CompteNum",
    l.libelle AS "CompteLib",
    l.debit AS "Debit",
    l.credit AS "Credit"
  FROM ecritures e
  JOIN journaux j ON j.id = e.journal_id
  JOIN lignes_ecriture l ON l.ecriture_id = e.id
  WHERE e.date_ecriture BETWEEN %(d1)s AND %(d2)s
  ORDER BY e.date_ecriture, e.numero
""", engine, params={"d1":"2026-01-01","d2":"2026-12-31"})

df.to_csv("FEC_2026.txt", sep="|", index=False, encoding="utf-8")

Étape 8 — Intégrations marché

Pennylane, QuickBooks, Sage: APIs REST
curl -X POST https://api.pennylane.eu/v2/invoices \
  -H "Authorization: Bearer $TOKEN" -d @facture.json

Zapier: templates rapprochement
Make: "facture OCR → écriture → Airtable"

Sénégal: Wave Business dashboard + export CSV manuel

Étape 9 — Architecture cible

[Factures PDF] → OCR IA → [Base SQL]
                              ↓
[Banque CSV]   → rapprochement → [Base SQL]
                              ↓
                [Tableau bord trésorerie]
                              ↓
[Relances auto] [TVA auto] [FEC expert-comptable]

Étape 10 — Checklist

✓ OCR Claude sur factures PDF
✓ Plan comptable SYSCOHADA en code
✓ Rapprochement bancaire mensuel
✓ Relances auto J30/J45/J60
✓ TVA calcul automatique
✓ FEC export annuel
✓ Documentation code dans README
✓ Tests unitaires sur écritures
Besoin d'un site web ?

Confiez-nous la Création de Votre Site Web

Site vitrine, e-commerce ou application web — nous transformons votre vision en réalité digitale. Accompagnement personnalisé de A à Z.

À partir de 250.000 FCFA
Parlons de Votre Projet
Publicité