@flowselections/logistiek-engine 1.0.33 → 1.0.53

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 (166) hide show
  1. package/README.md +24 -24
  2. package/dist-lib/components/FloridayPoortCard.d.ts.map +1 -1
  3. package/dist-lib/components/FloridayPoortCard.js +2 -1
  4. package/dist-lib/components/FlowCanvas.d.ts +28 -0
  5. package/dist-lib/components/FlowCanvas.d.ts.map +1 -0
  6. package/dist-lib/components/FlowCanvas.js +429 -0
  7. package/dist-lib/components/FlowOrders.d.ts +8 -0
  8. package/dist-lib/components/FlowOrders.d.ts.map +1 -0
  9. package/dist-lib/components/FlowOrders.js +125 -0
  10. package/dist-lib/components/FlowPage.d.ts +2 -0
  11. package/dist-lib/components/FlowPage.d.ts.map +1 -0
  12. package/dist-lib/components/FlowPage.js +141 -0
  13. package/dist-lib/components/InklapbaarVenster.d.ts +9 -0
  14. package/dist-lib/components/InklapbaarVenster.d.ts.map +1 -0
  15. package/dist-lib/components/InklapbaarVenster.js +10 -0
  16. package/dist-lib/components/LogistiekEnginePage.d.ts.map +1 -1
  17. package/dist-lib/components/LogistiekEnginePage.js +9 -3
  18. package/dist-lib/components/LogistiekEngineQueuePage.d.ts +2 -0
  19. package/dist-lib/components/LogistiekEngineQueuePage.d.ts.map +1 -0
  20. package/dist-lib/components/LogistiekEngineQueuePage.js +11 -0
  21. package/dist-lib/components/NodeTracePanel.d.ts +11 -0
  22. package/dist-lib/components/NodeTracePanel.d.ts.map +1 -0
  23. package/dist-lib/components/NodeTracePanel.js +40 -0
  24. package/dist-lib/components/OrderJourneyBar.d.ts +9 -0
  25. package/dist-lib/components/OrderJourneyBar.d.ts.map +1 -0
  26. package/dist-lib/components/OrderJourneyBar.js +26 -0
  27. package/dist-lib/components/OrderLogboek.d.ts +10 -0
  28. package/dist-lib/components/OrderLogboek.d.ts.map +1 -0
  29. package/dist-lib/components/OrderLogboek.js +92 -0
  30. package/dist-lib/components/OrderStopBanner.d.ts +5 -0
  31. package/dist-lib/components/OrderStopBanner.d.ts.map +1 -0
  32. package/dist-lib/components/OrderStopBanner.js +22 -0
  33. package/dist-lib/components/OrderTraceDetails.d.ts +22 -0
  34. package/dist-lib/components/OrderTraceDetails.d.ts.map +1 -0
  35. package/dist-lib/components/OrderTraceDetails.js +87 -0
  36. package/dist-lib/components/RegiePage.d.ts.map +1 -1
  37. package/dist-lib/components/RegiePage.js +11 -69
  38. package/dist-lib/components/WerktijdenCard.d.ts +2 -0
  39. package/dist-lib/components/WerktijdenCard.d.ts.map +1 -0
  40. package/dist-lib/components/WerktijdenCard.js +37 -0
  41. package/dist-lib/components/WerkwijzeHerindelingCard.d.ts.map +1 -1
  42. package/dist-lib/components/WerkwijzeHerindelingCard.js +100 -6
  43. package/dist-lib/hooks/useFloridayGate.d.ts +10 -0
  44. package/dist-lib/hooks/useFloridayGate.d.ts.map +1 -1
  45. package/dist-lib/hooks/useFloridayGate.js +4 -0
  46. package/dist-lib/hooks/useLogisticsTrace.d.ts +78 -0
  47. package/dist-lib/hooks/useLogisticsTrace.d.ts.map +1 -0
  48. package/dist-lib/hooks/useLogisticsTrace.js +152 -0
  49. package/dist-lib/hooks/useOrderNodeTrace.d.ts +11 -0
  50. package/dist-lib/hooks/useOrderNodeTrace.d.ts.map +1 -0
  51. package/dist-lib/hooks/useOrderNodeTrace.js +26 -0
  52. package/dist-lib/hooks/useOrderTrace.d.ts +74 -0
  53. package/dist-lib/hooks/useOrderTrace.d.ts.map +1 -0
  54. package/dist-lib/hooks/useOrderTrace.js +134 -0
  55. package/dist-lib/hooks/useOrderVersies.d.ts +47 -0
  56. package/dist-lib/hooks/useOrderVersies.d.ts.map +1 -0
  57. package/dist-lib/hooks/useOrderVersies.js +180 -0
  58. package/dist-lib/hooks/useRuleEngine.d.ts +1 -0
  59. package/dist-lib/hooks/useRuleEngine.d.ts.map +1 -1
  60. package/dist-lib/hooks/useRuleEngine.js +1 -0
  61. package/dist-lib/hooks/useShippingNoteStatus.d.ts +29 -0
  62. package/dist-lib/hooks/useShippingNoteStatus.d.ts.map +1 -0
  63. package/dist-lib/hooks/useShippingNoteStatus.js +107 -0
  64. package/dist-lib/hooks/useWerktijden.d.ts +33 -0
  65. package/dist-lib/hooks/useWerktijden.d.ts.map +1 -0
  66. package/dist-lib/hooks/useWerktijden.js +88 -0
  67. package/dist-lib/hooks/useWerkwijzeStatus.d.ts +12 -1
  68. package/dist-lib/hooks/useWerkwijzeStatus.d.ts.map +1 -1
  69. package/dist-lib/hooks/useWerkwijzeStatus.js +60 -4
  70. package/dist-lib/index.d.ts +13 -0
  71. package/dist-lib/index.d.ts.map +1 -1
  72. package/dist-lib/index.js +13 -0
  73. package/dist-lib/integrations/supabase/auth-middleware.d.ts +1600 -54
  74. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  75. package/dist-lib/integrations/supabase/client.server.d.ts +1600 -54
  76. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  77. package/dist-lib/integrations/supabase/client.server.js +1 -1
  78. package/dist-lib/integrations/supabase/moduleClient.d.ts +1600 -54
  79. package/dist-lib/integrations/supabase/moduleClient.d.ts.map +1 -1
  80. package/dist-lib/integrations/supabase/types.d.ts +1618 -50
  81. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  82. package/dist-lib/lib/cartPlanRequests.server.d.ts +1 -1
  83. package/dist-lib/lib/cartPlanRequests.server.d.ts.map +1 -1
  84. package/dist-lib/lib/cartPlanRequests.server.js +49 -8
  85. package/dist-lib/lib/floridayDocuments.functions.d.ts +4644 -6
  86. package/dist-lib/lib/floridayDocuments.functions.d.ts.map +1 -1
  87. package/dist-lib/lib/floridayDocuments.functions.js +1 -1
  88. package/dist-lib/lib/floridayDocuments.server.d.ts +14 -0
  89. package/dist-lib/lib/floridayDocuments.server.d.ts.map +1 -1
  90. package/dist-lib/lib/floridayDocuments.server.js +58 -0
  91. package/dist-lib/lib/floridayGuard.server.d.ts +2 -2
  92. package/dist-lib/lib/floridayGuard.server.d.ts.map +1 -1
  93. package/dist-lib/lib/floridayGuard.server.js +34 -5
  94. package/dist-lib/lib/floridayPush.functions.d.ts +1600 -54
  95. package/dist-lib/lib/floridayPush.functions.d.ts.map +1 -1
  96. package/dist-lib/lib/floridayPush.functions.js +1 -1
  97. package/dist-lib/lib/flowGraph.d.ts +43 -0
  98. package/dist-lib/lib/flowGraph.d.ts.map +1 -0
  99. package/dist-lib/lib/flowGraph.js +153 -0
  100. package/dist-lib/lib/flowNodes.d.ts +23 -0
  101. package/dist-lib/lib/flowNodes.d.ts.map +1 -0
  102. package/dist-lib/lib/flowNodes.js +58 -0
  103. package/dist-lib/lib/flowRoute.d.ts +107 -0
  104. package/dist-lib/lib/flowRoute.d.ts.map +1 -0
  105. package/dist-lib/lib/flowRoute.js +280 -0
  106. package/dist-lib/lib/flowTree.d.ts +64 -0
  107. package/dist-lib/lib/flowTree.d.ts.map +1 -0
  108. package/dist-lib/lib/flowTree.js +519 -0
  109. package/dist-lib/lib/handlers/index.d.ts +1 -0
  110. package/dist-lib/lib/handlers/index.d.ts.map +1 -1
  111. package/dist-lib/lib/handlers/index.js +1 -0
  112. package/dist-lib/lib/handlers/logistics-shipping-note-now.server.d.ts +3 -0
  113. package/dist-lib/lib/handlers/logistics-shipping-note-now.server.d.ts.map +1 -0
  114. package/dist-lib/lib/handlers/logistics-shipping-note-now.server.js +100 -0
  115. package/dist-lib/lib/handlers/logistics-tick.server.d.ts.map +1 -1
  116. package/dist-lib/lib/handlers/logistics-tick.server.js +97 -2
  117. package/dist-lib/lib/loadCarrierPlanner.d.ts +2 -0
  118. package/dist-lib/lib/loadCarrierPlanner.d.ts.map +1 -1
  119. package/dist-lib/lib/loadCarrierPlanner.js +18 -0
  120. package/dist-lib/lib/loadCarrierPlanning.functions.d.ts +7740 -10
  121. package/dist-lib/lib/loadCarrierPlanning.functions.d.ts.map +1 -1
  122. package/dist-lib/lib/loadCarrierPlanning.functions.js +1 -1
  123. package/dist-lib/lib/loadCarrierPlanning.server.d.ts +9 -0
  124. package/dist-lib/lib/loadCarrierPlanning.server.d.ts.map +1 -1
  125. package/dist-lib/lib/loadCarrierPlanning.server.js +44 -17
  126. package/dist-lib/lib/logisticsPlanner.d.ts.map +1 -1
  127. package/dist-lib/lib/logisticsPlanner.js +14 -2
  128. package/dist-lib/lib/logisticsRecalcJob.functions.d.ts +3096 -4
  129. package/dist-lib/lib/logisticsRecalcJob.functions.d.ts.map +1 -1
  130. package/dist-lib/lib/logisticsRecalcJob.functions.js +1 -1
  131. package/dist-lib/lib/logisticsRecalculate.functions.d.ts +1600 -54
  132. package/dist-lib/lib/logisticsRecalculate.functions.d.ts.map +1 -1
  133. package/dist-lib/lib/logisticsRecalculate.functions.js +1 -1
  134. package/dist-lib/lib/modulePrompts.d.ts +1 -0
  135. package/dist-lib/lib/modulePrompts.d.ts.map +1 -1
  136. package/dist-lib/lib/modulePrompts.js +3482 -2610
  137. package/dist-lib/lib/nodeTrace.d.ts +61 -0
  138. package/dist-lib/lib/nodeTrace.d.ts.map +1 -0
  139. package/dist-lib/lib/nodeTrace.js +191 -0
  140. package/dist-lib/lib/pickQueueCleanup.server.d.ts +14 -0
  141. package/dist-lib/lib/pickQueueCleanup.server.d.ts.map +1 -0
  142. package/dist-lib/lib/pickQueueCleanup.server.js +80 -0
  143. package/dist-lib/lib/planQueue.server.d.ts.map +1 -1
  144. package/dist-lib/lib/planQueue.server.js +140 -0
  145. package/dist-lib/lib/ruleEngineImpact.d.ts.map +1 -1
  146. package/dist-lib/lib/ruleEngineImpact.js +11 -4
  147. package/dist-lib/lib/ruleEngineSchema.d.ts.map +1 -1
  148. package/dist-lib/lib/ruleEngineSchema.js +57 -6
  149. package/dist-lib/lib/ruleEngineWizard.d.ts.map +1 -1
  150. package/dist-lib/lib/ruleEngineWizard.js +3 -1
  151. package/dist-lib/lib/shippingNoteQueue.server.d.ts +18 -0
  152. package/dist-lib/lib/shippingNoteQueue.server.d.ts.map +1 -0
  153. package/dist-lib/lib/shippingNoteQueue.server.js +304 -0
  154. package/dist-lib/lib/trace.server.d.ts +75 -0
  155. package/dist-lib/lib/trace.server.d.ts.map +1 -0
  156. package/dist-lib/lib/trace.server.js +75 -0
  157. package/dist-lib/lib/vakUitleg.d.ts +19 -0
  158. package/dist-lib/lib/vakUitleg.d.ts.map +1 -0
  159. package/dist-lib/lib/vakUitleg.js +132 -0
  160. package/package.json +26 -2
  161. package/dist-lib/components/rule-engine/FloridayConnectionBanner.d.ts +0 -2
  162. package/dist-lib/components/rule-engine/FloridayConnectionBanner.d.ts.map +0 -1
  163. package/dist-lib/components/rule-engine/FloridayConnectionBanner.js +0 -41
  164. package/dist-lib/integrations/supabase/client.d.ts +0 -20293
  165. package/dist-lib/integrations/supabase/client.d.ts.map +0 -1
  166. package/dist-lib/integrations/supabase/client.js +0 -13
@@ -3,7 +3,7 @@
3
3
  // ============================================================================
4
4
  import { createServerFn } from "@tanstack/react-start";
5
5
  import { requireSupabaseAuth } from "../integrations/supabase/auth-middleware";
6
- import { readableServerErrors } from "../lib/readableServerErrors";
6
+ import { readableServerErrors } from "./readableServerErrors";
7
7
  /** Zet een order opnieuw in de wachtrij (handmatig opnieuw proberen). */
8
8
  export const retryFloridayPush = createServerFn({ method: "POST" })
9
9
  .middleware([readableServerErrors, requireSupabaseAuth])
@@ -0,0 +1,43 @@
1
+ import { type RuleEngineSettings, type RuleField, type RuleGroup } from "./ruleEngineSchema";
2
+ import { type WizardStep } from "./ruleEngineWizard";
3
+ export interface FlowBranch {
4
+ value: string;
5
+ label: string;
6
+ active: boolean;
7
+ }
8
+ export interface FlowDecision {
9
+ /** Sleutel van het veld dat deze beslissing bepaalt. */
10
+ key: string;
11
+ label: string;
12
+ /** Naam van het blok waarin de instelling staat. */
13
+ groupLabel: string;
14
+ /** De uitkomst die nu geldt. */
15
+ currentLabel: string;
16
+ branches: FlowBranch[];
17
+ /** Beslissing met meerdere zichtbare uitkomsten (ruit) of vaste waarde. */
18
+ isChoice: boolean;
19
+ /** True als de waarde een ja/nee-schakelaar is (waarde is boolean). */
20
+ isBoolean: boolean;
21
+ /** Uitleg in gewone taal, regel voor regel. */
22
+ help: string[];
23
+ }
24
+ export interface FlowNode {
25
+ id: string;
26
+ label: string;
27
+ description: string;
28
+ storeId: string;
29
+ decisions: FlowDecision[];
30
+ conditions: string[];
31
+ /** Aantal zichtbare instellingen achter deze stap. */
32
+ settingCount: number;
33
+ /** Uitleg in gewone taal, regel voor regel. */
34
+ help: string[];
35
+ }
36
+ /** Alle zichtbare velden van een wizardstap, met hun blok. */
37
+ export declare function visibleFieldsOf(step: WizardStep, settings: RuleEngineSettings): Array<{
38
+ field: RuleField;
39
+ group: RuleGroup;
40
+ }>;
41
+ /** Bouwt het flowschema uit de werkwijze die de engine gebruikt. */
42
+ export declare function buildFlow(settings: RuleEngineSettings): FlowNode[];
43
+ //# sourceMappingURL=flowGraph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flowGraph.d.ts","sourceRoot":"","sources":["../../src/lib/flowGraph.ts"],"names":[],"mappings":"AASA,OAAO,EAML,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEnE,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,wDAAwD;IACxD,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,2EAA2E;IAC3E,QAAQ,EAAE,OAAO,CAAC;IAClB,uEAAuE;IACvE,SAAS,EAAE,OAAO,CAAC;IACnB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,sDAAsD;IACtD,YAAY,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AA8GD,8DAA8D;AAC9D,wBAAgB,eAAe,CAC7B,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,kBAAkB,GAC3B,KAAK,CAAC;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,CAAC,CAW/C;AAED,oEAAoE;AACpE,wBAAgB,SAAS,CAAC,QAAQ,EAAE,kBAAkB,GAAG,QAAQ,EAAE,CA2ClE"}
@@ -0,0 +1,153 @@
1
+ // ============================================================================
2
+ // src/lib/flowGraph.ts — flowschema afgeleid van de echte werkwijze
3
+ // ============================================================================
4
+ // Bouwt de knopen en beslismomenten van de flowpagina UITSLUITEND op uit
5
+ // WIZARD_STEPS/RULE_STEPS en de opgeslagen instellingen van de werkwijze die
6
+ // de engine gebruikt. Er wordt hier geen aparte flow beschreven: verandert een
7
+ // instelling, dan verandert dit schema mee.
8
+ // ============================================================================
9
+ import { fieldVisible, optionLabel, conditionFieldLabel, conditionOperatorLabel, } from "./ruleEngineSchema";
10
+ import { WIZARD_STEPS } from "./ruleEngineWizard";
11
+ const DAY_SHORT = {
12
+ mon: "ma",
13
+ tue: "di",
14
+ wed: "wo",
15
+ thu: "do",
16
+ fri: "vr",
17
+ sat: "za",
18
+ sun: "zo",
19
+ };
20
+ function valueLabel(field, value) {
21
+ if (value === undefined || value === null || value === "")
22
+ return "niet ingesteld";
23
+ switch (field.type) {
24
+ case "toggle":
25
+ return value === true ? "aan" : "uit";
26
+ case "select":
27
+ case "radio":
28
+ return optionLabel(field, value);
29
+ case "days": {
30
+ const days = Array.isArray(value) ? value : [];
31
+ return days.length ? days.map((d) => DAY_SHORT[d] ?? d).join(", ") : "geen";
32
+ }
33
+ case "number":
34
+ return `${String(value)}${field.unit ? ` ${field.unit}` : ""}`;
35
+ case "priority": {
36
+ const entries = Array.isArray(value) ? value : [];
37
+ return `${entries.filter((e) => e?.enabled).length} actief`;
38
+ }
39
+ default:
40
+ return String(value);
41
+ }
42
+ }
43
+ function decisionFor(field, group, values) {
44
+ const value = values[field.key];
45
+ const current = valueLabel(field, value);
46
+ const basisUitleg = (branches) => {
47
+ const regels = [];
48
+ if (field.description)
49
+ regels.push(field.description);
50
+ regels.push(`Deze keuze hoort bij het blok "${group.label}".`);
51
+ regels.push(`Nu ingesteld op: ${current}.`);
52
+ if (branches.length) {
53
+ regels.push(`Mogelijke keuzes: ${branches.map((b) => b.label).join(" · ")}. Wijzig je hier iets, dan werkt de engine daarna meteen volgens die keuze.`);
54
+ }
55
+ return regels;
56
+ };
57
+ if (field.type === "toggle") {
58
+ const branches = [
59
+ { value: "true", label: "ja", active: value === true },
60
+ { value: "false", label: "nee", active: value !== true },
61
+ ];
62
+ return {
63
+ key: field.key,
64
+ label: field.label,
65
+ groupLabel: group.label,
66
+ currentLabel: current,
67
+ isChoice: true,
68
+ isBoolean: true,
69
+ branches,
70
+ help: basisUitleg(branches),
71
+ };
72
+ }
73
+ if (field.type === "select" || field.type === "radio") {
74
+ const options = Array.isArray(field.options) ? field.options : [];
75
+ if (options.length < 2)
76
+ return null;
77
+ const branches = options.map((o) => ({
78
+ value: o.value,
79
+ label: o.label,
80
+ active: o.value === value,
81
+ }));
82
+ return {
83
+ key: field.key,
84
+ label: field.label,
85
+ groupLabel: group.label,
86
+ currentLabel: current,
87
+ isChoice: true,
88
+ isBoolean: false,
89
+ branches,
90
+ help: basisUitleg(branches),
91
+ };
92
+ }
93
+ return null;
94
+ }
95
+ function describeConditions(conditions) {
96
+ const veilig = Array.isArray(conditions) ? conditions : [];
97
+ return veilig
98
+ .filter((c) => c && typeof c === "object")
99
+ .map((c) => {
100
+ const values = Array.isArray(c.values) ? c.values : [];
101
+ return `${conditionFieldLabel(c.field)} ${conditionOperatorLabel(c.operator)} ${values.length ? values.join(", ") : "—"}`;
102
+ });
103
+ }
104
+ /** Alle zichtbare velden van een wizardstap, met hun blok. */
105
+ export function visibleFieldsOf(step, settings) {
106
+ const values = settings?.[step.storeId]?.fields ?? {};
107
+ const groups = Array.isArray(step.groups) ? step.groups : [];
108
+ const result = [];
109
+ for (const group of groups) {
110
+ const fields = Array.isArray(group.fields) ? group.fields : [];
111
+ for (const field of fields) {
112
+ if (fieldVisible(field, values, settings))
113
+ result.push({ field, group });
114
+ }
115
+ }
116
+ return result;
117
+ }
118
+ /** Bouwt het flowschema uit de werkwijze die de engine gebruikt. */
119
+ export function buildFlow(settings) {
120
+ const veiligeSettings = settings && typeof settings === "object" ? settings : {};
121
+ return WIZARD_STEPS.map((step) => {
122
+ const values = veiligeSettings?.[step.storeId]?.fields ?? {};
123
+ const zichtbaar = visibleFieldsOf(step, veiligeSettings);
124
+ const decisions = zichtbaar
125
+ .map(({ field, group }) => decisionFor(field, group, values))
126
+ .filter((d) => d !== null);
127
+ const conditions = step.showConditions
128
+ ? describeConditions(veiligeSettings?.[step.storeId]?.conditions ?? [])
129
+ : [];
130
+ const help = [];
131
+ if (step.description)
132
+ help.push(step.description);
133
+ help.push(zichtbaar.length
134
+ ? `Achter deze stap staan ${zichtbaar.length} instellingen. Klik op het vakje om ze allemaal te openen en aan te passen.`
135
+ : "Bij deze stap staan op dit moment geen instelbare regels.");
136
+ if (decisions.length) {
137
+ help.push(`Beslismomenten hieronder: ${decisions.map((d) => `${d.label} (nu: ${d.currentLabel})`).join(" · ")}.`);
138
+ }
139
+ if (conditions.length) {
140
+ help.push(`Deze stap geldt alleen als: ${conditions.join(" en ")}.`);
141
+ }
142
+ return {
143
+ id: step.id,
144
+ label: step.label,
145
+ description: step.description,
146
+ storeId: step.storeId,
147
+ decisions,
148
+ conditions,
149
+ settingCount: zichtbaar.length,
150
+ help,
151
+ };
152
+ });
153
+ }
@@ -0,0 +1,23 @@
1
+ export declare const FLOW_NODE: {
2
+ readonly start: "__start";
3
+ readonly bron: "__bron";
4
+ readonly bronFloriday: "__bron_floriday";
5
+ readonly bronMail: "__bron_mail";
6
+ readonly bronActiemail: "__bron_actiemail";
7
+ readonly bronHandmatig: "__bron_handmatig";
8
+ readonly samenvoegen: "stap:bestelregels_samenvoegen";
9
+ readonly ontvangst: "stap:orders_combineren";
10
+ readonly indeling: "stap:beladingindeling";
11
+ readonly picken: "stap:picken";
12
+ readonly vrijgave: "stap:drukte_vertraging";
13
+ readonly stations: "stap:pickstations";
14
+ readonly controle: "stap:controle";
15
+ readonly eind: "__eind";
16
+ };
17
+ export type FlowNodeId = (typeof FLOW_NODE)[keyof typeof FLOW_NODE];
18
+ /** Leesbare naam van een vakje, voor het logboek en de tijdlijn. */
19
+ export declare const FLOW_NODE_LABEL: Record<string, string>;
20
+ /** Herkomst van een order (orders.order_source) → bronvakje op de kaart. */
21
+ export declare function bronNodeVoor(source: string | null | undefined): string | null;
22
+ export declare function flowNodeLabel(id: string | null | undefined): string;
23
+ //# sourceMappingURL=flowNodes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flowNodes.d.ts","sourceRoot":"","sources":["../../src/lib/flowNodes.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;CAeZ,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AAEpE,oEAAoE;AACpE,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAelD,CAAC;AAEF,4EAA4E;AAC5E,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAO7E;AAGD,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAGnE"}
@@ -0,0 +1,58 @@
1
+ // ============================================================================
2
+ // src/lib/flowNodes.ts — vaste vakjes van de flowkaart
3
+ // ============================================================================
4
+ // De Engine legt bij elke stap vast bij welk vakje van de flowkaart die stap
5
+ // hoort. Zo kleurt de kaart de echt gelopen route in plaats van een schatting.
6
+ // De ids komen letterlijk overeen met de knoop-ids uit flowTree.ts.
7
+ // ============================================================================
8
+ export const FLOW_NODE = {
9
+ start: "__start",
10
+ bron: "__bron",
11
+ bronFloriday: "__bron_floriday",
12
+ bronMail: "__bron_mail",
13
+ bronActiemail: "__bron_actiemail",
14
+ bronHandmatig: "__bron_handmatig",
15
+ samenvoegen: "stap:bestelregels_samenvoegen",
16
+ ontvangst: "stap:orders_combineren",
17
+ indeling: "stap:beladingindeling",
18
+ picken: "stap:picken",
19
+ vrijgave: "stap:drukte_vertraging",
20
+ stations: "stap:pickstations",
21
+ controle: "stap:controle",
22
+ eind: "__eind",
23
+ };
24
+ /** Leesbare naam van een vakje, voor het logboek en de tijdlijn. */
25
+ export const FLOW_NODE_LABEL = {
26
+ __start: "Order komt binnen",
27
+ __bron: "Waar komt de order vandaan?",
28
+ __bron_floriday: "Bestellingen uit Floriday",
29
+ __bron_mail: "Bestellingen uit de mail",
30
+ __bron_actiemail: "Bestellingen uit de actiemail",
31
+ __bron_handmatig: "Handmatige bestellingen",
32
+ "stap:bestelregels_samenvoegen": "Bestelregels samenvoegen",
33
+ "stap:orders_combineren": "Orders combineren",
34
+ "stap:beladingindeling": "Karrenindeling",
35
+ "stap:picken": "Order picken",
36
+ "stap:drukte_vertraging": "Vrijgave en aanmeldmoment",
37
+ "stap:pickstations": "Pickstations en documenten",
38
+ "stap:controle": "Controle en afmelden",
39
+ __eind: "Order afgehandeld",
40
+ };
41
+ /** Herkomst van een order (orders.order_source) → bronvakje op de kaart. */
42
+ export function bronNodeVoor(source) {
43
+ const s = (source ?? "").toLowerCase();
44
+ if (!s)
45
+ return null;
46
+ if (s.includes("floriday"))
47
+ return FLOW_NODE.bronFloriday;
48
+ if (s.includes("actie"))
49
+ return FLOW_NODE.bronActiemail;
50
+ if (s.includes("mail"))
51
+ return FLOW_NODE.bronMail;
52
+ return FLOW_NODE.bronHandmatig;
53
+ }
54
+ export function flowNodeLabel(id) {
55
+ if (!id)
56
+ return "Onbekend vakje";
57
+ return FLOW_NODE_LABEL[id] ?? id.replace(/^stap:/, "").replace(/_/g, " ");
58
+ }
@@ -0,0 +1,107 @@
1
+ import type { FlowTree } from "./flowTree";
2
+ import type { NodeTraceGroep } from "./nodeTrace";
3
+ /** Eén herberekening zoals `logistics_trace_versions` die teruggeeft. */
4
+ export interface OrderVersie {
5
+ id: string;
6
+ nr: number;
7
+ startedAt: string | null;
8
+ claimedAt: string | null;
9
+ finishedAt: string | null;
10
+ windowEnd: string | null;
11
+ status: string | null;
12
+ error: string | null;
13
+ reason: string | null;
14
+ reasonCode: string | null;
15
+ attempts: number;
16
+ events: number;
17
+ errors: number;
18
+ warnings: number;
19
+ waiting: number;
20
+ printJobs: number;
21
+ printFailed: number;
22
+ shippingEvents: number;
23
+ shippingStatus: string | null;
24
+ lastErrorStep: string | null;
25
+ lastError: string | null;
26
+ lastPhase: string | null;
27
+ lastStep: string | null;
28
+ lastEventAt: string | null;
29
+ }
30
+ export interface OrderKop {
31
+ orderNumber: string;
32
+ orderSource: string | null;
33
+ status: string | null;
34
+ deliveryDate: string | null;
35
+ customerName: string | null;
36
+ createdAt: string | null;
37
+ bufferId: string | null;
38
+ planLockedAt: string | null;
39
+ cancelledAt: string | null;
40
+ }
41
+ export interface KarStand {
42
+ total: number;
43
+ printed: number;
44
+ controlled: number;
45
+ announced: number;
46
+ }
47
+ export interface OrderRoute {
48
+ /** Herkomst: bepaalt welke bron-tak blauw wordt. */
49
+ source: "floriday" | "mail" | "actiemail" | "handmatig" | null;
50
+ /** Stappen (wizard-ids, in volgorde) die de order heeft bereikt. */
51
+ reached: string[];
52
+ /** Stap waar het misging, met reden. */
53
+ stuck: {
54
+ stepId: string;
55
+ reason: string;
56
+ } | null;
57
+ /** Stap die nog bezig/wachtend is (geen fout). */
58
+ busy: {
59
+ stepId: string;
60
+ reason: string;
61
+ } | null;
62
+ /** Helemaal klaar: gecontroleerd en afgemeld. */
63
+ finished: boolean;
64
+ /** Korte samenvatting voor de kaart. */
65
+ summary: string;
66
+ }
67
+ export declare const REASON_LABEL: Record<string, string>;
68
+ export declare function redenTekst(code: string | null | undefined, error?: string | null): string;
69
+ /** Leidt uit één versie + de huidige stand van de order de gelopen route af. */
70
+ export declare function bepaalRoute(versie: OrderVersie | null, order: OrderKop | null, carts: KarStand | null, isLaatste: boolean): OrderRoute;
71
+ export declare function stapLabel(stepId: string): string;
72
+ export type RouteMarker = {
73
+ kind: "stuck" | "busy" | "done";
74
+ text: string;
75
+ /** Welke keuze de Engine hier maakte. */
76
+ beslissing?: string | null;
77
+ /** Waarom die keuze is gemaakt. */
78
+ waarom?: string | null;
79
+ /** Bepalende gegevens en instellingen. */
80
+ feiten?: string[];
81
+ /** Tijdstip van de laatste gebeurtenis in dit vakje. */
82
+ at?: string | null;
83
+ /** Opgetelde duur van de stappen in dit vakje. */
84
+ durationMs?: number | null;
85
+ /** Aantal vastgelegde gebeurtenissen in dit vakje. */
86
+ count?: number;
87
+ /** Hoogste aantal pogingen in dit vakje. */
88
+ attempts?: number;
89
+ /** Foutsoort van de zwaarste gebeurtenis. */
90
+ errorClass?: string | null;
91
+ /** Wat de order hierna doet. */
92
+ nextStep?: string | null;
93
+ };
94
+ export interface RouteOverlay {
95
+ tree: FlowTree;
96
+ markers: Map<string, RouteMarker>;
97
+ }
98
+ /**
99
+ * Maakt een kopie van de kaart waarin alleen de gelopen route "active" is.
100
+ * Knopen/pijlen die de order (nog) niet heeft bereikt worden "possible".
101
+ *
102
+ * Zijn er echte gebeurtenissen per vakje (`groepen`), dan winnen die: de reis
103
+ * komt dan uit wat de Engine heeft vastgelegd. De heuristiek hieronder blijft
104
+ * de terugval voor oudere gebeurtenissen zonder vakje.
105
+ */
106
+ export declare function applyRoute(tree: FlowTree, route: OrderRoute | null, groepen?: Map<string, NodeTraceGroep> | null): RouteOverlay;
107
+ //# sourceMappingURL=flowRoute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flowRoute.d.ts","sourceRoot":"","sources":["../../src/lib/flowRoute.ts"],"names":[],"mappings":"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"}