Une commande arrive sur votre boutique en ligne. Il faut la retrouver dans Acomba, la facturer au moment où les produits partent, parfois en plusieurs livraisons, puis inscrire le paiement du client. Fait à la main, c'est de la double saisie. Et une erreur sur une facture déjà émise oblige à faire un crédit.Dans cette recette, nous allons automatiser ce parcours de bout en bout : votre boutique crée la commande dans Acomba, la facture à chaque expédition et inscrit le paiement, sans que personne ait à ressaisir quoi que ce soit.Ce que vous allez apprendre
créer une commande Acomba à partir d'une commande en ligne ;
la facturer en une ou plusieurs livraisons, sans jamais perdre le reste à livrer ;
appliquer le paiement du client à chaque facture ;
éviter les pièges d'Acomba : la facture qui ne se modifie plus, la case B.O., les lignes à relire.
Avant de commencer
une clé API avec accès en écriture ;
les modules Facturation et Clients actifs dans votre dossier Acomba ;
les codes du client et des produits tels qu'ils existent dans Acomba ;
idéalement, un dossier de test : commandes, factures et paiements sont de vraies écritures comptables.
Avant d'écrire la première ligne de code, voyons comment Acomba découpe une vente en trois documents.
Étape
Dans Acomba
Dans l'API
Commande
Un document Commande, modifiable tant qu'il n'est pas facturé
POST /api/invoicing/orders
Livraison
Une facture créée à partir de la commande ; la quantité facturée de la commande augmente
POST /api/invoicing/orders/{code}/actions/to-invoice
Paiement
Un paiement client appliqué à la facture
POST /api/customers/payments
Sur chaque ligne de commande : ordered_qty = quantité commandée, invoiced_qty = quantité déjà facturée. Le reste à livrer est la différence.
Une facture Acomba ne se modifie plus
Une fois créée, une facture ne peut être ni modifiée ni supprimée : l'API refuse tout PATCH ou DELETE sur une facture. Une erreur se corrige par un crédit (POST /api/invoicing/invoices/{code}/actions/reverse), puis une nouvelle facture.C'est pourquoi cette recette passe par une commande : tant que la vente peut changer (quantités, prix, adresse, rupture de stock), modifiez la commande, et ne la facturez qu'au moment de livrer. Ne créez une facture directement que pour une vente ferme et définitive.
Commençons par transformer la commande en ligne en commande Acomba. Donnez le code du client, votre numéro de commande en ligne dans reference (30 caractères au maximum) et ordered_qty pour chaque ligne. L'API calcule les taxes selon le groupe de taxes du client.
cURL
Réponse 200
La case B.O. de chaque ligne
Dans Acomba, la case B.O. d'une ligne de commande décide du sort du reste après une livraison partielle :
cochée : le reste demeure en commande, et la livraison suivante le reprend ;
décochée : Acomba ferme la ligne dès la première facture partielle. Le reste n'est plus jamais proposé à la facturation.
L'API coche la case par défaut (lines[].keep_back_order: true) sur les lignes de commande qu'elle crée. Envoyez "keep_back_order": false sur une ligne qui ne doit jamais être livrée en plusieurs fois. Les commandes saisies dans Acomba gardent le réglage de l'écran (décochée par défaut) : cochez la case par un PATCH avant une livraison partielle, en renvoyant toutes les lignes au complet (ordered_qty, invoiced_qty, keep_back_order) : lines remplace toutes les lignes de la commande.
Tant que rien n'est facturé, modifiez la commande par PATCH /api/invoicing/orders/{code} (quantités, lignes, adresse, description).
La commande est prête ; facturons maintenant la première livraison. Relisez d'abord les lignes de la commande : le line_id de chaque ligne change après chaque modification ou facture, il faut donc le relire avant chaque livraison.
cURL
Réponse 200 (extrait)
Puis facturez ce qui part chez le client. Sans corps, tout le reste à livrer est facturé ; avec lines, seules les lignes et quantités indiquées le sont.
cURL
Réponse 200
created_transaction_id : id de la facture, à conserver pour le paiement. created_transaction_code : numéro de facture attribué par Acomba.
La facture de l'exemple vaut 85,00 de TPS + 8,48 **. Relisez-la avec GET /api/invoicing/invoices/by-id/{transaction_id} (totals.grand_total).
La commande affiche maintenant invoiced_qty: 2.0 sur ordered_qty: 3.0 pour COIN-10 : il reste 1 coin à livrer.
include_shipping : les frais de transport de la commande sont repris par défaut. Passez false aux livraisons suivantes pour ne pas les facturer deux fois.
back_order_taxes_updated : Acomba retire les taxes de la commande lors de la facturation ; l'API les recalcule aussitôt. false signale que ce recalcul a échoué : la facture est bien créée, et un PATCH de la commande (de sa description, par exemple) rétablit ses taxes.
La livraison suivante reprend le même appel, avec les line_id relus et "include_shipping": false. La commande entièrement livrée reste dans Acomba, avec invoiced_qty égal à ordered_qty.
Réponse 422
Cause
Que faire
« quantité … supérieure au reste à livrer »
La quantité dépasse ordered_qty − invoiced_qty
Relire les lignes
« Lignes inconnues dans le document source »
line_id d'une version précédente de la commande
Relire les lignes
« livraison partielle sur une ligne sans B.O. »
Case B.O. décochée : Acomba abandonnerait le reste
PATCH la ligne avec keep_back_order: true, ou passer keep_back_order: false pour fermer la ligne
Le client a payé ? Il reste à inscrire son paiement sur la facture. Appliquez le paiement à la facture : invoice_ar_id est l'id de la facture renvoyé à l'étape 2.
cURL
Réponse 200
payment_type : 1 paiement. reference : 30 caractères au maximum (numéro de transaction de la passerelle, par exemple).
modes[].mode : 1 comptant, 2 paiement direct, 3 chèque, 4 à 9 cartes de crédit 1 à 6, dans l'ordre configuré dans Acomba.
La somme des modes doit égaler la somme des montants appliqués aux factures.
Vérifiez l'application avec GET /api/customers/invoice-ar/by-id/{invoice_id}/payment-allocations.
Assemblons le tout : ce script crée la commande, la livre en deux fois et encaisse chaque facture. Remplacez l'exemple de commande par les données de votre boutique.
Python
JavaScript (Node.js)
Exemple de sortie (taxes du Québec : TPS 5 %, TVQ 9,975 %) :
Relire avant d'écrire. Chaque modification ou facture change l'unique_id de la commande et le line_id de ses lignes. Ne conservez que le code de la commande et l'id des factures.
Un appel à la fois. Acomba traite une écriture à la fois : facturez les commandes l'une après l'autre, sans appels en parallèle.
Ne rejouez pas une écriture après une erreur réseau sans relire : la facture a peut-être été créée. Relisez les lignes de la commande (invoiced_qty) avant de réessayer.
Corriger une facture : POST /api/invoicing/invoices/{code}/actions/reverse crée le crédit qui l'annule ; facturez ensuite à nouveau.
Commande ouverte (/api/invoicing/open-orders) : même parcours ; Acomba y coche lui-même la case B.O.
Stock : chaque facture sort la quantité livrée de l'inventaire, comme dans Acomba. Acomba ne bloque pas une facture quand le stock est insuffisant.
Codes d'erreur : voir Codes d'erreur pour savoir quand réessayer.
Essayez d'abord dans un dossier de test : commandes, factures et paiements sont de vraies écritures comptables, et une facture ne se supprime pas.
Votre boutique crée maintenant ses commandes dans Acomba, les facture à chaque livraison et inscrit les paiements, sans ressaisie. Vous savez livrer en plusieurs fois sans perdre de reste, relire la commande avant chaque écriture, et corriger une erreur par un crédit plutôt qu'en touchant à la facture.Pour aller plus loin