Périmètre

BackOffice Djust

Possibilité de suppression d'un utilisateur opérateur :

Il est désormais possible de supprimer un utilisateur opérateur directement depuis le BackOffice Djust.

  • Depuis la page de détail d’un opérateur
  • Depuis le listing des opérateurs

API

📘

NEW

Buying Policies

  • Validation des commandes et blocages par quota

Contexte :

Une nouvelle buying policy de quotas permet désormais de bloquer les commandes tant que la quantité minimum attendue par fournisseur (univers) et par compte client n’est pas atteinte.

Cette règle complète la validation des commandes déjà existante (encours, validation manuelle). Elle vise à optimiser la préparation logistique en regroupant des volumes suffisants avant expédition.

  • Chaque commande est vérifiée individuellement par rapport au quota défini.
  • Il n’y a pas de cumul entre plusieurs commandes pour atteindre le quota : chaque commande doit respecter le seuil minimum seule.
  • Le blocage est appliqué au niveau de la commande : si le quota n’est pas atteint, le statut passe en BLOCKED_BY_POLICY.
  • Une commande bloquée peut être validée manuellement par un opérateur ou revalidée automatiquement à la prochaine exécution du job de validation (si les conditions sont remplies).

Fonctionnement :

  1. Ordre de validation des commandes :
    1. Policy d’encours
    2. Policy de quotas
    3. Validation manuelle (policy historique)
  2. Règles appliquées :
  • Si un quota spécifique existe pour le couple Account × Supplier, c’est cette valeur qui s’applique.
  • Sinon, on utilise la valeur par défaut définie au niveau du Supplier (via un Custom Field + rôle).
  • Si rien n’est configuré, c’est la valeur globale de la buying policy qui est utilisée.
  • Si aucune configuration n’est trouvée, la commande est bloquée par défaut.
  1. Cas de validation :
  • Quantité de la commande < quota → commande bloquée (BLOCKED_BY_POLICY).
  • Quantité de la commande quota → workflow continue vers les autres policies, puis passage en WAITING_SUPPLIER_APPROVAL.

  • Quotas minimums spécifiques par Account x Supplier

Contexte :

Les opérateurs peuvent désormais définir des quotas minimums spécifiques pour chaque couple Customer Account × Supplier.

Ces règles surchargent la valeur globale de la policy de quotas ainsi que la valeur éventuellement définie au niveau Supplier.

Objectif : refléter les accords commerciaux au plus fin, débloquer/bloquer des commandes de façon ciblée et piloter les comportements d’achat par fournisseur.

Fonctionnement métier :

  • Priorité des valeurs : Account × Supplier > Supplier > valeur globale de la policy.
  • Une commande est bloquée si les quantités commandées sont < minQuotaValue défini pour le couple concerné.
  • En l’absence de configuration Account × Supplier, le système retombe sur le quota Supplier, puis sur la valeur globale.
  • La suppression d’une règle spécifique prend effet immédiatement (retombée sur Supplier/global).

APIs correspondantes :

Quatre APIs ont été ajoutées pour gérer ces quotas spécifiques.

➕ Créer des règles Account × Supplier (bulk)

ADM-BUYING-POLICY-152 - POST /v1/buying-policies/quotas/rules

[
  { "customerAccountId": "acc-123", "supplierId": "sup-456", "minQuotaValue": 1500 }
]

🔎 Lister / filtrer les règles spécifiques

ADM-BUYING-POLICY-553 - GET /v1/buying-policies/quotas/rules

Query params (tous external ids) :

  • customerAccountIds (array)
  • supplierIds (array)

✏️ Mettre à jour une règle spécifique

ADM-BUYING-POLICY-206 - PUT /v1/buying-policies/quotas/rules/{ruleId}

{ "minQuotaValue": 1200 }

🗑️ Supprimer une règle spécifique

ADM-BUYING-POLICY-302 - DELETE /v1/buying-policies/quotas/rules/{ruleId}


  • Groupes de co-validation de quotas (Account × Supplier)

Contexte :

Il est désormais possible de lier plusieurs règles de quotas (couples Customer Account × Supplier) dans un groupe de co-validation.

Objectif : valider ou bloquer les commandes ensemble — si au moins un fournisseur du groupe ne respecte pas son quota, toutes les commandes du groupe sont bloquées.

Le contrôle s’exécute au moment de la validation des commandes lorsque celles-ci sont vérifiées par les Buying Policies.

Fonctionnement métier :

  • Périmètre d’un groupe : un même account et ≥ 2 suppliers distincts.
  • Aucune addition de seuil : chaque supplier conserve son quota propre (priorité : Account×Supplier > Supplier > global). Le groupe impose la validation conjointe.
  • Co-validation stricte : si une commande d’un supplier du groupe n’atteint pas son quota, toutes les commandes du groupe passent en BLOCKED_BY_POLICY.
  • Absence de pair : si au cut-off il n’existe pas encore de commande pour un des suppliers du groupe, les autres commandes du groupe sont bloquées. Dès qu’une commande éligible apparaît pour le supplier manquant (et respecte les critères), la revalidation déverrouille l’ensemble.

APIs correspondantes :

Quatre APIs ont été ajoutées pour gérer ces quotas spécifiques.

➕ Créer un groupe de co-validation

ADM-BUYING-POLICY-153 - POST /v1/buying-policies/quotas/groups

{
  "quotaRuleIds": ["qr-001", "qr-002"]
}

🔎 Lister les groupes

ADM-BUYING-POLICY-554 - GET /v1/buying-policies/quotas/groups

[
  {
    "id": "qgroup-001",
    "quotaRuleIds": ["qr-001","qr-002"],
    "createdAt": "2025-08-02T10:00:00Z",
    "updatedAt": "2025-08-02T10:00:00Z"
  }
]

✏️ Mettre à jour un groupe

ADM-BUYING-POLICY-207 - PUT /v1/buying-policies/quotas/groups/{groupId}

{ "quotaRuleIds": ["qr-001","qr-005","qr-006"] }

🗑️ Supprimer un groupe

ADM-BUYING-POLICY-303 - DELETE /v1/buying-policies/quotas/groups/{groupId}


  • Récupération des raisons de blocage des commandes

Contexte :

Les opérateurs peuvent désormais identifier les raisons pour lesquelles une ou plusieurs commandes sont bloquées par les buying policies.

L’objectif est de faciliter le diagnostic et d’accélérer les actions correctives ou validations manuelles, sans surcharger les réponses de l’API Orders.

Fonctionnement métier :

  • Le nouvel endpoint dédié permet de lister les policies responsables d’un blocage pour chaque commande logistique.
  • Une commande peut être bloquée par plusieurs policies ; pour la version actuelle, seule la raison courante est remontée.

API correspondante :

🔍 Récupération des raisons de blocage

ADM-BUYING-POLICY-552 - GET /v1/buying-policies/blocking-reasons

{
  "blockingReasons": [
    {
      "logisticOrderId": "ORD-001",
      "blockingPolicies": [
        {
          "type": "MANUAL_VALIDATION",
          "id": "BP-MANUAL-001"
        }
      ]
    },
    {
      "logisticOrderId": "ORD-002",
      "blockingPolicies": []
    }
  ]
}

Opérations

  • Consultation du détail d'une Opération

Contexte :

Les Opérations (campagnes commerciales, actions marketing ou opérationnelles) peuvent désormais être consultées individuellement via un nouvel endpoint.

Cette évolution permet :

  • aux opérateurs de la plateforme de consulter n’importe quelle opération existante sans restriction,
  • aux customer users habilités d’accéder uniquement aux opérations qu’ils possèdent (ownerId = customerUserId), à condition d’avoir le droit OPERATIONS_READ actif et d’être rattachés au store concerné.

⚠️ Le feature flag OPERATIONS doit être activé pour que la route soit disponible.

Fonctionnement métier :

  • Opérateur : visibilité complète, quel que soit le store ou l’owner.
  • Customer User :
    • doit être owner de l’opération,
    • doit disposer du droit OPERATIONS_READ = true,
    • doit être rattaché au store concerné (ou au store par défaut du tenant si aucun n’est précisé).

API correspondante :

🔍 Récupération du détail d’une opération

ADM-OPERATION-500 - GET /operations/{operationId}

{
  "id": "ope_001",
  "externalId": "SUMMER_OPE_0825",
  "names": {
    "en-GB": "Summer Operation · Fine Food",
    "fr-FR": "Opération Été · Produits raffinés"
  },
  "descriptions": {
    "en-GB": "Seasonal operation focused on gourmet product sales",
    "fr-FR": "Opération saisonnière axée sur les produits gastronomiques"
  },
  "status": "ACTIVE",
  "type": "PRIVATE",
  "startDate": "2025-11-21T00:00:00Z",
  "endDate": "2025-11-28T23:59:59Z",
  "createdAt": "2025-08-04T12:34:56Z",
  "updatedAt": "2025-08-05T10:00:00Z",
  "ownerId": "usr_987",
  "ownerFirstName": "Alice",
  "ownerLastName": "Durand",
  "customFieldValues": []
}
👍

UPDATE

Orders

  • Visualisation des commandes bloquées

Contexte :

Les opérateurs peuvent désormais filtrer et visualiser les commandes bloquées par une ou plusieurs buying policies.

L’objectif est de faciliter le suivi des commandes en anomalie, de comprendre rapidement la nature du blocage (encours, quota, validation manuelle) et d’orienter leur traitement.

Trois cas sont couverts :

  • Récupérer toutes les commandes bloquées par au moins une buying policy
  • Récupérer les commandes bloquées uniquement par un type de buying policy
  • Récupérer les commandes bloquées par la validation manuelle d’un autre utilisateur (buying policies historiques)

Fonctionnement métier :

  • Une commande est considérée comme bloquée si elle est au statut BLOCKED_BY_POLICY ou WAITING_CUSTOMER_APPROVAL.
  • Les filtres permettent de :
    • Lister uniquement les commandes bloquées (blockedByBuyingPolicy = true)
    • Restreindre la recherche à certains types de policies (blockingPolicyTypes) :
      • CREDIT_CONTROL
      • QUOTA
      • MANUAL_VALIDATION
  • Les valeurs du filtre blockingPolicyTypes fonctionnent en OU : une commande est incluse si elle correspond à au moins une des policies listées.
  • ⚠️ Le filtre blockingPolicyTypes n’est appliqué que si blockedByBuyingPolicy = true. Sinon, il est ignoré.

API correspondante :

ADM-ORDER-551 - POST /v1/logistic-orders

Exemples :

{
  "blockedByBuyingPolicy": true
}
{
  "blockedByBuyingPolicy": true,
  "blockingPolicyTypes": ["CREDIT_CONTROL"]
}
{
  "blockedByBuyingPolicy": true,
  "blockingPolicyTypes": ["MANUAL_VALIDATION"]
}

Périmètre

BackOffice Djust

Améliorations graphiques et optimisations de design :

Dans la continuité de la refonte globale du Back Office de Djust, un redesign des pages suivantes a été apporté afin de simplifier l'expérience utilisateur.

  • Page detail des Custom fields (Champs personnalisées) : Settings -> Custom fields (offer, customer user, etc.)

Il est désormais possible d'ordonner les valeurs des custom fields grâce au drag and drop.

  • Avant :

  • Après :


Data Hub

Définition d'une adresse de livraison et/ou facturation à l'import

Il est désormais possible de définir si une adresse doit être utilisée pour la livraison (shipping) et/ou la facturation (billing) lors de l’import des comptes clients depuis le data hub.

📘

Si aucune valeur n’est renseignée à l’import, l’adresse sera considérée comme valable pour la livraison et la facturation.

⚠️

Un compte doit avoir au moins une adresse de facturation.

API

📘

NEW

Buying Policies

  • Définition d'une limite de quota minimum par défaut à la plateforme

Contexte :

Les opérateurs peuvent désormais définir un quota de commande minimum global.

Ce quota est utilisé automatiquement pour tous les couples Customer Account × Supplier qui ne disposent pas d’une configuration spécifique.

Il garantit une homogénéité dans le contrôle des commandes et permet de bloquer celles qui ne respectent pas le volume minimum attendu.

Fonctionnement :

  • Si un quota spécifique est défini au niveau du Supplier ou du couple Customer Account × Supplier, celui-ci prévaut.
  • Si aucun quota spécifique n’est défini, la valeur par défaut s’applique.
  • Une valeur de 0 signifie qu’aucune restriction n’est appliquée par défaut.
  • Lors de la création d’un nouvel environnement, la valeur par défaut est initialisée à 0.

APIs correspondantes :

🔍 Consultation du quota par défaut

ADM-BUYING-POLICY-501 - GET /v1/buying-policies/quotas

  • Retourne le statut de la policy (ACTIVE ou INACTIVE), la valeur du quota par défaut et la date de dernière mise à jour.
  • Accessible uniquement avec le header dj-client: OPERATOR.
{
  "status": "ACTIVE",
  "minQuotaValue": 1000,
  "updatedAt": "2025-07-03T09:00:00Z"
}

✏️ Mise à jour du quota par défaut

ADM-BUYING-POLICY-205 - PATCH /v1/buying-policies/quotas/min-value

  • Permet de modifier la valeur globale appliquée.
{
  "minQuotaValue": 1500
}

  • Activation / désactivation globale de la policy de quotas

Contexte :

Les opérateurs peuvent désormais activer ou désactiver globalement la buying policy de quotas.

Cette règle permet de contrôler si les commandes doivent être bloquées en fonction d’un quota minimum configuré (spécifique ou par défaut).

Elle est particulièrement utile en phase de migration ou de test, ou encore pour ajuster rapidement le niveau de contrôle sans modifier la configuration des comptes ou des suppliers.

  • Quand la policy est ACTIVE : toutes les commandes sont validées selon les règles de quota (valeurs définies au niveau du Supplier ou valeur par défaut si absente).
  • Quand la policy est INACTIVE : aucune vérification ni blocage n’est appliqué.
  • Par défaut, lors de la création d’un environnement, la policy est initialisée à INACTIVE.

APIs correspondantes :

🔍 Consultation de la configuration globale

ADM-BUYING-POLICY-501 - GET /v1/buying-policies/quotas

  • La route est commune entre la gestion des statuts et des quotas par défaut.
  • Retourne l’état actuel de la policy (ACTIVE ou INACTIVE), la valeur du quota minimum par défaut (minQuotaValue) et la date de dernière mise à jour.

✏️ Mise à jour de l’état de la policy

ADM-BUYING-POLICY-204 - PATCH /v1/buying-policies/quotas

  • La route est commune entre la gestion des statuts et des quotas par défaut.
  • Permet d’activer ou désactiver la policy via l’attribut status (ACTIVE ou INACTIVE).

Périmètre

BackOffice Djust

Améliorations graphiques et optimisations de design :

Dans la continuité de la refonte globale du Back Office de Djust, un redesign des pages suivantes a été apporté afin de simplifier l'expérience utilisateur.

  • Page de gestion des tags produits : Settings -> Product Tags.
  • Page de creation/mise à jour des restrictions de catalogues : Product -> Catalog Views.

Affichage du statut Online/Offline en page liste offres

L'état d’une offer est désormais affiché (à la manière des produits) au niveau de la colonne de statut.

Celui-ci n'est affiché que si le feature flag SEARCH_V2 est actif


API

📘

NEW

Opérations

Une nouvelle entité "Opérations" en cours de développement devrait voir le jour courant septembre. Voici les premiers éléments qui sont livrés dans cette version (d'autres suivront sur les releases futures).

  • Pilotage de la feature Opérations via Feature Flag

Un nouveau Feature Flag OPERATIONS permet désormais d’activer ou de désactiver dynamiquement l’ensemble de la feature Opérations (endpoints, jobs et pricing override associés).

Quand OPERATIONS = false :

  • Tous les endpoints /admin/operations/** et /shop/operations/** deviennent inaccessibles.
  • Toutes les règles de pricing spécifiques liées aux opérations sont ignorées.
    • Le fallback de prix est alors appliqué selon la hiérarchie standard :
      Account → Customer Tags → Public

Par défaut, la feature est désactivée, l'activation se fait via les équipes CSM et Support.


👍

UPDATE

Orders

  • Ajouter de champs supplémentaires dans l’export order par API et XML

Les champs suivants ont été ajoutés dans l'export order API et XML du Data Hub :

  • productAttributeValues
  • confirmedPrice
  • itemPerPack
  • type (offerPriceType)
  • typeValue (offerPriceTypeValue)
  • priceWithTaxes
  • itemPriceWithoutTaxes
  • productTaxAmount
  • shippingPriceWithTaxes
  • shippingPriceWithoutTaxes
  • shippingTaxAmount
  • taxLegalNotice
  • totalPriceWithTaxes
  • totalPriceWithoutTaxes
  • totalProductTaxAmount
  • totalTaxAmount
  • quantity
  • externalId (adresse shipping)
  • externalId (variant)
  • sku (variant)
  • externalId (customer user)
  • id, externalId (order logistic)
  • id (order line)
  • orderCommercialId
  • OrderCommercialReference

Périmètre

BackOffice Djust

Améliorations graphiques et optimisations de design :

Dans la continuité de la refonte globale du Back Office de Djust, un redesign des pages suivantes a été apporté afin de simplifier l'expérience utilisateur.

  • Page de creation d'un produit / variant : Product -> Create.
  • Page de creation/mise à jour des clients d'interfaces pour le DataHub : Data Hub -> Client -> Create/Update.

API

📘

NEW

Buying Policies

  • Récupération des raisons de blocage des commandes

Un nouvel endpoint d’administration permet aux opérateurs de récupérer la liste des buying policies ayant bloqué une ou plusieurs commandes logistiques.

L’objectif est de faciliter le diagnostic et la résolution des blocages, sans surcharger les réponses standard de l’API Orders.

🔍 Récupération des raisons de blocage

ADM-BUYING-POLICY-552 - GET /v1/buying-policies/blocking-reasons

Renvoie, pour chaque commande logistique fournie, la liste des buying policies qui ont empêché sa validation (ex. CREDIT_CONTROL, QUOTA, MANUAL_VALIDATION).

Query parameters :

  • logisticOrderIds (requis) : liste des IDs des commandes logistiques concernées
  • idType (optionnel, défaut REFERENCE) : type d’identifiant (DJUST_ID, EXTERNAL_ID, REFERENCE)
ℹ️

Règles :

  • Si un ID est invalide, il est ignoré
  • Si aucune policy ne bloque une commande, le tableau blockingPolicies est vide
  • Maximum 20 policies retournées par commande
{
  "blockingReasons": [
    {
      "logisticOrderId": "ORD-001",
      "blockingPolicies": [
        {
          "type": "MANUAL_VALIDATION",
          "id": "BP-MANUAL-001"
        }
      ]
    }
  ]
}

👍

UPDATE

Orders x Buying Policies

  • Filtrage des commandes par type de buying policy

La route d’administration POST /v1/logistic-orders permet désormais de filtrer les commandes bloquées par un ou plusieurs types spécifiques de buying policies.

Cette évolution complète le filtre blockedByBuyingPolicy en permettant de cibler uniquement certaines policies.

🔍 Filtrer par type de buying policy

Nouveau paramètre facultatif : blockingPolicyTypes (array)

  • Permet de lister un ou plusieurs types de buying policies pour restreindre la recherche.
  • Les valeurs fonctionnent en OU : si au moins une policy correspond, la commande est incluse dans le résultat.
{
  "blockedByBuyingPolicy": true,
  "blockingPolicyTypes": ["CREDIT_CONTROL", "MANUAL_VALIDATION"]
}

Valeurs possibles :

  • CREDIT_CONTROL
  • QUOTA
  • MANUAL_VALIDATION
ℹ️

Règles importantes :

  • Le filtre blockingPolicyTypes n’est pris en compte que si blockedByBuyingPolicy = true.
  • Si blockedByBuyingPolicy est false ou absent, blockingPolicyTypes est ignoré.
  • Le statut de commande doit être BLOCKED_BY_POLICY pour que le filtre soit appliqué.

Comme énoncé ci-dessus, un nouveau statut a été ajouté dans le workflow de commande : BLOCKED_BY_POLICY. Il est présent sur les routes suivantes :

GET /v1/logistic-orders
POST /v1/logistic-orders
POST /v1/logistic-orders/export
GET /v1/logistic-orders/{orderLogisticId}
GET /v1/logistic-orders/{orderLogisticId}/approvals
GET /v1/logistic-orders/{orderLogisticId}/history
GET /v1/supplier-quotes/{supplierQuoteId}/orders

ORDER-560 - GET /v1/shop/commercial-orders
ORDER-100 - POST /v1/shop/commercial-orders
ORDER-500 - GET /v1/shop/commercial-orders/{commercialOrderId}
ACCOUNT-550 - GET /v1/shop/customer-accounts/orders
ACCOUNT-555 - GET /v1/shop/customer-accounts/organisations/{organisationId}/orders
N/A - GET /v1/shop/logistic-orders
ORDER-550 - POST /v1/shop/logistic-orders
ORDER-501 - GET /v1/shop/logistic-orders/{orderLogisticId}
ORDER-205 - PATCH /v1/shop/logistic-orders/{orderLogisticId}
ORDER-200 - PUT /v1/shop/logistic-orders/{orderLogisticId}/approve
ORDER-556 - GET /v1/shop/logistic-orders/{orderLogisticId}/approvers
ORDER-201 - PUT /v1/shop/logistic-orders/{orderLogisticId}/cancel
ORDER-203 - PUT /v1/shop/logistic-orders/{orderLogisticId}/confirm-reception
ORDER-204 - PUT /v1/shop/logistic-orders/{orderLogisticId}/disapprove
ORDER-107 - POST /v2/shop/supplier-quotes/{supplierQuoteId}/initialize-orders

Offers

  • Remontée de l'information online/offline sur les offres

Afin de savoir si une offre est live ou non, l'information online est remontée sur l'ensemble des APIs d'administration d'offres suivantes :

GET /v1/offer-inventories
PATCH /v1/offer-inventories
POST /v1/offer-inventories
GET /v1/offer-inventories/{offerInventoryId}
PUT /v1/offer-inventories/{offerInventoryId}
PATCH /v1/offer-inventories/{offerInventoryId}/offer-prices
POST /v1/offer-inventories/{offerInventoryId}/offer-prices
PUT /v1/offer-inventories/{offerInventoryId}/offer-prices

Orders

  • Ajout de la date de dernière synchronisation du panier (lastSyncAt)

Un nouveau champ lastSyncAt a été ajouté à la Commercial Order.

Il indique la date et l’heure de la dernière synchronisation réussie du panier (nouvelle API qui sera déployée dans la prochaine version).

Le format est ISO 8601 (ex. "2025-07-22T14:30:00Z").

La modification est visible dans la réponse de l'appel à :

ORDER-107 - POST /v2/shop/supplier-quotes/{supplierQuoteId}/initialize-orders
ORDER-560 - GET /v1/shop/commercial-orders
ORDER-100 - POST /v1/shop/commercial-orders
ORDER-500 - GET /v1/shop/commercial-orders/{commercialOrderId}

  • Ajout d’un champmetadata

Un nouveau champ metadata est désormais disponible dans la route API :

ORDER-561 - PUT /v2/shop/commercial-orders/{commercialOrderId}/lines

Ce champ permet d’associer, à chaque ligne, sous la forme de paires clé/valeur libres, des données contextuelles (ex. : localisation, informations logistiques, unité de vente etc.) qui seront transmises à l’API externe dans le cadre du Real-Time Pricing qui sera déployé prochainement.

Périmètre

BackOffice Djust

BO – Transcodings sur les pages des jobs d’import

Il est désormais possible de configurer des transcodings sur les jobs d’import afin de convertir automatiquement des valeurs sources en valeurs cibles lors de l’import de données.

  • Pour chaque champ mappé, vous pouvez définir des règles de conversion (ex. : “John” → “Jean”).
  • Ces conversions sont appliquées automatiquement au moment de l’import.
  • Les transcodings peuvent être activés ou désactivés individuellement.

📩 Fonctionnalité disponible uniquement sur demande. Contactez l’équipe support pour l’activer sur votre environnement.



API

📘

NEW

Buying Policies

  • Nouvelle Buying Policy de définition d'un quota minimum d'achat

Trois nouveaux endpoints permettent désormais aux opérateurs de consulter et mettre à jour l'état global de la buying policy de quotas ainsi que le quota minimum par défaut appliqué par cette buying policy. Ce quota permet de contrôler la quantité minimale par commande pour un fournisseur donné.

Ce quota global est utilisé pour tous les couples Customer Account × Supplier ne disposant pas d’une configuration individuelle.

🔍 1. Consultation de la configuration de la buying policy de quotas

ADM-BUYING-POLICY-501 - GET /v1/buying-policies/quotas

Permet de récupérer la configuration globale de la policy de quotas, incluant :

  • Son statut d’activation (ACTIVE ou INACTIVE)
  • La valeur actuelle du quota minimum par défaut (minQuotaValue)
  • La date de dernière mise à jour
{
  "status": "ACTIVE",
  "minQuotaValue": 1000,
  "updatedAt": "2025-07-03T09:00:00Z"
}
ℹ️

Si aucun quota spécifique n’est défini pour un fournisseur ou un couple Customer Account × Supplier, la valeur globale par défaut est appliquée.
⚠️ Par défaut, cette valeur est 0 lors de l’initialisation d’un environnement.

✏️ 2. Mise à jour du quota minimum par défaut

ADM-BUYING-POLICY-205 - PATCH /v1/buying-policies/quotas/min-value

Permet de modifier la valeur globale appliquée lorsque qu’aucun quota spécifique n’est configuré pour un fournisseur ou un couple Customer Account × Supplier.

{
  "minQuotaValue": 1500
}
ℹ️

La valeur doit être supérieure ou égale à 0
Un 0 signifie qu’aucune restriction de quota n’est appliquée par défaut

✏️ 3. Activation / désactivation de la policy

ADM-BUYING-POLICY-204 - PATCH /v1/buying-policies/quotas

Permet d’activer ou de désactiver globalement la policy de quotas.

{
  "status": "INACTIVE"
}

Valeurs acceptées pour le status :

  • ACTIVE → contrôle des quotas appliqué à toutes les commandes
  • INACTIVE → quotas ignorés, aucune commande bloquée

👍

UPDATE

Incidents

  • Filtrage par motif d’incident :

    Afin de pouvoir réduire le nombre d’incidents à traiter en front et de faciliter la recherche, un filtre par motif d’incident est ajouté.

    Il fonctionne de la même manière que le filtre customerAccountIds, il s'agit d'une liste d'id de reasons passées en query param sur la route ORDER-559 - GET /v1/shop/incidents

    Le param reasonCodes ajouté prendra en entrée une liste d’ID de reasons et fonctionne via un OU logique entre chaque valeur.

Périmètre

API

👍

UPDATE

Djust PAY

  • Modification des attributs de paiement

    • A la création et la validation d'une commande dans un contexte, il est désormais obligatoire de renseigner les deux champs suivants:

      • paymentOption
      • paymentProvider

      ⚠️

      Attention

      L'objet paymentInfo n'est pas obligatoire, seuls les attributs enfants paymentOption et paymentProvider le sont lorsque celui-ci est utilisé.

      Les routes concernées sont :

      ORDER-100 - POST /v1/shop/commercial-orders
      ORDER-212 - PUT /v1/shop/commercial-orders/{orderCommercialId}/created

Incidents

  • Filtrage par valeur de Custom Fields d’incident :

    Afin de pouvoir réduire le nombre d’incidents à traiter en front et de faciliter la recherche, un filtre par custom field value d’incident est ajouté.

    Le but dans ce cas est de pouvoir rechercher dans les valeurs de CF à l’incident (order line ou order).

    Ainsi on ajoutera le param customFields qui prendra en entrée une liste d’ID de CF croisés avec les valeurs à rechercher.

    Le format attendu est le suivant :

    customFields=CF_ID1|CF_Value1,CF_ID2|CF_Value2…

Périmètre

BackOffice Djust

Améliorations graphiques et optimisations de design :

Dans la continuité de la refonte globale du Back Office de Djust, un redesign des pages suivantes a été apporté afin de simplifier l'expérience utilisateur.

  • Page de creation d'un fournisseur : Suppliers.
  • Page détail d'un utilisateur fournisseur.
  • Page de creation d'un job d'export : Data Hub -> Create a new job -> Export.
  • Page de detail d'un job d'export : Data Hub -> Export -> Configure job.

Filtrage des comptes clients :

Page liste des comptes clients : Customers > Accounts

  • Le champ de filtre "ID compte" utilise maintenant l’ID externe et l’ID interne.

API

📘

NEW


Buying policies

  • Montants de tolerance de crédit

Quatre nouveaux endpoints ont été ajoutés au module Buying Policies, permettant aux utilisateurs opérateurs de consulter et modifier l’état global des montants de tolerance de crédit sur la plateforme.

⚠️

Attention

Ces routes de gestion des buying policies ne sont disponibles que pour les utilisateur BackOffice opérateurs.


  • Consultation des montants de tolérance de crédit :

ADM-BUYING-POLICY-551 - GET /v1/buying-policies/credit-control/grace-amounts

Permet de de récupérer toutes les montants de tolérance de crédit configurées.
Chaque tolérance est définie par :

  • un montant ajouté au crédit disponible,
  • une période d’application (début obligatoire, fin facultative),
  • un ou plusieurs comptes associés.

Exemple de réponse :

{
  "content": [
    {
      "accountId": "string",
      "amount": 0,
      "createdAt": "2025-07-21T11:58:16.925Z",
      "endDate": "2025-07-21T11:58:16.925Z",
      "graceAmountId": "string",
      "startDate": "2025-07-21T11:58:16.925Z",
      "updatedAt": "2025-07-21T11:58:16.925Z"
    }
  ],
 ...

  • Creation des montants de tolérance de crédit:

ADM-BUYING-POLICY-151 - POST /v1/buying-policies/credit-control/grace-amount

Permet de créer un ou plusieurs montants de tolérance qui augmentent temporairement la disponibilité du crédit pour les comptes clients sélectionnés.

Contenu de la requête :

[
  {
    "accountId": "string",
    "amount": 0,
    "endDate": "string",
    "startDate": "string"
  }
]

⚠️ startDate et amount sont obligatoires. endDate est facultatif.

Exemple de réponse :

{
  "singleWarningReportDtos": [
    {
      "detail": "string",
      "id": "string"
    }
  ]
}

  • Mise à jour des montants de tolérance de crédit:

ADM-BUYING-POLICY-203 - PUT /v1/buying-policies/credit-control/grace-amounts/{graceAmountId}

Permet de mettre à jour l’intégralité du contenu de la tolérance existante pour le compte client.
Vous pouvez mettre à jour le montant, la startDate et/ou la endDate.

Contenu de la requête :

{
  "amount": 0,
  "endDate": "2025-06-30T23:59:59Z",
  "startDate": "2025-06-10T00:00:00Z"
}

  • Suppression des montants de tolérance de crédit

ADM-BUYING-POLICY-301 - DELETE /v1/buying-policies/credit-control/grace-amounts/{graceAmountId}

Supprime une seule blocage/tolérance existante en fonction de son identifiant (ID).



Mirakl settings

⚠️

Attention

Ce changement s'applique uniquement aux utilisateurs qui utilisent le connecteur Mirakl.

  • Mise à jour des paramètres du connecteur Mirakl:

Un nouveaux endpoint a été ajouté au module Settings, permettant aux utilisateurs opérateurs qui utilisent le connecteur Mirakl de consulter et modifier l’état global des montants de tolerance de crédit sur la plateforme.

ADM-SETTINGS-200 - PATCH /v1/settings/mirakl}

  • Permet de mettre à jour les paramètres du connecteur Mirakl, tels que les clés API, l’URL de l’hôte ou la zone de livraison.

⚠️ Seuls les champs fournis dans le body de la requête seront mis a jour. Les autres champs resteront inchangés.



👍

UPDATE

Search V2

  • Support des intervalles de valeurs pour les attributs

    • Les attributs peuvent désormais fonctionner en tant qu'intervalles de valeurs. Ainsi toutes les routes d'administration suivantes voient apparaître la nouvelle propriété searchableRange au niveau des attributeSettings

      GET /v1/catalog-views/{id}/products
      GET /v1/classification-categories
      POST /v1/classification-categories
      GET /v1/classification-categories/{classificationCategoryId}
      PATCH /v1/classification-categories/{classificationCategoryId}
      PATCH /v1/classification-categories/{classificationCategoryId}/attribute-settings
      PUT /v1/classification-categories/{classificationCategoryId}/attribute-settings
      GET /v1/classification-categories/{classificationCategoryId}/parent-tree
      PUT /v1/navigation-categories/{navigationCategoryId}/classification-categories
      GET /v1/offer-inventories
      PATCH /v1/offer-inventories
      GET /v1/offer-inventories/{offerInventoryId}
      GET /v1/products
      PATCH /v1/products
      POST /v1/products
      PUT /v1/products/back-office/{productId}
      GET /v1/products/catalog-views/{id}
      GET /v1/products/with-count
      GET /v1/products/{id}
      PUT /v1/products/{productId}
      GET /v1/products/{productId}/related-products
      PUT /v1/products/{productId}/related-products/{relatedProductId}

    • L'ajout d'un nouveau paramètre attributesRange dans l'API PRODUCT-552 permet - grâce à la nouvelle configuration des attributs - désormais de filtrer les produits selon un intervalle de valeurs.
      Par exemple, il est possible de rechercher des produits dont la taille est comprise entre 38 et 42.

    Exemple de query :

    GET/v2/shop/search?locale=en-GB&currency=USD&taille_externalID|min|38&taille_externalID|max|42

Périmètre

BackOffice Djust

Améliorations sur l'affichage et le filtrage des comptes clients :

Page liste des comptes clients : Customers > Accounts

  • L’ID externe du compte client est désormais affiché à côté du nom dans le tableau des comptes clients.
  • Le champ de filtre "ID compte" utilise maintenant l’ID externe au lieu de l’ID interne.

Améliorations graphiques et optimisations de design :

Dans la continuité de la refonte globale du Back Office de Djust, un redesign des pages suivantes a été apporté afin de simplifier l'expérience utilisateur.

  • Page détail des catalogues produits : Catalog > Catalog views.
  • Page détail des paramètres du moteur de recherche : Settings > Search engine settings.

Affichage des champs de mappings disponibles pour l’export des commandes :

La configuration du mapping des jobs d’export est désormais disponible directement dans le Data Hub, via l’interface du Back Office.

Champs disponibles pour le mapping :

  • Order reference
  • Order id
  • Account External Id
  • Supplier External Id
  • Order Creation Date
  • Order Lines :
    • Order Line Id
    • Offer External Id
    • Variant External Id
    • Quantity Per Unit
    • Variant GTIN
    • Order Line Quantity

API

📘

NEW

Orders [DJUST PAY]

  • Nouveau endpoint
    • L'ajout d'un nouveau endpoint POST /v1/logistic-orders/{logisticOrderId}/refunds
    • Initialise un processus de remboursement pour une commande logistique donnée. Le remboursement sera appliqué au(x) paiement(s) associé(s) à cette commande.
  • Ajout d'un nouveau statut de paiement:

Le statut de paiement REFUND_FAILED a été ajouté sur les commandes logistiques ainsi que sur les lignes de commande.

⚠️

Attention

Ce changement concerne exclusivement les utilisateurs du module DJUST-PAY.
Les autres moyens de paiement (PSP) ne sont pas affectés.

Périmètre

API

📘

NEW

Buying Policies

  • Contrôle d’activation de la policy de contrôle d’encours:

Deux nouveaux endpoints ont été ajoutés au module Buying Policies, permettant aux utilisateurs opérateurs de consulter et modifier l’état global de la policy de contrôle d’encours sur la plateforme.

⚠️

Attention

Ces routes de gestion des buying policies ne sont disponibles que pour les utilisateur BackOffice opérateurs.

  • Consultation du statut de la policy d’encours :

ADM-BUYING-POLICY-500 - GET /v1/buying-policies/credit-control

Permet de récupérer l’état d’activation actuel de la policy de contrôle d’encours ainsi que la limite de crédit par défaut.

Exemple de réponse :

{
  "status": "ACTIVE",
  "creditLimit": 10000,
  "updatedAt": "2025-06-06T14:15:22Z"
}

  • Activation / désactivation de la policy d’encours :

ADM-BUYING-POLICY-200 - PATCH /v1/buying-policies/credit-control

Permet d’activer ou de désactiver globalement l’application de la policy (ACTIVE ou INACTIVE).

Contenu de la requête :

{
  "status": "INACTIVE"
}
🗒️

Notes

ℹ️ Lorsque la policy est en statut INACTIVE, les commandes ne sont plus bloquées en cas de dépassement d’encours.
⚠️ Par défaut, la policy est désactivée (INACTIVE) dans les environnements nouvellement initialisés.


  • Définition d’une limite de crédit par défaut:

La policy de contrôle d’encours peut désormais s’appuyer sur une valeur de crédit par défaut, configurable globalement depuis l’API d’administration. Cette valeur s’applique à tous les comptes clients qui n’ont pas de limite de crédit personnalisée définie. Deux endpoints sont disponibles :

  • Consultation de la configuration de la policy d’encours:

Cf. ci-dessus, il s'agit de la même route ADM-BUYING-POLICY-500

ℹ️ Si un account ne dispose pas de limite de crédit spécifique, c’est la valeur par défaut qui est utilisée pour valider les commandes.
Si un account possède un crédit personnalisé (via un champ custom), cette valeur surcharge celle par défaut.

  • Mise à jour de la limite de crédit par défaut:

ADM-BUYING-POLICY-201 - PATCH /v1/buying-policies/credit-control/credit-limit

Permet de modifier la valeur globale appliquée aux comptes sans configuration individuelle.

Contenu de la requête :

{
  "creditLimit": 15000
}

⚠️ La valeur transmise doit être supérieure ou égale à 0.
⚠️ Par défaut, la valeur initiale est 0 lors de la création d’un nouvel environnement.


Accounts

  • Nouvelle structure de configuration des encours via des champs custom des comptes clients:

Les éléments de définition de l’encours sont désormais portés par des Custom Fields associés aux comptes clients (Customer Accounts). Cette évolution permet de rendre la gestion plus flexible, centralisée et pilotable via les APIs d’Account Management (et prochainement le BackOffice Djust).

Nouveau rôle (associé à un CF Account)TypeDescription
Limite de créditNumberMontant maximal autorisé. Si vide, la limite par défaut définie dans la buying policy est appliquée.
EncoursNumberMontant total des commandes non payées. Valeur synchronisée depuis les systèmes de gestion externe.
⚠️

Attention

Contrairement à la logique actuelle, un Custom Field associé à un rôle n’est plus automatiquement requis : la mécanique de validation a été assouplie.

  • Ces champs sont utilisés par la buying policy d’encours lors de la validation des commandes.
  • La logique de validation distingue clairement les valeurs personnalisées (au niveau du compte) et les valeurs par défaut (définies globalement).
  • La valeur du crédit disponible est désormais calculée dynamiquement selon la formule suivante :
🔎

crédit disponible = (limite crédit - encours) + tolérance

  • En cas d’absence de valeur dans les champs "Limite de crédit" ou "Encours", la logique applique :
    • la valeur par défaut (buying policy) pour la limite,
    • un blocage de sécurité si l’encours est inconnu, pour éviter tout risque de dépassement.
  • Les valeurs des champs "Limite de crédit" et "Encours" doivent être synchronisées régulièrement via les jobs de Data Hub.
  • Aucun fetch temps réel depuis les ERP n’est prévu pour cette première version.

Périmètre

BackOffice Djust

Améliorations graphiques et optimisations de design

Dans la continuité de la refonte globale du Back Office de Djust, un redesign des pages suivantes a été apporté afin de simplifier l'expérience utilisateur.

  • Page détail des assortiments produits : Catalog > Assortments.
  • Page détail des organisations : Customers > Organisations.
  • Page de configuration des devises : Settings > Currencies.


API

📘

NEW

Buying Policies

Nouvelle fonctionnalité de gestion des comptes en backoffice permettant de bloquer temporairement ou définitivement un ou plusieurs comptes clients afin d’empêcher toute validation de commande, indépendamment de leur encours ou de leur limite de crédit.

Ainsi, voici les nouveaux endpoints API correspondants :

  • Récupération des blocages en cours ou programmés :

ADM-BUYING-POLICY-550 - GET /v1/buying-policies/credit-control/holds

  • Création de blocages manuels sur un ou plusieurs comptes :

ADM-BUYING-POLICY-150 - POST /v1/buying-policies/credit-control/holds

  • Modification d’un blocage existant, avec règles de cohérence sur les dates :

ADM-BUYING-POLICY-202 - PUT /v1/buying-policies/credit-control/holds/{creditHoldId}

  • Suppression d’un blocage actif ou futur :

ADM-BUYING-POLICY-300 - DELETE /v1/buying-policies/credit-control/holds/{creditHoldId}



👍

UPDATE

Incidents

Filtrage des incidents par supplier :

Chaque commande logistique liée à un incident possède un fournisseur.

Pour pouvoir filtrer par fournisseur, un paramètre supplémentaire de filtre suppliers qui prend en entrée une liste d’external ID de suppliers est ajouté à la route ORDER-559 - GET /v1/shop/incidents.

Son fonctionnement reste similaire au filtre par customerAccountIds.

En résultat, on remonte l’ensemble des incidents liés à une commande/ligne de commande correspondant à au moins un des id de fournisseur passé en paramètre.

Si aucune correspondance n’est trouvée, aucun résultat n’est remonté.


Customer Accounts

Suppression de la contrainte d’unicité sur le nom des comptes clients

Il est désormais possible de créer plusieurs comptes clients portant le même nom, que ce soit via les APIs d'administration, Frontend ou les imports (FTP/API).

  • Les traitements ne s’appuient plus sur le nom pour identifier un compte, mais uniquement sur son identifiant technique (customerAccountId).
  • La recherche par nom retourne tous les comptes correspondants, même en cas d’homonymie.
  • Les processus d’import (FTP ou API) n’échouent plus lorsqu’un doublon de nom est détecté.

Les APIs suivantes ont été mises à jour :

POST /v1/customer-accounts
PUT /v1/customer-accounts/{customerAccountId}

ACCOUNT-100 - POST /v1/shop/customer-accounts
ACCOUNT-201 - PUT /v1/shop/customer-accounts

📌 Aucune action corrective sur les données existantes : les noms précédemment uniques restent valides et modifiables.


Data Hub

Exposition des mappings disponibles à l’export pour les commandes

Il est désormais possible d’interroger par API les mappings utilisables pour l’export des commandes via l’endpoint GET /jobout/mappings?type=ORDER