@flowselections/logistiek-engine 1.0.24 → 1.0.26

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.
Files changed (56) hide show
  1. package/README.md +24 -24
  2. package/dist-lib/components/ConsistentieCard.d.ts +2 -0
  3. package/dist-lib/components/ConsistentieCard.d.ts.map +1 -0
  4. package/dist-lib/components/ConsistentieCard.js +38 -0
  5. package/dist-lib/components/LogistiekEnginePage.d.ts.map +1 -1
  6. package/dist-lib/components/LogistiekEnginePage.js +8 -2
  7. package/dist-lib/components/ModulePromptsPage.d.ts.map +1 -1
  8. package/dist-lib/components/ModulePromptsPage.js +11 -3
  9. package/dist-lib/components/RegiePage.d.ts.map +1 -1
  10. package/dist-lib/components/RegiePage.js +3 -2
  11. package/dist-lib/index.d.ts +1 -0
  12. package/dist-lib/index.d.ts.map +1 -1
  13. package/dist-lib/index.js +1 -0
  14. package/dist-lib/integrations/supabase/auth-middleware.d.ts +1333 -775
  15. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  16. package/dist-lib/integrations/supabase/client.server.d.ts +1333 -775
  17. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  18. package/dist-lib/integrations/supabase/client.server.js +1 -1
  19. package/dist-lib/integrations/supabase/moduleClient.d.ts +1333 -775
  20. package/dist-lib/integrations/supabase/moduleClient.d.ts.map +1 -1
  21. package/dist-lib/integrations/supabase/types.d.ts +1346 -806
  22. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  23. package/dist-lib/lib/floridayDocuments.functions.d.ts +3510 -1836
  24. package/dist-lib/lib/floridayDocuments.functions.d.ts.map +1 -1
  25. package/dist-lib/lib/floridayPush.functions.d.ts +1333 -775
  26. package/dist-lib/lib/floridayPush.functions.d.ts.map +1 -1
  27. package/dist-lib/lib/handlers/logistics-tick.server.d.ts.map +1 -1
  28. package/dist-lib/lib/handlers/logistics-tick.server.js +11 -0
  29. package/dist-lib/lib/loadCarrierPlanner.d.ts +6 -0
  30. package/dist-lib/lib/loadCarrierPlanner.d.ts.map +1 -1
  31. package/dist-lib/lib/loadCarrierPlanner.js +3 -0
  32. package/dist-lib/lib/loadCarrierPlanning.functions.d.ts +5855 -3090
  33. package/dist-lib/lib/loadCarrierPlanning.functions.d.ts.map +1 -1
  34. package/dist-lib/lib/loadCarrierPlanning.server.d.ts.map +1 -1
  35. package/dist-lib/lib/loadCarrierPlanning.server.js +3 -0
  36. package/dist-lib/lib/logisticsPlanner.d.ts +2 -0
  37. package/dist-lib/lib/logisticsPlanner.d.ts.map +1 -1
  38. package/dist-lib/lib/logisticsPlanner.js +52 -13
  39. package/dist-lib/lib/logisticsRecalcJob.functions.d.ts +2340 -1224
  40. package/dist-lib/lib/logisticsRecalcJob.functions.d.ts.map +1 -1
  41. package/dist-lib/lib/logisticsRecalculate.functions.d.ts +1333 -775
  42. package/dist-lib/lib/logisticsRecalculate.functions.d.ts.map +1 -1
  43. package/dist-lib/lib/modulePrompts.d.ts +19 -3
  44. package/dist-lib/lib/modulePrompts.d.ts.map +1 -1
  45. package/dist-lib/lib/modulePrompts.js +1664 -1141
  46. package/dist-lib/lib/ruleEngineSchema.d.ts.map +1 -1
  47. package/dist-lib/lib/ruleEngineSchema.js +21 -4
  48. package/dist-lib/lib/ruleEngineWizard.d.ts.map +1 -1
  49. package/dist-lib/lib/ruleEngineWizard.js +3 -1
  50. package/package.json +1 -1
  51. package/dist-lib/components/rule-engine/FloridayConnectionBanner.d.ts +0 -2
  52. package/dist-lib/components/rule-engine/FloridayConnectionBanner.d.ts.map +0 -1
  53. package/dist-lib/components/rule-engine/FloridayConnectionBanner.js +0 -41
  54. package/dist-lib/integrations/supabase/client.d.ts +0 -20293
  55. package/dist-lib/integrations/supabase/client.d.ts.map +0 -1
  56. package/dist-lib/integrations/supabase/client.js +0 -13
@@ -1 +1 @@
1
- {"version":3,"file":"loadCarrierPlanning.server.d.ts","sourceRoot":"","sources":["../../src/lib/loadCarrierPlanning.server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loadCarrierPlanning.server.d.ts","sourceRoot":"","sources":["../../src/lib/loadCarrierPlanning.server.ts"],"names":[],"mappings":"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"}
@@ -200,6 +200,7 @@ export async function expandOrderItemsForPlanner(sb, rows, options = {}) {
200
200
  product_name: row.product_name ?? "Onbekend",
201
201
  plants,
202
202
  ...base,
203
+ packing_authoritative: source === "floriday_packing",
203
204
  weight_per_crate: row.products?.weight != null ? Number(row.products.weight) : null,
204
205
  });
205
206
  continue;
@@ -220,6 +221,7 @@ export async function expandOrderItemsForPlanner(sb, rows, options = {}) {
220
221
  product_name: row.product_name ?? "Onbekend",
221
222
  plants,
222
223
  ...base,
224
+ packing_authoritative: source === "floriday_packing",
223
225
  weight_per_crate: null,
224
226
  });
225
227
  continue;
@@ -280,6 +282,7 @@ export async function expandOrderItemsForPlanner(sb, rows, options = {}) {
280
282
  product_name: `${row.product_name ?? "Groep"} — ${r.p?.product ?? r.m.trade_item_id}`,
281
283
  plants: shares[idx],
282
284
  ...r.belading,
285
+ packing_authoritative: r.source === "floriday_packing",
283
286
  weight_per_crate: r.p?.weight != null ? Number(r.p.weight) : null,
284
287
  });
285
288
  });
@@ -21,6 +21,8 @@ export interface PlannerContext {
21
21
  ruleConfigId?: string | null;
22
22
  ruleVersion?: number | null;
23
23
  shadow?: boolean;
24
+ /** Referentiemoment voor de "nooit in het verleden"-ondergrens (test/herberekening). */
25
+ now?: number | string | Date;
24
26
  }
25
27
  export interface PlannedTask {
26
28
  taskType: LogisticsTaskType;
@@ -1 +1 @@
1
- {"version":3,"file":"logisticsPlanner.d.ts","sourceRoot":"","sources":["../../src/lib/logisticsPlanner.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAc,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAO/F,MAAM,MAAM,eAAe,GACvB,SAAS,GACT,kBAAkB,GAClB,mBAAmB,GACnB,QAAQ,GACR,aAAa,GACb,OAAO,CAAC;AAEZ,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,eAAe,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,WAAW,EAAE,kBAAkB,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,+EAA+E;IAC/E,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC;QACd,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;KAChC,CAAC;IACF,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAgDD,0FAA0F;AAC1F,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,kBAAkB,EAAE,EAC9B,QAAQ,EAAE,kBAAkB,GAC3B;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CASpC;AAMD,wBAAgB,SAAS,CACvB,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,GAAE,cAAmB,GAC3B,aAAa,CAsPf"}
1
+ {"version":3,"file":"logisticsPlanner.d.ts","sourceRoot":"","sources":["../../src/lib/logisticsPlanner.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAc,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAO/F,MAAM,MAAM,eAAe,GACvB,SAAS,GACT,kBAAkB,GAClB,mBAAmB,GACnB,QAAQ,GACR,aAAa,GACb,OAAO,CAAC;AAEZ,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,eAAe,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wFAAwF;IACxF,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,WAAW,EAAE,kBAAkB,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,+EAA+E;IAC/E,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC;QACd,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;KAChC,CAAC;IACF,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAgDD,0FAA0F;AAC1F,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,kBAAkB,EAAE,EAC9B,QAAQ,EAAE,kBAAkB,GAC3B;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CASpC;AAMD,wBAAgB,SAAS,CACvB,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,GAAE,cAAmB,GAC3B,aAAa,CAqSf"}
@@ -102,6 +102,21 @@ export function planOrder(order, settings, context = {}) {
102
102
  pickEndAt = shift(pickupAt, -reserveMinutes);
103
103
  pickStartAt = shift(pickEndAt, -pickMinutes);
104
104
  }
105
+ // Harde ondergrens: een order mag nooit in het verleden gepickt worden.
106
+ // Ligt het berekende venster achter ons, dan schuift het naar nu met behoud
107
+ // van de berekende pickduur. Zelfde regel als logistics_not_past in de database.
108
+ const nowIso = new Date(context.now ?? Date.now()).toISOString();
109
+ const pickStartRaw = pickStartAt;
110
+ let pickWindowShifted = false;
111
+ if (new Date(pickStartAt) < new Date(nowIso)) {
112
+ pickWindowShifted = true;
113
+ pickStartAt = nowIso;
114
+ pickEndAt = shift(pickStartAt, Math.max(pickMinutes, 1));
115
+ notes.push("Het pickvenster lag in het verleden; het picken start direct (te laat aangemeld).");
116
+ }
117
+ else if (new Date(pickEndAt) < new Date(pickStartAt)) {
118
+ pickEndAt = shift(pickStartAt, Math.max(pickMinutes, 1));
119
+ }
105
120
  if (bufferCloseAt && new Date(bufferCloseAt) > new Date(pickStartAt)) {
106
121
  notes.push("De buffer sluit later dan het picken zou moeten beginnen; controleer de buffertijd.");
107
122
  }
@@ -139,14 +154,23 @@ export function planOrder(order, settings, context = {}) {
139
154
  loadCarriers: carriers,
140
155
  fillMode: "generated",
141
156
  });
157
+ // Aantal ladingdragers bepaalt bij "kleinste telt" of de opdracht per order
158
+ // of per kar gaat: past de order binnen één kar, dan is de order de eenheid.
159
+ const totalCarriers = carriers.reduce((sum, c) => sum + Math.max(0, num(c.count, 0)), 0);
160
+ const configuredPickMode = str(pickStep.pick_mode, "cart");
161
+ const pickUnit = configuredPickMode === "smallest" ? (totalCarriers <= 1 ? "order" : "cart") : configuredPickMode;
142
162
  add("pick.execute", pickStartAt, pickEndAt, {
143
- pickMode: str(pickStep.pick_mode, "cart"),
163
+ pickMode: configuredPickMode,
164
+ pickUnit,
144
165
  pickStartMode,
145
166
  pickMinutes,
146
167
  staff,
147
168
  reserveMinutes,
148
169
  scanner: str(pickStep.scanner, "required"),
149
170
  loadCarriers: carriers,
171
+ totalCarriers,
172
+ pickWindowShifted,
173
+ pickWindowOriginalStart: pickWindowShifted ? pickStartRaw : null,
150
174
  });
151
175
  if (str(pickStep.scanner, "required") === "required") {
152
176
  add("scan.verify", pickStartAt, pickEndAt, { reason: "pick_scanner_required" });
@@ -188,18 +212,33 @@ export function planOrder(order, settings, context = {}) {
188
212
  };
189
213
  const packingRelease = str(docStep.packing_slip_release, "with_pick_release");
190
214
  const packingAt = docRelease(packingRelease, num(docStep.packing_slip_hours_before, 2));
191
- const pickMode = str(pickStep.pick_mode, "cart");
192
- const groupIdenticalCarts = pickMode === "cart" && bool(docStep.packing_slip_group_identical_carts, true);
193
- add("print.packing_slip", packingAt, packingAt, {
194
- documentType: "pakbon",
195
- release: packingRelease,
196
- pickStationId: str(docStep.packing_slip_station, "") || null,
197
- requiresApproval: false,
198
- pickMode,
199
- groupIdenticalCarts,
200
- cartsPerPrint: groupIdenticalCarts ? Math.max(1, num(docStep.packing_slip_carts_per_print, 1)) : null,
201
- splitIdenticalGroups: false,
202
- });
215
+ const pickMode = configuredPickMode;
216
+ const groupIdenticalCarts = (pickMode === "cart" || pickMode === "smallest") &&
217
+ bool(docStep.packing_slip_group_identical_carts, true);
218
+ const barcodeEnabled = bool(docStep.packing_slip_barcode, true);
219
+ // Eén pakbon per kar. De laatste (of enige) kar van een order is de deelkar en
220
+ // krijgt daarom de deelorder-layout; alle voorgaande karren zijn volle karren.
221
+ const cartTotal = Math.max(1, totalCarriers);
222
+ for (let cartIndex = 1; cartIndex <= cartTotal; cartIndex++) {
223
+ const isFullCart = cartIndex < cartTotal;
224
+ add("print.packing_slip", packingAt, packingAt, {
225
+ documentType: "pakbon",
226
+ release: packingRelease,
227
+ pickStationId: str(docStep.packing_slip_station, "") || null,
228
+ requiresApproval: false,
229
+ pickMode,
230
+ pickUnit,
231
+ cartIndex,
232
+ cartTotal,
233
+ cartLabel: `Kar ${cartIndex} van ${cartTotal}`,
234
+ isFullCart,
235
+ slipVariant: isFullCart ? "full_cart" : "partial_order",
236
+ barcodeEnabled,
237
+ groupIdenticalCarts,
238
+ cartsPerPrint: groupIdenticalCarts ? Math.max(1, num(docStep.packing_slip_carts_per_print, 1)) : null,
239
+ splitIdenticalGroups: false,
240
+ });
241
+ }
203
242
  const stickerRelease = str(docStep.sticker_release, "with_pick_release");
204
243
  const stickerAt = docRelease(stickerRelease, num(docStep.sticker_hours_before, 2));
205
244
  add("print.sticker", stickerAt, stickerAt, {