dabke 0.83.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 (330) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +22 -27
  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 -24
  66. package/dist/cpsat/rules/index.d.ts.map +1 -1
  67. package/dist/cpsat/rules/index.js +30 -24
  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 +17 -31
  86. package/dist/cpsat/rules/max-days-week.d.ts.map +1 -1
  87. package/dist/cpsat/rules/max-days-week.js +69 -81
  88. package/dist/cpsat/rules/max-days-week.js.map +1 -1
  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 +13 -26
  110. package/dist/cpsat/rules/min-days-week.d.ts.map +1 -1
  111. package/dist/cpsat/rules/min-days-week.js +85 -74
  112. package/dist/cpsat/rules/min-days-week.js.map +1 -1
  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 +5 -42
  130. package/dist/cpsat/rules/must-assign.d.ts.map +1 -1
  131. package/dist/cpsat/rules/must-assign.js +43 -75
  132. package/dist/cpsat/rules/must-assign.js.map +1 -1
  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 -30
  162. package/dist/cpsat/rules/registry.d.ts.map +1 -1
  163. package/dist/cpsat/rules/registry.js +98 -34
  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 +90 -17
  174. package/dist/cpsat/rules/rules.types.d.ts.map +1 -1
  175. package/dist/cpsat/rules/scope.types.d.ts +24 -11
  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 +12 -8
  226. package/dist/index.d.ts.map +1 -1
  227. package/dist/index.js +8 -3
  228. package/dist/index.js.map +1 -1
  229. package/dist/schedule/cost.d.ts +48 -60
  230. package/dist/schedule/cost.d.ts.map +1 -1
  231. package/dist/schedule/cost.js +15 -51
  232. package/dist/schedule/cost.js.map +1 -1
  233. package/dist/schedule/coverage.d.ts +57 -28
  234. package/dist/schedule/coverage.d.ts.map +1 -1
  235. package/dist/schedule/coverage.js +24 -1
  236. package/dist/schedule/coverage.js.map +1 -1
  237. package/dist/schedule/definition.d.ts +138 -19
  238. package/dist/schedule/definition.d.ts.map +1 -1
  239. package/dist/schedule/definition.js +99 -90
  240. package/dist/schedule/definition.js.map +1 -1
  241. package/dist/schedule/index.d.ts +4 -4
  242. package/dist/schedule/index.d.ts.map +1 -1
  243. package/dist/schedule/index.js +2 -2
  244. package/dist/schedule/index.js.map +1 -1
  245. package/dist/schedule/rules.d.ts +438 -113
  246. package/dist/schedule/rules.d.ts.map +1 -1
  247. package/dist/schedule/rules.js +310 -108
  248. package/dist/schedule/rules.js.map +1 -1
  249. package/dist/schedule/shift-patterns.d.ts +0 -17
  250. package/dist/schedule/shift-patterns.d.ts.map +1 -1
  251. package/dist/schedule/shift-patterns.js +0 -17
  252. package/dist/schedule/shift-patterns.js.map +1 -1
  253. package/dist/schedule/time-periods.d.ts +37 -27
  254. package/dist/schedule/time-periods.d.ts.map +1 -1
  255. package/dist/schedule/time-periods.js +37 -27
  256. package/dist/schedule/time-periods.js.map +1 -1
  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 -9
  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 -24
  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 +89 -115
  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 +93 -91
  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 +44 -81
  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 -62
  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 +89 -17
  309. package/src/cpsat/rules/scope.types.ts +31 -26
  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 +64 -12
  323. package/src/schedule/cost.ts +40 -61
  324. package/src/schedule/coverage.ts +57 -28
  325. package/src/schedule/definition.ts +565 -76
  326. package/src/schedule/index.ts +23 -3
  327. package/src/schedule/rules.ts +631 -132
  328. package/src/schedule/shift-patterns.ts +0 -17
  329. package/src/schedule/time-periods.ts +37 -27
  330. package/src/types.ts +114 -2
@@ -1,25 +1,31 @@
1
- export { createAssignTogetherRule } from "./assign-together.js";
2
- export { createAssignmentPriorityRule } from "./assignment-priority.js";
3
- export { createLocationPreferenceRule } from "./location-preference.js";
4
- export { createMaxConsecutiveDaysRule } from "./max-consecutive-days.js";
5
- export { createMaxDaysWeekRule } from "./max-days-week.js";
6
- export { createMaxHoursDayRule } from "./max-hours-day.js";
7
- export { createMaxHoursWeekRule } from "./max-hours-week.js";
8
- export { createMaxShiftsDayRule } from "./max-shifts-day.js";
9
- export { createMinConsecutiveDaysRule } from "./min-consecutive-days.js";
10
- export { createMinDaysWeekRule } from "./min-days-week.js";
11
- export { createMinHoursDayRule } from "./min-hours-day.js";
12
- export { createMinHoursWeekRule } from "./min-hours-week.js";
13
- export { createMinRestBetweenShiftsRule } from "./min-rest-between-shifts.js";
14
- export { createMustAssignRule } from "./must-assign.js";
15
- export { createTimeOffRule } from "./time-off.js";
16
- export { createMinimizeCostRule } from "./minimize-cost.js";
17
- export { createDayCostMultiplierRule } from "./day-cost-multiplier.js";
18
- export { createDayCostSurchargeRule } from "./day-cost-surcharge.js";
19
- export { createTimeCostSurchargeRule } from "./time-cost-surcharge.js";
20
- export { createOvertimeWeeklyMultiplierRule } from "./overtime-weekly-multiplier.js";
21
- export { createOvertimeWeeklySurchargeRule } from "./overtime-weekly-surcharge.js";
22
- export { createOvertimeDailyMultiplierRule } from "./overtime-daily-multiplier.js";
23
- export { createOvertimeDailySurchargeRule } from "./overtime-daily-surcharge.js";
24
- export { createOvertimeTieredMultiplierRule } from "./overtime-tiered-multiplier.js";
1
+ export { assignTogetherRuleDescriptor } from "./assign-together.js";
2
+ export { assignmentPriorityRuleDescriptor } from "./assignment-priority.js";
3
+ export { locationPreferenceRuleDescriptor } from "./location-preference.js";
4
+ export { rolePreferenceRuleDescriptor } from "./role-preference.js";
5
+ export { maxConcurrentAssignmentsRuleDescriptor } from "./max-concurrent-assignments.js";
6
+ export { targetPeakConcurrentAssignmentsRuleDescriptor } from "./target-peak-concurrent-assignments.js";
7
+ export { targetDaysWeekRuleDescriptor } from "./target-days-week.js";
8
+ export { maxConsecutiveDaysRuleDescriptor } from "./max-consecutive-days.js";
9
+ export { maxDaysWeekRuleDescriptor } from "./max-days-week.js";
10
+ export { maxHoursDayRuleDescriptor } from "./max-hours-day.js";
11
+ export { maxHoursWeekRuleDescriptor } from "./max-hours-week.js";
12
+ export { maxShiftsDayRuleDescriptor } from "./max-shifts-day.js";
13
+ export { minConsecutiveDaysRuleDescriptor } from "./min-consecutive-days.js";
14
+ export { minDaysWeekRuleDescriptor } from "./min-days-week.js";
15
+ export { minHoursDayRuleDescriptor } from "./min-hours-day.js";
16
+ export { minHoursWeekRuleDescriptor } from "./min-hours-week.js";
17
+ export { minRestBetweenShiftsRuleDescriptor } from "./min-rest-between-shifts.js";
18
+ export { mustAssignRuleDescriptor } from "./must-assign.js";
19
+ export { timeOffRuleDescriptor } from "./time-off.js";
20
+ export { minimizeCostRuleDescriptor } from "./minimize-cost.js";
21
+ export { dayCostMultiplierRuleDescriptor } from "./day-cost-multiplier.js";
22
+ export { dayCostSurchargeRuleDescriptor } from "./day-cost-surcharge.js";
23
+ export { timeCostSurchargeRuleDescriptor } from "./time-cost-surcharge.js";
24
+ export { overtimeWeeklyMultiplierRuleDescriptor } from "./overtime-weekly-multiplier.js";
25
+ export { overtimeWeeklySurchargeRuleDescriptor } from "./overtime-weekly-surcharge.js";
26
+ export { overtimeDailyMultiplierRuleDescriptor } from "./overtime-daily-multiplier.js";
27
+ export { overtimeDailySurchargeRuleDescriptor } from "./overtime-daily-surcharge.js";
28
+ export { overtimeTieredMultiplierRuleDescriptor } from "./overtime-tiered-multiplier.js";
29
+ export { maxDaysOfWeekPerPeriodRuleDescriptor } from "./max-days-of-week-per-period.js";
30
+ export { minDaysOfWeekPerPeriodRuleDescriptor } from "./min-days-of-week-per-period.js";
25
31
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cpsat/rules/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,kCAAkC,EAAE,MAAM,iCAAiC,CAAC;AACrF,OAAO,EAAE,iCAAiC,EAAE,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAAE,iCAAiC,EAAE,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAAE,gCAAgC,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,EAAE,kCAAkC,EAAE,MAAM,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cpsat/rules/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,gCAAgC,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,gCAAgC,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,sCAAsC,EAAE,MAAM,iCAAiC,CAAC;AACzF,OAAO,EAAE,6CAA6C,EAAE,MAAM,yCAAyC,CAAC;AACxG,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,gCAAgC,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,gCAAgC,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,kCAAkC,EAAE,MAAM,8BAA8B,CAAC;AAClF,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,sCAAsC,EAAE,MAAM,iCAAiC,CAAC;AACzF,OAAO,EAAE,qCAAqC,EAAE,MAAM,gCAAgC,CAAC;AACvF,OAAO,EAAE,qCAAqC,EAAE,MAAM,gCAAgC,CAAC;AACvF,OAAO,EAAE,oCAAoC,EAAE,MAAM,+BAA+B,CAAC;AACrF,OAAO,EAAE,sCAAsC,EAAE,MAAM,iCAAiC,CAAC;AACzF,OAAO,EAAE,oCAAoC,EAAE,MAAM,kCAAkC,CAAC;AACxF,OAAO,EAAE,oCAAoC,EAAE,MAAM,kCAAkC,CAAC"}
@@ -1,25 +1,31 @@
1
- export { createAssignTogetherRule } from "./assign-together.js";
2
- export { createAssignmentPriorityRule } from "./assignment-priority.js";
3
- export { createLocationPreferenceRule } from "./location-preference.js";
4
- export { createMaxConsecutiveDaysRule } from "./max-consecutive-days.js";
5
- export { createMaxDaysWeekRule } from "./max-days-week.js";
6
- export { createMaxHoursDayRule } from "./max-hours-day.js";
7
- export { createMaxHoursWeekRule } from "./max-hours-week.js";
8
- export { createMaxShiftsDayRule } from "./max-shifts-day.js";
9
- export { createMinConsecutiveDaysRule } from "./min-consecutive-days.js";
10
- export { createMinDaysWeekRule } from "./min-days-week.js";
11
- export { createMinHoursDayRule } from "./min-hours-day.js";
12
- export { createMinHoursWeekRule } from "./min-hours-week.js";
13
- export { createMinRestBetweenShiftsRule } from "./min-rest-between-shifts.js";
14
- export { createMustAssignRule } from "./must-assign.js";
15
- export { createTimeOffRule } from "./time-off.js";
16
- export { createMinimizeCostRule } from "./minimize-cost.js";
17
- export { createDayCostMultiplierRule } from "./day-cost-multiplier.js";
18
- export { createDayCostSurchargeRule } from "./day-cost-surcharge.js";
19
- export { createTimeCostSurchargeRule } from "./time-cost-surcharge.js";
20
- export { createOvertimeWeeklyMultiplierRule } from "./overtime-weekly-multiplier.js";
21
- export { createOvertimeWeeklySurchargeRule } from "./overtime-weekly-surcharge.js";
22
- export { createOvertimeDailyMultiplierRule } from "./overtime-daily-multiplier.js";
23
- export { createOvertimeDailySurchargeRule } from "./overtime-daily-surcharge.js";
24
- export { createOvertimeTieredMultiplierRule } from "./overtime-tiered-multiplier.js";
1
+ export { assignTogetherRuleDescriptor } from "./assign-together.js";
2
+ export { assignmentPriorityRuleDescriptor } from "./assignment-priority.js";
3
+ export { locationPreferenceRuleDescriptor } from "./location-preference.js";
4
+ export { rolePreferenceRuleDescriptor } from "./role-preference.js";
5
+ export { maxConcurrentAssignmentsRuleDescriptor } from "./max-concurrent-assignments.js";
6
+ export { targetPeakConcurrentAssignmentsRuleDescriptor } from "./target-peak-concurrent-assignments.js";
7
+ export { targetDaysWeekRuleDescriptor } from "./target-days-week.js";
8
+ export { maxConsecutiveDaysRuleDescriptor } from "./max-consecutive-days.js";
9
+ export { maxDaysWeekRuleDescriptor } from "./max-days-week.js";
10
+ export { maxHoursDayRuleDescriptor } from "./max-hours-day.js";
11
+ export { maxHoursWeekRuleDescriptor } from "./max-hours-week.js";
12
+ export { maxShiftsDayRuleDescriptor } from "./max-shifts-day.js";
13
+ export { minConsecutiveDaysRuleDescriptor } from "./min-consecutive-days.js";
14
+ export { minDaysWeekRuleDescriptor } from "./min-days-week.js";
15
+ export { minHoursDayRuleDescriptor } from "./min-hours-day.js";
16
+ export { minHoursWeekRuleDescriptor } from "./min-hours-week.js";
17
+ export { minRestBetweenShiftsRuleDescriptor } from "./min-rest-between-shifts.js";
18
+ export { mustAssignRuleDescriptor } from "./must-assign.js";
19
+ export { timeOffRuleDescriptor } from "./time-off.js";
20
+ export { minimizeCostRuleDescriptor } from "./minimize-cost.js";
21
+ export { dayCostMultiplierRuleDescriptor } from "./day-cost-multiplier.js";
22
+ export { dayCostSurchargeRuleDescriptor } from "./day-cost-surcharge.js";
23
+ export { timeCostSurchargeRuleDescriptor } from "./time-cost-surcharge.js";
24
+ export { overtimeWeeklyMultiplierRuleDescriptor } from "./overtime-weekly-multiplier.js";
25
+ export { overtimeWeeklySurchargeRuleDescriptor } from "./overtime-weekly-surcharge.js";
26
+ export { overtimeDailyMultiplierRuleDescriptor } from "./overtime-daily-multiplier.js";
27
+ export { overtimeDailySurchargeRuleDescriptor } from "./overtime-daily-surcharge.js";
28
+ export { overtimeTieredMultiplierRuleDescriptor } from "./overtime-tiered-multiplier.js";
29
+ export { maxDaysOfWeekPerPeriodRuleDescriptor } from "./max-days-of-week-per-period.js";
30
+ export { minDaysOfWeekPerPeriodRuleDescriptor } from "./min-days-of-week-per-period.js";
25
31
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cpsat/rules/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,kCAAkC,EAAE,MAAM,iCAAiC,CAAC;AACrF,OAAO,EAAE,iCAAiC,EAAE,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAAE,iCAAiC,EAAE,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAAE,gCAAgC,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,EAAE,kCAAkC,EAAE,MAAM,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cpsat/rules/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,gCAAgC,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,gCAAgC,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,sCAAsC,EAAE,MAAM,iCAAiC,CAAC;AACzF,OAAO,EAAE,6CAA6C,EAAE,MAAM,yCAAyC,CAAC;AACxG,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,gCAAgC,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,gCAAgC,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,kCAAkC,EAAE,MAAM,8BAA8B,CAAC;AAClF,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,sCAAsC,EAAE,MAAM,iCAAiC,CAAC;AACzF,OAAO,EAAE,qCAAqC,EAAE,MAAM,gCAAgC,CAAC;AACvF,OAAO,EAAE,qCAAqC,EAAE,MAAM,gCAAgC,CAAC;AACvF,OAAO,EAAE,oCAAoC,EAAE,MAAM,+BAA+B,CAAC;AACrF,OAAO,EAAE,sCAAsC,EAAE,MAAM,iCAAiC,CAAC;AACzF,OAAO,EAAE,oCAAoC,EAAE,MAAM,kCAAkC,CAAC;AACxF,OAAO,EAAE,oCAAoC,EAAE,MAAM,kCAAkC,CAAC"}
@@ -1,31 +1,24 @@
1
1
  import * as z from "zod";
2
- import type { CompilationRule } from "../model-builder.js";
3
- declare const LocationPreferenceSchema: z.ZodIntersection<z.ZodObject<{
2
+ export declare const LocationPreferenceSchema: z.ZodIntersection<z.ZodObject<{
4
3
  locationId: z.ZodString;
5
- priority: z.ZodDefault<z.ZodUnion<readonly [z.ZodLiteral<"LOW">, z.ZodLiteral<"MEDIUM">, z.ZodLiteral<"HIGH">, z.ZodLiteral<"MANDATORY">]>>;
4
+ priority: z.ZodDefault<z.ZodEnum<{
5
+ LOW: "LOW";
6
+ MEDIUM: "MEDIUM";
7
+ HIGH: "HIGH";
8
+ MANDATORY: "MANDATORY";
9
+ }>>;
6
10
  }, z.core.$strip>, z.ZodType<import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">, unknown, z.core.$ZodTypeInternals<import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">, unknown>>>;
7
11
  /**
8
- * Configuration for {@link createLocationPreferenceRule}.
9
- *
10
- * - `locationId` (required): the location ID to prefer for matching shift patterns
11
- * - `priority` (required): how strongly to prefer this location
12
- *
13
- * Entity scoping (at most one): `memberIds`, `roleIds`, `skillIds`
12
+ * Configuration for {@link locationPreferenceRuleDescriptor}.
14
13
  */
15
14
  export type LocationPreferenceConfig = z.infer<typeof LocationPreferenceSchema>;
16
15
  /**
17
- * Prefers assigning a person to shift patterns matching a specific location.
16
+ * Low-level descriptor for location preference rules.
18
17
  *
19
- * @param config - See {@link LocationPreferenceConfig}
20
- * @example
21
- * ```ts
22
- * createLocationPreferenceRule({
23
- * locationId: "terrace",
24
- * priority: "HIGH",
25
- * memberIds: ["alice"],
26
- * });
27
- * ```
18
+ * @category Rules
28
19
  */
29
- export declare function createLocationPreferenceRule(config: LocationPreferenceConfig): CompilationRule;
30
- export {};
20
+ export declare const locationPreferenceRuleDescriptor: import("../rule-descriptor.js").RuleDescriptor<"location-preference", {
21
+ locationId: string;
22
+ priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
23
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">>;
31
24
  //# sourceMappingURL=location-preference.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"location-preference.d.ts","sourceRoot":"","sources":["../../../src/cpsat/rules/location-preference.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAU3D,QAAA,MAAM,wBAAwB;;;iOAKqB,CAAC;AAEpD;;;;;;;GAOG;AACH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAShF;;;;;;;;;;;;GAYG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,wBAAwB,GAAG,eAAe,CA0B9F"}
1
+ {"version":3,"file":"location-preference.d.ts","sourceRoot":"","sources":["../../../src/cpsat/rules/location-preference.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAYzB,eAAO,MAAM,wBAAwB;;;;;;;;iOAKc,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAEhF;;;;GAIG;AACH,eAAO,MAAM,gCAAgC;;;+EAwC3C,CAAC"}
@@ -1,56 +1,56 @@
1
1
  import * as z from "zod";
2
- import { OBJECTIVE_WEIGHTS } from "../utils.js";
2
+ import { defineRuleDescriptor } from "../rule-descriptor.js";
3
+ import { PREFERENCE_WEIGHTS } from "../utils.js";
3
4
  import { PrioritySchema, entityScope, parseEntityScope, resolveMembersFromScope, } from "./scope.types.js";
4
- const LocationPreferenceSchema = z
5
+ import { assignmentVar } from "./variables.js";
6
+ import { canAssignMemberToPattern, isPatternAvailableOnDay } from "./pattern-eligibility.js";
7
+ export const LocationPreferenceSchema = z
5
8
  .object({
6
9
  locationId: z.string(),
7
10
  priority: PrioritySchema,
8
11
  })
9
12
  .and(entityScope(["members", "roles", "skills"]));
10
- const PRIORITY_WEIGHTS = {
11
- LOW: OBJECTIVE_WEIGHTS.FAIRNESS,
12
- MEDIUM: OBJECTIVE_WEIGHTS.ASSIGNMENT_PREFERENCE,
13
- HIGH: OBJECTIVE_WEIGHTS.ASSIGNMENT_PREFERENCE * 2.5,
14
- MANDATORY: OBJECTIVE_WEIGHTS.ASSIGNMENT_PREFERENCE * 5,
15
- };
16
13
  /**
17
- * Prefers assigning a person to shift patterns matching a specific location.
14
+ * Low-level descriptor for location preference rules.
18
15
  *
19
- * @param config - See {@link LocationPreferenceConfig}
20
- * @example
21
- * ```ts
22
- * createLocationPreferenceRule({
23
- * locationId: "terrace",
24
- * priority: "HIGH",
25
- * memberIds: ["alice"],
26
- * });
27
- * ```
16
+ * @category Rules
28
17
  */
29
- export function createLocationPreferenceRule(config) {
30
- const parsed = LocationPreferenceSchema.parse(config);
31
- const scope = parseEntityScope(parsed);
32
- const { locationId } = parsed;
33
- const weight = PRIORITY_WEIGHTS[parsed.priority] ?? 0;
34
- return {
35
- compile(b) {
36
- if (weight === 0)
37
- return;
38
- const members = resolveMembersFromScope(scope, b.members);
39
- for (const emp of members) {
40
- for (const pattern of b.shiftPatterns) {
41
- if (!b.canAssign(emp, pattern))
42
- continue;
43
- const isPreferred = pattern.locationId === locationId;
44
- if (isPreferred)
45
- continue;
46
- for (const day of b.days) {
47
- if (!b.patternAvailableOnDay(pattern, day))
48
- continue;
49
- b.addPenalty(b.assignment(emp.id, pattern.id, day), weight);
50
- }
51
- }
52
- }
53
- },
54
- };
55
- }
18
+ export const locationPreferenceRuleDescriptor = defineRuleDescriptor({
19
+ name: "location-preference",
20
+ schema: LocationPreferenceSchema,
21
+ compile(config, ctx) {
22
+ const scope = parseEntityScope(config);
23
+ const { locationId } = config;
24
+ const weight = PREFERENCE_WEIGHTS[config.priority] ?? 0;
25
+ if (weight === 0) {
26
+ return { rule: "location-preference", artifacts: [] };
27
+ }
28
+ const members = resolveMembersFromScope(scope, [...ctx.members]);
29
+ const terms = members.flatMap((member) => ctx.shiftPatterns.flatMap((pattern) => {
30
+ if (!canAssignMemberToPattern(member, pattern))
31
+ return [];
32
+ if (pattern.locationId === locationId)
33
+ return [];
34
+ return ctx.days
35
+ .filter((day) => isPatternAvailableOnDay(pattern, day))
36
+ .map((day) => ({ var: assignmentVar(member.id, pattern.id, day.iso), coeff: weight }));
37
+ }));
38
+ return {
39
+ rule: "location-preference",
40
+ artifacts: [
41
+ {
42
+ kind: "objective",
43
+ terms,
44
+ validation: {
45
+ strategy: "skip",
46
+ category: "no-meaningful-feedback",
47
+ rationale: terms.length === 0
48
+ ? `Location preference for "${locationId}" produced no objective terms.`
49
+ : "Preference rules influence the objective but do not emit validation feedback.",
50
+ },
51
+ },
52
+ ],
53
+ };
54
+ },
55
+ });
56
56
  //# sourceMappingURL=location-preference.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"location-preference.js","sourceRoot":"","sources":["../../../src/cpsat/rules/location-preference.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAGzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,wBAAwB,GAAG,CAAC;KAC/B,MAAM,CAAC;IACN,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,QAAQ,EAAE,cAAc;CACzB,CAAC;KACD,GAAG,CAAC,WAAW,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AAYpD,MAAM,gBAAgB,GAA6B;IACjD,GAAG,EAAE,iBAAiB,CAAC,QAAQ;IAC/B,MAAM,EAAE,iBAAiB,CAAC,qBAAqB;IAC/C,IAAI,EAAE,iBAAiB,CAAC,qBAAqB,GAAG,GAAG;IACnD,SAAS,EAAE,iBAAiB,CAAC,qBAAqB,GAAG,CAAC;CACvD,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAAgC;IAC3E,MAAM,MAAM,GAAG,wBAAwB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IAC9B,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEtD,OAAO;QACL,OAAO,CAAC,CAAC;YACP,IAAI,MAAM,KAAK,CAAC;gBAAE,OAAO;YAEzB,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAE1D,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC1B,KAAK,MAAM,OAAO,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC;oBACtC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC;wBAAE,SAAS;oBACzC,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,KAAK,UAAU,CAAC;oBACtD,IAAI,WAAW;wBAAE,SAAS;oBAE1B,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;wBACzB,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,OAAO,EAAE,GAAG,CAAC;4BAAE,SAAS;wBACrD,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;oBAC9D,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"location-preference.js","sourceRoot":"","sources":["../../../src/cpsat/rules/location-preference.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAE7F,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC;KACtC,MAAM,CAAC;IACN,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,QAAQ,EAAE,cAAc;CACzB,CAAC;KACD,GAAG,CAAC,WAAW,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AAOpD;;;;GAIG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,oBAAoB,CAAC;IACnE,IAAI,EAAE,qBAAqB;IAC3B,MAAM,EAAE,wBAAwB;IAChC,OAAO,CAAC,MAAM,EAAE,GAAG;QACjB,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;QAC9B,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,QAA2C,CAAC,IAAI,CAAC,CAAC;QAC3F,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YACjB,OAAO,EAAE,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;QACxD,CAAC;QAED,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CACvC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACpC,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,OAAO,CAAC;gBAAE,OAAO,EAAE,CAAC;YAC1D,IAAI,OAAO,CAAC,UAAU,KAAK,UAAU;gBAAE,OAAO,EAAE,CAAC;YACjD,OAAO,GAAG,CAAC,IAAI;iBACZ,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,uBAAuB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;iBACtD,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAC3F,CAAC,CAAC,CACH,CAAC;QAEF,OAAO;YACL,IAAI,EAAE,qBAAqB;YAC3B,SAAS,EAAE;gBACT;oBACE,IAAI,EAAE,WAAW;oBACjB,KAAK;oBACL,UAAU,EAAE;wBACV,QAAQ,EAAE,MAAM;wBAChB,QAAQ,EAAE,wBAAwB;wBAClC,SAAS,EACP,KAAK,CAAC,MAAM,KAAK,CAAC;4BAChB,CAAC,CAAC,4BAA4B,UAAU,gCAAgC;4BACxE,CAAC,CAAC,+EAA+E;qBACtF;iBACF;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,46 @@
1
+ import * as z from "zod";
2
+ export declare const MaxConcurrentAssignmentsSchema: z.ZodIntersection<z.ZodIntersection<z.ZodObject<{
3
+ assignments: z.ZodNumber;
4
+ priority: z.ZodDefault<z.ZodEnum<{
5
+ LOW: "LOW";
6
+ MEDIUM: "MEDIUM";
7
+ HIGH: "HIGH";
8
+ MANDATORY: "MANDATORY";
9
+ }>>;
10
+ startTime: z.ZodOptional<z.ZodObject<{
11
+ hours: z.ZodNumber;
12
+ minutes: z.ZodNumber;
13
+ }, z.core.$strip>>;
14
+ endTime: z.ZodOptional<z.ZodObject<{
15
+ hours: z.ZodNumber;
16
+ minutes: z.ZodNumber;
17
+ }, z.core.$strip>>;
18
+ }, z.core.$strip>, z.ZodType<import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">, unknown, z.core.$ZodTypeInternals<import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">, unknown>>>, z.ZodType<import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">, unknown, z.core.$ZodTypeInternals<import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">, unknown>>>;
19
+ /**
20
+ * Configuration for {@link maxConcurrentAssignmentsRuleDescriptor}.
21
+ */
22
+ export type MaxConcurrentAssignmentsConfig = z.infer<typeof MaxConcurrentAssignmentsSchema>;
23
+ /**
24
+ * Low-level descriptor for the `max-concurrent-assignments` rule.
25
+ *
26
+ * @remarks
27
+ * Caps how many targeted members may be assigned at the same time. Use it for
28
+ * physical capacity constraints that should remain independent from coverage
29
+ * floors. Unlike {@link import("./max-shifts-day.js").maxShiftsDayRuleDescriptor},
30
+ * this counts concurrent overlap, not total assignments on a day.
31
+ *
32
+ * @category Rules
33
+ */
34
+ export declare const maxConcurrentAssignmentsRuleDescriptor: import("../rule-descriptor.js").RuleDescriptor<"max-concurrent-assignments", ({
35
+ assignments: number;
36
+ priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
37
+ startTime?: {
38
+ hours: number;
39
+ minutes: number;
40
+ } | undefined;
41
+ endTime?: {
42
+ hours: number;
43
+ minutes: number;
44
+ } | undefined;
45
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
46
+ //# sourceMappingURL=max-concurrent-assignments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"max-concurrent-assignments.d.ts","sourceRoot":"","sources":["../../../src/cpsat/rules/max-concurrent-assignments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AA+BzB,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;mfAmBxC,CAAC;AAEJ;;GAEG;AACH,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAE5F;;;;;;;;;;GAUG;AACH,eAAO,MAAM,sCAAsC;;;;;;;;;;;8LAsEjD,CAAC"}
@@ -0,0 +1,121 @@
1
+ import * as z from "zod";
2
+ import { defineRuleDescriptor } from "../rule-descriptor.js";
3
+ import { MINUTES_PER_DAY, normalizeEndMinutes, priorityToPenalty, timeOfDayToMinutes, } from "../utils.js";
4
+ import { PrioritySchema, entityScope, parseEntityScope, parseTimeScope, resolveActiveDaysFromScope, resolveMembersFromScope, ruleGroup, timeScope, } from "./scope.types.js";
5
+ import { hardConstraint, reportValidation, softConstraint } from "./artifacts.js";
6
+ import { buildConcurrentAssignmentSegments, collectConcurrentAssignmentIntervals, resolveConcurrentWindow, } from "./concurrent-intervals.js";
7
+ const timeOfDaySchema = z.object({
8
+ hours: z.number().int().min(0).max(23),
9
+ minutes: z.number().int().min(0).max(59),
10
+ });
11
+ export const MaxConcurrentAssignmentsSchema = z
12
+ .object({
13
+ assignments: z.number().int().min(0),
14
+ priority: PrioritySchema,
15
+ startTime: timeOfDaySchema.optional(),
16
+ endTime: timeOfDaySchema.optional(),
17
+ })
18
+ .and(entityScope(["members", "roles", "skills"]))
19
+ .and(timeScope(["dateRange", "specificDates", "dayOfWeek", "recurring"]))
20
+ .refine((config) => {
21
+ const hasStartTime = config.startTime !== undefined;
22
+ const hasEndTime = config.endTime !== undefined;
23
+ return hasStartTime === hasEndTime;
24
+ }, {
25
+ message: "Both startTime and endTime must be provided together for partial day concurrent-assignment caps",
26
+ });
27
+ /**
28
+ * Low-level descriptor for the `max-concurrent-assignments` rule.
29
+ *
30
+ * @remarks
31
+ * Caps how many targeted members may be assigned at the same time. Use it for
32
+ * physical capacity constraints that should remain independent from coverage
33
+ * floors. Unlike {@link import("./max-shifts-day.js").maxShiftsDayRuleDescriptor},
34
+ * this counts concurrent overlap, not total assignments on a day.
35
+ *
36
+ * @category Rules
37
+ */
38
+ export const maxConcurrentAssignmentsRuleDescriptor = defineRuleDescriptor({
39
+ name: "max-concurrent-assignments",
40
+ schema: MaxConcurrentAssignmentsSchema,
41
+ compile(config, ctx) {
42
+ const { assignments, priority, startTime, endTime } = config;
43
+ const entityScopeValue = parseEntityScope(config);
44
+ const timeScopeValue = parseTimeScope(config);
45
+ const targetMembers = resolveMembersFromScope(entityScopeValue, [...ctx.members]);
46
+ const activeDays = resolveActiveDaysFromScope(timeScopeValue, [...ctx.days]);
47
+ if (targetMembers.length === 0 || activeDays.length === 0) {
48
+ return { rule: "max-concurrent-assignments", artifacts: [] };
49
+ }
50
+ const windowStart = startTime ? timeOfDayToMinutes(startTime) : undefined;
51
+ const windowEnd = startTime && endTime
52
+ ? normalizeEndMinutes(windowStart ?? 0, timeOfDayToMinutes(endTime))
53
+ : undefined;
54
+ const windowKey = buildWindowKey(startTime, endTime);
55
+ const windowLabel = buildWindowLabel(startTime, endTime);
56
+ const group = ruleGroup(`max-concurrent-assignments:${assignments}:${windowKey}`, `Max ${assignments} concurrent assignment${assignments === 1 ? "" : "s"}${windowLabel}`, entityScopeValue, timeScopeValue);
57
+ const artifacts = activeDays.flatMap((day) => {
58
+ const dayContext = { days: [day.iso], memberIds: targetMembers.map((member) => member.id) };
59
+ const intervals = collectConcurrentAssignmentIntervals(day, targetMembers, ctx.shiftPatterns);
60
+ const window = resolveConcurrentWindow(intervals, windowStart, windowEnd);
61
+ const segments = buildConcurrentAssignmentSegments(intervals, window.start, window.end);
62
+ return segments.flatMap((segment) => {
63
+ const description = `Max ${assignments} concurrent assignment${assignments === 1 ? "" : "s"} on ${day.iso} (${formatTimeRange(segment.start, segment.end)})`;
64
+ const constraintId = `${group.key}:${day.iso}:${segment.start}`;
65
+ const linearTerms = segment.varNames.map((varName) => ({ var: varName, coeff: 1 }));
66
+ return [
67
+ priority === "MANDATORY"
68
+ ? hardConstraint({
69
+ group,
70
+ description,
71
+ context: dayContext,
72
+ validation: reportValidation(constraintId),
73
+ terms: linearTerms,
74
+ comparator: "<=",
75
+ targetValue: assignments,
76
+ })
77
+ : softConstraint({
78
+ group,
79
+ description,
80
+ context: dayContext,
81
+ validation: reportValidation(),
82
+ terms: linearTerms,
83
+ comparator: "<=",
84
+ targetValue: assignments,
85
+ penalty: priorityToPenalty(priority),
86
+ constraintId,
87
+ }),
88
+ ];
89
+ });
90
+ });
91
+ return {
92
+ rule: "max-concurrent-assignments",
93
+ artifacts,
94
+ };
95
+ },
96
+ });
97
+ function buildWindowKey(startTime, endTime) {
98
+ if (!startTime || !endTime) {
99
+ return "all-day";
100
+ }
101
+ return `${formatTimeKey(startTime)}-${formatTimeKey(endTime)}`;
102
+ }
103
+ function buildWindowLabel(startTime, endTime) {
104
+ if (!startTime || !endTime) {
105
+ return "";
106
+ }
107
+ return ` (${formatTimeKey(startTime)}-${formatTimeKey(endTime)})`;
108
+ }
109
+ function formatTimeRange(startMinutes, endMinutes) {
110
+ return `${formatClockMinutes(startMinutes)}-${formatClockMinutes(endMinutes)}`;
111
+ }
112
+ function formatTimeKey(time) {
113
+ return `${String(time.hours).padStart(2, "0")}:${String(time.minutes ?? 0).padStart(2, "0")}`;
114
+ }
115
+ function formatClockMinutes(totalMinutes) {
116
+ const normalized = ((totalMinutes % MINUTES_PER_DAY) + MINUTES_PER_DAY) % MINUTES_PER_DAY;
117
+ const hours = Math.floor(normalized / 60);
118
+ const minutes = normalized % 60;
119
+ return `${String(hours).padStart(2, "0")}:${String(minutes).padStart(2, "0")}`;
120
+ }
121
+ //# sourceMappingURL=max-concurrent-assignments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"max-concurrent-assignments.js","sourceRoot":"","sources":["../../../src/cpsat/rules/max-concurrent-assignments.ts"],"names":[],"mappings":"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"}
@@ -1,27 +1,28 @@
1
1
  import * as z from "zod";
2
- import type { CompilationRule } from "../model-builder.js";
3
- declare const MaxConsecutiveDaysSchema: z.ZodIntersection<z.ZodObject<{
2
+ export declare const MaxConsecutiveDaysSchema: z.ZodIntersection<z.ZodObject<{
4
3
  days: z.ZodNumber;
5
- priority: z.ZodDefault<z.ZodUnion<readonly [z.ZodLiteral<"LOW">, z.ZodLiteral<"MEDIUM">, z.ZodLiteral<"HIGH">, z.ZodLiteral<"MANDATORY">]>>;
4
+ priority: z.ZodDefault<z.ZodEnum<{
5
+ LOW: "LOW";
6
+ MEDIUM: "MEDIUM";
7
+ HIGH: "HIGH";
8
+ MANDATORY: "MANDATORY";
9
+ }>>;
6
10
  }, z.core.$strip>, z.ZodType<import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">, unknown, z.core.$ZodTypeInternals<import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">, unknown>>>;
7
11
  /**
8
- * Configuration for {@link createMaxConsecutiveDaysRule}.
9
- *
10
- * - `days` (required): maximum consecutive days allowed
11
- * - `priority` (required): how strictly the solver enforces this rule
12
- *
13
- * Entity scoping (at most one): `memberIds`, `roleIds`, `skillIds`
12
+ * Configuration for {@link maxConsecutiveDaysRuleDescriptor}.
14
13
  */
15
14
  export type MaxConsecutiveDaysConfig = z.infer<typeof MaxConsecutiveDaysSchema>;
16
15
  /**
17
- * Limits how many consecutive days a person can be assigned.
16
+ * Low-level descriptor for the `max-consecutive-days` rule.
17
+ *
18
+ * @remarks
19
+ * This rule limits the length of each assignment streak by counting assigned
20
+ * days in every sliding window of `days + 1` days.
18
21
  *
19
- * @param config - See {@link MaxConsecutiveDaysConfig}
20
- * @example
21
- * ```ts
22
- * createMaxConsecutiveDaysRule({ days: 5, priority: "MANDATORY" });
23
- * ```
22
+ * @category Rules
24
23
  */
25
- export declare function createMaxConsecutiveDaysRule(config: MaxConsecutiveDaysConfig): CompilationRule;
26
- export {};
24
+ export declare const maxConsecutiveDaysRuleDescriptor: import("../rule-descriptor.js").RuleDescriptor<"max-consecutive-days", {
25
+ days: number;
26
+ priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
27
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">>;
27
28
  //# sourceMappingURL=max-consecutive-days.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"max-consecutive-days.d.ts","sourceRoot":"","sources":["../../../src/cpsat/rules/max-consecutive-days.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAU3D,QAAA,MAAM,wBAAwB;;;iOAKqB,CAAC;AAEpD;;;;;;;GAOG;AACH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAEhF;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,wBAAwB,GAAG,eAAe,CAiF9F"}
1
+ {"version":3,"file":"max-consecutive-days.d.ts","sourceRoot":"","sources":["../../../src/cpsat/rules/max-consecutive-days.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAczB,eAAO,MAAM,wBAAwB;;;;;;;;iOAKc,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAEhF;;;;;;;;GAQG;AACH,eAAO,MAAM,gCAAgC;;;+EAkE3C,CAAC"}