@flowselections/logistiek-engine 1.0.195 → 1.0.200
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/db/schema/logistiek-engine.sql +1042 -13
- package/dist-lib/components/BeheerPage.d.ts.map +1 -1
- package/dist-lib/components/BeheerPage.js +3 -1
- package/dist-lib/components/DataGereedheidCard.d.ts +47 -0
- package/dist-lib/components/DataGereedheidCard.d.ts.map +1 -0
- package/dist-lib/components/DataGereedheidCard.js +133 -0
- package/dist-lib/components/GeblokkeerdeOrdersCard.d.ts.map +1 -1
- package/dist-lib/components/GeblokkeerdeOrdersCard.js +3 -1
- package/dist-lib/components/GeblokkeerdeStickersCard.d.ts.map +1 -1
- package/dist-lib/components/GeblokkeerdeStickersCard.js +11 -1
- package/dist-lib/components/LadingdragerVoorstellenCard.d.ts +4 -0
- package/dist-lib/components/LadingdragerVoorstellenCard.d.ts.map +1 -0
- package/dist-lib/components/LadingdragerVoorstellenCard.js +44 -0
- package/dist-lib/components/LadingdragersPage.d.ts.map +1 -1
- package/dist-lib/components/LadingdragersPage.js +2 -1
- package/dist-lib/components/StartlijstCard.d.ts +2 -0
- package/dist-lib/components/StartlijstCard.d.ts.map +1 -0
- package/dist-lib/components/StartlijstCard.js +54 -0
- package/dist-lib/hooks/useGeblokkeerdeOrders.d.ts.map +1 -1
- package/dist-lib/hooks/useGeblokkeerdeOrders.js +2 -0
- package/dist-lib/index.d.ts +3 -0
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +3 -0
- package/dist-lib/integrations/supabase/types.d.ts +353 -122
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.js +1 -0
- package/dist-lib/lib/beladingRegels.d.ts +22 -0
- package/dist-lib/lib/beladingRegels.d.ts.map +1 -1
- package/dist-lib/lib/beladingRegels.js +46 -4
- package/dist-lib/lib/dimensionData.server.js +15 -12
- package/dist-lib/lib/dimensionPlanner.d.ts +11 -0
- package/dist-lib/lib/dimensionPlanner.d.ts.map +1 -1
- package/dist-lib/lib/dimensionPlanner.js +30 -2
- package/dist-lib/lib/handlers/index.d.ts +1 -0
- package/dist-lib/lib/handlers/index.d.ts.map +1 -1
- package/dist-lib/lib/handlers/index.js +1 -0
- package/dist-lib/lib/handlers/logistics-plan-now.server.d.ts +18 -0
- package/dist-lib/lib/handlers/logistics-plan-now.server.d.ts.map +1 -0
- package/dist-lib/lib/handlers/logistics-plan-now.server.js +114 -0
- package/dist-lib/lib/handlers/logistics-tick.server.d.ts +5 -0
- package/dist-lib/lib/handlers/logistics-tick.server.d.ts.map +1 -1
- package/dist-lib/lib/handlers/logistics-tick.server.js +7 -0
- package/dist-lib/lib/invoerTeksten.d.ts +4 -0
- package/dist-lib/lib/invoerTeksten.d.ts.map +1 -0
- package/dist-lib/lib/invoerTeksten.js +19 -0
- package/dist-lib/lib/layoutPrint.server.d.ts +8 -0
- package/dist-lib/lib/layoutPrint.server.d.ts.map +1 -1
- package/dist-lib/lib/layoutPrint.server.js +32 -0
- package/dist-lib/lib/loadCarrierPlanning.server.d.ts +4 -0
- package/dist-lib/lib/loadCarrierPlanning.server.d.ts.map +1 -1
- package/dist-lib/lib/loadCarrierPlanning.server.js +209 -12
- package/dist-lib/lib/moduleVersion.d.ts +1 -1
- package/dist-lib/lib/moduleVersion.js +1 -1
- package/dist-lib/lib/ruleEngineSchema.d.ts.map +1 -1
- package/dist-lib/lib/ruleEngineSchema.js +14 -0
- package/dist-lib/lib/stickerQueue.server.d.ts +12 -0
- package/dist-lib/lib/stickerQueue.server.d.ts.map +1 -1
- package/dist-lib/lib/stickerQueue.server.js +40 -2
- package/package.json +11 -1
|
@@ -93,4 +93,26 @@ export declare function traystickerWachtReden(regels: Array<{
|
|
|
93
93
|
}>): string | null;
|
|
94
94
|
/** Wachtrij: bezette lease = later opnieuw (nooit klaar zonder indeling). */
|
|
95
95
|
export declare function opnieuwOverSeconden(pogingen: number): number;
|
|
96
|
+
export interface FysiekeInvoer {
|
|
97
|
+
product: string;
|
|
98
|
+
bron: string;
|
|
99
|
+
crates_per_layer: number;
|
|
100
|
+
layers_per_cart: number;
|
|
101
|
+
fust_hoogte_cm: number | null;
|
|
102
|
+
plant_hoogte_cm: number | null;
|
|
103
|
+
/** LayerSpace-uitkomst uit fustmaat × laagmaat; null = maten onbekend. */
|
|
104
|
+
layerspace_max: number | null;
|
|
105
|
+
ladingdrager: string;
|
|
106
|
+
ladingdrager_hoogte_cm: number | null;
|
|
107
|
+
max_crates_per_layer: number | null;
|
|
108
|
+
standaard_lagen: number | null;
|
|
109
|
+
}
|
|
110
|
+
export type FysiekeStatus = "gecontroleerd" | "niet_te_controleren" | "onmogelijk";
|
|
111
|
+
export interface FysiekOordeel {
|
|
112
|
+
status: FysiekeStatus;
|
|
113
|
+
blokkeren: string[];
|
|
114
|
+
waarschuwen: string[];
|
|
115
|
+
ontbreekt: string[];
|
|
116
|
+
}
|
|
117
|
+
export declare function fysiekeBelading(i: FysiekeInvoer): FysiekOordeel;
|
|
96
118
|
//# sourceMappingURL=beladingRegels.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"beladingRegels.d.ts","sourceRoot":"","sources":["../../src/lib/beladingRegels.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"beladingRegels.d.ts","sourceRoot":"","sources":["../../src/lib/beladingRegels.ts"],"names":[],"mappings":"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"}
|
|
@@ -116,10 +116,9 @@ export function beladingBeoordeling(inv) {
|
|
|
116
116
|
blokkeren.push("1 plant per fust zonder bron");
|
|
117
117
|
if (!inv.metBron && b.crates_per_layer === 1)
|
|
118
118
|
blokkeren.push("1 fust per laag zonder bron");
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}
|
|
119
|
+
// 1.0.197: lagen boven de standaard van de ladingdrager worden beoordeeld door
|
|
120
|
+
// fysiekeBelading() (hoogte); maxLagenLadingdrager is alleen nog een standaard.
|
|
121
|
+
void positief(inv.maxLagenLadingdrager);
|
|
123
122
|
return { blokkeren, waarschuwen };
|
|
124
123
|
}
|
|
125
124
|
/** 1.0.190: kar met meer dan MAX_FUST_PER_KAR fusten (na indeling) = onmogelijk. */
|
|
@@ -169,3 +168,46 @@ export function traystickerWachtReden(regels) {
|
|
|
169
168
|
export function opnieuwOverSeconden(pogingen) {
|
|
170
169
|
return Math.min(300, 15 * Math.pow(2, Math.max(0, Math.min(5, pogingen))));
|
|
171
170
|
}
|
|
171
|
+
const pos = (n) => typeof n === "number" && Number.isFinite(n) && n > 0;
|
|
172
|
+
export function fysiekeBelading(i) {
|
|
173
|
+
const blokkeren = [];
|
|
174
|
+
const waarschuwen = [];
|
|
175
|
+
const ontbreekt = [];
|
|
176
|
+
// Lagen tegen hoogte
|
|
177
|
+
if (pos(i.fust_hoogte_cm) && pos(i.plant_hoogte_cm) && pos(i.ladingdrager_hoogte_cm)) {
|
|
178
|
+
const laag = Math.max(i.fust_hoogte_cm, i.plant_hoogte_cm);
|
|
179
|
+
const nodig = i.layers_per_cart * laag;
|
|
180
|
+
if (nodig > i.ladingdrager_hoogte_cm + 1e-9) {
|
|
181
|
+
const past = Math.floor(i.ladingdrager_hoogte_cm / laag);
|
|
182
|
+
blokkeren.push(`${i.product}: ${i.layers_per_cart} lagen (bron: ${i.bron}) × ${r1(laag)} cm (grootste van fust ${r1(i.fust_hoogte_cm)} cm en plant inclusief pot ${r1(i.plant_hoogte_cm)} cm) = ${r1(nodig)} cm, ` +
|
|
183
|
+
`terwijl ${i.ladingdrager} ${r1(i.ladingdrager_hoogte_cm)} cm hoog is; er passen maximaal ${past} lagen`);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
if (!pos(i.fust_hoogte_cm))
|
|
188
|
+
ontbreekt.push("fusthoogte");
|
|
189
|
+
if (!pos(i.plant_hoogte_cm))
|
|
190
|
+
ontbreekt.push("planthoogte");
|
|
191
|
+
if (!pos(i.ladingdrager_hoogte_cm))
|
|
192
|
+
ontbreekt.push(`hoogte van ${i.ladingdrager}`);
|
|
193
|
+
}
|
|
194
|
+
// Fusten per laag
|
|
195
|
+
if (i.layerspace_max != null && i.crates_per_layer > i.layerspace_max) {
|
|
196
|
+
blokkeren.push(`${i.product}: ${i.crates_per_layer} fust per laag (bron: ${i.bron}), maar op een laag van ${i.ladingdrager} passen er volgens fustmaat × laagmaat maximaal ${i.layerspace_max}`);
|
|
197
|
+
}
|
|
198
|
+
if (pos(i.max_crates_per_layer) && i.crates_per_layer > i.max_crates_per_layer) {
|
|
199
|
+
blokkeren.push(`${i.product}: ${i.crates_per_layer} fust per laag (bron: ${i.bron}), maar ${i.ladingdrager} staat maximaal ${i.max_crates_per_layer} fust per laag toe`);
|
|
200
|
+
}
|
|
201
|
+
if (i.layerspace_max == null && !ontbreekt.includes("fustmaat of laagmaat"))
|
|
202
|
+
ontbreekt.push("fustmaat of laagmaat");
|
|
203
|
+
const hoogteOnbekend = ontbreekt.some((o) => o !== "fustmaat of laagmaat");
|
|
204
|
+
if (blokkeren.length === 0 && hoogteOnbekend && pos(i.standaard_lagen) && i.layers_per_cart > i.standaard_lagen) {
|
|
205
|
+
const mist = ontbreekt.filter((o) => o !== "fustmaat of laagmaat").join(", ");
|
|
206
|
+
waarschuwen.push(`${i.product}: ${i.layers_per_cart} lagen opgegeven, standaard ${i.standaard_lagen}; niet te controleren omdat de ${mist} ontbreekt. Vul dit in bij Beheer → Gegevens voor karindeling.`);
|
|
207
|
+
}
|
|
208
|
+
const status = blokkeren.length > 0 ? "onmogelijk" : ontbreekt.length > 0 ? "niet_te_controleren" : "gecontroleerd";
|
|
209
|
+
return { status, blokkeren, waarschuwen, ontbreekt };
|
|
210
|
+
}
|
|
211
|
+
function r1(n) {
|
|
212
|
+
return String(Number(n.toFixed(1))).replace(".", ",");
|
|
213
|
+
}
|
|
@@ -73,11 +73,15 @@ carrierLayers) {
|
|
|
73
73
|
const productIds = [...new Set(inputs.map((i) => i.product_id).filter((v) => Boolean(v)))];
|
|
74
74
|
const dimById = new Map();
|
|
75
75
|
if (productIds.length > 0) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
const safeRows = Array.isArray(data) ? data : []
|
|
76
|
+
// 1.0.198: één bron per product (Voorraad of eigen terugval), alleen de gevraagde producten.
|
|
77
|
+
const { data, error } = await sb.rpc("logistics_product_maten", { p_product_ids: productIds });
|
|
78
|
+
if (error)
|
|
79
|
+
throw new Error(`Afmetingen konden niet worden gelezen (${error.message}).`);
|
|
80
|
+
const safeRows = (Array.isArray(data) ? data : []).map((d) => ({
|
|
81
|
+
...d,
|
|
82
|
+
fust_source: d.fust_bron === "vbn" ? "floriday" : d.fust_bron,
|
|
83
|
+
dimension_source: d.missing_reason ? "onbekend" : d.fust_bron,
|
|
84
|
+
}));
|
|
81
85
|
for (const d of safeRows)
|
|
82
86
|
dimById.set(String(d.product_id), d);
|
|
83
87
|
}
|
|
@@ -122,13 +126,12 @@ carrierLayers) {
|
|
|
122
126
|
if (Number.isFinite(carrierLayerCount) && carrierLayerCount > 0)
|
|
123
127
|
kandidaten.push({ layers: carrierLayerCount, bron: `de lagen van ${carrier.name}` });
|
|
124
128
|
for (const kandidaat of kandidaten) {
|
|
125
|
-
|
|
126
|
-
const
|
|
127
|
-
if (
|
|
128
|
-
plantHeight =
|
|
129
|
-
derived.push(`De planthoogte van ${name} was niet
|
|
130
|
-
`${kandidaat.layers} lagen op ${carrier.name} (${carrier.height_cm} cm)
|
|
131
|
-
`(${round1(h / 10)} cm) geeft ${afgeleid} cm.`);
|
|
129
|
+
// 1.0.198: laaghoogte = max(fust, plant incl. pot), dus de laaghoogte zelf is de planthoogte incl. pot.
|
|
130
|
+
const perLayer = Number((carrier.height_cm / kandidaat.layers).toFixed(1));
|
|
131
|
+
if (perLayer > 0 && perLayer >= h / 10) {
|
|
132
|
+
plantHeight = perLayer;
|
|
133
|
+
derived.push(`De planthoogte inclusief pot van ${name} was niet bekend en is berekend uit ${kandidaat.bron}: ` +
|
|
134
|
+
`${kandidaat.layers} lagen op ${carrier.name} (${carrier.height_cm} cm) geeft ${perLayer} cm per laag.`);
|
|
132
135
|
break;
|
|
133
136
|
}
|
|
134
137
|
}
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 1.0.198: laaghoogte = max(fusthoogte, planthoogte inclusief pot).
|
|
3
|
+
* Planthoogte (S15/S02 of handmatig) is altijd inclusief pot; de pot staat in
|
|
4
|
+
* het fust, dus optellen zou de pot dubbel tellen.
|
|
5
|
+
*/
|
|
6
|
+
export declare function laagHoogteCm(fustHoogteCm: number, plantHoogteInclPotCm: number): number;
|
|
1
7
|
export declare const DIMENSION_PLANNER_VERSION = 5;
|
|
2
8
|
export interface DimensionItem {
|
|
3
9
|
order_item_id: string;
|
|
@@ -92,4 +98,9 @@ export interface PlacedRect {
|
|
|
92
98
|
height: number;
|
|
93
99
|
}
|
|
94
100
|
export declare function planByDimensions(items: DimensionItem[], carrier: DimensionCarrier): DimensionPlanResult;
|
|
101
|
+
/**
|
|
102
|
+
* 1.0.197: hoeveel fusten van één maat maximaal op één laag passen, met dezelfde
|
|
103
|
+
* LayerSpace-indeling als de planner (incl. rotatie). null bij onbekende maten.
|
|
104
|
+
*/
|
|
105
|
+
export declare function maxFustenPerLaag(laagLengteCm: number | null | undefined, laagBreedteCm: number | null | undefined, fustLengteCm: number | null | undefined, fustBreedteCm: number | null | undefined): number | null;
|
|
95
106
|
//# sourceMappingURL=dimensionPlanner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dimensionPlanner.d.ts","sourceRoot":"","sources":["../../src/lib/dimensionPlanner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dimensionPlanner.d.ts","sourceRoot":"","sources":["../../src/lib/dimensionPlanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
// Pure functie: geen database, geen netwerk, deterministisch.
|
|
5
5
|
//
|
|
6
6
|
// Werkwijze:
|
|
7
|
-
// 1. Per fust wordt de laaghoogte bepaald: fusthoogte
|
|
7
|
+
// 1. Per fust wordt de laaghoogte bepaald: de grootste van fusthoogte en
|
|
8
|
+
// planthoogte inclusief pot (1.0.198; de pot staat in het fust).
|
|
8
9
|
// 2. Een laag wordt 2D ingedeeld op de bruikbare lengte x breedte van de
|
|
9
10
|
// ladingdrager. Elk fust wordt ook 90 graden gedraaid geprobeerd.
|
|
10
11
|
// 3. Lagen worden gestapeld tot de bruikbare hoogte van de drager op is.
|
|
@@ -13,6 +14,14 @@
|
|
|
13
14
|
// Er wordt nooit een afmeting verzonnen: ontbrekende gegevens worden vooraf
|
|
14
15
|
// gecontroleerd door de aanroeper (zie dimensionData / collectMissingDimensions).
|
|
15
16
|
// ============================================================================
|
|
17
|
+
/**
|
|
18
|
+
* 1.0.198: laaghoogte = max(fusthoogte, planthoogte inclusief pot).
|
|
19
|
+
* Planthoogte (S15/S02 of handmatig) is altijd inclusief pot; de pot staat in
|
|
20
|
+
* het fust, dus optellen zou de pot dubbel tellen.
|
|
21
|
+
*/
|
|
22
|
+
export function laagHoogteCm(fustHoogteCm, plantHoogteInclPotCm) {
|
|
23
|
+
return Math.max(fustHoogteCm, plantHoogteInclPotCm);
|
|
24
|
+
}
|
|
16
25
|
export const DIMENSION_PLANNER_VERSION = 5;
|
|
17
26
|
class LayerSpace {
|
|
18
27
|
constructor(length, width) {
|
|
@@ -84,7 +93,7 @@ export function planByDimensions(items, carrier) {
|
|
|
84
93
|
.map((item) => ({
|
|
85
94
|
item,
|
|
86
95
|
left: Math.max(0, Math.round(item.crates)),
|
|
87
|
-
height: item.crate_height_cm
|
|
96
|
+
height: laagHoogteCm(item.crate_height_cm, item.plant_height_cm),
|
|
88
97
|
}));
|
|
89
98
|
for (const b of batches) {
|
|
90
99
|
const fitsFlat = b.item.crate_length_cm <= carrier.length_cm && b.item.crate_width_cm <= carrier.width_cm;
|
|
@@ -246,3 +255,22 @@ function allowedOnCart(batch, orders, customers, carrier) {
|
|
|
246
255
|
function round1(n) {
|
|
247
256
|
return Number(n.toFixed(1));
|
|
248
257
|
}
|
|
258
|
+
/**
|
|
259
|
+
* 1.0.197: hoeveel fusten van één maat maximaal op één laag passen, met dezelfde
|
|
260
|
+
* LayerSpace-indeling als de planner (incl. rotatie). null bij onbekende maten.
|
|
261
|
+
*/
|
|
262
|
+
export function maxFustenPerLaag(laagLengteCm, laagBreedteCm, fustLengteCm, fustBreedteCm) {
|
|
263
|
+
const ok = (n) => typeof n === "number" && Number.isFinite(n) && n > 0;
|
|
264
|
+
if (!ok(laagLengteCm) || !ok(laagBreedteCm) || !ok(fustLengteCm) || !ok(fustBreedteCm))
|
|
265
|
+
return null;
|
|
266
|
+
// Beide startoriëntaties proberen: blokkeren mag alleen bij aantoonbaar onmogelijk,
|
|
267
|
+
// dus nooit een te lage uitkomst gebruiken.
|
|
268
|
+
const tel = (a, b) => {
|
|
269
|
+
const space = new LayerSpace(laagLengteCm, laagBreedteCm);
|
|
270
|
+
let n = 0;
|
|
271
|
+
while (n < 100000 && space.place(a, b))
|
|
272
|
+
n++;
|
|
273
|
+
return n;
|
|
274
|
+
};
|
|
275
|
+
return Math.max(tel(fustLengteCm, fustBreedteCm), tel(fustBreedteCm, fustLengteCm));
|
|
276
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { handleLogisticsTick } from "./logistics-tick.server.js";
|
|
2
2
|
export { handleShippingNoteNow } from "./logistics-shipping-note-now.server.js";
|
|
3
3
|
export { handleLogisticsPing } from "./logistics-ping.server.js";
|
|
4
|
+
export { handleLogisticsPlanNow } from "./logistics-plan-now.server.js";
|
|
4
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/handlers/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/handlers/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC"}
|
|
@@ -4,3 +4,4 @@
|
|
|
4
4
|
export { handleLogisticsTick } from "./logistics-tick.server.js";
|
|
5
5
|
export { handleShippingNoteNow } from "./logistics-shipping-note-now.server.js";
|
|
6
6
|
export { handleLogisticsPing } from "./logistics-ping.server.js";
|
|
7
|
+
export { handleLogisticsPlanNow } from "./logistics-plan-now.server.js";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { SupabaseClient } from "@supabase/supabase-js";
|
|
2
|
+
/** Timing-safe vergelijking van twee teksten (zonder Node-crypto). */
|
|
3
|
+
export declare function gelijkeSleutel(a: string, b: string): boolean;
|
|
4
|
+
/** Leest en controleert de body. Leeg mag; anders {order_ids: uuid[]} met max 1000. */
|
|
5
|
+
export declare function leesOrderIds(raw: string): {
|
|
6
|
+
ok: true;
|
|
7
|
+
ids: string[];
|
|
8
|
+
} | {
|
|
9
|
+
ok: false;
|
|
10
|
+
fout: string;
|
|
11
|
+
};
|
|
12
|
+
type WaitUntil = (p: Promise<unknown>) => void;
|
|
13
|
+
export declare function handleLogisticsPlanNow(request: Request, supabase: SupabaseClient, opts?: {
|
|
14
|
+
moduleProject?: boolean;
|
|
15
|
+
waitUntil?: WaitUntil;
|
|
16
|
+
}): Promise<Response>;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=logistics-plan-now.server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logistics-plan-now.server.d.ts","sourceRoot":"","sources":["../../../src/lib/handlers/logistics-plan-now.server.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAW5D,sEAAsE;AACtE,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAQ5D;AAED,uFAAuF;AACvF,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAgBnG;AAED,KAAK,SAAS,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;AAc/C,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,cAAc,EACxB,IAAI,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,SAAS,CAAA;CAAE,GACxD,OAAO,CAAC,QAAQ,CAAC,CA6CnB"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// src/lib/handlers/logistics-plan-now.server.ts — direct wekken buiten pg_net
|
|
3
|
+
// ============================================================================
|
|
4
|
+
// POST /api/public/hooks/logistics-plan-now
|
|
5
|
+
// Contract (vastgelegd met Verkoop):
|
|
6
|
+
// header x-logistics-key = module_runtime_config 'logistics_tick_apikey'
|
|
7
|
+
// body {"order_ids": uuid[]} (optioneel, max 1000)
|
|
8
|
+
// 200/202 binnen 1 s; het indelen loopt via waitUntil.
|
|
9
|
+
// 401 = verkeerde sleutel; 500 = sleutel niet ingesteld (met reden).
|
|
10
|
+
// Gedrag gelijk aan een kick: wachttijd (debounce) en kick_pending blijven
|
|
11
|
+
// gelden (logistics_plan_now_gate). De pg_net-kick blijft het vangnet.
|
|
12
|
+
// ============================================================================
|
|
13
|
+
import { engineIdent, runLockedTickRound } from "./logistics-tick.server.js";
|
|
14
|
+
const CORS_HEADERS = {
|
|
15
|
+
"Access-Control-Allow-Origin": "*",
|
|
16
|
+
"Access-Control-Allow-Headers": "x-logistics-key, content-type",
|
|
17
|
+
"Access-Control-Allow-Methods": "POST, OPTIONS",
|
|
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;
|
|
20
|
+
/** Timing-safe vergelijking van twee teksten (zonder Node-crypto). */
|
|
21
|
+
export function gelijkeSleutel(a, b) {
|
|
22
|
+
const enc = new TextEncoder();
|
|
23
|
+
const x = enc.encode(a);
|
|
24
|
+
const y = enc.encode(b);
|
|
25
|
+
let diff = x.length ^ y.length;
|
|
26
|
+
const n = Math.max(x.length, y.length);
|
|
27
|
+
for (let i = 0; i < n; i++)
|
|
28
|
+
diff |= (x[i] ?? 0) ^ (y[i] ?? 0);
|
|
29
|
+
return diff === 0;
|
|
30
|
+
}
|
|
31
|
+
/** Leest en controleert de body. Leeg mag; anders {order_ids: uuid[]} met max 1000. */
|
|
32
|
+
export function leesOrderIds(raw) {
|
|
33
|
+
if (!raw.trim())
|
|
34
|
+
return { ok: true, ids: [] };
|
|
35
|
+
let body;
|
|
36
|
+
try {
|
|
37
|
+
body = JSON.parse(raw);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return { ok: false, fout: "Body is geen geldige JSON." };
|
|
41
|
+
}
|
|
42
|
+
const ids = body?.order_ids;
|
|
43
|
+
if (ids === undefined || ids === null)
|
|
44
|
+
return { ok: true, ids: [] };
|
|
45
|
+
if (!Array.isArray(ids))
|
|
46
|
+
return { ok: false, fout: "order_ids moet een lijst zijn." };
|
|
47
|
+
if (ids.length > 1000)
|
|
48
|
+
return { ok: false, fout: "Maximaal 1000 order_ids per aanroep." };
|
|
49
|
+
if (!ids.every((v) => typeof v === "string" && UUID_RE.test(v))) {
|
|
50
|
+
return { ok: false, fout: "order_ids bevat een waarde die geen uuid is." };
|
|
51
|
+
}
|
|
52
|
+
return { ok: true, ids: ids };
|
|
53
|
+
}
|
|
54
|
+
async function vindWaitUntil(opts) {
|
|
55
|
+
if (opts?.waitUntil)
|
|
56
|
+
return opts.waitUntil;
|
|
57
|
+
try {
|
|
58
|
+
const modName = "cloudflare:workers";
|
|
59
|
+
const mod = (await import(/* @vite-ignore */ modName));
|
|
60
|
+
if (typeof mod.waitUntil === "function")
|
|
61
|
+
return mod.waitUntil;
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// Geen Workers-runtime (bijv. dev-server): dan gewoon op de achtergrond.
|
|
65
|
+
}
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
export async function handleLogisticsPlanNow(request, supabase, opts) {
|
|
69
|
+
const ident = engineIdent(opts);
|
|
70
|
+
const json = (status, body) => new Response(JSON.stringify({ ...ident, ...body }), {
|
|
71
|
+
status,
|
|
72
|
+
headers: { "Content-Type": "application/json", ...CORS_HEADERS },
|
|
73
|
+
});
|
|
74
|
+
if (request.method === "OPTIONS")
|
|
75
|
+
return new Response(null, { status: 204, headers: CORS_HEADERS });
|
|
76
|
+
if (request.method !== "POST")
|
|
77
|
+
return json(405, { ok: false, error: "Alleen POST" });
|
|
78
|
+
const { data: cfg, error: cfgError } = await supabase
|
|
79
|
+
.from("module_runtime_config")
|
|
80
|
+
.select("value")
|
|
81
|
+
.eq("key", "logistics_tick_apikey")
|
|
82
|
+
.maybeSingle();
|
|
83
|
+
const expected = String(cfg?.value ?? "").trim();
|
|
84
|
+
if (cfgError || !expected) {
|
|
85
|
+
return json(500, {
|
|
86
|
+
ok: false,
|
|
87
|
+
error: cfgError
|
|
88
|
+
? `Sleutel kon niet worden gelezen: ${cfgError.message}`
|
|
89
|
+
: "logistics_tick_apikey ontbreekt in module_runtime_config; vul deze voor deze omgeving in.",
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
const given = request.headers.get("x-logistics-key") ?? "";
|
|
93
|
+
if (!gelijkeSleutel(given, expected))
|
|
94
|
+
return json(401, { ok: false, error: "Unauthorized" });
|
|
95
|
+
const body = leesOrderIds(await request.text());
|
|
96
|
+
if (!body.ok)
|
|
97
|
+
return json(400, { ok: false, error: body.fout });
|
|
98
|
+
const { data: gate, error: gateError } = await supabase.rpc("logistics_plan_now_gate", {
|
|
99
|
+
p_order_ids: body.ids,
|
|
100
|
+
});
|
|
101
|
+
if (gateError)
|
|
102
|
+
return json(500, { ok: false, error: gateError.message });
|
|
103
|
+
const actie = String(gate?.actie ?? "onbekend");
|
|
104
|
+
if (actie === "start") {
|
|
105
|
+
const werk = runLockedTickRound(supabase, ident).catch((e) => {
|
|
106
|
+
console.error("[logistics-plan-now] ronde mislukt:", e?.message ?? e);
|
|
107
|
+
});
|
|
108
|
+
const wu = await vindWaitUntil(opts);
|
|
109
|
+
if (wu)
|
|
110
|
+
wu(werk);
|
|
111
|
+
return json(202, { ok: true, actie, orders: body.ids.length });
|
|
112
|
+
}
|
|
113
|
+
return json(200, { ok: true, actie, orders: body.ids.length });
|
|
114
|
+
}
|
|
@@ -10,6 +10,11 @@ export declare function engineIdent(opts?: {
|
|
|
10
10
|
export declare function handleLogisticsTick(request: Request, supabase: SupabaseClient, opts?: {
|
|
11
11
|
moduleProject?: boolean;
|
|
12
12
|
}): Promise<Response>;
|
|
13
|
+
/**
|
|
14
|
+
* 1.0.196: de ronde zelf (rondeslot + werk), los van de sleutelcontrole, zodat
|
|
15
|
+
* ook /api/public/hooks/logistics-plan-now hem kan starten.
|
|
16
|
+
*/
|
|
17
|
+
export declare function runLockedTickRound(supabase: SupabaseClient, ident: ReturnType<typeof engineIdent>): Promise<Response>;
|
|
13
18
|
/** Vaste sleutel van het rondeslot; gelijk aan de check in logistics_plan_kick(). */
|
|
14
19
|
export declare const TICK_ROUND_LOCK_KEY = "tick:ronde";
|
|
15
20
|
//# sourceMappingURL=logistics-tick.server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logistics-tick.server.d.ts","sourceRoot":"","sources":["../../../src/lib/handlers/logistics-tick.server.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,qFAAqF;AACrF,wBAAgB,WAAW,CAAC,IAAI,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE;;;;EAE7D;AAQD,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,cAAc,EACxB,IAAI,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GACjC,OAAO,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"logistics-tick.server.d.ts","sourceRoot":"","sources":["../../../src/lib/handlers/logistics-tick.server.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,qFAAqF;AACrF,wBAAgB,WAAW,CAAC,IAAI,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE;;;;EAE7D;AAQD,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,cAAc,EACxB,IAAI,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GACjC,OAAO,CAAC,QAAQ,CAAC,CA0BnB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,GACpC,OAAO,CAAC,QAAQ,CAAC,CA4EnB;AAED,qFAAqF;AACrF,eAAO,MAAM,mBAAmB,eAAe,CAAC"}
|
|
@@ -37,6 +37,13 @@ export async function handleLogisticsTick(request, supabase, opts) {
|
|
|
37
37
|
headers: { "Content-Type": "application/json", ...CORS_HEADERS },
|
|
38
38
|
});
|
|
39
39
|
}
|
|
40
|
+
return runLockedTickRound(supabase, ident);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 1.0.196: de ronde zelf (rondeslot + werk), los van de sleutelcontrole, zodat
|
|
44
|
+
* ook /api/public/hooks/logistics-plan-now hem kan starten.
|
|
45
|
+
*/
|
|
46
|
+
export async function runLockedTickRound(supabase, ident) {
|
|
40
47
|
// Alle databasetoegang loopt via de meegegeven client (geen gedeelde state).
|
|
41
48
|
const { tickJob } = await import("../logisticsRecalcJob.server.js");
|
|
42
49
|
// Hartslag: de schermen kunnen zo laten zien of de verwerking nog loopt.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const WAAR_INVULLEN = "Er wordt niet gegokt. Vul de ontbrekende waarde in bij Engine \u2192 Beheer \u2192 \"Gegevens voor karindeling\" of bij het product in Voorraad.";
|
|
2
|
+
export declare function gewichtOnbekendTekst(producten: string[]): string;
|
|
3
|
+
export declare function ladingdragerNietInBeheerTekst(perCode: Map<string, string[]>): string;
|
|
4
|
+
//# sourceMappingURL=invoerTeksten.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invoerTeksten.d.ts","sourceRoot":"","sources":["../../src/lib/invoerTeksten.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,aAAa,qJACgH,CAAC;AAQ3I,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAKhE;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAQpF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// src/lib/invoerTeksten.ts — 1.0.196 (E6) blokkades/waarschuwingen in gewone taal
|
|
3
|
+
// ============================================================================
|
|
4
|
+
// Elke tekst zegt: wat ontbreekt, bij welk product, en waar je het invult.
|
|
5
|
+
export const WAAR_INVULLEN = "Er wordt niet gegokt. Vul de ontbrekende waarde in bij Engine → Beheer → \"Gegevens voor karindeling\" of bij het product in Voorraad.";
|
|
6
|
+
function lijst(namen, max = 5) {
|
|
7
|
+
const uniek = [...new Set(namen.filter(Boolean))];
|
|
8
|
+
const deel = uniek.slice(0, max).join(", ");
|
|
9
|
+
return uniek.length > max ? `${deel} en ${uniek.length - max} meer` : deel;
|
|
10
|
+
}
|
|
11
|
+
export function gewichtOnbekendTekst(producten) {
|
|
12
|
+
return (`Gewicht per fust onbekend bij ${lijst(producten)}. De maximale kilo's van de kar zijn daardoor niet gecontroleerd. ` +
|
|
13
|
+
`Vul het gewicht in bij Engine → Beheer → "Gegevens voor karindeling" of bij het product in Voorraad.`);
|
|
14
|
+
}
|
|
15
|
+
export function ladingdragerNietInBeheerTekst(perCode) {
|
|
16
|
+
const delen = [...perCode.entries()].map(([code, namen]) => namen.length > 0 ? `"${code}" (bij ${lijst(namen, 3)})` : `"${code}"`);
|
|
17
|
+
return (`Ladingdrager ${delen.join(", ")} staat niet in beheer, dus de capaciteit is onbekend. ` +
|
|
18
|
+
`Voeg hem toe bij Engine → Ladingdragers; tot dan wordt deze order niet ingedeeld.`);
|
|
19
|
+
}
|
|
@@ -13,7 +13,15 @@ export interface LayoutPrintInput {
|
|
|
13
13
|
/** Alleen snake_case-velden: print_plek_id, order_id, ordernummer, queue_item_id, cart_id, fulfillment_order_id. */
|
|
14
14
|
payload: Record<string, unknown>;
|
|
15
15
|
idempotentieSleutel: string;
|
|
16
|
+
/** 1.0.196: een teruggegeven bestaande opdracht moet dezelfde sleutel(basis) hebben. */
|
|
17
|
+
zelfdeBronVerplicht?: boolean;
|
|
16
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* Hoort een bestaande opdracht bij dezelfde bron? Gelijk als de sleutel van de
|
|
21
|
+
* opdracht gelijk is aan de onze, of een vervanging daarvan (":na:<id>").
|
|
22
|
+
* Onbekende sleutel = niet gelijk (fail closed).
|
|
23
|
+
*/
|
|
24
|
+
export declare function bestaandeOpdrachtVanZelfdeBron(onze: string, vanOpdracht: string | null): boolean;
|
|
17
25
|
export type LayoutPrintResult = {
|
|
18
26
|
ok: true;
|
|
19
27
|
jobId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layoutPrint.server.d.ts","sourceRoot":"","sources":["../../src/lib/layoutPrint.server.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oHAAoH;IACpH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,mBAAmB,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"layoutPrint.server.d.ts","sourceRoot":"","sources":["../../src/lib/layoutPrint.server.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,24 @@
|
|
|
6
6
|
// standaardregels). Fouten (GEEN_PRINTER, GEEN_LAYOUT, GEEN_EXTERN_DOCUMENT)
|
|
7
7
|
// komen als leesbare fout terug; er is geen stille terugval.
|
|
8
8
|
// ============================================================================
|
|
9
|
+
/**
|
|
10
|
+
* Hoort een bestaande opdracht bij dezelfde bron? Gelijk als de sleutel van de
|
|
11
|
+
* opdracht gelijk is aan de onze, of een vervanging daarvan (":na:<id>").
|
|
12
|
+
* Onbekende sleutel = niet gelijk (fail closed).
|
|
13
|
+
*/
|
|
14
|
+
export function bestaandeOpdrachtVanZelfdeBron(onze, vanOpdracht) {
|
|
15
|
+
if (!vanOpdracht)
|
|
16
|
+
return false;
|
|
17
|
+
const basis = (s) => s.split(":na:")[0].split(":herprint:")[0];
|
|
18
|
+
return basis(vanOpdracht) === basis(onze);
|
|
19
|
+
}
|
|
20
|
+
async function printJobSleutel(sb, jobId) {
|
|
21
|
+
const { data, error } = await sb.from("print_jobs").select("idempotentie_sleutel").eq("id", jobId).maybeSingle();
|
|
22
|
+
if (error || !data)
|
|
23
|
+
return null;
|
|
24
|
+
const v = data.idempotentie_sleutel;
|
|
25
|
+
return typeof v === "string" && v ? v : null;
|
|
26
|
+
}
|
|
9
27
|
const UUID_RE = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i;
|
|
10
28
|
/** Haalt het bestaande opdracht-id uit een DUBBEL_ORIGINEEL-antwoord (details, hint of tekst). */
|
|
11
29
|
export function bestaandOpdrachtId(...bronnen) {
|
|
@@ -195,6 +213,20 @@ export async function printViaLayoutGecontroleerd(sb, input, diepte = 0) {
|
|
|
195
213
|
return r;
|
|
196
214
|
else
|
|
197
215
|
return { ok: false, errorCode: r.errorCode, error: r.error };
|
|
216
|
+
// 1.0.196: bij stickers telt een bestaande opdracht alleen als hij van dezelfde
|
|
217
|
+
// bron is. Hoort hij bij een andere order op dezelfde kar, dan is dit een
|
|
218
|
+
// weigering die zichtbaar moet blijven (nooit stil "in de printwachtrij").
|
|
219
|
+
if (input.zelfdeBronVerplicht) {
|
|
220
|
+
const sleutel = await printJobSleutel(sb, bestaandId);
|
|
221
|
+
if (!bestaandeOpdrachtVanZelfdeBron(input.idempotentieSleutel, sleutel)) {
|
|
222
|
+
return {
|
|
223
|
+
ok: false,
|
|
224
|
+
errorCode: "DUBBEL_ORIGINEEL_ANDERE_BRON",
|
|
225
|
+
error: `Layouts weigerde deze sticker ("DUBBEL_ORIGINEEL"): op dezelfde kar staat al een sticker van een andere order (opdracht ${bestaandId}). ` +
|
|
226
|
+
`Kies "Opnieuw proberen" zodra Layouts per bron controleert.`,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
}
|
|
198
230
|
const status = await printJobStatus(sb, bestaandId);
|
|
199
231
|
if (status && ACTIEF.has(status)) {
|
|
200
232
|
return { ok: true, jobId: bestaandId, printerId: r.ok ? r.printerId : null, bestaand: true };
|
|
@@ -134,6 +134,10 @@ export interface BeladingRules {
|
|
|
134
134
|
optimalFill: boolean;
|
|
135
135
|
/** Globale methode voor de karrenindeling. */
|
|
136
136
|
layoutMethod: "belading" | "afmetingen";
|
|
137
|
+
/** 1.0.196 (E1): ontbrekende fusten per laag / lagen aanvullen uit de ladingdrager. Standaard uit. */
|
|
138
|
+
aanvullenUitLadingdrager: boolean;
|
|
139
|
+
/** 1.0.196 (E3): gewicht per fust verplicht (anders alleen waarschuwing). Standaard uit. */
|
|
140
|
+
gewichtVerplicht: boolean;
|
|
137
141
|
}
|
|
138
142
|
/** Leest de actieve werkwijze en vertaalt "2. Beladingindeling" naar plannergrenzen. */
|
|
139
143
|
export declare function loadBeladingRules(sb: SupabaseClient): Promise<BeladingRules | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadCarrierPlanning.server.d.ts","sourceRoot":"","sources":["../../src/lib/loadCarrierPlanning.server.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,eAAe,EAEpB,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAA0B,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"loadCarrierPlanning.server.d.ts","sourceRoot":"","sources":["../../src/lib/loadCarrierPlanning.server.ts"],"names":[],"mappings":"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"}
|