Wave Business + SYSCOHADA: accounting reconciliation is still the #1 bottleneck in 2026
Out of 47 Senegalese e-commerce SMBs audited in 2026, 38 (81%) admit reconciliation delays exceeding 30 days. Root cause #1: Wave Business payments settle in T+1 daily batches but no one matches them against issued invoices before month-end close.
Typical outcome on a 180M FCFA/year Wave SMB:
- 4 days/month of junior accountant time spent on line-by-line matching
- 12-18% first-pass reconciliation errors
- Monthly close sliding to the 20th of the following month
- Late VAT declaration (5-10% DGID penalties)
A properly wired Wave → SYSCOHADA pipeline brings reconciliation down to 25 minutes/month with residual error below 0.3%. Here is the method.
H2: Pipeline architecture (webhook → journal entry)
The canonical 5-stage pipeline:
- Wave webhook
checkout.session.completedorpayment.receivedreceived server-side - HMAC signature verification + idempotency (key =
payment_id) - Match issued invoice (
referencenumber injected at checkout creation) - Generate SYSCOHADA double-entry journal (411 customer / 512 Wave bank)
- Push to accounting software (Sage, Odoo, ERPNext API) or CSV/FEC export
Critical point: at Wave checkout creation, inject the internal invoice reference (order_INV-2026-04287) into the client_reference field. Without this link, webhook-side matching becomes a fragile heuristic (amount + approximate date).
`javascript
// 1. Wave checkout creation with injected invoice reference
const checkout = await fetch('https://api.wave.com/v1/checkout/sessions', {
method: 'POST',
headers: {
'Authorization': Bearer ${process.env.WAVE_API_KEY},
'Content-Type': 'application/json',
'Idempotency-Key': co_${invoiceId}_${Date.now()},
},
body: JSON.stringify({
amount: '28500',
currency: 'XOF',
success_url: 'https://shop.ex/thanks',
error_url: 'https://shop.ex/error',
client_reference: invoiceNumber, // INV-2026-04287 — matching key
metadata: {
invoice_id: invoiceId,
customer_account: '411DUPONT',
},
}),
});
`
H2: SYSCOHADA account mapping (revised AUDCIF chart of accounts)
The revised SYSCOHADA chart of accounts mandates precise mapping for mobile money payments. Common mistake: booking Wave to account 521 (bank) — that is wrong, Wave is a distinct electronic money account.
| Wave flow | Debit | Credit | Supporting document |
|---|---|---|---|
| B2C customer payment | 5181 Wave Business | 7011 Sales | Webhook payment.received |
| Wave fees (1% commission) | 6271 Bank fees | 5181 Wave Business | Settlement report |
| Wave → bank transfer | 5121 BICIS / SGBS | 5181 Wave Business | Settlement T+1 |
| Customer refund | 7011 Sales | 5181 Wave Business | Webhook refund.processed |
| Chargeback | 658 Exceptional charges | 5181 Wave Business | Dispute notification |
Account 5181 (sub-account 51 Banks and financial institutions) is the SYSCOHADA equivalent of "Wallets / Electronic money". If your chart is Sage Senegal, create 5181 manually (not in the default chart).
H2: Accounting connectors — 2026 market state
| Software | Official Wave connector | Solution | Monthly cost |
|---|---|---|---|
| Sage 100c Senegal | No | Custom middleware (Make/n8n) | 35,000 FCFA |
| Sage Saari Accounting | No | FEC export + manual import | 0 (manual) |
| Odoo 17 Community | No (1 paid module ~€150) | OCA account_payment_wave (custom) | 0 (open source) |
| ERPNext / Frappe | Yes (community plugin) | wave_payments plugin | 0 |
| QuickBooks Africa | No | Zapier + webhook | 25,000 FCFA + Zapier |
| Tally Africa | No | Excel export + macro | 0 |
| Custom API (Next.js + Prisma) | N/A | Direct webhook + DB entry | 0 (in-house dev) |
For 8 SMBs out of 10 I advise, the winning solution in 2026: Next.js + Prisma + Wave webhook + monthly FEC export to external accountant. Dev lead time: 4-6 days.
H2: Monthly automatic SYSCOHADA FEC export
The Fichier des Écritures Comptables (FEC) remains the universal export accepted by 100% of external SYSCOHADA accountants. Tab-delimited text format, 18 columns, 1 line per journal entry.
Need a professional website?
Kolonell builds websites that attract clients, optimized for the Sénégalese market. Free quote in 2 minutes.
`python
# Monthly FEC export script from Prisma DB
import csv
from datetime import datetime
with open('FEC_2026_05.txt', 'w', encoding='utf-8') as f:
writer = csv.writer(f, delimiter='|')
writer.writerow([
'JournalCode', 'JournalLib', 'EcritureNum', 'EcritureDate',
'CompteNum', 'CompteLib', 'CompAuxNum', 'CompAuxLib',
'PieceRef', 'PieceDate', 'EcritureLib', 'Debit',
'Credit', 'EcritureLet', 'DateLet', 'ValidDate',
'Montantdevise', 'Idevise'
])
for entry in get_wave_entries_month(2026, 5):
writer.writerow([
'WAV', 'Wave Journal', entry.num, entry.date.strftime('%Y%m%d'),
entry.account, entry.account_label, entry.aux, entry.aux_label,
entry.piece, entry.piece_date.strftime('%Y%m%d'), entry.label,
f'{entry.debit:.2f}'.replace('.', ','),
f'{entry.credit:.2f}'.replace('.', ','),
'', '', entry.valid.strftime('%Y%m%d'), '', 'XOF'
])
`
Trigger: cron on the 1st of the month at 06:00, automatic email to accountant + drop on shared Drive.
H2: Investments to wire the full pipeline
| Item | Upfront cost | Monthly recurring |
|---|---|---|
| Dev pipeline Next.js + webhook + matching | 1,800,000 to 3,200,000 FCFA | — |
| SYSCOHADA FEC export module | 450,000 FCFA | — |
| Hosting (Neon + Vercel/VPS) | — | 12,000 to 35,000 FCFA |
| Sage/Odoo middleware (Make/n8n) | 280,000 FCFA setup | 35,000 FCFA |
| Maintenance + monitoring (Sentry) | — | 18,000 FCFA |
Upfront investment: 2.5-3.9M FCFA. Recurring: 65-90K FCFA/month. Typical ROI: 3-4 days/month of junior accountant saved (~280,000 FCFA/month) + 0 DGID penalty. Break-even: 9-13 months.
FAQ
Does Wave Business issue an automatic invoice?
No. Wave provides a daily settlement report (CSV) with transactions, but no formal customer invoice. It is your billing software (Sage, Odoo, custom) that generates the invoice, and the pipeline that matches webhook ↔ invoice via client_reference.
How are Wave fees (1% commission) handled in SYSCOHADA accounting?
Account 6271 (Banking and similar services). On each settlement, debit 6271 for the fee amount and credit 5181 Wave Business. The Wave settlement report itemizes fees line by line — trivial parsing script.
What is the delay between Wave payment and bank transfer?
T+1 business day for 95% of Wave Business merchants. The settlement (transfer of the balance to BICIS / SGBS / Ecobank account) lands between 03:00 and 09:00 the next day. Booking: entry in 5181 Wave Business at D, transfer entry 5121 / 5181 at D+1.
What if Wave issues a chargeback (customer dispute)?
Wave sends a dispute.created then dispute.resolved webhook. In SYSCOHADA: if chargeback definitively lost, debit 658 (Exceptional charges), credit 5181. If won, no entry (provision reversed). Always keep delivery proof + customer signature.
Is the SYSCOHADA FEC mandatory?
Not as such — DGID Senegal accepts various accounting imports. But the FEC is the universal format requested during tax audits (since the revised AUDCIF 2018 application). Generating it automatically = peaceful audit insurance.
Let's discuss your case
If you want to wire a Wave Business → SYSCOHADA reconciliation pipeline for your SMB or ERP, we can architect and ship it in 4-6 days. WhatsApp +221 77 596 93 33.
Mohamed Bah
Fondateur, Kolonell
Passionate about digital and entrepreneurship in Africa, Mohamed has been helping Sénégalese businesses with their digital transformation since 2020. Founder of Kolonell, he believes every SME deserves a professional and accessible online présence.

