@flowselections/logistiek-engine 1.0.140 → 1.0.151
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/AutomatischVersturenCard.d.ts +2 -0
- package/dist-lib/components/AutomatischVersturenCard.d.ts.map +1 -0
- package/dist-lib/components/AutomatischVersturenCard.js +22 -0
- package/dist-lib/components/BeheerPage.d.ts.map +1 -1
- package/dist-lib/components/BeheerPage.js +3 -1
- package/dist-lib/components/GearchiveerdeOrdersCard.d.ts +2 -0
- package/dist-lib/components/GearchiveerdeOrdersCard.d.ts.map +1 -0
- package/dist-lib/components/GearchiveerdeOrdersCard.js +32 -0
- package/dist-lib/components/GeblokkeerdeOrdersCard.d.ts.map +1 -1
- package/dist-lib/components/GeblokkeerdeOrdersCard.js +1 -1
- package/dist-lib/components/OudeOrderregelsCard.d.ts +2 -0
- package/dist-lib/components/OudeOrderregelsCard.d.ts.map +1 -0
- package/dist-lib/components/OudeOrderregelsCard.js +28 -0
- package/dist-lib/components/PlanWachtrijPage.d.ts.map +1 -1
- package/dist-lib/components/PlanWachtrijPage.js +20 -13
- package/dist-lib/components/RuleEnginePage.d.ts.map +1 -1
- package/dist-lib/components/RuleEnginePage.js +24 -3
- package/dist-lib/hooks/useGeblokkeerdeOrders.d.ts +20 -0
- package/dist-lib/hooks/useGeblokkeerdeOrders.d.ts.map +1 -1
- package/dist-lib/hooks/useGeblokkeerdeOrders.js +57 -0
- package/dist-lib/index.d.ts +1 -0
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +1 -0
- package/dist-lib/integrations/supabase/previewAuthStorage.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/previewAuthStorage.js +22 -4
- package/dist-lib/integrations/supabase/types.d.ts +914 -2
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.js +1 -0
- package/dist-lib/lib/autoSend.d.ts +21 -0
- package/dist-lib/lib/autoSend.d.ts.map +1 -0
- package/dist-lib/lib/autoSend.functions.d.ts +10 -0
- package/dist-lib/lib/autoSend.functions.d.ts.map +1 -0
- package/dist-lib/lib/autoSend.functions.js +18 -0
- package/dist-lib/lib/autoSend.js +69 -0
- package/dist-lib/lib/autoSend.server.d.ts +13 -0
- package/dist-lib/lib/autoSend.server.d.ts.map +1 -0
- package/dist-lib/lib/autoSend.server.js +75 -0
- package/dist-lib/lib/briefTransport.server.d.ts +17 -0
- package/dist-lib/lib/briefTransport.server.d.ts.map +1 -0
- package/dist-lib/lib/briefTransport.server.js +41 -0
- package/dist-lib/lib/centralSecrets.server.d.ts +13 -0
- package/dist-lib/lib/centralSecrets.server.d.ts.map +1 -0
- package/dist-lib/lib/centralSecrets.server.js +82 -0
- package/dist-lib/lib/controlScan.server.d.ts.map +1 -1
- package/dist-lib/lib/controlScan.server.js +8 -0
- package/dist-lib/lib/handlers/logistics-tick.server.js +31 -0
- package/dist-lib/lib/layoutPrint.server.d.ts +2 -0
- package/dist-lib/lib/layoutPrint.server.d.ts.map +1 -1
- package/dist-lib/lib/layoutPrint.server.js +1 -1
- package/dist-lib/lib/logisticsTasks.d.ts +1 -0
- package/dist-lib/lib/logisticsTasks.d.ts.map +1 -1
- package/dist-lib/lib/logisticsTasks.js +2 -1
- package/dist-lib/lib/modulePrompts.d.ts +1 -0
- package/dist-lib/lib/modulePrompts.d.ts.map +1 -1
- package/dist-lib/lib/modulePrompts.js +420 -1
- package/dist-lib/lib/moduleVersion.d.ts +1 -1
- package/dist-lib/lib/moduleVersion.js +1 -1
- package/dist-lib/lib/planQueue.server.d.ts.map +1 -1
- package/dist-lib/lib/planQueue.server.js +13 -0
- package/dist-lib/lib/ruleEngineSchema.d.ts.map +1 -1
- package/dist-lib/lib/ruleEngineSchema.js +25 -0
- package/dist-lib/lib/shippingNoteQueue.server.d.ts.map +1 -1
- package/dist-lib/lib/shippingNoteQueue.server.js +3 -0
- package/dist-lib/lib/stickerQueue.server.d.ts +15 -0
- package/dist-lib/lib/stickerQueue.server.d.ts.map +1 -0
- package/dist-lib/lib/stickerQueue.server.js +349 -0
- package/dist-lib/lib/stickerRules.d.ts +38 -0
- package/dist-lib/lib/stickerRules.d.ts.map +1 -0
- package/dist-lib/lib/stickerRules.js +111 -0
- package/package.json +5 -5
|
@@ -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,119 @@ 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
|
+
},
|
|
2010
|
+
{
|
|
2011
|
+
number: 23,
|
|
2012
|
+
title: "Automatisch versturen: aanroep door de Engine",
|
|
2013
|
+
date: "2026-10-15",
|
|
2014
|
+
summary: "Engine roept /api/public/hooks/afhandeling-auto-send aan met { orderId }, HMAC-SHA256 over timestamp.rawBody; status leesbaar via logistics_auto_send_status.",
|
|
2015
|
+
body: `Vereist Logistiek Engine 1.0.149. Match op id, niets hardcoded, fail closed.
|
|
2016
|
+
|
|
2017
|
+
WANNEER
|
|
2018
|
+
Alleen voor Floriday-orders (met een Floriday-id) en alleen als in de werkwijze
|
|
2019
|
+
"Automatisch versturen na de laatste goedgekeurde kar" (order_picken.
|
|
2020
|
+
auto_send_loading, standaard uit) aan staat. Zodra alle karren van de order
|
|
2021
|
+
(ook gedeelde en bufferkarren) een goedgekeurde controlescan hebben, zet de
|
|
2022
|
+
Engine één taak klaar per order (idempotentiesleutel auto-send:<orderId>).
|
|
2023
|
+
|
|
2024
|
+
AANROEP
|
|
2025
|
+
POST <shell_base_url>/api/public/hooks/afhandeling-auto-send
|
|
2026
|
+
Headers:
|
|
2027
|
+
content-type: application/json
|
|
2028
|
+
x-timestamp: <epoch-milliseconden>
|
|
2029
|
+
x-signature: <hex HMAC-SHA256 over "<timestamp>.<rawBody>">
|
|
2030
|
+
idempotency-key: auto-send:<orderId>
|
|
2031
|
+
Body (rawBody, exact zo ondertekend): {"orderId":"<uuid>"}
|
|
2032
|
+
Geheim: eerst CENTRAL_AUTH_SECRET, anders AUTH_GATEWAY_HMAC_SECRET (dezelfde
|
|
2033
|
+
zoekvolgorde als Afhandeling). Gebruiken jullie andere headernamen, meld die
|
|
2034
|
+
dan terug; dan past de Engine zich aan.
|
|
2035
|
+
|
|
2036
|
+
ANTWOORD
|
|
2037
|
+
2xx = verstuurd (ook als de order al eerder verstuurd was: antwoord dan 2xx,
|
|
2038
|
+
niet opnieuw versturen). Elke andere status of geen antwoord = mislukt; de
|
|
2039
|
+
Engine probeert opnieuw na 1, 5, 15 en 60 minuten, maximaal 5 pogingen.
|
|
2040
|
+
Ontbreekt het geheim of het Shell-adres, dan verstuurt de Engine niets.
|
|
2041
|
+
|
|
2042
|
+
UITKOMST TONEN
|
|
2043
|
+
logistics_auto_send_status(p_order_id) (ingelogde gebruikers) geeft:
|
|
2044
|
+
{ status: geen|wachtend|bezig|verstuurd|mislukt, verstuurdOm, reden, poging,
|
|
2045
|
+
maxPogingen, volgendePoging, tekst }
|
|
2046
|
+
tekst is bijvoorbeeld "Automatisch verstuurd om 14:32" of "Automatisch
|
|
2047
|
+
versturen mislukt: <reden> — poging 2 van 5". Toon tekst letterlijk.
|
|
2048
|
+
|
|
2049
|
+
CONTROLELIJST
|
|
2050
|
+
[ ] Route controleert de handtekening en de leeftijd van de timestamp.
|
|
2051
|
+
[ ] Tweede aanroep voor dezelfde order verstuurt niets opnieuw en geeft 2xx.
|
|
2052
|
+
[ ] Tekst uit logistics_auto_send_status staat bij de order.
|
|
2053
|
+
[ ] Meld terug met je pakketversie en de headernamen.`,
|
|
2054
|
+
},
|
|
2055
|
+
{
|
|
2056
|
+
number: 24,
|
|
2057
|
+
title: "Automatisch versturen: zelfde sleutel en antwoordafhandeling",
|
|
2058
|
+
date: "2026-10-15",
|
|
2059
|
+
summary: "Engine tekent met getFloridayGatewaySecret-volgorde; 400/422 definitief, rest opnieuw; reden uit error in logistics_auto_send_status.",
|
|
2060
|
+
body: `TER BEVESTIGING; bouwt voort op koppelprompt 23. Vereist Logistiek Engine 1.0.149.
|
|
2061
|
+
Afhandeling 1.0.60 hoeft niets te wijzigen als het onderstaande klopt.
|
|
2062
|
+
|
|
2063
|
+
SLEUTEL (gelijk aan getFloridayGatewaySecret)
|
|
2064
|
+
1. AUTH_GATEWAY_HMAC_SECRET uit de omgeving van de Shell, als die gezet is.
|
|
2065
|
+
2. Anders POST {CENTRAL_AUTH_URL}/api/secret/floriday_gateway_secret met
|
|
2066
|
+
Authorization: Bearer {CENTRAL_AUTH_SECRET}, zonder body; sleutel = veld value.
|
|
2067
|
+
CENTRAL_AUTH_SECRET is alleen toegang, nooit de sleutel.
|
|
2068
|
+
3. Maximaal 60 seconden in het geheugen van de server; nooit opgeslagen, gelogd
|
|
2069
|
+
of naar de browser gestuurd. Lukt ophalen niet: niets versturen.
|
|
2070
|
+
|
|
2071
|
+
AANROEP (ongewijzigd)
|
|
2072
|
+
POST <shell_base_url>/api/public/hooks/afhandeling-auto-send
|
|
2073
|
+
(terugval alleen als shell_base_url ontbreekt: PUBLIC_BASE_URL, anders
|
|
2074
|
+
GET {CENTRAL_AUTH_URL}/api/shell-host → shell_host)
|
|
2075
|
+
Headers: content-type: application/json; x-timestamp: <epoch-ms als tekst>;
|
|
2076
|
+
x-signature: hex HMAC-SHA256 over "<timestamp>.<rawBody>";
|
|
2077
|
+
idempotency-key: auto-send:<orderId>
|
|
2078
|
+
Body exact zoals ondertekend: {"orderId":"<uuid>"}
|
|
2079
|
+
|
|
2080
|
+
ANTWOORDEN
|
|
2081
|
+
- 200 sent / 200 already_sent: verstuurd, niets opnieuw.
|
|
2082
|
+
- 400 invalid_body / invalid_idempotency_key en 422 not_floriday: definitief
|
|
2083
|
+
mislukt, geen nieuwe poging.
|
|
2084
|
+
- 401, 409 not_ready, 502 floriday_rejected, andere fouten of geen antwoord:
|
|
2085
|
+
opnieuw na 1, 5, 15 en 60 minuten, maximaal 5 pogingen.
|
|
2086
|
+
- Reden = "<code>: <error>" uit het antwoord (error mag tekst of lijst zijn);
|
|
2087
|
+
zonder JSON "Afhandeling antwoordde <status>".
|
|
2088
|
+
|
|
2089
|
+
TONEN
|
|
2090
|
+
logistics_auto_send_status(p_order_id).tekst, letterlijk, bijv. "Automatisch
|
|
2091
|
+
versturen mislukt: not_ready: controlescan ontbreekt — poging 2 van 5". Kan de
|
|
2092
|
+
Engine de sleutel niet ophalen, dan staat er bijv. "Automatisch versturen
|
|
2093
|
+
mislukt: Automatisch versturen niet mogelijk: sleutel niet op te halen:
|
|
2094
|
+
CENTRAL_AUTH_URL ontbreekt — poging 0 van 5".
|
|
2095
|
+
|
|
2096
|
+
CONTROLELIJST
|
|
2097
|
+
[ ] Antwoord bevat code (of status) en error zoals hierboven.
|
|
2098
|
+
[ ] Handtekening van de Engine wordt geaccepteerd met dezelfde sleutel.
|
|
2099
|
+
[ ] Meld terug met je pakketversie.`,
|
|
2100
|
+
},
|
|
1948
2101
|
],
|
|
1949
2102
|
},
|
|
1950
2103
|
pickschermen: {
|
|
@@ -3647,6 +3800,104 @@ CONTROLELIJST
|
|
|
3647
3800
|
[ ] Verdwenen rij: wachtrij ververst, duidelijke tekst, geen 500 in beeld.
|
|
3648
3801
|
[ ] Meld terug met je pakketversie.`,
|
|
3649
3802
|
},
|
|
3803
|
+
{
|
|
3804
|
+
number: 43,
|
|
3805
|
+
title: "Stickers: alleen de stand tonen",
|
|
3806
|
+
date: "2026-10-14",
|
|
3807
|
+
summary: "Pickschermen voert geen print.sticker meer uit; toont stand en vooraf-melding van de Engine.",
|
|
3808
|
+
body: `WAAROM
|
|
3809
|
+
De Logistiek Engine is eigenaar van print.sticker en print.traysticker. Twee
|
|
3810
|
+
printers van dezelfde sticker geven dubbele etiketten.
|
|
3811
|
+
|
|
3812
|
+
WAT JE BOUWT
|
|
3813
|
+
(a) Voer geen stickertaken uit en roep geen customer-sticker-pdf op.
|
|
3814
|
+
(b) Toon per kar logistics_cart_sticker_state(cart_id): per sticker de status
|
|
3815
|
+
(wacht_op_moment, klaar, in_printwachtrij, geblokkeerd, afgemeld,
|
|
3816
|
+
niet_printen) en reden.
|
|
3817
|
+
(c) Toon per order logistics_order_sticker_meldingen(order_id) bovenaan het
|
|
3818
|
+
pickstation, letterlijk, bijv. "Voor deze order is een sticker 100×62 mm
|
|
3819
|
+
nodig; op Pickstation 1 zit 28×89 mm."
|
|
3820
|
+
|
|
3821
|
+
REGELS
|
|
3822
|
+
- Alleen lezen, op id. Niets hardcoded.
|
|
3823
|
+
|
|
3824
|
+
CONTROLELIJST
|
|
3825
|
+
[ ] Geen eigen stickerprint meer.
|
|
3826
|
+
[ ] Stand per kar en melding per order zichtbaar.
|
|
3827
|
+
[ ] Meld terug met je pakketversie.`,
|
|
3828
|
+
},
|
|
3829
|
+
{
|
|
3830
|
+
number: 44,
|
|
3831
|
+
title: "Stickerstand op het openbare pickstation",
|
|
3832
|
+
date: "2026-10-15",
|
|
3833
|
+
summary: "Anon-leesfuncties met slugcontrole; omhulsel toegang/stand/meldingen; nooit '0 stickers' bij geen toegang.",
|
|
3834
|
+
body: `AANVULLING; bouwt voort op koppelprompt 43. Vereist Logistiek Engine 1.0.146.
|
|
3835
|
+
|
|
3836
|
+
VOLGORDE
|
|
3837
|
+
Eerst Pickschermen bijwerken voor het omhulsel, daarna pas Engine 1.0.146
|
|
3838
|
+
installeren.
|
|
3839
|
+
|
|
3840
|
+
EERST CONTROLEREN
|
|
3841
|
+
Controleer eerst wat 1.0.37 doet met het omhulsel. Het pickstation mag nooit
|
|
3842
|
+
'0 stickers' of 'klaar' tonen als het omhulsel niet herkend wordt; dan altijd
|
|
3843
|
+
'Stickerstand onbekend'.
|
|
3844
|
+
|
|
3845
|
+
WAT DE ENGINE LEVERT (anon en authenticated)
|
|
3846
|
+
pickstation_cart_sticker_state(p_slug text, p_cart_id uuid) -> jsonb
|
|
3847
|
+
pickstation_order_sticker_meldingen(p_slug text, p_order_id uuid) -> jsonb
|
|
3848
|
+
|
|
3849
|
+
Toegang alleen als p_slug een actief pick_station is en de kar
|
|
3850
|
+
(payload.cartId) of order (payload.orderId) in een niet-geannuleerde
|
|
3851
|
+
pick_queue-rij van dat station staat. Match op id en slug, nooit op naam.
|
|
3852
|
+
|
|
3853
|
+
UITKOMSTEN
|
|
3854
|
+
- Kar met toegang: { "toegang": true, "stand": { cartId, totaal, inPrintwachtrij, wachtend, geblokkeerd, regels[] } }
|
|
3855
|
+
- Order met toegang: { "toegang": true, "meldingen": [ { soort, stickerId, melding, plek, benodigd, geladen, sinds } ] }
|
|
3856
|
+
- Geen toegang: { "toegang": false, "reden": "onbekend_of_inactief_station" | "niet_in_wachtrij_station" }
|
|
3857
|
+
|
|
3858
|
+
REGELS VOOR HET SCHERM
|
|
3859
|
+
- toegang = false, toegang ontbreekt, onbekende vorm of fout bij de aanroep
|
|
3860
|
+
-> "Stickerstand onbekend". Nooit "0 stickers" of "klaar".
|
|
3861
|
+
- toegang = true en stand.totaal = 0 -> "Geen stickers nodig voor deze kar".
|
|
3862
|
+
Niet leeg, niet "klaar" en niet "onbekend".
|
|
3863
|
+
- toegang = true en stand.totaal > 0 -> aantallen tonen; "klaar" alleen als
|
|
3864
|
+
wachtend = 0 en geblokkeerd = 0.
|
|
3865
|
+
- Lege meldingen-array bij toegang = true: geen formaatmeldingen.
|
|
3866
|
+
- Roep logistics_cart_sticker_state en logistics_order_sticker_meldingen niet
|
|
3867
|
+
meer aan vanuit het openbare pickstation.
|
|
3868
|
+
- Wijzig geen rechten of RLS.
|
|
3869
|
+
|
|
3870
|
+
CONTROLELIJST
|
|
3871
|
+
[ ] Omhulsel herkend; onbekende vorm geeft "Stickerstand onbekend".
|
|
3872
|
+
[ ] Kar van ander station of onbekende slug: "Stickerstand onbekend".
|
|
3873
|
+
[ ] totaal = 0: "Geen stickers nodig voor deze kar".
|
|
3874
|
+
[ ] Meld terug met je pakketversie.`,
|
|
3875
|
+
},
|
|
3876
|
+
{
|
|
3877
|
+
number: 45,
|
|
3878
|
+
title: "Verzendbriefstatus: juiste tekst vanaf het begin (ter info)",
|
|
3879
|
+
date: "2026-10-15",
|
|
3880
|
+
summary: "logistics_shipping_note_status geeft 'Floriday tijdelijk niet bereikbaar' alleen nog bij een echte Floriday-fout na een poging.",
|
|
3881
|
+
body: `TER INFO; geen wijziging nodig. Vereist Logistiek Engine 1.0.149.
|
|
3882
|
+
|
|
3883
|
+
WAT VERANDERT
|
|
3884
|
+
logistics_shipping_note_status(p_slip_job_id, p_cart_id) houdt dezelfde vorm
|
|
3885
|
+
(status, message, attempts, nextAttemptAt, wachtOpVrijgave). Alleen de teksten
|
|
3886
|
+
kloppen nu vanaf het begin:
|
|
3887
|
+
- Nieuwe verzendbrief zonder goedgekeurde controlescan, of wachten op vrijgave
|
|
3888
|
+
of kenmerk: status "wacht_op_floriday", wachtOpVrijgave = true, message
|
|
3889
|
+
"Pakbon geprint — verzendbrief wacht op vrijgave (na de controlescan)."
|
|
3890
|
+
- "Floriday is tijdelijk niet bereikbaar. De verzendbrief wordt automatisch
|
|
3891
|
+
opnieuw geprobeerd." alleen bij een echte Floriday-fout na minstens één poging.
|
|
3892
|
+
- Maximaal aantal pogingen bereikt: status "mislukt" met een eigen tekst.
|
|
3893
|
+
- Anders neutraal: "Verzendbrief wordt klaargezet."
|
|
3894
|
+
|
|
3895
|
+
REGELS
|
|
3896
|
+
- Toon message letterlijk, zoals nu. Niets hardcoded.
|
|
3897
|
+
|
|
3898
|
+
CONTROLELIJST
|
|
3899
|
+
[ ] Bij een net geprinte pakbon verschijnt geen "tijdelijk niet bereikbaar" meer.`,
|
|
3900
|
+
},
|
|
3650
3901
|
],
|
|
3651
3902
|
},
|
|
3652
3903
|
scanners: {
|
|
@@ -4618,6 +4869,94 @@ CONTROLELIJST
|
|
|
4618
4869
|
[ ] Printerkeuze gelijk aan printPdf voor dezelfde printplek/werkplek.
|
|
4619
4870
|
[ ] Geen URL's, sleutels, project-refs, klantnamen of vaste database-id's.`,
|
|
4620
4871
|
},
|
|
4872
|
+
{
|
|
4873
|
+
number: 6,
|
|
4874
|
+
title: "Stickers en tray-stickers 1-op-1 printen",
|
|
4875
|
+
date: "2026-10-14",
|
|
4876
|
+
summary: "Documentsoorten sticker en traysticker als kant-en-klare Floriday-pdf printen; geladen etiket blijft leidend.",
|
|
4877
|
+
body: `WAAROM
|
|
4878
|
+
De Logistiek Engine zet Floriday-klantstickers (documentsoort "sticker") en
|
|
4879
|
+
tray-stickers (documentsoort "traysticker") via layout_print_document in de
|
|
4880
|
+
Printwachtrij, met layout_id (Floriday-layout op id), cart_id, print_plek_id,
|
|
4881
|
+
_kopieen en payload.pdf_opslag = { bucket, pad } naast pdf_url.
|
|
4882
|
+
|
|
4883
|
+
WAT JE BOUWT
|
|
4884
|
+
(a) Voeg "traysticker" toe aan de documentsoorten (doc_layout_type) en maak een
|
|
4885
|
+
actieve Floriday-layout voor tray-stickers mogelijk. Zonder layout wacht de
|
|
4886
|
+
Engine met de melding "Geen actieve Floriday-layout voor traysticker".
|
|
4887
|
+
(b) Druk beide soorten 1-op-1 af als kant-en-klare pdf, met het opgegeven aantal
|
|
4888
|
+
kopieën, op de labelprinter van de printplek.
|
|
4889
|
+
(c) De Engine gebruikt jullie bestaande geladen_etiketten(_werkplek_id,
|
|
4890
|
+
_print_plek_id) uit 1.56.0, op id, voor de formaatcontrole. Geen
|
|
4891
|
+
PrintNode-driverformaten. Laat die functie aanroepbaar voor service_role en
|
|
4892
|
+
geef per labelprinter printer_id, naam en breedte_mm/hoogte_mm van het
|
|
4893
|
+
geladen etiket terug.
|
|
4894
|
+
(d) Idempotency-sleutel: sticker:<sticker_id>:<cart_id>:<layout_id> en
|
|
4895
|
+
traysticker:<delivery_order_id>:<cart_id>:<layout_id>; dubbel = bestaand
|
|
4896
|
+
opdracht-id teruggeven.
|
|
4897
|
+
|
|
4898
|
+
REGELS
|
|
4899
|
+
- Match op id. Niets hardcoded.
|
|
4900
|
+
|
|
4901
|
+
CONTROLELIJST
|
|
4902
|
+
[ ] traysticker bestaat als documentsoort.
|
|
4903
|
+
[ ] Sticker-pdf komt 1-op-1 en met juiste kopieën uit de labelprinter.
|
|
4904
|
+
[ ] geladen_etiketten geeft breedte_mm/hoogte_mm per printer.
|
|
4905
|
+
[ ] Meld terug met je pakketversie.`,
|
|
4906
|
+
},
|
|
4907
|
+
{
|
|
4908
|
+
number: 7,
|
|
4909
|
+
title: "Vervoerder en ophaalmoment op de eigen afleverbrief",
|
|
4910
|
+
date: "2026-10-14",
|
|
4911
|
+
summary: "Lees vervoerder, ophaalmoment en ophaaladres uit de payload van verzend- en afleverbrieven; ontbrekend veld = regel niet tonen.",
|
|
4912
|
+
body: `WAT DE ENGINE MEESTUURT
|
|
4913
|
+
Bij elke verzendbrief en afleverbrief na controlescan, uit eigen gegevens op id:
|
|
4914
|
+
- payload.vervoerder.naam (alleen als bekend)
|
|
4915
|
+
- payload.vervoerder.code (optioneel)
|
|
4916
|
+
- payload.ophaalmoment (ISO-tijd in UTC, bijv. 2026-10-15T07:30:00Z)
|
|
4917
|
+
- payload.ophaaladres (optioneel; wordt nu nog niet gevuld, er is geen eigen bron)
|
|
4918
|
+
|
|
4919
|
+
WAT JE BOUWT
|
|
4920
|
+
(a) Toon deze velden op de eigen afleverbrief. Ophaalmoment in Amsterdamse tijd.
|
|
4921
|
+
(b) Ontbreekt een veld, laat die regel weg. Vul nooit een standaardvervoerder of
|
|
4922
|
+
-tijd in.
|
|
4923
|
+
(c) De testprint-uitzondering (payload.is_testprint = true) in
|
|
4924
|
+
logistics_require_cart_on_packing_slip staat nu in de Engine-migratie.
|
|
4925
|
+
Verander die functie niet meer zelf; vraag wijzigingen aan bij de Engine.
|
|
4926
|
+
|
|
4927
|
+
CONTROLELIJST
|
|
4928
|
+
[ ] Vervoerder en ophaalmoment zichtbaar op de afleverbrief als ze zijn meegestuurd.
|
|
4929
|
+
[ ] Ontbrekend veld = geen lege regel.
|
|
4930
|
+
[ ] Meld terug met je pakketversie.`,
|
|
4931
|
+
},
|
|
4932
|
+
{
|
|
4933
|
+
number: 8,
|
|
4934
|
+
title: "Testpakbon zonder kar en zonder barcode",
|
|
4935
|
+
date: "2026-10-15",
|
|
4936
|
+
summary: "Een pakbon met payload.is_testprint = true komt ook door de barcodecontrole; hij krijgt geen kar en geen barcode.",
|
|
4937
|
+
body: `WAT DE ENGINE DOET (vanaf 1.0.143)
|
|
4938
|
+
De uitzondering voor testafdrukken staat nu ook in
|
|
4939
|
+
public.logistics_require_pakbon_barcode() (Engine-migratie). Alleen de
|
|
4940
|
+
letterlijke waarde true van payload.is_testprint telt; elke andere waarde
|
|
4941
|
+
("ja", "1", false, ontbrekend) valt onder de gewone regel en wordt geweigerd
|
|
4942
|
+
als er geen kar is.
|
|
4943
|
+
|
|
4944
|
+
Een testpakbon krijgt geen barcode en geen cart_id: de payload blijft precies
|
|
4945
|
+
zoals jij hem aanlevert.
|
|
4946
|
+
|
|
4947
|
+
WAT JE BOUWT
|
|
4948
|
+
(a) Stuur bij een testpakbon is_testprint als JSON-boolean true mee.
|
|
4949
|
+
(b) Laat het barcode-element op een testpakbon leeg (of toon "TESTAFDRUK");
|
|
4950
|
+
verzin geen barcode.
|
|
4951
|
+
(c) Pas logistics_require_pakbon_barcode en logistics_require_cart_on_packing_slip
|
|
4952
|
+
niet zelf aan; vraag wijzigingen aan bij de Engine.
|
|
4953
|
+
|
|
4954
|
+
CONTROLELIJST
|
|
4955
|
+
[ ] Testpakbon zonder kar wordt aangenomen in de Printwachtrij.
|
|
4956
|
+
[ ] Testpakbon toont geen barcode.
|
|
4957
|
+
[ ] Gewone pakbon zonder kar wordt nog steeds geweigerd.
|
|
4958
|
+
[ ] Meld terug met je pakketversie.`,
|
|
4959
|
+
},
|
|
4621
4960
|
],
|
|
4622
4961
|
},
|
|
4623
4962
|
floridaykoppeling: {
|
|
@@ -4808,6 +5147,86 @@ CONTROLELIJST
|
|
|
4808
5147
|
[ ] De cacherij wijst naar het nieuwste pad.
|
|
4809
5148
|
[ ] Er is geen automatische opruiming van deze map.`,
|
|
4810
5149
|
},
|
|
5150
|
+
{
|
|
5151
|
+
number: 5,
|
|
5152
|
+
title: "Klantstickers: afmelden, tray-stickers op id, versies bewaren",
|
|
5153
|
+
date: "2026-10-14",
|
|
5154
|
+
summary: "Afmeldfunctie voor klantstickers, tray-stickers op fulfillment order, stickerpdf's niet stil overschrijven, cronlink uit de omgeving.",
|
|
5155
|
+
body: `WAAROM
|
|
5156
|
+
De Logistiek Engine is nu eigenaar van het printen van Floriday-stickers
|
|
5157
|
+
(klantstickers en tray-stickers). Hij haalt pdf's alleen via deze koppeling op
|
|
5158
|
+
en roept Floriday nooit rechtstreeks aan.
|
|
5159
|
+
|
|
5160
|
+
WAT JE BOUWT
|
|
5161
|
+
(a) Gateway-export runCustomerStickersHandled(supabase, { stickerIds: string[] })
|
|
5162
|
+
-> { ok: boolean, error?: string }. Roept PATCH /customer-stickers/handled
|
|
5163
|
+
aan (scope sticker:write) met de stickerIds op id. De Engine roept dit pas
|
|
5164
|
+
aan na de goedgekeurde controlescan van alle karren met die sticker.
|
|
5165
|
+
Bevestig in je terugmelding de exacte body volgens de Suppliers API 2026v1.
|
|
5166
|
+
(b) Sync van customer-stickers: bewaar het volledige object (o.a.
|
|
5167
|
+
stickerFileInformation.numberOfCopies/numberOfPages/shouldBePrinted/
|
|
5168
|
+
deliverSeparately/stickerProvidedBy, stickerSize, compositions[],
|
|
5169
|
+
isHandled, isDeleted, salesOrderId, salesOrderCorrectionRequestId) in
|
|
5170
|
+
floriday_customer_stickers_cache.data. Het veld quantity bestaat niet in
|
|
5171
|
+
Floriday; vul het niet met een verzonnen waarde.
|
|
5172
|
+
(c) Tray-stickers: runPdf kind "tray-stickers" moet ook werken met
|
|
5173
|
+
fulfillmentOrderId (GET /fulfillment-orders/{fulfillmentOrderId}/stickers).
|
|
5174
|
+
De Engine stuurt nu deliveryOrderId; accepteer beide, op id. Geef in het
|
|
5175
|
+
antwoord storagePath mee.
|
|
5176
|
+
(d) Sticker- en tray-pdf's: geen upsert op hetzelfde pad. Nieuwe versie = eigen
|
|
5177
|
+
pad, cache op id naar de nieuwste, oude bewaren; geen opruiming binnen 90
|
|
5178
|
+
dagen na leverdatum.
|
|
5179
|
+
(e) De sticker-cron bevat een vaste projectlink. Lees die uit de omgeving
|
|
5180
|
+
(instelling of secret) en fail closed als hij ontbreekt.
|
|
5181
|
+
|
|
5182
|
+
REGELS
|
|
5183
|
+
- Match op id. Geen URL's, sleutels, project-refs of vaste id's in code of
|
|
5184
|
+
migraties.
|
|
5185
|
+
|
|
5186
|
+
CONTROLELIJST
|
|
5187
|
+
[ ] runCustomerStickersHandled bestaat en meldt een sticker af op id.
|
|
5188
|
+
[ ] Cache bevat stickerFileInformation en stickerSize uit Floriday.
|
|
5189
|
+
[ ] Tray-stickers op fulfillmentOrderId geven een pdf met storagePath.
|
|
5190
|
+
[ ] Geen vaste projectlink meer in de cron.
|
|
5191
|
+
[ ] Meld terug met je pakketversie.`,
|
|
5192
|
+
},
|
|
5193
|
+
],
|
|
5194
|
+
},
|
|
5195
|
+
dashboards: {
|
|
5196
|
+
order: 11,
|
|
5197
|
+
summary: "Meldingencentrum: toont meldingen uit de modules en volgt hun status.",
|
|
5198
|
+
revisions: [
|
|
5199
|
+
{
|
|
5200
|
+
number: 1,
|
|
5201
|
+
title: "Meldingencentrum: bron uitzoeken, automatisch sluiten, geen verzonden orders",
|
|
5202
|
+
date: "2026-10-15",
|
|
5203
|
+
summary: "Zoek de bron van de 2057 open meldingen uit, sluit meldingen als de bronmodule ze sluit en verberg verzonden/geannuleerde orders.",
|
|
5204
|
+
body: `WAAROM
|
|
5205
|
+
Het Meldingencentrum toont 2057 open meldingen. In de Logistiek Engine staan na
|
|
5206
|
+
opruiming nog maar ongeveer 31 open voorraadmeldingen (alleen orders die nog
|
|
5207
|
+
gepickt moeten worden). De rest komt dus uit een andere bron of blijft in het
|
|
5208
|
+
Meldingencentrum open terwijl de bron al gesloten is.
|
|
5209
|
+
|
|
5210
|
+
WAT JE DOET
|
|
5211
|
+
(1) Zoek uit uit welke bron(nen) de 2057 komen: tabel/functie per bron, met
|
|
5212
|
+
een telling per bron en per status. Meld dat terug vóór je iets sluit.
|
|
5213
|
+
(2) Sluit een melding automatisch zodra de bronmodule hem sluit, op het id
|
|
5214
|
+
van de bronrij. Voor de Engine: logistics_stock_alerts.status <> 'open'
|
|
5215
|
+
(reden staat in resolution_reason), logistics_plan_queue.status in
|
|
5216
|
+
('done','opgelost','gearchiveerd') voor blokkades.
|
|
5217
|
+
(3) Toon geen meldingen van orders die verzonden, klaar voor facturatie of
|
|
5218
|
+
geannuleerd zijn (op order-id), en geen meldingen van verwijderde orders.
|
|
5219
|
+
|
|
5220
|
+
REGELS
|
|
5221
|
+
- Match op id, nooit op naam. Niets verwijderen: sluiten is een status.
|
|
5222
|
+
- Geen omgevingswaarden in code of migraties.
|
|
5223
|
+
|
|
5224
|
+
CONTROLELIJST
|
|
5225
|
+
[ ] Terugmelding met de telling per bron.
|
|
5226
|
+
[ ] Melding sluit vanzelf als de bron sluit.
|
|
5227
|
+
[ ] Teller daalt; geen meldingen van verzonden of geannuleerde orders.
|
|
5228
|
+
[ ] Meld terug met je pakketversie.`,
|
|
5229
|
+
},
|
|
4811
5230
|
],
|
|
4812
5231
|
},
|
|
4813
5232
|
};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const MODULE_VERSION = "1.0.
|
|
1
|
+
export declare const MODULE_VERSION = "1.0.151";
|
|
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.
|
|
2
|
+
export const MODULE_VERSION = "1.0.151";
|
|
@@ -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,
|
|
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":"AAQA,MAAM,MAAM,SAAS,GACjB,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,MAAM,GACN,UAAU,GACV,MAAM,GACN,UAAU,GACV,OAAO,GACP,MAAM,GACN,QAAQ,GACR,aAAa,GACb,SAAS,GACT,SAAS,GACT,UAAU,CAAC;AAMf,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,OAAO,EAAE,CAAC;IACd,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8FAA8F;IAC9F,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,wFAAwF;IACxF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mEAAmE;IACnE,QAAQ,CAAC,EAAE;QACT,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,wGAAwG;IACxG,SAAS,CAAC,EAAE,cAAc,GAAG,cAAc,EAAE,CAAC;CAC/C;AAGD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAID,eAAO,MAAM,gBAAgB,EAAE,WAAW,EAQzC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,WAAW,EAK5C,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,UAAU,EAAE,aAAa,EAAE,CAAC;CAC7B;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAI9D,eAAO,MAAM,UAAU,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"ruleEngineSchema.d.ts","sourceRoot":"","sources":["../../src/lib/ruleEngineSchema.ts"],"names":[],"mappings":"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"}
|
|
@@ -334,6 +334,13 @@ export const RULE_STEPS = [
|
|
|
334
334
|
{ value: "buffer", label: "Picken per orderbuffer" },
|
|
335
335
|
],
|
|
336
336
|
},
|
|
337
|
+
{
|
|
338
|
+
key: "auto_send_loading",
|
|
339
|
+
label: "Automatisch versturen na de laatste goedgekeurde kar",
|
|
340
|
+
type: "toggle",
|
|
341
|
+
default: false,
|
|
342
|
+
description: "Alleen voor Floriday-orders. Staat dit aan, dan vraagt de Engine Afhandeling om de belading te versturen zodra alle karren van de order goedgekeurd zijn gescand. Eén keer per order; bij een fout tot 5 pogingen met oplopende wachttijd.",
|
|
343
|
+
},
|
|
337
344
|
{
|
|
338
345
|
key: "scanner",
|
|
339
346
|
label: "Scannergebruik",
|
|
@@ -786,6 +793,24 @@ export const RULE_STEPS = [
|
|
|
786
793
|
dependsOn: { key: "sticker_release", in: ["with_pick_release", "hours_before_pick"] },
|
|
787
794
|
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
795
|
},
|
|
796
|
+
{
|
|
797
|
+
key: "traysticker_release",
|
|
798
|
+
label: "Tray-stickers (fustlabels van Floriday) printen?",
|
|
799
|
+
type: "radio",
|
|
800
|
+
default: "uit",
|
|
801
|
+
options: [
|
|
802
|
+
{
|
|
803
|
+
value: "uit",
|
|
804
|
+
label: "Niet printen",
|
|
805
|
+
description: "De Engine haalt geen tray-stickers op.",
|
|
806
|
+
},
|
|
807
|
+
{
|
|
808
|
+
value: "na_geaccepteerde_belading",
|
|
809
|
+
label: "Na geaccepteerde belading",
|
|
810
|
+
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.",
|
|
811
|
+
},
|
|
812
|
+
],
|
|
813
|
+
},
|
|
789
814
|
{
|
|
790
815
|
key: "sticker_layout",
|
|
791
816
|
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;
|
|
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"}
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
import { trace, newTraceId, classifyError } from "./trace.server.js";
|
|
15
15
|
import { FLOW_NODE } from "./flowNodes.js";
|
|
16
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) {
|
|
@@ -371,6 +372,7 @@ export async function runShippingNoteQueue(sb, options = {}) {
|
|
|
371
372
|
reason: "Alleen de tijdelijke link wordt meegestuurd; printen gaat door.",
|
|
372
373
|
});
|
|
373
374
|
}
|
|
375
|
+
const transport = await briefTransport(sb, row.order_id ?? null, cartId ?? null, basis);
|
|
374
376
|
const printed = await printViaLayoutGecontroleerd(sb, {
|
|
375
377
|
documenttype: "afleverbrief",
|
|
376
378
|
layoutId: layout.layoutId,
|
|
@@ -400,6 +402,7 @@ export async function runShippingNoteQueue(sb, options = {}) {
|
|
|
400
402
|
barcode: slipPayload["barcode"] ?? null,
|
|
401
403
|
fulfillment_order_id: fulfillmentOrderId,
|
|
402
404
|
...(pdfOpslag ? { pdf_opslag: pdfOpslag } : {}),
|
|
405
|
+
...transport,
|
|
403
406
|
},
|
|
404
407
|
});
|
|
405
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"}
|