@elaraai/e3-ui 1.0.93 → 1.0.95

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 (303) hide show
  1. package/dist/src/allocation/adapters.d.ts +159 -0
  2. package/dist/src/allocation/adapters.d.ts.map +1 -0
  3. package/dist/src/allocation/adapters.js +241 -0
  4. package/dist/src/allocation/adapters.js.map +1 -0
  5. package/dist/src/allocation/functions.d.ts +664 -0
  6. package/dist/src/allocation/functions.d.ts.map +1 -0
  7. package/dist/src/allocation/functions.js +782 -0
  8. package/dist/src/allocation/functions.js.map +1 -0
  9. package/dist/src/allocation/index.d.ts +2985 -0
  10. package/dist/src/allocation/index.d.ts.map +1 -0
  11. package/dist/src/allocation/index.js +499 -0
  12. package/dist/src/allocation/index.js.map +1 -0
  13. package/dist/src/allocation/types.d.ts +832 -0
  14. package/dist/src/allocation/types.d.ts.map +1 -0
  15. package/dist/src/allocation/types.js +360 -0
  16. package/dist/src/allocation/types.js.map +1 -0
  17. package/dist/src/bind/func.d.ts +14 -0
  18. package/dist/src/bind/func.d.ts.map +1 -1
  19. package/dist/src/bind/func.js +22 -1
  20. package/dist/src/bind/func.js.map +1 -1
  21. package/dist/src/calendar/index.d.ts +510 -1639
  22. package/dist/src/calendar/index.d.ts.map +1 -1
  23. package/dist/src/calendar/index.js +56 -29
  24. package/dist/src/calendar/index.js.map +1 -1
  25. package/dist/src/flowchart/canvas.d.ts +9 -21
  26. package/dist/src/flowchart/canvas.d.ts.map +1 -1
  27. package/dist/src/flowchart/canvas.js +10 -22
  28. package/dist/src/flowchart/canvas.js.map +1 -1
  29. package/dist/src/flowchart/flowchart.d.ts +19 -13
  30. package/dist/src/flowchart/flowchart.d.ts.map +1 -1
  31. package/dist/src/flowchart/flowchart.js.map +1 -1
  32. package/dist/src/flowchart/index.d.ts +44 -21
  33. package/dist/src/flowchart/index.d.ts.map +1 -1
  34. package/dist/src/flowchart/index.js +43 -20
  35. package/dist/src/flowchart/index.js.map +1 -1
  36. package/dist/src/flowchart/library.d.ts +166 -81
  37. package/dist/src/flowchart/library.d.ts.map +1 -1
  38. package/dist/src/flowchart/library.js +232 -105
  39. package/dist/src/flowchart/library.js.map +1 -1
  40. package/dist/src/flowchart/over.d.ts +9 -16
  41. package/dist/src/flowchart/over.d.ts.map +1 -1
  42. package/dist/src/flowchart/over.js +9 -16
  43. package/dist/src/flowchart/over.js.map +1 -1
  44. package/dist/src/flowchart/payload.d.ts +710 -508
  45. package/dist/src/flowchart/payload.d.ts.map +1 -1
  46. package/dist/src/flowchart/payload.js +128 -74
  47. package/dist/src/flowchart/payload.js.map +1 -1
  48. package/dist/src/flowchart/window.d.ts +132 -347
  49. package/dist/src/flowchart/window.d.ts.map +1 -1
  50. package/dist/src/flowchart/window.js +48 -55
  51. package/dist/src/flowchart/window.js.map +1 -1
  52. package/dist/src/index.d.ts +11 -7
  53. package/dist/src/index.d.ts.map +1 -1
  54. package/dist/src/index.js +14 -6
  55. package/dist/src/index.js.map +1 -1
  56. package/dist/src/internal.d.ts +18 -7
  57. package/dist/src/internal.d.ts.map +1 -1
  58. package/dist/src/internal.js +28 -9
  59. package/dist/src/internal.js.map +1 -1
  60. package/dist/src/plan/event-rows.d.ts +26 -10
  61. package/dist/src/plan/event-rows.d.ts.map +1 -1
  62. package/dist/src/plan/event-rows.js +39 -13
  63. package/dist/src/plan/event-rows.js.map +1 -1
  64. package/dist/src/plan/ir.d.ts +244 -815
  65. package/dist/src/plan/ir.d.ts.map +1 -1
  66. package/dist/src/plan/ir.js +8 -6
  67. package/dist/src/plan/ir.js.map +1 -1
  68. package/dist/src/plan/library.d.ts +3 -0
  69. package/dist/src/plan/library.d.ts.map +1 -1
  70. package/dist/src/plan/library.js +1 -1
  71. package/dist/src/plan/library.js.map +1 -1
  72. package/dist/src/plan/ordered-source.d.ts +1 -0
  73. package/dist/src/plan/ordered-source.d.ts.map +1 -1
  74. package/dist/src/plan/plan.d.ts +559 -1667
  75. package/dist/src/plan/plan.d.ts.map +1 -1
  76. package/dist/src/plan/plan.js +123 -45
  77. package/dist/src/plan/plan.js.map +1 -1
  78. package/dist/src/plan/root.d.ts +16 -20
  79. package/dist/src/plan/root.d.ts.map +1 -1
  80. package/dist/src/plan/root.js +23 -33
  81. package/dist/src/plan/root.js.map +1 -1
  82. package/dist/src/roster/coverage.d.ts +17 -231
  83. package/dist/src/roster/coverage.d.ts.map +1 -1
  84. package/dist/src/roster/coverage.js +94 -90
  85. package/dist/src/roster/coverage.js.map +1 -1
  86. package/dist/src/roster/fit.d.ts +59 -0
  87. package/dist/src/roster/fit.d.ts.map +1 -0
  88. package/dist/src/roster/fit.js +155 -0
  89. package/dist/src/roster/fit.js.map +1 -0
  90. package/dist/src/roster/index.d.ts +2862 -3662
  91. package/dist/src/roster/index.d.ts.map +1 -1
  92. package/dist/src/roster/index.js +383 -81
  93. package/dist/src/roster/index.js.map +1 -1
  94. package/dist/src/roster/library.d.ts +37 -92
  95. package/dist/src/roster/library.d.ts.map +1 -1
  96. package/dist/src/roster/library.js +25 -64
  97. package/dist/src/roster/library.js.map +1 -1
  98. package/dist/src/roster/lists.d.ts +195 -0
  99. package/dist/src/roster/lists.d.ts.map +1 -0
  100. package/dist/src/roster/lists.js +233 -0
  101. package/dist/src/roster/lists.js.map +1 -0
  102. package/dist/src/roster/rules.d.ts +17 -260
  103. package/dist/src/roster/rules.d.ts.map +1 -1
  104. package/dist/src/roster/rules.js +135 -132
  105. package/dist/src/roster/rules.js.map +1 -1
  106. package/dist/src/roster/targets.d.ts +115 -0
  107. package/dist/src/roster/targets.d.ts.map +1 -0
  108. package/dist/src/roster/targets.js +213 -0
  109. package/dist/src/roster/targets.js.map +1 -0
  110. package/dist/src/roster/times.d.ts +251 -0
  111. package/dist/src/roster/times.d.ts.map +1 -0
  112. package/dist/src/roster/times.js +174 -0
  113. package/dist/src/roster/times.js.map +1 -0
  114. package/dist/src/roster/types.d.ts +828 -183
  115. package/dist/src/roster/types.d.ts.map +1 -1
  116. package/dist/src/roster/types.js +224 -97
  117. package/dist/src/roster/types.js.map +1 -1
  118. package/dist/src/schedule/accessor.d.ts +28 -0
  119. package/dist/src/schedule/accessor.d.ts.map +1 -0
  120. package/dist/src/schedule/accessor.js +39 -0
  121. package/dist/src/schedule/accessor.js.map +1 -0
  122. package/dist/src/schedule/events.d.ts +170 -42
  123. package/dist/src/schedule/events.d.ts.map +1 -1
  124. package/dist/src/schedule/events.js +431 -171
  125. package/dist/src/schedule/events.js.map +1 -1
  126. package/dist/src/schedule/index.d.ts +41 -4
  127. package/dist/src/schedule/index.d.ts.map +1 -1
  128. package/dist/src/schedule/index.js +35 -3
  129. package/dist/src/schedule/index.js.map +1 -1
  130. package/dist/src/schedule/library.d.ts +13 -3
  131. package/dist/src/schedule/library.d.ts.map +1 -1
  132. package/dist/src/schedule/library.js +11 -4
  133. package/dist/src/schedule/library.js.map +1 -1
  134. package/dist/src/schedule/periods.d.ts +115 -0
  135. package/dist/src/schedule/periods.d.ts.map +1 -0
  136. package/dist/src/schedule/periods.js +215 -0
  137. package/dist/src/schedule/periods.js.map +1 -0
  138. package/dist/src/schedule/record-window.d.ts +25 -3
  139. package/dist/src/schedule/record-window.d.ts.map +1 -1
  140. package/dist/src/schedule/record-window.js +31 -18
  141. package/dist/src/schedule/record-window.js.map +1 -1
  142. package/dist/src/schedule/resources.d.ts +82 -4
  143. package/dist/src/schedule/resources.d.ts.map +1 -1
  144. package/dist/src/schedule/resources.js +44 -14
  145. package/dist/src/schedule/resources.js.map +1 -1
  146. package/dist/src/schedule/session.d.ts +69 -0
  147. package/dist/src/schedule/session.d.ts.map +1 -0
  148. package/dist/src/schedule/session.js +121 -0
  149. package/dist/src/schedule/session.js.map +1 -0
  150. package/dist/src/schedule/templates.d.ts +14 -2
  151. package/dist/src/schedule/templates.d.ts.map +1 -1
  152. package/dist/src/schedule/templates.js +5 -3
  153. package/dist/src/schedule/templates.js.map +1 -1
  154. package/dist/src/schedule/types.d.ts +1671 -37
  155. package/dist/src/schedule/types.d.ts.map +1 -1
  156. package/dist/src/schedule/types.js +196 -5
  157. package/dist/src/schedule/types.js.map +1 -1
  158. package/dist/src/schedule/window.d.ts +14 -0
  159. package/dist/src/schedule/window.d.ts.map +1 -1
  160. package/dist/src/schedule/window.js +14 -4
  161. package/dist/src/schedule/window.js.map +1 -1
  162. package/dist/src/schedule/words.d.ts +22 -0
  163. package/dist/src/schedule/words.d.ts.map +1 -0
  164. package/dist/src/schedule/words.js +25 -0
  165. package/dist/src/schedule/words.js.map +1 -0
  166. package/dist/src/sheet/index.d.ts +61 -27
  167. package/dist/src/sheet/index.d.ts.map +1 -1
  168. package/dist/src/sheet/index.js +59 -25
  169. package/dist/src/sheet/index.js.map +1 -1
  170. package/dist/src/sheet/library.d.ts +21 -3
  171. package/dist/src/sheet/library.d.ts.map +1 -1
  172. package/dist/src/sheet/library.js +23 -6
  173. package/dist/src/sheet/library.js.map +1 -1
  174. package/dist/src/sheet/registers.d.ts +100 -85
  175. package/dist/src/sheet/registers.d.ts.map +1 -1
  176. package/dist/src/sheet/registers.js +100 -85
  177. package/dist/src/sheet/registers.js.map +1 -1
  178. package/dist/src/sheet/root.d.ts +8 -12
  179. package/dist/src/sheet/root.d.ts.map +1 -1
  180. package/dist/src/sheet/root.js +6 -40
  181. package/dist/src/sheet/root.js.map +1 -1
  182. package/dist/src/sheet/sheet.d.ts +598 -2349
  183. package/dist/src/sheet/sheet.d.ts.map +1 -1
  184. package/dist/src/sheet/sheet.js +124 -37
  185. package/dist/src/sheet/sheet.js.map +1 -1
  186. package/dist/src/sheet/sub-rows.d.ts +74 -28
  187. package/dist/src/sheet/sub-rows.d.ts.map +1 -1
  188. package/dist/src/sheet/sub-rows.js +74 -28
  189. package/dist/src/sheet/sub-rows.js.map +1 -1
  190. package/dist/src/sheet/templates.d.ts +98 -34
  191. package/dist/src/sheet/templates.d.ts.map +1 -1
  192. package/dist/src/sheet/templates.js +102 -58
  193. package/dist/src/sheet/templates.js.map +1 -1
  194. package/dist/src/sheet/types.d.ts +289 -1359
  195. package/dist/src/sheet/types.d.ts.map +1 -1
  196. package/dist/src/sheet/types.js +20 -26
  197. package/dist/src/sheet/types.js.map +1 -1
  198. package/dist/src/sheet/views.d.ts +10 -11
  199. package/dist/src/sheet/views.d.ts.map +1 -1
  200. package/dist/src/sheet/views.js +15 -20
  201. package/dist/src/sheet/views.js.map +1 -1
  202. package/dist/src/{roster/visibility.d.ts → utils/key-visibility.d.ts} +42 -7
  203. package/dist/src/utils/key-visibility.d.ts.map +1 -0
  204. package/dist/src/utils/key-visibility.js +36 -0
  205. package/dist/src/utils/key-visibility.js.map +1 -0
  206. package/dist/src/utils/ordered-source.d.ts +1 -0
  207. package/dist/src/utils/ordered-source.d.ts.map +1 -1
  208. package/dist/src/utils/ordered-source.js +8 -3
  209. package/dist/src/utils/ordered-source.js.map +1 -1
  210. package/dist/src/utils/record-sources.d.ts +107 -0
  211. package/dist/src/utils/record-sources.d.ts.map +1 -0
  212. package/dist/src/utils/record-sources.js +132 -0
  213. package/dist/src/utils/record-sources.js.map +1 -0
  214. package/dist/test/allocation/allocation.examples.d.ts +2902 -0
  215. package/dist/test/allocation/allocation.examples.d.ts.map +1 -0
  216. package/dist/test/allocation/allocation.examples.js +643 -0
  217. package/dist/test/allocation/allocation.examples.js.map +1 -0
  218. package/dist/test/allocation/fit.examples.d.ts +546 -0
  219. package/dist/test/allocation/fit.examples.d.ts.map +1 -0
  220. package/dist/test/allocation/fit.examples.js +171 -0
  221. package/dist/test/allocation/fit.examples.js.map +1 -0
  222. package/dist/test/allocation/kiln-yard.d.ts +181 -0
  223. package/dist/test/allocation/kiln-yard.d.ts.map +1 -0
  224. package/dist/test/allocation/kiln-yard.js +228 -0
  225. package/dist/test/allocation/kiln-yard.js.map +1 -0
  226. package/dist/test/bind/data/data.examples.d.ts +651 -1
  227. package/dist/test/bind/data/data.examples.d.ts.map +1 -1
  228. package/dist/test/bind/data/data.examples.js +140 -2
  229. package/dist/test/bind/data/data.examples.js.map +1 -1
  230. package/dist/test/bind/func/func.examples.d.ts +10 -1
  231. package/dist/test/bind/func/func.examples.d.ts.map +1 -1
  232. package/dist/test/bind/func/func.examples.js +8 -1
  233. package/dist/test/bind/func/func.examples.js.map +1 -1
  234. package/dist/test/bind/record/record.examples.d.ts +633 -1
  235. package/dist/test/bind/record/record.examples.d.ts.map +1 -1
  236. package/dist/test/bind/record/record.examples.js +26 -2
  237. package/dist/test/bind/record/record.examples.js.map +1 -1
  238. package/dist/test/calendar/calendar-records.examples.d.ts.map +1 -1
  239. package/dist/test/calendar/calendar-records.examples.js +18 -14
  240. package/dist/test/calendar/calendar-records.examples.js.map +1 -1
  241. package/dist/test/calendar/calendar.examples.d.ts +521 -16
  242. package/dist/test/calendar/calendar.examples.d.ts.map +1 -1
  243. package/dist/test/calendar/calendar.examples.js +182 -135
  244. package/dist/test/calendar/calendar.examples.js.map +1 -1
  245. package/dist/test/examples-package.d.ts +75 -0
  246. package/dist/test/examples-package.d.ts.map +1 -0
  247. package/dist/test/examples-package.js +263 -0
  248. package/dist/test/examples-package.js.map +1 -0
  249. package/dist/test/flowchart/flowchart.examples.d.ts +211 -19
  250. package/dist/test/flowchart/flowchart.examples.d.ts.map +1 -1
  251. package/dist/test/flowchart/flowchart.examples.js +102 -75
  252. package/dist/test/flowchart/flowchart.examples.js.map +1 -1
  253. package/dist/test/plan/plan-events.examples.d.ts +1439 -209
  254. package/dist/test/plan/plan-events.examples.d.ts.map +1 -1
  255. package/dist/test/plan/plan-events.examples.js +199 -59
  256. package/dist/test/plan/plan-events.examples.js.map +1 -1
  257. package/dist/test/plan/plan-records.examples.d.ts +420 -0
  258. package/dist/test/plan/plan-records.examples.d.ts.map +1 -1
  259. package/dist/test/plan/plan-records.examples.js +70 -19
  260. package/dist/test/plan/plan-records.examples.js.map +1 -1
  261. package/dist/test/plan/plan-windows.examples.d.ts +636 -55
  262. package/dist/test/plan/plan-windows.examples.d.ts.map +1 -1
  263. package/dist/test/plan/plan-windows.examples.js +69 -33
  264. package/dist/test/plan/plan-windows.examples.js.map +1 -1
  265. package/dist/test/plan/plan.examples.d.ts +153 -31
  266. package/dist/test/plan/plan.examples.d.ts.map +1 -1
  267. package/dist/test/plan/plan.examples.js +178 -101
  268. package/dist/test/plan/plan.examples.js.map +1 -1
  269. package/dist/test/roster/domain.examples.d.ts +467 -250
  270. package/dist/test/roster/domain.examples.d.ts.map +1 -1
  271. package/dist/test/roster/domain.examples.js +92 -29
  272. package/dist/test/roster/domain.examples.js.map +1 -1
  273. package/dist/test/roster/roster-records.examples.d.ts +430 -586
  274. package/dist/test/roster/roster-records.examples.d.ts.map +1 -1
  275. package/dist/test/roster/roster-records.examples.js +102 -43
  276. package/dist/test/roster/roster-records.examples.js.map +1 -1
  277. package/dist/test/roster/roster.examples.d.ts +2319 -606
  278. package/dist/test/roster/roster.examples.d.ts.map +1 -1
  279. package/dist/test/roster/roster.examples.js +456 -148
  280. package/dist/test/roster/roster.examples.js.map +1 -1
  281. package/dist/test/roster/warehouse.d.ts +172 -63
  282. package/dist/test/roster/warehouse.d.ts.map +1 -1
  283. package/dist/test/roster/warehouse.js +172 -39
  284. package/dist/test/roster/warehouse.js.map +1 -1
  285. package/dist/test/schedule/schedule.examples.d.ts +3499 -0
  286. package/dist/test/schedule/schedule.examples.d.ts.map +1 -0
  287. package/dist/test/schedule/schedule.examples.js +192 -0
  288. package/dist/test/schedule/schedule.examples.js.map +1 -0
  289. package/dist/test/sheet/sheet-records.examples.d.ts.map +1 -1
  290. package/dist/test/sheet/sheet-records.examples.js +22 -18
  291. package/dist/test/sheet/sheet-records.examples.js.map +1 -1
  292. package/dist/test/sheet/sheet.examples.d.ts +715 -26
  293. package/dist/test/sheet/sheet.examples.d.ts.map +1 -1
  294. package/dist/test/sheet/sheet.examples.js +204 -130
  295. package/dist/test/sheet/sheet.examples.js.map +1 -1
  296. package/package.json +17 -10
  297. package/dist/src/roster/people.d.ts +0 -50
  298. package/dist/src/roster/people.d.ts.map +0 -1
  299. package/dist/src/roster/people.js +0 -32
  300. package/dist/src/roster/people.js.map +0 -1
  301. package/dist/src/roster/visibility.d.ts.map +0 -1
  302. package/dist/src/roster/visibility.js +0 -25
  303. package/dist/src/roster/visibility.js.map +0 -1
@@ -2,153 +2,156 @@
2
2
  * Copyright (c) 2025 Elara AI Pty Ltd
3
3
  * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
4
  */
5
- import { ArrayType, East, FloatType, OptionType, StringType, StructType, none, some, variant } from "@elaraai/east";
5
+ import { ArrayType, DictType, East, FloatType, IntegerType, OptionType, StringType, StructType, none, some, variant, } from "@elaraai/east";
6
+ import { scheduleNumberText } from "../schedule/words.js";
6
7
  import { rosterCoverage } from "./coverage.js";
7
- import { RosterAssignmentType, RosterContextType, RosterFixType, RosterIssueType, RosterSlotType, RosterWeekType } from "./types.js";
8
- /** Rest before and after an assignment, in hours. Infinity means no neighbouring assignment in this week. @internal */
8
+ import { RosterAssignmentTypeFor, RosterContextType, RosterFixType, RosterIssueType, RosterSlotType, RosterWeekTypeFor } from "./types.js";
9
+ /** Rest before and after a duty, in hours. Infinity means no other duty of theirs on that side in this week. @internal */
9
10
  export const RosterRestType = StructType({ before: FloatType, after: FloatType, minimum: FloatType });
10
11
  /**
11
- * Measures rest against adjacent days within the supplied week.
12
- * @param assignment - The assignment or candidate placement
13
- * @param id - Its identifier, excluded from comparisons
14
- * @param week - The drafted week
15
- * @param context - Reference data defining shift times
16
- * @returns Rest before, after and the smaller of the two
17
- * @remarks Start offsets move the entire shift, while overtime extends its end. This same calculation checks prospective drops and existing assignments.
12
+ * Measures a duty's rest against the person's other duties of the week.
13
+ *
14
+ * @typeParam R - The app's duty row type
15
+ * @param row - The app's duty row type
16
+ * @returns An East function `(assignment, id, week, context) → Rest`: the rest before it, after it, and the smaller of the two
17
+ * @remarks Rest is measured between the duties' own times: before, from the end of the latest of the person's duties to start before it; after, to the start of the earliest to start after it. Duties that overlap leave negative rest. An agency's request has none. This same calculation checks prospective drops and existing duties.
18
18
  * @internal
19
19
  */
20
- export const rosterRest = East.function([RosterAssignmentType, StringType, RosterWeekType, RosterContextType], RosterRestType, ($, assignment, id, week, context) => {
21
- const before = $.let(Infinity, FloatType);
22
- const after = $.let(Infinity, FloatType);
23
- const shifts = $.const(context.shifts.toDict((_$, shift) => shift.key, (_$, shift) => shift));
24
- $.if(assignment.who.hasTag("person").and(() => shifts.has(assignment.slot.shift)), $ => {
25
- const shift = $.const(shifts.get(assignment.slot.shift));
26
- const start = $.const(shift.start.hour.toFloat().add(shift.start.minute.toFloat().divide(60.0)).add(assignment.offset));
27
- const end = $.const(start.add(shift.hours).add(assignment.overtime));
28
- $.for(week.assignments, ($, other, key) => {
29
- $.if(East.notEqual(key, id).and(() => East.equal(other.who, assignment.who)).and(() => shifts.has(other.slot.shift)), $ => {
30
- const otherShift = $.const(shifts.get(other.slot.shift));
31
- const otherStart = $.const(otherShift.start.hour.toFloat().add(otherShift.start.minute.toFloat().divide(60.0)).add(other.offset));
32
- const otherEnd = $.const(otherStart.add(otherShift.hours).add(other.overtime));
33
- $.if(East.equal(other.slot.day, assignment.slot.day.subtract(1n)), $ => {
34
- $.assign(before, East.min(before, start.add(24.0).subtract(otherEnd)));
35
- });
36
- $.if(East.equal(other.slot.day, assignment.slot.day.add(1n)), $ => {
37
- $.assign(after, East.min(after, otherStart.add(24.0).subtract(end)));
20
+ export function rosterRest(row) {
21
+ return East.function([RosterAssignmentTypeFor(row), StringType, RosterWeekTypeFor(row), RosterContextType], RosterRestType, ($, assignment, id, week, _context) => {
22
+ const before = $.let(Infinity, FloatType);
23
+ const after = $.let(Infinity, FloatType);
24
+ $.if(assignment.who.hasTag("person"), $ => {
25
+ $.for(week.assignments, ($, other, key) => {
26
+ $.if(East.notEqual(key, id).and(() => East.equal(other.who, assignment.who)), $ => {
27
+ $.if(East.lessEqual(other.start, assignment.start), $ => {
28
+ $.assign(before, East.min(before, other.end.durationHours(assignment.start)));
29
+ }).else($ => {
30
+ $.assign(after, East.min(after, assignment.end.durationHours(other.start)));
31
+ });
38
32
  });
39
33
  });
40
34
  });
35
+ return { before, after, minimum: East.min(before, after) };
41
36
  });
42
- return { before, after, minimum: East.min(before, after) };
43
- });
37
+ }
44
38
  /**
45
- * Checks a drafted week for staffing gaps, breaches and unagreed hours.
46
- * @param week - The week with draft assignments and targets
47
- * @param context - Complete people and configuration
48
- * @returns Issues in day, group and shift order, with actionable fixes
49
- * @remarks Pure East, shared by tasks and the renderer. Rest is confined to this week. Issues explain the roster; they do not automatically block Save or Publish.
39
+ * Checks a drafted week for staffing gaps and breaches.
40
+ *
41
+ * @typeParam R - The app's duty row type
42
+ * @param row - The app's duty row type
43
+ * @returns An East function `(week, context) → Array<Issue>`: issues in day, group and shift order, with actionable fixes
44
+ * @remarks Pure East, shared by tasks and the renderer. Rest is confined to this week. Issues explain the roster; they do not automatically block Save or Publish. The pay's codes are the app's: its own `check` reads them (`CheckContext(R)`). Its words print hours as the fit's do (`scheduleNumberText`): `6 h rest`, `7.5 h unfilled`.
50
45
  */
51
- export const rosterCheck = East.function([RosterWeekType, RosterContextType], ArrayType(RosterIssueType), ($, week, context) => {
52
- const coverageOf = $.const(rosterCoverage);
53
- const restOf = $.const(rosterRest);
54
- const coverage = $.const(coverageOf(week, context));
55
- const issues = $.let([], ArrayType(RosterIssueType));
56
- $.for(East.Array.range(0n, 7n), ($, day) => {
57
- $.for(context.groups, ($, group) => {
58
- $.for(context.shifts, ($, shift) => {
59
- const slot = $.const({ day, group: group.key, shift: shift.key }, RosterSlotType);
60
- const c = $.const(coverage.get(slot));
61
- const location = $.const(East.str `${group.label} · ${shift.label}`);
62
- const assignments = $.const(week.assignments.filter((_$, a) => East.equal(a.slot, slot)));
63
- $.if(context.rules.lead.and(() => East.greater(c.positions, 0n)).and(() => East.greater(c.filled, 0n)).and(() => c.lead.not()), $ => {
64
- $(issues.pushLast({ kind: variant("breach", null), tone: variant("warning", null),
65
- title: East.str `No lead on ${location}`, detail: "Assign someone in a lead position",
66
- slot: some(slot), assignment: none, flag: some("no lead"), fix: some(variant("find", variant("leads", null))) }));
67
- });
68
- $.for(assignments, ($, a, id) => {
69
- $.match(a.who, { person: ($, key) => {
70
- $.if(context.people.has(key), $ => {
71
- const person = $.const(context.people.get(key));
72
- const sameDay = $.const(week.assignments.filter((_$, other) => East.equal(other.who, a.who).and(() => East.equal(other.slot.day, day))));
73
- $.if(East.greater(sameDay.size(), 1n), $ => {
74
- $(issues.pushLast({ kind: variant("breach", null), tone: variant("danger", null),
75
- title: East.str `${person.name} · double booked`, detail: East.str `${location} · on ${sameDay.size()} shifts this day`,
76
- slot: some(slot), assignment: some(id), flag: some("double"), fix: none }));
77
- });
78
- const rest = $.const(restOf(a, id, week, context));
79
- $.if(East.greater(context.rules.rest, 0.0).and(() => East.less(rest.minimum, context.rules.rest)), $ => {
80
- const fix = $.let(none, OptionType(RosterFixType));
81
- $.for(context.shifts, ($, alternative) => {
82
- $.if(fix.hasTag("none").and(() => East.notEqual(alternative.key, shift.key)), $ => {
83
- const candidate = $.const({
84
- slot: { day, group: group.key, shift: alternative.key }, who: a.who,
85
- position: a.position, activity: a.activity, offset: a.offset, overtime: a.overtime, agreed: a.agreed,
86
- }, RosterAssignmentType);
87
- $.if(East.greaterEqual(restOf(candidate, id, week, context).minimum, context.rules.rest), $ => {
88
- $.assign(fix, some(variant("move", alternative.key)));
46
+ export function rosterCheck(row) {
47
+ const Row = row;
48
+ const coverageFn = rosterCoverage(Row);
49
+ const restFn = rosterRest(Row);
50
+ const Assignment = RosterAssignmentTypeFor(Row);
51
+ return East.function([RosterWeekTypeFor(Row), RosterContextType], ArrayType(RosterIssueType), ($, week, context) => {
52
+ const coverageOf = $.const(coverageFn);
53
+ const restOf = $.const(restFn);
54
+ const hoursText = $.const(scheduleNumberText);
55
+ // "position", or "positions" for any count but one.
56
+ const positionsText = $.const(East.function([IntegerType], StringType, (_$2, n) => East.equal(n, 1n).ifElse(() => "position", () => "positions")));
57
+ // The built-in checks read no costs: the app's own check reads its pay's.
58
+ const coverage = $.const(coverageOf(week, context, East.value(new Map(), DictType(StringType, DictType(StringType, FloatType)))));
59
+ const issues = $.let([], ArrayType(RosterIssueType));
60
+ $.for(East.Array.range(0n, 7n), ($, day) => {
61
+ $.for(context.groups, ($, group) => {
62
+ // The group's skills: the activities of that group.
63
+ const skills = $.const(context.activities.filter((_$, activity) => East.equal(activity.group, some(group.key))));
64
+ $.for(context.shifts, ($, shift) => {
65
+ const slot = $.const({ day, group: group.key, shift: shift.key }, RosterSlotType);
66
+ const c = $.const(coverage.get(slot));
67
+ const location = $.const(East.str `${group.label} · ${shift.label}`);
68
+ const assignments = $.const(week.assignments.filter((_$, a) => East.equal(a.slot, slot)));
69
+ $.if(context.rules.lead.and(() => East.greater(c.positions, 0n)).and(() => East.greater(c.filled, 0n)).and(() => c.lead.not()), $ => {
70
+ $(issues.pushLast({ kind: variant("breach", null), tone: variant("warning", null),
71
+ title: East.str `No lead on ${location}`, detail: "Assign someone in a lead position",
72
+ slot: some(slot), assignment: none, flag: some("no lead"), fix: some(variant("find", variant("leads", null))) }));
73
+ });
74
+ $.for(assignments, ($, a, id) => {
75
+ $.match(a.who, { person: ($, key) => {
76
+ $.if(context.people.has(key), $ => {
77
+ const person = $.const(context.people.get(key));
78
+ const sameDay = $.const(week.assignments.filter((_$, other) => East.equal(other.who, a.who).and(() => East.equal(other.slot.day, day))));
79
+ $.if(East.greater(sameDay.size(), 1n), $ => {
80
+ $(issues.pushLast({ kind: variant("breach", null), tone: variant("danger", null),
81
+ title: East.str `${person.name} · double booked`, detail: East.str `${location} · on ${sameDay.size()} shifts this day`,
82
+ slot: some(slot), assignment: some(id), flag: some("double"), fix: none }));
83
+ });
84
+ const rest = $.const(restOf(a, id, week, context));
85
+ $.if(East.greater(context.rules.rest, 0.0).and(() => East.less(rest.minimum, context.rules.rest)), $ => {
86
+ const fix = $.let(none, OptionType(RosterFixType));
87
+ // Another shift of the day, the duty's times kept where they stood against its shift's start.
88
+ $.for(context.shifts, ($, alternative) => {
89
+ $.if(fix.hasTag("none").and(() => East.notEqual(alternative.key, shift.key)), $ => {
90
+ const moved = $.const(alternative.start.hour.multiply(60n).add(alternative.start.minute)
91
+ .subtract(shift.start.hour.multiply(60n).add(shift.start.minute)));
92
+ const candidate = $.const(East.value({
93
+ slot: { day, group: group.key, shift: alternative.key }, who: a.who, position: a.position, activity: a.activity,
94
+ start: a.start.addMinutes(moved), end: a.end.addMinutes(moved), hours: a.hours, row: a.row,
95
+ }, Assignment));
96
+ $.if(East.greaterEqual(restOf(candidate, id, week, context).minimum, context.rules.rest), $ => {
97
+ $.assign(fix, some(variant("move", alternative.key)));
98
+ });
89
99
  });
90
100
  });
91
- });
92
- $.if(fix.hasTag("none").and(() => East.less(rest.before, context.rules.rest)), $ => {
93
- const extra = $.const(East.Float.roundCeil(context.rules.rest.subtract(rest.before).multiply(2.0)).toFloat().divide(2.0));
94
- // A later start must not fix the previous night by breaking the following one.
95
- $.if(East.greaterEqual(rest.after.subtract(extra), context.rules.rest), $ => {
96
- $.assign(fix, some(variant("start", a.offset.add(extra))));
101
+ $.if(fix.hasTag("none").and(() => East.less(rest.before, context.rules.rest)), $ => {
102
+ const extra = $.const(East.Float.roundCeil(context.rules.rest.subtract(rest.before).multiply(2.0)).toFloat().divide(2.0));
103
+ // A later start must not fix the previous night by breaking the following one.
104
+ $.if(East.greaterEqual(rest.after.subtract(extra), context.rules.rest), $ => {
105
+ $.assign(fix, some(variant("start", a.start.addHours(extra))));
106
+ });
97
107
  });
108
+ $(issues.pushLast({ kind: variant("breach", null), tone: variant("danger", null),
109
+ title: East.str `${person.name} · ${hoursText(rest.minimum)} h rest`,
110
+ detail: East.lessEqual(rest.before, rest.after).ifElse(() => East.str `${location} · minimum ${hoursText(context.rules.rest)} h since the previous shift`, () => East.str `${location} · minimum ${hoursText(context.rules.rest)} h before the next shift`),
111
+ slot: some(slot), assignment: some(id), flag: some(East.str `${hoursText(rest.minimum)}h rest`), fix }));
98
112
  });
99
- $(issues.pushLast({ kind: variant("breach", null), tone: variant("danger", null),
100
- title: East.str `${person.name} · ${rest.minimum} h rest`,
101
- detail: East.lessEqual(rest.before, rest.after).ifElse(() => East.str `${location} · minimum ${context.rules.rest} h since the previous shift`, () => East.str `${location} · minimum ${context.rules.rest} h before the next shift`),
102
- slot: some(slot), assignment: some(id), flag: some(East.str `${rest.minimum}h rest`), fix }));
103
- });
104
- $.if(context.rules.trainer.and(() => person.trainee).and(() => c.trainer.not()), $ => {
105
- $(issues.pushLast({ kind: variant("breach", null), tone: variant("warning", null),
106
- title: East.str `${person.name} · trainee without trainer`, detail: East.str `${location} · no trainer rostered on this shift`,
107
- slot: some(slot), assignment: some(id), flag: some("trainee"), fix: some(variant("find", variant("trainers", null))) }));
108
- });
109
- $.if(context.rules.skill, $ => {
110
- $.match(a.activity, { some: ($, activity) => {
111
- $.for(group.skills, ($, skill) => {
112
- $.if(East.equal(skill.key, activity).and(() => person.skills.has(activity).not()), $ => {
113
- $(issues.pushLast({ kind: variant("breach", null), tone: variant("warning", null),
114
- title: East.str `${person.name} · not skilled for ${skill.label}`,
115
- detail: East.str `${location} · activity ${skill.code} needs the skill`,
116
- slot: some(slot), assignment: some(id), flag: some("not skilled"), fix: none }));
113
+ $.if(context.rules.trainer.and(() => person.trainee).and(() => c.trainer.not()), $ => {
114
+ $(issues.pushLast({ kind: variant("breach", null), tone: variant("warning", null),
115
+ title: East.str `${person.name} · trainee without trainer`, detail: East.str `${location} · no trainer rostered on this shift`,
116
+ slot: some(slot), assignment: some(id), flag: some("trainee"), fix: some(variant("find", variant("trainers", null))) }));
117
+ });
118
+ $.if(context.rules.skill, $ => {
119
+ $.match(a.activity, { some: ($, activity) => {
120
+ $.for(skills, ($, skill) => {
121
+ $.if(East.equal(skill.key, activity).and(() => person.skills.has(activity).not()), $ => {
122
+ $(issues.pushLast({ kind: variant("breach", null), tone: variant("warning", null),
123
+ title: East.str `${person.name} · not skilled for ${skill.label}`,
124
+ detail: East.str `${location} · activity ${skill.code} needs the skill`,
125
+ slot: some(slot), assignment: some(id), flag: some("not skilled"), fix: none }));
126
+ });
117
127
  });
118
- });
119
- } });
120
- });
121
- $.if(context.rules.agree.and(() => East.notEqual(a.offset, 0.0).or(() => East.notEqual(a.overtime, 0.0)))
122
- .and(() => East.notEqual(a.agreed, some(true))), $ => {
123
- $(issues.pushLast({ kind: variant("agree", null), tone: variant("info", null),
124
- title: East.greater(a.overtime, 0.0).ifElse(() => East.str `${person.name} · +${a.overtime} h OT`, () => East.str `${person.name} · start offset ${a.offset} h`),
125
- detail: East.str `${location} · not yet agreed`, slot: some(slot), assignment: some(id), flag: none,
126
- fix: some(variant("agree", null)) }));
128
+ } });
129
+ });
130
+ }).else($ => {
131
+ $(issues.pushLast({ kind: variant("breach", null), tone: variant("danger", null),
132
+ title: East.str `Unknown person · ${key}`, detail: East.str `${location} · this person is no longer in the staff source`,
133
+ slot: some(slot), assignment: some(id), flag: some("unknown person"), fix: none }));
127
134
  });
128
- }).else($ => {
129
- $(issues.pushLast({ kind: variant("breach", null), tone: variant("danger", null),
130
- title: East.str `Unknown person · ${key}`, detail: East.str `${location} · this person is no longer in the staff source`,
131
- slot: some(slot), assignment: some(id), flag: some("unknown person"), fix: none }));
132
- });
133
- } });
134
- });
135
- $.if(East.greater(c.open, 0n), $ => {
136
- const fix = $.let(none, OptionType(RosterFixType));
137
- $.if(East.greater(context.agencies.size(), 0n), $ => { $.assign(fix, some(variant("request", context.agencies.get(0n).key))); });
138
- $(issues.pushLast({ kind: variant("gap", null), tone: variant("warning", null),
139
- title: East.str `${c.open} open positions · ${location}`,
140
- detail: East.str `${c.open.toFloat().multiply(shift.hours)} h unfilled · ${c.filled} of ${c.positions} positions`,
141
- slot: some(slot), assignment: none, flag: some(East.str `${c.open} open`), fix }));
142
- });
143
- $.if(context.rules.skill.and(() => East.greater(c.filled, 0n)), $ => {
144
- $.for(c.lines, ($, line) => {
145
- $.if(East.greater(line.gap, 0.0), $ => {
146
- $.for(group.skills, ($, skill) => {
147
- $.if(East.equal(skill.key, line.skill), $ => {
148
- $(issues.pushLast({ kind: variant("gap", null), tone: variant("warning", null),
149
- title: East.str `${skill.label} · ${line.gap} h short`,
150
- detail: East.str `${location} · ${line.capacity.unwrap("some")} h capacity of ${line.needed} h`,
151
- slot: some(slot), assignment: none, flag: some("skill gap"), fix: some(variant("find", variant("skill", skill.key))) }));
135
+ } });
136
+ });
137
+ $.if(East.greater(c.open, 0n), $ => {
138
+ const fix = $.let(none, OptionType(RosterFixType));
139
+ $.if(East.greater(context.agencies.size(), 0n), $ => { $.assign(fix, some(variant("request", context.agencies.get(0n).key))); });
140
+ $(issues.pushLast({ kind: variant("gap", null), tone: variant("warning", null),
141
+ title: East.str `${c.open} open ${positionsText(c.open)} · ${location}`,
142
+ detail: East.str `${hoursText(c.open.toFloat().multiply(shift.hours))} h unfilled · ${c.filled} of ${c.positions} ${positionsText(c.positions)}`,
143
+ slot: some(slot), assignment: none, flag: some(East.str `${c.open} open`), fix }));
144
+ });
145
+ $.if(context.rules.skill.and(() => East.greater(c.filled, 0n)), $ => {
146
+ $.for(c.lines, ($, line) => {
147
+ $.if(East.greater(line.gap, 0.0), $ => {
148
+ $.for(skills, ($, skill) => {
149
+ $.if(East.equal(skill.key, line.skill), $ => {
150
+ $(issues.pushLast({ kind: variant("gap", null), tone: variant("warning", null),
151
+ title: East.str `${skill.label} · ${hoursText(line.gap)} h short`,
152
+ detail: East.str `${location} · ${hoursText(line.capacity.unwrap("some"))} h capacity of ${hoursText(line.needed)} h`,
153
+ slot: some(slot), assignment: none, flag: some("skill gap"), fix: some(variant("find", variant("skill", skill.key))) }));
154
+ });
152
155
  });
153
156
  });
154
157
  });
@@ -156,7 +159,7 @@ export const rosterCheck = East.function([RosterWeekType, RosterContextType], Ar
156
159
  });
157
160
  });
158
161
  });
162
+ return issues;
159
163
  });
160
- return issues;
161
- });
164
+ }
162
165
  //# sourceMappingURL=rules.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../src/roster/rules.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACpH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAErI,uHAAuH;AACvH,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;AAEtG;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,oBAAoB,EAAE,UAAU,EAAE,cAAc,EAAE,iBAAiB,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IAChK,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9F,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;QACnF,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QACxH,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;QACrE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACtC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;gBACtH,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBACzD,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;gBAClI,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC/E,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;oBACnE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC3E,CAAC,CAAC,CAAC;gBACH,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;oBAC9D,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACzE,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;AAC/D,CAAC,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,cAAc,EAAE,iBAAiB,CAAC,EAAE,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IAC3H,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;QACvC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;YAC/B,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;gBAC/B,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;gBAClF,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;gBACtC,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAA,GAAG,KAAK,CAAC,KAAK,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;gBACpE,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC1F,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;oBAChI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;wBAC7E,KAAK,EAAE,IAAI,CAAC,GAAG,CAAA,cAAc,QAAQ,EAAE,EAAE,MAAM,EAAE,mCAAmC;wBACpF,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC1H,CAAC,CAAC,CAAC;gBACH,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE;oBAC5B,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;4BAChC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE;gCAC9B,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gCAChD,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAC1D,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gCAC9E,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;oCACvC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;wCAC5E,KAAK,EAAE,IAAI,CAAC,GAAG,CAAA,GAAG,MAAM,CAAC,IAAI,kBAAkB,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAA,GAAG,QAAQ,SAAS,OAAO,CAAC,IAAI,EAAE,kBAAkB;wCACrH,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gCACpF,CAAC,CAAC,CAAC;gCACH,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;gCACnD,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;oCACnG,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;oCACnD,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE;wCACrC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;4CAC9E,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC;gDACtB,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG;gDACnE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM;6CACvG,EAAE,oBAAoB,CAAC,CAAC;4CACzB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE;gDAC1F,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;4CAC1D,CAAC,CAAC,CAAC;wCACP,CAAC,CAAC,CAAC;oCACP,CAAC,CAAC,CAAC;oCACH,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;wCAC/E,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;wCAC1H,+EAA+E;wCAC/E,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE;4CACxE,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;wCAC/D,CAAC,CAAC,CAAC;oCACP,CAAC,CAAC,CAAC;oCACH,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;wCAC5E,KAAK,EAAE,IAAI,CAAC,GAAG,CAAA,GAAG,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,OAAO,SAAS;wCACxD,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAClD,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAA,GAAG,QAAQ,cAAc,OAAO,CAAC,KAAK,CAAC,IAAI,6BAA6B,EACtF,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAA,GAAG,QAAQ,cAAc,OAAO,CAAC,KAAK,CAAC,IAAI,0BAA0B,CAAC;wCACxF,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA,GAAG,IAAI,CAAC,OAAO,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;gCACrG,CAAC,CAAC,CAAC;gCACH,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;oCACjF,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;wCAC7E,KAAK,EAAE,IAAI,CAAC,GAAG,CAAA,GAAG,MAAM,CAAC,IAAI,4BAA4B,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAA,GAAG,QAAQ,sCAAsC;wCAC5H,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gCACjI,CAAC,CAAC,CAAC;gCACH,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;oCAC1B,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE;4CACxC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;gDAC7B,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;oDACnF,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;wDAC7E,KAAK,EAAE,IAAI,CAAC,GAAG,CAAA,GAAG,MAAM,CAAC,IAAI,sBAAsB,KAAK,CAAC,KAAK,EAAE;wDAChE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAA,GAAG,QAAQ,eAAe,KAAK,CAAC,IAAI,kBAAkB;wDACtE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gDACzF,CAAC,CAAC,CAAC;4CACP,CAAC,CAAC,CAAC;wCACP,CAAC,EAAE,CAAC,CAAC;gCACT,CAAC,CAAC,CAAC;gCACH,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;qCACpG,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;oCACrD,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;wCACzE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,MAAM,CACvC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAA,GAAG,MAAM,CAAC,IAAI,OAAO,CAAC,CAAC,QAAQ,OAAO,EACpD,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAA,GAAG,MAAM,CAAC,IAAI,mBAAmB,CAAC,CAAC,MAAM,IAAI,CAAC;wCAChE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAA,GAAG,QAAQ,mBAAmB,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI;wCAClG,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gCAC9C,CAAC,CAAC,CAAC;4BACP,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gCACR,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;oCAC5E,KAAK,EAAE,IAAI,CAAC,GAAG,CAAA,oBAAoB,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAA,GAAG,QAAQ,iDAAiD;oCACtH,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;4BAC5F,CAAC,CAAC,CAAC;wBACP,CAAC,EAAE,CAAC,CAAC;gBACT,CAAC,CAAC,CAAC;gBACH,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;oBAC/B,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;oBACnD,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACjI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;wBAC1E,KAAK,EAAE,IAAI,CAAC,GAAG,CAAA,GAAG,CAAC,CAAC,IAAI,qBAAqB,QAAQ,EAAE;wBACvD,MAAM,EAAE,IAAI,CAAC,GAAG,CAAA,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC,SAAS,YAAY;wBAChH,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC1F,CAAC,CAAC,CAAC;gBACH,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;oBAChE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE;wBACvB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE;4BAClC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;gCAC7B,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE;oCACxC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;wCAC1E,KAAK,EAAE,IAAI,CAAC,GAAG,CAAA,GAAG,KAAK,CAAC,KAAK,MAAM,IAAI,CAAC,GAAG,UAAU;wCACrD,MAAM,EAAE,IAAI,CAAC,GAAG,CAAA,GAAG,QAAQ,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,IAAI,CAAC,MAAM,IAAI;wCAC9F,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gCACjI,CAAC,CAAC,CAAC;4BACP,CAAC,CAAC,CAAC;wBACP,CAAC,CAAC,CAAC;oBACP,CAAC,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../src/roster/rules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
+ */
5
+ /**
6
+ * `Roster.targets(record, config)` (#1368, `Builder Interfaces Spec.md`
7
+ * §5.2): the staffing targets the Roster writes, the app's own record — a row
8
+ * per slot, its fields mapped to the Roster's roles: the slot's day, group and
9
+ * shift, the positions to fill, and the hours each activity needs. The app's
10
+ * forecast fills it; the planner edits it.
11
+ *
12
+ * - **Roles.** Each names a field of the row: `day` a DateTime (a UTC
13
+ * midnight), `group` and `shift` Strings, `positions` an Integer, `hours` a
14
+ * `Dict<String, Float>`. An edit writes only those fields; every other field
15
+ * of the row reads back as it was.
16
+ * - **New rows.** A slot with no row has no target. A target edit on such a
17
+ * slot inserts one, keyed by a key the Roster mints, its unmapped fields
18
+ * their type's default.
19
+ * - **Reads.** Through the Roster's slice, by its `targets` source — an
20
+ * interval index from the day to the day, its `range` the day field — and
21
+ * then `entries` reads one target by its key; or the record whole.
22
+ * - **The inspector.** The app's own form for one target, `(row, update) =>
23
+ * UIComponentType`, in place of the Roster's.
24
+ *
25
+ * The targets are one session of the Roster's history (`session.ts`), as its
26
+ * duties and its periods are: Save sends their changes through the record's
27
+ * patch door as a request of their own.
28
+ *
29
+ * @packageDocumentation
30
+ */
31
+ import { NullType, StringType, type ExprType, type FunctionType, type StructType, type SubtypeExprOrValue } from "@elaraai/east";
32
+ import type { UIComponentType } from "@elaraai/east-ui";
33
+ import type { ScheduleAtField, ScheduleDictFloatField, ScheduleIntegerField, ScheduleRecordHandle, ScheduleStringField } from "../schedule/events.js";
34
+ import { type ScheduleKindPart } from "../schedule/record-window.js";
35
+ import { RosterTargetsKindType } from "./types.js";
36
+ /**
37
+ * The targets' roles over the app's row, by field name, and their reads.
38
+ *
39
+ * @typeParam R - The app's target row type
40
+ */
41
+ export interface RosterTargetsConfig<R extends StructType> {
42
+ /** The DateTime field holding the slot's day, a UTC midnight. */
43
+ day: ScheduleAtField<R>;
44
+ /** The String field naming the slot's group, a key of the Roster's `groups`. */
45
+ group: ScheduleStringField<R>;
46
+ /** The String field naming the slot's shift, a key of the Roster's `shifts`. */
47
+ shift: ScheduleStringField<R>;
48
+ /** The Integer field holding the positions to fill. */
49
+ positions: ScheduleIntegerField<R>;
50
+ /** The `Dict<String, Float>` field holding the hours each activity needs, by its key. */
51
+ hours: ScheduleDictFloatField<R>;
52
+ /**
53
+ * The app's own form for one target, in place of the Roster's — an East function over the row and a writer of the
54
+ * edited row, `(row, update) => UIComponentType`, passed through untouched (never called at build).
55
+ */
56
+ inspector?: SubtypeExprOrValue<FunctionType<[R, FunctionType<[R], NullType>], UIComponentType>>;
57
+ /**
58
+ * A paged read of the record's own entries (`Data.bindPaged(record)`): one target read by its key, beside the
59
+ * Roster's slice's `targets` source, which reads the week's. Required with that source; omitted without it.
60
+ */
61
+ entries?: unknown;
62
+ }
63
+ /** The key the targets' declaration carries what it is under. */
64
+ export declare const ROSTER_TARGETS: unique symbol;
65
+ /** The app's targets, declared: what the Roster's `targets` takes. */
66
+ export interface RosterTargets {
67
+ /** What it is. */
68
+ readonly [ROSTER_TARGETS]: true;
69
+ /** The target's row type. */
70
+ readonly rowType: StructType;
71
+ /**
72
+ * The targets on the wire.
73
+ *
74
+ * @param part - The Roster's slice's `targets` source, bound in its payload, when the slice has one
75
+ * @returns The targets, closed: their session, their reads, and each row's roles read and written
76
+ * @throws {Error} When they are read through the slice without `entries`, or given `entries` without the slice's source
77
+ */
78
+ build(part?: ScheduleKindPart): ExprType<RosterTargetsKindType>;
79
+ }
80
+ /**
81
+ * Declares the app's targets (see the module docs).
82
+ *
83
+ * @typeParam R - The app's target row type
84
+ * @param record - The app's record of targets, `Record.bind(record, [e3.mutation.patch(record)])`: a `Dict` keyed by String
85
+ * @param config - The fields its roles name, the app's own form, and its read by key
86
+ * @returns The targets, for the Roster's `targets`
87
+ * @throws {Error} Naming the option: a record not bound with its patch mutation, not keyed by String, or whose rows are no
88
+ * structs; a role naming a field the row lacks, or a field of another type; two roles naming one field; `entries`
89
+ * that is not a paged read of the record's own entries; and an `inspector` that is no East function `(row, update) =>
90
+ * UIComponentType` over the row
91
+ * @example
92
+ * ```tsx
93
+ * import { DateTimeType, DictType, FloatType, IntegerType, StringType, StructType } from "@elaraai/east";
94
+ * import { Record, Roster } from "@elaraai/e3-ui";
95
+ * import e3 from "@elaraai/e3";
96
+ *
97
+ * const Cover = StructType({ day: DateTimeType, team: StringType, shift: StringType, heads: IntegerType, hours: DictType(StringType, FloatType) });
98
+ * const cover = e3.record("cover", DictType(StringType, Cover), new Map());
99
+ * const coverPatch = e3.mutation.patch(cover);
100
+ *
101
+ * // Inside the Roster's Reactive body: a target per slot, over the app's own rows.
102
+ * const targets = Roster.targets(Record.bind(cover, [coverPatch]), { day: "day", group: "team", shift: "shift", positions: "heads", hours: "hours" });
103
+ * ```
104
+ */
105
+ export declare function rosterTargets<R extends StructType>(record: ScheduleRecordHandle<StringType, R>, config: RosterTargetsConfig<R>): RosterTargets;
106
+ /**
107
+ * Whether a value is the app's targets, declared (`Roster.targets`): what the
108
+ * Roster's `targets` checks before it takes one.
109
+ *
110
+ * @param value - What the app passed
111
+ * @returns Whether it is the targets, declared
112
+ * @internal
113
+ */
114
+ export declare function isRosterTargets(value: unknown): value is RosterTargets;
115
+ //# sourceMappingURL=targets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"targets.d.ts","sourceRoot":"","sources":["../../../src/roster/targets.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EACmE,QAAQ,EAAc,UAAU,EACtE,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,KAAK,kBAAkB,EAC7G,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACtJ,OAAO,EAAwB,KAAK,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAI3F,OAAO,EAAgD,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEjG;;;;GAIG;AACH,MAAM,WAAW,mBAAmB,CAAC,CAAC,SAAS,UAAU;IACrD,iEAAiE;IACjE,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IACxB,gFAAgF;IAChF,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAC9B,gFAAgF;IAChF,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAC9B,uDAAuD;IACvD,SAAS,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC;IACnC,yFAAyF;IACzF,KAAK,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC;IACjC;;;OAGG;IACH,SAAS,CAAC,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC;IAChG;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,iEAAiE;AACjE,eAAO,MAAM,cAAc,EAAE,OAAO,MAAiC,CAAC;AAEtE,sEAAsE;AACtE,MAAM,WAAW,aAAa;IAC1B,kBAAkB;IAClB,QAAQ,CAAC,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC;IAChC,6BAA6B;IAC7B,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B;;;;;;OAMG;IACH,KAAK,CAAC,IAAI,CAAC,EAAE,gBAAgB,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CAAC;CACnE;AAOD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,UAAU,EAAE,MAAM,EAAE,oBAAoB,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,aAAa,CAqI9I;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAEtE"}