Picking : vagues, tâches et PICK-STAGE
Libérez des vagues (manuelle ou planifiée), générez des tâches par commande et exécutez pas à pas sur mobile, avec picks partiels, sauts et shorts.
Libération des vagues#
Une vague regroupe les expéditions par merchant × filtre, les découpe par nombre de commandes et les libère en vague ; chaque expédition reçoit ensuite sa tâche de picking. Deux entrées : libération manuelle (wave/manual) et planifiée (scheduler + cron externe). Seules les expéditions commit/draft/ready ; celles verrouillées par une vague inachevée sont exclues.
- Wave Filter : conditions [{field, operator, values[]}], opérateurs in/not_in/eq/ne/gt/lt/gte/lte (wave/filter).
- Dispatch Setting : customer_filters [{merchant_id, filter_id}], max/min par plan, default_pick_method (order/batch/wave/wave_by_item, défaut order), is_active (wave/settings).
- Scheduler : work_days (1=lundi…7=dimanche, défaut 1–5), time_from/time_to, step_minutes, is_active (wave/scheduler).
- Heures limites : par merchant/transporteur, HH:MM (wave/cutoff-time).
- Choisissez un Client (merchant, obligatoire) + 1 ou plusieurs Dispatch Settings → Aperçu : renvoie le nombre par setting et le détail par groupe sans créer la vague.
- Ajustez si besoin min/max_qty_per_batch (Min ≤ Max validé).
- Libérer : crée la vague — wave_no = WV-YYYYMMDD-NNNN, status=released (la vague naît libérée ; pas d’état draft intermédiaire), shipment_ids contient les expéditions.
- Après libération, la page liste les expéditions de la vague : Create Pick Task par expédition (voir ci-dessous).
- Libération planifiée : un cron externe POST /api/wms/wave/scheduler/run toutes les N minutes (avec x-cron-secret). N’exécute que les schedulers dont le jour est dans work_days, l’heure dans time_from~time_to et la dernière exécution ≥ step_minutes.
Générer des tâches de picking#
- Trois entrées : la page de la vague libérée, la sélection groupée dans la liste des commandes → Create Pick Task, ou Create Pick Task dans le détail de la commande.
- pick_method=order : une tâche par commande. Lignes = lignes de commande × emplacements alloués par le système (zone pick d’abord ; les manquants créent des lignes à la quantité allouable, le reste en warnings).
- Planification du parcours : chaque ligne reçoit un seq selon l’ordre de parcours ; le mobile guide emplacement par emplacement.
- Protection anti-doublon : une commande avec une tâche inachevée ayant encore des lignes pending ne peut pas régénérer ; le restant en short peut être régénéré plus tard.
- Après génération, le champ de tâche est réécrit sur la commande avec un lien vers le détail.
Exécution sur mobile#
Une étape = un produit × un emplacement. Chaque étape envoie quatre champs : emplacement source, LPN de palette (emplacements storage uniquement), LPN de destination (le tote cible), quantité.
- Scannez/saisissez l’emplacement source → Entrée : invalide → erreur en haut + saisie sélectionnée ; valide → un emplacement picking saute au to-LPN, un emplacement storage affiche d’abord le LPN de palette.
- Scannez/saisissez le to LPN → validé (doit être un tote assigné à la tâche) → passer à la quantité.
- Saisissez la quantité (chiffres uniquement) → touchez Pick pour envoyer → étape suivante ; en cas d’échec, on reste sur l’étape avec l’erreur.
- Pick partiel : demandé 10, prélevé 5 → enregistre 5 et ajoute automatiquement une étape de 5 en fin de file.
- Next : saute l’étape actuelle ; la file y reviendra plus tard.
- Force close (en haut à droite) : clôt un pick partiel directement ; le système solde sur les quantités réellement prélevées.
- Short : l’emplacement n’a pas de stock ou la marchandise est endommagée → marquer short ; la tâche peut se terminer et le reste être régénéré plus tard.
Totes cibles et PICK-STAGE#
Les totes cibles du picking appartiennent à l’emplacement PICK-STAGE (un par entrepôt, location_type=staging ; créé par le système s’il manque et masqué dans l’UI). Générez-les dans WMS → Pallets avec « Batch generate LPN » : choisissez l’entrepôt (l’actuel par défaut) + nombre N (1–200, défaut 10). Le backend génère LPN-{seq} (préfixe unifié ; les PLT- existants inchangés) avec status=building et source_type=pick. Choisissez ensuite « Generate only » ou « Generate and print ». Note : le picking cart (location_type=cart) est un emplacement mobile ; un tote est un LPN (license_plate unique par tenant) et le picking de totes comptabilise sur le location_id du chariot auquel appartient le tote. PICK-STAGE (staging) est le tampon par entrepôt ; les palettes cibles doivent lui appartenir.
États de la tâche et contrôle#
pending → in_progress (touchez Démarrer, ou automatique au premier pick ; l’expédition passe en picking) → completed (toutes les lignes picked ou short ; l’expédition passe en picked). À l’achèvement, picked_qty est réécrit sur les lignes et une vérification de réapprovisionnement est déclenchée. Contrôle : le détail de la tâche sur bureau affiche tout ce que le mobile a envoyé (emplacement source / LPN de palette / to LPN / quantité / chaque enregistrement) : c’est ici qu’on vérifie le picking ; la vérification d’emballage continue à la station d’expédition (pack-verify).