Fonctionnalité
Les buffers servent à protéger un certain nombre d'unités de stock. Le cas le plus commun d'utilisation est de protéger quelques unités (2-3) du stock sur le stock vendable global, pour ainsi mitiger la désynchronisation entre les ventes en magasin et les ventes en ligne.
Application par type de stock
Les buffers peuvent être appliques de manier globale ou par endpoint, par contre, leur application est toujours ouverte par type de stock. Il n'y a pas une application unifiée qu'englobe plusiers types de stock à la fois.
Example : S'il y a un buffer glob de 2 pour le type de stock on_hand et un autre de 3 pour le type de stock ASN, quand les buffers sont appliques de manier global, leur application corresponde à la sum de l'application globale pour on_hand + l'application global pour l'ASN.
Buffer groups
Tout buffer à un buffer_group
auquel il appartient et que permet lui faire référence depuis une requete de stock.
{ "aggregates": { "0": { "deduction": { "endpoint_buffer": [ "FR", "IT" ], "global_buffer": [ "stores_FR" ] } } } }
Types de Buffers
Il existe deux types de buffers, le buffers endpoint et le buffers global. Le premier seront assigne et déduit a niveau endpoint, le deuxieme seront assigne sans un notion d'endpoint et seront déduit un fois l'endpoints ont été agrégé. Comme resultat, le buffers global sont prise en compte seulement dans le requete de stock avec d'unification par endpoint.
Buffer endpoint
Declaration par couple item, endpoint ID
Les plus simple de buffers, correponde a une nombre de unites bufférisés pour un couple item_id
, endpoint_id.
endpoint_id | item_id | qty | buffer_group |
---|---|---|---|
store_1 | i1 | 2 | FR |
store_1 | i1 | 3 | US |
Declaration avec key requests
Très similaire aux buffers en dur, mais plus flexibles. Ils permettent de indiquer des filtres pour prendre en compte de manier dynamique des endpoints et items.
endpoint_id | item_id | qty | buffer_group |
---|---|---|---|
endpoint_type = store AND address.region.country.code = FR | * | 9 | FR |
endpoint_type = warehouse | * | 12 | WORLD |
Buffer Global
Permet affecter un buffer de manier global, donc sans renseigner de filtrage sur les endpoints affecté. Si un filtre endpoint est declaré il sera ignoré. Permet buffériser une nombre de unites a niveau global.
item_id | qty | buffer_group |
---|---|---|
category = "bebe" | 9 | FR |
* | 12 | WORLD |
Structure d'un buffer
Signature API
Routes BIP - Buffer Inventory Processor
- item_filter: Si nil, s'applique à tous les items
- id (string) : item_id sur le quel le buffer serai appliqué (buffer en dur)
- request_name (string) : Permet appliquer le buffer a un request de items (tous les items avec un certain catégorie). Doit être vide si id est set
- endpoint_filter: Si nil, s'applique à tous les endpoints
- id (string) : endpoint_id sur le quel le buffer serai appliqué (buffer en dur)
- request_name (string) : Permet appliquer le buffer a un request de endpoints (tous endpoints du type store). Doit être vide si id est set
- stock_type (string) : required type de stock sur lequel le buffer est appliqué.
- global (bool) : true dans le cas d'un buffer global, false sinon.
- buffer_group (string) : required buffer group au quel appartient le buffer, permet lui fair référence dans une requete de stock..
- qty (int) : required nombre de unites bufférisés.
Impact des buffers sur le calcul de stock
Prise en compte dans le requêtes de stock
Les buffers globals/endpoints que sont appliques dépende de la configuration des requêtes de stock. Dans la requete de stock on liste les buffers groups - les groups dans lesquels les buffers sont reparties - que doive être prise en compte. S'il y a 3 buffers globales configures pour une même clé de stock, et le but se d'appliquer arbitrairement 1 de ces 3. Il suffit de les repartir dans 3 buffers groups différents, et d'indiquer QUE 1 seul dans la requête de stock.
Calcul
Quand les buffers sont prise en compte dans un requete de stock, le calcul de stock disponible ce fait comme suit :
Sans unification endpoint
Detaille
Avec unification endpoint
Unifie
MIN( SUM (MAX_par_endpoint( RawStock - ResEndpoint - Dispositions - MAX ( BufDur, BufEndpoint ) , 0 ) ) , SUM (RawStock - ResEndpoint - Dispositions ) - BufGlob)
MIN( SUM( MAX_par_endpoint( RawStock - ResEndpoint - Dispositions - MAX(BufDur, BufEndpoint), 0 ) ), SUM(RawStock - ResEndpoint - Dispositions) - BufGlob )