Créer des approvisionnements
POST /procurements
Crée un ou plusieurs approvisionnements. Chaque approvisionnement reçoit un identifiant unique (uniqueProcurementID) qui ne peut pas être réutilisé.
Paramètres de requête
Section intitulée « Paramètres de requête »| Paramètre | Type | Défaut | Description |
|---|---|---|---|
validationOnly | bool | false | Si true, valide sans persister |
Champs de l’approvisionnement
Section intitulée « Champs de l’approvisionnement »Identification (obligatoires)
Section intitulée « Identification (obligatoires) »| Champ | Type | Max | Description |
|---|---|---|---|
activityCode | string | 3 | Code activité |
activityName | string | 30 | Libellé de l’activité |
uniqueProcurementID | string | 50 | Identifiant unique. Format : ^(?!.*\s)[A-Z0-9_\-.#/\\]+$ (pas d’espaces) |
expectedReceiptDate | DateTime | — | Date de réception attendue |
procurementEntries | ProcurementEntry[] | — | Lignes de l’approvisionnement (au moins une) |
Informations fournisseur
Section intitulée « Informations fournisseur »| Champ | Type | Max | Requis | Description |
|---|---|---|---|---|
supplierCode | string | 14 | Conditionnel | Code fournisseur. Obligatoire si config.CheckSupplier est activé |
supplierName | string | 80 | Non | Nom du fournisseur |
supplierOrderNumberDO | string | 30 | Non | Numéro de commande fournisseur chez le DO |
Informations complémentaires
Section intitulée « Informations complémentaires »| Champ | Type | Max | Requis | Description |
|---|---|---|---|---|
ownerCode | string | 3 | Non | Code propriétaire |
procurementTypeCode | string | 3 | Non | Code type d’approvisionnement |
procurementGroup | string | 14 | Non | Identifiant de groupe |
procurementGroupDescription | string | 80 | Non | Description du groupe |
Champs personnalisés
Section intitulée « Champs personnalisés »| Champ | Type | Max | Description |
|---|---|---|---|
customField1, customField2 | string | 200 | Texte libre |
customField3 à customField8 | string | 256 | Texte libre |
Lignes d’approvisionnement (procurementEntries)
Section intitulée « Lignes d’approvisionnement (procurementEntries) »Champs obligatoires
Section intitulée « Champs obligatoires »| Champ | Type | Max | Description |
|---|---|---|---|
lineID | string | 10 | Numéro de ligne (doit être > “0”) |
articleReference | string | 17 | Référence article. Doit exister dans le référentiel (erreur 211) |
expectedQuantity | int | — | Quantité attendue. Doit être > 0 (erreur 202) |
Champs optionnels
Section intitulée « Champs optionnels »| Champ | Type | Max | Description |
|---|---|---|---|
supplierOrderNumberDO | string | 30 | Numéro de commande fournisseur |
receptionUnitOfMeasure | string | 3 | Unité de mesure de réception |
articlePriceAtReception | int | — | Prix de l’article à la réception |
expectedLotNumber | string | 50 | Numéro de lot attendu |
announcedArticleDate | DateTime | — | Date annoncée de l’article |
articleShippingDeadline | DateTime | — | Date limite d’expédition de l’article |
articlePCB | int | — | PCB de l’article |
articleSPCB | int | — | SPCB de l’article |
lineMessage | string | 30 | Message de ligne |
gradeCode | string | 3 | Code qualité stock |
secondaryLotNumber | string | 20 | Numéro de lot secondaire |
tertiaryLotNumber | string | 20 | Numéro de lot tertiaire |
reservationConsigneeCode | string | 13 | Code destinataire de réservation. Exclusif avec les deux champs ci-dessous. Doit exister (erreur 217) |
reservationConsigneeGroupCode | string | 15 | Code groupe destinataire de réservation. Exclusif avec reservationConsigneeCode et proReservationReference |
proReservationReference | string | 20 | Référence de réservation PRO. Exclusif avec reservationConsigneeCode et reservationConsigneeGroupCode |
customField1, customField2 | string | 200 | Champs personnalisés |
customField3 à customField8 | string | 256 | Champs personnalisés |
Règles de validation
Section intitulée « Règles de validation »Champs obligatoires
Section intitulée « Champs obligatoires »activityCode,activityName,uniqueProcurementID,expectedReceiptDate,procurementEntries
uniqueProcurementID:^(?!.*\s)[A-Z0-9_\-.#/\\]+$— pas d’espaces
uniqueProcurementIDne doit pas déjà exister en base (erreur 203)- Pas de doublons d’
uniqueProcurementIDdans un même envoi (erreur 205)
Lignes — réservation
Section intitulée « Lignes — réservation »- Un seul des champs
reservationConsigneeCode,reservationConsigneeGroupCode,proReservationReferencepeut être renseigné (erreur 105)
expectedQuantity> 0 (erreur 202)lineID> “0” (erreur 104)articleReferencedoit exister dans le référentiel (erreur 211)
Fournisseur (conditionnel)
Section intitulée « Fournisseur (conditionnel) »Si config.CheckSupplier est activé pour votre activité :
supplierCodedevient obligatoire- Le fournisseur doit exister dans le référentiel (erreur 216)
Erreurs possibles
Section intitulée « Erreurs possibles »| Code | Description |
|---|---|
| 104 | Format uniqueProcurementID invalide (regex) ou lineID ≤ "0" |
| 105 | Plus d’un champ de réservation renseigné simultanément (reservationConsigneeCode, reservationConsigneeGroupCode, proReservationReference) |
| 201 | Champ obligatoire manquant |
| 202 | Valeur incorrecte (expectedQuantity ≤ 0) |
| 203 | uniqueProcurementID déjà existant en base |
| 205 | uniqueProcurementID en doublon dans le même envoi |
| 206 | Activité non autorisée |
| 211 | Article inconnu dans le référentiel |
| 216 | Fournisseur inconnu dans le référentiel (si config.CheckSupplier activé) |
| 217 | Client inconnu (reservationConsigneeCode inexistant) |
| 801 | Champ trop long |
Exemple de requête
Section intitulée « Exemple de requête »[ { "activityCode": "001", "activityName": "Mon activité", "uniqueProcurementID": "APPRO-2024-001", "supplierCode": "FOUR01", "supplierName": "Textiles Europe", "expectedReceiptDate": "2024-07-01T00:00:00Z", "procurementEntries": [ { "lineID": "1", "articleReference": "ART-001", "expectedQuantity": 500, "expectedLotNumber": "LOT2024-A", "articlePCB": 12 }, { "lineID": "2", "articleReference": "ART-002", "expectedQuantity": 200 } ] }]Exemples de code
Section intitulée « Exemples de code »curl -X POST "https://api.ezyconnect.com/procurements" \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '[{"activityCode":"001","activityName":"Mon activité","uniqueProcurementID":"APPRO-2024-001","expectedReceiptDate":"2024-07-01T00:00:00Z","procurementEntries":[{"lineID":"1","articleReference":"ART-001","expectedQuantity":500}]}]'const response = await fetch("https://api.ezyconnect.com/procurements", { method: "POST", headers: { "Authorization": "Bearer YOUR_TOKEN", "Content-Type": "application/json" }, body: JSON.stringify([{ activityCode: "001", activityName: "Mon activité", uniqueProcurementID: "APPRO-2024-001", expectedReceiptDate: "2024-07-01T00:00:00Z", procurementEntries: [{ lineID: "1", articleReference: "ART-001", expectedQuantity: 500 }] }])});const result = await response.json();console.log(result);import requests
payload = [{ "activityCode": "001", "activityName": "Mon activité", "uniqueProcurementID": "APPRO-2024-001", "expectedReceiptDate": "2024-07-01T00:00:00Z", "procurementEntries": [{"lineID": "1", "articleReference": "ART-001", "expectedQuantity": 500}]}]
response = requests.post( "https://api.ezyconnect.com/procurements", json=payload, headers={"Authorization": "Bearer YOUR_TOKEN"})print(response.json())using System.Net.Http;using System.Net.Http.Json;
var client = new HttpClient();client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "YOUR_TOKEN");
var procurements = new[] { new { activityCode = "001", activityName = "Mon activité", uniqueProcurementID = "APPRO-2024-001", expectedReceiptDate = "2024-07-01T00:00:00Z", procurementEntries = new[] { new { lineID = "1", articleReference = "ART-001", expectedQuantity = 500 } }}};
var response = await client.PostAsJsonAsync("https://api.ezyconnect.com/procurements", procurements);var result = await response.Content.ReadAsStringAsync();Console.WriteLine(result);import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;
String body = """ [{"activityCode":"001","activityName":"Mon activité", "uniqueProcurementID":"APPRO-2024-001","expectedReceiptDate":"2024-07-01T00:00:00Z", "procurementEntries":[{"lineID":"1","articleReference":"ART-001","expectedQuantity":500}]}] """;
HttpClient client = HttpClient.newHttpClient();HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.ezyconnect.com/procurements")) .header("Authorization", "Bearer YOUR_TOKEN") .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(body)) .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());System.out.println(response.body());Exemple de réponse
Section intitulée « Exemple de réponse »{ "status": 0, "operationId": "f6a7b8c9-0123-def4-5678-901234567890", "errors": {}, "passed": ["APPRO-2024-001"]}