@flowselections/floriday-afhandeling-module 1.0.25 → 1.0.27
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/afhandeling/CapacityWarning.d.ts +10 -0
- package/dist-lib/components/afhandeling/CapacityWarning.d.ts.map +1 -0
- package/dist-lib/components/afhandeling/CapacityWarning.js +12 -0
- package/dist-lib/components/afhandeling/ControlePage.d.ts.map +1 -1
- package/dist-lib/components/afhandeling/ControlePage.js +7 -2
- package/dist-lib/components/afhandeling/DagDetailDialog.d.ts.map +1 -1
- package/dist-lib/components/afhandeling/DagDetailDialog.js +158 -62
- package/dist-lib/components/afhandeling/LeveringenPage.d.ts.map +1 -1
- package/dist-lib/components/afhandeling/LeveringenPage.js +2 -10
- package/dist-lib/components/afhandeling/PickAgendaView.d.ts.map +1 -1
- package/dist-lib/components/afhandeling/PickAgendaView.js +4 -11
- package/dist-lib/components/afhandeling/VervoerdersPage.d.ts.map +1 -1
- package/dist-lib/components/afhandeling/VervoerdersPage.js +2 -5
- package/dist-lib/components/afhandeling/VerzetOrderDialog.d.ts +14 -0
- package/dist-lib/components/afhandeling/VerzetOrderDialog.d.ts.map +1 -0
- package/dist-lib/components/afhandeling/VerzetOrderDialog.js +203 -0
- package/dist-lib/components/afhandeling/WeekAgendaView.d.ts.map +1 -1
- package/dist-lib/components/afhandeling/WeekAgendaView.js +7 -3
- package/dist-lib/components/pickstation/PickstationPage.d.ts.map +1 -1
- package/dist-lib/components/pickstation/PickstationPage.js +1 -0
- package/dist-lib/components/settings/VervoerdersSettingsCard.d.ts.map +1 -1
- package/dist-lib/components/settings/VervoerdersSettingsCard.js +2 -5
- package/dist-lib/hooks/useCapacityCheck.d.ts +10 -0
- package/dist-lib/hooks/useCapacityCheck.d.ts.map +1 -0
- package/dist-lib/hooks/useCapacityCheck.js +22 -0
- package/dist-lib/hooks/useEngineTasks.d.ts +14 -0
- package/dist-lib/hooks/useEngineTasks.d.ts.map +1 -0
- package/dist-lib/hooks/useEngineTasks.js +49 -0
- package/dist-lib/hooks/useOrderPlanning.d.ts +8 -2
- package/dist-lib/hooks/useOrderPlanning.d.ts.map +1 -1
- package/dist-lib/hooks/useOrderPlanning.js +95 -93
- package/dist-lib/index.d.ts +0 -3
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +1 -5
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +9010 -5433
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.d.ts +9010 -5433
- package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.d.ts +9010 -5433
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.d.ts +9184 -5544
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/afhandelingSettings.functions.d.ts +7186 -32
- package/dist-lib/lib/afhandelingSettings.functions.d.ts.map +1 -1
- package/dist-lib/lib/carriers.functions.d.ts +17965 -80
- package/dist-lib/lib/carriers.functions.d.ts.map +1 -1
- package/dist-lib/lib/cartAssignments.functions.d.ts +17965 -80
- package/dist-lib/lib/cartAssignments.functions.d.ts.map +1 -1
- package/dist-lib/lib/cartControl.functions.d.ts +35962 -170
- package/dist-lib/lib/cartControl.functions.d.ts.map +1 -1
- package/dist-lib/lib/cartControl.functions.js +103 -13
- package/dist-lib/lib/floriday.functions.d.ts +9010 -5433
- package/dist-lib/lib/floriday.functions.d.ts.map +1 -1
- package/dist-lib/lib/logisticsEngine/capacity.d.ts +19 -0
- package/dist-lib/lib/logisticsEngine/capacity.d.ts.map +1 -0
- package/dist-lib/lib/logisticsEngine/capacity.js +91 -0
- package/dist-lib/lib/logisticsEngine/engine.d.ts +99 -0
- package/dist-lib/lib/logisticsEngine/engine.d.ts.map +1 -0
- package/dist-lib/lib/logisticsEngine/engine.js +102 -0
- package/dist-lib/lib/logisticsEngine/reschedule.d.ts +65 -0
- package/dist-lib/lib/logisticsEngine/reschedule.d.ts.map +1 -0
- package/dist-lib/lib/logisticsEngine/reschedule.js +86 -0
- package/dist-lib/lib/logisticsEngine/staffPlanning.d.ts +37 -0
- package/dist-lib/lib/logisticsEngine/staffPlanning.d.ts.map +1 -0
- package/dist-lib/lib/logisticsEngine/staffPlanning.js +100 -0
- package/dist-lib/lib/serverFnError.d.ts +10 -0
- package/dist-lib/lib/serverFnError.d.ts.map +1 -0
- package/dist-lib/lib/serverFnError.js +29 -0
- package/dist-lib/lib/serverRoutes/index.d.ts +0 -1
- package/dist-lib/lib/serverRoutes/index.d.ts.map +1 -1
- package/dist-lib/lib/serverRoutes/index.js +0 -1
- package/dist-lib/lib/timezone.d.ts +27 -0
- package/dist-lib/lib/timezone.d.ts.map +1 -0
- package/dist-lib/lib/timezone.js +68 -0
- package/package.json +6 -21
- package/dist-lib/components/engine/CapaciteitsmaatregelenPage.d.ts +0 -2
- package/dist-lib/components/engine/CapaciteitsmaatregelenPage.d.ts.map +0 -1
- package/dist-lib/components/engine/CapaciteitsmaatregelenPage.js +0 -40
- package/dist-lib/components/engine/CapaciteitsmonitorPage.d.ts +0 -2
- package/dist-lib/components/engine/CapaciteitsmonitorPage.d.ts.map +0 -1
- package/dist-lib/components/engine/CapaciteitsmonitorPage.js +0 -49
- package/dist-lib/components/engine/FormulesPage.d.ts +0 -2
- package/dist-lib/components/engine/FormulesPage.d.ts.map +0 -1
- package/dist-lib/components/engine/FormulesPage.js +0 -252
- package/dist-lib/components/engine/PlaceholderPage.d.ts +0 -6
- package/dist-lib/components/engine/PlaceholderPage.d.ts.map +0 -1
- package/dist-lib/components/engine/PlaceholderPage.js +0 -6
- package/dist-lib/components/engine/StrategieenPage.d.ts +0 -2
- package/dist-lib/components/engine/StrategieenPage.d.ts.map +0 -1
- package/dist-lib/components/engine/StrategieenPage.js +0 -80
- package/dist-lib/lib/logisticsEngine/capacity.functions.d.ts +0 -64978
- package/dist-lib/lib/logisticsEngine/capacity.functions.d.ts.map +0 -1
- package/dist-lib/lib/logisticsEngine/capacity.functions.js +0 -90
- package/dist-lib/lib/logisticsEngine/config.d.ts +0 -140
- package/dist-lib/lib/logisticsEngine/config.d.ts.map +0 -1
- package/dist-lib/lib/logisticsEngine/config.js +0 -488
- package/dist-lib/lib/logisticsEngine/enginePickTime.d.ts +0 -29
- package/dist-lib/lib/logisticsEngine/enginePickTime.d.ts.map +0 -1
- package/dist-lib/lib/logisticsEngine/enginePickTime.js +0 -136
- package/dist-lib/lib/logisticsEngine/evaluate.functions.d.ts +0 -16278
- package/dist-lib/lib/logisticsEngine/evaluate.functions.d.ts.map +0 -1
- package/dist-lib/lib/logisticsEngine/evaluate.functions.js +0 -104
- package/dist-lib/lib/logisticsEngine/expression.d.ts +0 -21
- package/dist-lib/lib/logisticsEngine/expression.d.ts.map +0 -1
- package/dist-lib/lib/logisticsEngine/expression.js +0 -263
- package/dist-lib/lib/logisticsEngine/formulas.functions.d.ts +0 -32512
- package/dist-lib/lib/logisticsEngine/formulas.functions.d.ts.map +0 -1
- package/dist-lib/lib/logisticsEngine/formulas.functions.js +0 -58
- package/dist-lib/lib/logisticsEngine/safetyLayer.d.ts +0 -83
- package/dist-lib/lib/logisticsEngine/safetyLayer.d.ts.map +0 -1
- package/dist-lib/lib/logisticsEngine/safetyLayer.js +0 -182
- package/dist-lib/lib/logisticsEngine/strategies.functions.d.ts +0 -129961
- package/dist-lib/lib/logisticsEngine/strategies.functions.d.ts.map +0 -1
- package/dist-lib/lib/logisticsEngine/strategies.functions.js +0 -176
- package/dist-lib/lib/logisticsEngine/variables.d.ts +0 -29
- package/dist-lib/lib/logisticsEngine/variables.d.ts.map +0 -1
- package/dist-lib/lib/logisticsEngine/variables.js +0 -144
- package/dist-lib/lib/logisticsEngine/wizard.functions.d.ts +0 -64976
- package/dist-lib/lib/logisticsEngine/wizard.functions.d.ts.map +0 -1
- package/dist-lib/lib/logisticsEngine/wizard.functions.js +0 -175
- package/dist-lib/lib/serverRoutes/logisticsTick.handler.d.ts +0 -3
- package/dist-lib/lib/serverRoutes/logisticsTick.handler.d.ts.map +0 -1
- package/dist-lib/lib/serverRoutes/logisticsTick.handler.js +0 -42
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Veiligheidslaag — bewaakt of de huidige pickplanning nog haalbaar is.
|
|
3
|
-
*
|
|
4
|
-
* Pure functies zonder externe afhankelijkheden zodat dezelfde rekenkern
|
|
5
|
-
* op de server (cron/evaluatie) en in de browser (live monitor + simulator)
|
|
6
|
-
* gebruikt kan worden.
|
|
7
|
-
*/
|
|
8
|
-
export const DEFAULT_CAPACITY_SETTINGS = {
|
|
9
|
-
measures: [
|
|
10
|
-
{ kind: "skip-break", enabled: true, max: 30 },
|
|
11
|
-
{ kind: "extra-pickers", enabled: true, max: 5, perUnit: 10 },
|
|
12
|
-
{ kind: "overtime", enabled: true, max: 2 },
|
|
13
|
-
{ kind: "earlier-start", enabled: true, max: 2 },
|
|
14
|
-
{ kind: "postpone-orders", enabled: true, max: 999 },
|
|
15
|
-
],
|
|
16
|
-
warningOnly: false,
|
|
17
|
-
amberThresholdMinutes: 30,
|
|
18
|
-
redThresholdMinutes: 0,
|
|
19
|
-
autoApply: false,
|
|
20
|
-
};
|
|
21
|
-
export const MEASURE_LABELS = {
|
|
22
|
-
"earlier-start": "Eerder beginnen",
|
|
23
|
-
"skip-break": "Pauze overslaan",
|
|
24
|
-
overtime: "Overwerken",
|
|
25
|
-
"extra-pickers": "Extra medewerkers inzetten",
|
|
26
|
-
"postpone-orders": "Orders doorschuiven",
|
|
27
|
-
};
|
|
28
|
-
export const MEASURE_UNITS = {
|
|
29
|
-
"earlier-start": "uur",
|
|
30
|
-
"skip-break": "minuten",
|
|
31
|
-
overtime: "uur",
|
|
32
|
-
"extra-pickers": "personen",
|
|
33
|
-
"postpone-orders": "orders",
|
|
34
|
-
};
|
|
35
|
-
function measureCapacity(input, extraHours, extraPickers, extraBreakMinutes) {
|
|
36
|
-
const hours = Math.max(0, input.remainingWorkHours + extraHours + extraBreakMinutes / 60);
|
|
37
|
-
const pickers = Math.max(0, input.pickers + extraPickers);
|
|
38
|
-
return hours * input.cartsPerHour * pickers;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Berekent de status en stelt maatregelen voor in de door de gebruiker
|
|
42
|
-
* bepaalde volgorde. Stopt zodra het tekort weg is.
|
|
43
|
-
*/
|
|
44
|
-
export function evaluateCapacity(input, settings) {
|
|
45
|
-
const baseAvailable = measureCapacity(input, 0, 0, 0);
|
|
46
|
-
const required = Math.max(0, input.requiredCarts);
|
|
47
|
-
const cartsPerMinute = Math.max(1e-6, (input.cartsPerHour * Math.max(1, input.pickers)) / 60);
|
|
48
|
-
const reserveMinutes = (baseAvailable - required) / cartsPerMinute;
|
|
49
|
-
let status = "green";
|
|
50
|
-
if (reserveMinutes <= settings.redThresholdMinutes)
|
|
51
|
-
status = "red";
|
|
52
|
-
else if (reserveMinutes <= settings.amberThresholdMinutes)
|
|
53
|
-
status = "amber";
|
|
54
|
-
const measures = [];
|
|
55
|
-
let extraHours = 0;
|
|
56
|
-
let extraPickers = 0;
|
|
57
|
-
let extraBreakMin = 0;
|
|
58
|
-
let postponed = 0;
|
|
59
|
-
let currentAvailable = baseAvailable;
|
|
60
|
-
let shortage = Math.max(0, required - currentAvailable);
|
|
61
|
-
if (shortage > 0 && !settings.warningOnly) {
|
|
62
|
-
for (const m of settings.measures) {
|
|
63
|
-
if (shortage <= 0)
|
|
64
|
-
break;
|
|
65
|
-
if (!m.enabled || m.max <= 0)
|
|
66
|
-
continue;
|
|
67
|
-
const before = currentAvailable;
|
|
68
|
-
let usedAmount = 0;
|
|
69
|
-
switch (m.kind) {
|
|
70
|
-
case "earlier-start": {
|
|
71
|
-
const maxRoom = Math.min(m.max, Math.max(0, input.earlierStartRoom));
|
|
72
|
-
const needHours = shortage / (input.cartsPerHour * Math.max(1, input.pickers));
|
|
73
|
-
usedAmount = Math.min(maxRoom, needHours);
|
|
74
|
-
extraHours += usedAmount;
|
|
75
|
-
break;
|
|
76
|
-
}
|
|
77
|
-
case "overtime": {
|
|
78
|
-
const needHours = shortage / (input.cartsPerHour * Math.max(1, input.pickers));
|
|
79
|
-
usedAmount = Math.min(m.max, needHours);
|
|
80
|
-
extraHours += usedAmount;
|
|
81
|
-
break;
|
|
82
|
-
}
|
|
83
|
-
case "skip-break": {
|
|
84
|
-
const maxMin = Math.min(m.max, Math.max(0, input.remainingBreakMinutes));
|
|
85
|
-
const needMin = (shortage / (input.cartsPerHour * Math.max(1, input.pickers))) * 60;
|
|
86
|
-
usedAmount = Math.min(maxMin, needMin);
|
|
87
|
-
extraBreakMin += usedAmount;
|
|
88
|
-
break;
|
|
89
|
-
}
|
|
90
|
-
case "extra-pickers": {
|
|
91
|
-
const perPickerCarts = Math.max(1, m.perUnit ?? input.cartsPerHour) * Math.max(0.1, input.remainingWorkHours + extraHours);
|
|
92
|
-
const needPickers = Math.ceil(shortage / Math.max(1, perPickerCarts));
|
|
93
|
-
usedAmount = Math.min(m.max, needPickers);
|
|
94
|
-
extraPickers += usedAmount;
|
|
95
|
-
break;
|
|
96
|
-
}
|
|
97
|
-
case "postpone-orders": {
|
|
98
|
-
usedAmount = Math.min(m.max, Math.ceil(shortage));
|
|
99
|
-
postponed += usedAmount;
|
|
100
|
-
break;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
if (usedAmount <= 0)
|
|
104
|
-
continue;
|
|
105
|
-
if (m.kind === "postpone-orders") {
|
|
106
|
-
currentAvailable = before; // capaciteit blijft gelijk, maar shortage wordt verlaagd
|
|
107
|
-
shortage = Math.max(0, shortage - usedAmount);
|
|
108
|
-
measures.push({
|
|
109
|
-
kind: m.kind,
|
|
110
|
-
amount: usedAmount,
|
|
111
|
-
unit: MEASURE_UNITS[m.kind],
|
|
112
|
-
label: MEASURE_LABELS[m.kind],
|
|
113
|
-
addsCarts: usedAmount,
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
currentAvailable = measureCapacity(input, extraHours, extraPickers, extraBreakMin);
|
|
118
|
-
shortage = Math.max(0, required - currentAvailable - postponed);
|
|
119
|
-
measures.push({
|
|
120
|
-
kind: m.kind,
|
|
121
|
-
amount: Math.round(usedAmount * 100) / 100,
|
|
122
|
-
unit: MEASURE_UNITS[m.kind],
|
|
123
|
-
label: MEASURE_LABELS[m.kind],
|
|
124
|
-
addsCarts: Math.max(0, Math.round((currentAvailable - before) * 10) / 10),
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
const finalAvailable = currentAvailable + postponed;
|
|
130
|
-
const stillShort = Math.max(0, required - finalAvailable);
|
|
131
|
-
const expectedFinishMinutes = input.cartsPerHour > 0 && input.pickers > 0
|
|
132
|
-
? (Math.max(0, required - postponed) / (input.cartsPerHour * Math.max(1, input.pickers))) * 60
|
|
133
|
-
: 0;
|
|
134
|
-
const reasonParts = [];
|
|
135
|
-
if (status === "green")
|
|
136
|
-
reasonParts.push(`Planning haalbaar met ${Math.round(reserveMinutes)} min reserve.`);
|
|
137
|
-
else if (status === "amber")
|
|
138
|
-
reasonParts.push(`Planning wordt kritisch — nog ${Math.max(0, Math.round(reserveMinutes))} min reserve.`);
|
|
139
|
-
else
|
|
140
|
-
reasonParts.push(`Tekort van ${Math.max(0, Math.ceil(required - baseAvailable))} karren.`);
|
|
141
|
-
if (measures.length)
|
|
142
|
-
reasonParts.push(`${measures.length} maatregel${measures.length === 1 ? "" : "en"} voorgesteld.`);
|
|
143
|
-
if (stillShort > 0)
|
|
144
|
-
reasonParts.push(`Na maatregelen nog ${Math.ceil(stillShort)} karren tekort.`);
|
|
145
|
-
return {
|
|
146
|
-
status,
|
|
147
|
-
availableCarts: Math.round(baseAvailable * 10) / 10,
|
|
148
|
-
requiredCarts: required,
|
|
149
|
-
reserveMinutes: Math.round(reserveMinutes),
|
|
150
|
-
shortageCarts: Math.max(0, Math.ceil(required - baseAvailable)),
|
|
151
|
-
expectedFinishMinutes: Math.round(expectedFinishMinutes),
|
|
152
|
-
measures,
|
|
153
|
-
stillShortAfterMeasures: Math.ceil(stillShort),
|
|
154
|
-
reason: reasonParts.join(" "),
|
|
155
|
-
};
|
|
156
|
-
}
|
|
157
|
-
/** Bereken beschikbare werkuren op basis van tijden + pauzes. */
|
|
158
|
-
export function remainingWorkHours(now, endTime, breaks) {
|
|
159
|
-
const [eh, em] = endTime.split(":").map((n) => Number(n) || 0);
|
|
160
|
-
const end = new Date(now);
|
|
161
|
-
end.setHours(eh, em, 0, 0);
|
|
162
|
-
const diffMs = Math.max(0, end.getTime() - now.getTime());
|
|
163
|
-
const totalMinutes = diffMs / 60000;
|
|
164
|
-
let breakMinutesLeft = 0;
|
|
165
|
-
for (const b of breaks ?? []) {
|
|
166
|
-
const [sh, sm] = (b.start ?? "0:0").split(":").map((n) => Number(n) || 0);
|
|
167
|
-
const [ehh, emm] = (b.end ?? "0:0").split(":").map((n) => Number(n) || 0);
|
|
168
|
-
const bs = new Date(now);
|
|
169
|
-
bs.setHours(sh, sm, 0, 0);
|
|
170
|
-
const be = new Date(now);
|
|
171
|
-
be.setHours(ehh, emm, 0, 0);
|
|
172
|
-
if (be.getTime() <= now.getTime())
|
|
173
|
-
continue;
|
|
174
|
-
const start = bs.getTime() < now.getTime() ? now.getTime() : bs.getTime();
|
|
175
|
-
const finish = be.getTime() > end.getTime() ? end.getTime() : be.getTime();
|
|
176
|
-
breakMinutesLeft += Math.max(0, (finish - start) / 60000);
|
|
177
|
-
}
|
|
178
|
-
return {
|
|
179
|
-
hours: Math.max(0, (totalMinutes - breakMinutesLeft) / 60),
|
|
180
|
-
breakMinutesLeft,
|
|
181
|
-
};
|
|
182
|
-
}
|