- Added `barryvdh/laravel-dompdf` to `composer.json` for PDF generation capabilities. - Updated `boost.json` to include `tailwindcss-development` in skills. - Modified `package.json` and `package-lock.json` to upgrade Tailwind CSS and related packages. - Improved README.md for clarity and corrected French language errors. - Created design system documentation for Filament components. - Added new Filament pages for Dashboard and Documentation with dynamic content loading. - Enhanced TablesExplorer functionality with improved table and column management.
920 lines
34 KiB
Markdown
920 lines
34 KiB
Markdown
# Documentation API Logistics (Flex/ESI Gescom)
|
|
|
|
Dernière mise à jour : 2026-02-20
|
|
|
|
---
|
|
|
|
## Table des matières
|
|
|
|
1. [Pré-requis](#1-pré-requis)
|
|
2. [Comment effectuer des requêtes](#2-comment-effectuer-des-requêtes)
|
|
3. [Structure de réponse](#3-structure-de-réponse)
|
|
4. [Tables et colonnes disponibles](#4-tables-et-colonnes-disponibles)
|
|
5. [Récupération de données](#5-récupération-de-données)
|
|
6. [Envoi de données](#6-envoi-de-données)
|
|
7. [Endpoints non fonctionnels](#7-endpoints-non-fonctionnels)
|
|
8. [Relations entre entités](#8-relations-entre-entités)
|
|
9. [Remarques et points d'attention](#9-remarques-et-points-dattention)
|
|
10. [Ressources externes](#10-ressources-externes)
|
|
|
|
---
|
|
|
|
## 1. Pré-requis
|
|
|
|
### Accès au serveur
|
|
|
|
L'API Logistics est hébergée sur un serveur privé. Les informations de connexion sont les suivantes :
|
|
|
|
| Élément | Valeur |
|
|
|---------|--------|
|
|
| Serveur | TSE-10-TEST |
|
|
| Hôte | `tse-10-test.esiweb.pro` (public) / `tse-10-test.esi.local` (réseau privé) |
|
|
| Port HTTP | 5186 |
|
|
| Port HTTPS | 7126 |
|
|
|
|
L'accès au serveur nécessite soit une connexion au réseau privé, soit l'utilisation de l'hôte public avec le port adéquat.
|
|
|
|
### Clé API
|
|
|
|
Toutes les requêtes sont protégées par une clé API. Cette clé doit être transmise dans le header HTTP `X-API-KEY` de chaque requête. Sans clé valide, l'API retourne une erreur d'authentification.
|
|
|
|
### Dossier
|
|
|
|
Chaque requête cible un dossier comptable spécifique. Le nom du dossier est inclus dans l'URL de la requête. Le nom du dossier **doit impérativement être en minuscules** dans toutes les URLs (exemple : `esigescom`, et non `EsiGescom`).
|
|
|
|
### Variables d'environnement
|
|
|
|
L'application Laravel utilise les variables d'environnement suivantes pour se connecter à l'API. Elles doivent être configurées dans le fichier `.env` :
|
|
|
|
| Variable | Description | Exemple |
|
|
|----------|-------------|---------|
|
|
| `LOGISTICS_API_BASE_URL` | URL de base du serveur API | `http://tse-10-test.esi.local` |
|
|
| `LOGISTICS_API_KEY` | Clé d'authentification API | `ztpyQX1ajtzb10ypdPs3C8N2w3XY1A` |
|
|
| `LOGISTICS_API_FOLDER` | Nom du dossier comptable (minuscules) | `esigescom` |
|
|
| `LOGISTICS_API_TIMEOUT` | Timeout total de la requête en secondes | `300` |
|
|
| `LOGISTICS_API_CONNECT_TIMEOUT` | Timeout de connexion en secondes | `10` |
|
|
| `LOGISTICS_API_RETRY_TIMES` | Nombre de tentatives en cas d'échec de connexion | `3` |
|
|
| `LOGISTICS_API_RETRY_SLEEP_MS` | Délai entre les tentatives en millisecondes | `500` |
|
|
|
|
### Configuration Laravel
|
|
|
|
Les variables d'environnement sont lues par le fichier de configuration `config/logistics.php` :
|
|
|
|
| Clé de config | Variable .env | Défaut |
|
|
|---------------|---------------|--------|
|
|
| `logistics.base_url` | `LOGISTICS_API_BASE_URL` | - |
|
|
| `logistics.api_key` | `LOGISTICS_API_KEY` | - |
|
|
| `logistics.folder` | `LOGISTICS_API_FOLDER` | - |
|
|
| `logistics.timeout` | `LOGISTICS_API_TIMEOUT` | `30` |
|
|
| `logistics.connect_timeout` | `LOGISTICS_API_CONNECT_TIMEOUT` | `10` |
|
|
| `logistics.retry.times` | `LOGISTICS_API_RETRY_TIMES` | `3` |
|
|
| `logistics.retry.sleep_ms` | `LOGISTICS_API_RETRY_SLEEP_MS` | `500` |
|
|
|
|
Le service `App\Services\LogisticsService` utilise ces valeurs pour configurer automatiquement les appels HTTP (URL, headers, timeouts, retry). En cas d'échec de connexion, le service effectue un retry automatique selon la configuration.
|
|
|
|
---
|
|
|
|
## 2. Comment effectuer des requêtes
|
|
|
|
### Méthode HTTP
|
|
|
|
**Tous les endpoints utilisent la méthode POST**, y compris les opérations de lecture. Aucun endpoint ne répond aux méthodes GET, PUT, PATCH ou DELETE.
|
|
|
|
### Format de l'URL
|
|
|
|
L'URL de chaque requête suit le schéma suivant :
|
|
|
|
```
|
|
POST {base_url}/{dossier}/{endpoint}
|
|
```
|
|
|
|
Où :
|
|
|
|
- `{base_url}` est l'URL de base du serveur (ex : `http://tse-10-test.esi.local`)
|
|
- `{dossier}` est le nom du dossier comptable en minuscules (ex : `esigescom`)
|
|
- `{endpoint}` est le nom de l'endpoint (ex : `art_list`, `document_detail`)
|
|
|
|
### Headers obligatoires
|
|
|
|
| Header | Valeur | Description |
|
|
|--------|--------|-------------|
|
|
| `X-API-KEY` | `<votre clé API>` | Clé d'authentification (obligatoire) |
|
|
| `Content-Type` | `application/json` | Type de contenu du body (obligatoire si body présent) |
|
|
|
|
### Exemple de requête complète
|
|
|
|
```http
|
|
POST /esigescom/art_list HTTP/1.1
|
|
Host: tse-10-test.esiweb.pro:5186
|
|
X-API-KEY: votre-cle-api
|
|
Content-Type: application/json
|
|
|
|
```
|
|
|
|
### Paramètres des requêtes
|
|
|
|
Les paramètres sont transmis dans le body de la requête au format JSON. Certains endpoints n'exigent aucun paramètre (body vide ou `{}`). Les paramètres peuvent être de différents types :
|
|
|
|
| Type | Description | Exemple |
|
|
|------|-------------|---------|
|
|
| `string` | Chaîne de caractères | `"ART001"` |
|
|
| `int` | Nombre entier | `10` |
|
|
| `array` | Tableau de valeurs | `["ART001", "ART002"]` |
|
|
|
|
**Attention** : certains paramètres qui représentent des nombres doivent être transmis au format `string` (ex : `QTY` dans `Document_GetUnitPriceAndVat` doit être `"2"` et non `2`).
|
|
|
|
### Gestion des erreurs
|
|
|
|
Le service `LogisticsService` de l'application gère automatiquement :
|
|
|
|
- **Retry automatique** : en cas d'échec de connexion (`ConnectionException`), le service retente automatiquement selon la configuration (`retry.times` et `retry.sleep_ms`).
|
|
- **Logging** : chaque requête (réussie ou échouée) est enregistrée dans la table `api_request_logs` avec l'endpoint, les paramètres, le code de statut et la réponse.
|
|
- **Exceptions** : en cas d'erreur, une `LogisticsApiException` est levée avec un message explicite en français.
|
|
|
|
---
|
|
|
|
## 3. Structure de réponse
|
|
|
|
### Format standard
|
|
|
|
Tous les endpoints retournent un objet JSON avec la même structure :
|
|
|
|
```json
|
|
{
|
|
"data": "<résultat de la requête>",
|
|
"metadata": {
|
|
"rowcount": 0,
|
|
"issuccess": true
|
|
},
|
|
"error": null
|
|
}
|
|
```
|
|
|
|
### Description des clés
|
|
|
|
| Clé | Type | Description |
|
|
|-----|------|-------------|
|
|
| `data` | `mixed` | Le résultat de la requête. Peut être un tableau d'objets, un objet unique, une chaîne, ou `null`. |
|
|
| `metadata` | `object` | Informations sur la requête. Contient toujours `rowcount` et `issuccess`. Peut contenir d'autres clés selon l'endpoint. |
|
|
| `metadata.rowcount` | `int` | Nombre d'éléments retournés dans `data`. |
|
|
| `metadata.issuccess` | `bool` | `true` si la requête a réussi, `false` sinon. |
|
|
| `error` | `string` ou `null` | Message d'erreur en cas d'échec. `null` si la requête a réussi. |
|
|
|
|
### Exemple de réponse réussie
|
|
|
|
```json
|
|
{
|
|
"data": [
|
|
{ "artid": "ART001", "artname": "Chaise bureau" },
|
|
{ "artid": "ART002", "artname": "Chaise visiteur" }
|
|
],
|
|
"metadata": {
|
|
"rowcount": 2,
|
|
"issuccess": true
|
|
},
|
|
"error": null
|
|
}
|
|
```
|
|
|
|
### Exemple de réponse en erreur
|
|
|
|
```json
|
|
{
|
|
"data": null,
|
|
"metadata": {
|
|
"rowcount": 0,
|
|
"issuccess": false
|
|
},
|
|
"error": "Invalid API key"
|
|
}
|
|
```
|
|
|
|
### Métadonnées spécifiques par endpoint
|
|
|
|
Certains endpoints retournent des clés supplémentaires dans `metadata` :
|
|
|
|
| Endpoint | Clés supplémentaires | Description |
|
|
|----------|---------------------|-------------|
|
|
| `tables_list` | `tableCount`, `folderType`, `endpoint` | Nombre total de tables, type de base de données (ex : `DBF`), nom de l'endpoint |
|
|
| `column_list` | `columnCount`, `tableName` | Nombre de colonnes retournées, nom de la table interrogée |
|
|
|
|
---
|
|
|
|
## 4. Tables et colonnes disponibles
|
|
|
|
### Liste des tables
|
|
|
|
L'API expose 16 tables. Chacune correspond à un domaine fonctionnel de la gestion commerciale :
|
|
|
|
| Table | Colonnes | Description |
|
|
|-------|----------|-------------|
|
|
| `art` | 160 | **Articles** : références produits du catalogue. Contient l'identifiant, le nom, la description, les prix, les unités, les catégories, etc. |
|
|
| `attach` | 13 | **Fichiers attachés** : pièces jointes associées aux documents (factures, bons de commande, etc.). |
|
|
| `barcode` | 12 | **Codes-barres** : codes-barres associés aux articles pour l'identification et le scan. |
|
|
| `category` | 10 | **Catégories** : catégories de classification pour organiser les articles. |
|
|
| `codes` | 50 | **Codes système** : codes de configuration internes au système de gestion. |
|
|
| `cust` | 216 | **Tiers/Clients** : fiches tiers (clients, fournisseurs). Contient l'identifiant, le nom, l'adresse, les conditions commerciales, les coordonnées, etc. |
|
|
| `docdet` | 82 | **Lignes de documents** : lignes de détail des documents commerciaux. Chaque ligne référence un article avec sa quantité, son prix, sa TVA, etc. |
|
|
| `dochead` | 212 | **En-têtes de documents** : en-têtes des documents commerciaux (devis, commandes, factures). Contient le tiers, la date, le journal, le statut, les totaux, etc. |
|
|
| `docpay` | 22 | **Paiements** : paiements associés aux documents (montant, date, mode de paiement). |
|
|
| `file` | 17 | **Fichiers** : fichiers système gérés par l'application. |
|
|
| `hist` | 50 | **Historique** : historique des opérations effectuées dans le système. |
|
|
| `incodes` | 24 | **Codes internes** : codes internes paramétrables, utilisés pour les listes de valeurs, les types, etc. |
|
|
| `jnl` | 155 | **Journaux** : journaux comptables et commerciaux. Chaque journal regroupe des documents du même type (ventes, achats, etc.). |
|
|
| `pers` | 78 | **Personnes/Contacts** : fiches de contacts associées aux tiers ou à l'entreprise. |
|
|
| `price` | 28 | **Tarifs** : grilles de prix et conditions tarifaires par article, client ou catégorie. |
|
|
| `stk` | 20 | **Stock** : quantités en stock par article et par emplacement. |
|
|
|
|
### Types de colonnes
|
|
|
|
Chaque colonne d'une table possède un type de données identifié par un code à une lettre :
|
|
|
|
| Code | Label | Description |
|
|
|------|-------|-------------|
|
|
| `C` | Caractère | Chaîne de caractères (texte libre, identifiants, noms, etc.) |
|
|
| `N` | Numérique | Nombre entier ou décimal (quantités, prix, montants, etc.) |
|
|
| `T` | Date/Heure | Timestamp combinant date et heure |
|
|
| `D` | Date | Date seule (sans composante horaire) |
|
|
| `L` | Logique | Booléen (`true`/`false`) |
|
|
| `M` | Mémo | Texte long (champs de description étendus, remarques, etc.) |
|
|
|
|
### Exploration des colonnes
|
|
|
|
Pour connaître les colonnes disponibles dans une table, utiliser les endpoints `tables_list` et `column_list/{tablename}` décrits dans la section 5.
|
|
|
|
**Remarque importante** : l'API retourne les colonnes en double dans la réponse de `column_list`. L'application effectue une déduplication automatique côté client.
|
|
|
|
---
|
|
|
|
## 5. Récupération de données
|
|
|
|
Tous les endpoints de cette section servent à lire des données depuis l'API. Ils utilisent la méthode POST et retournent des données dans la clé `data` de la réponse.
|
|
|
|
### 5.1 Structure de la base de données
|
|
|
|
#### `tables_list` -- Liste des tables
|
|
|
|
Retourne la liste de toutes les tables accessibles dans le dossier comptable. Utile pour découvrir la structure de la base de données.
|
|
|
|
| | |
|
|
|---|---|
|
|
| **URL** | `POST /{dossier}/tables_list` |
|
|
| **Méthode service** | `LogisticsService::tablesList()` |
|
|
|
|
**Paramètres** : aucun.
|
|
|
|
**Exemple de requête** :
|
|
|
|
```json
|
|
{}
|
|
```
|
|
|
|
**Exemple de réponse** :
|
|
|
|
```json
|
|
{
|
|
"data": [
|
|
{ "name": "art", "columnCount": 160 },
|
|
{ "name": "attach", "columnCount": 13 },
|
|
{ "name": "barcode", "columnCount": 12 },
|
|
{ "name": "category", "columnCount": 10 },
|
|
{ "name": "codes", "columnCount": 50 },
|
|
{ "name": "cust", "columnCount": 216 },
|
|
{ "name": "docdet", "columnCount": 82 },
|
|
{ "name": "dochead", "columnCount": 212 },
|
|
{ "name": "docpay", "columnCount": 22 },
|
|
{ "name": "file", "columnCount": 17 },
|
|
{ "name": "hist", "columnCount": 50 },
|
|
{ "name": "incodes", "columnCount": 24 },
|
|
{ "name": "jnl", "columnCount": 155 },
|
|
{ "name": "pers", "columnCount": 78 },
|
|
{ "name": "price", "columnCount": 28 },
|
|
{ "name": "stk", "columnCount": 20 }
|
|
],
|
|
"metadata": { "tableCount": 16, "folderType": "DBF", "endpoint": "tables_list", "rowcount": 16, "issuccess": true },
|
|
"error": null
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
#### `column_list/{tablename}` -- Colonnes d'une table
|
|
|
|
Retourne la liste des colonnes d'une table donnée, avec leur type, leur longueur et leur précision. Indispensable pour connaître les champs utilisables dans le paramètre `select` des autres endpoints.
|
|
|
|
| | |
|
|
|---|---|
|
|
| **URL** | `POST /{dossier}/column_list/{tablename}` |
|
|
| **Méthode service** | `LogisticsService::columnList(string $table)` |
|
|
|
|
**Paramètres** :
|
|
|
|
| Paramètre | Emplacement | Type | Obligatoire | Description |
|
|
|-----------|-------------|------|:-----------:|-------------|
|
|
| `tablename` | URL | `string` | Oui | Nom de la table (issu de `tables_list`). Exemple : `art`, `cust`, `dochead`. |
|
|
|
|
**Exemple de requête** :
|
|
|
|
```
|
|
POST /esigescom/column_list/stk
|
|
```
|
|
|
|
**Exemple de réponse** :
|
|
|
|
```json
|
|
{
|
|
"data": [
|
|
{ "name": "ARTID", "dataType": "C", "length": 20, "precision": 0 },
|
|
{ "name": "STOCK", "dataType": "N", "length": 10, "precision": 2 },
|
|
{ "name": "DEPOT", "dataType": "C", "length": 10, "precision": 0 }
|
|
],
|
|
"metadata": { "columnCount": 3, "tableName": "stk", "rowcount": 3, "issuccess": true },
|
|
"error": null
|
|
}
|
|
```
|
|
|
|
**Remarque** : l'API retourne chaque colonne en double. L'application effectue une déduplication automatique.
|
|
|
|
---
|
|
|
|
### 5.2 Articles
|
|
|
|
Les articles sont les références produits du catalogue. Ils sont stockés dans la table `art`.
|
|
|
|
#### `art_list` -- Recherche d'articles
|
|
|
|
Retourne une liste d'articles correspondant aux critères de recherche. Permet de filtrer par texte libre ou par code-barres, et de sélectionner les colonnes à retourner.
|
|
|
|
| | |
|
|
|---|---|
|
|
| **URL** | `POST /{dossier}/art_list` |
|
|
| **Méthode service** | `LogisticsService::artList(array $params)` |
|
|
|
|
**Paramètres** :
|
|
|
|
| Paramètre | Type | Obligatoire | Description |
|
|
|-----------|------|:-----------:|-------------|
|
|
| `search` | `string` | Non | Filtre de recherche textuel. Recherche dans les champs principaux de l'article (identifiant, nom, description). Non requis si `barcode` est fourni. |
|
|
| `select` | `string` | Non | Liste des colonnes à retourner, séparées par des virgules. Les noms de colonnes disponibles sont ceux de la table `art` (obtenables via `column_list/art`). Si omis, un jeu de colonnes par défaut est retourné. |
|
|
| `results` | `int` | Non | Nombre maximum de résultats à retourner. Par défaut, l'API retourne un nombre réduit de résultats (environ 5 à 10). |
|
|
| `barcode` | `string` | Non | Code-barres de l'article à rechercher. Si fourni, le paramètre `search` n'est pas requis. |
|
|
|
|
**Exemple de requête** :
|
|
|
|
```json
|
|
{
|
|
"search": "chaise",
|
|
"select": "artid,artname,saleprice1",
|
|
"results": 20
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
#### `art_getstk` -- Stock d'un article
|
|
|
|
Retourne les informations de stock pour un article donné. Permet de vérifier la disponibilité d'un article dans les différents dépôts.
|
|
|
|
| | |
|
|
|---|---|
|
|
| **URL** | `POST /{dossier}/art_getstk` |
|
|
| **Méthode service** | `LogisticsService::artGetStock(string $artId)` |
|
|
|
|
**Paramètres** :
|
|
|
|
| Paramètre | Type | Obligatoire | Description |
|
|
|-----------|------|:-----------:|-------------|
|
|
| `ARTID` | `string` | Oui | Identifiant unique de l'article (champ `artid` de la table `art`). |
|
|
|
|
**Exemple de requête** :
|
|
|
|
```json
|
|
{
|
|
"ARTID": "ART001"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### 5.3 Journaux
|
|
|
|
Les journaux regroupent les documents commerciaux par type (ventes, achats, retours, etc.). Ils sont stockés dans la table `jnl`.
|
|
|
|
#### `jnl_list` -- Liste des journaux
|
|
|
|
Retourne la liste des journaux correspondant au type demandé. Un journal contient un ou plusieurs documents.
|
|
|
|
| | |
|
|
|---|---|
|
|
| **URL** | `POST /{dossier}/jnl_list` |
|
|
| **Méthode service** | `LogisticsService::jnlList(array $params)` |
|
|
|
|
**Paramètres** :
|
|
|
|
| Paramètre | Type | Obligatoire | Description |
|
|
|-----------|------|:-----------:|-------------|
|
|
| `TYPE` | `string` | Oui | Code de type de journal. Filtre les journaux par leur type (ex : ventes, achats). Les codes de type disponibles dépendent de la configuration du dossier. |
|
|
| `select` | `string` | Non | Colonnes à retourner, séparées par des virgules (colonnes de la table `jnl`). |
|
|
| `results` | `int` | Non | Nombre maximum de résultats. |
|
|
|
|
**Exemple de requête** :
|
|
|
|
```json
|
|
{
|
|
"TYPE": "V",
|
|
"select": "jnlid,jnlname",
|
|
"results": 50
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### 5.4 Documents
|
|
|
|
Les documents commerciaux (devis, commandes, factures, avoirs, etc.) constituent le coeur du système. Chaque document possède un en-tête (`dochead`) et une ou plusieurs lignes de détail (`docdet`). Un document appartient à un journal et est associé à un tiers.
|
|
|
|
#### `document_list` -- Liste des documents
|
|
|
|
Retourne une liste de documents, éventuellement filtrée par tiers. Permet de consulter les documents commerciaux associés à un client.
|
|
|
|
| | |
|
|
|---|---|
|
|
| **URL** | `POST /{dossier}/document_list` |
|
|
| **Méthode service** | `LogisticsService::documentList(array $params)` |
|
|
|
|
**Paramètres** :
|
|
|
|
| Paramètre | Type | Obligatoire | Description |
|
|
|-----------|------|:-----------:|-------------|
|
|
| `select` | `string` | Non | Colonnes à retourner, séparées par des virgules (colonnes de la table `dochead`). |
|
|
| `thirdid` | `string` | Non | Identifiant du tiers (champ `custid` de la table `cust`). Si fourni, seuls les documents de ce tiers sont retournés. |
|
|
|
|
**Exemple de requête** :
|
|
|
|
```json
|
|
{
|
|
"select": "docid,docdate,thirdid,totalht",
|
|
"thirdid": "CUST001"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
#### `document_detail` -- Détail d'un document
|
|
|
|
Retourne le détail complet d'un document spécifique : l'en-tête (informations générales) et toutes les lignes de détail (articles, quantités, prix).
|
|
|
|
| | |
|
|
|---|---|
|
|
| **URL** | `POST /{dossier}/document_detail` |
|
|
| **Méthode service** | `LogisticsService::documentDetail(string $jnl, string $number)` |
|
|
|
|
**Paramètres** :
|
|
|
|
| Paramètre | Type | Obligatoire | Description |
|
|
|-----------|------|:-----------:|-------------|
|
|
| `jnl` | `string` | Oui | Code du journal auquel appartient le document. |
|
|
| `number` | `string` | Oui | Identifiant unique du document dans le journal. |
|
|
|
|
**Exemple de requête** :
|
|
|
|
```json
|
|
{
|
|
"jnl": "VEN",
|
|
"number": "2026/0001"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
#### `Document_GetStatusList` -- Statuts disponibles d'un journal
|
|
|
|
Retourne la liste des statuts disponibles pour les documents d'un journal donné. Utile pour connaître les états possibles d'un document (brouillon, validé, envoyé, etc.).
|
|
|
|
| | |
|
|
|---|---|
|
|
| **URL** | `POST /{dossier}/Document_GetStatusList` |
|
|
| **Méthode service** | `LogisticsService::documentGetStatusList(string $jnl)` |
|
|
|
|
**Paramètres** :
|
|
|
|
| Paramètre | Type | Obligatoire | Description |
|
|
|-----------|------|:-----------:|-------------|
|
|
| `jnl` | `string` | Oui | Code du journal dont on veut connaître les statuts. |
|
|
|
|
**Exemple de requête** :
|
|
|
|
```json
|
|
{
|
|
"jnl": "VEN"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
#### `Document_GetUnitPriceAndVat` -- Prix unitaire et TVA
|
|
|
|
Retourne le prix unitaire et la TVA applicable pour un article dans un contexte précis (journal, tiers, date, quantité). Utile pour calculer le montant d'une ligne de document avant création.
|
|
|
|
| | |
|
|
|---|---|
|
|
| **URL** | `POST /{dossier}/Document_GetUnitPriceAndVat` |
|
|
| **Méthode service** | `LogisticsService::documentGetUnitPriceAndVat(array $params)` |
|
|
|
|
**Paramètres** :
|
|
|
|
| Paramètre | Type | Obligatoire | Description |
|
|
|-----------|------|:-----------:|-------------|
|
|
| `ARTID` | `string` | Oui | Identifiant de l'article. |
|
|
| `QTY` | `string` | Oui | Quantité demandée. **Doit être au format string** (ex : `"2"`), pas un nombre. |
|
|
| `JNL` | `string` | Oui | Code du journal. |
|
|
| `THIRDID` | `string` | Oui | Identifiant du tiers (champ `custid` de la table `cust`). |
|
|
| `DATE` | `string` | Oui | Date de référence pour le calcul du prix. |
|
|
|
|
**Exemple de requête** :
|
|
|
|
```json
|
|
{
|
|
"ARTID": "ART001",
|
|
"QTY": "5",
|
|
"JNL": "VEN",
|
|
"THIRDID": "CUST001",
|
|
"DATE": "2026-02-20"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
#### `Document_GetDueDate` -- Échéance de paiement
|
|
|
|
Calcule la date d'échéance de paiement à partir d'un type de délai de paiement et d'une date de départ. Utile pour déterminer automatiquement la date limite de paiement d'un document.
|
|
|
|
| | |
|
|
|---|---|
|
|
| **URL** | `POST /{dossier}/Document_GetDueDate` |
|
|
| **Méthode service** | `LogisticsService::documentGetDueDate(string $payDelay, string $date)` |
|
|
|
|
**Paramètres** :
|
|
|
|
| Paramètre | Type | Obligatoire | Description |
|
|
|-----------|------|:-----------:|-------------|
|
|
| `paydelay` | `string` | Oui | Type de délai de paiement (code identifiant les conditions de paiement, ex : `30J`, `60J`, `FDM`). |
|
|
| `date` | `string` | Oui | Date de départ à partir de laquelle calculer l'échéance. |
|
|
|
|
**Exemple de requête** :
|
|
|
|
```json
|
|
{
|
|
"paydelay": "30J",
|
|
"date": "2026-02-20"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
#### `Document_GetAttachListThumbnail` -- Miniatures des annexes
|
|
|
|
Retourne les miniatures des fichiers images attachés à un document. Seuls les fichiers de type image sont concernés ; les autres types de fichiers ne sont pas retournés.
|
|
|
|
| | |
|
|
|---|---|
|
|
| **URL** | `POST /{dossier}/Document_GetAttachListThumbnail` |
|
|
| **Méthode service** | `LogisticsService::documentGetAttachListThumbnail(string $jnl, string $number)` |
|
|
|
|
**Paramètres** :
|
|
|
|
| Paramètre | Type | Obligatoire | Description |
|
|
|-----------|------|:-----------:|-------------|
|
|
| `JNL` | `string` | Oui | Code du journal du document. |
|
|
| `NUMBER` | `string` | Oui | Identifiant du document. |
|
|
|
|
**Exemple de requête** :
|
|
|
|
```json
|
|
{
|
|
"JNL": "VEN",
|
|
"NUMBER": "2026/0001"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### 5.5 Tiers
|
|
|
|
Les tiers (clients, fournisseurs) sont les entités commerciales avec lesquelles l'entreprise interagit. Ils sont stockés dans la table `cust`.
|
|
|
|
#### `third_list` -- Recherche de tiers
|
|
|
|
Retourne une liste de tiers correspondant au filtre de recherche. Permet de trouver un client ou fournisseur par son nom, son identifiant ou d'autres critères.
|
|
|
|
| | |
|
|
|---|---|
|
|
| **URL** | `POST /{dossier}/third_list` |
|
|
| **Méthode service** | `LogisticsService::thirdList(array $params)` |
|
|
|
|
**Paramètres** :
|
|
|
|
| Paramètre | Type | Obligatoire | Description |
|
|
|-----------|------|:-----------:|-------------|
|
|
| `search` | `string` | Oui | Filtre de recherche. **Ce paramètre est obligatoire** : un appel sans filtre retourne une erreur. |
|
|
| `select` | `string` | Non | Colonnes à retourner, séparées par des virgules (colonnes de la table `cust`). |
|
|
| `results` | `int` | Non | Nombre maximum de résultats. |
|
|
|
|
**Exemple de requête** :
|
|
|
|
```json
|
|
{
|
|
"search": "Dupont",
|
|
"select": "custid,custname,city",
|
|
"results": 10
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
#### `third_GetArtHistory` -- Historique des articles d'un tiers
|
|
|
|
Retourne l'historique complet des articles présents dans les documents associés à un tiers. Permet d'analyser les achats ou ventes passés d'un client/fournisseur.
|
|
|
|
| | |
|
|
|---|---|
|
|
| **URL** | `POST /{dossier}/third_GetArtHistory` |
|
|
| **Méthode service** | `LogisticsService::thirdGetArtHistory(string $thirdId)` |
|
|
|
|
**Paramètres** :
|
|
|
|
| Paramètre | Type | Obligatoire | Description |
|
|
|-----------|------|:-----------:|-------------|
|
|
| `thirdid` | `string` | Oui | Identifiant du tiers (champ `custid` de la table `cust`). |
|
|
|
|
**Exemple de requête** :
|
|
|
|
```json
|
|
{
|
|
"thirdid": "CUST001"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### 5.6 Divers
|
|
|
|
#### `getserialnumber` -- Numéro de série du dossier
|
|
|
|
Retourne le numéro de série du dossier comptable. Identifie de manière unique l'installation du logiciel de gestion.
|
|
|
|
| | |
|
|
|---|---|
|
|
| **URL** | `POST /{dossier}/getserialnumber` |
|
|
| **Méthode service** | `LogisticsService::getSerialNumber()` |
|
|
|
|
**Paramètres** : aucun.
|
|
|
|
**Exemple de requête** :
|
|
|
|
```json
|
|
{}
|
|
```
|
|
|
|
---
|
|
|
|
#### `codes_list` -- Données par code interne
|
|
|
|
Retourne les données associées à un code interne. Les codes proviennent de la table `incodes` et servent à stocker des listes de valeurs paramétrables (types de documents, catégories, etc.).
|
|
|
|
| | |
|
|
|---|---|
|
|
| **URL** | `POST /{dossier}/codes_list` |
|
|
| **Méthode service** | `LogisticsService::codesList(array $params)` |
|
|
|
|
**Paramètres** :
|
|
|
|
| Paramètre | Type | Obligatoire | Description |
|
|
|-----------|------|:-----------:|-------------|
|
|
| `code` | `string` | Oui | Début du code interne à rechercher (de la table `incodes`). Le filtre s'applique par préfixe. |
|
|
|
|
**Exemple de requête** :
|
|
|
|
```json
|
|
{
|
|
"code": "PAY"
|
|
}
|
|
```
|
|
|
|
**Remarque** : les valeurs retournées contiennent des champs `vala1`, `vala2`, etc. dont la signification précise dépend du code recherché.
|
|
|
|
---
|
|
|
|
## 6. Envoi de données
|
|
|
|
Les endpoints de cette section permettent de créer ou modifier des données dans le système de gestion via l'API.
|
|
|
|
### 6.1 Ajout d'un document
|
|
|
|
#### `document_add` -- Création d'un document
|
|
|
|
Crée un nouveau document commercial (devis, commande, facture, etc.) dans un journal. Le document est composé d'un en-tête (tiers, date, journal) et d'une ou plusieurs lignes d'articles.
|
|
|
|
| | |
|
|
|---|---|
|
|
| **URL** | `POST /{dossier}/document_add` |
|
|
| **Méthode service** | `LogisticsService::documentAdd(array $params)` |
|
|
|
|
**Paramètres** :
|
|
|
|
| Paramètre | Type | Obligatoire | Description |
|
|
|-----------|------|:-----------:|-------------|
|
|
| `ThirdId` | `string` | Oui | Identifiant du tiers (champ `custid` de la table `cust`). Détermine le client ou fournisseur associé au document. |
|
|
| `Date` | `string` | Oui | Date d'encodage du document (ex : `"2026-02-20"`). |
|
|
| `Artid` | `array` | Oui | Tableau d'identifiants d'articles (champ `artid` de la table `art`). Chaque élément correspond à une ligne du document. |
|
|
| `Qty` | `array` | Oui | Tableau de quantités. Correspond position par position au tableau `Artid`. Chaque élément est un `string`. |
|
|
| `Saleprice` | `array` | Oui | Tableau des prix de vente unitaires. Correspond position par position au tableau `Artid`. Chaque élément est un `string`. |
|
|
| `JNL` | `string` | Oui | Code du journal dans lequel créer le document (ex : `"VEN"` pour ventes). |
|
|
| `Discount` | `array` | Non | Tableau des réductions de prix (en pourcentage ou montant). Correspond position par position au tableau `Artid`. |
|
|
| `Vatid` | `array` | Non | Tableau des identifiants de code TVA. Correspond position par position au tableau `Artid`. |
|
|
| `Vatpc` | `array` | Non | Tableau des pourcentages de TVA. Correspond position par position au tableau `Artid`. |
|
|
| `Attachments` | `array` | Non | Liste de fichiers joints au document. Voir la structure ci-dessous. |
|
|
|
|
**Structure d'un élément `Attachments`** :
|
|
|
|
| Clé | Type | Description |
|
|
|-----|------|-------------|
|
|
| `FileName` | `string` | Nom du fichier avec extension (ex : `"facture.pdf"`). |
|
|
| `FileDesc` | `string` | Description du fichier (ex : `"Bon de commande signé"`). |
|
|
| `FileContentBase64` | `string` | Contenu du fichier encodé en base64. |
|
|
|
|
**Correspondance des tableaux** : les tableaux `Artid`, `Qty`, `Saleprice`, `Discount`, `Vatid` et `Vatpc` fonctionnent par correspondance positionnelle. L'élément à l'index 0 de chaque tableau concerne la première ligne du document, l'élément à l'index 1 la deuxième ligne, etc.
|
|
|
|
**Exemple de requête** :
|
|
|
|
```json
|
|
{
|
|
"ThirdId": "CUST001",
|
|
"Date": "2026-02-20",
|
|
"Artid": ["ART001", "ART002"],
|
|
"Qty": ["2", "5"],
|
|
"Saleprice": ["10.00", "25.50"],
|
|
"JNL": "VEN",
|
|
"Discount": ["0", "10"],
|
|
"Vatid": ["TVA21", "TVA21"],
|
|
"Vatpc": ["21", "21"],
|
|
"Attachments": [
|
|
{
|
|
"FileName": "bon.pdf",
|
|
"FileDesc": "Bon de commande",
|
|
"FileContentBase64": "JVBERi0xLjQK..."
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### 6.2 Modification d'un document
|
|
|
|
#### `document_mod` -- Modification d'un document existant
|
|
|
|
Modifie un document existant identifié par son numéro et son journal. Permet de mettre à jour les lignes d'articles, les prix, le tiers, ou d'ajouter des fichiers joints.
|
|
|
|
| | |
|
|
|---|---|
|
|
| **URL** | `POST /{dossier}/document_mod` |
|
|
| **Méthode service** | `LogisticsService::documentMod(array $params)` |
|
|
|
|
**Paramètres** :
|
|
|
|
| Paramètre | Type | Obligatoire | Description |
|
|
|-----------|------|:-----------:|-------------|
|
|
| `number` | `string` | Oui | Identifiant du document à modifier. |
|
|
| `JNL` | `string` | Oui | Code du journal lié au document. |
|
|
| `Thirdid` | `string` | Non | Nouvel identifiant du tiers (si modification du tiers associé). |
|
|
| `Artid` | `array` | Non | Tableau d'identifiants d'articles (remplace les lignes existantes). |
|
|
| `Qty` | `array` | Non | Tableau de quantités (correspond position par position à `Artid`). |
|
|
| `Saleprice` | `array` | Non | Tableau des prix de vente unitaires (correspond position par position à `Artid`). |
|
|
| `Attachments` | `array` | Non | Liste de fichiers joints (même structure que `document_add`). |
|
|
|
|
**Exemple de requête** :
|
|
|
|
```json
|
|
{
|
|
"number": "2026/0001",
|
|
"JNL": "VEN",
|
|
"Artid": ["ART001", "ART003"],
|
|
"Qty": ["3", "1"],
|
|
"Saleprice": ["10.00", "50.00"]
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 7. Endpoints non fonctionnels
|
|
|
|
Les endpoints suivants ont été identifiés mais ne fonctionnent pas dans l'état actuel ou nécessitent des paramètres dont les valeurs attendues sont inconnues.
|
|
|
|
### `Document_GetPDF` -- Génération de PDF
|
|
|
|
| | |
|
|
|---|---|
|
|
| **URL** | `POST /{dossier}/Document_GetPDF` |
|
|
| **Statut** | Non fonctionnel |
|
|
|
|
**Paramètres connus** :
|
|
|
|
| Paramètre | Type | Description |
|
|
|-----------|------|-------------|
|
|
| `JNL` | `string` | Code du journal. |
|
|
| `NUMBER` | `string` | Identifiant du document. |
|
|
| `LAYOUT` | `string` | Mise en page du PDF. **Valeur attendue inconnue**. |
|
|
|
|
**Problème** : le paramètre `LAYOUT` est requis mais sa valeur attendue n'est pas documentée par le fournisseur de l'API. L'endpoint retourne une erreur sans ce paramètre.
|
|
|
|
---
|
|
|
|
### `custom_geninv_updatestock` -- Mise à jour de l'inventaire
|
|
|
|
| | |
|
|
|---|---|
|
|
| **URL** | `POST /{dossier}/custom_geninv_updatestock` |
|
|
| **Statut** | Non fonctionnel |
|
|
|
|
**Paramètres connus** :
|
|
|
|
| Paramètre | Type | Description |
|
|
|-----------|------|-------------|
|
|
| `ARTID` | `string` | Identifiant de l'article. |
|
|
| `STKID` | `string` | Identifiant du stock. **Valeur attendue inconnue**. |
|
|
| `QTY` | `string` | Quantité à mettre à jour. |
|
|
| `TOCHECK` | `string` | Signification inconnue (possiblement un prix). |
|
|
| `TOCHECKDETAIL` | `string` | Signification inconnue (possiblement des remarques). |
|
|
| `MODE` | `string` | Mode d'opération. Signification inconnue. |
|
|
|
|
**Problème** : la valeur attendue pour `STKID` est inconnue, et la signification de plusieurs paramètres (`TOCHECK`, `TOCHECKDETAIL`, `MODE`) reste à clarifier auprès du fournisseur.
|
|
|
|
---
|
|
|
|
## 8. Relations entre entités
|
|
|
|
Les entités du système de gestion sont liées entre elles selon le schéma suivant :
|
|
|
|
```
|
|
Tiers (cust)
|
|
|
|
|
+-- possède un ou plusieurs --> Documents (dochead / docdet)
|
|
|
|
|
+-- appartient à un --> Journal (jnl)
|
|
|
|
|
+-- contient un ou plusieurs --> Articles (art)
|
|
|
|
|
+-- peut avoir des --> Fichiers attachés (attach)
|
|
|
|
|
+-- peut avoir des --> Paiements (docpay)
|
|
```
|
|
|
|
**Description des relations** :
|
|
|
|
- Un **tiers** (`cust`) est un client ou fournisseur. Il peut être associé à plusieurs documents commerciaux.
|
|
- Un **journal** (`jnl`) regroupe plusieurs documents du même type (ventes, achats, retours, etc.). Chaque document appartient à un seul journal.
|
|
- Un **document** est composé d'un en-tête (`dochead`) contenant les informations générales (tiers, date, journal, statut, totaux) et de lignes de détail (`docdet`) contenant les articles.
|
|
- Un **article** (`art`) est une référence produit du catalogue. Chaque ligne de document fait référence à un article avec une quantité, un prix unitaire et une TVA.
|
|
- Le **stock** (`stk`) contient les quantités en stock par article. Il est consultable via l'endpoint `art_getstk`.
|
|
- Les **fichiers attachés** (`attach`) sont des pièces jointes associées aux documents (factures PDF, bons de commande scannés, etc.).
|
|
- Les **paiements** (`docpay`) enregistrent les règlements associés aux documents.
|
|
- Les **codes internes** (`incodes`) sont des tables de référence paramétrables utilisées pour les listes déroulantes, les types, les catégories, etc.
|
|
|
|
---
|
|
|
|
## 9. Remarques et points d'attention
|
|
|
|
1. **Dossier en minuscules** : le nom du dossier dans les URLs doit toujours être en minuscules. Exemple : `esigescom`, pas `EsiGescom`. Le non-respect de cette règle provoque une erreur.
|
|
|
|
2. **Méthode POST uniquement** : tous les endpoints utilisent la méthode POST, y compris pour les opérations de lecture. N'utilisez pas GET, PUT ou DELETE.
|
|
|
|
3. **Paramètre `QTY` en string** : dans l'endpoint `Document_GetUnitPriceAndVat`, le paramètre `QTY` doit impérativement être au format string (`"2"`), pas numérique (`2`). Le non-respect de ce format provoque un comportement inattendu.
|
|
|
|
4. **Paramètre `search` obligatoire pour `third_list`** : l'endpoint `third_list` exige le paramètre `search`. Un appel sans ce paramètre retourne une erreur.
|
|
|
|
5. **Paramètre `results`** : limite le nombre de résultats retournés. Par défaut, l'API retourne un nombre réduit de résultats (environ 5 à 10). Augmentez cette valeur si vous avez besoin de plus de résultats.
|
|
|
|
6. **Paramètre `select`** : permet de choisir les colonnes à retourner. Les noms de colonnes disponibles pour chaque table s'obtiennent via `column_list/{tablename}`. Si omis, un jeu de colonnes par défaut est retourné.
|
|
|
|
7. **Casse des paramètres** : la casse des noms de paramètres varie selon les endpoints. Par exemple, l'identifiant du tiers peut être `thirdid`, `Thirdid` ou `THIRDID` selon l'endpoint. Respectez la casse documentée pour chaque endpoint.
|
|
|
|
8. **Fichiers attachés en base64** : lors de l'ajout ou la modification de documents, les fichiers joints doivent être encodés en base64 dans le champ `FileContentBase64`. Seul le contenu du fichier est encodé, pas le nom ni la description.
|
|
|
|
9. **Déduplication des colonnes** : l'endpoint `column_list` retourne chaque colonne en double. L'application effectue une déduplication automatique, mais si vous interrogez l'API directement, vous devez gérer ce doublon.
|
|
|
|
10. **Correspondance positionnelle des tableaux** : dans `document_add` et `document_mod`, les tableaux `Artid`, `Qty`, `Saleprice`, `Discount`, `Vatid` et `Vatpc` fonctionnent par correspondance positionnelle. Assurez-vous que tous les tableaux ont la même longueur.
|
|
|
|
11. **Timeout** : certaines requêtes peuvent être lentes selon le volume de données. Le timeout par défaut est configuré à 300 secondes. En cas de timeout, vérifiez la configuration `LOGISTICS_API_TIMEOUT`.
|
|
|
|
---
|
|
|
|
## 10. Ressources externes
|
|
|
|
- [Documentation Postman](https://documenter.getpostman.com/view/40440561/2sB2qaj2Pz)
|