ITSkillsCenter
Business Digital

Automatiser sa comptabilité PME

5 min de lecture
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é