@flowselections/logistiek-engine 1.0.34 → 1.0.89
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-lib/components/AfrondWachtrijCard.d.ts +2 -0
- package/dist-lib/components/AfrondWachtrijCard.d.ts.map +1 -0
- package/dist-lib/components/AfrondWachtrijCard.js +27 -0
- package/dist-lib/components/BeladingsafwijkingenCard.d.ts +2 -0
- package/dist-lib/components/BeladingsafwijkingenCard.d.ts.map +1 -0
- package/dist-lib/components/BeladingsafwijkingenCard.js +44 -0
- package/dist-lib/components/FlowCanvas.d.ts +34 -0
- package/dist-lib/components/FlowCanvas.d.ts.map +1 -0
- package/dist-lib/components/FlowCanvas.js +490 -0
- package/dist-lib/components/FlowOrders.d.ts +8 -0
- package/dist-lib/components/FlowOrders.d.ts.map +1 -0
- package/dist-lib/components/FlowOrders.js +171 -0
- package/dist-lib/components/FlowPage.d.ts +2 -0
- package/dist-lib/components/FlowPage.d.ts.map +1 -0
- package/dist-lib/components/FlowPage.js +310 -0
- package/dist-lib/components/GeblokkeerdeOrdersCard.d.ts.map +1 -1
- package/dist-lib/components/GeblokkeerdeOrdersCard.js +21 -2
- package/dist-lib/components/InklapbaarVenster.d.ts +9 -0
- package/dist-lib/components/InklapbaarVenster.d.ts.map +1 -0
- package/dist-lib/components/InklapbaarVenster.js +10 -0
- package/dist-lib/components/KardekkingCard.d.ts +2 -0
- package/dist-lib/components/KardekkingCard.d.ts.map +1 -0
- package/dist-lib/components/KardekkingCard.js +29 -0
- package/dist-lib/components/LogistiekEnginePage.d.ts.map +1 -1
- package/dist-lib/components/LogistiekEnginePage.js +15 -3
- package/dist-lib/components/LogistiekEngineQueuePage.d.ts +2 -0
- package/dist-lib/components/LogistiekEngineQueuePage.d.ts.map +1 -0
- package/dist-lib/components/LogistiekEngineQueuePage.js +13 -0
- package/dist-lib/components/NodeTracePanel.d.ts +14 -0
- package/dist-lib/components/NodeTracePanel.d.ts.map +1 -0
- package/dist-lib/components/NodeTracePanel.js +46 -0
- package/dist-lib/components/OrderJourneyBar.d.ts +9 -0
- package/dist-lib/components/OrderJourneyBar.d.ts.map +1 -0
- package/dist-lib/components/OrderJourneyBar.js +26 -0
- package/dist-lib/components/OrderLogboek.d.ts +10 -0
- package/dist-lib/components/OrderLogboek.d.ts.map +1 -0
- package/dist-lib/components/OrderLogboek.js +92 -0
- package/dist-lib/components/OrderStopBanner.d.ts +12 -0
- package/dist-lib/components/OrderStopBanner.d.ts.map +1 -0
- package/dist-lib/components/OrderStopBanner.js +36 -0
- package/dist-lib/components/OrderTraceDetails.d.ts +22 -0
- package/dist-lib/components/OrderTraceDetails.d.ts.map +1 -0
- package/dist-lib/components/OrderTraceDetails.js +88 -0
- package/dist-lib/components/PlanWachtrijPage.d.ts +2 -0
- package/dist-lib/components/PlanWachtrijPage.d.ts.map +1 -0
- package/dist-lib/components/PlanWachtrijPage.js +99 -0
- package/dist-lib/components/PlannerDiffCard.d.ts +2 -0
- package/dist-lib/components/PlannerDiffCard.d.ts.map +1 -0
- package/dist-lib/components/PlannerDiffCard.js +25 -0
- package/dist-lib/components/RegiePage.d.ts.map +1 -1
- package/dist-lib/components/RegiePage.js +28 -78
- package/dist-lib/components/TaakGezondheidCard.d.ts +2 -0
- package/dist-lib/components/TaakGezondheidCard.d.ts.map +1 -0
- package/dist-lib/components/TaakGezondheidCard.js +31 -0
- package/dist-lib/components/WerktijdenCard.d.ts +2 -0
- package/dist-lib/components/WerktijdenCard.d.ts.map +1 -0
- package/dist-lib/components/WerktijdenCard.js +37 -0
- package/dist-lib/components/WerkwijzeHerindelingCard.d.ts.map +1 -1
- package/dist-lib/components/WerkwijzeHerindelingCard.js +100 -6
- package/dist-lib/hooks/useAfrondWachtrij.d.ts +28 -0
- package/dist-lib/hooks/useAfrondWachtrij.d.ts.map +1 -0
- package/dist-lib/hooks/useAfrondWachtrij.js +88 -0
- package/dist-lib/hooks/useBeladingsafwijkingen.d.ts +39 -0
- package/dist-lib/hooks/useBeladingsafwijkingen.d.ts.map +1 -0
- package/dist-lib/hooks/useBeladingsafwijkingen.js +119 -0
- package/dist-lib/hooks/useGeblokkeerdeOrders.d.ts +7 -0
- package/dist-lib/hooks/useGeblokkeerdeOrders.d.ts.map +1 -1
- package/dist-lib/hooks/useGeblokkeerdeOrders.js +28 -2
- package/dist-lib/hooks/useLogisticsTrace.d.ts +78 -0
- package/dist-lib/hooks/useLogisticsTrace.d.ts.map +1 -0
- package/dist-lib/hooks/useLogisticsTrace.js +152 -0
- package/dist-lib/hooks/useOrderNodeTrace.d.ts +11 -0
- package/dist-lib/hooks/useOrderNodeTrace.d.ts.map +1 -0
- package/dist-lib/hooks/useOrderNodeTrace.js +26 -0
- package/dist-lib/hooks/useOrderTrace.d.ts +74 -0
- package/dist-lib/hooks/useOrderTrace.d.ts.map +1 -0
- package/dist-lib/hooks/useOrderTrace.js +134 -0
- package/dist-lib/hooks/useOrderVersies.d.ts +47 -0
- package/dist-lib/hooks/useOrderVersies.d.ts.map +1 -0
- package/dist-lib/hooks/useOrderVersies.js +194 -0
- package/dist-lib/hooks/usePlanWachtrij.d.ts +33 -0
- package/dist-lib/hooks/usePlanWachtrij.d.ts.map +1 -0
- package/dist-lib/hooks/usePlanWachtrij.js +104 -0
- package/dist-lib/hooks/useRecalcJob.js +1 -1
- package/dist-lib/hooks/useRuleEngine.d.ts +1 -0
- package/dist-lib/hooks/useRuleEngine.d.ts.map +1 -1
- package/dist-lib/hooks/useRuleEngine.js +1 -0
- package/dist-lib/hooks/useShippingNoteDiagnose.d.ts +20 -0
- package/dist-lib/hooks/useShippingNoteDiagnose.d.ts.map +1 -0
- package/dist-lib/hooks/useShippingNoteDiagnose.js +52 -0
- package/dist-lib/hooks/useShippingNoteStatus.d.ts +29 -0
- package/dist-lib/hooks/useShippingNoteStatus.d.ts.map +1 -0
- package/dist-lib/hooks/useShippingNoteStatus.js +107 -0
- package/dist-lib/hooks/useTaakGezondheid.d.ts +16 -0
- package/dist-lib/hooks/useTaakGezondheid.d.ts.map +1 -0
- package/dist-lib/hooks/useTaakGezondheid.js +43 -0
- package/dist-lib/hooks/useWerktijden.d.ts +33 -0
- package/dist-lib/hooks/useWerktijden.d.ts.map +1 -0
- package/dist-lib/hooks/useWerktijden.js +88 -0
- package/dist-lib/hooks/useWerkwijzeStatus.d.ts +12 -1
- package/dist-lib/hooks/useWerkwijzeStatus.d.ts.map +1 -1
- package/dist-lib/hooks/useWerkwijzeStatus.js +61 -5
- package/dist-lib/index.d.ts +23 -0
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +23 -0
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +4993 -459
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.d.ts +4993 -459
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.js +1 -1
- package/dist-lib/integrations/supabase/moduleClient.d.ts +4993 -459
- package/dist-lib/integrations/supabase/moduleClient.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/previewAuthStorage.d.ts +1 -1
- package/dist-lib/integrations/supabase/previewAuthStorage.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/previewAuthStorage.js +8 -1
- package/dist-lib/integrations/supabase/types.d.ts +5022 -432
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/attachAuthToken.js +1 -1
- package/dist-lib/lib/bufferDecision.test.d.ts +2 -0
- package/dist-lib/lib/bufferDecision.test.d.ts.map +1 -0
- package/dist-lib/lib/bufferDecision.test.js +104 -0
- package/dist-lib/lib/cartCoverage.functions.d.ts +30820 -0
- package/dist-lib/lib/cartCoverage.functions.d.ts.map +1 -0
- package/dist-lib/lib/cartCoverage.functions.js +20 -0
- package/dist-lib/lib/cartPlanRequests.server.d.ts +1 -1
- package/dist-lib/lib/cartPlanRequests.server.d.ts.map +1 -1
- package/dist-lib/lib/cartPlanRequests.server.js +49 -8
- package/dist-lib/lib/floridayDocuments.functions.d.ts +13623 -21
- package/dist-lib/lib/floridayDocuments.functions.d.ts.map +1 -1
- package/dist-lib/lib/floridayDocuments.functions.js +5 -5
- package/dist-lib/lib/floridayDocuments.server.d.ts +14 -0
- package/dist-lib/lib/floridayDocuments.server.d.ts.map +1 -1
- package/dist-lib/lib/floridayDocuments.server.js +58 -0
- package/dist-lib/lib/floridayGuard.server.d.ts +1 -1
- package/dist-lib/lib/floridayGuard.server.d.ts.map +1 -1
- package/dist-lib/lib/floridayGuard.server.js +6 -3
- package/dist-lib/lib/floridayPush.functions.d.ts +4993 -459
- package/dist-lib/lib/floridayPush.functions.d.ts.map +1 -1
- package/dist-lib/lib/floridayPush.functions.js +3 -3
- package/dist-lib/lib/flowGraph.d.ts +43 -0
- package/dist-lib/lib/flowGraph.d.ts.map +1 -0
- package/dist-lib/lib/flowGraph.js +153 -0
- package/dist-lib/lib/flowJourney.d.ts +40 -0
- package/dist-lib/lib/flowJourney.d.ts.map +1 -0
- package/dist-lib/lib/flowJourney.js +156 -0
- package/dist-lib/lib/flowNodes.d.ts +26 -0
- package/dist-lib/lib/flowNodes.d.ts.map +1 -0
- package/dist-lib/lib/flowNodes.js +64 -0
- package/dist-lib/lib/flowRoute.d.ts +117 -0
- package/dist-lib/lib/flowRoute.d.ts.map +1 -0
- package/dist-lib/lib/flowRoute.js +583 -0
- package/dist-lib/lib/flowTree.d.ts +149 -0
- package/dist-lib/lib/flowTree.d.ts.map +1 -0
- package/dist-lib/lib/flowTree.js +908 -0
- package/dist-lib/lib/foutTekst.d.ts +4 -0
- package/dist-lib/lib/foutTekst.d.ts.map +1 -0
- package/dist-lib/lib/foutTekst.js +43 -0
- package/dist-lib/lib/handlers/index.d.ts +1 -0
- package/dist-lib/lib/handlers/index.d.ts.map +1 -1
- package/dist-lib/lib/handlers/index.js +1 -0
- package/dist-lib/lib/handlers/logistics-shipping-note-now.server.d.ts +3 -0
- package/dist-lib/lib/handlers/logistics-shipping-note-now.server.d.ts.map +1 -0
- package/dist-lib/lib/handlers/logistics-shipping-note-now.server.js +100 -0
- package/dist-lib/lib/handlers/logistics-tick.server.d.ts +2 -0
- package/dist-lib/lib/handlers/logistics-tick.server.d.ts.map +1 -1
- package/dist-lib/lib/handlers/logistics-tick.server.js +153 -2
- package/dist-lib/lib/handlers/logistics-tick.test.d.ts +2 -0
- package/dist-lib/lib/handlers/logistics-tick.test.d.ts.map +1 -0
- package/dist-lib/lib/handlers/logistics-tick.test.js +63 -0
- package/dist-lib/lib/loadCarrierPlanner.d.ts +2 -0
- package/dist-lib/lib/loadCarrierPlanner.d.ts.map +1 -1
- package/dist-lib/lib/loadCarrierPlanner.js +18 -0
- package/dist-lib/lib/loadCarrierPlanning.functions.d.ts +22705 -35
- package/dist-lib/lib/loadCarrierPlanning.functions.d.ts.map +1 -1
- package/dist-lib/lib/loadCarrierPlanning.functions.js +7 -7
- package/dist-lib/lib/loadCarrierPlanning.server.d.ts +33 -12
- package/dist-lib/lib/loadCarrierPlanning.server.d.ts.map +1 -1
- package/dist-lib/lib/loadCarrierPlanning.server.js +534 -228
- package/dist-lib/lib/logisticsPlanner.d.ts.map +1 -1
- package/dist-lib/lib/logisticsPlanner.js +14 -2
- package/dist-lib/lib/logisticsRecalcJob.functions.d.ts +9082 -14
- package/dist-lib/lib/logisticsRecalcJob.functions.d.ts.map +1 -1
- package/dist-lib/lib/logisticsRecalcJob.functions.js +4 -4
- package/dist-lib/lib/logisticsRecalcJob.server.d.ts.map +1 -1
- package/dist-lib/lib/logisticsRecalcJob.server.js +17 -2
- package/dist-lib/lib/logisticsRecalculate.functions.d.ts +4993 -459
- package/dist-lib/lib/logisticsRecalculate.functions.d.ts.map +1 -1
- package/dist-lib/lib/logisticsRecalculate.functions.js +2 -2
- package/dist-lib/lib/modulePrompts.d.ts.map +1 -1
- package/dist-lib/lib/modulePrompts.js +893 -0
- package/dist-lib/lib/nodeTrace.d.ts +65 -0
- package/dist-lib/lib/nodeTrace.d.ts.map +1 -0
- package/dist-lib/lib/nodeTrace.js +182 -0
- package/dist-lib/lib/pickQueueCleanup.server.d.ts +14 -0
- package/dist-lib/lib/pickQueueCleanup.server.d.ts.map +1 -0
- package/dist-lib/lib/pickQueueCleanup.server.js +80 -0
- package/dist-lib/lib/planQueue.server.d.ts.map +1 -1
- package/dist-lib/lib/planQueue.server.js +164 -3
- package/dist-lib/lib/plannerDiff.d.ts +37 -0
- package/dist-lib/lib/plannerDiff.d.ts.map +1 -0
- package/dist-lib/lib/plannerDiff.functions.d.ts +30821 -0
- package/dist-lib/lib/plannerDiff.functions.d.ts.map +1 -0
- package/dist-lib/lib/plannerDiff.functions.js +21 -0
- package/dist-lib/lib/plannerDiff.js +74 -0
- package/dist-lib/lib/plannerDiff.server.d.ts +5 -0
- package/dist-lib/lib/plannerDiff.server.d.ts.map +1 -0
- package/dist-lib/lib/plannerDiff.server.js +60 -0
- package/dist-lib/lib/plannerDiff.test.d.ts +2 -0
- package/dist-lib/lib/plannerDiff.test.d.ts.map +1 -0
- package/dist-lib/lib/plannerDiff.test.js +41 -0
- package/dist-lib/lib/resolveBuffer.test.d.ts +2 -0
- package/dist-lib/lib/resolveBuffer.test.d.ts.map +1 -0
- package/dist-lib/lib/resolveBuffer.test.js +38 -0
- package/dist-lib/lib/ruleEngineImpact.d.ts.map +1 -1
- package/dist-lib/lib/ruleEngineImpact.js +11 -4
- package/dist-lib/lib/ruleEngineSchema.d.ts.map +1 -1
- package/dist-lib/lib/ruleEngineSchema.js +102 -6
- package/dist-lib/lib/ruleEngineWizard.d.ts.map +1 -1
- package/dist-lib/lib/ruleEngineWizard.js +3 -1
- package/dist-lib/lib/shippingNoteQueue.server.d.ts +18 -0
- package/dist-lib/lib/shippingNoteQueue.server.d.ts.map +1 -0
- package/dist-lib/lib/shippingNoteQueue.server.js +304 -0
- package/dist-lib/lib/stopReden.d.ts +43 -0
- package/dist-lib/lib/stopReden.d.ts.map +1 -0
- package/dist-lib/lib/stopReden.js +197 -0
- package/dist-lib/lib/taskCounts.d.ts +2 -0
- package/dist-lib/lib/taskCounts.d.ts.map +1 -0
- package/dist-lib/lib/taskCounts.js +15 -0
- package/dist-lib/lib/taskCounts.test.d.ts +2 -0
- package/dist-lib/lib/taskCounts.test.d.ts.map +1 -0
- package/dist-lib/lib/taskCounts.test.js +12 -0
- package/dist-lib/lib/trace.server.d.ts +75 -0
- package/dist-lib/lib/trace.server.d.ts.map +1 -0
- package/dist-lib/lib/trace.server.js +78 -0
- package/dist-lib/lib/vakUitleg.d.ts +19 -0
- package/dist-lib/lib/vakUitleg.d.ts.map +1 -0
- package/dist-lib/lib/vakUitleg.js +133 -0
- package/package.json +158 -131
- package/dist-lib/components/rule-engine/FloridayConnectionBanner.d.ts +0 -2
- package/dist-lib/components/rule-engine/FloridayConnectionBanner.d.ts.map +0 -1
- package/dist-lib/components/rule-engine/FloridayConnectionBanner.js +0 -41
- package/dist-lib/integrations/supabase/client.d.ts +0 -20293
- package/dist-lib/integrations/supabase/client.d.ts.map +0 -1
- package/dist-lib/integrations/supabase/client.js +0 -13
|
@@ -709,6 +709,76 @@ CONTROLELIJST
|
|
|
709
709
|
[ ] Bij "indelen op afmetingen" verschijnt de tekening met de posities van de Engine.
|
|
710
710
|
[ ] Omschakelen van methode is na verversen direct zichtbaar.
|
|
711
711
|
[ ] Bij een fout in de RPC blijft het blok verborgen, zonder foutmelding in beeld.`,
|
|
712
|
+
},
|
|
713
|
+
{
|
|
714
|
+
number: 17,
|
|
715
|
+
title: "Achterstand apart tellen in Verkooporders",
|
|
716
|
+
date: "2026-09-29",
|
|
717
|
+
summary: "Orders met status 'Nog te picken' en een verstreken leverdatum apart tonen als 'Te picken (achterstand)', op basis van de Engine-functie.",
|
|
718
|
+
body: `AANVULLING op de eerdere prompts (die blijven geldig).
|
|
719
|
+
|
|
720
|
+
AANLEIDING
|
|
721
|
+
De Verkooporders-pagina telt alle orders met status "Nog te picken" als "Te picken".
|
|
722
|
+
Het pickstation toont alleen orders met een leverdatum van vandaag of later. Orders
|
|
723
|
+
met een verstreken leverdatum stonden daardoor wel in Verkoop, maar nergens in het
|
|
724
|
+
pickstation. De Engine heeft nu een aparte categorie "Achterstand".
|
|
725
|
+
|
|
726
|
+
NIEUWE VERPLICHTING
|
|
727
|
+
1. Lees per order het achterstandkenmerk uit de Engine, nooit zelf berekenen:
|
|
728
|
+
const { data } = await supabase.rpc("logistics_order_backlog_info", { p_order_id: orderId });
|
|
729
|
+
data is null -> geen achterstand
|
|
730
|
+
data = { achterstand: true, leverdatum, dagen } -> achterstand
|
|
731
|
+
2. Toon orders met achterstand apart: "Te picken (achterstand)", met het aantal
|
|
732
|
+
dagen. Tel ze niet mee in het gewone "Te picken".
|
|
733
|
+
3. De orderstatus NIET wijzigen. "Nog te picken" blijft de status.
|
|
734
|
+
4. Fail-closed: geeft de functie een fout, toon de order onder "Te picken" met de
|
|
735
|
+
melding "achterstand onbekend" en schrijf niets.
|
|
736
|
+
|
|
737
|
+
CONTROLE
|
|
738
|
+
[ ] Een order met status "Nog te picken" en leverdatum gisteren staat onder
|
|
739
|
+
"Te picken (achterstand)".
|
|
740
|
+
[ ] De orderstatus is ongewijzigd.
|
|
741
|
+
[ ] Geen omgevingswaarden in code of migraties.`,
|
|
742
|
+
},
|
|
743
|
+
{
|
|
744
|
+
number: 16,
|
|
745
|
+
title: "Buffer alleen lezen; ordergegevens uit de Engine",
|
|
746
|
+
date: "2026-09-25",
|
|
747
|
+
summary: "Verkoop stelt de bufferpayload niet meer zelf samen en schrijft nooit meer order_buffers of orders.buffer_id; de Engine is de enige schrijver.",
|
|
748
|
+
body: `AANVULLING op prompt 3, 4, 10 en 15 (die blijven geldig, behalve waar hieronder iets vervalt).
|
|
749
|
+
|
|
750
|
+
AANLEIDING
|
|
751
|
+
buildDecisionOrderInput stelt zelf de payload voor logistics_buffer_decision samen,
|
|
752
|
+
zonder floridaySalesOrderRef. De Engine ziet Floriday-orders daardoor als handmatige
|
|
753
|
+
orders en geeft een andere buffersleutel. applyBufferDecisionForOrder schrijft die
|
|
754
|
+
afwijkende buffer daarna weg (order_buffers, orders.buffer_id, cart_replan_queue,
|
|
755
|
+
lege buffers wissen). Gevolg: elke 5 minuten werden alle karren van Floriday-orders
|
|
756
|
+
gewist en opnieuw opgebouwd. De Engine zet zulke schrijfacties inmiddels terug en
|
|
757
|
+
logt ze als "externe_bufferwijziging_teruggezet".
|
|
758
|
+
|
|
759
|
+
HAAL WEG
|
|
760
|
+
- buildDecisionOrderInput en elke eigen samenstelling van de bufferpayload.
|
|
761
|
+
- Elke schrijfactie op order_buffers (aanmaken, bijwerken, lege buffers wissen).
|
|
762
|
+
- Elke schrijfactie op orders.buffer_id.
|
|
763
|
+
- Het wegschrijven naar cart_replan_queue vanuit het bufferbesluit.
|
|
764
|
+
|
|
765
|
+
NIEUWE VERPLICHTING
|
|
766
|
+
1. Heb je het bufferbesluit nodig, haal de payload dan uit de Engine:
|
|
767
|
+
const { data: payload } = await supabaseAdmin.rpc("logistics_buffer_payload", { p_order_id: orderId });
|
|
768
|
+
const { data: besluit } = await supabaseAdmin.rpc("logistics_buffer_decision", { p_order: payload, p_strategy_id: null });
|
|
769
|
+
Geef payload ongewijzigd door: niets toevoegen, niets weglaten.
|
|
770
|
+
2. De buffer van een order lees je altijd uit orders.buffer_id. Die zet de Engine.
|
|
771
|
+
Is die leeg, dan is de order los. Maak nooit zelf een buffer aan.
|
|
772
|
+
3. notifyEngineOrder, order-buffers.functions.ts en logistics-engine.functions.ts
|
|
773
|
+
roepen applyBufferDecisionForOrder niet meer aan; alleen het event melden.
|
|
774
|
+
4. Fail-closed: geeft logistics_buffer_payload een fout of niets terug, toon
|
|
775
|
+
"bufferbesluit niet beschikbaar" en schrijf niets.
|
|
776
|
+
|
|
777
|
+
CONTROLE
|
|
778
|
+
[ ] Floriday-orders met dezelfde koper, afleverlocatie en leverdatum blijven 10
|
|
779
|
+
minuten lang in dezelfde buffer; geen nieuwe karren.
|
|
780
|
+
[ ] In het Orderlogboek verschijnen geen nieuwe regels "externe_bufferwijziging_teruggezet".
|
|
781
|
+
[ ] Geen omgevingswaarden in code of migraties.`,
|
|
712
782
|
},
|
|
713
783
|
{
|
|
714
784
|
number: 15,
|
|
@@ -2449,6 +2519,731 @@ CONTROLELIJST
|
|
|
2449
2519
|
[ ] De losgekoppelde order heeft een eigen regel en eigen pakbonnen.
|
|
2450
2520
|
[ ] Al geprinte karren houden hetzelfde nummer en dezelfde barcode.`,
|
|
2451
2521
|
},
|
|
2522
|
+
{
|
|
2523
|
+
number: 22,
|
|
2524
|
+
title: "Eén printregel per kar/order: verzendbrief gaat mee met de pakbon",
|
|
2525
|
+
date: "2026-09-07",
|
|
2526
|
+
summary: "Geen aparte regel meer voor de verzendbrief; één klik print pakbon én verzendbrief naar hetzelfde pickstation.",
|
|
2527
|
+
body: `AANVULLING op prompt 17 t/m 21 (die blijven geldig).
|
|
2528
|
+
|
|
2529
|
+
WAT ER VERANDERT
|
|
2530
|
+
Staat de verzendbrief op hetzelfde pickstation als de pakbon, of is gekozen
|
|
2531
|
+
voor "Als de pakbon wordt uitgeprint", dan hoort er nog maar één regel in het
|
|
2532
|
+
printoverzicht te staan: de pakbonregel van de kar of order.
|
|
2533
|
+
|
|
2534
|
+
WAT JIJ BOUWT
|
|
2535
|
+
1. Toon per kar/order precies één regel, volgens de groepering (kar of order)
|
|
2536
|
+
die de Engine in de wachtrij zet. Maak zelf nooit een tweede regel voor de
|
|
2537
|
+
verzendbrief; de Engine weigert die regels ook in public.pick_queue.
|
|
2538
|
+
2. Eén printactie: roep alleen pick_complete_print(...) aan zoals nu. De Engine
|
|
2539
|
+
maakt daarbij zelf de tweede printopdracht voor de verzendbrief aan, op
|
|
2540
|
+
dezelfde printplek.
|
|
2541
|
+
3. Wil je zien of de verzendbrief meegaat, vraag dan
|
|
2542
|
+
public.logistics_shipping_note_follows_slip(). Gebruik dat alleen om het te
|
|
2543
|
+
tonen ("pakbon + verzendbrief"), niet om zelf te printen.
|
|
2544
|
+
4. Volg de status van beide printopdrachten via print_jobs; de verzendbriefjob
|
|
2545
|
+
verwijst in payload.packing_slip_job_id naar de pakbonjob.
|
|
2546
|
+
|
|
2547
|
+
WAT JE NIET DOET
|
|
2548
|
+
- Zelf een verzendbrief-printjob aanmaken of een eigen layout kiezen.
|
|
2549
|
+
- Twee regels tonen wanneer de functie hierboven true geeft.
|
|
2550
|
+
- Geen URL's, sleutels, project-refs, printernamen of vaste id's in code.
|
|
2551
|
+
|
|
2552
|
+
CONTROLELIJST
|
|
2553
|
+
[ ] Per kar/order staat er één regel in het printoverzicht.
|
|
2554
|
+
[ ] Eén klik levert zowel de pakbon als de verzendbrief op dezelfde printer.
|
|
2555
|
+
[ ] Bij een aparte verzendbrief-instelling (na scannen of handmatig) blijft de
|
|
2556
|
+
oude werkwijze met een eigen regel bestaan.`,
|
|
2557
|
+
},
|
|
2558
|
+
{
|
|
2559
|
+
number: 23,
|
|
2560
|
+
title: "Karaantallen uit het karplan tonen in de kolom Karren",
|
|
2561
|
+
date: "2026-09-07",
|
|
2562
|
+
summary: "De Engine levert pickMode, totalCarts, fullCarts en partialCarts per eenheid; het scherm rekent niets zelf uit.",
|
|
2563
|
+
body: `AANVULLING op prompt 17 t/m 22 (die blijven geldig).
|
|
2564
|
+
|
|
2565
|
+
WAT DE ENGINE MEELEVERT
|
|
2566
|
+
In de payload van elke eenheid in public.pick_queue staan nu:
|
|
2567
|
+
- pickMode de gekozen pickwijze (o.a. "smallest")
|
|
2568
|
+
- totalCarts totaal aantal karren voor deze eenheid (heel getal)
|
|
2569
|
+
- fullCarts aantal volle karren
|
|
2570
|
+
- partialCarts aantal deelkarren (0 of meer)
|
|
2571
|
+
- crates aantal fusten (alleen nog als laatste terugval)
|
|
2572
|
+
- cartPlanReady / cartPlanReleased / cartPlanReason
|
|
2573
|
+
Bij een buffer gelden deze getallen voor de buffer als geheel, passend bij
|
|
2574
|
+
unit_ref.
|
|
2575
|
+
|
|
2576
|
+
WAT JIJ BOUWT
|
|
2577
|
+
1. Kolom "Karren": bij pickMode = smallest toon je fullCarts, met "+D" erachter
|
|
2578
|
+
wanneer partialCarts > 0 (bijv. 10+D). Bij elke andere pickwijze toon je
|
|
2579
|
+
totalCarts.
|
|
2580
|
+
2. Ontbreken de karaantallen of is cartPlanReady = false, dan toon je het
|
|
2581
|
+
fustaantal of een streepje plus cartPlanReason. Verzin nooit zelf een
|
|
2582
|
+
karaantal en tel nooit zelf fusten om tot karren te komen.
|
|
2583
|
+
3. De getallen komen uit hetzelfde plan als public.logistics_cart_plan_status(ref)
|
|
2584
|
+
(ready = true, released = true). Wil je verifiëren, gebruik dan die functie —
|
|
2585
|
+
niet je eigen telling.
|
|
2586
|
+
4. Na "buffer.closed" en "buffer.order_detached" lees je de eenheden opnieuw:
|
|
2587
|
+
de Engine zet de karaantallen dan opnieuw klaar, ook voor een losgekoppelde
|
|
2588
|
+
order die weer een eigen regel krijgt.
|
|
2589
|
+
|
|
2590
|
+
WAT JE NIET DOET
|
|
2591
|
+
- Karren afleiden uit fusten, lagen of gewicht.
|
|
2592
|
+
- Karaantallen bewaren over een herplanning heen.
|
|
2593
|
+
- Geen URL's, sleutels, project-refs, klantnamen of vaste id's in code.
|
|
2594
|
+
|
|
2595
|
+
CONTROLELIJST
|
|
2596
|
+
[ ] De kolom "Karren" toont een karaantal, geen fustaantal.
|
|
2597
|
+
[ ] Bij "kleinste telt" verschijnt "+D" zodra er een deelkar is.
|
|
2598
|
+
[ ] Zonder karplan staat de letterlijke reden op het scherm.`,
|
|
2599
|
+
},
|
|
2600
|
+
{
|
|
2601
|
+
number: 24,
|
|
2602
|
+
title: "Bij picken per kar toont het scherm karren, geen orders",
|
|
2603
|
+
date: "2026-09-07",
|
|
2604
|
+
summary: "Elke vrijgegeven kar is een eigen regel; volle karren komen eerst, deelkarren pas na het aanmeldmoment.",
|
|
2605
|
+
body: `AANVULLING op prompt 17 t/m 23 (die blijven geldig).
|
|
2606
|
+
|
|
2607
|
+
WAT ER VERANDERT
|
|
2608
|
+
Staat de pickwijze op "Picken per kar", dan levert de Engine in
|
|
2609
|
+
public.pick_queue één regel PER KAR in plaats van één regel per order of buffer.
|
|
2610
|
+
De regel heeft reference = het kar-id en in payload:
|
|
2611
|
+
- cartRowFor het leidende ordernummer van de eenheid
|
|
2612
|
+
- cartId, cartSeq, cartIndex, cartTotal, cartLabel ("Kar 2 van 5")
|
|
2613
|
+
- isFullCart volle kar (true) of deelkar (false)
|
|
2614
|
+
- barcode de vaste pakbonbarcode van deze kar
|
|
2615
|
+
- pickMode "cart"
|
|
2616
|
+
|
|
2617
|
+
VRIJGAVE
|
|
2618
|
+
- Volle karren verschijnen zodra het pickvenster van de order begint.
|
|
2619
|
+
- Deelkarren verschijnen pas na het aanmeldmoment, zodat de Engine ze eerst
|
|
2620
|
+
binnen de buffer kan samenvoegen tot volle karren. Is dat ingesteld op
|
|
2621
|
+
"ook vóór het aanmeldmoment", dan komen ze direct mee.
|
|
2622
|
+
- public.logistics_cart_released(cart_id) en
|
|
2623
|
+
public.logistics_cart_release_reason(cart_id) geven het antwoord en de
|
|
2624
|
+
letterlijke reden. Toon die reden; verzin er geen eigen tekst bij.
|
|
2625
|
+
|
|
2626
|
+
WAT JIJ BOUWT
|
|
2627
|
+
1. Toon de regels zoals ze binnenkomen: één regel per kar, gesorteerd op
|
|
2628
|
+
cartSeq. Groepeer niet zelf terug naar orders.
|
|
2629
|
+
2. Printen doe je op de karregel; dat print precies die ene kar (pakbon en,
|
|
2630
|
+
indien ingesteld, de verzendbrief mee).
|
|
2631
|
+
3. Al geprinte of afgemelde karregels blijven staan; die worden nooit
|
|
2632
|
+
samengevoegd of hernummerd.
|
|
2633
|
+
4. Bij andere pickwijzen blijft alles zoals in prompt 17 t/m 23.
|
|
2634
|
+
|
|
2635
|
+
WAT JE NIET DOET
|
|
2636
|
+
- Karren zelf berekenen, nummeren of samenvoegen.
|
|
2637
|
+
- Een orderregel tonen naast de karregels van dezelfde eenheid.
|
|
2638
|
+
- Geen URL's, sleutels, project-refs, klantnamen of vaste id's in code.
|
|
2639
|
+
|
|
2640
|
+
CONTROLELIJST
|
|
2641
|
+
[ ] Bij "Picken per kar" staan er karregels, geen orderregels.
|
|
2642
|
+
[ ] Een order met 4 volle karren en 1 deelkar toont eerst 4 regels.
|
|
2643
|
+
[ ] De deelkar verschijnt pas na het aanmeldmoment.
|
|
2644
|
+
[ ] Printen op een karregel levert precies één kar.`,
|
|
2645
|
+
},
|
|
2646
|
+
{
|
|
2647
|
+
number: 25,
|
|
2648
|
+
title: "Na een volledige herindeling alle oude pakbongegevens weggooien",
|
|
2649
|
+
date: "2026-09-07",
|
|
2650
|
+
summary: "Vervallen karregels, barcodes en pakbonnen niet meer tonen of scannen; alleen de actuele Engine-gegevens gebruiken.",
|
|
2651
|
+
body: `AANVULLING op prompt 17 t/m 24 (die blijven geldig).
|
|
2652
|
+
|
|
2653
|
+
WAT ER VERANDERT
|
|
2654
|
+
In de Logistiek Engine bestaat een uitdrukkelijke noodknop "Alle orders opnieuw
|
|
2655
|
+
indelen, ook gepickte orders". Daarna zijn ALLE eerdere karren, karnummers,
|
|
2656
|
+
pakbonnen en barcodes van openstaande orders vervallen, ook die al geprint of
|
|
2657
|
+
gepickt waren. De Engine maakt nieuwe karren met nieuwe barcodes.
|
|
2658
|
+
|
|
2659
|
+
HOE JE DAT HERKENT
|
|
2660
|
+
- De oude regel in public.pick_queue heeft cancelled_at gevuld en in payload
|
|
2661
|
+
vervallenReden = "volledige_herindeling".
|
|
2662
|
+
- De bijbehorende printopdrachten staan op status geannuleerd.
|
|
2663
|
+
- public.logistics_cart_plan_status(<ref>) levert de nieuwe karren met nieuwe
|
|
2664
|
+
cartId's en nieuwe barcodes.
|
|
2665
|
+
|
|
2666
|
+
WAT JIJ BOUWT
|
|
2667
|
+
1. Toon nooit een pickregel met een cancelled_at; verwijder hem direct uit het
|
|
2668
|
+
scherm en uit je eigen tussenopslag (cache/state), ook als hij al geprint was.
|
|
2669
|
+
2. Gooi na iedere verversing je lokaal bewaarde barcodes, karnummers en
|
|
2670
|
+
pakbongegevens weg en gebruik uitsluitend wat de Engine nu teruggeeft.
|
|
2671
|
+
3. Scan je een oude barcode die niet meer bestaat, toon dan de letterlijke
|
|
2672
|
+
reden van de Engine ("deze pakbon is vervallen; print de nieuwe pakbon").
|
|
2673
|
+
4. Blijft een regel "nog niet printklaar", toon dan de reason van
|
|
2674
|
+
logistics_cart_plan_status en stuur het bestaande seintje cartplan.missing.
|
|
2675
|
+
|
|
2676
|
+
WAT JE NIET DOET
|
|
2677
|
+
- Een vervallen pakbon opnieuw printen of scannen.
|
|
2678
|
+
- Zelf karren, nummers of barcodes bewaren tussen twee verversingen.
|
|
2679
|
+
- Geen URL's, sleutels, project-refs, klantnamen of vaste id's in code.
|
|
2680
|
+
|
|
2681
|
+
CONTROLELIJST
|
|
2682
|
+
[ ] Na een volledige herindeling verdwijnen alle oude regels uit het scherm.
|
|
2683
|
+
[ ] Er staan uitsluitend nieuwe karregels met nieuwe barcodes.
|
|
2684
|
+
[ ] Een oude barcode scannen geeft een duidelijke, leesbare melding.`,
|
|
2685
|
+
},
|
|
2686
|
+
{
|
|
2687
|
+
number: 26,
|
|
2688
|
+
title: "Printregels altijd per kar, nooit meer per order",
|
|
2689
|
+
date: "2026-09-08",
|
|
2690
|
+
summary: "Geen eigen printopdrachten op orderniveau; toon de karregels van de Engine met karnummer en barcode.",
|
|
2691
|
+
body: `AANVULLING op prompt 17 t/m 25 (die blijven geldig).
|
|
2692
|
+
|
|
2693
|
+
WAT ER VERANDERT
|
|
2694
|
+
Een pakbon hoort in de database vanaf nu bij precies EEN kar. Een
|
|
2695
|
+
printopdracht van het type pakbon zonder cart_id in de payload wordt door de
|
|
2696
|
+
database geweigerd met een leesbare melding. Bestaande pakbonopdrachten zonder
|
|
2697
|
+
kar zijn geannuleerd met de reden dat ze bij een order hoorden in plaats van
|
|
2698
|
+
bij een kar; die veroorzaakten de eeuwige melding "nog niet printklaar".
|
|
2699
|
+
|
|
2700
|
+
WAT JIJ BOUWT
|
|
2701
|
+
1. Maak nooit zelf een printopdracht voor een hele order aan. Vraag per kar
|
|
2702
|
+
een pakbon aan via public.pick_enqueue_print_job met de karregel uit
|
|
2703
|
+
public.pick_queue (reference = cart_id).
|
|
2704
|
+
2. Toon per kar EEN regel met karnummer, "Kar X van Y", de barcode en of het
|
|
2705
|
+
een volle of deelkar is. Die velden komen uit
|
|
2706
|
+
public.logistics_cart_plan_status(<ref>); reken zelf niets uit.
|
|
2707
|
+
3. Toon geen printopdrachten met status geannuleerd en geen pakbonopdracht
|
|
2708
|
+
zonder cart_id; die zijn vervallen.
|
|
2709
|
+
4. Verdwijnt de knop "Pakbon ophalen" niet, kijk dan naar ready uit
|
|
2710
|
+
logistics_cart_plan_status: staat die op true, dan is er niets op te halen
|
|
2711
|
+
en hoort de knop weg te zijn.
|
|
2712
|
+
|
|
2713
|
+
WAT JE NIET DOET
|
|
2714
|
+
- Een pakbon aanvragen zonder kar; die wordt geweigerd.
|
|
2715
|
+
- Meerdere karren samenvatten in een regel.
|
|
2716
|
+
- Geen URL's, sleutels, project-refs, klantnamen of vaste id's in code.
|
|
2717
|
+
|
|
2718
|
+
CONTROLELIJST
|
|
2719
|
+
[ ] Een order met twee karren toont twee pakbonregels met eigen barcodes.
|
|
2720
|
+
[ ] Er staat geen enkele actieve pakbonregel zonder kar meer in het scherm.
|
|
2721
|
+
[ ] De melding "nog niet printklaar" verdwijnt zodra de Engine ready meldt.`,
|
|
2722
|
+
},
|
|
2723
|
+
{
|
|
2724
|
+
number: 27,
|
|
2725
|
+
title: "Karaantal en barcode altijd van de karregel lezen",
|
|
2726
|
+
date: "2026-09-08",
|
|
2727
|
+
summary: "Een karregel toont altijd één kar en gebruikt het vaste barcodeveld voor de printgereedheid.",
|
|
2728
|
+
body: `AANVULLING op prompt 17 t/m 26 (die blijven geldig).
|
|
2729
|
+
|
|
2730
|
+
OORZAAK VAN DE OUDE WEERGAVE
|
|
2731
|
+
De Engine leverde al één public.pick_queue-regel per kar, maar cart_count en
|
|
2732
|
+
payload.cartCount bevatten nog het totaal van de order. Daarnaast stond de
|
|
2733
|
+
barcode alleen in payload.barcode. Daardoor toonde het scherm op één karregel
|
|
2734
|
+
toch twee of drie karren en kon het scherm ten onrechte concluderen dat de
|
|
2735
|
+
pakbon niet printklaar was.
|
|
2736
|
+
|
|
2737
|
+
WAT DE ENGINE NU GARANDEERT
|
|
2738
|
+
Voor iedere actieve regel met payload.cartRowFor:
|
|
2739
|
+
- cart_count = 1
|
|
2740
|
+
- payload.cartCount = 1
|
|
2741
|
+
- reference = payload.cartId
|
|
2742
|
+
- barcode = payload.barcode
|
|
2743
|
+
- payload.cartPlanReady = true zodra kar-id en barcode aanwezig zijn
|
|
2744
|
+
- payload.cartTotal blijft uitsluitend het totaal aantal karren van de order
|
|
2745
|
+
|
|
2746
|
+
WAT JIJ BOUWT
|
|
2747
|
+
1. Behandel iedere pick_queue-regel met payload.cartRowFor als precies één kar.
|
|
2748
|
+
2. Toon in de kolom "Karren" voor die regel altijd 1; tel of groepeer niet op
|
|
2749
|
+
order_number, document_number of payload.totalCarts.
|
|
2750
|
+
3. Gebruik barcode als primaire barcode en payload.barcode alleen als
|
|
2751
|
+
gelijkwaardige terugval. Als een van beide gevuld is én cartPlanReady=true,
|
|
2752
|
+
toon dan niet de melding "nog niet printklaar".
|
|
2753
|
+
4. Gebruik payload.cartTotal alleen in het label "Kar X van Y".
|
|
2754
|
+
5. Eén klik op "Pakbon ophalen" mag uitsluitend de kar uit reference/cartId
|
|
2755
|
+
aanvragen en nooit alle karren van dezelfde order.
|
|
2756
|
+
|
|
2757
|
+
WAT JE NIET DOET
|
|
2758
|
+
- Meerdere karregels samenvoegen op ordernummer.
|
|
2759
|
+
- cartTotal of totalCarts als aantal van één regel tonen.
|
|
2760
|
+
- Printgereedheid alleen op een lokaal bewaarde oude barcode baseren.
|
|
2761
|
+
- Geen URL's, sleutels, project-refs, klantnamen of vaste id's in code.
|
|
2762
|
+
|
|
2763
|
+
CONTROLELIJST
|
|
2764
|
+
[ ] Een order met drie karren toont drie regels met ieder "Karren: 1".
|
|
2765
|
+
[ ] Iedere regel heeft een eigen documentnummer, kar-id en barcode.
|
|
2766
|
+
[ ] Een actuele karregel met barcode toont geen melding "nog niet printklaar".`,
|
|
2767
|
+
},
|
|
2768
|
+
{
|
|
2769
|
+
number: 28,
|
|
2770
|
+
title: "Karregels niet samenvoegen en beide totaalvelden accepteren",
|
|
2771
|
+
date: "2026-09-08",
|
|
2772
|
+
summary: "Iedere Engine-karregel blijft zelfstandig zichtbaar en het karplan is met oude en nieuwe veldnamen leesbaar.",
|
|
2773
|
+
body: `AANVULLING op prompt 17 t/m 27 (die blijven geldig).
|
|
2774
|
+
|
|
2775
|
+
VASTGESTELDE OORZAAK IN HET PICKSCHERM
|
|
2776
|
+
- dedupeByUnit() groepeert karregels zonder unitRef op ordernummer en laat alleen
|
|
2777
|
+
K1 staan.
|
|
2778
|
+
- cartColumnInfo() gebruikt het ordertotaal als aantal van de zichtbare regel.
|
|
2779
|
+
- parsePickCartPlan() accepteert alleen cartTotal, terwijl eerdere Engine-data
|
|
2780
|
+
bovenaan totalCarts bevat. Een geldig plan wordt daardoor null en de knop
|
|
2781
|
+
"Pakbon ophalen" blijft onterecht staan.
|
|
2782
|
+
|
|
2783
|
+
WAT DE ENGINE NU EXTRA LEVERT
|
|
2784
|
+
- payload.unitRef = payload.cartId
|
|
2785
|
+
- payload.totalCarts = 1 op iedere afzonderlijke karregel
|
|
2786
|
+
- payload.cartTotal blijft het werkelijke order- of buffertotaal
|
|
2787
|
+
- pick_queue_cart_plan levert bovenaan zowel cartTotal als totalCarts
|
|
2788
|
+
|
|
2789
|
+
WAT JIJ BOUWT
|
|
2790
|
+
1. Pas unitRefOf() aan: gebruik voor payload.cartRowFor altijd cartId, daarna
|
|
2791
|
+
reference; val alleen bij niet-karregels terug op unitRef of ordernummer.
|
|
2792
|
+
2. Pas dedupeByUnit() aan: voeg iedere regel met payload.cartRowFor zelfstandig
|
|
2793
|
+
toe en dedupliceer die nooit op ordernummer.
|
|
2794
|
+
3. Pas cartColumnInfo() aan: toon bij payload.cartRowFor altijd "1" in de kolom
|
|
2795
|
+
Karren. Gebruik cartTotal alleen voor een aanvullend label "Kar X van Y".
|
|
2796
|
+
4. Pas parsePickCartPlan() aan: accepteer root.cartTotal én root.totalCarts als
|
|
2797
|
+
gelijkwaardige veldnamen.
|
|
2798
|
+
5. Als de actuele karregel een cartId, barcode, cartPlanReady=true en
|
|
2799
|
+
cartPlanReleased=true heeft, is uitsluitend die kar printklaar. Vereis dan
|
|
2800
|
+
niet opnieuw dat alle karren van de order dezelfde controle doorstaan.
|
|
2801
|
+
6. Vraag status en pakbongegevens voor een karregel op met cartId/reference,
|
|
2802
|
+
niet met het ordernummer.
|
|
2803
|
+
|
|
2804
|
+
WAT JE NIET DOET
|
|
2805
|
+
- K2/K3 verwijderen omdat K1 hetzelfde ordernummer heeft.
|
|
2806
|
+
- cartTotal tonen als het aantal karren van één regel.
|
|
2807
|
+
- Zelf kar-identiteiten, nummers of barcodes maken.
|
|
2808
|
+
- Geen URL's, sleutels, project-refs, klantnamen of vaste id's in code.
|
|
2809
|
+
|
|
2810
|
+
CONTROLELIJST
|
|
2811
|
+
[ ] Een plan met drie karren toont K1, K2 en K3 als drie regels.
|
|
2812
|
+
[ ] Iedere regel toont "Karren: 1" en zijn eigen barcode.
|
|
2813
|
+
[ ] Een ready+released karregel toont direct de printactie.
|
|
2814
|
+
[ ] parsePickCartPlan accepteert zowel cartTotal als totalCarts.`,
|
|
2815
|
+
},
|
|
2816
|
+
{
|
|
2817
|
+
number: 29,
|
|
2818
|
+
title: "Verzendbrief gaat altijd mee met de pakbon van een kar",
|
|
2819
|
+
date: "2026-09-08",
|
|
2820
|
+
summary: "Eén printactie op een karregel levert de pakbon én de verzendbrief; afmelden gebeurt pas na de controlescan.",
|
|
2821
|
+
body: `AANVULLING op prompt 17 t/m 28 (die blijven geldig).
|
|
2822
|
+
|
|
2823
|
+
WAT DE ENGINE NU DOET
|
|
2824
|
+
- Bij iedere pakbon die vanaf een pickstation wordt aangemaakt, zet de Engine
|
|
2825
|
+
automatisch de verzendbrief klaar op dezelfde printplek.
|
|
2826
|
+
- BVO-order: verzendbrief volgens de eigen layout uit de instelling
|
|
2827
|
+
"Verzendbrief voor BVO orders".
|
|
2828
|
+
- FO-order (Floriday): de Engine haalt de verzendbrief bij Floriday op en zet
|
|
2829
|
+
die als tweede printopdracht klaar. Duurt dat even, dan blijft de aanvraag
|
|
2830
|
+
wachten met een leesbare reden; er wordt niets verzonnen.
|
|
2831
|
+
- De kar of order wordt hierdoor NIET bevestigd of afgehandeld. Afmelden
|
|
2832
|
+
gebeurt pas na het scannen van de pakbon bij de controle.
|
|
2833
|
+
|
|
2834
|
+
WAT JIJ BOUWT
|
|
2835
|
+
1. Toon per kar één printregel en één printknop. Vraag nooit zelf een aparte
|
|
2836
|
+
verzendbrief aan.
|
|
2837
|
+
2. Maak zelf geen printopdracht voor een verzendbrief, afleverbrief of
|
|
2838
|
+
verzendlabel aan; dat doet de Engine bij de pakbon.
|
|
2839
|
+
3. Zet na het printen geen enkele status op afgehandeld of bevestigd.
|
|
2840
|
+
|
|
2841
|
+
WAT JE NIET DOET
|
|
2842
|
+
- Een tweede regel of knop voor de verzendbrief tonen.
|
|
2843
|
+
- Floriday-documenten zelf ophalen.
|
|
2844
|
+
- Geen URL's, sleutels, project-refs, klantnamen of vaste id's in code.
|
|
2845
|
+
|
|
2846
|
+
CONTROLELIJST
|
|
2847
|
+
[ ] Eén klik op een karregel levert twee printopdrachten: pakbon en verzendbrief.
|
|
2848
|
+
[ ] Bij een FO-order komt de verzendbrief uit Floriday.
|
|
2849
|
+
[ ] De order blijft open tot de controlescan.`,
|
|
2850
|
+
},
|
|
2851
|
+
{
|
|
2852
|
+
number: 30,
|
|
2853
|
+
title: "Actuele tick verwerkt Floriday-verzendbrief direct op sales-order",
|
|
2854
|
+
date: "2026-09-08",
|
|
2855
|
+
summary: "De shell gebruikt de actuele Engine-tick en haalt de verzendbrief op zonder te wachten op een Floriday-statuswijziging.",
|
|
2856
|
+
body: `AANVULLING op prompt 29 (die blijft volledig geldig).
|
|
2857
|
+
|
|
2858
|
+
VASTGESTELDE OORZAAK
|
|
2859
|
+
De pakbonactie maakte de aanvraag voor de Floriday-verzendbrief correct aan,
|
|
2860
|
+
maar de actieve shell draaide nog een oudere handleLogisticsTick zonder de
|
|
2861
|
+
shippingNotes-verwerker. Daarnaast mag de documentophaling niet wachten op een
|
|
2862
|
+
fulfillment_order_id uit de statuswachtrij: die statusroute blijft terecht
|
|
2863
|
+
geblokkeerd tot na de controlescan.
|
|
2864
|
+
|
|
2865
|
+
WAT JE BOUWT
|
|
2866
|
+
1. Gebruik de actuele handleLogisticsTick-export uit
|
|
2867
|
+
@flowselections/logistiek-engine/hooks voor
|
|
2868
|
+
/api/public/hooks/logistics-recalc-tick.
|
|
2869
|
+
2. Controleer dat iedere succesvolle tick in zijn antwoord het onderdeel
|
|
2870
|
+
shippingNotes bevat.
|
|
2871
|
+
3. Maak geen eigen Floriday-statusactie om een verzendbrief beschikbaar te
|
|
2872
|
+
krijgen. De Engine haalt het document als leesactie op via het bestaande
|
|
2873
|
+
Floriday sales-order-ID.
|
|
2874
|
+
4. Toon een concrete wachtreden als Floriday nog geen fulfillment-order of
|
|
2875
|
+
verzendbrief heeft; maak geen leeg of zelfverzonnen document.
|
|
2876
|
+
5. Eén verzendbriefjob gebruikt dezelfde printer en cart_id als de pakbon.
|
|
2877
|
+
|
|
2878
|
+
WAT JE NIET DOET
|
|
2879
|
+
- De order bevestigen, afhandelen of een fulfillment-order versturen tijdens
|
|
2880
|
+
het printen.
|
|
2881
|
+
- Een tweede verzendbriefaanvraag vanuit het pickscherm maken.
|
|
2882
|
+
- Geen URL's, sleutels, project-refs, klantnamen of vaste id's in code.
|
|
2883
|
+
|
|
2884
|
+
CONTROLELIJST
|
|
2885
|
+
[ ] Het tickantwoord bevat shippingNotes.
|
|
2886
|
+
[ ] Een wachtende FO-aanvraag wordt verwerkt zodra Floriday het document heeft.
|
|
2887
|
+
[ ] Eén pakbonactie levert maximaal één bijbehorende verzendbriefjob.
|
|
2888
|
+
[ ] De order blijft open tot de controlescan.`,
|
|
2889
|
+
},
|
|
2890
|
+
{
|
|
2891
|
+
number: 31,
|
|
2892
|
+
title: "Tick faalt zichtbaar zonder verzendbriefverwerking",
|
|
2893
|
+
date: "2026-09-08",
|
|
2894
|
+
summary: "De geplande taak controleert of de verzendbriefverwerking echt actief is en rapporteert per ronde de tellingen.",
|
|
2895
|
+
body: `AANVULLING op prompt 29 en 30 (die blijven volledig geldig).
|
|
2896
|
+
|
|
2897
|
+
VASTGESTELDE OORZAAK
|
|
2898
|
+
De geplande taak meldde iedere minuut succes, terwijl de verzendbriefaanvraag
|
|
2899
|
+
onaangeroerd bleef staan op wachtend met pogingen 0. "Geen foutmelding" zei dus
|
|
2900
|
+
niets over de verzendbrief.
|
|
2901
|
+
|
|
2902
|
+
WAT JE BOUWT
|
|
2903
|
+
1. Gebruik uitsluitend de actuele handleLogisticsTick-export uit
|
|
2904
|
+
@flowselections/logistiek-engine/hooks.
|
|
2905
|
+
2. Behandel een tick zonder werkende verzendbriefverwerking als FOUT: het
|
|
2906
|
+
antwoord heeft dan ok=false en HTTP 500. Meld dat zichtbaar in je monitoring
|
|
2907
|
+
in plaats van het als geslaagde ronde te tellen.
|
|
2908
|
+
3. Toon per ronde de tellingen uit shippingNotes: found, printed,
|
|
2909
|
+
waitingForFloriday, retrying, failed en printJobsCreated.
|
|
2910
|
+
4. De pakbon is de bron voor printer en kar. Zet zelf nooit een printer op een
|
|
2911
|
+
verzendbriefaanvraag of -job.
|
|
2912
|
+
5. Wachten gebeurt met een reden en een oplopende hertijd. Onderscheid:
|
|
2913
|
+
document nog niet beschikbaar, tijdelijke storing, definitieve fout.
|
|
2914
|
+
|
|
2915
|
+
WAT JE NIET DOET
|
|
2916
|
+
- Een verzendbrief maken zonder officieel Floriday-document.
|
|
2917
|
+
- Een tweede verzendbrief maken voor dezelfde pakbon.
|
|
2918
|
+
- Statussen wijzigen of afmelden tijdens het printen.
|
|
2919
|
+
- Geen URL's, sleutels, project-refs, klantnamen of vaste id's in code.
|
|
2920
|
+
|
|
2921
|
+
CONTROLELIJST
|
|
2922
|
+
[ ] Een oude moduleversie levert een zichtbare fout, geen stille "succes".
|
|
2923
|
+
[ ] De tellingen van shippingNotes staan in je log of scherm.
|
|
2924
|
+
[ ] Een aanvraag die blijft wachten toont een oplopend aantal pogingen.
|
|
2925
|
+
[ ] Eén pakbonactie levert maximaal één verzendbriefjob op dezelfde printer.`,
|
|
2926
|
+
},
|
|
2927
|
+
{
|
|
2928
|
+
number: 32,
|
|
2929
|
+
title: "Knop: het ingestelde aantal karren in één keer uitprinten",
|
|
2930
|
+
date: "2026-09-08",
|
|
2931
|
+
summary: "Het pickscherm print zoveel karren tegelijk als in de Logistiek Engine is ingesteld, en toont deelkarren pas na het aanmeldmoment.",
|
|
2932
|
+
body: `AANVULLING op de eerdere prompts (die blijven volledig geldig).
|
|
2933
|
+
|
|
2934
|
+
WAT ER MIS IS
|
|
2935
|
+
Het pickscherm kijkt niet naar de instelling "Aantal karren dat je in één keer
|
|
2936
|
+
uitprint". Er is alleen een knop per losse kar.
|
|
2937
|
+
|
|
2938
|
+
WAT JE BOUWT
|
|
2939
|
+
1. Lees de instelling via de bestaande RPC:
|
|
2940
|
+
supabase.rpc('logistics_pick_mode') geeft nu
|
|
2941
|
+
{ pickMode, showCartControl, cartsPerPrint }.
|
|
2942
|
+
cartsPerPrint is het ingestelde aantal karren per printactie.
|
|
2943
|
+
2. Is cartsPerPrint groter dan 1, toon dan boven de lijst één knop:
|
|
2944
|
+
"Print eerstvolgende <n> karren". n = cartsPerPrint.
|
|
2945
|
+
3. Die knop neemt de bovenste n printklare karregels in de bestaande volgorde
|
|
2946
|
+
en voert per kar exact dezelfde printactie uit als de knop op de regel.
|
|
2947
|
+
Volle karren gaan voor deelkarren, precies zoals de lijst al sorteert.
|
|
2948
|
+
4. Zijn er minder printklare karren dan n, print dan alleen wat er is en meld
|
|
2949
|
+
dat in de knoptekst of een korte melding.
|
|
2950
|
+
5. Niet printklare karren sla je over, met een leesbare melding per kar.
|
|
2951
|
+
6. Is cartsPerPrint leeg (geen actieve werkwijze), toon de knop dan NIET en val
|
|
2952
|
+
niet stil terug op een eigen aantal.
|
|
2953
|
+
7. Per kar blijft het bij één printactie: pakbon (en de verzendbrief die de
|
|
2954
|
+
Engine er zelf bij zet). Maak nooit een tweede printopdracht per kar.
|
|
2955
|
+
|
|
2956
|
+
DEELKARREN
|
|
2957
|
+
De Engine bepaalt wanneer een deelkar naar het pickstation mag: pas na het
|
|
2958
|
+
aanmeldmoment van de order. Je toont dus alleen de karren die de Engine in de
|
|
2959
|
+
wachtrij zet; filter of vervroeg zelf niets.
|
|
2960
|
+
|
|
2961
|
+
WAT JE NIET DOET
|
|
2962
|
+
- Zelf een aantal karren per print bepalen of onthouden.
|
|
2963
|
+
- Karren samenvoegen tot één regel; één kar blijft één regel.
|
|
2964
|
+
- Statussen wijzigen of afmelden na het printen; dat gebeurt pas na de
|
|
2965
|
+
controlescan.
|
|
2966
|
+
- Geen URL's, sleutels, project-refs, klantnamen of vaste id's in code.
|
|
2967
|
+
|
|
2968
|
+
CONTROLELIJST
|
|
2969
|
+
[ ] Staat de instelling op 5, dan print de knop 5 karren in één klik.
|
|
2970
|
+
[ ] Wijzig je de instelling, dan verandert de knop mee zonder aanpassing.
|
|
2971
|
+
[ ] Elke kar levert precies één printactie op.
|
|
2972
|
+
[ ] Deelkarren verschijnen pas na het aanmeldmoment.`,
|
|
2973
|
+
},
|
|
2974
|
+
{
|
|
2975
|
+
number: 33,
|
|
2976
|
+
title: "Toon de verzendbriefstatus bij de geprinte kar",
|
|
2977
|
+
date: "2026-09-08",
|
|
2978
|
+
summary: "Na een pakbonprint toont het pickscherm of de verzendbrief wordt klaargezet, op Floriday wacht, geprint is of is mislukt.",
|
|
2979
|
+
body: `AANVULLING op prompt 29 t/m 32 (die blijven volledig geldig).
|
|
2980
|
+
|
|
2981
|
+
VASTGESTELDE OORZAAK
|
|
2982
|
+
De pakbon en verzendbrief worden als één printactie behandeld, maar een officiële
|
|
2983
|
+
Floriday-afleverbrief kan nog ontbreken. De Engine blijft dan automatisch
|
|
2984
|
+
proberen, terwijl het pickscherm alleen meldt dat de pakbon is verstuurd.
|
|
2985
|
+
|
|
2986
|
+
WAT JE BOUWT
|
|
2987
|
+
1. Bewaar na iedere geslaagde pakbonprint het teruggegeven print_job-id bij de
|
|
2988
|
+
bijbehorende karregel.
|
|
2989
|
+
2. Vraag daarna uitsluitend de status op via:
|
|
2990
|
+
supabase.rpc('logistics_shipping_note_status', {
|
|
2991
|
+
p_slip_job_id: <print_job-id>,
|
|
2992
|
+
p_cart_id: <cart-id>
|
|
2993
|
+
}).
|
|
2994
|
+
Geef bij voorkeur het print_job-id mee; cart-id is alleen de terugval.
|
|
2995
|
+
3. Toon direct onder de bestaande printmelding de door de Engine geleverde
|
|
2996
|
+
message. Ondersteun exact deze statussen:
|
|
2997
|
+
- klaar_voor_print: "Verzendbrief wordt klaargezet."
|
|
2998
|
+
- wacht_op_floriday: "Pakbon geprint — wachten op officiële Floriday-afleverbrief."
|
|
2999
|
+
- geprint: "Pakbon en verzendbrief zijn naar de printer gestuurd."
|
|
3000
|
+
- mislukt: toon de veilige message uit de Engine als foutmelding.
|
|
3001
|
+
4. Ververs alleen bij klaar_voor_print en wacht_op_floriday, bijvoorbeeld iedere
|
|
3002
|
+
10 seconden, maximaal 15 minuten. Stop bij geprint, mislukt, verlaten van het
|
|
3003
|
+
scherm of verwijderen van de karregel.
|
|
3004
|
+
5. Toon bij wachten desgewenst attempts en nextAttemptAt als kleine aanvullende
|
|
3005
|
+
status, maar toon geen eigen technische fouttekst.
|
|
3006
|
+
|
|
3007
|
+
BELANGRIJK
|
|
3008
|
+
- Status opvragen is alleen-lezen. Maak bij verversen nooit een nieuwe
|
|
3009
|
+
verzendbriefaanvraag of printopdracht aan.
|
|
3010
|
+
- Laat de bestaande pakbonknop en de knop voor meerdere karren dezelfde
|
|
3011
|
+
statuscontrole per teruggegeven print_job-id starten.
|
|
3012
|
+
- Eén kar blijft één regel. Voeg geen losse verzendbriefregel toe.
|
|
3013
|
+
- Wijzig bij printen geen order-, kar- of Floriday-status; afhandeling blijft
|
|
3014
|
+
pas na de controlescan plaatsvinden.
|
|
3015
|
+
- Geen URL's, sleutels, project-refs, klantnamen of vaste id's in code.
|
|
3016
|
+
|
|
3017
|
+
CONTROLELIJST
|
|
3018
|
+
[ ] FO zonder document toont de Floriday-wachtmelding bij dezelfde kar.
|
|
3019
|
+
[ ] Zodra Floriday het document levert, verandert de melding naar geprint.
|
|
3020
|
+
[ ] BVO toont de status van de eigen verzendbrief zonder Floriday-wachtmelding.
|
|
3021
|
+
[ ] Automatisch verversen maakt geen dubbele aanvraag of printopdracht.
|
|
3022
|
+
[ ] Zowel enkel printen als meerdere karren printen toont per kar de status.`,
|
|
3023
|
+
},
|
|
3024
|
+
{
|
|
3025
|
+
number: 34,
|
|
3026
|
+
title: "Verzendbrief direct ophalen bij het versturen van de pakbon",
|
|
3027
|
+
date: "2026-09-08",
|
|
3028
|
+
summary: "Zodra een pakbon naar het pickstation gaat, wordt de verzendbrief meteen opgehaald in plaats van pas bij de volgende achtergrondronde.",
|
|
3029
|
+
body: `AANVULLING op prompt 33 (die blijft volledig geldig).
|
|
3030
|
+
|
|
3031
|
+
WAAROM
|
|
3032
|
+
De verzendbrief werd pas opgehaald bij de volgende achtergrondronde, waardoor
|
|
3033
|
+
de status minutenlang op "wordt klaargezet" bleef staan.
|
|
3034
|
+
|
|
3035
|
+
WAT ER VERANDERT
|
|
3036
|
+
1. Direct na een geslaagde pakbonprint roep je één keer aan:
|
|
3037
|
+
POST /api/public/hooks/logistics-shipping-note-now
|
|
3038
|
+
met de publiceerbare sleutel in de apikey-header en een lege JSON-body.
|
|
3039
|
+
2. Vraag daarna meteen de status op met logistics_shipping_note_status, precies
|
|
3040
|
+
zoals in prompt 33.
|
|
3041
|
+
3. Ververs bij klaar_voor_print of wacht_op_floriday elke 3 seconden, maximaal
|
|
3042
|
+
15 minuten. Roep het directe eindpunt daarbij niet opnieuw aan.
|
|
3043
|
+
4. Print je meerdere karren in één actie, roep het eindpunt dan één keer aan
|
|
3044
|
+
voor de hele actie, niet per kar.
|
|
3045
|
+
5. Ontbreekt de sleutel of faalt de aanroep, meld dan niets technisch: de
|
|
3046
|
+
achtergrondverwerking blijft de status vanzelf bijwerken.
|
|
3047
|
+
|
|
3048
|
+
DIT GELDT BIJ DE INSTELLING
|
|
3049
|
+
Deze werkwijze hoort bij de keuze "Als de pakbon wordt uitgeprint" bij het
|
|
3050
|
+
vrijgeven van de verzendbrief. Bij de andere keuzes verandert er niets.
|
|
3051
|
+
|
|
3052
|
+
BELANGRIJK
|
|
3053
|
+
- Het eindpunt is idempotent en alleen-lezen richting Floriday: het maakt nooit
|
|
3054
|
+
een tweede aanvraag of dubbele printopdracht.
|
|
3055
|
+
- Is er nog geen officiële Floriday-afleverbrief, dan blijft de wachtmelding
|
|
3056
|
+
staan; er wordt nooit een leeg of zelfgemaakt document geprint.
|
|
3057
|
+
- Printen wijzigt geen enkele status; afhandelen gebeurt pas na de controlescan.
|
|
3058
|
+
- Geen URL's van omgevingen, sleutels, project-refs of klantnamen in code; de
|
|
3059
|
+
sleutel komt uit de omgeving van de shell.
|
|
3060
|
+
|
|
3061
|
+
CONTROLELIJST
|
|
3062
|
+
[ ] Na het printen verschijnt de verzendbriefstatus binnen enkele seconden.
|
|
3063
|
+
[ ] Bij een beschikbaar Floriday-document staat de verzendbrief vrijwel direct
|
|
3064
|
+
in de printwachtrij op dezelfde printer.
|
|
3065
|
+
[ ] Herhaald printen of verversen levert nooit een tweede verzendbrief op.`,
|
|
3066
|
+
},
|
|
3067
|
+
{
|
|
3068
|
+
number: 35,
|
|
3069
|
+
title: "Laadtoestand en definitieve redenen per eenheid",
|
|
3070
|
+
date: "2026-09-08",
|
|
3071
|
+
summary: "Elke eenheid heeft een vaste toestand (bezig, klaar of geblokkeerd) met voortgang en een leesbare reden, zodat de teksten in de regels niet meer wisselen.",
|
|
3072
|
+
body: `AANVULLING; het gedeelde contract uit koppelprompt 1 blijft geldig.
|
|
3073
|
+
|
|
3074
|
+
WAAROM
|
|
3075
|
+
Het scherm zag alleen "wel/niet klaar" en wisselde daardoor tussen teksten
|
|
3076
|
+
terwijl de Engine nog rekende.
|
|
3077
|
+
|
|
3078
|
+
WAT DE ENGINE LEVERT
|
|
3079
|
+
1. In public.pick_queue.payload en in logistics_cart_plan_status(ref) staan nu:
|
|
3080
|
+
- planState: precies één van pending, ready of blocked
|
|
3081
|
+
- planStateSince: sinds wanneer die toestand geldt
|
|
3082
|
+
- planProgress: 0-100, of leeg als voortgang niet zinvol is
|
|
3083
|
+
- cartPlanReason: bij pending een wachtreden, bij blocked een concrete
|
|
3084
|
+
oorzaak. Nooit leeg en nooit algemeen.
|
|
3085
|
+
2. Nieuwe alleen-lezen functie voor tientallen eenheden in één ronde:
|
|
3086
|
+
logistics_plan_progress(p_refs text[]) geeft per unit_ref:
|
|
3087
|
+
plan_state, plan_progress, plan_state_since, cart_plan_ready,
|
|
3088
|
+
cart_plan_released, cart_plan_reason. Een unit_ref mag een ordernummer,
|
|
3089
|
+
documentnummer of kar-id zijn.
|
|
3090
|
+
|
|
3091
|
+
WAT HET PICKSCHERM DOET
|
|
3092
|
+
- Toon bij pending één vaste tekst met de voortgangsbalk uit planProgress; wissel
|
|
3093
|
+
niet meer tussen "Pakbon controleren", "Pakbon ophalen" en "Printen".
|
|
3094
|
+
- Toon bij blocked de reden uit cartPlanReason en geen printknop.
|
|
3095
|
+
- Print alleen bij ready.
|
|
3096
|
+
- Ververs de zichtbare eenheden met één aanroep van logistics_plan_progress
|
|
3097
|
+
(alle refs in één array), elke paar seconden. Bereken zelf niets.
|
|
3098
|
+
|
|
3099
|
+
BELANGRIJK
|
|
3100
|
+
- De functie is alleen-lezen: geen bijwerkingen, geen statuswijzigingen.
|
|
3101
|
+
- Kar-id's, karnummers en barcodes blijven eigendom van de Engine.
|
|
3102
|
+
- Geen URL's, sleutels, project-refs, klantnamen of vaste id's in code.
|
|
3103
|
+
|
|
3104
|
+
CONTROLELIJST
|
|
3105
|
+
[ ] Elke eenheid heeft altijd een planState.
|
|
3106
|
+
[ ] Blocked gaat altijd samen met een concrete oorzaak.
|
|
3107
|
+
[ ] Tientallen refs komen in één aanroep terug.`,
|
|
3108
|
+
},
|
|
3109
|
+
{
|
|
3110
|
+
number: 36,
|
|
3111
|
+
title: "Pakbon en verzendbrief in één printactie melden",
|
|
3112
|
+
date: "2026-09-08",
|
|
3113
|
+
summary: "Eén klik op printen stuurt de pakbon en de bijbehorende verzendbrief naar dezelfde printer; ontbreekt de verzendbrief nog, dan is de printactie niet volledig geslaagd.",
|
|
3114
|
+
body: `AANVULLING; het gedeelde contract uit koppelprompt 1 blijft geldig.
|
|
3115
|
+
|
|
3116
|
+
WAT DE ENGINE DOET
|
|
3117
|
+
- Zodra een pakbon naar het pickstation gaat, zorgt de Engine voor de
|
|
3118
|
+
bijbehorende verzendbrief: bij een Floriday-order wordt die eerst in
|
|
3119
|
+
Floriday aangemaakt en daarna opgehaald, bij een eigen order wordt de
|
|
3120
|
+
eigen layout gebruikt. Beide krijgen dezelfde kar, dezelfde printer en
|
|
3121
|
+
dezelfde print_batch_key (kar-print:<pakbon-id>).
|
|
3122
|
+
- Er komt nooit een leeg of zelfgemaakt vervangdocument. Zolang Floriday het
|
|
3123
|
+
officiële document niet teruggeeft, blijft de status "wachten op
|
|
3124
|
+
Floriday-verzendbrief" en wordt er automatisch opnieuw geprobeerd.
|
|
3125
|
+
- Printen bevestigt of handelt niets af; dat blijft aan de controlescan.
|
|
3126
|
+
|
|
3127
|
+
WAT HET PICKSCHERM DOET
|
|
3128
|
+
1. Toon per kar één printregel. Eén klik print de pakbon en de verzendbrief.
|
|
3129
|
+
2. Lees de toestand van de verzendbrief met
|
|
3130
|
+
logistics_shipping_note_status(p_slip_job_id, p_cart_id).
|
|
3131
|
+
3. Is die toestand wacht_op_floriday, meld de printactie dan NIET als volledig
|
|
3132
|
+
geslaagd. Toon: "Pakbon geprint, verzendbrief wordt nog opgehaald bij
|
|
3133
|
+
Floriday" en houd de regel zichtbaar tot de verzendbrief geprint is.
|
|
3134
|
+
4. Klik niet twee keer: de tweede klik mag geen nieuwe verzendbrief aanvragen.
|
|
3135
|
+
|
|
3136
|
+
CONTROLELIJST
|
|
3137
|
+
[ ] Eén klik levert twee documenten op dezelfde printer.
|
|
3138
|
+
[ ] Ontbrekende verzendbrief geeft een wachtmelding, geen "gelukt".
|
|
3139
|
+
[ ] Er ontstaat nooit een tweede verzendbrief voor dezelfde pakbon.`,
|
|
3140
|
+
},
|
|
3141
|
+
{
|
|
3142
|
+
number: 37,
|
|
3143
|
+
title: "Knop verzendbrieven ophalen verwerkt alle openstaande pakbonnen",
|
|
3144
|
+
date: "2026-09-08",
|
|
3145
|
+
summary: "Een aanroep van het eindpunt haalt nu de verzendbrieven van alle openstaande pakbonnen op, niet alleen die van de laatst geprinte kar.",
|
|
3146
|
+
body: `AANVULLING; koppelprompt 1 en 30-34 blijven onverkort gelden.
|
|
3147
|
+
|
|
3148
|
+
WAT ER VERANDERT
|
|
3149
|
+
- POST /api/public/hooks/logistics-shipping-note-now met een lege JSON-body en
|
|
3150
|
+
de apikey-header uit de shell-omgeving pakt zelf alle openstaande
|
|
3151
|
+
verzendbrieven op. Wachttijden worden vrijgegeven, pakbonnen zonder aanvraag
|
|
3152
|
+
krijgen er alsnog een, en de ronden lopen gebundeld door tot alles op is of
|
|
3153
|
+
het tijdbudget vol is.
|
|
3154
|
+
- De respons bevat de tellingen van die aanroep: found, printed,
|
|
3155
|
+
waitingForFloriday, retrying, failed, printJobsCreated en rounds.
|
|
3156
|
+
- Per pakbon blijven de bestaande regels gelden: idempotent, nooit een tweede
|
|
3157
|
+
Floriday-aanvraag of dubbele printopdracht, nooit een leeg of zelfgemaakt
|
|
3158
|
+
document, printer en kar komen van de pakbon.
|
|
3159
|
+
|
|
3160
|
+
WAT HET PICKSCHERM DOET
|
|
3161
|
+
- De knop "Verzendbrieven ophalen" roept dit eindpunt aan met een lege body en
|
|
3162
|
+
hoeft niet te wachten tot alles klaar is.
|
|
3163
|
+
- Daarna leest het scherm de toestand per kar opnieuw uit met
|
|
3164
|
+
logistics_shipping_note_status, zoals in koppelprompt 33.
|
|
3165
|
+
- Herhaald klikken is veilig: er ontstaan geen dubbele aanvragen.
|
|
3166
|
+
|
|
3167
|
+
WAT NIET GEBEURT
|
|
3168
|
+
- Geen statuswijziging van order, kar of Floriday tijdens het ophalen.
|
|
3169
|
+
- Geen vaste URL's, sleutels, project-refs of id's in code.`,
|
|
3170
|
+
},
|
|
3171
|
+
{
|
|
3172
|
+
number: 38,
|
|
3173
|
+
title: "Herkomst van de order bepaalt het type verzendbrief",
|
|
3174
|
+
date: "2026-09-08",
|
|
3175
|
+
summary: "Een Floriday-order krijgt uitsluitend de officiele Floriday-afleverbrief; een eigen order uitsluitend de eigen verzendbrief. Er bestaat geen terugval.",
|
|
3176
|
+
body: `AANVULLING; koppelprompt 1 en 30-37 blijven onverkort gelden.
|
|
3177
|
+
|
|
3178
|
+
VASTE REGEL
|
|
3179
|
+
- Floriday-order: alleen de officiele Floriday-afleverbrief. Nooit onze eigen
|
|
3180
|
+
verzendbrief, ook niet tijdelijk of als vervanging.
|
|
3181
|
+
- Eigen order: alleen onze eigen verzendbrief.
|
|
3182
|
+
- Is de herkomst niet met zekerheid vast te stellen, dan wordt er niets
|
|
3183
|
+
aangemaakt en wordt dat gelogd. Geen gok, geen terugval.
|
|
3184
|
+
|
|
3185
|
+
WAT DE ENGINE DOET
|
|
3186
|
+
- Bij het aanmaken van de verzendbrief en nogmaals vlak voor het printen wordt
|
|
3187
|
+
de herkomst van de order gecontroleerd. Een eigen verzendbrief bij een
|
|
3188
|
+
Floriday-order wordt hard geweigerd met een leesbare foutmelding en een
|
|
3189
|
+
logregel (event shippingnote.blocked).
|
|
3190
|
+
- Bestaande foutieve eigen verzendbrieven bij Floriday-orders worden
|
|
3191
|
+
geannuleerd en vervangen door de officiele Floriday-aanvraag; dit gebeurt
|
|
3192
|
+
automatisch bij elke ronde en bij de knop "Verzendbrieven ophalen".
|
|
3193
|
+
- Wacht Floriday nog op het document, dan blijft de aanvraag wachten met de
|
|
3194
|
+
reden "wachten op Floriday-verzendbrief".
|
|
3195
|
+
|
|
3196
|
+
WAT HET PICKSCHERM DOET
|
|
3197
|
+
- Toon bij een Floriday-order nooit een eigen verzendbrief als alternatief.
|
|
3198
|
+
- Meld een printactie pas als volledig geslaagd wanneer ook de juiste
|
|
3199
|
+
verzendbrief is geprint; anders de wachtstatus tonen.
|
|
3200
|
+
|
|
3201
|
+
CONTROLELIJST
|
|
3202
|
+
[ ] Een Floriday-order kan technisch geen eigen verzendbrief krijgen.
|
|
3203
|
+
[ ] Een eigen order krijgt nooit een Floriday-document.
|
|
3204
|
+
[ ] Foutieve bestaande verzendbrieven worden geannuleerd, niet verborgen.`,
|
|
3205
|
+
},
|
|
3206
|
+
{
|
|
3207
|
+
number: 39,
|
|
3208
|
+
title: "De verzendbrief wordt eerst in Floriday aangevraagd, daarna opgehaald",
|
|
3209
|
+
date: "2026-09-16",
|
|
3210
|
+
summary: "De draaiende omgeving moet de actuele Engine gebruiken die zelf een afleverbrief in Floriday laat aanmaken; passief wachten is geen geldige uitkomst meer.",
|
|
3211
|
+
body: `AANVULLING op prompt 29, 30, 31 en 38 (die blijven volledig geldig).
|
|
3212
|
+
|
|
3213
|
+
VASTGESTELDE OORZAAK
|
|
3214
|
+
Bij een Floriday-order bleef de verzendbriefaanvraag op wachtend staan met de
|
|
3215
|
+
melding dat Floriday nog geen afleverbrief had. In het Floriday-verkeer stond
|
|
3216
|
+
echter geen enkele aanvraag om die afleverbrief te laten aanmaken: alleen
|
|
3217
|
+
leesacties. De draaiende omgeving gebruikte dus nog een oudere Engine die
|
|
3218
|
+
passief afwacht in plaats van zelf de afleveropdracht aan te vragen.
|
|
3219
|
+
|
|
3220
|
+
WAT JE BOUWT
|
|
3221
|
+
1. Gebruik uitsluitend de actuele verzendbriefverwerking uit de Logistiek
|
|
3222
|
+
Engine. Die doet twee dingen achter elkaar: eerst de afleverbrief in
|
|
3223
|
+
Floriday laten aanmaken, daarna het officiele document ophalen.
|
|
3224
|
+
2. Bestaat er al een afleveropdracht voor deze pakbon, dan wordt er geen tweede
|
|
3225
|
+
aangevraagd.
|
|
3226
|
+
3. Staat de schakelaar voor het aanmaken van de afleverbrief uit, dan is dat de
|
|
3227
|
+
getoonde wachtreden. Niet stil afwachten.
|
|
3228
|
+
4. Blijft een aanvraag wachten, toon dan of er al een aanvraag naar Floriday is
|
|
3229
|
+
gegaan en hoe vaak. Nul aanvragen bij een wachtende Floriday-order is een
|
|
3230
|
+
fout in de omgeving, geen normale toestand.
|
|
3231
|
+
5. Aanvragen en ophalen wijzigen geen orderstatus en melden geen kar of order
|
|
3232
|
+
af; dat blijft aan de controlescan.
|
|
3233
|
+
|
|
3234
|
+
WAT JE NIET DOET
|
|
3235
|
+
- Een verzendbrief maken zonder officieel Floriday-document.
|
|
3236
|
+
- Een eigen verzendbrieflayout gebruiken voor een Floriday-order.
|
|
3237
|
+
- Een tweede afleveropdracht aanvragen voor dezelfde pakbon.
|
|
3238
|
+
- Geen URL's, sleutels, project-refs, klantnamen of vaste id's in code.
|
|
3239
|
+
|
|
3240
|
+
CONTROLELIJST
|
|
3241
|
+
[ ] Bij een wachtende Floriday-order staat het aantal verstuurde aanvragen op
|
|
3242
|
+
minstens 1, of er staat een concrete reden waarom er niets is verstuurd.
|
|
3243
|
+
[ ] Een pakbonactie levert maximaal een afleveropdracht en een verzendbriefjob.
|
|
3244
|
+
[ ] De verzendbrief gaat naar dezelfde printer als de pakbon.
|
|
3245
|
+
[ ] De order blijft open tot de controlescan.`,
|
|
3246
|
+
},
|
|
2452
3247
|
],
|
|
2453
3248
|
},
|
|
2454
3249
|
scanners: {
|
|
@@ -2691,6 +3486,56 @@ CONTROLELIJST
|
|
|
2691
3486
|
[ ] Het getoonde nummer is gelijk aan het nummer op de pakbon.
|
|
2692
3487
|
[ ] cart_index komt nergens in de weergave voor.`,
|
|
2693
3488
|
},
|
|
3489
|
+
{
|
|
3490
|
+
number: 5,
|
|
3491
|
+
title: "Controlewijze \"scannen voor afmelden\"",
|
|
3492
|
+
date: "2026-09-07",
|
|
3493
|
+
summary: "Nieuwe eis bovenop prompt 1 t/m 4: bij deze werkwijze meldt één pakbonscan de hele kar af, zonder goedkeurstap en zonder printen.",
|
|
3494
|
+
body: `AANVULLING op koppelprompt 1 t/m 4 (die blijven geldig).
|
|
3495
|
+
|
|
3496
|
+
WAT ER VERANDERT
|
|
3497
|
+
In de Logistiek Engine, stap 6 "Controle", heet de bestaande scancontrole nu
|
|
3498
|
+
"Scancontrole met verzendbrief uitprinten". Daarnaast bestaat er een nieuwe
|
|
3499
|
+
werkwijze: "Scannen voor afmelden" (control_mode = scan_only).
|
|
3500
|
+
|
|
3501
|
+
HOE JE DE WERKWIJZE OPHAALT
|
|
3502
|
+
logistics_control_settings() geeft nu:
|
|
3503
|
+
- controlMode : "scanner" | "scan_only" | "paper" | "skip"
|
|
3504
|
+
- scannerId : de scanner van de controlepost
|
|
3505
|
+
- printerId : alleen gevuld bij "scanner"; bij scan_only altijd null
|
|
3506
|
+
- completeOnScan : true bij scan_only
|
|
3507
|
+
- printsShippingNote : true bij scanner
|
|
3508
|
+
|
|
3509
|
+
Ook de control.execute taak draagt dit: payload.controlMode,
|
|
3510
|
+
payload.completeOnScan en payload.printsShippingNote.
|
|
3511
|
+
|
|
3512
|
+
GEDRAG BIJ completeOnScan = true
|
|
3513
|
+
- De medewerker scant alleen de pakbon. Geen tweede stap, geen apart
|
|
3514
|
+
goedkeurscherm, geen printerkeuze en geen afleverbrief.
|
|
3515
|
+
- Roep gewoon logistics_control_scan_approve(p_barcode, p_scanner_id, null) aan.
|
|
3516
|
+
De Engine meldt daarmee de hele kar af en geeft status "afgemeld" terug met
|
|
3517
|
+
cartsCompleted.
|
|
3518
|
+
- Toon na een geslaagde scan alleen de bevestiging dat de kar is afgemeld;
|
|
3519
|
+
verwacht geen printJobId.
|
|
3520
|
+
- Bij ok = false: toon de tekst van de Engine letterlijk. errorCode
|
|
3521
|
+
"al_gecontroleerd" betekent dat deze kar al is afgemeld.
|
|
3522
|
+
|
|
3523
|
+
GEDRAG BIJ completeOnScan = false
|
|
3524
|
+
Ongewijzigd: scannen, goedkeuren, de Engine zet de verzendbrief/afleverbrief
|
|
3525
|
+
klaar op printerId.
|
|
3526
|
+
|
|
3527
|
+
NIET DOEN
|
|
3528
|
+
- Zelf beslissen of er geprint moet worden of zelf een kar afmelden buiten de
|
|
3529
|
+
Engine om.
|
|
3530
|
+
- De printerkeuze tonen als printerId leeg is.
|
|
3531
|
+
- URL's, sleutels, project-refs of klantnamen in code.
|
|
3532
|
+
|
|
3533
|
+
CONTROLELIJST
|
|
3534
|
+
[ ] De werkwijze komt uit logistics_control_settings(), niet uit eigen instellingen.
|
|
3535
|
+
[ ] Bij scan_only is één pakbonscan genoeg en verdwijnt de goedkeur- en printstap.
|
|
3536
|
+
[ ] Bij scan_only wordt er nergens een printjob aangemaakt.
|
|
3537
|
+
[ ] Foutteksten komen letterlijk van de Engine.`,
|
|
3538
|
+
},
|
|
2694
3539
|
],
|
|
2695
3540
|
},
|
|
2696
3541
|
voorraad: {
|
|
@@ -3275,6 +4120,54 @@ CONTROLELIJST
|
|
|
3275
4120
|
[ ] Elke weigering en elke verzending staat in het logboek.
|
|
3276
4121
|
[ ] Lezen blijft werken.`,
|
|
3277
4122
|
},
|
|
4123
|
+
{
|
|
4124
|
+
number: 2,
|
|
4125
|
+
title: "Herkomst en groepssleutel bij elke binnenkomende bestelling",
|
|
4126
|
+
date: "2026-09-09",
|
|
4127
|
+
withSharedContract: false,
|
|
4128
|
+
summary: "Elke order krijgt bij het aanmaken een herkomst en, bij Floriday, een groepssleutel zonder regeltijdstip, zodat de Engine bestelregels tot één bestelling kan bundelen.",
|
|
4129
|
+
body: `WAAROM
|
|
4130
|
+
Floriday levert elke bestelregel als een eigen verkooporder. Eén bestelling van
|
|
4131
|
+
één klant werd daardoor vijf orders met vijf ordernummers. De Engine bundelt die
|
|
4132
|
+
regels voortaan zelf, maar kan dat alleen als bij het aanmaken van de order
|
|
4133
|
+
klopt waar hij vandaan komt en bij welke bestelling hij hoort.
|
|
4134
|
+
|
|
4135
|
+
WAT JE BOUWT
|
|
4136
|
+
Bij elke order die je in public.orders aanmaakt of bijwerkt zet je:
|
|
4137
|
+
|
|
4138
|
+
- order_source, met exact één van deze waarden:
|
|
4139
|
+
floriday - opgehaald uit Floriday
|
|
4140
|
+
mail - goedgekeurd voorstel uit de mailbox voor bestellingen
|
|
4141
|
+
actiemail - goedgekeurd voorstel uit de actiemail
|
|
4142
|
+
manual - met de hand ingevoerd in verkoop
|
|
4143
|
+
- floriday_sales_order_id: het id van de Floriday-verkooporder (alleen bij
|
|
4144
|
+
floriday).
|
|
4145
|
+
- floriday_order_group_key: de groepssleutel van de bestelling. De delen staan
|
|
4146
|
+
gescheiden door een verticale streep en beschrijven koper, levermoment,
|
|
4147
|
+
afleverlocatie en organisatie. Het laatste deel mag het tijdstip van de losse
|
|
4148
|
+
regel zijn; de Engine laat dat deel bewust weg bij het bundelen.
|
|
4149
|
+
|
|
4150
|
+
REGELS
|
|
4151
|
+
- Alle regels van dezelfde bestelling krijgen dezelfde delen vóór het tijdstip.
|
|
4152
|
+
Zit daar iets in dat per regel verschilt (artikel, regelnummer, regel-id), dan
|
|
4153
|
+
bundelt de Engine niets meer en ontstaan er weer losse orders.
|
|
4154
|
+
- Vul de herkomst altijd; nooit leeg laten en nooit raden. Onbekende herkomst
|
|
4155
|
+
betekent: order niet aanmaken en melden.
|
|
4156
|
+
- Werk nooit een order bij die de Engine als samengevoegd heeft gemarkeerd
|
|
4157
|
+
(deleted_at gevuld en een regel in public.logistics_order_merges). Schrijf in
|
|
4158
|
+
dat geval naar de bewaarde bestelling (kept_order_id).
|
|
4159
|
+
- Terugkoppeling naar Floriday blijft per verkooporder-id lopen; die id's staan
|
|
4160
|
+
bewaard in logistics_order_merges.
|
|
4161
|
+
- Geen URL's, sleutels, project-refs, klantnamen of vaste database-id's in code
|
|
4162
|
+
of migraties.
|
|
4163
|
+
|
|
4164
|
+
CONTROLELIJST
|
|
4165
|
+
[ ] Elke nieuwe order heeft een gevulde, geldige order_source.
|
|
4166
|
+
[ ] Floriday-regels van dezelfde bestelling delen dezelfde groepssleutel op het
|
|
4167
|
+
tijdstip na.
|
|
4168
|
+
[ ] Een samengevoegde order wordt nooit opnieuw aangemaakt of bijgewerkt.
|
|
4169
|
+
[ ] Elke Floriday-order houdt zijn eigen floriday_sales_order_id.`,
|
|
4170
|
+
},
|
|
3278
4171
|
],
|
|
3279
4172
|
},
|
|
3280
4173
|
};
|