mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-11 17:27:31 +02:00
feat(api): compléter la facture des fournisseurs en rapprochement automatique (#568)
Les livraisons d'un fournisseur en rapprochement automatique sont validées d'office à la saisie du BL ; PATCH /api/ext/v1/deliveries/:id les refusait donc (409) sauf à les dévalider. Pour ces fournisseurs, la référence, les montants HT/TTC et l'échéance s'écrivent désormais directement, la livraison restant validée. - automaticReconciliation exposé sur chaque livraison renvoyée par l'API - documentation mise à jour avec un exemple Claude-Session: https://claude.ai/code/session_01LEhR8Cok79VpsxixhrKChM Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
1 parent
6f1a39e4b2
commit
bd3bb5e64a
2 files changed
+27
-3
No files matched your search
@@ -82,6 +82,7 @@ Paramètre mal formé : `400` avec la liste des paramètres fautifs.
|
|||||||
"supplierId": 4,
|
"supplierId": 4,
|
||||||
"supplierName": "Lactalis",
|
"supplierName": "Lactalis",
|
||||||
"supplierCode": "LAC01",
|
"supplierCode": "LAC01",
|
||||||
|
"automaticReconciliation": false,
|
||||||
"status": "delivered",
|
"status": "delivered",
|
||||||
"scheduledDate": "2026-10-08",
|
"scheduledDate": "2026-10-08",
|
||||||
"deliveredDate": "2026-10-08T07:42:00.000Z",
|
"deliveredDate": "2026-10-08T07:42:00.000Z",
|
||||||
@@ -131,6 +132,10 @@ Règles :
|
|||||||
- livraison non livrée : `409` ;
|
- livraison non livrée : `409` ;
|
||||||
- livraison déjà rapprochée : sa facture est figée (`409`). Envoyer
|
- livraison déjà rapprochée : sa facture est figée (`409`). Envoyer
|
||||||
`"reconciled": false` dans la même requête pour la dévalider et la modifier ;
|
`"reconciled": false` dans la même requête pour la dévalider et la modifier ;
|
||||||
|
- exception, fournisseur en **rapprochement automatique**
|
||||||
|
(`automaticReconciliation: true`) : la livraison est validée d'office dès la
|
||||||
|
saisie du BL, sa facture (référence, montants, échéance) se complète ensuite
|
||||||
|
directement, sans la dévalider ; elle reste validée ;
|
||||||
- corps invalide : `400` avec le détail par champ.
|
- corps invalide : `400` avec le détail par champ.
|
||||||
|
|
||||||
## Exemple : rapprocher une facture reçue
|
## Exemple : rapprocher une facture reçue
|
||||||
@@ -139,3 +144,17 @@ Règles :
|
|||||||
2. `GET /deliveries?supplierId=4&blNumber=BL-4567` → récupérer l'`id` de la livraison.
|
2. `GET /deliveries?supplierId=4&blNumber=BL-4567` → récupérer l'`id` de la livraison.
|
||||||
3. `PATCH /deliveries/812` avec `invoiceReference` et `invoiceAmount`
|
3. `PATCH /deliveries/812` avec `invoiceReference` et `invoiceAmount`
|
||||||
(ajouter `"reconciled": true` pour valider directement).
|
(ajouter `"reconciled": true` pour valider directement).
|
||||||
|
|
||||||
|
## Exemple : compléter la facture d'un fournisseur automatique
|
||||||
|
|
||||||
|
Les livraisons d'un fournisseur en rapprochement automatique sont déjà
|
||||||
|
validées (`reconciled: true`) ; la facture s'y ajoute sans autre champ :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -X PATCH https://logiflow.example/api/ext/v1/deliveries/815 \
|
||||||
|
-H "X-API-Key: $LOGIFLOW_API_KEY" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"invoiceReference":"FAC-2026-0057","invoiceAmount":"842,10","invoiceAmountTTC":"1010,52","dueDate":"2026-11-30"}'
|
||||||
|
```
|
||||||
|
|
||||||
|
Pour les retrouver : `GET /deliveries?supplierId=<id auto>&hasInvoice=false`.
|
||||||
@@ -2,7 +2,8 @@
|
|||||||
//
|
//
|
||||||
// Permet à un outil tiers (comptabilité, n8n, script...) de lire les magasins,
|
// Permet à un outil tiers (comptabilité, n8n, script...) de lire les magasins,
|
||||||
// les fournisseurs et les livraisons livrées (numéros de BL), puis d'écrire la
|
// les fournisseurs et les livraisons livrées (numéros de BL), puis d'écrire la
|
||||||
// référence et le montant de la facture sur une livraison.
|
// référence, les montants et l'échéance de la facture sur une livraison (y
|
||||||
|
// compris déjà validée, pour les fournisseurs en rapprochement automatique).
|
||||||
//
|
//
|
||||||
// Authentification par clé d'API, indépendante des sessions du webUI :
|
// Authentification par clé d'API, indépendante des sessions du webUI :
|
||||||
// - variable d'environnement EXTERNAL_API_KEYS (une ou plusieurs clés
|
// - variable d'environnement EXTERNAL_API_KEYS (une ou plusieurs clés
|
||||||
@@ -127,6 +128,7 @@ function toApiDelivery(d: any) {
|
|||||||
supplierId: d.supplierId,
|
supplierId: d.supplierId,
|
||||||
supplierName: d.supplier?.name ?? null,
|
supplierName: d.supplier?.name ?? null,
|
||||||
supplierCode: d.supplier?.codefou ?? null,
|
supplierCode: d.supplier?.codefou ?? null,
|
||||||
|
automaticReconciliation: !!d.supplier?.automaticReconciliation,
|
||||||
status: d.status,
|
status: d.status,
|
||||||
scheduledDate: toIsoDate(d.scheduledDate),
|
scheduledDate: toIsoDate(d.scheduledDate),
|
||||||
deliveredDate: toIsoDateTime(d.deliveredDate),
|
deliveredDate: toIsoDateTime(d.deliveredDate),
|
||||||
@@ -304,8 +306,11 @@ export function registerExternalApi(app: Express) {
|
|||||||
|
|
||||||
const touchesInvoice = INVOICE_FIELDS.some((f) => body[f] !== undefined);
|
const touchesInvoice = INVOICE_FIELDS.some((f) => body[f] !== undefined);
|
||||||
// Une livraison rapprochée est figée, comme dans le webUI : il faut la
|
// Une livraison rapprochée est figée, comme dans le webUI : il faut la
|
||||||
// dévalider (reconciled: false) pour modifier sa facture.
|
// dévalider (reconciled: false) pour modifier sa facture. Exception : les
|
||||||
if (delivery.reconciled && touchesInvoice && body.reconciled !== false) {
|
// fournisseurs en rapprochement automatique, validés d'office dès la
|
||||||
|
// saisie du BL, dont la facture arrive après et se complète sans dévalider.
|
||||||
|
const isAutomatic = !!delivery.supplier?.automaticReconciliation;
|
||||||
|
if (delivery.reconciled && !isAutomatic && touchesInvoice && body.reconciled !== false) {
|
||||||
return res.status(409).json({
|
return res.status(409).json({
|
||||||
error: "Livraison déjà rapprochée : envoyer reconciled: false pour la dévalider avant de modifier la facture",
|
error: "Livraison déjà rapprochée : envoyer reconciled: false pour la dévalider avant de modifier la facture",
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in new issue
Block a user