@flowselections/logistiek-engine 1.0.1
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/README.md +24 -0
- package/dist-lib/_core-safelist.d.ts +2 -0
- package/dist-lib/_core-safelist.d.ts.map +1 -0
- package/dist-lib/_core-safelist.js +15 -0
- package/dist-lib/components/BeladingIndelingCard.d.ts +2 -0
- package/dist-lib/components/BeladingIndelingCard.d.ts.map +1 -0
- package/dist-lib/components/BeladingIndelingCard.js +77 -0
- package/dist-lib/components/BufferDebugCard.d.ts +19 -0
- package/dist-lib/components/BufferDebugCard.d.ts.map +1 -0
- package/dist-lib/components/BufferDebugCard.js +69 -0
- package/dist-lib/components/CapaciteitMeldingenCard.d.ts +2 -0
- package/dist-lib/components/CapaciteitMeldingenCard.d.ts.map +1 -0
- package/dist-lib/components/CapaciteitMeldingenCard.js +40 -0
- package/dist-lib/components/LadingdragersPage.d.ts +2 -0
- package/dist-lib/components/LadingdragersPage.d.ts.map +1 -0
- package/dist-lib/components/LadingdragersPage.js +102 -0
- package/dist-lib/components/LogistiekEngineLogo.d.ts +6 -0
- package/dist-lib/components/LogistiekEngineLogo.d.ts.map +1 -0
- package/dist-lib/components/LogistiekEngineLogo.js +4 -0
- package/dist-lib/components/LogistiekEnginePage.d.ts +2 -0
- package/dist-lib/components/LogistiekEnginePage.d.ts.map +1 -0
- package/dist-lib/components/LogistiekEnginePage.js +53 -0
- package/dist-lib/components/ModulePromptsPage.d.ts +2 -0
- package/dist-lib/components/ModulePromptsPage.d.ts.map +1 -0
- package/dist-lib/components/ModulePromptsPage.js +58 -0
- package/dist-lib/components/RegiePage.d.ts +2 -0
- package/dist-lib/components/RegiePage.d.ts.map +1 -0
- package/dist-lib/components/RegiePage.js +82 -0
- package/dist-lib/components/RuleEnginePage.d.ts +7 -0
- package/dist-lib/components/RuleEnginePage.d.ts.map +1 -0
- package/dist-lib/components/RuleEnginePage.js +114 -0
- package/dist-lib/components/StrategieDialog.d.ts +11 -0
- package/dist-lib/components/StrategieDialog.d.ts.map +1 -0
- package/dist-lib/components/StrategieDialog.js +38 -0
- package/dist-lib/components/VertragingMeldingenCard.d.ts +2 -0
- package/dist-lib/components/VertragingMeldingenCard.d.ts.map +1 -0
- package/dist-lib/components/VertragingMeldingenCard.js +32 -0
- package/dist-lib/components/VoorraadMeldingenCard.d.ts +2 -0
- package/dist-lib/components/VoorraadMeldingenCard.d.ts.map +1 -0
- package/dist-lib/components/VoorraadMeldingenCard.js +26 -0
- package/dist-lib/components/rule-engine/CollapsibleGroup.d.ts +12 -0
- package/dist-lib/components/rule-engine/CollapsibleGroup.d.ts.map +1 -0
- package/dist-lib/components/rule-engine/CollapsibleGroup.js +11 -0
- package/dist-lib/components/rule-engine/ConditionsEditor.d.ts +8 -0
- package/dist-lib/components/rule-engine/ConditionsEditor.d.ts.map +1 -0
- package/dist-lib/components/rule-engine/ConditionsEditor.js +31 -0
- package/dist-lib/components/rule-engine/FieldHelp.d.ts +14 -0
- package/dist-lib/components/rule-engine/FieldHelp.d.ts.map +1 -0
- package/dist-lib/components/rule-engine/FieldHelp.js +18 -0
- package/dist-lib/components/rule-engine/FloridayConnectionBanner.d.ts +2 -0
- package/dist-lib/components/rule-engine/FloridayConnectionBanner.d.ts.map +1 -0
- package/dist-lib/components/rule-engine/FloridayConnectionBanner.js +41 -0
- package/dist-lib/components/rule-engine/ImpactPanel.d.ts +5 -0
- package/dist-lib/components/rule-engine/ImpactPanel.d.ts.map +1 -0
- package/dist-lib/components/rule-engine/ImpactPanel.js +25 -0
- package/dist-lib/components/rule-engine/RuleFieldInput.d.ts +9 -0
- package/dist-lib/components/rule-engine/RuleFieldInput.d.ts.map +1 -0
- package/dist-lib/components/rule-engine/RuleFieldInput.js +80 -0
- package/dist-lib/components/rule-engine/VersionsPanel.d.ts +10 -0
- package/dist-lib/components/rule-engine/VersionsPanel.d.ts.map +1 -0
- package/dist-lib/components/rule-engine/VersionsPanel.js +16 -0
- package/dist-lib/components/settings/LogistiekEngineSettingsCard.d.ts +2 -0
- package/dist-lib/components/settings/LogistiekEngineSettingsCard.d.ts.map +1 -0
- package/dist-lib/components/settings/LogistiekEngineSettingsCard.js +22 -0
- package/dist-lib/hooks/useCapaciteitMeldingen.d.ts +20 -0
- package/dist-lib/hooks/useCapaciteitMeldingen.d.ts.map +1 -0
- package/dist-lib/hooks/useCapaciteitMeldingen.js +46 -0
- package/dist-lib/hooks/useDocumentLayouts.d.ts +13 -0
- package/dist-lib/hooks/useDocumentLayouts.d.ts.map +1 -0
- package/dist-lib/hooks/useDocumentLayouts.js +54 -0
- package/dist-lib/hooks/useLadingdragers.d.ts +16 -0
- package/dist-lib/hooks/useLadingdragers.d.ts.map +1 -0
- package/dist-lib/hooks/useLadingdragers.js +86 -0
- package/dist-lib/hooks/useLogistiekStrategieen.d.ts +29 -0
- package/dist-lib/hooks/useLogistiekStrategieen.d.ts.map +1 -0
- package/dist-lib/hooks/useLogistiekStrategieen.js +111 -0
- package/dist-lib/hooks/useLogistiekTaken.d.ts +89 -0
- package/dist-lib/hooks/useLogistiekTaken.d.ts.map +1 -0
- package/dist-lib/hooks/useLogistiekTaken.js +314 -0
- package/dist-lib/hooks/usePickstations.d.ts +10 -0
- package/dist-lib/hooks/usePickstations.d.ts.map +1 -0
- package/dist-lib/hooks/usePickstations.js +51 -0
- package/dist-lib/hooks/useRecalcJob.d.ts +24 -0
- package/dist-lib/hooks/useRecalcJob.d.ts.map +1 -0
- package/dist-lib/hooks/useRecalcJob.js +83 -0
- package/dist-lib/hooks/useRuleEngine.d.ts +48 -0
- package/dist-lib/hooks/useRuleEngine.d.ts.map +1 -0
- package/dist-lib/hooks/useRuleEngine.js +222 -0
- package/dist-lib/hooks/useVertragingMeldingen.d.ts +29 -0
- package/dist-lib/hooks/useVertragingMeldingen.d.ts.map +1 -0
- package/dist-lib/hooks/useVertragingMeldingen.js +68 -0
- package/dist-lib/hooks/useVoorraadMeldingen.d.ts +30 -0
- package/dist-lib/hooks/useVoorraadMeldingen.d.ts.map +1 -0
- package/dist-lib/hooks/useVoorraadMeldingen.js +70 -0
- package/dist-lib/index.d.ts +36 -0
- package/dist-lib/index.d.ts.map +1 -0
- package/dist-lib/index.js +52 -0
- package/dist-lib/integrations/supabase/auth-attacher.d.ts +2 -0
- package/dist-lib/integrations/supabase/auth-attacher.d.ts.map +1 -0
- package/dist-lib/integrations/supabase/auth-attacher.js +12 -0
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +19781 -0
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -0
- package/dist-lib/integrations/supabase/auth-middleware.js +52 -0
- package/dist-lib/integrations/supabase/client.d.ts +19777 -0
- package/dist-lib/integrations/supabase/client.d.ts.map +1 -0
- package/dist-lib/integrations/supabase/client.js +13 -0
- package/dist-lib/integrations/supabase/client.server.d.ts +19777 -0
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -0
- package/dist-lib/integrations/supabase/client.server.js +30 -0
- package/dist-lib/integrations/supabase/types.d.ts +20355 -0
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -0
- package/dist-lib/integrations/supabase/types.js +78 -0
- package/dist-lib/lib/bufferMatching.d.ts +26 -0
- package/dist-lib/lib/bufferMatching.d.ts.map +1 -0
- package/dist-lib/lib/bufferMatching.js +73 -0
- package/dist-lib/lib/bulkLoadCarrierPlanning.server.d.ts +23 -0
- package/dist-lib/lib/bulkLoadCarrierPlanning.server.d.ts.map +1 -0
- package/dist-lib/lib/bulkLoadCarrierPlanning.server.js +126 -0
- package/dist-lib/lib/floridayDocuments.functions.d.ts +59415 -0
- package/dist-lib/lib/floridayDocuments.functions.d.ts.map +1 -0
- package/dist-lib/lib/floridayDocuments.functions.js +68 -0
- package/dist-lib/lib/floridayDocuments.server.d.ts +51 -0
- package/dist-lib/lib/floridayDocuments.server.d.ts.map +1 -0
- package/dist-lib/lib/floridayDocuments.server.js +109 -0
- package/dist-lib/lib/loadCarrierPlanner.d.ts +71 -0
- package/dist-lib/lib/loadCarrierPlanner.d.ts.map +1 -0
- package/dist-lib/lib/loadCarrierPlanner.js +374 -0
- package/dist-lib/lib/loadCarrierPlanning.functions.d.ts +98984 -0
- package/dist-lib/lib/loadCarrierPlanning.functions.d.ts.map +1 -0
- package/dist-lib/lib/loadCarrierPlanning.functions.js +106 -0
- package/dist-lib/lib/loadCarrierPlanning.server.d.ts +46 -0
- package/dist-lib/lib/loadCarrierPlanning.server.d.ts.map +1 -0
- package/dist-lib/lib/loadCarrierPlanning.server.js +515 -0
- package/dist-lib/lib/loadCarrierTaskSync.server.d.ts +3 -0
- package/dist-lib/lib/loadCarrierTaskSync.server.d.ts.map +1 -0
- package/dist-lib/lib/loadCarrierTaskSync.server.js +56 -0
- package/dist-lib/lib/loadCarrierTypes.d.ts +19 -0
- package/dist-lib/lib/loadCarrierTypes.d.ts.map +1 -0
- package/dist-lib/lib/loadCarrierTypes.js +41 -0
- package/dist-lib/lib/logisticsPlanner.d.ts +56 -0
- package/dist-lib/lib/logisticsPlanner.d.ts.map +1 -0
- package/dist-lib/lib/logisticsPlanner.js +273 -0
- package/dist-lib/lib/logisticsRecalcJob.functions.d.ts +39575 -0
- package/dist-lib/lib/logisticsRecalcJob.functions.d.ts.map +1 -0
- package/dist-lib/lib/logisticsRecalcJob.functions.js +30 -0
- package/dist-lib/lib/logisticsRecalcJob.server.d.ts +32 -0
- package/dist-lib/lib/logisticsRecalcJob.server.d.ts.map +1 -0
- package/dist-lib/lib/logisticsRecalcJob.server.js +116 -0
- package/dist-lib/lib/logisticsRecalculate.functions.d.ts +19792 -0
- package/dist-lib/lib/logisticsRecalculate.functions.d.ts.map +1 -0
- package/dist-lib/lib/logisticsRecalculate.functions.js +35 -0
- package/dist-lib/lib/logisticsTasks.d.ts +23 -0
- package/dist-lib/lib/logisticsTasks.d.ts.map +1 -0
- package/dist-lib/lib/logisticsTasks.js +92 -0
- package/dist-lib/lib/modulePrompts.d.ts +31 -0
- package/dist-lib/lib/modulePrompts.d.ts.map +1 -0
- package/dist-lib/lib/modulePrompts.js +1195 -0
- package/dist-lib/lib/ruleEngineImpact.d.ts +27 -0
- package/dist-lib/lib/ruleEngineImpact.d.ts.map +1 -0
- package/dist-lib/lib/ruleEngineImpact.js +257 -0
- package/dist-lib/lib/ruleEngineSchema.d.ts +69 -0
- package/dist-lib/lib/ruleEngineSchema.d.ts.map +1 -0
- package/dist-lib/lib/ruleEngineSchema.js +899 -0
- package/dist-lib/lib/ruleEngineWizard.d.ts +17 -0
- package/dist-lib/lib/ruleEngineWizard.d.ts.map +1 -0
- package/dist-lib/lib/ruleEngineWizard.js +204 -0
- package/dist-lib/lib/utils.d.ts +3 -0
- package/dist-lib/lib/utils.d.ts.map +1 -0
- package/dist-lib/lib/utils.js +5 -0
- package/dist-lib/lib/validationSchemas.d.ts +15 -0
- package/dist-lib/lib/validationSchemas.d.ts.map +1 -0
- package/dist-lib/lib/validationSchemas.js +25 -0
- package/dist-lib/styles.css +1 -0
- package/package.json +113 -0
- package/public/logo.png +0 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type RuleEngineSettings } from "./ruleEngineSchema";
|
|
2
|
+
export interface ImpactSignal {
|
|
3
|
+
level: "info" | "warning" | "risk";
|
|
4
|
+
title: string;
|
|
5
|
+
detail: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ImpactAnalysis {
|
|
8
|
+
automationScore: number;
|
|
9
|
+
manualSteps: number;
|
|
10
|
+
scanMoments: number;
|
|
11
|
+
signals: ImpactSignal[];
|
|
12
|
+
}
|
|
13
|
+
export declare function analyseImpact(settings: RuleEngineSettings): ImpactAnalysis;
|
|
14
|
+
export interface SummaryLine {
|
|
15
|
+
step: string;
|
|
16
|
+
label: string;
|
|
17
|
+
value: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function summarize(settings: RuleEngineSettings): SummaryLine[];
|
|
20
|
+
export interface DiffLine {
|
|
21
|
+
step: string;
|
|
22
|
+
label: string;
|
|
23
|
+
before: string;
|
|
24
|
+
after: string;
|
|
25
|
+
}
|
|
26
|
+
export declare function diffSettings(a: RuleEngineSettings, b: RuleEngineSettings): DiffLine[];
|
|
27
|
+
//# sourceMappingURL=ruleEngineImpact.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ruleEngineImpact.d.ts","sourceRoot":"","sources":["../../src/lib/ruleEngineImpact.ts"],"names":[],"mappings":"AAIA,OAAO,EAIL,KAAK,kBAAkB,EACxB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAMD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,kBAAkB,GAAG,cAAc,CAgL1E;AAMD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,kBAAkB,GAAG,WAAW,EAAE,CA2CrE;AAID,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAiBD,wBAAgB,YAAY,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,EAAE,kBAAkB,GAAG,QAAQ,EAAE,CAqBrF"}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// src/lib/ruleEngineImpact.ts — impactanalyse en versievergelijking
|
|
3
|
+
// ============================================================================
|
|
4
|
+
import { RULE_STEPS, optionLabel, } from "./ruleEngineSchema";
|
|
5
|
+
function f(settings, step, key) {
|
|
6
|
+
return settings?.[step]?.fields?.[key];
|
|
7
|
+
}
|
|
8
|
+
export function analyseImpact(settings) {
|
|
9
|
+
const signals = [];
|
|
10
|
+
let automated = 0;
|
|
11
|
+
let total = 0;
|
|
12
|
+
let manualSteps = 0;
|
|
13
|
+
let scanMoments = 0;
|
|
14
|
+
const score = (isAuto) => {
|
|
15
|
+
total += 1;
|
|
16
|
+
if (isAuto)
|
|
17
|
+
automated += 1;
|
|
18
|
+
else
|
|
19
|
+
manualSteps += 1;
|
|
20
|
+
};
|
|
21
|
+
const bufferEnabled = f(settings, "order_verwerking", "buffer_enabled") !== false;
|
|
22
|
+
const bufferRelease = f(settings, "order_verwerking", "buffer_release");
|
|
23
|
+
score(bufferEnabled && bufferRelease === "auto");
|
|
24
|
+
if (bufferEnabled && bufferRelease === "manual") {
|
|
25
|
+
signals.push({
|
|
26
|
+
level: "warning",
|
|
27
|
+
title: "Orderbuffer handmatig vrijgeven",
|
|
28
|
+
detail: "Elke gecombineerde order wacht op een medewerker voordat de flow start.",
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
if (bufferEnabled && bufferRelease === "none") {
|
|
32
|
+
signals.push({
|
|
33
|
+
level: "warning",
|
|
34
|
+
title: "Buffer zet niets door",
|
|
35
|
+
detail: "Bij het sluiten van de buffer gebeurt er niks; de order blijft staan.",
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
if (!bufferEnabled) {
|
|
39
|
+
signals.push({
|
|
40
|
+
level: "info",
|
|
41
|
+
title: "Geen orderbuffer",
|
|
42
|
+
detail: "Elke order wordt los verwerkt; orders worden niet gecombineerd.",
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
const cartMode = f(settings, "karrenindeling", "mode");
|
|
46
|
+
score(cartMode === "auto" || cartMode === "import");
|
|
47
|
+
if (cartMode === "manual" || cartMode === "scan") {
|
|
48
|
+
signals.push({
|
|
49
|
+
level: "info",
|
|
50
|
+
title: "Beladingindeling door medewerker",
|
|
51
|
+
detail: "Het optimalisatie-algoritme wordt niet gebruikt; de indeling is volledig mensafhankelijk.",
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
if (cartMode === "scan")
|
|
55
|
+
scanMoments += 1;
|
|
56
|
+
const carrierTypes = f(settings, "karrenindeling", "load_carrier_types") ?? [];
|
|
57
|
+
const activeCarriers = Array.isArray(carrierTypes) ? carrierTypes.filter((c) => c.enabled) : [];
|
|
58
|
+
if (activeCarriers.length === 0) {
|
|
59
|
+
signals.push({
|
|
60
|
+
level: "risk",
|
|
61
|
+
title: "Geen ladingdrager toegestaan",
|
|
62
|
+
detail: "Er is geen enkele Floriday-verzendmethode aangezet; er kan geen belading gevormd worden.",
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
if (f(settings, "karrenindeling", "multi_order") === false) {
|
|
66
|
+
signals.push({
|
|
67
|
+
level: "warning",
|
|
68
|
+
title: "Eén order per ladingdrager",
|
|
69
|
+
detail: "Beladingen worden nooit gecombineerd. Dit geeft het hoogste aantal ladingdragers en transportkosten.",
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
const scanner = f(settings, "order_picken", "scanner");
|
|
73
|
+
score(scanner === "required");
|
|
74
|
+
if (scanner === "required")
|
|
75
|
+
scanMoments += 1;
|
|
76
|
+
if (scanner === "none") {
|
|
77
|
+
signals.push({
|
|
78
|
+
level: "risk",
|
|
79
|
+
title: "Picken zonder scanner",
|
|
80
|
+
detail: "Er is geen systeemcontrole op wat er daadwerkelijk gepickt wordt.",
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
const control = f(settings, "controle", "control_mode");
|
|
84
|
+
score(control === "scanner");
|
|
85
|
+
if (control === "scanner")
|
|
86
|
+
scanMoments += 1;
|
|
87
|
+
if (control === "skip") {
|
|
88
|
+
signals.push({
|
|
89
|
+
level: "risk",
|
|
90
|
+
title: "Controle overgeslagen",
|
|
91
|
+
detail: "Fouten in picken en kar vullen worden nergens meer afgevangen.",
|
|
92
|
+
});
|
|
93
|
+
if (scanner === "none") {
|
|
94
|
+
signals.push({
|
|
95
|
+
level: "risk",
|
|
96
|
+
title: "Geen enkele verificatie",
|
|
97
|
+
detail: "Zonder scanner én zonder controle is de order nergens geverifieerd voor vertrek.",
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (signals.length === 0) {
|
|
102
|
+
signals.push({
|
|
103
|
+
level: "info",
|
|
104
|
+
title: "Geen knelpunten gevonden",
|
|
105
|
+
detail: "Deze configuratie is intern consistent.",
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
// --- Vertraging ----------------------------------------------------------
|
|
109
|
+
const reschedule = f(settings, "order_picken", "reschedule_mode");
|
|
110
|
+
score(reschedule === "next_delivery_day" || reschedule === "next_calendar_day");
|
|
111
|
+
if (reschedule === "manual_approval") {
|
|
112
|
+
signals.push({
|
|
113
|
+
level: "warning",
|
|
114
|
+
title: "Herplannen wacht op goedkeuring",
|
|
115
|
+
detail: "Vertraagde orders blijven staan tot een gebruiker de nieuwe leverdatum goedkeurt.",
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
if (f(settings, "order_picken", "internal_alert_enabled") === false) {
|
|
119
|
+
signals.push({
|
|
120
|
+
level: "risk",
|
|
121
|
+
title: "Geen interne melding bij vertraging",
|
|
122
|
+
detail: "Niemand wordt geïnformeerd wanneer een order de leverdatum niet haalt.",
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
if (f(settings, "order_picken", "notify_customer") !== true) {
|
|
126
|
+
signals.push({
|
|
127
|
+
level: "info",
|
|
128
|
+
title: "Klant wordt niet automatisch geïnformeerd",
|
|
129
|
+
detail: "Bij vertraging moet de klant handmatig op de hoogte gebracht worden.",
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
// --- Documenten ----------------------------------------------------------
|
|
133
|
+
const shippingRelease = f(settings, "pickstations", "shipping_note_release");
|
|
134
|
+
score(shippingRelease !== "manual_approval");
|
|
135
|
+
if (shippingRelease === "manual_approval") {
|
|
136
|
+
signals.push({
|
|
137
|
+
level: "warning",
|
|
138
|
+
title: "Verzendbrief wacht op goedkeuring",
|
|
139
|
+
detail: "Een medewerker moet de verzendbrief op een pickstation goedkeuren voordat hij vrijkomt.",
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
const productionRelease = f(settings, "pickstations", "production_note_release");
|
|
143
|
+
score(productionRelease !== "manual_approval_after_upgrade");
|
|
144
|
+
if (productionRelease === "manual_approval_after_upgrade") {
|
|
145
|
+
signals.push({
|
|
146
|
+
level: "info",
|
|
147
|
+
title: "Productiebon na goedkeuring",
|
|
148
|
+
detail: "Na het opwaarderen van de voorraad is eerst een handmatige goedkeuring nodig.",
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
const docStations = [
|
|
152
|
+
["Pakbon", f(settings, "pickstations", "packing_slip_station")],
|
|
153
|
+
["Stickers", f(settings, "pickstations", "sticker_station")],
|
|
154
|
+
["Verzendbrief", f(settings, "pickstations", "shipping_note_station")],
|
|
155
|
+
["Productiebon", f(settings, "pickstations", "production_note_station")],
|
|
156
|
+
].filter(([, value]) => !value).map(([label]) => label);
|
|
157
|
+
if (docStations.length > 0) {
|
|
158
|
+
signals.push({
|
|
159
|
+
level: "info",
|
|
160
|
+
title: "Documenten zonder pickstation",
|
|
161
|
+
detail: `Nog geen pickstation gekozen voor: ${docStations.join(", ")}.`,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
return {
|
|
165
|
+
automationScore: total === 0 ? 0 : Math.round((automated / total) * 100),
|
|
166
|
+
manualSteps,
|
|
167
|
+
scanMoments,
|
|
168
|
+
signals,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
export function summarize(settings) {
|
|
172
|
+
const lines = [];
|
|
173
|
+
for (const step of RULE_STEPS) {
|
|
174
|
+
const values = settings?.[step.id]?.fields ?? {};
|
|
175
|
+
for (const group of step.groups) {
|
|
176
|
+
for (const field of group.fields) {
|
|
177
|
+
const value = values[field.key];
|
|
178
|
+
if (field.type === "priority") {
|
|
179
|
+
const entries = value ?? [];
|
|
180
|
+
const active = Array.isArray(entries) ? entries.filter((e) => e.enabled) : [];
|
|
181
|
+
if (active.length === 0)
|
|
182
|
+
continue;
|
|
183
|
+
lines.push({
|
|
184
|
+
step: step.label,
|
|
185
|
+
label: field.label,
|
|
186
|
+
value: active
|
|
187
|
+
.map((e, i) => `${i + 1}. ${field.options?.find((o) => o.value === e.key)?.label ?? e.key}`)
|
|
188
|
+
.join(" · "),
|
|
189
|
+
});
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
if (field.type === "toggle") {
|
|
193
|
+
if (value !== true)
|
|
194
|
+
continue;
|
|
195
|
+
lines.push({ step: step.label, label: field.label, value: "Aan" });
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
if (value === "" || value === undefined || value === null)
|
|
199
|
+
continue;
|
|
200
|
+
if (field.type === "pickstation") {
|
|
201
|
+
lines.push({ step: step.label, label: field.label, value: "Ingesteld" });
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
lines.push({
|
|
205
|
+
step: step.label,
|
|
206
|
+
label: field.label,
|
|
207
|
+
value: field.type === "select" ? optionLabel(field, value) : `${value}${field.unit ? ` ${field.unit}` : ""}`,
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
const conditions = settings?.[step.id]?.conditions ?? [];
|
|
212
|
+
if (conditions.length > 0) {
|
|
213
|
+
lines.push({ step: step.label, label: "Voorwaarden", value: `${conditions.length} actief` });
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return lines;
|
|
217
|
+
}
|
|
218
|
+
function displayValue(field, value) {
|
|
219
|
+
if (field.type === "priority") {
|
|
220
|
+
const entries = Array.isArray(value) ? value : [];
|
|
221
|
+
return entries
|
|
222
|
+
.filter((e) => e.enabled)
|
|
223
|
+
.map((e) => field.options?.find((o) => o.value === e.key)?.label ?? e.key)
|
|
224
|
+
.join(" · ") || "—";
|
|
225
|
+
}
|
|
226
|
+
if (field.type === "toggle")
|
|
227
|
+
return value === true ? "Aan" : "Uit";
|
|
228
|
+
if (value === "" || value === undefined || value === null)
|
|
229
|
+
return "—";
|
|
230
|
+
if (field.type === "select" || field.type === "radio")
|
|
231
|
+
return optionLabel(field, value);
|
|
232
|
+
if (field.type === "pickstation")
|
|
233
|
+
return "Ingesteld";
|
|
234
|
+
return String(value);
|
|
235
|
+
}
|
|
236
|
+
export function diffSettings(a, b) {
|
|
237
|
+
const result = [];
|
|
238
|
+
for (const step of RULE_STEPS) {
|
|
239
|
+
const av = a?.[step.id]?.fields ?? {};
|
|
240
|
+
const bv = b?.[step.id]?.fields ?? {};
|
|
241
|
+
for (const group of step.groups) {
|
|
242
|
+
for (const field of group.fields) {
|
|
243
|
+
const before = displayValue(field, av[field.key]);
|
|
244
|
+
const after = displayValue(field, bv[field.key]);
|
|
245
|
+
if (before !== after) {
|
|
246
|
+
result.push({ step: step.label, label: field.label, before, after });
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
const ac = (a?.[step.id]?.conditions ?? []).length;
|
|
251
|
+
const bc = (b?.[step.id]?.conditions ?? []).length;
|
|
252
|
+
if (ac !== bc) {
|
|
253
|
+
result.push({ step: step.label, label: "Aantal voorwaarden", before: String(ac), after: String(bc) });
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
return result;
|
|
257
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
export type FieldType = "toggle" | "select" | "number" | "text" | "textarea" | "time" | "priority" | "radio" | "days" | "layout" | "pickstation";
|
|
2
|
+
export interface FieldOption {
|
|
3
|
+
value: string;
|
|
4
|
+
label: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
/** Kleine badge naast het label, bijv. "Aanbevolen" */
|
|
7
|
+
badge?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface RuleDependency {
|
|
10
|
+
key: string;
|
|
11
|
+
in: unknown[];
|
|
12
|
+
/** Optioneel: waarde uit een andere stap (step id) */
|
|
13
|
+
step?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface RuleField {
|
|
16
|
+
key: string;
|
|
17
|
+
label: string;
|
|
18
|
+
type: FieldType;
|
|
19
|
+
description?: string;
|
|
20
|
+
options?: FieldOption[];
|
|
21
|
+
min?: number;
|
|
22
|
+
max?: number;
|
|
23
|
+
unit?: string;
|
|
24
|
+
default?: unknown;
|
|
25
|
+
/** Alleen bij type "layout": welke documenttypes uit de Layout maker gekozen mogen worden. */
|
|
26
|
+
layoutTypes?: string[];
|
|
27
|
+
/** Veld alleen tonen als een ander veld deze waarde heeft. Optioneel uit een andere stap via `step`. */
|
|
28
|
+
dependsOn?: RuleDependency | RuleDependency[];
|
|
29
|
+
}
|
|
30
|
+
export interface RuleGroup {
|
|
31
|
+
id: string;
|
|
32
|
+
label: string;
|
|
33
|
+
description?: string;
|
|
34
|
+
fields: RuleField[];
|
|
35
|
+
}
|
|
36
|
+
export interface RuleStep {
|
|
37
|
+
id: string;
|
|
38
|
+
label: string;
|
|
39
|
+
icon: string;
|
|
40
|
+
description: string;
|
|
41
|
+
groups: RuleGroup[];
|
|
42
|
+
supportsConditions: boolean;
|
|
43
|
+
}
|
|
44
|
+
export declare const CONDITION_FIELDS: FieldOption[];
|
|
45
|
+
export declare const CONDITION_OPERATORS: FieldOption[];
|
|
46
|
+
export interface RuleCondition {
|
|
47
|
+
id: string;
|
|
48
|
+
field: string;
|
|
49
|
+
operator: string;
|
|
50
|
+
values: string[];
|
|
51
|
+
}
|
|
52
|
+
export interface PriorityEntry {
|
|
53
|
+
key: string;
|
|
54
|
+
enabled: boolean;
|
|
55
|
+
}
|
|
56
|
+
export interface StepSettings {
|
|
57
|
+
fields: Record<string, unknown>;
|
|
58
|
+
conditions: RuleCondition[];
|
|
59
|
+
}
|
|
60
|
+
export type RuleEngineSettings = Record<string, StepSettings>;
|
|
61
|
+
export declare const RULE_STEPS: RuleStep[];
|
|
62
|
+
export declare function defaultStepSettings(step: RuleStep): StepSettings;
|
|
63
|
+
export declare function defaultSettings(): RuleEngineSettings;
|
|
64
|
+
export declare function normalizeSettings(raw: unknown): RuleEngineSettings;
|
|
65
|
+
export declare function fieldVisible(field: RuleField, values: Record<string, unknown>, allSettings?: RuleEngineSettings): boolean;
|
|
66
|
+
export declare function optionLabel(field: RuleField, value: unknown): string;
|
|
67
|
+
export declare function conditionFieldLabel(value: string): string;
|
|
68
|
+
export declare function conditionOperatorLabel(value: string): string;
|
|
69
|
+
//# sourceMappingURL=ruleEngineSchema.d.ts.map
|
|
@@ -0,0 +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,CAAC;AAIlB,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,wGAAwG;IACxG,SAAS,CAAC,EAAE,cAAc,GAAG,cAAc,EAAE,CAAC;CAG/C;AAED,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,EAm0BhC,CAAC;AAKF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,GAAG,YAAY,CAgBhE;AAED,wBAAgB,eAAe,IAAI,kBAAkB,CAMpD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,kBAAkB,CAalE;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,WAAW,CAAC,EAAE,kBAAkB,WAcjC;AAYD,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,UAE3D;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,UAEhD;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,UAEnD"}
|