Inventaire
Chemin de base : /api/inventory
Produits
GET /inventory/products
Récupérer tous les produits avec les données de catégorie et de fournisseur.
Authentification : Connecté
Paramètres de requête :
| Paramètre | Type | Description |
|---|---|---|
search | string | Filtrer par nom de produit |
supplier_id | integer | Filtrer par fournisseur |
page | integer | Numéro de page (active la pagination) |
limit | integer | Éléments par page (défaut 50) |
Réponse : Tableau d'objets produit avec category_name, category_color, supplier_name.
POST /inventory/products
Créer un nouveau produit. Un article_number est généré automatiquement via la séquence ART_PRODUCT. Si aucun vat_rate_id n'est fourni, le taux de TVA par défaut est appliqué automatiquement.
Authentification : Admin
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
name | string | Oui | Nom du produit |
sku | string | Oui | Code de référence (SKU) |
price | number | Oui | Prix de vente (>= 0) |
purchase_price | number | Oui | Prix d'achat (obligatoire pour les calculs de coût) |
quantity_on_hand | integer | Oui | Niveau de stock actuel |
low_stock_threshold | integer | Non | Seuil d'alerte (défaut 5) |
category_id | integer | Non | ID de catégorie de produit |
supplier_id | integer | Non | ID du fournisseur |
vat_rate_id | integer | Non | ID du taux de TVA (utilise le taux TVA par défaut du système) |
ean_code | string | Non | Code-barres EAN |
PUT /inventory/products/:id
Mettre à jour un produit.
Authentification : Admin
Tous les champs sont optionnels. Lorsque purchase_orders_enabled est false dans les paramètres, quantity_on_hand peut être mis à jour directement ici.
DELETE /inventory/products/:id
Supprimer un produit.
Authentification : Admin
Catégories de produits
GET /inventory/categories
Récupérer toutes les catégories de produits triées par position.
POST /inventory/categories
Créer une nouvelle catégorie.
Authentification : Admin
| Champ | Type | Obligatoire | Défaut |
|---|---|---|---|
name | string | Oui | — |
color | string (hex) | Non | #6e56cf |
PUT /inventory/categories/:id
Mettre à jour une catégorie (nom, couleur, position).
Authentification : Admin
DELETE /inventory/categories/:id
Supprimer une catégorie.
Authentification : Admin
Transactions de stock
GET /inventory/transactions
Récupérer les mouvements de stock (livraisons entrantes, ventes, ajustements manuels, consommation interne).
Authentification : Connecté
Paramètres de requête : product_id, from (date), to (date)
Chaque transaction possède un champ delta (positif = entrée de stock, négatif = sortie de stock) et une chaîne reason.
Fournisseurs
Chemin de base : /api/suppliers
GET /suppliers
Lister tous les fournisseurs triés par nom.
Authentification : Connecté
Paramètres de requête : active=true pour filtrer uniquement les fournisseurs actifs ; page, limit pour la pagination.
POST /suppliers
Créer un nouveau fournisseur. Un creditor_number est généré automatiquement via la séquence CRED.
Authentification : Admin
| Champ | Type | Obligatoire |
|---|---|---|
name | string | Oui |
contact_person | string | Non |
email | string | Non |
phone | string | Non |
address | string | Non |
notes | string | Non |
website | string | Non |
GET /suppliers/:id
Récupérer un fournisseur avec ses 20 commandes d'achat les plus récentes.
PUT /suppliers/:id
Mettre à jour un fournisseur.
Authentification : Admin
Champ supplémentaire : active (booléen) pour désactiver un fournisseur.
DELETE /suppliers/:id
Supprimer un fournisseur.
Authentification : Admin
Commandes d'achat
Chemin de base : /api/suppliers (les endpoints de commande d'achat sont sous la route suppliers)
GET /suppliers/orders
Lister toutes les commandes d'achat avec le nom du fournisseur et le nombre d'articles.
Authentification : Connecté
Paramètres de requête : status pour filtrer par statut ; page, limit pour la pagination.
GET /suppliers/orders/:id
Récupérer une commande d'achat avec toutes ses lignes.
Authentification : Connecté
POST /suppliers/orders
Créer une nouvelle commande d'achat. Un order_number est généré automatiquement via la séquence IO. Les nouvelles commandes ont le statut created.
Authentification : Admin
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
supplier_id | integer | Oui | ID du fournisseur |
staff_id | integer | Non | Membre du personnel assigné (par défaut l'utilisateur courant) |
notes | string | Non | Notes de commande |
order_date | date | Non | Date de commande (par défaut aujourd'hui) |
expected_date | date | Non | Date de livraison prévue |
Réponse (201) : Objet commande avec tableau items vide.
PUT /suppliers/orders/:id/items
Définir en masse les lignes d'une commande d'achat. Remplace tous les articles existants. Uniquement autorisé lorsque le statut est created ou ordered.
Authentification : Admin
{
"items": [
{ "product_id": 5, "quantity": 10, "unit_cost": 4.50 },
{ "product_id": 8, "quantity": 2, "unit_cost": 12.00 }
]
}
PUT /suppliers/orders/:id
Mettre à jour le statut ou les métadonnées d'une commande d'achat.
Authentification : Admin
| Champ | Type | Description |
|---|---|---|
status | string | created, ordered, received, cancelled |
notes | string | Notes de commande |
order_date | date | Date de commande |
expected_date | date | Date de livraison prévue |
received_date | date | Date de réception effective |
packing_slip_number | string | Numéro de référence du bon de livraison |
Lors de la transition vers received, le stock est automatiquement incrémenté pour chaque ligne et des lignes inventory_transactions sont créées. received_date est défini à aujourd'hui si non fourni.
POST /suppliers/orders/:id/packing-slip
Téléverser un fichier bon de livraison (PDF, image) pour une commande reçue. Max 10 Mo. Le fichier est enregistré avec un nom structuré : {order_number}_{creditor_number}_{received_date}.
Authentification : Admin
Content-Type : multipart/form-data
| Champ | Type | Obligatoire |
|---|---|---|
file | fichier | Oui |
Réponse : { "ok": true, "filename": "IO2601_CRED001_20260325.pdf" }
GET /suppliers/orders/:id/packing-slip
Télécharger le fichier bon de livraison d'une commande.
Authentification : Connecté
GET /suppliers/packing-slips/zip
Télécharger tous les bons de livraison d'une année donnée sous forme d'archive ZIP.
Authentification : Admin
Paramètres de requête : year (par défaut l'année en cours)
DELETE /suppliers/orders/:id
Supprimer une commande d'achat. Fonctionne pour tous les statuts.
Authentification : Admin
Comportement selon le statut :
| Statut de la commande | Effet sur le stock |
|---|---|
created | Aucune modification du stock |
ordered | Aucune modification du stock |
received | Le stock est décrémenté pour tous les articles reçus ; des lignes inventory_transactions inverses sont créées ; le fichier bon de livraison est supprimé |
cancelled | Aucune modification du stock |
Réponse : { "ok": true }
Statuts des commandes d'achat
| Statut | Description |
|---|---|
created | Commande créée, articles en cours d'ajout |
ordered | Commande envoyée au fournisseur |
received | Marchandises reçues ; stock mis à jour |
cancelled | Commande annulée |
Numérotation automatique
| Préfixe de séquence | Entité | Exemple |
|---|---|---|
IO | Commandes d'achat | IO2601, IO2602 |
CRED | Numéros de créancier fournisseur | CRED001, CRED002 |
ART_PRODUCT | Numéros d'article produit | ART_PRODUCT001 |
Les séquences se réinitialisent annuellement (les deux derniers chiffres de l'année font partie du numéro).