@flowselections/logistiek-engine 1.0.175 → 1.0.180

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 (48) hide show
  1. package/db/schema/logistiek-engine.sql +2112 -0
  2. package/dist-lib/components/BeheerPage.d.ts.map +1 -1
  3. package/dist-lib/components/BeheerPage.js +2 -1
  4. package/dist-lib/components/BeladingIndelingCard.d.ts.map +1 -1
  5. package/dist-lib/components/BeladingIndelingCard.js +2 -0
  6. package/dist-lib/components/DocumentkeuzeCard.d.ts +2 -0
  7. package/dist-lib/components/DocumentkeuzeCard.d.ts.map +1 -0
  8. package/dist-lib/components/DocumentkeuzeCard.js +18 -0
  9. package/dist-lib/index.d.ts +1 -0
  10. package/dist-lib/index.d.ts.map +1 -1
  11. package/dist-lib/index.js +1 -0
  12. package/dist-lib/integrations/supabase/previewAuthStorage.d.ts +11 -5
  13. package/dist-lib/integrations/supabase/previewAuthStorage.d.ts.map +1 -1
  14. package/dist-lib/integrations/supabase/previewAuthStorage.js +38 -21
  15. package/dist-lib/integrations/supabase/types.d.ts +376 -15
  16. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  17. package/dist-lib/lib/beladingRegels.d.ts +78 -0
  18. package/dist-lib/lib/beladingRegels.d.ts.map +1 -0
  19. package/dist-lib/lib/beladingRegels.js +143 -0
  20. package/dist-lib/lib/bulkLoadCarrierPlanning.server.js +2 -2
  21. package/dist-lib/lib/controlScan.server.js +1 -1
  22. package/dist-lib/lib/eigenTraysticker.d.ts +17 -0
  23. package/dist-lib/lib/eigenTraysticker.d.ts.map +1 -0
  24. package/dist-lib/lib/eigenTraysticker.js +32 -0
  25. package/dist-lib/lib/layoutPrint.server.d.ts +10 -1
  26. package/dist-lib/lib/layoutPrint.server.d.ts.map +1 -1
  27. package/dist-lib/lib/layoutPrint.server.js +19 -1
  28. package/dist-lib/lib/loadCarrierPlanning.server.d.ts +35 -3
  29. package/dist-lib/lib/loadCarrierPlanning.server.d.ts.map +1 -1
  30. package/dist-lib/lib/loadCarrierPlanning.server.js +251 -89
  31. package/dist-lib/lib/modulePrompts.d.ts.map +1 -1
  32. package/dist-lib/lib/modulePrompts.js +233 -0
  33. package/dist-lib/lib/moduleVersion.d.ts +1 -1
  34. package/dist-lib/lib/moduleVersion.js +1 -1
  35. package/dist-lib/lib/planQueue.server.d.ts.map +1 -1
  36. package/dist-lib/lib/planQueue.server.js +26 -2
  37. package/dist-lib/lib/ruleEngineSchema.d.ts.map +1 -1
  38. package/dist-lib/lib/ruleEngineSchema.js +4 -38
  39. package/dist-lib/lib/ruleEngineWizard.d.ts.map +1 -1
  40. package/dist-lib/lib/ruleEngineWizard.js +0 -2
  41. package/dist-lib/lib/shippingNoteQueue.server.js +1 -1
  42. package/dist-lib/lib/stickerQueue.server.d.ts +25 -0
  43. package/dist-lib/lib/stickerQueue.server.d.ts.map +1 -1
  44. package/dist-lib/lib/stickerQueue.server.js +150 -22
  45. package/dist-lib/lib/stickerRules.d.ts +17 -0
  46. package/dist-lib/lib/stickerRules.d.ts.map +1 -1
  47. package/dist-lib/lib/stickerRules.js +30 -0
  48. package/package.json +1 -1
@@ -1241,6 +1241,62 @@ CONTROLELIJST
1241
1241
  order: 2,
1242
1242
  summary: "Voert belading, controle, printen en transport uit volgens de taak-payload.",
1243
1243
  revisions: [
1244
+ {
1245
+ number: 30,
1246
+ title: "Karnummer koppelen aan het kar-id",
1247
+ date: "2026-10-21",
1248
+ summary: "cart_numbers heeft een kolom cart_id; vul die bij elk nieuw karnummer.",
1249
+ body: `KOPPELPROMPT ENGINE 1.0.179 – karnummers op kar-id
1250
+
1251
+ De Engine heeft cart_numbers uitgebreid met cart_id uuid (stabiel na herindeling) en
1252
+ een unieke index (pick_date, cart_id) waar cart_id gevuld is. Graag:
1253
+ - Vul in assign_cart_numbers bij elk nieuw karnummer ook cart_id = order_carts.id.
1254
+ - Zoek bestaande nummers voortaan eerst op cart_id, pas daarna op order + cart_index.
1255
+ - logistics_cart_seq geeft nu een duidelijke fout als een order twee karren met
1256
+ hetzelfde volgnummer heeft (er wordt geen kar meer weggelaten). Toon die fout.
1257
+ - logistics_cart_seq is niet meer aan te roepen als anon; ingelogd en server blijven werken.
1258
+ Bestaande nummers worden pas gekoppeld na akkoord van de opdrachtgever.
1259
+ Verander niets aan de Engine-functies.`,
1260
+ },
1261
+ {
1262
+ number: 29,
1263
+ title: "Antwoord 1.0.74: fusten en land per kar",
1264
+ date: "2026-10-21",
1265
+ summary: "control_get_todays_carts() geeft per kar ook crates_on_cart en country_code.",
1266
+ body: `ANTWOORD ENGINE 1.0.178 – Afhandeling 1.0.74 (fusten en land per kar)
1267
+
1268
+ control_get_todays_carts() heeft achteraan twee kolommen gekregen:
1269
+ - crates_on_cart integer: som van order_cart_items.crates op deze kar (op kar-id).
1270
+ Bij een gedeelde kar het totaal van alle orders, één keer geteld. Geen indeling: NULL.
1271
+ - country_code text: ISO-landcode (2 letters) van de afleverlocatie van de eerste
1272
+ order op de kar (op ordernummer), via orders.custom_fields->>'delivery_location'
1273
+ -> customer_delivery_locations.id. Geen geldige 2-letterige code (bijv. "Nederland")
1274
+ of geen locatie: NULL; er wordt niet omgezet uit een landnaam.
1275
+ Bestaande kolommen, volgorde, rechten en filtering zijn ongewijzigd.
1276
+ Je hoeft niets aan de Engine aan te passen.`,
1277
+ },
1278
+ {
1279
+ number: 28,
1280
+ title: "Geen layoutkeuze meer: document automatisch uit de order",
1281
+ date: "2026-10-21",
1282
+ summary: "Haal eigen layoutkeuzes weg; documenten en layout volgen uit de order via de centrale beslisregel.",
1283
+ body: `KOPPELPROMPT AFHANDELING – automatische documentkeuze (Engine 1.0.176)
1284
+
1285
+ 1. Haal in je eigen instellingen en herprintschermen elke keuze voor layout of
1286
+ documentsoort weg. Toon: "Het document wordt automatisch bepaald uit de order."
1287
+ 2. Bestaande opgeslagen keuzes niet verwijderen, wel negeren.
1288
+ 3. Print je zelf een document: vraag de layout op met
1289
+ rpc logistics_document_for_order(p_order_id, p_documenttype)
1290
+ (documenttype: pakbon, productiebon, verzenddocument, sticker, traysticker,
1291
+ eigen_sticker). ok=false: dat document niet printen, reden tonen; andere
1292
+ documenten van de order gaan door.
1293
+ 4. Verzenddocument: precies één per order. Floriday-order = wat Floriday levert;
1294
+ eigen order = afleverbrief (bron eigen).
1295
+ 5. Opnieuw afdrukken blijft altijd mogelijk; maak geen tweede actieve
1296
+ documentregistratie per order per soort.
1297
+ Wanneer een document vrijkomt (vrijgave, X uur vóór pickmoment, aanmeldmoment,
1298
+ voorraadopwaardering) verandert niet. Wijzig geen functies van de Engine.`,
1299
+ },
1244
1300
  {
1245
1301
  number: 1,
1246
1302
  title: "Basiskoppeling via de database",
@@ -2446,6 +2502,48 @@ CONTROLELIJST
2446
2502
  order: 3,
2447
2503
  summary: "Toont pick-taken op de door de Engine berekende starttijd.",
2448
2504
  revisions: [
2505
+ {
2506
+ number: 51,
2507
+ title: "Antwoord op 1.0.56: pakbon alleen via centrale documentkeuze",
2508
+ date: "2026-10-21",
2509
+ summary: "Beide pick_enqueue_print_job-varianten en logistics_resolve_pick_document negeren payload.layout_id en weigeren bij ok=false.",
2510
+ body: `KOPPELPROMPT PICKSCHERMEN – antwoord op 1.0.56 (Engine 1.0.176)
2511
+
2512
+ Verwerkt:
2513
+ - pick_enqueue_print_job (4 en 5 velden) en logistics_resolve_pick_document
2514
+ kiezen de layout alleen via logistics_document_for_order(order_id, documenttype).
2515
+ payload.layout_id en payload.layout worden genegeerd en niet meer doorgegeven.
2516
+ - Bij ok=false (en geen geleverde pdf) maakt pick_enqueue_print_job GEEN
2517
+ printopdracht en geeft een fout (SQLSTATE 23514) met de Nederlandse reden als
2518
+ tekst. Toon die tekst; andere documenten van de order gaan gewoon door.
2519
+ - logistics_resolve_pick_document geeft nu ook terug: ok (boolean), reden (tekst
2520
+ of null) en layout_keuze ('layouts' of 'automatisch'). Gebruik ok/reden voor het
2521
+ voorbeeld op het pickstation.
2522
+ - Rechten, beveiliging en parameters zijn ongewijzigd.
2523
+ Je hoeft niets aan de Engine aan te passen.`,
2524
+ },
2525
+ {
2526
+ number: 50,
2527
+ title: "Geen layoutkeuze meer: document automatisch uit de order",
2528
+ date: "2026-10-21",
2529
+ summary: "Haal de layout- en documentsoortkeuzes uit de pickstationinstellingen; het document volgt uit de order.",
2530
+ body: `KOPPELPROMPT PICKSCHERMEN – automatische documentkeuze (Engine 1.0.176)
2531
+
2532
+ 1. Haal in de pickstationinstellingen alle keuzelijsten voor layout en
2533
+ documentsoort weg. Toon op die plek: "Het document wordt automatisch bepaald uit de order."
2534
+ 2. Bestaande opgeslagen keuzes NIET verwijderen, maar negeren.
2535
+ 3. Een pakbon printen blijft via pick_enqueue_print_job (Engine). Die kiest de
2536
+ layout nu zelf via logistics_document_for_order(order_id, documenttype);
2537
+ een layout_id in de payload van de pickrij wordt genegeerd.
2538
+ 4. Wil je vooraf tonen welk document eruit komt: rpc
2539
+ logistics_document_for_order(p_order_id, p_documenttype) -> { ok, layout_id, reden }.
2540
+ Bij ok=false: toon de reden, druk alleen dát document niet af; de rest van de
2541
+ order gaat door.
2542
+ 5. Opnieuw afdrukken blijft altijd mogelijk (bestaande herprintknop).
2543
+ 6. Eigen stickers (HO/MO/AO, vinkje Sticker op de orderregel) komen vanzelf mee
2544
+ met de pakbon op de labelprinter van dezelfde plek; geen extra knop nodig.
2545
+ Wijzig geen functies van de Engine.`,
2546
+ },
2449
2547
  {
2450
2548
  number: 1,
2451
2549
  title: "Basiskoppeling via de database",
@@ -4795,6 +4893,31 @@ CONTROLELIJST
4795
4893
  order: 5,
4796
4894
  summary: "Reserveert voorraad op commando en meldt wijzigingen terug.",
4797
4895
  revisions: [
4896
+ {
4897
+ number: 8,
4898
+ title: "Antwoord op Voorraad 1.0.93: reserveringen zonder Floriday-leidende FO-orders",
4899
+ date: "2026-10-21",
4900
+ summary: "logistics_recompute_reserved_targeted telt FO-toewijzingen op Floriday-leidende sleutels niet meer mee; change_source blijft RESERVATION_RECOMPUTE.",
4901
+ body: `KOPPELPROMPT VOORRAAD – antwoord op 1.0.93 (Engine 1.0.176)
4902
+
4903
+ Verwerkt in de Engine:
4904
+ 1. logistics_recompute_reserved_targeted, recompute_reserved_stock en
4905
+ recompute_all_reserved_stock zetten vóór de UPDATE
4906
+ set_config('stock.change_source','RESERVATION_RECOMPUTE', true) en schrijven
4907
+ change_source = 'RESERVATION_RECOMPUTE' op de rij (stond al zo).
4908
+ 2. Alle drie tellen geen toewijzingen mee van orders met
4909
+ normalize_order_source(order_source) = 'FO' op een sleutel waarvoor
4910
+ voorraad_floriday_leads_key(trade_item_key) = true. Eigen orders tellen mee.
4911
+ De toewijzingen (logistics_reservation_allocations) blijven bestaan.
4912
+ Ontbreekt voorraad_floriday_leads_key: telling zoals vroeger + melding in de
4913
+ Engine-trace (errorClass 'afhankelijkheid').
4914
+
4915
+ Niet van de Engine en dus NIET aangepast – deze schrijven ook reserved_stock;
4916
+ controleer ze zelf op change_source en de FO-regel:
4917
+ apply_stock_reservation, apply_stock_consumption, promote_trade_item_key,
4918
+ canonicalize_trade_item_stock_key, _migrate_rewrite_stock_key,
4919
+ floriday_ingest_sales_orders.`,
4920
+ },
4798
4921
  {
4799
4922
  number: 1,
4800
4923
  title: "Basiskoppeling via de database",
@@ -5228,6 +5351,116 @@ Zelf rekenen doe je niet.
5228
5351
  order: 9,
5229
5352
  summary: "Levert de documentlayouts. Kiest zelf geen layout en geen printer: de Engine bepaalt welke layout en welke printplek bij een document horen.",
5230
5353
  revisions: [
5354
+ {
5355
+ number: 13,
5356
+ title: "Correctie 1.69.2: eigen traysticker per fust",
5357
+ date: "2026-10-21",
5358
+ summary: "Een tray is een fust, geen laag: de Engine maakt één eigen traysticker per fust.",
5359
+ body: `CORRECTIE ENGINE 1.0.178 – Layouts 1.69.2 (eigen traystickers per fust)
5360
+
5361
+ Vervangt de laag-indeling uit antwoord 12. Een tray is een FUST.
5362
+ - Per orderregel op een kar: order_cart_items.crates opdrachten, één per fust.
5363
+ - tray_nummer / tray_totaal = fust x van y binnen de hele order
5364
+ (volgorde: kar, regel, fust).
5365
+ - tray_producten: één item, het product van die regel (bij een samengesteld
5366
+ product zoals een mixtray het samengestelde product), met
5367
+ aantal = planten per fust (regel, anders product); het laatste fust van een
5368
+ regel krijgt de rest. Optioneel 'onderdelen' als de karregel componenten heeft.
5369
+ - Idempotentie: eigen_traysticker:<order>:<kar>:<karregel>:<fustnummer>:<layout>.
5370
+ - Aantal fusten onbekend: alleen die sticker wacht met "Aantal fusten onbekend".
5371
+ - Verder ongewijzigd: _documenttype 'traysticker', _herkomst 'eigen',
5372
+ _kopieen 1, layout via layout_voor_document, geen logo_url, zelfde vrijgave.`,
5373
+ },
5374
+ {
5375
+ number: 12,
5376
+ title: "Antwoord 1.69.2: eigen traystickers per tray",
5377
+ date: "2026-10-21",
5378
+ summary: "De Engine print traystickers voor eigen orders, één opdracht per tray, via layout_print_document.",
5379
+ body: `ANTWOORD ENGINE 1.0.178 – Layouts 1.69.2 (eigen traystickers)
5380
+
5381
+ Voor eigen orders (HO/MO/AO) maakt de Engine per tray (laag) van de karindeling
5382
+ één opdracht via layout_print_document:
5383
+ - _documenttype 'traysticker', _herkomst 'eigen', _kopieen 1
5384
+ - _layout_id uit logistics_document_for_order(order_id, 'traysticker'), die
5385
+ layout_voor_document aanroept (= fs.eigen_traysticker)
5386
+ - _payload: order_id, order_number, ordernummer, klantnaam, leverdatum,
5387
+ afleverlocatie, cart_id, print_plek_id, tray_nummer, tray_totaal,
5388
+ tray_producten [{ artikelnummer, naam, aantal }]
5389
+ - Geen logo_url: het logo van de eigen organisatie haal je zelf uit de bedrijfsgegevens.
5390
+ - Idempotentie: eigen_traysticker:<order>:<kar>:<laag>:<layout>.
5391
+ Vrijgave: alleen als de instelling Tray-stickers niet op "Niet printen" staat;
5392
+ het moment is de pakbon van de kar (eigen orders hebben geen Floriday-belading).
5393
+ Ontbreekt de trayindeling of de layout: voor die tray geen opdracht, met uitleg;
5394
+ de rest van de order gaat door. Floriday-traystickers zijn ongewijzigd.`,
5395
+ },
5396
+ {
5397
+ number: 11,
5398
+ title: "Verzenddocument: de Engine bepaalt afleverbrief of veilingbrief",
5399
+ date: "2026-10-21",
5400
+ summary: "De Engine vertaalt 'verzenddocument' bij Floriday-orders naar 'afleverbrief' of 'veilingbrief' voordat layout_voor_document wordt gevraagd.",
5401
+ body: `KOPPELPROMPT LAYOUTS EN PRINTERS – verzenddocument (Engine 1.0.176)
5402
+
5403
+ Je ok=false voor 'verzenddocument' bij Floriday-orders (1.69.0) is juist. De Engine
5404
+ lost het op: logistics_document_for_order vertaalt 'verzenddocument' eerst naar het
5405
+ echte document en roept daarna layout_voor_document(order, 'afleverbrief' |
5406
+ 'veilingbrief') aan. Eigen orders: 'afleverbrief'. Je hoeft niets te wijzigen.
5407
+
5408
+ Wil je het zelf lezen: rpc logistics_floriday_shipping_document(p_order_id uuid)
5409
+ -> { ok, documenttype: 'afleverbrief'|'veilingbrief'|null, fulfillment_order_id, reden }.
5410
+
5411
+ Eenduidige bron:
5412
+ public.logistics_slip_shipping_note.fulfillment_order_id
5413
+ -> public.floriday_fulfillment_orders_cache.floriday_id (is_deleted niet true)
5414
+ velden: data->>'type', data->>'isReAuctioning', data->'deliveryNoteCodes'
5415
+ Regel: isReAuctioning = true, of type bevat CLOCK of AUCTION -> veilingbrief;
5416
+ type = DIRECT_SALES met minstens één deliveryNoteCode -> afleverbrief;
5417
+ anders ok=false met reden (niet gokken).`,
5418
+ },
5419
+ {
5420
+ number: 10,
5421
+ title: "Eén beslisregel: layout_voor_document(order, documenttype)",
5422
+ date: "2026-10-21",
5423
+ summary: "Layouts wordt eigenaar van de layoutkeuze per documentsoort en herkomst via één functie die de Engine en Pickschermen aanroepen.",
5424
+ body: `KOPPELPROMPT LAYOUTS EN PRINTERS – automatische documentkeuze (Engine 1.0.176)
5425
+
5426
+ Doel: de gebruiker kiest nergens meer een layout. De keuze welke layout bij een
5427
+ documentsoort en herkomst hoort, is van Layouts. Bouw één functie die alle
5428
+ modules aanroepen:
5429
+
5430
+ public.layout_voor_document(p_order_id uuid, p_documenttype text) RETURNS jsonb
5431
+ { "ok": boolean, "layout_id": uuid|null, "bron": "eigen"|"floriday",
5432
+ "documenttype": text, "breedte_mm": numeric|null, "hoogte_mm": numeric|null,
5433
+ "reden": text|null }
5434
+
5435
+ documenttype dat de Engine meestuurt: pakbon, productiebon, verzenddocument,
5436
+ afleverbrief, veilingbrief, sticker, traysticker, eigen_sticker.
5437
+
5438
+ Beslisregel:
5439
+ - pakbon / productiebon: altijd de standaardlayout van die soort met bron 'eigen'.
5440
+ - verzenddocument, precies één per order:
5441
+ - Floriday-order (orders.order_source = 'floriday'): het document dat Floriday
5442
+ echt gekoppeld heeft (afleverbrief/verzendbrief of veilingbrief) met de
5443
+ Floriday-systeemlayout van die soort.
5444
+ - eigen order (HO/MO/AO): afleverbrief, standaardlayout, bron 'eigen'.
5445
+ - Onduidelijk of ontbreekt: ok=false en een Nederlandse reden. Niet gokken.
5446
+ - sticker: Floriday-order -> Floriday-systeemlayout 'sticker'.
5447
+ - eigen_sticker: eigen order -> standaard stickerlayout bron 'eigen'. Die layout
5448
+ tekent de afbeelding uit payload.sticker_afbeelding = { bucket, pad }
5449
+ (Klanten-opslag van customer_product_stickers).
5450
+ - traysticker: Floriday-systeemlayout 'traysticker'.
5451
+ - Geen (eenduidige) layout: ok=false, reden zoals
5452
+ "Maak of activeer een pakbonlayout in Layouts en printers."
5453
+
5454
+ Spelregels:
5455
+ - STABLE, SECURITY DEFINER, search_path public; EXECUTE voor authenticated en service_role.
5456
+ - Geen omgevingswaarden, geen terugval op een andere soort.
5457
+ - Pas niets aan functies van de Engine aan. Zodra deze functie bestaat, gebruikt
5458
+ de Engine (logistics_document_for_order) alleen nog jouw antwoord; tot die tijd
5459
+ gebruikt de Engine de automatische standaardkeuze en toont Beheer
5460
+ "Layouts is nog niet bijgewerkt – automatische keuze gebruikt".
5461
+ - Opnieuw afdrukken blijft altijd mogelijk; geen tweede actieve origineel per
5462
+ order per soort (bestaande idempotentiesleutel).`,
5463
+ },
5231
5464
  {
5232
5465
  number: 1,
5233
5466
  title: "De Engine kiest de layout, de Layout maker maakt hem",
@@ -1,2 +1,2 @@
1
- export declare const MODULE_VERSION = "1.0.175";
1
+ export declare const MODULE_VERSION = "1.0.180";
2
2
  //# sourceMappingURL=moduleVersion.d.ts.map
@@ -1,2 +1,2 @@
1
1
  // Automatisch gegenereerd door prebuild:lib; niet handmatig aanpassen.
2
- export const MODULE_VERSION = "1.0.175";
2
+ export const MODULE_VERSION = "1.0.180";
@@ -1 +1 @@
1
- {"version":3,"file":"planQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/planQueue.server.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAQ5D,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,2FAA2F;IAC3F,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAwBD,wFAAwF;AACxF,wBAAsB,YAAY,CAChC,EAAE,EAAE,cAAc,EAClB,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAO,GAC3D,OAAO,CAAC,eAAe,CAAC,CAwR1B;AAgCD,iGAAiG;AACjG,eAAO,MAAM,eAAe,0EAA2E,CAAC;AAgCxG,4EAA4E;AAE5E,wBAAsB,cAAc,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtE"}
1
+ {"version":3,"file":"planQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/planQueue.server.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAS5D,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,2FAA2F;IAC3F,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAwBD,wFAAwF;AACxF,wBAAsB,YAAY,CAChC,EAAE,EAAE,cAAc,EAClB,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAO,GAC3D,OAAO,CAAC,eAAe,CAAC,CA8S1B;AAgCD,iGAAiG;AACjG,eAAO,MAAM,eAAe,0EAA2E,CAAC;AAgCxG,4EAA4E;AAE5E,wBAAsB,cAAc,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtE"}
@@ -12,6 +12,7 @@ import { attachIndelingToTasks } from "./loadCarrierTaskSync.server.js";
12
12
  import { trace, newTraceId, classifyError } from "./trace.server.js";
13
13
  import { FLOW_NODE } from "./flowNodes.js";
14
14
  import { completePlannerDiffRuns, skipPlannerDiffRuns } from "./plannerDiff.server.js";
15
+ import { opnieuwOverSeconden } from "./beladingRegels.js";
15
16
  const EMPTY = {
16
17
  claimed: 0,
17
18
  planned: 0,
@@ -103,6 +104,7 @@ export async function runPlanQueue(sb, options = {}) {
103
104
  const bufferId = group.find((g) => g.buffer_id)?.buffer_id ?? null;
104
105
  let blocked = false;
105
106
  let blockedReasonFor = null;
107
+ let bezet = false;
106
108
  await trace(sb, {
107
109
  ...basis,
108
110
  nodeId: FLOW_NODE.ontvangst,
@@ -120,7 +122,10 @@ export async function runPlanQueue(sb, options = {}) {
120
122
  if (!plannedBuffers.has(bufferId)) {
121
123
  plannedBuffers.add(bufferId);
122
124
  const plan = await replanBufferInternal(sb, bufferId);
123
- if (plan.skipped === "locked") {
125
+ if (plan.skipped === "busy") {
126
+ bezet = true;
127
+ }
128
+ else if (plan.skipped === "locked") {
124
129
  result.skippedLocked++;
125
130
  await trace(sb, {
126
131
  ...basis,
@@ -177,7 +182,10 @@ export async function runPlanQueue(sb, options = {}) {
177
182
  }
178
183
  else {
179
184
  const plan = await replanOrderInternal(sb, row.order_id);
180
- if (plan?.skipped === "locked") {
185
+ if (plan?.skipped === "busy") {
186
+ bezet = true;
187
+ }
188
+ else if (plan?.skipped === "locked") {
181
189
  result.skippedLocked++;
182
190
  await trace(sb, {
183
191
  ...basis,
@@ -230,6 +238,22 @@ export async function runPlanQueue(sb, options = {}) {
230
238
  // De blokkade zet de wachtrijregel zelf al op 'geblokkeerd'; die mag niet
231
239
  // alsnog als afgerond worden weggeschreven. Een wachtende vergelijking
232
240
  // krijgt geen "na"-stand en wordt daarom als overgeslagen afgesloten.
241
+ // 1.0.179 (punt 5): lease bezet is geen "klaar". Opdracht blijft open en komt later terug.
242
+ if (bezet) {
243
+ const sec = opnieuwOverSeconden(Number(row.attempts ?? 0));
244
+ await sb.rpc("logistics_plan_retry_later", { p_id: row.id, p_seconds: sec });
245
+ result.skippedLocked++;
246
+ await trace(sb, {
247
+ ...basis,
248
+ step: "Indeling later opnieuw",
249
+ status: "wachtend",
250
+ decision: "Opdracht blijft open",
251
+ reason: "Deze buffer werd op hetzelfde moment al ingedeeld. De order wordt over " + sec + " seconden opnieuw geprobeerd.",
252
+ errorClass: "regel",
253
+ nextStep: "Volgende planronde",
254
+ });
255
+ continue;
256
+ }
233
257
  if (blocked) {
234
258
  // De blokkade raakt soms alleen de buffer-leden zonder kar, niet de
235
259
  // order die deze ronde oppakte (FO-2601389). Sluit die claim dan hier
@@ -1 +1 @@
1
- {"version":3,"file":"ruleEngineSchema.d.ts","sourceRoot":"","sources":["../../src/lib/ruleEngineSchema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ruleEngineSchema.d.ts","sourceRoot":"","sources":["../../src/lib/ruleEngineSchema.ts"],"names":[],"mappings":"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"}
@@ -737,19 +737,12 @@ export const RULE_STEPS = [
737
737
  ],
738
738
  },
739
739
  { key: "packing_slip_station", label: "Pickstation", type: "pickstation" },
740
- {
741
- key: "packing_slip_layout",
742
- label: "Pakbon layout",
743
- type: "layout",
744
- layoutTypes: ["pakbon"],
745
- description: "De pakbon-layout voor dit soort orders. Of gelijke karren gebundeld worden, of er een barcode op staat en hoe een volle kar en een deelkar eruitzien, stel je in de Layout maker in. Op \u201cAutomatisch\u201d pakt de Layout maker zijn eigen actieve layout. Levert Floriday een kant-en-klare pakbon als PDF, dan wordt die altijd gebruikt.",
746
- },
747
740
  {
748
741
  key: "packing_slip_help",
749
742
  label: "Waar stel ik dit in?",
750
743
  type: "guidance",
751
744
  guidance: {
752
- engine: "Hier bepaal je w\u00e1nneer de pakbon vrijkomt, naar welk pickstation hij gaat en welke layout bij dit soort orders hoort.",
745
+ engine: "Hier bepaal je w\u00e1nneer de pakbon vrijkomt, en naar welk pickstation hij gaat. Het document wordt automatisch bepaald uit de order.",
753
746
  layoutMaker: "In de Layout maker teken je de layout zelf, zet je er \u00e9\u00e9n op actief en koppel je printplekken aan computers en printers. Welke printer er print, bepaal je daar.",
754
747
  pickstations: "Op de pickschermen koppel je elk pickstation aan een printplek uit de Layout maker. Ontbreekt die koppeling, dan blijft de printopdracht wachten in plaats van op een willekeurige printer te belanden.",
755
748
  },
@@ -819,19 +812,12 @@ export const RULE_STEPS = [
819
812
  },
820
813
  ],
821
814
  },
822
- {
823
- key: "sticker_layout",
824
- label: "Welke layout voor dit soort orders?",
825
- type: "layout",
826
- layoutTypes: ["sticker", "etiket"],
827
- description: "Kies de layout die bij dit soort orders hoort. Op \u201cAutomatisch\u201d pakt de Layout maker zijn eigen actieve layout. Levert Floriday kant-en-klare stickers als PDF, dan worden die altijd gebruikt.",
828
- },
829
815
  {
830
816
  key: "sticker_help",
831
817
  label: "Waar stel ik dit in?",
832
818
  type: "guidance",
833
819
  guidance: {
834
- engine: "Hier bepaal je w\u00e1nneer de stickers vrijkomen, naar welk pickstation ze gaan en welke layout bij dit soort orders hoort.",
820
+ engine: "Hier bepaal je w\u00e1nneer de stickers vrijkomen, en naar welk pickstation ze gaan. Het document wordt automatisch bepaald uit de order.",
835
821
  layoutMaker: "In de Layout maker teken je de layout zelf, zet je er \u00e9\u00e9n op actief en koppel je printplekken aan computers en printers. Welke printer er print, bepaal je daar.",
836
822
  pickstations: "Op de pickschermen koppel je elk pickstation aan een printplek uit de Layout maker. Ontbreekt die koppeling, dan blijft de printopdracht wachten in plaats van op een willekeurige printer te belanden.",
837
823
  },
@@ -855,25 +841,12 @@ export const RULE_STEPS = [
855
841
  ],
856
842
  },
857
843
  { key: "shipping_note_station", label: "Pickstation", type: "pickstation" },
858
- {
859
- key: "shipping_note_layout",
860
- label: "Verzendbrief voor BVO orders",
861
- type: "layout",
862
- layoutTypes: [
863
- "verzendlabel",
864
- "transportdocument",
865
- "afleverbrief",
866
- "veilingbrief",
867
- "veilingbon",
868
- ],
869
- description: "\u00c9\u00e9n layout voor de verzend-, aflever- en veilingbrief van BVO orders. Op \u201cAutomatisch\u201d pakt de Layout maker zijn eigen actieve layout. Levert Floriday een kant-en-klare brief als PDF, dan wordt die altijd gebruikt.",
870
- },
871
844
  {
872
845
  key: "shipping_note_help",
873
846
  label: "Waar stel ik dit in?",
874
847
  type: "guidance",
875
848
  guidance: {
876
- engine: "Hier bepaal je w\u00e1nneer de verzendbrief vrijkomt, naar welk pickstation hij gaat en welke layout bij dit soort orders hoort.",
849
+ engine: "Hier bepaal je w\u00e1nneer de verzendbrief vrijkomt, en naar welk pickstation hij gaat. Het document wordt automatisch bepaald uit de order.",
877
850
  layoutMaker: "In de Layout maker teken je de layout zelf, zet je er \u00e9\u00e9n op actief en koppel je printplekken aan computers en printers. Welke printer er print, bepaal je daar.",
878
851
  pickstations: "Op de pickschermen koppel je elk pickstation aan een printplek uit de Layout maker. Ontbreekt die koppeling, dan blijft de printopdracht wachten in plaats van op een willekeurige printer te belanden.",
879
852
  },
@@ -903,19 +876,12 @@ export const RULE_STEPS = [
903
876
  ],
904
877
  },
905
878
  { key: "production_note_station", label: "Pickstation", type: "pickstation" },
906
- {
907
- key: "production_note_layout",
908
- label: "Welke layout voor dit soort orders?",
909
- type: "layout",
910
- layoutTypes: ["productiebon", "magazijnlijst"],
911
- description: "Kies de layout die bij dit soort orders hoort. Laat je dit op \u201cAutomatisch\u201d staan, dan pakt de Layout maker zijn eigen actieve layout.",
912
- },
913
879
  {
914
880
  key: "production_note_help",
915
881
  label: "Waar stel ik dit in?",
916
882
  type: "guidance",
917
883
  guidance: {
918
- engine: "Hier bepaal je w\u00e1nneer de productiebon vrijkomt, naar welk pickstation hij gaat en welke layout bij dit soort orders hoort.",
884
+ engine: "Hier bepaal je w\u00e1nneer de productiebon vrijkomt, en naar welk pickstation hij gaat. Het document wordt automatisch bepaald uit de order.",
919
885
  layoutMaker: "In de Layout maker teken je de layout zelf, zet je er \u00e9\u00e9n op actief en koppel je printplekken aan computers en printers. Welke printer er print, bepaal je daar.",
920
886
  pickstations: "Op de pickschermen koppel je elk pickstation aan een printplek uit de Layout maker. Ontbreekt die koppeling, dan blijft de printopdracht wachten in plaats van op een willekeurige printer te belanden.",
921
887
  },
@@ -1 +1 @@
1
- {"version":3,"file":"ruleEngineWizard.d.ts","sourceRoot":"","sources":["../../src/lib/ruleEngineWizard.ts"],"names":[],"mappings":"AAQA,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,SAAS,EAEf,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,2EAA2E;IAC3E,cAAc,EAAE,OAAO,CAAC;CACzB;AAeD,eAAO,MAAM,YAAY,EAAE,UAAU,EAsDpC,CAAC;AA+BF,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAEzD;AAwED,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAE9D;AAyCD,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAStF"}
1
+ {"version":3,"file":"ruleEngineWizard.d.ts","sourceRoot":"","sources":["../../src/lib/ruleEngineWizard.ts"],"names":[],"mappings":"AAQA,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,SAAS,EAEf,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,2EAA2E;IAC3E,cAAc,EAAE,OAAO,CAAC;CACzB;AAeD,eAAO,MAAM,YAAY,EAAE,UAAU,EAsDpC,CAAC;AA+BF,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAEzD;AAoED,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAE9D;AAyCD,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAStF"}
@@ -137,13 +137,11 @@ const EXTRA_HELP = {
137
137
  packing_slip_release: "Bepaalt op welk moment de pakbon bij het pickstation verschijnt.",
138
138
  packing_slip_hours_before: "Zoveel uur vóór het picken staat de pakbon klaar.",
139
139
  packing_slip_station: "Het pickstation waar de pakbon uitgeprint wordt.",
140
- packing_slip_layout: "De layout die de Engine bij elke pakbon meestuurt. Bundelen van gelijke karren, de barcode en het verschil tussen een volle kar en een deelkar stel je in de Layout maker in.",
141
140
  sticker_release: "Bepaalt op welk moment de stickers bij het pickstation verschijnen. Kies \u201cgelijk met de bijbehorende pakbon\u201d als sticker en pakbon altijd samen uit de printer moeten komen.",
142
141
  sticker_hours_before: "Zoveel uur vóór het picken staan de stickers klaar.",
143
142
  sticker_station: "Het pickstation waar de stickers uitgeprint worden.",
144
143
  shipping_note_release: "Bepaalt op welk moment de verzendbrief beschikbaar komt.",
145
144
  shipping_note_station: "Het pickstation waar de verzendbrief uitgeprint wordt.",
146
- shipping_note_layout: "\u00c9\u00e9n layout voor de verzend-, aflever- en veilingbrief van BVO orders.",
147
145
  production_note_release: "Bepaalt op welk moment de productiebon beschikbaar komt.",
148
146
  production_note_station: "Het pickstation waar de productiebon uitgeprint wordt.",
149
147
  control_mode: "Hoe je controleert of de kar klopt voordat hij weggaat. Bij 'Scannen voor afmelden' is één pakbonscan genoeg en wordt de hele kar direct afgemeld.",
@@ -377,7 +377,7 @@ export async function runShippingNoteQueue(sb, options = {}) {
377
377
  const printPlekId = String(slipPayload["print_plek_id"] ?? "").trim() || null;
378
378
  const cartId = slipPayload["cart_id"] ?? row.cart_id;
379
379
  // Layout op id: de actieve Floriday-afleverbrief (bij meerdere de standaard).
380
- const layout = await floridayLayout(sb, "afleverbrief");
380
+ const layout = await floridayLayout(sb, "afleverbrief", row.order_id);
381
381
  if (!layout.layoutId) {
382
382
  await sb.rpc("logistics_slip_note_hold_layout", { _id: row.id, _reason: layout.reden });
383
383
  run.waiting++;
@@ -9,9 +9,34 @@ export interface StickerRun {
9
9
  warnings: number;
10
10
  errors: string[];
11
11
  }
12
+ interface Row {
13
+ id: string;
14
+ soort: "sticker" | "traysticker" | "eigen_sticker" | "eigen_traysticker";
15
+ bron_id: string;
16
+ eigen_sticker_id?: string | null;
17
+ order_id: string | null;
18
+ order_number: string | null;
19
+ cart_id: string | null;
20
+ kopieen: number;
21
+ breedte_mm: number | null;
22
+ hoogte_mm: number | null;
23
+ print_plek_id: string | null;
24
+ fulfillment_order_id: string | null;
25
+ status: string;
26
+ attempts: number;
27
+ sticker_type?: string | null;
28
+ print_job_id?: string | null;
29
+ herprint_reden?: string | null;
30
+ herprint_requested_at?: string | null;
31
+ }
32
+ /** Opslag van eigen stickers (Klanten-module, customer_product_stickers). */
33
+ export declare const EIGEN_STICKER_BUCKET = "customer-stickers";
34
+ /** Documentsoort voor de centrale documentkeuze. */
35
+ export declare function documentSoort(soort: Row["soort"]): string;
12
36
  export declare function runStickerQueue(sb: SupabaseClient, opts?: {
13
37
  limit?: number;
14
38
  }): Promise<StickerRun>;
15
39
  /** Reden die de layoutkeuze geeft als er geen (eenduidige) Floriday-layout is. */
16
40
  export declare function isGeenLayoutReden(reden: unknown): boolean;
41
+ export {};
17
42
  //# sourceMappingURL=stickerQueue.server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stickerQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/stickerQueue.server.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAiB5D,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAoCD,wBAAsB,eAAe,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CA8T5G;AAoGD,kFAAkF;AAClF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGzD"}
1
+ {"version":3,"file":"stickerQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/stickerQueue.server.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAkB5D,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,UAAU,GAAG;IACX,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,SAAS,GAAG,aAAa,GAAG,eAAe,GAAG,mBAAmB,CAAC;IACzE,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC;AAKD,6EAA6E;AAC7E,eAAO,MAAM,oBAAoB,sBAAsB,CAAC;AAExD,oDAAoD;AACpD,wBAAgB,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,MAAM,CAEzD;AAaD,wBAAsB,eAAe,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAuW5G;AAoGD,kFAAkF;AAClF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGzD"}