@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.
Files changed (30) hide show
  1. package/db/schema/logistiek-engine.sql +885 -0
  2. package/dist-lib/components/BeladingIndelingCard.d.ts.map +1 -1
  3. package/dist-lib/components/BeladingIndelingCard.js +15 -3
  4. package/dist-lib/components/LadingdragersPage.d.ts.map +1 -1
  5. package/dist-lib/components/LadingdragersPage.js +1 -1
  6. package/dist-lib/integrations/supabase/types.d.ts +415 -0
  7. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  8. package/dist-lib/lib/extraPlaten.d.ts +9 -0
  9. package/dist-lib/lib/extraPlaten.d.ts.map +1 -1
  10. package/dist-lib/lib/extraPlaten.js +15 -0
  11. package/dist-lib/lib/floridayCartCarriers.d.ts +3 -0
  12. package/dist-lib/lib/floridayCartCarriers.d.ts.map +1 -1
  13. package/dist-lib/lib/floridayCartCarriers.js +6 -1
  14. package/dist-lib/lib/floridayPush.server.d.ts.map +1 -1
  15. package/dist-lib/lib/floridayPush.server.js +5 -3
  16. package/dist-lib/lib/loadCarrierPlanner.d.ts +68 -1
  17. package/dist-lib/lib/loadCarrierPlanner.d.ts.map +1 -1
  18. package/dist-lib/lib/loadCarrierPlanner.js +293 -280
  19. package/dist-lib/lib/loadCarrierPlanning.server.d.ts.map +1 -1
  20. package/dist-lib/lib/loadCarrierPlanning.server.js +16 -3
  21. package/dist-lib/lib/moduleVersion.d.ts +1 -1
  22. package/dist-lib/lib/moduleVersion.js +1 -1
  23. package/dist-lib/lib/quarantaine.d.ts +9 -0
  24. package/dist-lib/lib/quarantaine.d.ts.map +1 -0
  25. package/dist-lib/lib/quarantaine.js +13 -0
  26. package/dist-lib/lib/shippingNoteQueue.server.d.ts.map +1 -1
  27. package/dist-lib/lib/shippingNoteQueue.server.js +11 -0
  28. package/dist-lib/lib/stickerQueue.server.d.ts.map +1 -1
  29. package/dist-lib/lib/stickerQueue.server.js +13 -0
  30. 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":"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"}
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;AAG5D,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,CAkItB;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"}
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 = 3;
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":"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"}
1
+ {"version":3,"file":"loadCarrierPlanner.d.ts","sourceRoot":"","sources":["../../src/lib/loadCarrierPlanner.ts"],"names":[],"mappings":"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"}