Réconciliation Wave automatique = matcher transactions Wave avec commandes site/app. Critique pour comptabilité SYSCOHADA + reporting. Voici stack production 2026.
TL;DR
- 30 % erreurs comptables sans réconciliation auto.
- API Wave fournit transactions historique.
- Matching par : amount + date + reference.
- Exports Sage / Pennylane / Excel automatiques.
Architecture réconciliation
- Pull transactions Wave (API quotidien)
- Comparer avec commandes DB
- Matching :
- Amount exact
- Date ±24h
- Client_reference (si disponible)
- 3 statuts résultat :
- Matched (auto)
- Manual review (fuzzy)
- Unmatched (alerte)
- Export comptable
Pull transactions API
`typescript
async function getWaveTransactions({
fromDate,
toDate,
page = 1,
limit = 100,
}: {
fromDate: string; // ISO 8601
toDate: string;
page?: number;
limit?: number;
}) {
const res = await axios.get(
${WAVE_API}/transactions,
{
params: {
from: fromDate,
to: toDate,
page,
limit,
},
headers: {
Authorization: Bearer ${WAVE_TOKEN},
},
}
);
return res.data.transactions; // Array
}
// Usage : récupérer toutes transactions du mois
async function syncMonth(year: number, month: number) {
const fromDate = new Date(year, month - 1, 1).toISOString();
const toDate = new Date(year, month, 0).toISOString();
let allTx: any[] = [];
let page = 1;
while (true) {
const tx = await getWaveTransactions({ fromDate, toDate, page });
if (tx.length === 0) break;
allTx = allTx.concat(tx);
page++;
}
return allTx;
}
`
Matching algorithm
`typescript
async function reconcile(waveTx: WaveTransaction[]) {
const results = {
matched: [] as Array<{ tx: WaveTransaction; order: Order }>,
manual: [] as Array<{ tx: WaveTransaction; candidates: Order[] }>,
unmatched: [] as WaveTransaction[],
};
for (const tx of waveTx) {
// 1. Match exact par client_reference
if (tx.client_reference) {
const order = await db.orders.findOne({ id: tx.client_reference });
if (order && order.amount === tx.amount) {
results.matched.push({ tx, order });
continue;
}
}
// 2. Match par amount + date
const candidates = await db.orders.find({
amount: tx.amount,
createdAt: {
$gte: new Date(tx.created_at).getTime() - 24 * 3600 * 1000,
$lte: new Date(tx.created_at).getTime() + 24 * 3600 * 1000,
},
status: 'pending_payment',
});
if (candidates.length === 1) {
// Match auto
Besoin d'un site web professionnel ?
Kolonell crée des sites web qui attirent des clients, optimisés pour le marché sénégalais. Devis gratuit en 2 minutes.
results.matched.push({ tx, order: candidates[0] });
} else if (candidates.length > 1) {
// Manual review (plusieurs commandes même montant)
results.manual.push({ tx, candidates });
} else {
// Unmatched
results.unmatched.push(tx);
}
}
return results;
}
`
Export comptable SYSCOHADA
`typescript
import { createObjectCsvWriter } from 'csv-writer';
async function exportToSyscohada(matched: Array<{ tx: any; order: any }>) {
const csv = createObjectCsvWriter({
path: '/tmp/wave-reconciliation.csv',
header: [
{ id: 'date', title: 'Date' },
{ id: 'compte', title: 'Compte' },
{ id: 'debit', title: 'Débit' },
{ id: 'credit', title: 'Crédit' },
{ id: 'libelle', title: 'Libellé' },
{ id: 'reference', title: 'Référence' },
],
});
const rows = matched.flatMap(({ tx, order }) => [
{
date: tx.created_at.slice(0, 10),
compte: '512100', // Banque Wave
debit: tx.amount,
credit: '',
libelle: Encaissement Wave ${tx.id},
reference: order.id,
},
{
date: tx.created_at.slice(0, 10),
compte: '411000', // Clients
debit: '',
credit: tx.amount,
libelle: Encaissement client ${order.client_name},
reference: order.id,
},
]);
await csv.writeRecords(rows);
}
`
Importable directement dans Sage / Pennylane / Cegid.
Cron job quotidien
`typescript
// Avec node-cron ou Vercel Cron
import cron from 'node-cron';
cron.schedule('0 1 * * *', async () => {
const yesterday = new Date();
yesterday.setDate(yesterday.getDate() - 1);
const tx = await getWaveTransactions({
fromDate: yesterday.toISOString().slice(0, 10),
toDate: new Date().toISOString().slice(0, 10),
});
const results = await reconcile(tx);
// Email rapport quotidien
await sendEmail('finance@kolonell.com', {
subject: 'Réconciliation Wave quotidienne',
body: Auto: ${results.matched.length}, Manual: ${results.manual.length}, Unmatched: ${results.unmatched.length},
});
});
`
FAQ
Q : Match auto fiabilité ?
R : 95-98 % des transactions match automatiquement avec amount + date + reference.
Q : Délai sync API Wave ?
R : Real-time via webhook. Daily sync API pour back-up + reporting.
Conclusion
Réconciliation Wave automatique 2026 : 95-98 % auto-match. Cron daily + webhook real-time. Export SYSCOHADA = imports comptables directs. Stack production complet 2-5 jours dev.
Mohamed Bah
Fondateur, Kolonell
Passionné par le digital et l'entrepreneuriat en Afrique, Mohamed accompagne les entreprises sénégalaises dans leur transformation digitale depuis 2020. Fondateur de Kolonell, il croit que chaque PME mérite une présence en ligne professionnelle et accessible.

