@flowselections/logistiek-engine 1.0.202 → 1.0.206
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 +885 -0
- package/dist-lib/components/BeladingIndelingCard.d.ts.map +1 -1
- package/dist-lib/components/BeladingIndelingCard.js +15 -3
- package/dist-lib/components/LadingdragersPage.d.ts.map +1 -1
- package/dist-lib/components/LadingdragersPage.js +1 -1
- package/dist-lib/integrations/supabase/types.d.ts +415 -0
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/extraPlaten.d.ts +9 -0
- package/dist-lib/lib/extraPlaten.d.ts.map +1 -1
- package/dist-lib/lib/extraPlaten.js +15 -0
- package/dist-lib/lib/floridayCartCarriers.d.ts +3 -0
- package/dist-lib/lib/floridayCartCarriers.d.ts.map +1 -1
- package/dist-lib/lib/floridayCartCarriers.js +6 -1
- package/dist-lib/lib/floridayPush.server.d.ts.map +1 -1
- package/dist-lib/lib/floridayPush.server.js +5 -3
- package/dist-lib/lib/loadCarrierPlanner.d.ts +68 -1
- package/dist-lib/lib/loadCarrierPlanner.d.ts.map +1 -1
- package/dist-lib/lib/loadCarrierPlanner.js +293 -280
- package/dist-lib/lib/loadCarrierPlanning.server.d.ts.map +1 -1
- package/dist-lib/lib/loadCarrierPlanning.server.js +16 -3
- package/dist-lib/lib/moduleVersion.d.ts +1 -1
- package/dist-lib/lib/moduleVersion.js +1 -1
- package/dist-lib/lib/quarantaine.d.ts +9 -0
- package/dist-lib/lib/quarantaine.d.ts.map +1 -0
- package/dist-lib/lib/quarantaine.js +13 -0
- package/dist-lib/lib/shippingNoteQueue.server.d.ts.map +1 -1
- package/dist-lib/lib/shippingNoteQueue.server.js +11 -0
- package/dist-lib/lib/stickerQueue.server.d.ts.map +1 -1
- package/dist-lib/lib/stickerQueue.server.js +13 -0
- package/package.json +1 -1
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
export declare function extraPlaten(lagenGebruikt: unknown): number | null;
|
|
2
2
|
/** "Deense container + 3 platen (3,2 lagen, 41 %)" — alleen voor eigen documenten en het orderscherm. */
|
|
3
3
|
export declare function ladingdragerPlatenTekst(naam: string, lagenGebruikt: unknown, pct?: unknown): string;
|
|
4
|
+
/** 1.0.201: blokkade per kar. Zelfde regel als public.logistics_kar_blokkade(text, numeric, numeric). */
|
|
5
|
+
export type KarBlokkade = {
|
|
6
|
+
teHoog: boolean;
|
|
7
|
+
blokkade: {
|
|
8
|
+
code: "kar_te_hoog";
|
|
9
|
+
tekst: string;
|
|
10
|
+
} | null;
|
|
11
|
+
};
|
|
12
|
+
export declare function karBlokkade(kar: unknown, lagenGebruikt: unknown, maxLagen: unknown): KarBlokkade;
|
|
4
13
|
//# sourceMappingURL=extraPlaten.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extraPlaten.d.ts","sourceRoot":"","sources":["../../src/lib/extraPlaten.ts"],"names":[],"mappings":"AAIA,wBAAgB,WAAW,CAAC,aAAa,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAKjE;AAED,yGAAyG;AACzG,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,MAAM,CAWnG"}
|
|
1
|
+
{"version":3,"file":"extraPlaten.d.ts","sourceRoot":"","sources":["../../src/lib/extraPlaten.ts"],"names":[],"mappings":"AAIA,wBAAgB,WAAW,CAAC,aAAa,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAKjE;AAED,yGAAyG;AACzG,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,MAAM,CAWnG;AAED,yGAAyG;AACzG,MAAM,MAAM,WAAW,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE;QAAE,IAAI,EAAE,aAAa,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;CAAE,CAAC;AAEvG,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,WAAW,CAahG"}
|
|
@@ -24,3 +24,18 @@ export function ladingdragerPlatenTekst(naam, lagenGebruikt, pct) {
|
|
|
24
24
|
}
|
|
25
25
|
return t;
|
|
26
26
|
}
|
|
27
|
+
const nl = (n) => String(Math.round(n * 100) / 100).replace(".", ",");
|
|
28
|
+
export function karBlokkade(kar, lagenGebruikt, maxLagen) {
|
|
29
|
+
const l = Number(lagenGebruikt);
|
|
30
|
+
const m = Number(maxLagen);
|
|
31
|
+
if (lagenGebruikt == null || maxLagen == null || !Number.isFinite(l) || !Number.isFinite(m) || m <= 0 || l <= m + 0.001) {
|
|
32
|
+
return { teHoog: false, blokkade: null };
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
teHoog: true,
|
|
36
|
+
blokkade: {
|
|
37
|
+
code: "kar_te_hoog",
|
|
38
|
+
tekst: `Kar ${kar ?? "?"} heeft ${nl(l)} lagen, maximaal ${nl(m)}. Deel de order opnieuw in of pas de belading aan.`,
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export interface CartInput {
|
|
2
2
|
cartNumber: number | null;
|
|
3
3
|
layersUsed: number | null;
|
|
4
|
+
/** 1.0.201: maximaal aantal lagen van de ladingdrager; te hoog = niet versturen. */
|
|
5
|
+
maxLayers?: number | null;
|
|
4
6
|
barcode?: string | null;
|
|
5
7
|
items: Array<{
|
|
6
8
|
fulfillmentRequestId: string | null;
|
|
@@ -50,6 +52,7 @@ export declare function groupOwnCartLines(lines: Array<Record<string, unknown>>,
|
|
|
50
52
|
cart_number: number | null;
|
|
51
53
|
carrier_type: string | null;
|
|
52
54
|
total_layers_used: number | null;
|
|
55
|
+
max_layers: number | null;
|
|
53
56
|
order_cart_items: Array<Record<string, unknown>>;
|
|
54
57
|
}>;
|
|
55
58
|
export declare function buildCartCarriers(carts: CartInput[], requests: DeliveryRequestInput[]): CartCarriersResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floridayCartCarriers.d.ts","sourceRoot":"","sources":["../../src/lib/floridayCartCarriers.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,KAAK,CAAC;QAAE,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;CAC9E;AAED,MAAM,WAAW,oBAAoB;IACnC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,0BAA0B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,0BAA0B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,eAAe;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,WAAW;IAC1B,wBAAwB,EAAE,MAAM,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B;AAED,MAAM,MAAM,kBAAkB,GAC1B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,YAAY,EAAE,WAAW,EAAE,CAAA;CAAE,GACzC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/C;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACrC,UAAU,EAAE,MAAM,EAAE,GACnB,KAAK,CAAC;IACP,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAClD,CAAC,
|
|
1
|
+
{"version":3,"file":"floridayCartCarriers.d.ts","sourceRoot":"","sources":["../../src/lib/floridayCartCarriers.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
// niet met de delivery-order, dan wordt er niets opgebouwd en komt er een
|
|
8
8
|
// duidelijke reden terug. Er wordt nooit stil teruggevallen op 0 lagen.
|
|
9
9
|
// ============================================================================
|
|
10
|
-
import { extraPlaten } from "./extraPlaten.js";
|
|
10
|
+
import { extraPlaten, karBlokkade } from "./extraPlaten.js";
|
|
11
11
|
/**
|
|
12
12
|
* Groepeert karregels (met geneste `order_carts`) per kar en houdt alleen de
|
|
13
13
|
* regels van de eigen orderregels over. Werkt ook voor een gedeelde bufferkar
|
|
@@ -31,6 +31,7 @@ export function groupOwnCartLines(lines, ownItemIds) {
|
|
|
31
31
|
cart_number: cart?.["cart_number"] ?? null,
|
|
32
32
|
carrier_type: cart?.["carrier_type"] ?? null,
|
|
33
33
|
total_layers_used: cart?.["total_layers_used"] ?? null,
|
|
34
|
+
max_layers: cart?.["max_layers"] ?? null,
|
|
34
35
|
order_cart_items: [],
|
|
35
36
|
};
|
|
36
37
|
carts.set(id, entry);
|
|
@@ -57,6 +58,10 @@ export function buildCartCarriers(carts, requests) {
|
|
|
57
58
|
error: `Kar ${label} heeft geen geldig aantal lagen; de belading wordt niet verstuurd.`,
|
|
58
59
|
};
|
|
59
60
|
}
|
|
61
|
+
const hoog = karBlokkade(label, layers, cart.maxLayers ?? null);
|
|
62
|
+
if (hoog.blokkade) {
|
|
63
|
+
return { ok: false, code: hoog.blokkade.code, error: hoog.blokkade.tekst };
|
|
64
|
+
}
|
|
60
65
|
const perRequest = new Map();
|
|
61
66
|
for (const item of cart.items) {
|
|
62
67
|
const id = String(item.fulfillmentRequestId ?? "").trim();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floridayPush.server.d.ts","sourceRoot":"","sources":["../../src/lib/floridayPush.server.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"floridayPush.server.d.ts","sourceRoot":"","sources":["../../src/lib/floridayPush.server.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAI5D,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAc/C,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAUlD;AAaD,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,YAAY,EAAE,OAAO,2BAA2B,EAAE,WAAW,EAAE,CAAC;CACjE;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,mBAAmB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACxD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC;AAUnE;;;;GAIG;AACH,wBAAsB,8BAA8B,CAClD,EAAE,EAAE,cAAc,EAClB,YAAY,EAAE,MAAM,GACnB,OAAO,CACN;IACE,EAAE,EAAE,IAAI,CAAC;IACT,eAAe,EAAE,MAAM,CAAC;IACxB,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,cAAc,EAAE,OAAO,2BAA2B,EAAE,oBAAoB,EAAE,CAAC;IAC3E,OAAO,EAAE,MAAM,CAAC;CACjB,GACD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAC7C,CAoEA;AAED,8CAA8C;AAC9C,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,cAAc,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,CAAC,CAmItB;AAQD,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAW3F;AAED,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhG;AA6BD;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,OAAO,GAAG,mBAAmB,GAAG,gBAAgB,CAAC;AAElF,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,OAAO,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAYD,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,cAAc,EAClB,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GACjD,OAAO,CAAC,eAAe,CAAC,CAqN1B;AAQD,wBAAsB,wBAAwB,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,SAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAS3F"}
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
// - Supabase-client komt altijd als eerste parameter binnen (geen module-state).
|
|
12
12
|
// ============================================================================
|
|
13
13
|
import { isReadOnlyBlocked } from "./floridayWriteMode.js";
|
|
14
|
+
import { zonderQuarantaine } from "./quarantaine.js";
|
|
14
15
|
export const FLORIDAY_PUSH_BATCH = 20;
|
|
15
16
|
export const FLORIDAY_PUSH_LEASE_SECONDS = 120;
|
|
16
17
|
// ---------------------------------------------------------------------------
|
|
@@ -137,7 +138,7 @@ export async function buildFloridayPayload(sb, orderRef) {
|
|
|
137
138
|
// Orderregel → Floriday fulfillmentRequest (order_items.source_line_key).
|
|
138
139
|
const { data: orderItems, error: itemsError } = await sb
|
|
139
140
|
.from("order_items")
|
|
140
|
-
.select("id, source_line_key")
|
|
141
|
+
.select("id, source_line_key, quarantined_at")
|
|
141
142
|
.eq("order_id", row["id"])
|
|
142
143
|
// Regels in quarantaine (Verkoop-herstel) gaan niet mee naar Floriday.
|
|
143
144
|
.is("quarantined_at", null);
|
|
@@ -151,7 +152,7 @@ export async function buildFloridayPayload(sb, orderRef) {
|
|
|
151
152
|
}
|
|
152
153
|
const requestByItem = new Map();
|
|
153
154
|
const ownItemIds = [];
|
|
154
|
-
for (const it of (Array.isArray(orderItems) ? orderItems : [])) {
|
|
155
|
+
for (const it of zonderQuarantaine((Array.isArray(orderItems) ? orderItems : []))) {
|
|
155
156
|
ownItemIds.push(String(it["id"]));
|
|
156
157
|
const key = String(it["source_line_key"] ?? "").trim();
|
|
157
158
|
if (key)
|
|
@@ -163,7 +164,7 @@ export async function buildFloridayPayload(sb, orderRef) {
|
|
|
163
164
|
if (ownItemIds.length > 0) {
|
|
164
165
|
const { data: lines, error: cartsError } = await sb
|
|
165
166
|
.from("order_cart_items")
|
|
166
|
-
.select("cart_id, order_item_id, product_id, product_name, crates, boxes, plants_per_crate, order_carts!inner(id, cart_number, carrier_type, total_layers_used)")
|
|
167
|
+
.select("cart_id, order_item_id, product_id, product_name, crates, boxes, plants_per_crate, order_carts!inner(id, cart_number, carrier_type, total_layers_used, max_layers)")
|
|
167
168
|
.in("order_item_id", ownItemIds)
|
|
168
169
|
.is("order_carts.archived_at", null);
|
|
169
170
|
if (cartsError) {
|
|
@@ -199,6 +200,7 @@ export async function buildFloridayPayload(sb, orderRef) {
|
|
|
199
200
|
const carriers = buildCartCarriers(cartRows.map((cart) => ({
|
|
200
201
|
cartNumber: cart["cart_number"] ?? null,
|
|
201
202
|
layersUsed: cart["total_layers_used"] ?? null,
|
|
203
|
+
maxLayers: cart["max_layers"] ?? null,
|
|
202
204
|
items: (Array.isArray(cart["order_cart_items"])
|
|
203
205
|
? cart["order_cart_items"]
|
|
204
206
|
: []).map((i) => ({
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const LOAD_CARRIER_PLANNER_VERSION =
|
|
1
|
+
export declare const LOAD_CARRIER_PLANNER_VERSION = 4;
|
|
2
2
|
export type CapacityModel = "layered" | "stacked" | "single" | "none";
|
|
3
3
|
export interface CarrierProfile {
|
|
4
4
|
id?: string | null;
|
|
@@ -10,6 +10,8 @@ export interface CarrierProfile {
|
|
|
10
10
|
max_boxes?: number | null;
|
|
11
11
|
max_weight_kg?: number | null;
|
|
12
12
|
allow_mixing?: boolean | null;
|
|
13
|
+
/** 1.0.204: grens "max lagen" uit de werkwijze; begrenst de lagen per kar van een product. */
|
|
14
|
+
werkwijze_max_lagen?: number | null;
|
|
13
15
|
}
|
|
14
16
|
export interface PlannerInputItem {
|
|
15
17
|
order_item_id: string;
|
|
@@ -43,7 +45,64 @@ export interface PlannerOptions {
|
|
|
43
45
|
/** Vanaf zoveel volle lagen krijgt een partij altijd een eigen ladingdrager. */
|
|
44
46
|
ownCarrierFromLayers?: number | null;
|
|
45
47
|
sortOrder?: "location" | "customer" | "product" | "size" | "none";
|
|
48
|
+
/**
|
|
49
|
+
* 1.0.204: menging per laag.
|
|
50
|
+
* "vrij" → lagen per regel = fust ÷ fusten per laag (fractie, zoals Floriday).
|
|
51
|
+
* "per_regel" → een begonnen laag telt per regel als hele laag: ceil(fust ÷ fusten per laag).
|
|
52
|
+
* Standaard "vrij". Gebruik bepaalLaagMenging() om dit uit de werkwijze af te leiden.
|
|
53
|
+
*/
|
|
54
|
+
laagMenging?: "vrij" | "per_regel";
|
|
55
|
+
/**
|
|
56
|
+
* 1.0.205: wie mag een laag delen (alleen bij laagMenging "vrij").
|
|
57
|
+
* klantenPerLaag N: regels van dezelfde klant delen altijd; klanten in groepen van N.
|
|
58
|
+
* beladingenPerLaag M (>= 999 = onbeperkt): binnen een klant hoogstens M regels per laag.
|
|
59
|
+
* Een begonnen laag telt alleen als hele laag als er meer dan één groep op de kar staat.
|
|
60
|
+
*/
|
|
61
|
+
laagGroepen?: {
|
|
62
|
+
klantenPerLaag?: number | null;
|
|
63
|
+
beladingenPerLaag?: number | null;
|
|
64
|
+
} | null;
|
|
65
|
+
}
|
|
66
|
+
/** Grens vanaf waar "beladingen per laag" als onbeperkt geldt (instelling 999 = onbeperkt). */
|
|
67
|
+
export declare const BELADINGEN_ONBEPERKT = 999;
|
|
68
|
+
/**
|
|
69
|
+
* Leidt de menging per laag af uit de werkwijze.
|
|
70
|
+
* Niet vrij als: geen optimale vulling, maximaal N beladingen per laag (N < 999),
|
|
71
|
+
* maximaal N klanten per laag, of één klant per laag.
|
|
72
|
+
*/
|
|
73
|
+
export declare function bepaalLaagMenging(w: {
|
|
74
|
+
optimalFill?: boolean | null;
|
|
75
|
+
maxBeladingenPerLayer?: number | null;
|
|
76
|
+
maxCustomersPerLayer?: number | null;
|
|
77
|
+
oneCustomerPerLayer?: boolean | null;
|
|
78
|
+
}): {
|
|
79
|
+
menging: "vrij" | "per_regel";
|
|
80
|
+
groepen: {
|
|
81
|
+
klantenPerLaag: number | null;
|
|
82
|
+
beladingenPerLaag: number | null;
|
|
83
|
+
};
|
|
84
|
+
reden: string;
|
|
85
|
+
};
|
|
86
|
+
/** Eén regel op een kar, voor de laagberekening. */
|
|
87
|
+
export interface LaagRegel {
|
|
88
|
+
regelId: string;
|
|
89
|
+
klantId: string | null;
|
|
90
|
+
crates: number;
|
|
91
|
+
cpl: number;
|
|
46
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* 1.0.205: lagen op een kar volgens de mengregels.
|
|
95
|
+
* - "per_regel" (optimale vulling uit): Σ ceil(fust ÷ fusten per laag) per regel.
|
|
96
|
+
* - anders: regels vormen groepen die een laag mogen delen (zelfde klant; klanten in
|
|
97
|
+
* groepen van N; binnen een klant hoogstens M regels). Eén groep op de kar → fractie.
|
|
98
|
+
* Meer groepen → elke groep telt in hele lagen: Σ ceil(groep).
|
|
99
|
+
*/
|
|
100
|
+
export declare function karLagen(regels: LaagRegel[], menging?: "vrij" | "per_regel", groepen?: {
|
|
101
|
+
klantenPerLaag?: number | null;
|
|
102
|
+
beladingenPerLaag?: number | null;
|
|
103
|
+
} | null): number;
|
|
104
|
+
/** Lagen van één regel op een kar volgens de menging per laag. */
|
|
105
|
+
export declare function regelLagen(crates: number, cpl: number, menging?: "vrij" | "per_regel"): number;
|
|
47
106
|
export interface PlannedLoadUnitItem {
|
|
48
107
|
order_item_id: string;
|
|
49
108
|
order_id: string | null;
|
|
@@ -81,5 +140,13 @@ export interface PlannerOutput {
|
|
|
81
140
|
carts: PlannedLoadUnit[];
|
|
82
141
|
warnings: string[];
|
|
83
142
|
}
|
|
143
|
+
export declare const LAGEN_MARGE = 0.001;
|
|
144
|
+
/** Capaciteit van een kar: hoogste lagen-per-kar van de producten; anders de ladingdrager. */
|
|
145
|
+
export declare function karCapaciteit(productLagen: Array<number | null | undefined>, ladingdragerLagen: number | null | undefined): {
|
|
146
|
+
capaciteit: number | null;
|
|
147
|
+
bron: "product" | "ladingdrager" | null;
|
|
148
|
+
};
|
|
149
|
+
/** Vulgraad in procenten (heel getal), of null als de capaciteit onbekend is. */
|
|
150
|
+
export declare function karVulgraad(lagen: number, capaciteit: number | null): number | null;
|
|
84
151
|
export declare function planLoadUnits(inputs: PlannerInputItem[], options: PlannerOptions): PlannerOutput;
|
|
85
152
|
//# sourceMappingURL=loadCarrierPlanner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadCarrierPlanner.d.ts","sourceRoot":"","sources":["../../src/lib/loadCarrierPlanner.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEtE,MAAM,WAAW,cAAc;IAC7B,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,aAAa,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"loadCarrierPlanner.d.ts","sourceRoot":"","sources":["../../src/lib/loadCarrierPlanner.ts"],"names":[],"mappings":"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"}
|