Qui a un solde ? L'âge des comptes de tous les clients à la date choisie : seuls les clients dont le solde n'est pas nul sont listés.
2.
Qui veut le recevoir ? Pour chacun, la fiche client indique s'il reçoit ses états de compte par courriel (preferences.send_statement_by_email), le type d'état de compte prévu dans Acomba (statement.code), son adresse principale et sa langue.
3.
Que contient l'état ? L'âge des comptes du client : solde, tranches d'âge et, pour un état détaillé, la liste des factures ouvertes.
4.
Envoi. Votre outil de courriel met en forme et envoie.
Route
Rôle
GET /api/customers/aging
Clients ayant un solde, avec leur solde et leurs tranches d'âge
GET /api/customers/by-id/{customer_id}
Préférence d'envoi, type d'état de compte, courriel, langue
GET /api/customers/aging/by-id/{customer_id}
Factures ouvertes du client, par tranche d'âge
État de compte ou relevé ?
L'état de compte d'Acomba montre ce que le client doit à une date : ses factures ouvertes, classées par ancienneté. C'est ce que fait cette recette. Pour un relevé de toutes les transactions d'une période (factures, paiements, crédits, avec solde d'ouverture et de fermeture), utilisez GET /api/customers/by-id/{customer_id}/statement avec from et to.
{"as_of_date":"2026-04-30","total_customers":42,"total_balance":62500.0,"items":[{"customer":{"id":105,"code":"C-1005","name":"Construction Exemple inc."},"balance_total":2450.0,"is_past_due":true,"days_most_overdue":47,"aging":{"days_0_30":1500.0,"days_30_60":750.0,"days_60_90":200.0,"days_over_90":0.0},"_links":{"self":"/api/customers/aging/by-id/105?as_of=2026-04-30"}}]}
Soldes nets. Les crédits et les paiements non appliqués sont déduits : le solde correspond à celui d'Acomba. Une ligne de open_invoices peut donc avoir un montant négatif (crédit).
Tranches.bucket_type=short (15/30/45 jours) ou extended (jusqu'à 120 jours) changent les tranches ; adaptez alors la mise en forme.
Cache. L'âge des comptes d'une date passée est gardé 24 heures : relancer le script le même jour ne recalcule rien. Ajoutez force_refresh=true seulement si des écritures ont été faites dans Acomba après le premier calcul.
Une requête à la fois. Le script lit les clients l'un après l'autre : c'est voulu (voir Bonnes pratiques).
Faites un essai à blanc : remplacez l'envoi par un affichage, vérifiez quelques états contre Acomba, puis activez l'envoi.
Le script n'envoie rien ? Vérifiez sur les fiches clients, dans Acomba, le type d'état de compte (autre que « aucun ») et la case d'envoi des états de compte par courriel.
Courriel absent ou erroné. Le client est ignoré sans bruit. Ajoutez un rapport des clients ignorés pour les corriger dans Acomba.