@flowselections/logistiek-engine 1.0.138 → 1.0.147

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 (47) hide show
  1. package/dist-lib/components/GearchiveerdeOrdersCard.d.ts +2 -0
  2. package/dist-lib/components/GearchiveerdeOrdersCard.d.ts.map +1 -0
  3. package/dist-lib/components/GearchiveerdeOrdersCard.js +32 -0
  4. package/dist-lib/components/GeblokkeerdeOrdersCard.d.ts.map +1 -1
  5. package/dist-lib/components/GeblokkeerdeOrdersCard.js +1 -1
  6. package/dist-lib/components/PlanWachtrijPage.d.ts.map +1 -1
  7. package/dist-lib/components/PlanWachtrijPage.js +20 -13
  8. package/dist-lib/components/RuleEnginePage.d.ts.map +1 -1
  9. package/dist-lib/components/RuleEnginePage.js +24 -3
  10. package/dist-lib/hooks/useGeblokkeerdeOrders.d.ts +20 -0
  11. package/dist-lib/hooks/useGeblokkeerdeOrders.d.ts.map +1 -1
  12. package/dist-lib/hooks/useGeblokkeerdeOrders.js +57 -0
  13. package/dist-lib/index.d.ts +1 -0
  14. package/dist-lib/index.d.ts.map +1 -1
  15. package/dist-lib/index.js +1 -0
  16. package/dist-lib/integrations/supabase/types.d.ts +728 -0
  17. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  18. package/dist-lib/lib/briefTransport.server.d.ts +17 -0
  19. package/dist-lib/lib/briefTransport.server.d.ts.map +1 -0
  20. package/dist-lib/lib/briefTransport.server.js +41 -0
  21. package/dist-lib/lib/controlScan.server.d.ts.map +1 -1
  22. package/dist-lib/lib/controlScan.server.js +16 -1
  23. package/dist-lib/lib/handlers/logistics-tick.server.js +21 -0
  24. package/dist-lib/lib/layoutPrint.server.d.ts +18 -0
  25. package/dist-lib/lib/layoutPrint.server.d.ts.map +1 -1
  26. package/dist-lib/lib/layoutPrint.server.js +32 -1
  27. package/dist-lib/lib/logisticsTasks.d.ts +1 -0
  28. package/dist-lib/lib/logisticsTasks.d.ts.map +1 -1
  29. package/dist-lib/lib/logisticsTasks.js +2 -1
  30. package/dist-lib/lib/modulePrompts.d.ts +1 -0
  31. package/dist-lib/lib/modulePrompts.d.ts.map +1 -1
  32. package/dist-lib/lib/modulePrompts.js +338 -1
  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 +13 -0
  37. package/dist-lib/lib/ruleEngineSchema.d.ts.map +1 -1
  38. package/dist-lib/lib/ruleEngineSchema.js +18 -0
  39. package/dist-lib/lib/shippingNoteQueue.server.d.ts.map +1 -1
  40. package/dist-lib/lib/shippingNoteQueue.server.js +18 -1
  41. package/dist-lib/lib/stickerQueue.server.d.ts +15 -0
  42. package/dist-lib/lib/stickerQueue.server.d.ts.map +1 -0
  43. package/dist-lib/lib/stickerQueue.server.js +349 -0
  44. package/dist-lib/lib/stickerRules.d.ts +38 -0
  45. package/dist-lib/lib/stickerRules.d.ts.map +1 -0
  46. package/dist-lib/lib/stickerRules.js +111 -0
  47. package/package.json +2 -2
@@ -13,9 +13,10 @@ import { LOGISTICS_MODULES } from "./logisticsTasks";
13
13
  * documentlayouts waarmee de Engine print.
14
14
  */
15
15
  export const PROMPT_MODULE_LABELS = {
16
- ...LOGISTICS_MODULES,
16
+ ...(({ logistiek: _l, ...rest }) => rest)(LOGISTICS_MODULES),
17
17
  layoutmaker: "Layout maker (pakbonnen, verzendbrieven, extra)",
18
18
  floridaykoppeling: "Floriday koppeling (authenticatie en gateway)",
19
+ dashboards: "Dashboards (dashboard-erp-kwekers)",
19
20
  };
20
21
  function sharedBlock(moduleKey) {
21
22
  const key = moduleKey === "<modulesleutel>" ? "<modulesleutel>" : moduleKey;
@@ -978,6 +979,45 @@ CONTROLELIJST
978
979
  [ ] Geen indeling in rood met de reden.
979
980
  `,
980
981
  },
982
+ {
983
+ number: 22,
984
+ title: "Geen eigen ladingdragercontrole meer; blokkade-alarm alleen bij definitieve blokkade",
985
+ date: "2026-10-15",
986
+ summary: "De Engine beslist alleen over belading; mail pas bij een definitieve blokkade, sluiten na geslaagde indeling, koper als klant.",
987
+ body: `WAAROM
988
+ Zeven orders (FO-2601401, 406, 411, 414, 416, 420, 423) kregen een mail
989
+ "kan niet worden ingedeeld, ladingdrager uitgeschakeld", terwijl de Engine ze
990
+ binnen een minuut wel indeelde. De tekst "Deze belading gebruikt een
991
+ ladingdrager die is uitgeschakeld" komt uit de opslagcontrole van deze module,
992
+ niet uit de Engine. In de mail stond de afleverlocatie als klant.
993
+
994
+ WAT JE DOET
995
+ (1) Zoek eerst uit welke ladingdrager jouw controle als uitgeschakeld zag
996
+ (id, naam) en waarom dat afwijkt van de werkwijze van de Engine. Meld dat
997
+ terug vóór je verder bouwt.
998
+ (2) Verwijder je eigen controle op ladingdragers. Alleen de Engine beslist of
999
+ een belading kan. Stuur je eigen controletekst niet meer als reden mee bij
1000
+ het aanmelden.
1001
+ (3) Blokkade-mail alleen als de Engine zegt dat de order definitief
1002
+ geblokkeerd is:
1003
+ supabase.rpc("logistics_order_definitively_blocked", { p_order_id })
1004
+ -> { orderId, definitief, status, pogingen, redenCode, reden }
1005
+ Mail alleen bij definitief = true. Gebruik "reden" als tekst.
1006
+ (4) Sluit het alarm automatisch zodra de order is ingedeeld
1007
+ (definitief = false en status "done"), op order-id.
1008
+ (5) Bij "Klant" staat de koper, via het klant-id van de order. De
1009
+ afleverlocatie komt op een eigen regel "Afleverlocatie".
1010
+
1011
+ REGELS
1012
+ - Match op id, nooit op naam. Niets hardcoded.
1013
+
1014
+ CONTROLELIJST
1015
+ [ ] Terugmelding: welke ladingdrager en waarom de afwijking.
1016
+ [ ] Geen eigen ladingdragercontrole meer.
1017
+ [ ] Nieuwe Floriday-order die wel wordt ingedeeld: geen mail.
1018
+ [ ] Mail noemt de koper als klant.
1019
+ [ ] Meld terug met je pakketversie.`,
1020
+ },
981
1021
  ],
982
1022
  },
983
1023
  afhandeling: {
@@ -1945,6 +1985,28 @@ CONTROLELIJST
1945
1985
  [ ] Na bulkcontrole staat in logistics_control_scan bron = 'bulk' voor elke kar.
1946
1986
  [ ] Een kar die al met de scanner is afgemeld, krijgt geen tweede scan.`,
1947
1987
  },
1988
+ {
1989
+ number: 22,
1990
+ title: "Stickermeldingen in Dagdetails en stickeraanvragen",
1991
+ date: "2026-10-14",
1992
+ summary: "Vooraf-melding sticker/etiket tonen in Dagdetails; stickeraanvragen van kopers tonen en accepteren/weigeren vóór expiresOn.",
1993
+ body: `WAT JE BOUWT
1994
+ (a) Afhandeling › Dagdetails: toon per order logistics_order_sticker_meldingen
1995
+ (order_id), letterlijk, zolang opgelost_op leeg is.
1996
+ (b) Stickeraanvragen (/customer-sticker-upload-requests, via de
1997
+ Floriday-koppeling): toon open aanvragen met pdf-preview en expiresOn, en
1998
+ laat accepteren of weigeren vóór het verlopen. Afhandeling is eigenaar van
1999
+ dit scherm; de Floriday-koppeling levert sync/preview/accept/decline.
2000
+ Verlopen aanvragen grijs, niet meer te beantwoorden.
2001
+
2002
+ REGELS
2003
+ - Match op id. Niets hardcoded. Geen eigen stickerprint.
2004
+
2005
+ CONTROLELIJST
2006
+ [ ] Melding staat bij de order in Dagdetails.
2007
+ [ ] Aanvraag accepteren/weigeren werkt vóór expiresOn.
2008
+ [ ] Meld terug met je pakketversie.`,
2009
+ },
1948
2010
  ],
1949
2011
  },
1950
2012
  pickschermen: {
@@ -3645,6 +3707,79 @@ CONTROLELIJST
3645
3707
  [ ] Order op een gedeelde kar geeft geen "cartplan.missing"-melding.
3646
3708
  [ ] Twee keer aanroepen, ook na een afgehandelde melding: geen 409.
3647
3709
  [ ] Verdwenen rij: wachtrij ververst, duidelijke tekst, geen 500 in beeld.
3710
+ [ ] Meld terug met je pakketversie.`,
3711
+ },
3712
+ {
3713
+ number: 43,
3714
+ title: "Stickers: alleen de stand tonen",
3715
+ date: "2026-10-14",
3716
+ summary: "Pickschermen voert geen print.sticker meer uit; toont stand en vooraf-melding van de Engine.",
3717
+ body: `WAAROM
3718
+ De Logistiek Engine is eigenaar van print.sticker en print.traysticker. Twee
3719
+ printers van dezelfde sticker geven dubbele etiketten.
3720
+
3721
+ WAT JE BOUWT
3722
+ (a) Voer geen stickertaken uit en roep geen customer-sticker-pdf op.
3723
+ (b) Toon per kar logistics_cart_sticker_state(cart_id): per sticker de status
3724
+ (wacht_op_moment, klaar, in_printwachtrij, geblokkeerd, afgemeld,
3725
+ niet_printen) en reden.
3726
+ (c) Toon per order logistics_order_sticker_meldingen(order_id) bovenaan het
3727
+ pickstation, letterlijk, bijv. "Voor deze order is een sticker 100×62 mm
3728
+ nodig; op Pickstation 1 zit 28×89 mm."
3729
+
3730
+ REGELS
3731
+ - Alleen lezen, op id. Niets hardcoded.
3732
+
3733
+ CONTROLELIJST
3734
+ [ ] Geen eigen stickerprint meer.
3735
+ [ ] Stand per kar en melding per order zichtbaar.
3736
+ [ ] Meld terug met je pakketversie.`,
3737
+ },
3738
+ {
3739
+ number: 44,
3740
+ title: "Stickerstand op het openbare pickstation",
3741
+ date: "2026-10-15",
3742
+ summary: "Anon-leesfuncties met slugcontrole; omhulsel toegang/stand/meldingen; nooit '0 stickers' bij geen toegang.",
3743
+ body: `AANVULLING; bouwt voort op koppelprompt 43. Vereist Logistiek Engine 1.0.146.
3744
+
3745
+ VOLGORDE
3746
+ Eerst Pickschermen bijwerken voor het omhulsel, daarna pas Engine 1.0.146
3747
+ installeren.
3748
+
3749
+ EERST CONTROLEREN
3750
+ Controleer eerst wat 1.0.37 doet met het omhulsel. Het pickstation mag nooit
3751
+ '0 stickers' of 'klaar' tonen als het omhulsel niet herkend wordt; dan altijd
3752
+ 'Stickerstand onbekend'.
3753
+
3754
+ WAT DE ENGINE LEVERT (anon en authenticated)
3755
+ pickstation_cart_sticker_state(p_slug text, p_cart_id uuid) -> jsonb
3756
+ pickstation_order_sticker_meldingen(p_slug text, p_order_id uuid) -> jsonb
3757
+
3758
+ Toegang alleen als p_slug een actief pick_station is en de kar
3759
+ (payload.cartId) of order (payload.orderId) in een niet-geannuleerde
3760
+ pick_queue-rij van dat station staat. Match op id en slug, nooit op naam.
3761
+
3762
+ UITKOMSTEN
3763
+ - Kar met toegang: { "toegang": true, "stand": { cartId, totaal, inPrintwachtrij, wachtend, geblokkeerd, regels[] } }
3764
+ - Order met toegang: { "toegang": true, "meldingen": [ { soort, stickerId, melding, plek, benodigd, geladen, sinds } ] }
3765
+ - Geen toegang: { "toegang": false, "reden": "onbekend_of_inactief_station" | "niet_in_wachtrij_station" }
3766
+
3767
+ REGELS VOOR HET SCHERM
3768
+ - toegang = false, toegang ontbreekt, onbekende vorm of fout bij de aanroep
3769
+ -> "Stickerstand onbekend". Nooit "0 stickers" of "klaar".
3770
+ - toegang = true en stand.totaal = 0 -> "Geen stickers nodig voor deze kar".
3771
+ Niet leeg, niet "klaar" en niet "onbekend".
3772
+ - toegang = true en stand.totaal > 0 -> aantallen tonen; "klaar" alleen als
3773
+ wachtend = 0 en geblokkeerd = 0.
3774
+ - Lege meldingen-array bij toegang = true: geen formaatmeldingen.
3775
+ - Roep logistics_cart_sticker_state en logistics_order_sticker_meldingen niet
3776
+ meer aan vanuit het openbare pickstation.
3777
+ - Wijzig geen rechten of RLS.
3778
+
3779
+ CONTROLELIJST
3780
+ [ ] Omhulsel herkend; onbekende vorm geeft "Stickerstand onbekend".
3781
+ [ ] Kar van ander station of onbekende slug: "Stickerstand onbekend".
3782
+ [ ] totaal = 0: "Geen stickers nodig voor deze kar".
3648
3783
  [ ] Meld terug met je pakketversie.`,
3649
3784
  },
3650
3785
  ],
@@ -4618,6 +4753,94 @@ CONTROLELIJST
4618
4753
  [ ] Printerkeuze gelijk aan printPdf voor dezelfde printplek/werkplek.
4619
4754
  [ ] Geen URL's, sleutels, project-refs, klantnamen of vaste database-id's.`,
4620
4755
  },
4756
+ {
4757
+ number: 6,
4758
+ title: "Stickers en tray-stickers 1-op-1 printen",
4759
+ date: "2026-10-14",
4760
+ summary: "Documentsoorten sticker en traysticker als kant-en-klare Floriday-pdf printen; geladen etiket blijft leidend.",
4761
+ body: `WAAROM
4762
+ De Logistiek Engine zet Floriday-klantstickers (documentsoort "sticker") en
4763
+ tray-stickers (documentsoort "traysticker") via layout_print_document in de
4764
+ Printwachtrij, met layout_id (Floriday-layout op id), cart_id, print_plek_id,
4765
+ _kopieen en payload.pdf_opslag = { bucket, pad } naast pdf_url.
4766
+
4767
+ WAT JE BOUWT
4768
+ (a) Voeg "traysticker" toe aan de documentsoorten (doc_layout_type) en maak een
4769
+ actieve Floriday-layout voor tray-stickers mogelijk. Zonder layout wacht de
4770
+ Engine met de melding "Geen actieve Floriday-layout voor traysticker".
4771
+ (b) Druk beide soorten 1-op-1 af als kant-en-klare pdf, met het opgegeven aantal
4772
+ kopieën, op de labelprinter van de printplek.
4773
+ (c) De Engine gebruikt jullie bestaande geladen_etiketten(_werkplek_id,
4774
+ _print_plek_id) uit 1.56.0, op id, voor de formaatcontrole. Geen
4775
+ PrintNode-driverformaten. Laat die functie aanroepbaar voor service_role en
4776
+ geef per labelprinter printer_id, naam en breedte_mm/hoogte_mm van het
4777
+ geladen etiket terug.
4778
+ (d) Idempotency-sleutel: sticker:<sticker_id>:<cart_id>:<layout_id> en
4779
+ traysticker:<delivery_order_id>:<cart_id>:<layout_id>; dubbel = bestaand
4780
+ opdracht-id teruggeven.
4781
+
4782
+ REGELS
4783
+ - Match op id. Niets hardcoded.
4784
+
4785
+ CONTROLELIJST
4786
+ [ ] traysticker bestaat als documentsoort.
4787
+ [ ] Sticker-pdf komt 1-op-1 en met juiste kopieën uit de labelprinter.
4788
+ [ ] geladen_etiketten geeft breedte_mm/hoogte_mm per printer.
4789
+ [ ] Meld terug met je pakketversie.`,
4790
+ },
4791
+ {
4792
+ number: 7,
4793
+ title: "Vervoerder en ophaalmoment op de eigen afleverbrief",
4794
+ date: "2026-10-14",
4795
+ summary: "Lees vervoerder, ophaalmoment en ophaaladres uit de payload van verzend- en afleverbrieven; ontbrekend veld = regel niet tonen.",
4796
+ body: `WAT DE ENGINE MEESTUURT
4797
+ Bij elke verzendbrief en afleverbrief na controlescan, uit eigen gegevens op id:
4798
+ - payload.vervoerder.naam (alleen als bekend)
4799
+ - payload.vervoerder.code (optioneel)
4800
+ - payload.ophaalmoment (ISO-tijd in UTC, bijv. 2026-10-15T07:30:00Z)
4801
+ - payload.ophaaladres (optioneel; wordt nu nog niet gevuld, er is geen eigen bron)
4802
+
4803
+ WAT JE BOUWT
4804
+ (a) Toon deze velden op de eigen afleverbrief. Ophaalmoment in Amsterdamse tijd.
4805
+ (b) Ontbreekt een veld, laat die regel weg. Vul nooit een standaardvervoerder of
4806
+ -tijd in.
4807
+ (c) De testprint-uitzondering (payload.is_testprint = true) in
4808
+ logistics_require_cart_on_packing_slip staat nu in de Engine-migratie.
4809
+ Verander die functie niet meer zelf; vraag wijzigingen aan bij de Engine.
4810
+
4811
+ CONTROLELIJST
4812
+ [ ] Vervoerder en ophaalmoment zichtbaar op de afleverbrief als ze zijn meegestuurd.
4813
+ [ ] Ontbrekend veld = geen lege regel.
4814
+ [ ] Meld terug met je pakketversie.`,
4815
+ },
4816
+ {
4817
+ number: 8,
4818
+ title: "Testpakbon zonder kar en zonder barcode",
4819
+ date: "2026-10-15",
4820
+ summary: "Een pakbon met payload.is_testprint = true komt ook door de barcodecontrole; hij krijgt geen kar en geen barcode.",
4821
+ body: `WAT DE ENGINE DOET (vanaf 1.0.143)
4822
+ De uitzondering voor testafdrukken staat nu ook in
4823
+ public.logistics_require_pakbon_barcode() (Engine-migratie). Alleen de
4824
+ letterlijke waarde true van payload.is_testprint telt; elke andere waarde
4825
+ ("ja", "1", false, ontbrekend) valt onder de gewone regel en wordt geweigerd
4826
+ als er geen kar is.
4827
+
4828
+ Een testpakbon krijgt geen barcode en geen cart_id: de payload blijft precies
4829
+ zoals jij hem aanlevert.
4830
+
4831
+ WAT JE BOUWT
4832
+ (a) Stuur bij een testpakbon is_testprint als JSON-boolean true mee.
4833
+ (b) Laat het barcode-element op een testpakbon leeg (of toon "TESTAFDRUK");
4834
+ verzin geen barcode.
4835
+ (c) Pas logistics_require_pakbon_barcode en logistics_require_cart_on_packing_slip
4836
+ niet zelf aan; vraag wijzigingen aan bij de Engine.
4837
+
4838
+ CONTROLELIJST
4839
+ [ ] Testpakbon zonder kar wordt aangenomen in de Printwachtrij.
4840
+ [ ] Testpakbon toont geen barcode.
4841
+ [ ] Gewone pakbon zonder kar wordt nog steeds geweigerd.
4842
+ [ ] Meld terug met je pakketversie.`,
4843
+ },
4621
4844
  ],
4622
4845
  },
4623
4846
  floridaykoppeling: {
@@ -4774,6 +4997,120 @@ CONTROLELIJST
4774
4997
  [ ] Binnen een uur staat in logistics_base_url_checks een regel met status
4775
4998
  "geslaagd". Daarna toont de minuutronde de Engine-versie uit de Shell.`,
4776
4999
  },
5000
+ {
5001
+ number: 4,
5002
+ title: "Afleverbrief-pdf: versies bewaren, nooit stil overschrijven",
5003
+ date: "2026-10-14",
5004
+ summary: "Een nieuwe versie van een afleverbrief krijgt een eigen pad; de cacherij wijst op id naar de nieuwste, oude versies blijven staan.",
5005
+ body: `WAAROM
5006
+ Layouts en printers drukt de Floriday-afleverbrief af en herprint die ook dagen
5007
+ later via de blijvende verwijzing { bucket, pad } die de Engine meestuurt (het
5008
+ pad uit floriday_logistic_labels_cache). Nu uploadt ensureLabelInStorage met
5009
+ upsert: true op <koppeling-id>/<fulfillmentOrderId>/<labelcode>.pdf. Haalt de
5010
+ koppeling na een logistieke correctie een nieuwe versie op, dan wordt de oude
5011
+ stil overschreven en is een eerdere print niet meer terug te vinden.
5012
+
5013
+ WAT JE BOUWT
5014
+ (a) Sla een nieuwe versie op onder een eigen pad met versie of tijdstip, bijv.
5015
+ <koppeling-id>/<fulfillmentOrderId>/<labelcode>-v2.pdf. Werk de cacherij
5016
+ (koppeling + fulfillment order + labelcode, op id) bij naar de nieuwste
5017
+ versie en laat de oude versie in de opslag staan. Geen upsert: false
5018
+ (dan mislukt het opslaan van een gecorrigeerde afleverbrief).
5019
+ (b) Ruim bestanden in floriday-logistic-labels niet automatisch op. Een
5020
+ eventuele opschoning alleen als die bewust is ingesteld, en nooit eerder
5021
+ dan 90 dagen na de leverdatum.
5022
+
5023
+ REGELS
5024
+ - Match op id, nooit op naam.
5025
+ - Geen URL's, sleutels, project-refs, klantnamen of vaste database-id's in
5026
+ code of migraties.
5027
+
5028
+ CONTROLELIJST
5029
+ [ ] Tweede versie voor dezelfde fulfillment order geeft een nieuw pad; het oude
5030
+ bestand bestaat nog.
5031
+ [ ] De cacherij wijst naar het nieuwste pad.
5032
+ [ ] Er is geen automatische opruiming van deze map.`,
5033
+ },
5034
+ {
5035
+ number: 5,
5036
+ title: "Klantstickers: afmelden, tray-stickers op id, versies bewaren",
5037
+ date: "2026-10-14",
5038
+ summary: "Afmeldfunctie voor klantstickers, tray-stickers op fulfillment order, stickerpdf's niet stil overschrijven, cronlink uit de omgeving.",
5039
+ body: `WAAROM
5040
+ De Logistiek Engine is nu eigenaar van het printen van Floriday-stickers
5041
+ (klantstickers en tray-stickers). Hij haalt pdf's alleen via deze koppeling op
5042
+ en roept Floriday nooit rechtstreeks aan.
5043
+
5044
+ WAT JE BOUWT
5045
+ (a) Gateway-export runCustomerStickersHandled(supabase, { stickerIds: string[] })
5046
+ -> { ok: boolean, error?: string }. Roept PATCH /customer-stickers/handled
5047
+ aan (scope sticker:write) met de stickerIds op id. De Engine roept dit pas
5048
+ aan na de goedgekeurde controlescan van alle karren met die sticker.
5049
+ Bevestig in je terugmelding de exacte body volgens de Suppliers API 2026v1.
5050
+ (b) Sync van customer-stickers: bewaar het volledige object (o.a.
5051
+ stickerFileInformation.numberOfCopies/numberOfPages/shouldBePrinted/
5052
+ deliverSeparately/stickerProvidedBy, stickerSize, compositions[],
5053
+ isHandled, isDeleted, salesOrderId, salesOrderCorrectionRequestId) in
5054
+ floriday_customer_stickers_cache.data. Het veld quantity bestaat niet in
5055
+ Floriday; vul het niet met een verzonnen waarde.
5056
+ (c) Tray-stickers: runPdf kind "tray-stickers" moet ook werken met
5057
+ fulfillmentOrderId (GET /fulfillment-orders/{fulfillmentOrderId}/stickers).
5058
+ De Engine stuurt nu deliveryOrderId; accepteer beide, op id. Geef in het
5059
+ antwoord storagePath mee.
5060
+ (d) Sticker- en tray-pdf's: geen upsert op hetzelfde pad. Nieuwe versie = eigen
5061
+ pad, cache op id naar de nieuwste, oude bewaren; geen opruiming binnen 90
5062
+ dagen na leverdatum.
5063
+ (e) De sticker-cron bevat een vaste projectlink. Lees die uit de omgeving
5064
+ (instelling of secret) en fail closed als hij ontbreekt.
5065
+
5066
+ REGELS
5067
+ - Match op id. Geen URL's, sleutels, project-refs of vaste id's in code of
5068
+ migraties.
5069
+
5070
+ CONTROLELIJST
5071
+ [ ] runCustomerStickersHandled bestaat en meldt een sticker af op id.
5072
+ [ ] Cache bevat stickerFileInformation en stickerSize uit Floriday.
5073
+ [ ] Tray-stickers op fulfillmentOrderId geven een pdf met storagePath.
5074
+ [ ] Geen vaste projectlink meer in de cron.
5075
+ [ ] Meld terug met je pakketversie.`,
5076
+ },
5077
+ ],
5078
+ },
5079
+ dashboards: {
5080
+ order: 11,
5081
+ summary: "Meldingencentrum: toont meldingen uit de modules en volgt hun status.",
5082
+ revisions: [
5083
+ {
5084
+ number: 1,
5085
+ title: "Meldingencentrum: bron uitzoeken, automatisch sluiten, geen verzonden orders",
5086
+ date: "2026-10-15",
5087
+ summary: "Zoek de bron van de 2057 open meldingen uit, sluit meldingen als de bronmodule ze sluit en verberg verzonden/geannuleerde orders.",
5088
+ body: `WAAROM
5089
+ Het Meldingencentrum toont 2057 open meldingen. In de Logistiek Engine staan na
5090
+ opruiming nog maar ongeveer 31 open voorraadmeldingen (alleen orders die nog
5091
+ gepickt moeten worden). De rest komt dus uit een andere bron of blijft in het
5092
+ Meldingencentrum open terwijl de bron al gesloten is.
5093
+
5094
+ WAT JE DOET
5095
+ (1) Zoek uit uit welke bron(nen) de 2057 komen: tabel/functie per bron, met
5096
+ een telling per bron en per status. Meld dat terug vóór je iets sluit.
5097
+ (2) Sluit een melding automatisch zodra de bronmodule hem sluit, op het id
5098
+ van de bronrij. Voor de Engine: logistics_stock_alerts.status <> 'open'
5099
+ (reden staat in resolution_reason), logistics_plan_queue.status in
5100
+ ('done','opgelost','gearchiveerd') voor blokkades.
5101
+ (3) Toon geen meldingen van orders die verzonden, klaar voor facturatie of
5102
+ geannuleerd zijn (op order-id), en geen meldingen van verwijderde orders.
5103
+
5104
+ REGELS
5105
+ - Match op id, nooit op naam. Niets verwijderen: sluiten is een status.
5106
+ - Geen omgevingswaarden in code of migraties.
5107
+
5108
+ CONTROLELIJST
5109
+ [ ] Terugmelding met de telling per bron.
5110
+ [ ] Melding sluit vanzelf als de bron sluit.
5111
+ [ ] Teller daalt; geen meldingen van verzonden of geannuleerde orders.
5112
+ [ ] Meld terug met je pakketversie.`,
5113
+ },
4777
5114
  ],
4778
5115
  },
4779
5116
  };
@@ -1,2 +1,2 @@
1
- export declare const MODULE_VERSION = "1.0.138";
1
+ export declare const MODULE_VERSION = "1.0.147";
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.138";
2
+ export const MODULE_VERSION = "1.0.147";
@@ -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,CAwQ1B;AAmDD,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;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;AAmDD,4EAA4E;AAE5E,wBAAsB,cAAc,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtE"}
@@ -102,6 +102,7 @@ export async function runPlanQueue(sb, options = {}) {
102
102
  }
103
103
  const bufferId = group.find((g) => g.buffer_id)?.buffer_id ?? null;
104
104
  let blocked = false;
105
+ let blockedReasonFor = null;
105
106
  await trace(sb, {
106
107
  ...basis,
107
108
  nodeId: FLOW_NODE.ontvangst,
@@ -138,6 +139,7 @@ export async function runPlanQueue(sb, options = {}) {
138
139
  }
139
140
  else if (plan.skipped === "blocked") {
140
141
  blocked = true;
142
+ blockedReasonFor = plan.blockedReason ?? null;
141
143
  result.blocked++;
142
144
  if (result.errors.length < 5 && plan.blockedReason)
143
145
  result.errors.push(plan.blockedReason);
@@ -190,6 +192,7 @@ export async function runPlanQueue(sb, options = {}) {
190
192
  }
191
193
  else if (plan?.skipped === "blocked") {
192
194
  blocked = true;
195
+ blockedReasonFor = plan.blockedReason ?? null;
193
196
  result.blocked++;
194
197
  if (result.errors.length < 5 && plan.blockedReason)
195
198
  result.errors.push(plan.blockedReason);
@@ -228,6 +231,16 @@ export async function runPlanQueue(sb, options = {}) {
228
231
  // alsnog als afgerond worden weggeschreven. Een wachtende vergelijking
229
232
  // krijgt geen "na"-stand en wordt daarom als overgeslagen afgesloten.
230
233
  if (blocked) {
234
+ // De blokkade raakt soms alleen de buffer-leden zonder kar, niet de
235
+ // order die deze ronde oppakte (FO-2601389). Sluit die claim dan hier
236
+ // af, anders blijft hij op 'running' staan en herhaalt het vangnet hem.
237
+ await sb
238
+ .rpc("logistics_plan_close_claim", {
239
+ p_id: row.id,
240
+ p_reason: blockedReasonFor ?? "Indeling geblokkeerd",
241
+ p_reason_code: null,
242
+ })
243
+ .then(() => undefined, () => undefined);
231
244
  const skipWarnings = await skipPlannerDiffRuns(sb, [row.order_id, ...group.map((g) => g.order_id)].filter(Boolean), "Indeling geblokkeerd; geen nieuwe karindeling om mee te vergelijken.").catch((e) => [String(e)]);
232
245
  for (const w of skipWarnings)
233
246
  if (result.errors.length < 10)
@@ -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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"}
@@ -786,6 +786,24 @@ export const RULE_STEPS = [
786
786
  dependsOn: { key: "sticker_release", in: ["with_pick_release", "hours_before_pick"] },
787
787
  description: "Bij \u201cgelijk met de bijbehorende pakbon\u201d volgt de sticker automatisch het pickstation waar de pakbon geprint wordt; dat geldt dan voor alle pickstations gelijk.",
788
788
  },
789
+ {
790
+ key: "traysticker_release",
791
+ label: "Tray-stickers (fustlabels van Floriday) printen?",
792
+ type: "radio",
793
+ default: "uit",
794
+ options: [
795
+ {
796
+ value: "uit",
797
+ label: "Niet printen",
798
+ description: "De Engine haalt geen tray-stickers op.",
799
+ },
800
+ {
801
+ value: "na_geaccepteerde_belading",
802
+ label: "Na geaccepteerde belading",
803
+ description: "Zodra Floriday de belading van de kar heeft geaccepteerd, komen de tray-stickers als PDF op de labelprinter van dezelfde plek als de pakbon.",
804
+ },
805
+ ],
806
+ },
789
807
  {
790
808
  key: "sticker_layout",
791
809
  label: "Welke layout voor dit soort orders?",
@@ -1 +1 @@
1
- {"version":3,"file":"shippingNoteQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/shippingNoteQueue.server.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAO5D,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAoCD,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,cAAc,EAClB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/B,OAAO,CAAC,eAAe,CAAC,CA2c1B;AAMD,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,aAAa,GAAG,IAAI,CAAC;AAElE,qGAAqG;AACrG,wBAAsB,uBAAuB,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAQ9F;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CAG5E;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,mBAAmB,GAAG,MAAM,CAI3E"}
1
+ {"version":3,"file":"shippingNoteQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/shippingNoteQueue.server.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAQ5D,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAoCD,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,cAAc,EAClB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/B,OAAO,CAAC,eAAe,CAAC,CA4d1B;AAMD,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,aAAa,GAAG,IAAI,CAAC;AAElE,qGAAqG;AACrG,wBAAsB,uBAAuB,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAQ9F;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CAG5E;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,mBAAmB,GAAG,MAAM,CAI3E"}
@@ -13,7 +13,8 @@
13
13
  // ============================================================================
14
14
  import { trace, newTraceId, classifyError } from "./trace.server.js";
15
15
  import { FLOW_NODE } from "./flowNodes.js";
16
- import { printViaLayoutGecontroleerd, floridayLayout } from "./layoutPrint.server.js";
16
+ import { printViaLayoutGecontroleerd, floridayLayout, floridayPdfOpslag } from "./layoutPrint.server.js";
17
+ import { briefTransport } from "./briefTransport.server.js";
17
18
  import { SHIPPING_NOTE_DEFINITIEVE_FOUTEN, definitieveFout, parseMaxAttempts } from "./shippingNoteStates.js";
18
19
  const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
19
20
  function pickPdf(result) {
@@ -358,6 +359,20 @@ export async function runShippingNoteQueue(sb, options = {}) {
358
359
  });
359
360
  continue;
360
361
  }
362
+ const pdfOpslag = await floridayPdfOpslag(sb, {
363
+ fulfillmentOrderId,
364
+ labelCode: doc["logisticLabelCode"] ?? null,
365
+ pdfUrl: url,
366
+ });
367
+ if (!pdfOpslag && url) {
368
+ await trace(sb, {
369
+ ...basis,
370
+ step: "Blijvende verwijzing naar verzendbrief niet eenduidig",
371
+ status: "wachtend",
372
+ reason: "Alleen de tijdelijke link wordt meegestuurd; printen gaat door.",
373
+ });
374
+ }
375
+ const transport = await briefTransport(sb, row.order_id ?? null, cartId ?? null, basis);
361
376
  const printed = await printViaLayoutGecontroleerd(sb, {
362
377
  documenttype: "afleverbrief",
363
378
  layoutId: layout.layoutId,
@@ -386,6 +401,8 @@ export async function runShippingNoteQueue(sb, options = {}) {
386
401
  cart: slipPayload["cart"] ?? null,
387
402
  barcode: slipPayload["barcode"] ?? null,
388
403
  fulfillment_order_id: fulfillmentOrderId,
404
+ ...(pdfOpslag ? { pdf_opslag: pdfOpslag } : {}),
405
+ ...transport,
389
406
  },
390
407
  });
391
408
  if (!printed.ok) {
@@ -0,0 +1,15 @@
1
+ import type { SupabaseClient } from "@supabase/supabase-js";
2
+ export interface StickerRun {
3
+ synced: unknown;
4
+ released: number;
5
+ printed: number;
6
+ blocked: number;
7
+ retrying: number;
8
+ handled: number;
9
+ warnings: number;
10
+ errors: string[];
11
+ }
12
+ export declare function runStickerQueue(sb: SupabaseClient, opts?: {
13
+ limit?: number;
14
+ }): Promise<StickerRun>;
15
+ //# sourceMappingURL=stickerQueue.server.d.ts.map
@@ -0,0 +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;AAc5D,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;AAgCD,wBAAsB,eAAe,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CA+P5G"}