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
@@ -0,0 +1,678 @@
1
+ /**
2
+ * Scheduling rules: constraints, preferences, and time-off.
3
+ *
4
+ * Rules answer "what schedules are allowed or preferred?". Use
5
+ * {@link cover} for lower-bound demand, then use rules for caps, limits, rest
6
+ * periods, time off, fairness, and other constraints on assignments.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * rules: [
11
+ * // Hour and day limits
12
+ * maxHoursPerDay(10),
13
+ * maxHoursPerWeek(48),
14
+ * maxHoursPerWeek(20, { appliesTo: "part-time" }),
15
+ * maxDaysPerWeek(5, { priority: "HIGH" }),
16
+ * targetDaysPerWeek(4, { appliesTo: "full-time", priority: "HIGH" }),
17
+ * minDaysPerWeek(4, { appliesTo: "full-time", priority: "HIGH" }),
18
+ * maxShiftsPerDay(1),
19
+ * maxConcurrentAssignments(5, { appliesTo: "chair_stylist" }),
20
+ * targetPeakConcurrentAssignments(5, { appliesTo: "chair_stylist", dayOfWeek: ["thursday"], priority: "HIGH" }),
21
+ * minRestBetweenShifts(11),
22
+ *
23
+ * // Staffing obligations and preferences
24
+ * mustAssign({ appliesTo: ["diana", "yavuz"] }),
25
+ * timeOff({ appliesTo: "alice", dateRange: { start: "2024-02-01", end: "2024-02-05" } }),
26
+ * timeOff({ appliesTo: "student", dayOfWeek: ["wednesday"], from: t(14) }),
27
+ * preferAssignment({ appliesTo: "waiter" }),
28
+ * avoidAssignment({ appliesTo: "student", dayOfWeek: weekdays }),
29
+ * assignTogether(["alice", "bob"]),
30
+ * ]
31
+ * ```
32
+ *
33
+ * Custom rules can stay type-safe too:
34
+ *
35
+ * ```typescript
36
+ * const debugRuleRegistry = createCpsatRuleRegistry({
37
+ * debug: defineRuleDescriptor({
38
+ * name: "debug",
39
+ * schema: z.object({ flag: z.boolean() }),
40
+ * compile() {
41
+ * return { rule: "debug", artifacts: [] };
42
+ * },
43
+ * }),
44
+ * });
45
+ *
46
+ * const defineDebugRule = defineRuleFor(debugRuleRegistry);
47
+ *
48
+ * schedule({
49
+ * roleIds: ["waiter"],
50
+ * times: { lunch: time({ startTime: t(12), endTime: t(15) }) },
51
+ * coverage: [cover("lunch", "waiter", 1)],
52
+ * shiftPatterns: [shift("lunch", t(12), t(15))],
53
+ * ruleRegistry: debugRuleRegistry,
54
+ * rules: [defineDebugRule("debug", { flag: true })],
55
+ * });
56
+ * ```
57
+ *
58
+ * @module
59
+ */
60
+ import type { DayOfWeek, TimeOfDay } from "../types.js";
61
+ import type { Priority, SoftPriority } from "../cpsat/types.js";
62
+ import type { BuiltInCpsatRuleRegistry, CpsatRuleConfigEntryFor, CpsatRuleRegistry } from "../cpsat/rules/rules.types.js";
63
+ import type { RecurringPeriod } from "../cpsat/rules/scope.types.js";
64
+ /**
65
+ * Scoping options shared by most rule functions.
66
+ *
67
+ * @remarks
68
+ * Default priority is `MANDATORY`. Use `appliesTo` to scope to a
69
+ * role, skill, or member ID. Use time scoping options (`dayOfWeek`,
70
+ * `dateRange`, `dates`) to limit when the rule applies.
71
+ * Scope answers where a rule is evaluated. It does not change the rule's core
72
+ * meaning. For example, `maxDaysPerWeek(4, { dayOfWeek: ["monday"] })` is still
73
+ * a day-cap concept, just scoped to matching scheduling days. Priority is just
74
+ * as important as scope: scope decides where a rule applies, and priority decides how hard the solver should enforce it. Use
75
+ * `"MANDATORY"` for requirements the schedule cannot violate, and softer
76
+ * priorities for things the requirements describe as preferred, ideal, or
77
+ * "where possible".
78
+ * Not all rules support all scoping options. Entity-only rules
79
+ * (e.g., {@link maxConsecutiveDays}) ignore time scoping.
80
+ *
81
+ * @category Rules
82
+ */
83
+ export interface RuleOptions {
84
+ /** Who this rule applies to (role name, skill name, or member ID). */
85
+ appliesTo?: string | string[];
86
+ /** Restrict to specific days of the week. */
87
+ dayOfWeek?: readonly [DayOfWeek, ...DayOfWeek[]];
88
+ /** Restrict to a date range. */
89
+ dateRange?: {
90
+ start: string;
91
+ end: string;
92
+ };
93
+ /** Restrict to specific dates (YYYY-MM-DD). */
94
+ dates?: string[];
95
+ /** Restrict to recurring calendar periods. */
96
+ recurringPeriods?: [RecurringPeriod, ...RecurringPeriod[]];
97
+ /** Defaults to `"MANDATORY"`. */
98
+ priority?: Priority;
99
+ }
100
+ /**
101
+ * Options for rules that support entity scoping only (no time scoping).
102
+ *
103
+ * @remarks
104
+ * Used by rules whose semantics are inherently per-day or per-week
105
+ * (e.g., {@link minHoursPerDay}, {@link maxConsecutiveDays}) and cannot
106
+ * be meaningfully restricted to a date range or day of week. `priority`
107
+ * still controls whether the rule is a hard requirement or a softer target.
108
+ *
109
+ * @category Rules
110
+ */
111
+ export interface EntityOnlyRuleOptions {
112
+ /** Who this rule applies to (role name, skill name, or member ID). */
113
+ appliesTo?: string | string[];
114
+ /** Defaults to `"MANDATORY"`. */
115
+ priority?: Priority;
116
+ }
117
+ /**
118
+ * Options for {@link timeOff}.
119
+ *
120
+ * @remarks
121
+ * At least one time scoping field is required (`dayOfWeek`, `dateRange`,
122
+ * `dates`, or `recurringPeriods`). Use `from`/`until` to block only part
123
+ * of a day.
124
+ *
125
+ * @category Rules
126
+ */
127
+ export interface TimeOffOptions {
128
+ /** Who this rule applies to (role name, skill name, or member ID). */
129
+ appliesTo?: string | string[];
130
+ /** Off from this time until end of day. */
131
+ from?: TimeOfDay;
132
+ /** Off from start of day until this time. */
133
+ until?: TimeOfDay;
134
+ /** Restrict to specific days of the week. */
135
+ dayOfWeek?: readonly [DayOfWeek, ...DayOfWeek[]];
136
+ /** Restrict to a date range. */
137
+ dateRange?: {
138
+ start: string;
139
+ end: string;
140
+ };
141
+ /** Restrict to specific dates (YYYY-MM-DD). */
142
+ dates?: string[];
143
+ /** Restrict to recurring calendar periods. */
144
+ recurringPeriods?: [RecurringPeriod, ...RecurringPeriod[]];
145
+ /** Defaults to `"MANDATORY"`. */
146
+ priority?: Priority;
147
+ }
148
+ /**
149
+ * Options for {@link assignTogether}.
150
+ *
151
+ * @category Rules
152
+ */
153
+ export interface AssignTogetherOptions {
154
+ /** Defaults to `"MANDATORY"`. */
155
+ priority?: Priority;
156
+ }
157
+ /**
158
+ * Options for {@link maxConcurrentAssignments}.
159
+ *
160
+ * @remarks
161
+ * Use this when the business has a hard productive cap that is independent from
162
+ * its coverage floor, for example when only a fixed number of assignments can
163
+ * overlap productively at once. Omit `startTime`/`endTime` to cap concurrent
164
+ * assignments across the full day. Provide both together to limit concurrency
165
+ * only within a specific time window.
166
+ *
167
+ * @category Rules
168
+ */
169
+ export interface MaxConcurrentAssignmentsOptions extends RuleOptions {
170
+ /** Optional start of the capped time window. */
171
+ startTime?: TimeOfDay;
172
+ /** Optional end of the capped time window. */
173
+ endTime?: TimeOfDay;
174
+ }
175
+ /**
176
+ * Options for {@link targetDaysPerWeek}.
177
+ *
178
+ * @remarks
179
+ * Use this for stated weekly patterns like "works a 4-day week" when that
180
+ * pattern should remain flexible. This is soft-only by design. Pair it with
181
+ * {@link maxDaysPerWeek} when the same number is also a hard cap, and use
182
+ * {@link minDaysPerWeek} only when the requirements explicitly require a minimum.
183
+ *
184
+ * @category Rules
185
+ */
186
+ export interface TargetDaysPerWeekOptions extends Omit<EntityOnlyRuleOptions, "priority"> {
187
+ /** Soft only. Defaults to `"HIGH"`. */
188
+ priority?: SoftPriority;
189
+ }
190
+ /**
191
+ * Options for {@link targetPeakConcurrentAssignments}.
192
+ *
193
+ * @remarks
194
+ * Use this when the business wants to hit a peak concurrency target within a
195
+ * day, without making that target a lower bound across the whole day. This is
196
+ * soft-only by design. Unlike {@link cover}, this helper does not establish a
197
+ * minimum that must hold throughout a semantic time. Instead it shifts the
198
+ * solution toward reaching the desired peak within the scoped days. Use
199
+ * {@link cover} for a whole-window minimum, and pair
200
+ * this helper with
201
+ * {@link maxConcurrentAssignments} when the same number is also a hard cap.
202
+ * This is useful for language like "fill all 5 chairs on peak days" or
203
+ * "ideally reach full capacity during the busy point".
204
+ *
205
+ * @category Rules
206
+ */
207
+ export interface TargetPeakConcurrentAssignmentsOptions extends Omit<RuleOptions, "priority"> {
208
+ /** Soft only. Defaults to `"HIGH"`. */
209
+ priority?: SoftPriority;
210
+ }
211
+ /**
212
+ * Context passed to a rule's resolve function during compilation.
213
+ *
214
+ * Contains the declared roles, skills, and member IDs so the resolver
215
+ * can translate user-facing fields (like `appliesTo`) into internal
216
+ * scoping fields.
217
+ */
218
+ export interface RuleResolveContext {
219
+ readonly roles: ReadonlySet<string>;
220
+ readonly skills: ReadonlySet<string>;
221
+ readonly memberIds: ReadonlySet<string>;
222
+ }
223
+ interface RuleEntryBase<Name extends string = string> {
224
+ readonly _type: "rule";
225
+ readonly _rule: Name;
226
+ /**
227
+ * Optional custom resolver. When present, `resolveRules()` calls this
228
+ * instead of the default translation path. Built-in rules that need
229
+ * special field mapping (e.g., `timeOff`, `assignTogether`) attach one;
230
+ * all other rules use the default resolver.
231
+ */
232
+ readonly _resolve?: (ctx: RuleResolveContext) => Record<string, unknown> & {
233
+ name: Name;
234
+ };
235
+ }
236
+ /**
237
+ * A typed rule entry returned by rule helpers and {@link defineRule}.
238
+ *
239
+ * @remarks
240
+ * Pass these directly into the `rules` array of {@link ScheduleConfig}. The
241
+ * internal fields are resolved during compilation.
242
+ *
243
+ * @category Rules
244
+ */
245
+ export type RuleEntry<Name extends string = string, Fields extends object = Record<string, unknown>> = RuleEntryBase<Name> & Fields & Record<string, unknown>;
246
+ type TypedRuleEntryFor<Registry extends CpsatRuleRegistry> = {
247
+ [K in keyof Registry & string]: RuleEntry<K, Omit<CpsatRuleConfigEntryFor<Pick<Registry, K>>, "name">>;
248
+ }[keyof Registry & string];
249
+ /**
250
+ * A rule entry accepted by {@link ScheduleConfig.rules}.
251
+ *
252
+ * @remarks
253
+ * Built-in rule helpers return entries that are always valid. Custom rules created
254
+ * via {@link defineRule} are checked against the active rule registry when passed
255
+ * to {@link schedule} or {@link partialSchedule}. For registry-bound authoring,
256
+ * prefer {@link defineRuleFor}.
257
+ *
258
+ * @category Rules
259
+ */
260
+ export type ScheduleRuleEntry<TRuleRegistry extends CpsatRuleRegistry = BuiltInCpsatRuleRegistry> = TypedRuleEntryFor<TRuleRegistry>;
261
+ type SanitizedRuleFields<Fields extends object> = Omit<Fields, "_type" | "_rule">;
262
+ type PeriodLength = {
263
+ type: "weeks";
264
+ value: number;
265
+ } | {
266
+ type: "months";
267
+ value: number;
268
+ };
269
+ type TimeOffRuleEntry = RuleEntry<"time-off", TimeOffOptions>;
270
+ type AssignTogetherRuleEntry = RuleEntry<"assign-together", {
271
+ members: [string, string, ...string[]];
272
+ } & AssignTogetherOptions>;
273
+ type DaysOfWeekPerPeriodRuleFields = {
274
+ days: number;
275
+ dayOfWeek: readonly [DayOfWeek, ...DayOfWeek[]];
276
+ period: PeriodLength;
277
+ appliesTo?: string | string[];
278
+ priority?: Priority;
279
+ };
280
+ type MaxDaysOfWeekPerPeriodRuleEntry = RuleEntry<"max-days-of-week-per-period", DaysOfWeekPerPeriodRuleFields>;
281
+ type MinDaysOfWeekPerPeriodRuleEntry = RuleEntry<"min-days-of-week-per-period", DaysOfWeekPerPeriodRuleFields>;
282
+ /**
283
+ * Creates a rule entry for use in {@link ScheduleConfig.rules}.
284
+ *
285
+ * Built-in rules use the helpers (`maxHoursPerDay`, `timeOff`, etc.). Custom
286
+ * rules can use `defineRule` to create entries that plug into the same
287
+ * resolution and compilation pipeline.
288
+ *
289
+ * @remarks
290
+ * The returned entry always preserves its rule name and fields. To validate custom
291
+ * rules at the point of creation, use {@link defineRuleFor} to bind `defineRule`
292
+ * to a specific registry.
293
+ *
294
+ * @param name - Rule name. Must match a key in the active rule registry.
295
+ * @param fields - Rule-specific configuration fields.
296
+ * @param resolve - Optional custom resolver. When omitted, the default
297
+ * resolution applies: `appliesTo` is mapped to `roleIds`/`skillIds`/`memberIds`,
298
+ * `dates` is renamed to `specificDates`, and all other fields pass through.
299
+ */
300
+ export declare function defineRule<const Name extends string, const Fields extends object>(name: Name, fields: Fields, resolve?: (ctx: RuleResolveContext) => Record<string, unknown> & {
301
+ name: Name;
302
+ }): RuleEntry<Name, SanitizedRuleFields<Fields>>;
303
+ /**
304
+ * Creates a registry-bound `defineRule` helper.
305
+ *
306
+ * @remarks
307
+ * Use this when authoring custom rules directly and you want immediate
308
+ * compile-time validation of the rule name and config fields against a specific
309
+ * rule registry.
310
+ *
311
+ * @category Rules
312
+ */
313
+ export declare function defineRuleFor<TRuleRegistry extends CpsatRuleRegistry>(ruleRegistry: TRuleRegistry): <const Name extends keyof TRuleRegistry & string>(name: Name, fields: Omit<CpsatRuleConfigEntryFor<Pick<TRuleRegistry, Name>>, "name">, resolve?: (ctx: RuleResolveContext) => CpsatRuleConfigEntryFor<Pick<TRuleRegistry, Name>>) => RuleEntry<Name, SanitizedRuleFields<Omit<CpsatRuleConfigEntryFor<Pick<TRuleRegistry, Name>>, "name">>>;
314
+ /**
315
+ * Limits hours per day.
316
+ *
317
+ * @remarks
318
+ * Use this when the requirements or operating constraints explicitly impose a
319
+ * daily hours cap. Do not infer it just from the chosen shift pattern lengths.
320
+ *
321
+ * @category Rules
322
+ */
323
+ export declare function maxHoursPerDay(hours: number, opts?: RuleOptions): RuleEntry<"max-hours-day", {
324
+ hours: number;
325
+ } & RuleOptions>;
326
+ /**
327
+ * Limits hours per scheduling week.
328
+ *
329
+ * @remarks
330
+ * Use this when the requirements or operating constraints explicitly impose a
331
+ * weekly hours cap. Do not infer it just from a stated working pattern such
332
+ * as "4-day week" unless the requirements also make the hour limit explicit.
333
+ *
334
+ * @category Rules
335
+ */
336
+ export declare function maxHoursPerWeek(hours: number, opts?: RuleOptions): RuleEntry<"max-hours-week", {
337
+ hours: number;
338
+ } & RuleOptions>;
339
+ /**
340
+ * Minimum hours when assigned on a day.
341
+ *
342
+ * @category Rules
343
+ */
344
+ export declare function minHoursPerDay(hours: number, opts?: EntityOnlyRuleOptions): RuleEntry<"min-hours-day", {
345
+ hours: number;
346
+ } & EntityOnlyRuleOptions>;
347
+ /**
348
+ * Minimum hours per scheduling week.
349
+ *
350
+ * @category Rules
351
+ */
352
+ export declare function minHoursPerWeek(hours: number, opts?: EntityOnlyRuleOptions): RuleEntry<"min-hours-week", {
353
+ hours: number;
354
+ } & EntityOnlyRuleOptions>;
355
+ /**
356
+ * Caps assigned days per scheduling week.
357
+ *
358
+ * @remarks
359
+ * Use this when the requirements explicitly impose a weekly day cap. If the same
360
+ * number is the normal weekly pattern rather than just a hard limit, pair it
361
+ * with {@link targetDaysPerWeek}.
362
+ *
363
+ * @category Rules
364
+ */
365
+ export declare function maxDaysPerWeek(days: number, opts?: RuleOptions): RuleEntry<"max-days-week", {
366
+ days: number;
367
+ } & RuleOptions>;
368
+ /**
369
+ * Enforces a minimum number of assigned days per scheduling week.
370
+ *
371
+ * @remarks
372
+ * Use this when the requirements explicitly require a weekly minimum. Language like
373
+ * "works a 4-day week" often implies a hard cap via {@link maxDaysPerWeek}
374
+ * and possibly a softer target via {@link targetDaysPerWeek}, not a mandatory
375
+ * weekly minimum for every member.
376
+ *
377
+ * @category Rules
378
+ */
379
+ export declare function minDaysPerWeek(days: number, opts?: EntityOnlyRuleOptions): RuleEntry<"min-days-week", {
380
+ days: number;
381
+ } & EntityOnlyRuleOptions>;
382
+ /**
383
+ * Softly targets assigned days per scheduling week.
384
+ *
385
+ * @remarks
386
+ * Use this for stated working patterns like "works a 4-day week" when the
387
+ * pattern should remain the norm but can flex around holidays, time off, or
388
+ * other tradeoffs. Deviations in either direction are penalized, so working
389
+ * fewer days or more days than the target both count as misses. Pair it with
390
+ * {@link maxDaysPerWeek} when the same number is also a hard cap, and use
391
+ * {@link minDaysPerWeek} only when the requirements explicitly require a minimum.
392
+ *
393
+ * @param days - Target number of assigned days per scheduling week.
394
+ * @param opts - Optional entity scope and soft priority.
395
+ *
396
+ * @category Rules
397
+ */
398
+ export declare function targetDaysPerWeek(days: number, opts?: TargetDaysPerWeekOptions): RuleEntry<"target-days-week", {
399
+ days: number;
400
+ } & TargetDaysPerWeekOptions>;
401
+ /**
402
+ * Maximum distinct shifts per day.
403
+ *
404
+ * @category Rules
405
+ */
406
+ export declare function maxShiftsPerDay(shifts: number, opts?: RuleOptions): RuleEntry<"max-shifts-day", {
407
+ shifts: number;
408
+ } & RuleOptions>;
409
+ /**
410
+ * Caps how many targeted assignments may overlap at the same time.
411
+ *
412
+ * @remarks
413
+ * Use this for hard productive capacity limits that should stay separate from
414
+ * the minimum staffing requirement expressed by {@link cover}. Pair a
415
+ * lower-bound `cover(...)` with `maxConcurrentAssignments(...)` when the
416
+ * business needs both demand and capacity modeled explicitly.
417
+ *
418
+ * On days with staggered opening and closing shifts, keep lower-bound coverage
419
+ * scoped to the windows that truly need minimum staffing. Do not turn a total
420
+ * daily headcount target into a whole-day lower-bound `cover(...)` unless the
421
+ * business explicitly requires that many people in every overlapping bucket.
422
+ *
423
+ * Unlike {@link maxShiftsPerDay}, this limits simultaneous overlap, not total
424
+ * assignments on a day.
425
+ *
426
+ * @param assignments - Maximum number of concurrent overlapping assignments.
427
+ * @param opts - Optional scope and time-window settings.
428
+ *
429
+ * @category Rules
430
+ */
431
+ export declare function maxConcurrentAssignments(assignments: number, opts?: RuleOptions & {
432
+ startTime?: TimeOfDay;
433
+ endTime?: TimeOfDay;
434
+ }): RuleEntry<"max-concurrent-assignments", {
435
+ assignments: number;
436
+ } & MaxConcurrentAssignmentsOptions>;
437
+ /**
438
+ * Softly targets the daily peak number of concurrent overlapping assignments.
439
+ *
440
+ * @remarks
441
+ * Use this when the business wants to hit full productive occupancy at the
442
+ * busy point of a day, but does not mean that same number must be present
443
+ * throughout the full span. This is not a whole-day lower bound. Pair it with
444
+ * {@link cover} for edge minima and with
445
+ * {@link maxConcurrentAssignments} when the same value is also a hard cap.
446
+ * Prefer this over a whole-day `cover(...)` when the brief means "reach the
447
+ * peak" rather than "maintain this minimum throughout the day".
448
+ *
449
+ * This is a rule-level peak target, not a variant of {@link cover}. Do not
450
+ * introduce a synthetic semantic time just to attach a whole-window
451
+ * `cover(...)` when the requirement is really about the day's peak.
452
+ *
453
+ * @param assignments - Target peak number of concurrent overlapping assignments.
454
+ * @param opts - Optional scope and soft priority.
455
+ *
456
+ * @category Rules
457
+ */
458
+ export declare function targetPeakConcurrentAssignments(assignments: number, opts?: TargetPeakConcurrentAssignmentsOptions): RuleEntry<"target-peak-concurrent-assignments", {
459
+ assignments: number;
460
+ } & TargetPeakConcurrentAssignmentsOptions>;
461
+ /**
462
+ * Maximum consecutive assigned days.
463
+ *
464
+ * @category Rules
465
+ */
466
+ export declare function maxConsecutiveDays(days: number, opts?: EntityOnlyRuleOptions): RuleEntry<"max-consecutive-days", {
467
+ days: number;
468
+ } & EntityOnlyRuleOptions>;
469
+ /**
470
+ * Once working, continue for at least this many consecutive days.
471
+ *
472
+ * @category Rules
473
+ */
474
+ export declare function minConsecutiveDays(days: number, opts?: EntityOnlyRuleOptions): RuleEntry<"min-consecutive-days", {
475
+ days: number;
476
+ } & EntityOnlyRuleOptions>;
477
+ /**
478
+ * Minimum rest hours between shifts.
479
+ *
480
+ * @category Rules
481
+ */
482
+ export declare function minRestBetweenShifts(hours: number, opts?: EntityOnlyRuleOptions): RuleEntry<"min-rest-between-shifts", {
483
+ hours: number;
484
+ } & EntityOnlyRuleOptions>;
485
+ /**
486
+ * Nudge the solver toward scheduling targeted members.
487
+ *
488
+ * @remarks
489
+ * Soft constraint. The solver adds a bonus for each assignment of the
490
+ * targeted members, making them more likely to appear on the schedule.
491
+ * Use `priority` to control how strong the nudge is; higher priority
492
+ * means a larger bonus. Even at `"MANDATORY"` strength the solver can
493
+ * still leave a member unassigned if hard constraints prevent it.
494
+ *
495
+ * Opposite of {@link avoidAssignment}. Both map to the same underlying
496
+ * `assignment-priority` rule with different directions.
497
+ *
498
+ * @param opts - See {@link RuleOptions}
499
+ *
500
+ * @category Rules
501
+ */
502
+ export declare function preferAssignment(opts?: RuleOptions): RuleEntry<"assignment-priority", {
503
+ preference: "prefer";
504
+ } & RuleOptions>;
505
+ /**
506
+ * Nudge the solver away from scheduling targeted members.
507
+ *
508
+ * @remarks
509
+ * Soft constraint. The solver adds a penalty for each assignment of the
510
+ * targeted members, making them less likely to appear on the schedule.
511
+ * The member is still assigned when coverage requires it; the penalty
512
+ * only matters when the solver has a choice.
513
+ *
514
+ * Opposite of {@link preferAssignment}. Both map to the same underlying
515
+ * `assignment-priority` rule with different directions.
516
+ *
517
+ * @param opts - See {@link RuleOptions}
518
+ *
519
+ * @category Rules
520
+ */
521
+ export declare function avoidAssignment(opts?: RuleOptions): RuleEntry<"assignment-priority", {
522
+ preference: "avoid";
523
+ } & RuleOptions>;
524
+ /**
525
+ * Steer a multi-role member toward shifts tagged with a specific role.
526
+ *
527
+ * @remarks
528
+ * Penalizes assignment to shift patterns whose `roleIds` do not include
529
+ * the preferred role. The member is still assigned to other roles when
530
+ * coverage requires it; the penalty only matters when the solver has a
531
+ * choice. Shift patterns without any `roleIds` (open to all) are also
532
+ * penalized since they are not explicitly tagged with the preferred role.
533
+ *
534
+ * The targeted members must actually hold the preferred role in their
535
+ * `roleIds`. If none of them do, compilation reports an error because
536
+ * the rule would silently penalize all their assignments (the opposite
537
+ * of the intent).
538
+ *
539
+ * Typical use case: a waiter who can cover kitchen pass shifts in a
540
+ * pinch. Give the member both roles (`roleIds: ["waiter", "pass"]`)
541
+ * and use `preferRole("waiter", ...)` so the solver keeps them on the
542
+ * floor unless the pass team is short-staffed.
543
+ *
544
+ * @param roleId - The role to prefer
545
+ * @param opts - See {@link EntityOnlyRuleOptions}
546
+ *
547
+ * @category Rules
548
+ */
549
+ export declare function preferRole(roleId: string, opts?: EntityOnlyRuleOptions): RuleEntry<"role-preference", {
550
+ roleId: string;
551
+ } & EntityOnlyRuleOptions>;
552
+ /**
553
+ * Steer a member toward shifts at a specific location.
554
+ *
555
+ * @remarks
556
+ * Penalizes assignment to shift patterns whose `locationId` does not
557
+ * match the preferred location. The member is still assigned elsewhere
558
+ * when coverage requires it.
559
+ *
560
+ * @param locationId - The location to prefer
561
+ * @param opts - See {@link EntityOnlyRuleOptions}
562
+ *
563
+ * @category Rules
564
+ */
565
+ export declare function preferLocation(locationId: string, opts?: EntityOnlyRuleOptions): RuleEntry<"location-preference", {
566
+ locationId: string;
567
+ } & EntityOnlyRuleOptions>;
568
+ /**
569
+ * Guarantees that targeted members appear on the schedule each week.
570
+ *
571
+ * @remarks
572
+ * Use for staffing obligations: salaried employees who are paid regardless
573
+ * of whether they work, or contracted staff who must be rostered. The solver
574
+ * ensures each targeted member has at least one assignment per scheduling week.
575
+ *
576
+ * Always a soft constraint (HIGH priority internally). The schedule still
577
+ * generates when a member genuinely cannot be placed (e.g., full week of
578
+ * absences). Violations surface as validation warnings with distinct
579
+ * messaging from {@link minDaysPerWeek}. Priority is not configurable;
580
+ * the rule name communicates the intent.
581
+ *
582
+ * @category Rules
583
+ */
584
+ export declare function mustAssign(opts?: {
585
+ appliesTo?: string | string[];
586
+ }): RuleEntry<"must-assign", {
587
+ appliesTo?: string | string[];
588
+ }>;
589
+ /**
590
+ * Block assignments during specified periods.
591
+ * Requires at least one time scope (`dayOfWeek`, `dateRange`, `dates`, or `from`/`until`).
592
+ *
593
+ * @category Rules
594
+ */
595
+ export declare function timeOff(opts: TimeOffOptions): TimeOffRuleEntry;
596
+ /**
597
+ * Members work the same shifts on days they are both assigned.
598
+ *
599
+ * @category Rules
600
+ */
601
+ export declare function assignTogether(memberIds: [string, string, ...string[]], opts?: AssignTogetherOptions): AssignTogetherRuleEntry;
602
+ /**
603
+ * Options for {@link maxDaysOfWeekPerPeriod} and {@link minDaysOfWeekPerPeriod}.
604
+ *
605
+ * Exactly one of `weeks` or `months` must be provided to define the
606
+ * repeating period. Week periods align to `weekStartsOn`. Month periods
607
+ * align to calendar month boundaries.
608
+ *
609
+ * @category Rules
610
+ */
611
+ export type DaysOfWeekPerPeriodOptions = {
612
+ /** Scope to role, skill, or member ID. */
613
+ appliesTo?: string | string[];
614
+ /** Default `MANDATORY`. */
615
+ priority?: Priority;
616
+ } & ({
617
+ weeks: number;
618
+ months?: never;
619
+ } | {
620
+ months: number;
621
+ weeks?: never;
622
+ });
623
+ /**
624
+ * Caps how many times a person works on specific days of the week within
625
+ * each period.
626
+ *
627
+ * @remarks
628
+ * The scheduling window is divided into non-overlapping chunks of the
629
+ * configured period length. Within each chunk, only days matching the
630
+ * `dayOfWeek` filter are counted. The constraint bounds that count.
631
+ *
632
+ * @param days - Maximum number of matching days allowed per period.
633
+ * @param dayOfWeek - Which days of the week count toward the limit.
634
+ * @param opts - Period length and optional scoping.
635
+ *
636
+ * @category Rules
637
+ */
638
+ export declare function maxDaysOfWeekPerPeriod(days: number, dayOfWeek: readonly [DayOfWeek, ...DayOfWeek[]], opts: DaysOfWeekPerPeriodOptions): MaxDaysOfWeekPerPeriodRuleEntry;
639
+ /**
640
+ * Enforces a minimum number of times a person works on specific days of the
641
+ * week within each period.
642
+ *
643
+ * @remarks
644
+ * The scheduling window is divided into non-overlapping chunks of the
645
+ * configured period length. Within each chunk, only days matching the
646
+ * `dayOfWeek` filter are counted. The constraint ensures the count meets
647
+ * the minimum.
648
+ *
649
+ * When the scheduling window does not align evenly with the period
650
+ * boundaries, the last chunk may contain fewer matching days than the
651
+ * minimum. A MANDATORY priority will make the model infeasible in that
652
+ * case. Use a soft priority (HIGH, MEDIUM, LOW) if partial periods at
653
+ * the edges of the window are expected.
654
+ *
655
+ * @param days - Minimum number of matching days required per period.
656
+ * @param dayOfWeek - Which days of the week count toward the limit.
657
+ * @param opts - Period length and optional scoping.
658
+ *
659
+ * @category Rules
660
+ */
661
+ export declare function minDaysOfWeekPerPeriod(days: number, dayOfWeek: readonly [DayOfWeek, ...DayOfWeek[]], opts: DaysOfWeekPerPeriodOptions): MinDaysOfWeekPerPeriodRuleEntry;
662
+ /**
663
+ * Resolves an `appliesTo` value into entity scope fields.
664
+ *
665
+ * Each target string is checked against roles, skills, then member IDs.
666
+ * If all targets resolve to the same namespace, they are combined into one
667
+ * scope field. If they span namespaces, an error is thrown; the caller
668
+ * should use separate rule entries instead.
669
+ *
670
+ * @internal
671
+ */
672
+ export declare function resolveAppliesTo(appliesTo: string | string[] | undefined, roles: ReadonlySet<string>, skills: ReadonlySet<string>, memberIds: ReadonlySet<string>): {
673
+ memberIds?: [string, ...string[]];
674
+ roleIds?: [string, ...string[]];
675
+ skillIds?: [string, ...string[]];
676
+ };
677
+ export {};
678
+ //# sourceMappingURL=rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/schedule/rules.ts"],"names":[],"mappings":"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"}