dabke 0.82.0 → 0.84.0

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 (341) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/README.md +22 -24
  3. package/dist/client.d.ts +39 -3
  4. package/dist/client.d.ts.map +1 -1
  5. package/dist/client.js.map +1 -1
  6. package/dist/client.schemas.d.ts +118 -18
  7. package/dist/client.schemas.d.ts.map +1 -1
  8. package/dist/client.schemas.js +110 -6
  9. package/dist/client.schemas.js.map +1 -1
  10. package/dist/client.types.d.ts +63 -7
  11. package/dist/client.types.d.ts.map +1 -1
  12. package/dist/client.types.js.map +1 -1
  13. package/dist/cpsat/cost.d.ts +5 -2
  14. package/dist/cpsat/cost.d.ts.map +1 -1
  15. package/dist/cpsat/cost.js +13 -6
  16. package/dist/cpsat/cost.js.map +1 -1
  17. package/dist/cpsat/model-builder.d.ts +42 -61
  18. package/dist/cpsat/model-builder.d.ts.map +1 -1
  19. package/dist/cpsat/model-builder.js +451 -56
  20. package/dist/cpsat/model-builder.js.map +1 -1
  21. package/dist/cpsat/response.d.ts +19 -7
  22. package/dist/cpsat/response.d.ts.map +1 -1
  23. package/dist/cpsat/response.js +48 -9
  24. package/dist/cpsat/response.js.map +1 -1
  25. package/dist/cpsat/rule-descriptor.d.ts +250 -0
  26. package/dist/cpsat/rule-descriptor.d.ts.map +1 -0
  27. package/dist/cpsat/rule-descriptor.js +51 -0
  28. package/dist/cpsat/rule-descriptor.js.map +1 -0
  29. package/dist/cpsat/rules/artifacts.d.ts +9 -0
  30. package/dist/cpsat/rules/artifacts.d.ts.map +1 -0
  31. package/dist/cpsat/rules/artifacts.js +31 -0
  32. package/dist/cpsat/rules/artifacts.js.map +1 -0
  33. package/dist/cpsat/rules/assign-together.d.ts +18 -20
  34. package/dist/cpsat/rules/assign-together.d.ts.map +1 -1
  35. package/dist/cpsat/rules/assign-together.js +90 -54
  36. package/dist/cpsat/rules/assign-together.js.map +1 -1
  37. package/dist/cpsat/rules/assigned-day.d.ts +12 -0
  38. package/dist/cpsat/rules/assigned-day.d.ts.map +1 -0
  39. package/dist/cpsat/rules/assigned-day.js +43 -0
  40. package/dist/cpsat/rules/assigned-day.js.map +1 -0
  41. package/dist/cpsat/rules/assignment-priority.d.ts +15 -29
  42. package/dist/cpsat/rules/assignment-priority.d.ts.map +1 -1
  43. package/dist/cpsat/rules/assignment-priority.js +47 -50
  44. package/dist/cpsat/rules/assignment-priority.js.map +1 -1
  45. package/dist/cpsat/rules/assignment-terms.d.ts +6 -0
  46. package/dist/cpsat/rules/assignment-terms.d.ts.map +1 -0
  47. package/dist/cpsat/rules/assignment-terms.js +19 -0
  48. package/dist/cpsat/rules/assignment-terms.js.map +1 -0
  49. package/dist/cpsat/rules/concurrent-intervals.d.ts +19 -0
  50. package/dist/cpsat/rules/concurrent-intervals.d.ts.map +1 -0
  51. package/dist/cpsat/rules/concurrent-intervals.js +57 -0
  52. package/dist/cpsat/rules/concurrent-intervals.js.map +1 -0
  53. package/dist/cpsat/rules/cost-utils.d.ts +1 -3
  54. package/dist/cpsat/rules/cost-utils.d.ts.map +1 -1
  55. package/dist/cpsat/rules/cost-utils.js +0 -7
  56. package/dist/cpsat/rules/cost-utils.js.map +1 -1
  57. package/dist/cpsat/rules/day-cost-multiplier.d.ts +10 -10
  58. package/dist/cpsat/rules/day-cost-multiplier.d.ts.map +1 -1
  59. package/dist/cpsat/rules/day-cost-multiplier.js +88 -77
  60. package/dist/cpsat/rules/day-cost-multiplier.js.map +1 -1
  61. package/dist/cpsat/rules/day-cost-surcharge.d.ts +10 -10
  62. package/dist/cpsat/rules/day-cost-surcharge.d.ts.map +1 -1
  63. package/dist/cpsat/rules/day-cost-surcharge.js +76 -65
  64. package/dist/cpsat/rules/day-cost-surcharge.js.map +1 -1
  65. package/dist/cpsat/rules/index.d.ts +30 -21
  66. package/dist/cpsat/rules/index.d.ts.map +1 -1
  67. package/dist/cpsat/rules/index.js +30 -21
  68. package/dist/cpsat/rules/index.js.map +1 -1
  69. package/dist/cpsat/rules/location-preference.d.ts +14 -21
  70. package/dist/cpsat/rules/location-preference.d.ts.map +1 -1
  71. package/dist/cpsat/rules/location-preference.js +45 -45
  72. package/dist/cpsat/rules/location-preference.js.map +1 -1
  73. package/dist/cpsat/rules/max-concurrent-assignments.d.ts +46 -0
  74. package/dist/cpsat/rules/max-concurrent-assignments.d.ts.map +1 -0
  75. package/dist/cpsat/rules/max-concurrent-assignments.js +121 -0
  76. package/dist/cpsat/rules/max-concurrent-assignments.js.map +1 -0
  77. package/dist/cpsat/rules/max-consecutive-days.d.ts +18 -17
  78. package/dist/cpsat/rules/max-consecutive-days.d.ts.map +1 -1
  79. package/dist/cpsat/rules/max-consecutive-days.js +67 -66
  80. package/dist/cpsat/rules/max-consecutive-days.js.map +1 -1
  81. package/dist/cpsat/rules/max-days-of-week-per-period.d.ts +45 -0
  82. package/dist/cpsat/rules/max-days-of-week-per-period.d.ts.map +1 -0
  83. package/dist/cpsat/rules/max-days-of-week-per-period.js +95 -0
  84. package/dist/cpsat/rules/max-days-of-week-per-period.js.map +1 -0
  85. package/dist/cpsat/rules/max-days-week.d.ts +30 -0
  86. package/dist/cpsat/rules/max-days-week.d.ts.map +1 -0
  87. package/dist/cpsat/rules/max-days-week.js +83 -0
  88. package/dist/cpsat/rules/max-days-week.js.map +1 -0
  89. package/dist/cpsat/rules/max-hours-day.d.ts +14 -31
  90. package/dist/cpsat/rules/max-hours-day.d.ts.map +1 -1
  91. package/dist/cpsat/rules/max-hours-day.js +56 -72
  92. package/dist/cpsat/rules/max-hours-day.js.map +1 -1
  93. package/dist/cpsat/rules/max-hours-week.d.ts +15 -31
  94. package/dist/cpsat/rules/max-hours-week.d.ts.map +1 -1
  95. package/dist/cpsat/rules/max-hours-week.js +60 -75
  96. package/dist/cpsat/rules/max-hours-week.js.map +1 -1
  97. package/dist/cpsat/rules/max-shifts-day.d.ts +17 -33
  98. package/dist/cpsat/rules/max-shifts-day.d.ts.map +1 -1
  99. package/dist/cpsat/rules/max-shifts-day.js +57 -73
  100. package/dist/cpsat/rules/max-shifts-day.js.map +1 -1
  101. package/dist/cpsat/rules/min-consecutive-days.d.ts +18 -18
  102. package/dist/cpsat/rules/min-consecutive-days.d.ts.map +1 -1
  103. package/dist/cpsat/rules/min-consecutive-days.js +123 -94
  104. package/dist/cpsat/rules/min-consecutive-days.js.map +1 -1
  105. package/dist/cpsat/rules/min-days-of-week-per-period.d.ts +35 -0
  106. package/dist/cpsat/rules/min-days-of-week-per-period.d.ts.map +1 -0
  107. package/dist/cpsat/rules/min-days-of-week-per-period.js +108 -0
  108. package/dist/cpsat/rules/min-days-of-week-per-period.js.map +1 -0
  109. package/dist/cpsat/rules/min-days-week.d.ts +21 -0
  110. package/dist/cpsat/rules/min-days-week.d.ts.map +1 -0
  111. package/dist/cpsat/rules/min-days-week.js +95 -0
  112. package/dist/cpsat/rules/min-days-week.js.map +1 -0
  113. package/dist/cpsat/rules/min-hours-day.d.ts +14 -17
  114. package/dist/cpsat/rules/min-hours-day.d.ts.map +1 -1
  115. package/dist/cpsat/rules/min-hours-day.js +72 -54
  116. package/dist/cpsat/rules/min-hours-day.js.map +1 -1
  117. package/dist/cpsat/rules/min-hours-week.d.ts +15 -18
  118. package/dist/cpsat/rules/min-hours-week.d.ts.map +1 -1
  119. package/dist/cpsat/rules/min-hours-week.js +75 -57
  120. package/dist/cpsat/rules/min-hours-week.js.map +1 -1
  121. package/dist/cpsat/rules/min-rest-between-shifts.d.ts +14 -17
  122. package/dist/cpsat/rules/min-rest-between-shifts.d.ts.map +1 -1
  123. package/dist/cpsat/rules/min-rest-between-shifts.js +148 -138
  124. package/dist/cpsat/rules/min-rest-between-shifts.js.map +1 -1
  125. package/dist/cpsat/rules/minimize-cost.d.ts +2 -18
  126. package/dist/cpsat/rules/minimize-cost.d.ts.map +1 -1
  127. package/dist/cpsat/rules/minimize-cost.js +151 -163
  128. package/dist/cpsat/rules/minimize-cost.js.map +1 -1
  129. package/dist/cpsat/rules/must-assign.d.ts +12 -0
  130. package/dist/cpsat/rules/must-assign.d.ts.map +1 -0
  131. package/dist/cpsat/rules/must-assign.js +54 -0
  132. package/dist/cpsat/rules/must-assign.js.map +1 -0
  133. package/dist/cpsat/rules/overtime-daily-multiplier.d.ts +6 -10
  134. package/dist/cpsat/rules/overtime-daily-multiplier.d.ts.map +1 -1
  135. package/dist/cpsat/rules/overtime-daily-multiplier.js +118 -112
  136. package/dist/cpsat/rules/overtime-daily-multiplier.js.map +1 -1
  137. package/dist/cpsat/rules/overtime-daily-surcharge.d.ts +6 -11
  138. package/dist/cpsat/rules/overtime-daily-surcharge.d.ts.map +1 -1
  139. package/dist/cpsat/rules/overtime-daily-surcharge.js +104 -99
  140. package/dist/cpsat/rules/overtime-daily-surcharge.js.map +1 -1
  141. package/dist/cpsat/rules/overtime-tiered-multiplier.d.ts +9 -21
  142. package/dist/cpsat/rules/overtime-tiered-multiplier.d.ts.map +1 -1
  143. package/dist/cpsat/rules/overtime-tiered-multiplier.js +181 -199
  144. package/dist/cpsat/rules/overtime-tiered-multiplier.js.map +1 -1
  145. package/dist/cpsat/rules/overtime-weekly-multiplier.d.ts +13 -12
  146. package/dist/cpsat/rules/overtime-weekly-multiplier.d.ts.map +1 -1
  147. package/dist/cpsat/rules/overtime-weekly-multiplier.js +143 -143
  148. package/dist/cpsat/rules/overtime-weekly-multiplier.js.map +1 -1
  149. package/dist/cpsat/rules/overtime-weekly-surcharge.d.ts +7 -11
  150. package/dist/cpsat/rules/overtime-weekly-surcharge.d.ts.map +1 -1
  151. package/dist/cpsat/rules/overtime-weekly-surcharge.js +124 -119
  152. package/dist/cpsat/rules/overtime-weekly-surcharge.js.map +1 -1
  153. package/dist/cpsat/rules/pattern-eligibility.d.ts +6 -0
  154. package/dist/cpsat/rules/pattern-eligibility.d.ts.map +1 -0
  155. package/dist/cpsat/rules/pattern-eligibility.js +16 -0
  156. package/dist/cpsat/rules/pattern-eligibility.js.map +1 -0
  157. package/dist/cpsat/rules/pattern-time.d.ts +5 -0
  158. package/dist/cpsat/rules/pattern-time.d.ts.map +1 -0
  159. package/dist/cpsat/rules/pattern-time.js +20 -0
  160. package/dist/cpsat/rules/pattern-time.js.map +1 -0
  161. package/dist/cpsat/rules/registry.d.ts +217 -27
  162. package/dist/cpsat/rules/registry.d.ts.map +1 -1
  163. package/dist/cpsat/rules/registry.js +98 -31
  164. package/dist/cpsat/rules/registry.js.map +1 -1
  165. package/dist/cpsat/rules/resolver.d.ts +9 -7
  166. package/dist/cpsat/rules/resolver.d.ts.map +1 -1
  167. package/dist/cpsat/rules/resolver.js +19 -18
  168. package/dist/cpsat/rules/resolver.js.map +1 -1
  169. package/dist/cpsat/rules/role-preference.d.ts +24 -0
  170. package/dist/cpsat/rules/role-preference.d.ts.map +1 -0
  171. package/dist/cpsat/rules/role-preference.js +72 -0
  172. package/dist/cpsat/rules/role-preference.js.map +1 -0
  173. package/dist/cpsat/rules/rules.types.d.ts +93 -17
  174. package/dist/cpsat/rules/rules.types.d.ts.map +1 -1
  175. package/dist/cpsat/rules/scope.types.d.ts +25 -12
  176. package/dist/cpsat/rules/scope.types.d.ts.map +1 -1
  177. package/dist/cpsat/rules/scope.types.js +14 -19
  178. package/dist/cpsat/rules/scope.types.js.map +1 -1
  179. package/dist/cpsat/rules/target-days-week.d.ts +31 -0
  180. package/dist/cpsat/rules/target-days-week.d.ts.map +1 -0
  181. package/dist/cpsat/rules/target-days-week.js +80 -0
  182. package/dist/cpsat/rules/target-days-week.js.map +1 -0
  183. package/dist/cpsat/rules/target-peak-concurrent-assignments.d.ts +33 -0
  184. package/dist/cpsat/rules/target-peak-concurrent-assignments.d.ts.map +1 -0
  185. package/dist/cpsat/rules/target-peak-concurrent-assignments.js +146 -0
  186. package/dist/cpsat/rules/target-peak-concurrent-assignments.js.map +1 -0
  187. package/dist/cpsat/rules/time-cost-surcharge.d.ts +15 -14
  188. package/dist/cpsat/rules/time-cost-surcharge.d.ts.map +1 -1
  189. package/dist/cpsat/rules/time-cost-surcharge.js +82 -96
  190. package/dist/cpsat/rules/time-cost-surcharge.js.map +1 -1
  191. package/dist/cpsat/rules/time-off.d.ts +21 -57
  192. package/dist/cpsat/rules/time-off.d.ts.map +1 -1
  193. package/dist/cpsat/rules/time-off.js +114 -127
  194. package/dist/cpsat/rules/time-off.js.map +1 -1
  195. package/dist/cpsat/rules/variables.d.ts +4 -0
  196. package/dist/cpsat/rules/variables.d.ts.map +1 -0
  197. package/dist/cpsat/rules/variables.js +10 -0
  198. package/dist/cpsat/rules/variables.js.map +1 -0
  199. package/dist/cpsat/rules.d.ts +20 -3
  200. package/dist/cpsat/rules.d.ts.map +1 -1
  201. package/dist/cpsat/rules.js +19 -2
  202. package/dist/cpsat/rules.js.map +1 -1
  203. package/dist/cpsat/semantic-time.d.ts +7 -6
  204. package/dist/cpsat/semantic-time.d.ts.map +1 -1
  205. package/dist/cpsat/semantic-time.js +15 -28
  206. package/dist/cpsat/semantic-time.js.map +1 -1
  207. package/dist/cpsat/types.d.ts +47 -4
  208. package/dist/cpsat/types.d.ts.map +1 -1
  209. package/dist/cpsat/types.js +24 -1
  210. package/dist/cpsat/types.js.map +1 -1
  211. package/dist/cpsat/utils.d.ts +23 -6
  212. package/dist/cpsat/utils.d.ts.map +1 -1
  213. package/dist/cpsat/utils.js +76 -15
  214. package/dist/cpsat/utils.js.map +1 -1
  215. package/dist/cpsat/validation-reporter.d.ts +6 -2
  216. package/dist/cpsat/validation-reporter.d.ts.map +1 -1
  217. package/dist/cpsat/validation-reporter.js +122 -10
  218. package/dist/cpsat/validation-reporter.js.map +1 -1
  219. package/dist/cpsat/validation.types.d.ts +21 -10
  220. package/dist/cpsat/validation.types.d.ts.map +1 -1
  221. package/dist/datetime.utils.d.ts +7 -13
  222. package/dist/datetime.utils.d.ts.map +1 -1
  223. package/dist/datetime.utils.js +29 -36
  224. package/dist/datetime.utils.js.map +1 -1
  225. package/dist/index.d.ts +15 -9
  226. package/dist/index.d.ts.map +1 -1
  227. package/dist/index.js +11 -4
  228. package/dist/index.js.map +1 -1
  229. package/dist/schedule/cost.d.ts +192 -0
  230. package/dist/schedule/cost.d.ts.map +1 -0
  231. package/dist/schedule/cost.js +151 -0
  232. package/dist/schedule/cost.js.map +1 -0
  233. package/dist/schedule/coverage.d.ts +114 -0
  234. package/dist/schedule/coverage.d.ts.map +1 -0
  235. package/dist/schedule/coverage.js +56 -0
  236. package/dist/schedule/coverage.js.map +1 -0
  237. package/dist/schedule/definition.d.ts +346 -0
  238. package/dist/schedule/definition.d.ts.map +1 -0
  239. package/dist/schedule/definition.js +668 -0
  240. package/dist/schedule/definition.js.map +1 -0
  241. package/dist/schedule/index.d.ts +67 -0
  242. package/dist/schedule/index.d.ts.map +1 -0
  243. package/dist/schedule/index.js +69 -0
  244. package/dist/schedule/index.js.map +1 -0
  245. package/dist/schedule/rules.d.ts +678 -0
  246. package/dist/schedule/rules.d.ts.map +1 -0
  247. package/dist/schedule/rules.js +554 -0
  248. package/dist/schedule/rules.js.map +1 -0
  249. package/dist/schedule/shift-patterns.d.ts +17 -0
  250. package/dist/schedule/shift-patterns.d.ts.map +1 -0
  251. package/dist/schedule/shift-patterns.js +24 -0
  252. package/dist/schedule/shift-patterns.js.map +1 -0
  253. package/dist/schedule/time-periods.d.ts +79 -0
  254. package/dist/schedule/time-periods.d.ts.map +1 -0
  255. package/dist/schedule/time-periods.js +101 -0
  256. package/dist/schedule/time-periods.js.map +1 -0
  257. package/dist/types.d.ts +67 -3
  258. package/dist/types.d.ts.map +1 -1
  259. package/dist/types.js +64 -0
  260. package/dist/types.js.map +1 -1
  261. package/package.json +8 -14
  262. package/solver/src/solver/models.py +41 -4
  263. package/solver/src/solver/solver.py +546 -157
  264. package/solver/tests/test_solver.py +363 -7
  265. package/src/client.schemas.ts +127 -10
  266. package/src/client.ts +3 -0
  267. package/src/client.types.ts +73 -7
  268. package/src/cpsat/cost.ts +17 -7
  269. package/src/cpsat/model-builder.ts +614 -129
  270. package/src/cpsat/response.ts +57 -13
  271. package/src/cpsat/rule-descriptor.ts +311 -0
  272. package/src/cpsat/rules/artifacts.ts +56 -0
  273. package/src/cpsat/rules/assign-together.ts +104 -69
  274. package/src/cpsat/rules/assigned-day.ts +70 -0
  275. package/src/cpsat/rules/assignment-priority.ts +54 -58
  276. package/src/cpsat/rules/assignment-terms.ts +43 -0
  277. package/src/cpsat/rules/concurrent-intervals.ts +93 -0
  278. package/src/cpsat/rules/cost-utils.ts +1 -9
  279. package/src/cpsat/rules/day-cost-multiplier.ts +101 -81
  280. package/src/cpsat/rules/day-cost-surcharge.ts +91 -70
  281. package/src/cpsat/rules/index.ts +30 -21
  282. package/src/cpsat/rules/location-preference.ts +47 -52
  283. package/src/cpsat/rules/max-concurrent-assignments.ts +170 -0
  284. package/src/cpsat/rules/max-consecutive-days.ts +74 -91
  285. package/src/cpsat/rules/max-days-of-week-per-period.ts +127 -0
  286. package/src/cpsat/rules/max-days-week.ts +117 -0
  287. package/src/cpsat/rules/max-hours-day.ts +64 -84
  288. package/src/cpsat/rules/max-hours-week.ts +74 -90
  289. package/src/cpsat/rules/max-shifts-day.ts +65 -85
  290. package/src/cpsat/rules/min-consecutive-days.ts +161 -127
  291. package/src/cpsat/rules/min-days-of-week-per-period.ts +144 -0
  292. package/src/cpsat/rules/min-days-week.ts +122 -0
  293. package/src/cpsat/rules/min-hours-day.ts +79 -58
  294. package/src/cpsat/rules/min-hours-week.ts +87 -62
  295. package/src/cpsat/rules/min-rest-between-shifts.ts +191 -178
  296. package/src/cpsat/rules/minimize-cost.ts +175 -188
  297. package/src/cpsat/rules/must-assign.ts +71 -0
  298. package/src/cpsat/rules/overtime-daily-multiplier.ts +158 -140
  299. package/src/cpsat/rules/overtime-daily-surcharge.ts +141 -126
  300. package/src/cpsat/rules/overtime-tiered-multiplier.ts +234 -253
  301. package/src/cpsat/rules/overtime-weekly-multiplier.ts +183 -175
  302. package/src/cpsat/rules/overtime-weekly-surcharge.ts +161 -150
  303. package/src/cpsat/rules/pattern-eligibility.ts +26 -0
  304. package/src/cpsat/rules/pattern-time.ts +30 -0
  305. package/src/cpsat/rules/registry.ts +140 -56
  306. package/src/cpsat/rules/resolver.ts +58 -30
  307. package/src/cpsat/rules/role-preference.ts +92 -0
  308. package/src/cpsat/rules/rules.types.ts +92 -17
  309. package/src/cpsat/rules/scope.types.ts +32 -27
  310. package/src/cpsat/rules/target-days-week.ts +105 -0
  311. package/src/cpsat/rules/target-peak-concurrent-assignments.ts +212 -0
  312. package/src/cpsat/rules/time-cost-surcharge.ts +116 -122
  313. package/src/cpsat/rules/time-off.ts +154 -163
  314. package/src/cpsat/rules/variables.ts +11 -0
  315. package/src/cpsat/rules.ts +43 -17
  316. package/src/cpsat/semantic-time.ts +29 -43
  317. package/src/cpsat/types.ts +53 -4
  318. package/src/cpsat/utils.ts +92 -20
  319. package/src/cpsat/validation-reporter.ts +170 -19
  320. package/src/cpsat/validation.types.ts +22 -11
  321. package/src/datetime.utils.ts +45 -44
  322. package/src/index.ts +72 -15
  323. package/src/schedule/cost.ts +221 -0
  324. package/src/schedule/coverage.ts +164 -0
  325. package/src/schedule/definition.ts +1447 -0
  326. package/src/schedule/index.ts +132 -0
  327. package/src/schedule/rules.ts +1028 -0
  328. package/src/schedule/shift-patterns.ts +29 -0
  329. package/src/schedule/time-periods.ts +120 -0
  330. package/src/types.ts +114 -2
  331. package/dist/llms.d.ts +0 -2
  332. package/dist/llms.d.ts.map +0 -1
  333. package/dist/llms.js +0 -3
  334. package/dist/llms.js.map +0 -1
  335. package/dist/schedule.d.ts +0 -917
  336. package/dist/schedule.d.ts.map +0 -1
  337. package/dist/schedule.js +0 -1323
  338. package/dist/schedule.js.map +0 -1
  339. package/llms.txt +0 -758
  340. package/src/llms.ts +0 -3
  341. package/src/schedule.ts +0 -1960
@@ -1 +1 @@
1
- {"version":3,"file":"semantic-time.js","sourceRoot":"","sources":["../../src/cpsat/semantic-time.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"semantic-time.js","sourceRoot":"","sources":["../../src/cpsat/semantic-time.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { TimeOfDay, DayOfWeek } from "../types.js";
1
+ import type { DateString, TimeOfDay, DayOfWeek } from "../types.js";
2
2
  import type { SolverRequest, SolverTerm } from "../client.types.js";
3
3
  import type { ValidationGroup } from "./validation.types.js";
4
4
  /**
@@ -13,11 +13,12 @@ export interface HourlyPay {
13
13
  /**
14
14
  * Annual salary with contracted weekly hours.
15
15
  *
16
+ * @remarks
16
17
  * The solver treats salaried members as having a fixed weekly cost
17
18
  * (`annual / 52`) that is incurred once they work any shift in a week.
18
19
  * Additional shifts within the same week have zero marginal cost.
19
20
  *
20
- * Note: overtime multiplier rules apply only to hourly members.
21
+ * Overtime multiplier rules apply only to hourly members.
21
22
  * Overtime surcharge rules apply to all members regardless of pay type.
22
23
  *
23
24
  * @category Supporting Types
@@ -31,12 +32,34 @@ export interface SalariedPay {
31
32
  /**
32
33
  * How strictly the solver enforces a rule.
33
34
  *
35
+ * @remarks
36
+ * Priority is part of the schedule design, not a cosmetic option. Use it to
37
+ * preserve the distinction between hard requirements and softer preferences
38
+ * from the requirements. In practice, words like "must", "at least", "needs", and
39
+ * "cannot" usually map to `"MANDATORY"`, while words like "ideally",
40
+ * "prefer", "mainly", and "where possible" usually map to a soft priority.
41
+ * The same coverage shape or rule scope can be modeled with different
42
+ * priorities when the business language is subtler than a pure hard limit.
43
+ *
34
44
  * - `"LOW"`, `"MEDIUM"`, `"HIGH"`: soft constraints with increasing penalty for violations
35
45
  * - `"MANDATORY"`: hard constraint; the solver will not produce a solution that violates it
36
46
  *
37
47
  * @category Supporting Types
38
48
  */
39
- export type Priority = "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
49
+ export declare const PRIORITY_VALUES: readonly ["LOW", "MEDIUM", "HIGH", "MANDATORY"];
50
+ /**
51
+ * The soft-only priority values.
52
+ *
53
+ * @category Supporting Types
54
+ */
55
+ export declare const SOFT_PRIORITY_VALUES: readonly ["LOW", "MEDIUM", "HIGH"];
56
+ export type Priority = (typeof PRIORITY_VALUES)[number];
57
+ /**
58
+ * Soft-only priority values.
59
+ *
60
+ * @category Supporting Types
61
+ */
62
+ export type SoftPriority = (typeof SOFT_PRIORITY_VALUES)[number];
40
63
  /**
41
64
  * A team member available for scheduling.
42
65
  *
@@ -120,7 +143,7 @@ export interface ShiftPattern {
120
143
  endTime: TimeOfDay;
121
144
  }
122
145
  export interface TimeInterval {
123
- day: string;
146
+ day: DateString;
124
147
  startTime: TimeOfDay;
125
148
  endTime: TimeOfDay;
126
149
  }
@@ -199,12 +222,32 @@ interface SkillBasedCoverageRequirement extends CoverageRequirementBase {
199
222
  * { day: "2024-01-01", startTime: { hours: 9 }, endTime: { hours: 17 }, roleIds: ["waiter"], skillIds: ["senior"], targetCount: 1, priority: "HIGH" }
200
223
  */
201
224
  export type CoverageRequirement = RoleBasedCoverageRequirement | SkillBasedCoverageRequirement;
225
+ /**
226
+ * Compile-time solve profile used by model builders.
227
+ *
228
+ * @category Model Builder
229
+ */
230
+ export type ModelSolveStrategy = {
231
+ /** Build the normal optimized solver request. */
232
+ readonly type: "optimize";
233
+ } | {
234
+ /** Build a hard-feasibility request that ignores objectives and soft constraints. */
235
+ readonly type: "feasibility-only";
236
+ };
202
237
  /** Optional settings for the model builder. */
203
238
  export interface ModelBuilderOptions {
204
239
  /** Which day starts the week for weekly rules. Defaults to "monday". */
205
240
  weekStartsOn?: DayOfWeek;
206
241
  /** Solver-level options (time limit, solution limit). */
207
242
  solverOptions?: SolverRequest["options"];
243
+ /** Compile-time solve profile. Defaults to optimized solving. */
244
+ strategy?: ModelSolveStrategy;
245
+ /**
246
+ * Internal objective stage order for staged solver requests.
247
+ *
248
+ * @internal
249
+ */
250
+ objectiveStageOrder?: readonly string[];
208
251
  /**
209
252
  * Bucket size used when translating coverage requirements into time-indexed constraints.
210
253
  * Smaller buckets are more accurate but increase the number of constraints.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cpsat/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,WAAW;IAC1B,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAE/D;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kEAAkE;IAClE,EAAE,EAAE,MAAM,CAAC;IACX,8DAA8D;IAC9D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,mDAAmD;IACnD,GAAG,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;;;;;;;;OASG;IACH,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IAEhC;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;IAEjD;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,2EAA2E;IAC3E,SAAS,EAAE,SAAS,CAAC;IAErB,2EAA2E;IAC3E,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,SAAS,CAAC;CACpB;AAED;;GAEG;AACH,UAAU,uBAAwB,SAAQ,YAAY;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,eAAe,CAAC;CACzB;AAED;;;;GAIG;AACH,UAAU,4BAA6B,SAAQ,uBAAuB;IACpE;;;;OAIG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IAC/B;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;CAClC;AAED;;;GAGG;AACH,UAAU,6BAA8B,SAAQ,uBAAuB;IACrE;;OAEG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB;;;OAGG;IACH,QAAQ,EAAE,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;CACjC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,MAAM,mBAAmB,GAAG,4BAA4B,GAAG,6BAA6B,CAAC;AAE/F,+CAA+C;AAC/C,MAAM,WAAW,mBAAmB;IAClC,wEAAwE;IACxE,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,yDAAyD;IACzD,aAAa,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IACzC;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;;;;;;OASG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,MAAM,IAAI,GAAG,UAAU,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cpsat/types.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,25 @@
1
- export {};
1
+ /**
2
+ * How strictly the solver enforces a rule.
3
+ *
4
+ * @remarks
5
+ * Priority is part of the schedule design, not a cosmetic option. Use it to
6
+ * preserve the distinction between hard requirements and softer preferences
7
+ * from the requirements. In practice, words like "must", "at least", "needs", and
8
+ * "cannot" usually map to `"MANDATORY"`, while words like "ideally",
9
+ * "prefer", "mainly", and "where possible" usually map to a soft priority.
10
+ * The same coverage shape or rule scope can be modeled with different
11
+ * priorities when the business language is subtler than a pure hard limit.
12
+ *
13
+ * - `"LOW"`, `"MEDIUM"`, `"HIGH"`: soft constraints with increasing penalty for violations
14
+ * - `"MANDATORY"`: hard constraint; the solver will not produce a solution that violates it
15
+ *
16
+ * @category Supporting Types
17
+ */
18
+ export const PRIORITY_VALUES = ["LOW", "MEDIUM", "HIGH", "MANDATORY"];
19
+ /**
20
+ * The soft-only priority values.
21
+ *
22
+ * @category Supporting Types
23
+ */
24
+ export const SOFT_PRIORITY_VALUES = ["LOW", "MEDIUM", "HIGH"];
2
25
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cpsat/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cpsat/types.ts"],"names":[],"mappings":"AAkCA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAU,CAAC;AAE/E;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAU,CAAC"}
@@ -1,5 +1,5 @@
1
- import type { DayOfWeek, TimeOfDay } from "../types.js";
2
- import type { Priority } from "./types.js";
1
+ import { type DayOfWeek, type SchedulingDay, type TimeOfDay } from "../types.js";
2
+ import type { Priority, SoftPriority } from "./types.js";
3
3
  export declare const MINUTES_PER_DAY: number;
4
4
  /**
5
5
  * Standard objective weights for the scheduling solver.
@@ -39,13 +39,16 @@ export declare const OBJECTIVE_WEIGHTS: {
39
39
  readonly ASSIGNMENT_BASE: 1;
40
40
  };
41
41
  /**
42
- * Parse a day string (YYYY-MM-DD) to a UTC Date.
43
- * Used internally for day-of-week calculations and date comparisons.
42
+ * Maps {@link Priority} levels to penalty weights for preference rules.
43
+ *
44
+ * Used by `assignment-priority`, `location-preference`, and `role-preference`
45
+ * to scale the strength of their soft constraints.
44
46
  */
45
- export declare function parseDayString(day: string): Date;
47
+ export declare const PREFERENCE_WEIGHTS: Record<Priority, number>;
46
48
  export declare function timeOfDayToMinutes(time: TimeOfDay): number;
47
49
  export declare function normalizeEndMinutes(startMinutes: number, endMinutes: number): number;
48
50
  export declare function priorityToPenalty(priority: Priority): number;
51
+ export declare function targetPeakPriorityToPenalty(priority: SoftPriority): number;
49
52
  /**
50
53
  * Computes the total duration of the union of time ranges.
51
54
  *
@@ -57,5 +60,19 @@ export declare function unionMinutes(ranges: ReadonlyArray<{
57
60
  start: number;
58
61
  end: number;
59
62
  }>): number;
60
- export declare function splitIntoWeeks(days: string[], weekStartsOn: DayOfWeek): string[][];
63
+ /**
64
+ * Splits scheduling days into non-overlapping chunks of N calendar months.
65
+ *
66
+ * Days are grouped by their {@link SchedulingDay.yearMonth}, then consecutive
67
+ * months are merged into chunks of the requested size.
68
+ */
69
+ export declare function splitIntoMonths(days: SchedulingDay[], monthsPerChunk: number): SchedulingDay[][];
70
+ /**
71
+ * Groups days into chunks of N weeks, aligned to weekStartsOn.
72
+ *
73
+ * Uses {@link splitIntoWeeks} internally, then merges consecutive weeks
74
+ * into larger chunks.
75
+ */
76
+ export declare function groupWeekChunks(days: SchedulingDay[], weeksPerChunk: number, weekStartsOn: DayOfWeek): SchedulingDay[][];
77
+ export declare function splitIntoWeeks(days: SchedulingDay[], weekStartsOn: DayOfWeek): SchedulingDay[][];
61
78
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/cpsat/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,eAAO,MAAM,eAAe,QAAU,CAAC;AAEvC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,iBAAiB;IAC5B,0EAA0E;;IAE1E,6DAA6D;;IAE7D,sFAAsF;;IAEtF,+EAA+E;;IAE/E,8CAA8C;;CAEtC,CAAC;AAEX;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAE1D;AAED,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAGpF;AASD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAE5D;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CAa1F;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,SAAS,GAAG,MAAM,EAAE,EAAE,CA+BlF"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/cpsat/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AACpG,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEzD,eAAO,MAAM,eAAe,QAAU,CAAC;AAEvC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,iBAAiB;IAC5B,0EAA0E;;IAE1E,6DAA6D;;IAE7D,sFAAsF;;IAEtF,+EAA+E;;IAE/E,8CAA8C;;CAEtC,CAAC;AAEX;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAKvD,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAE1D;AAED,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAGpF;AASD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAE5D;AAQD,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAE1E;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CAe1F;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,cAAc,EAAE,MAAM,GAAG,aAAa,EAAE,EAAE,CAyBhG;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,aAAa,EAAE,EACrB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,SAAS,GACtB,aAAa,EAAE,EAAE,CAYnB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,YAAY,EAAE,SAAS,GAAG,aAAa,EAAE,EAAE,CA8BhG"}
@@ -1,4 +1,4 @@
1
- import { DAY_OF_WEEK_MAP } from "../datetime.utils.js";
1
+ import { DAY_OF_WEEK_INDEX } from "../types.js";
2
2
  export const MINUTES_PER_DAY = 24 * 60;
3
3
  /**
4
4
  * Standard objective weights for the scheduling solver.
@@ -38,12 +38,17 @@ export const OBJECTIVE_WEIGHTS = {
38
38
  ASSIGNMENT_BASE: 1,
39
39
  };
40
40
  /**
41
- * Parse a day string (YYYY-MM-DD) to a UTC Date.
42
- * Used internally for day-of-week calculations and date comparisons.
41
+ * Maps {@link Priority} levels to penalty weights for preference rules.
42
+ *
43
+ * Used by `assignment-priority`, `location-preference`, and `role-preference`
44
+ * to scale the strength of their soft constraints.
43
45
  */
44
- export function parseDayString(day) {
45
- return new Date(`${day}T00:00:00Z`);
46
- }
46
+ export const PREFERENCE_WEIGHTS = {
47
+ LOW: OBJECTIVE_WEIGHTS.FAIRNESS,
48
+ MEDIUM: OBJECTIVE_WEIGHTS.ASSIGNMENT_PREFERENCE,
49
+ HIGH: OBJECTIVE_WEIGHTS.ASSIGNMENT_PREFERENCE * 2.5,
50
+ MANDATORY: OBJECTIVE_WEIGHTS.ASSIGNMENT_PREFERENCE * 5,
51
+ };
47
52
  export function timeOfDayToMinutes(time) {
48
53
  return time.hours * 60 + (time.minutes ?? 0);
49
54
  }
@@ -61,6 +66,14 @@ const PRIORITY_PENALTIES = {
61
66
  export function priorityToPenalty(priority) {
62
67
  return PRIORITY_PENALTIES[priority];
63
68
  }
69
+ const TARGET_PEAK_PRIORITY_PENALTIES = {
70
+ LOW: OBJECTIVE_WEIGHTS.COST,
71
+ MEDIUM: OBJECTIVE_WEIGHTS.SHIFT_ACTIVE,
72
+ HIGH: OBJECTIVE_WEIGHTS.SHIFT_ACTIVE * 2.5,
73
+ };
74
+ export function targetPeakPriorityToPenalty(priority) {
75
+ return TARGET_PEAK_PRIORITY_PENALTIES[priority];
76
+ }
64
77
  /**
65
78
  * Computes the total duration of the union of time ranges.
66
79
  *
@@ -72,8 +85,11 @@ export function unionMinutes(ranges) {
72
85
  if (ranges.length === 0)
73
86
  return 0;
74
87
  const sorted = ranges.toSorted((a, b) => a.start - b.start);
88
+ const first = sorted[0];
89
+ if (!first)
90
+ return 0;
75
91
  let total = 0;
76
- let currentEnd = sorted[0].start;
92
+ let currentEnd = first.start;
77
93
  for (const r of sorted) {
78
94
  const effectiveStart = Math.max(r.start, currentEnd);
79
95
  if (effectiveStart < r.end) {
@@ -83,24 +99,69 @@ export function unionMinutes(ranges) {
83
99
  }
84
100
  return total;
85
101
  }
102
+ /**
103
+ * Splits scheduling days into non-overlapping chunks of N calendar months.
104
+ *
105
+ * Days are grouped by their {@link SchedulingDay.yearMonth}, then consecutive
106
+ * months are merged into chunks of the requested size.
107
+ */
108
+ export function splitIntoMonths(days, monthsPerChunk) {
109
+ if (days.length === 0)
110
+ return [];
111
+ const monthGroups = new Map();
112
+ for (const day of days) {
113
+ let group = monthGroups.get(day.yearMonth);
114
+ if (!group) {
115
+ group = [];
116
+ monthGroups.set(day.yearMonth, group);
117
+ }
118
+ group.push(day);
119
+ }
120
+ const sortedKeys = [...monthGroups.keys()].toSorted();
121
+ const chunks = [];
122
+ for (let i = 0; i < sortedKeys.length; i += monthsPerChunk) {
123
+ const chunkKeys = sortedKeys.slice(i, i + monthsPerChunk);
124
+ const chunk = chunkKeys.flatMap((key) => monthGroups.get(key));
125
+ if (chunk.length > 0) {
126
+ chunks.push(chunk);
127
+ }
128
+ }
129
+ return chunks;
130
+ }
131
+ /**
132
+ * Groups days into chunks of N weeks, aligned to weekStartsOn.
133
+ *
134
+ * Uses {@link splitIntoWeeks} internally, then merges consecutive weeks
135
+ * into larger chunks.
136
+ */
137
+ export function groupWeekChunks(days, weeksPerChunk, weekStartsOn) {
138
+ const weeks = splitIntoWeeks(days, weekStartsOn);
139
+ const chunks = [];
140
+ for (let i = 0; i < weeks.length; i += weeksPerChunk) {
141
+ const chunk = weeks.slice(i, i + weeksPerChunk).flat();
142
+ if (chunk.length > 0) {
143
+ chunks.push(chunk);
144
+ }
145
+ }
146
+ return chunks;
147
+ }
86
148
  export function splitIntoWeeks(days, weekStartsOn) {
87
149
  if (days.length === 0)
88
150
  return [];
89
- const weekStartIndex = DAY_OF_WEEK_MAP[weekStartsOn];
151
+ const weekStartIndex = DAY_OF_WEEK_INDEX[weekStartsOn];
90
152
  const result = [];
91
153
  let currentWeek = [];
92
- let currentWeekStart = null;
154
+ let currentWeekStartEpoch = null;
93
155
  for (const day of days) {
94
- const date = parseDayString(day);
95
- const isWeekStartDay = date.getUTCDay() === weekStartIndex;
96
- const isNewWeek = isWeekStartDay && currentWeekStart !== null && date.getTime() !== currentWeekStart.getTime();
156
+ const isWeekStartDay = DAY_OF_WEEK_INDEX[day.dayOfWeek] === weekStartIndex;
157
+ const isNewWeek = isWeekStartDay && currentWeekStartEpoch !== null && day.epochDay !== currentWeekStartEpoch;
97
158
  if (isNewWeek) {
98
159
  result.push(currentWeek);
99
160
  currentWeek = [];
100
- currentWeekStart = null;
161
+ currentWeekStartEpoch = null;
101
162
  }
102
- if (currentWeekStart === null) {
103
- currentWeekStart = date;
163
+ if (currentWeekStartEpoch === null) {
164
+ currentWeekStartEpoch = day.epochDay;
104
165
  }
105
166
  currentWeek.push(day);
106
167
  }
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/cpsat/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAIvD,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,GAAG,EAAE,CAAC;AAEvC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,0EAA0E;IAC1E,YAAY,EAAE,IAAI;IAClB,6DAA6D;IAC7D,IAAI,EAAE,GAAG;IACT,sFAAsF;IACtF,qBAAqB,EAAE,EAAE;IACzB,+EAA+E;IAC/E,QAAQ,EAAE,CAAC;IACX,8CAA8C;IAC9C,eAAe,EAAE,CAAC;CACV,CAAC;AAEX;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,OAAO,IAAI,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAe;IAChD,OAAO,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,YAAoB,EAAE,UAAkB;IAC1E,IAAI,UAAU,KAAK,YAAY;QAAE,OAAO,UAAU,GAAG,eAAe,CAAC;IACrE,OAAO,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,UAAU,GAAG,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC;AAC/E,CAAC;AAED,MAAM,kBAAkB,GAAG;IACzB,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,EAAE;IACV,IAAI,EAAE,EAAE;IACR,SAAS,EAAE,CAAC;CAC+B,CAAC;AAE9C,MAAM,UAAU,iBAAiB,CAAC,QAAkB;IAClD,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,MAAqD;IAChF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAC5D,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,UAAU,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACrD,IAAI,cAAc,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YAC3B,KAAK,IAAI,CAAC,CAAC,GAAG,GAAG,cAAc,CAAC;YAChC,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC;QACrB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAc,EAAE,YAAuB;IACpE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjC,MAAM,cAAc,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IACrD,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,IAAI,WAAW,GAAa,EAAE,CAAC;IAC/B,IAAI,gBAAgB,GAAgB,IAAI,CAAC;IAEzC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,cAAc,CAAC;QAC3D,MAAM,SAAS,GACb,cAAc,IAAI,gBAAgB,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,gBAAgB,CAAC,OAAO,EAAE,CAAC;QAE/F,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACzB,WAAW,GAAG,EAAE,CAAC;YACjB,gBAAgB,GAAG,IAAI,CAAC;QAC1B,CAAC;QAED,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;YAC9B,gBAAgB,GAAG,IAAI,CAAC;QAC1B,CAAC;QACD,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/cpsat/utils.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,11 @@ export interface ValidationReporter {
13
13
  hasErrors(): boolean;
14
14
  getValidation(): ScheduleValidation;
15
15
  getExclusions(): CoverageExclusion[];
16
- analyzeSolution(response: SolverResponse): void;
16
+ analyzeSolution(response: SolverResponse, options?: AnalyzeSolutionOptions): void;
17
+ }
18
+ export interface AnalyzeSolutionOptions {
19
+ /** Whether solver-reported soft constraint diagnostics should update validation. */
20
+ analyzeSoftConstraints?: boolean;
17
21
  }
18
22
  export declare class ValidationReporterImpl implements ValidationReporter {
19
23
  #private;
@@ -30,7 +34,7 @@ export declare class ValidationReporterImpl implements ValidationReporter {
30
34
  hasErrors(): boolean;
31
35
  getValidation(): ScheduleValidation;
32
36
  getTrackedConstraints(): TrackedConstraint[];
33
- analyzeSolution(response: SolverResponse): void;
37
+ analyzeSolution(response: SolverResponse, options?: AnalyzeSolutionOptions): void;
34
38
  }
35
39
  /**
36
40
  * Aggregates validation items by their group into summaries.
@@ -1 +1 @@
1
- {"version":3,"file":"validation-reporter.d.ts","sourceRoot":"","sources":["../../src/cpsat/validation-reporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAIL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACvB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,kBAAkB;IAEjC,mBAAmB,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAGxD,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACrE,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7D,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAGzC,uBAAuB,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACjF,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAGzE,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACxE,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAGhE,eAAe,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAGrD,SAAS,IAAI,OAAO,CAAC;IACrB,aAAa,IAAI,kBAAkB,CAAC;IACpC,aAAa,IAAI,iBAAiB,EAAE,CAAC;IAGrC,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;CACjD;AA2CD,qBAAa,sBAAuB,YAAW,kBAAkB;;IAQ/D,mBAAmB,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI;IAIvD,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI;IAKpE,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI;IAK5D,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAMxC,uBAAuB,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI;IAWhF,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI;IAKxE,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI;IAKvE,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI;IAK/D,aAAa,IAAI,iBAAiB,EAAE;IAIpC,eAAe,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI;IAIpD,SAAS,IAAI,OAAO;IAIpB,aAAa,IAAI,kBAAkB;IAQnC,qBAAqB,IAAI,iBAAiB,EAAE;IAI5C,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;CAmEhD;AAQD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,kBAAkB,GAAG,SAAS,iBAAiB,EAAE,CAyEhG"}
1
+ {"version":3,"file":"validation-reporter.d.ts","sourceRoot":"","sources":["../../src/cpsat/validation-reporter.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ const MISSING_SOFT_CONSTRAINT_VIOLATIONS_ERROR = "Solver response missing softConstraintViolations for tracked soft constraints.";
1
2
  /**
2
3
  * Generates a deterministic ID for a coverage-based validation item.
3
4
  * Format: {category}:coverage:{day}:{timeSlots}:{roles}:{skills}
@@ -33,16 +34,22 @@ export class ValidationReporterImpl {
33
34
  #passed = [];
34
35
  #trackedConstraints = new Map();
35
36
  #exclusions = [];
37
+ #validationIdCounts = new Map();
36
38
  #solverErrorCount = 0;
39
+ #nextValidationId(baseId) {
40
+ const count = (this.#validationIdCounts.get(baseId) ?? 0) + 1;
41
+ this.#validationIdCounts.set(baseId, count);
42
+ return count === 1 ? baseId : `${baseId}:${count}`;
43
+ }
37
44
  excludeFromCoverage(exclusion) {
38
45
  this.#exclusions.push(exclusion);
39
46
  }
40
47
  reportCoverageError(error) {
41
- const id = coverageId("error", error.day, error.timeSlots, error.roleIds, error.skillIds);
48
+ const id = this.#nextValidationId(coverageId("error", error.day, error.timeSlots, error.roleIds, error.skillIds));
42
49
  this.#errors.push({ id, type: "coverage", ...error });
43
50
  }
44
51
  reportRuleError(error) {
45
- const id = ruleId("error", error.rule, error.context);
52
+ const id = this.#nextValidationId(ruleId("error", error.rule, error.context));
46
53
  this.#errors.push({ id, type: "rule", ...error });
47
54
  }
48
55
  reportSolverError(message) {
@@ -51,19 +58,19 @@ export class ValidationReporterImpl {
51
58
  this.#errors.push({ id, type: "solver", message });
52
59
  }
53
60
  reportCoverageViolation(violation) {
54
- const id = coverageId("violation", violation.day, violation.timeSlots, violation.roleIds, violation.skillIds);
61
+ const id = this.#nextValidationId(coverageId("violation", violation.day, violation.timeSlots, violation.roleIds, violation.skillIds));
55
62
  this.#violations.push({ id, type: "coverage", ...violation });
56
63
  }
57
64
  reportRuleViolation(violation) {
58
- const id = ruleId("violation", violation.rule, violation.context);
65
+ const id = this.#nextValidationId(ruleId("violation", violation.rule, violation.context));
59
66
  this.#violations.push({ id, type: "rule", ...violation });
60
67
  }
61
68
  reportCoveragePassed(passed) {
62
- const id = coverageId("passed", passed.day, passed.timeSlots, passed.roleIds, passed.skillIds);
69
+ const id = this.#nextValidationId(coverageId("passed", passed.day, passed.timeSlots, passed.roleIds, passed.skillIds));
63
70
  this.#passed.push({ id, type: "coverage", ...passed });
64
71
  }
65
72
  reportRulePassed(passed) {
66
- const id = ruleId("passed", passed.rule, passed.context);
73
+ const id = this.#nextValidationId(ruleId("passed", passed.rule, passed.context));
67
74
  this.#passed.push({ id, type: "rule", ...passed });
68
75
  }
69
76
  getExclusions() {
@@ -85,10 +92,14 @@ export class ValidationReporterImpl {
85
92
  getTrackedConstraints() {
86
93
  return [...this.#trackedConstraints.values()];
87
94
  }
88
- analyzeSolution(response) {
95
+ analyzeSolution(response, options) {
89
96
  if (response.status !== "OPTIMAL" && response.status !== "FEASIBLE") {
90
97
  if (response.status === "INFEASIBLE") {
98
+ this.#reportHardConstraintConflicts((response.hardConstraintConflicts ?? []).map((conflict) => conflict.constraintId));
91
99
  this.reportSolverError(response.solutionInfo ?? "Schedule is infeasible");
100
+ if (response.error) {
101
+ this.reportSolverError(response.error);
102
+ }
92
103
  }
93
104
  else if (response.status === "TIMEOUT") {
94
105
  this.reportSolverError("Solver timed out");
@@ -98,14 +109,25 @@ export class ValidationReporterImpl {
98
109
  }
99
110
  return;
100
111
  }
101
- const solverViolations = response.softViolations ?? [];
112
+ const analyzeSoftConstraints = options?.analyzeSoftConstraints ?? true;
113
+ const hasTrackedSoftConstraints = [...this.#trackedConstraints.values()].some((constraint) => constraint.source === "soft");
114
+ if (analyzeSoftConstraints &&
115
+ hasTrackedSoftConstraints &&
116
+ response.softConstraintViolations === undefined) {
117
+ throw new Error(MISSING_SOFT_CONSTRAINT_VIOLATIONS_ERROR);
118
+ }
119
+ const solverViolations = analyzeSoftConstraints
120
+ ? (response.softConstraintViolations ?? [])
121
+ : [];
102
122
  for (const violation of solverViolations) {
103
123
  const tracked = this.#trackedConstraints.get(violation.constraintId);
104
124
  if (tracked?.type === "coverage") {
125
+ if (!tracked.day)
126
+ continue;
105
127
  const roles = tracked.roleIds?.join(", ") ?? "staff";
106
128
  const slot = tracked.timeSlot ?? "all day";
107
129
  this.reportCoverageViolation({
108
- day: tracked.day ?? "",
130
+ day: tracked.day,
109
131
  timeSlots: tracked.timeSlot ? [tracked.timeSlot] : [],
110
132
  roleIds: tracked.roleIds,
111
133
  skillIds: tracked.skillIds,
@@ -138,11 +160,15 @@ export class ValidationReporterImpl {
138
160
  // Mark tracked coverage constraints as passed if not violated
139
161
  const violatedIds = new Set(solverViolations.map((v) => v.constraintId));
140
162
  for (const tracked of this.#trackedConstraints.values()) {
163
+ if (!analyzeSoftConstraints && tracked.source === "soft")
164
+ continue;
141
165
  if (violatedIds.has(tracked.id))
142
166
  continue;
143
167
  if (tracked.type === "coverage") {
168
+ if (!tracked.day)
169
+ continue;
144
170
  this.reportCoveragePassed({
145
- day: tracked.day ?? "",
171
+ day: tracked.day,
146
172
  timeSlots: tracked.timeSlot ? [tracked.timeSlot] : [],
147
173
  roleIds: tracked.roleIds,
148
174
  skillIds: tracked.skillIds,
@@ -152,6 +178,92 @@ export class ValidationReporterImpl {
152
178
  }
153
179
  }
154
180
  }
181
+ #reportHardConstraintConflicts(constraintIds) {
182
+ if (constraintIds.length === 0) {
183
+ return;
184
+ }
185
+ const coverageGroups = new Map();
186
+ const ruleGroups = new Map();
187
+ for (const constraintId of constraintIds) {
188
+ const tracked = this.#trackedConstraints.get(constraintId);
189
+ if (!tracked)
190
+ continue;
191
+ if (tracked.type === "coverage") {
192
+ if (!tracked.day)
193
+ continue;
194
+ const key = [
195
+ tracked.group?.key ?? tracked.id,
196
+ tracked.day,
197
+ tracked.roleIds?.join(",") ?? "_",
198
+ tracked.skillIds?.join(",") ?? "_",
199
+ ].join(":");
200
+ const existing = coverageGroups.get(key);
201
+ if (existing) {
202
+ if (tracked.timeSlot)
203
+ existing.timeSlots.add(tracked.timeSlot);
204
+ existing.descriptions.push(tracked.description);
205
+ continue;
206
+ }
207
+ coverageGroups.set(key, {
208
+ day: tracked.day,
209
+ timeSlots: new Set(tracked.timeSlot ? [tracked.timeSlot] : []),
210
+ roleIds: tracked.roleIds,
211
+ skillIds: tracked.skillIds,
212
+ group: tracked.group,
213
+ descriptions: [tracked.description],
214
+ });
215
+ continue;
216
+ }
217
+ const key = tracked.group?.key ?? tracked.id;
218
+ const existing = ruleGroups.get(key);
219
+ if (existing) {
220
+ for (const day of tracked.context.days ?? [])
221
+ existing.days.add(day);
222
+ for (const memberId of tracked.context.memberIds ?? [])
223
+ existing.memberIds.add(memberId);
224
+ existing.descriptions.push(tracked.description);
225
+ continue;
226
+ }
227
+ ruleGroups.set(key, {
228
+ rule: tracked.rule ?? "unknown",
229
+ days: new Set(tracked.context.days ?? []),
230
+ memberIds: new Set(tracked.context.memberIds ?? []),
231
+ group: tracked.group,
232
+ descriptions: [tracked.description],
233
+ });
234
+ }
235
+ for (const coverage of coverageGroups.values()) {
236
+ const label = coverage.group?.title ?? coverage.descriptions[0] ?? "Coverage requirement";
237
+ this.reportCoverageError({
238
+ day: coverage.day,
239
+ timeSlots: [...coverage.timeSlots].toSorted(),
240
+ roleIds: coverage.roleIds,
241
+ skillIds: coverage.skillIds,
242
+ message: `${label} is part of a sufficient infeasible constraint set.`,
243
+ suggestions: [
244
+ "Relax this mandatory coverage requirement",
245
+ "Relax conflicting mandatory rules or add eligible team members",
246
+ ],
247
+ group: coverage.group,
248
+ });
249
+ }
250
+ for (const rule of ruleGroups.values()) {
251
+ const label = rule.group?.title ?? rule.descriptions[0] ?? rule.rule;
252
+ this.reportRuleError({
253
+ rule: rule.rule,
254
+ message: `${label} is part of a sufficient infeasible constraint set.`,
255
+ context: {
256
+ days: [...rule.days].toSorted(),
257
+ memberIds: [...rule.memberIds].toSorted(),
258
+ },
259
+ suggestions: [
260
+ "Relax this mandatory rule",
261
+ "Relax conflicting mandatory coverage requirements or add eligible team members",
262
+ ],
263
+ group: rule.group,
264
+ });
265
+ }
266
+ }
155
267
  }
156
268
  /**
157
269
  * Aggregates validation items by their group into summaries.