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,6 +1,21 @@
1
1
  /**
2
2
  * Cost optimization rules: minimize labor cost with modifiers.
3
3
  *
4
+ *
5
+ * @example
6
+ * ```typescript
7
+ * rules: [
8
+ * minimizeCost(),
9
+ * dayMultiplier(1.5, { dayOfWeek: weekend }),
10
+ * overtimeMultiplier({ after: 40, factor: 1.5 }),
11
+ * dailyOvertimeSurcharge({ after: 8, amount: 500 }),
12
+ * tieredOvertimeMultiplier([
13
+ * { after: 40, factor: 1.5 },
14
+ * { after: 48, factor: 2.0 },
15
+ * ]),
16
+ * ]
17
+ * ```
18
+ *
4
19
  * @module
5
20
  */
6
21
  import type { DayOfWeek, TimeOfDay } from "../types.js";
@@ -51,14 +66,9 @@ export interface CostRuleOptions {
51
66
  * - `dailyOvertimeSurcharge({ after, amount }, opts?)` - daily overtime surcharge
52
67
  * - `tieredOvertimeMultiplier(tiers, opts?)` - multiple overtime thresholds
53
68
  *
54
- * @example
55
- * ```ts
56
- * minimizeCost()
57
- * ```
58
- *
59
69
  * @category Cost Optimization
60
70
  */
61
- export declare function minimizeCost(opts?: CostRuleOptions): RuleEntry;
71
+ export declare function minimizeCost(opts?: CostRuleOptions): RuleEntry<"minimize-cost", CostRuleOptions>;
62
72
  /**
63
73
  * Multiplies the base rate for assignments on specified days.
64
74
  *
@@ -67,13 +77,10 @@ export declare function minimizeCost(opts?: CostRuleOptions): RuleEntry;
67
77
  * this rule adds only the extra portion above 1x.
68
78
  *
69
79
  * @category Cost Optimization
70
- *
71
- * @example Weekend multiplier
72
- * ```typescript
73
- * dayMultiplier(1.5, { dayOfWeek: weekend })
74
- * ```
75
80
  */
76
- export declare function dayMultiplier(factor: number, opts?: CostRuleOptions): RuleEntry;
81
+ export declare function dayMultiplier(factor: number, opts?: CostRuleOptions): RuleEntry<"day-cost-multiplier", {
82
+ factor: number;
83
+ } & CostRuleOptions>;
77
84
  /**
78
85
  * Adds a flat extra amount per hour for assignments on specified days.
79
86
  *
@@ -81,13 +88,10 @@ export declare function dayMultiplier(factor: number, opts?: CostRuleOptions): R
81
88
  * The surcharge is independent of the member's base rate.
82
89
  *
83
90
  * @category Cost Optimization
84
- *
85
- * @example Weekend surcharge
86
- * ```typescript
87
- * daySurcharge(500, { dayOfWeek: weekend })
88
- * ```
89
91
  */
90
- export declare function daySurcharge(amountPerHour: number, opts?: CostRuleOptions): RuleEntry;
92
+ export declare function daySurcharge(amountPerHour: number, opts?: CostRuleOptions): RuleEntry<"day-cost-surcharge", {
93
+ amountPerHour: number;
94
+ } & CostRuleOptions>;
91
95
  /**
92
96
  * Adds a flat surcharge per hour for the portion of a shift that overlaps a time-of-day window.
93
97
  *
@@ -100,16 +104,17 @@ export declare function daySurcharge(amountPerHour: number, opts?: CostRuleOptio
100
104
  * @param opts - Entity and time scoping
101
105
  *
102
106
  * @category Cost Optimization
103
- *
104
- * @example Night differential
105
- * ```typescript
106
- * timeSurcharge(200, { from: t(22), until: t(6) })
107
- * ```
108
107
  */
109
108
  export declare function timeSurcharge(amountPerHour: number, window: {
110
109
  from: TimeOfDay;
111
110
  until: TimeOfDay;
112
- }, opts?: CostRuleOptions): RuleEntry;
111
+ }, opts?: CostRuleOptions): RuleEntry<"time-cost-surcharge", {
112
+ amountPerHour: number;
113
+ window: {
114
+ from: TimeOfDay;
115
+ until: TimeOfDay;
116
+ };
117
+ } & CostRuleOptions>;
113
118
  /**
114
119
  * Applies a multiplier to hours beyond a weekly threshold.
115
120
  *
@@ -118,16 +123,14 @@ export declare function timeSurcharge(amountPerHour: number, window: {
118
123
  * counted by {@link minimizeCost}).
119
124
  *
120
125
  * @category Cost Optimization
121
- *
122
- * @example
123
- * ```typescript
124
- * overtimeMultiplier({ after: 40, factor: 1.5 })
125
- * ```
126
126
  */
127
127
  export declare function overtimeMultiplier(opts: {
128
128
  after: number;
129
129
  factor: number;
130
- } & CostRuleOptions): RuleEntry;
130
+ } & CostRuleOptions): RuleEntry<"overtime-weekly-multiplier", {
131
+ after: number;
132
+ factor: number;
133
+ } & CostRuleOptions>;
131
134
  /**
132
135
  * Adds a flat surcharge per hour beyond a weekly threshold.
133
136
  *
@@ -135,16 +138,14 @@ export declare function overtimeMultiplier(opts: {
135
138
  * The surcharge is independent of the member's base rate.
136
139
  *
137
140
  * @category Cost Optimization
138
- *
139
- * @example
140
- * ```typescript
141
- * overtimeSurcharge({ after: 40, amount: 1000 })
142
- * ```
143
141
  */
144
142
  export declare function overtimeSurcharge(opts: {
145
143
  after: number;
146
144
  amount: number;
147
- } & CostRuleOptions): RuleEntry;
145
+ } & CostRuleOptions): RuleEntry<"overtime-weekly-surcharge", {
146
+ after: number;
147
+ amount: number;
148
+ } & CostRuleOptions>;
148
149
  /**
149
150
  * Applies a multiplier to hours beyond a daily threshold.
150
151
  *
@@ -153,16 +154,14 @@ export declare function overtimeSurcharge(opts: {
153
154
  * counted by {@link minimizeCost}).
154
155
  *
155
156
  * @category Cost Optimization
156
- *
157
- * @example
158
- * ```typescript
159
- * dailyOvertimeMultiplier({ after: 8, factor: 1.5 })
160
- * ```
161
157
  */
162
158
  export declare function dailyOvertimeMultiplier(opts: {
163
159
  after: number;
164
160
  factor: number;
165
- } & CostRuleOptions): RuleEntry;
161
+ } & CostRuleOptions): RuleEntry<"overtime-daily-multiplier", {
162
+ after: number;
163
+ factor: number;
164
+ } & CostRuleOptions>;
166
165
  /**
167
166
  * Adds a flat surcharge per hour beyond a daily threshold.
168
167
  *
@@ -170,16 +169,14 @@ export declare function dailyOvertimeMultiplier(opts: {
170
169
  * The surcharge is independent of the member's base rate.
171
170
  *
172
171
  * @category Cost Optimization
173
- *
174
- * @example
175
- * ```typescript
176
- * dailyOvertimeSurcharge({ after: 8, amount: 500 })
177
- * ```
178
172
  */
179
173
  export declare function dailyOvertimeSurcharge(opts: {
180
174
  after: number;
181
175
  amount: number;
182
- } & CostRuleOptions): RuleEntry;
176
+ } & CostRuleOptions): RuleEntry<"overtime-daily-surcharge", {
177
+ after: number;
178
+ amount: number;
179
+ } & CostRuleOptions>;
183
180
  /**
184
181
  * Applies multiple overtime thresholds with increasing multipliers.
185
182
  *
@@ -188,17 +185,8 @@ export declare function dailyOvertimeSurcharge(opts: {
188
185
  * Tiers must be sorted by threshold ascending.
189
186
  *
190
187
  * @category Cost Optimization
191
- *
192
- * @example
193
- * ```typescript
194
- * // Hours 0-40: base rate
195
- * // Hours 40-48: 1.5x
196
- * // Hours 48+: 2.0x
197
- * tieredOvertimeMultiplier([
198
- * { after: 40, factor: 1.5 },
199
- * { after: 48, factor: 2.0 },
200
- * ])
201
- * ```
202
188
  */
203
- export declare function tieredOvertimeMultiplier(tiers: [OvertimeTier, ...OvertimeTier[]], opts?: CostRuleOptions): RuleEntry;
189
+ export declare function tieredOvertimeMultiplier(tiers: [OvertimeTier, ...OvertimeTier[]], opts?: CostRuleOptions): RuleEntry<"overtime-tiered-multiplier", {
190
+ tiers: [OvertimeTier, ...OvertimeTier[]];
191
+ } & CostRuleOptions>;
204
192
  //# sourceMappingURL=cost.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../../src/schedule/cost.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8CAA8C,CAAC;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAO5C;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC9B,6CAA6C;IAC7C,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;IACjD,gCAAgC;IAChC,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,CAAC,eAAe,EAAE,GAAG,eAAe,EAAE,CAAC,CAAC;CAC5D;AAUD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,eAAe,GAAG,SAAS,CAE9D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,SAAS,CAE/E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,SAAS,CAErF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAC3B,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,EAC7C,IAAI,CAAC,EAAE,eAAe,GACrB,SAAS,CAEX;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,eAAe,GACxD,SAAS,CAEX;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,eAAe,GACxD,SAAS,CAEX;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,eAAe,GACxD,SAAS,CAEX;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,eAAe,GACxD,SAAS,CAEX;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,CAAC,YAAY,EAAE,GAAG,YAAY,EAAE,CAAC,EACxC,IAAI,CAAC,EAAE,eAAe,GACrB,SAAS,CAEX"}
1
+ {"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../../src/schedule/cost.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,21 @@
1
1
  /**
2
2
  * Cost optimization rules: minimize labor cost with modifiers.
3
3
  *
4
+ *
5
+ * @example
6
+ * ```typescript
7
+ * rules: [
8
+ * minimizeCost(),
9
+ * dayMultiplier(1.5, { dayOfWeek: weekend }),
10
+ * overtimeMultiplier({ after: 40, factor: 1.5 }),
11
+ * dailyOvertimeSurcharge({ after: 8, amount: 500 }),
12
+ * tieredOvertimeMultiplier([
13
+ * { after: 40, factor: 1.5 },
14
+ * { after: 48, factor: 2.0 },
15
+ * ]),
16
+ * ]
17
+ * ```
18
+ *
4
19
  * @module
5
20
  */
6
21
  import { defineRule } from "./rules.js";
@@ -31,11 +46,6 @@ function makeCostRule(rule, fields) {
31
46
  * - `dailyOvertimeSurcharge({ after, amount }, opts?)` - daily overtime surcharge
32
47
  * - `tieredOvertimeMultiplier(tiers, opts?)` - multiple overtime thresholds
33
48
  *
34
- * @example
35
- * ```ts
36
- * minimizeCost()
37
- * ```
38
- *
39
49
  * @category Cost Optimization
40
50
  */
41
51
  export function minimizeCost(opts) {
@@ -49,11 +59,6 @@ export function minimizeCost(opts) {
49
59
  * this rule adds only the extra portion above 1x.
50
60
  *
51
61
  * @category Cost Optimization
52
- *
53
- * @example Weekend multiplier
54
- * ```typescript
55
- * dayMultiplier(1.5, { dayOfWeek: weekend })
56
- * ```
57
62
  */
58
63
  export function dayMultiplier(factor, opts) {
59
64
  return makeCostRule("day-cost-multiplier", { factor, ...opts });
@@ -65,11 +70,6 @@ export function dayMultiplier(factor, opts) {
65
70
  * The surcharge is independent of the member's base rate.
66
71
  *
67
72
  * @category Cost Optimization
68
- *
69
- * @example Weekend surcharge
70
- * ```typescript
71
- * daySurcharge(500, { dayOfWeek: weekend })
72
- * ```
73
73
  */
74
74
  export function daySurcharge(amountPerHour, opts) {
75
75
  return makeCostRule("day-cost-surcharge", { amountPerHour, ...opts });
@@ -86,11 +86,6 @@ export function daySurcharge(amountPerHour, opts) {
86
86
  * @param opts - Entity and time scoping
87
87
  *
88
88
  * @category Cost Optimization
89
- *
90
- * @example Night differential
91
- * ```typescript
92
- * timeSurcharge(200, { from: t(22), until: t(6) })
93
- * ```
94
89
  */
95
90
  export function timeSurcharge(amountPerHour, window, opts) {
96
91
  return makeCostRule("time-cost-surcharge", { amountPerHour, window, ...opts });
@@ -103,11 +98,6 @@ export function timeSurcharge(amountPerHour, window, opts) {
103
98
  * counted by {@link minimizeCost}).
104
99
  *
105
100
  * @category Cost Optimization
106
- *
107
- * @example
108
- * ```typescript
109
- * overtimeMultiplier({ after: 40, factor: 1.5 })
110
- * ```
111
101
  */
112
102
  export function overtimeMultiplier(opts) {
113
103
  return makeCostRule("overtime-weekly-multiplier", { ...opts });
@@ -119,11 +109,6 @@ export function overtimeMultiplier(opts) {
119
109
  * The surcharge is independent of the member's base rate.
120
110
  *
121
111
  * @category Cost Optimization
122
- *
123
- * @example
124
- * ```typescript
125
- * overtimeSurcharge({ after: 40, amount: 1000 })
126
- * ```
127
112
  */
128
113
  export function overtimeSurcharge(opts) {
129
114
  return makeCostRule("overtime-weekly-surcharge", { ...opts });
@@ -136,11 +121,6 @@ export function overtimeSurcharge(opts) {
136
121
  * counted by {@link minimizeCost}).
137
122
  *
138
123
  * @category Cost Optimization
139
- *
140
- * @example
141
- * ```typescript
142
- * dailyOvertimeMultiplier({ after: 8, factor: 1.5 })
143
- * ```
144
124
  */
145
125
  export function dailyOvertimeMultiplier(opts) {
146
126
  return makeCostRule("overtime-daily-multiplier", { ...opts });
@@ -152,11 +132,6 @@ export function dailyOvertimeMultiplier(opts) {
152
132
  * The surcharge is independent of the member's base rate.
153
133
  *
154
134
  * @category Cost Optimization
155
- *
156
- * @example
157
- * ```typescript
158
- * dailyOvertimeSurcharge({ after: 8, amount: 500 })
159
- * ```
160
135
  */
161
136
  export function dailyOvertimeSurcharge(opts) {
162
137
  return makeCostRule("overtime-daily-surcharge", { ...opts });
@@ -169,17 +144,6 @@ export function dailyOvertimeSurcharge(opts) {
169
144
  * Tiers must be sorted by threshold ascending.
170
145
  *
171
146
  * @category Cost Optimization
172
- *
173
- * @example
174
- * ```typescript
175
- * // Hours 0-40: base rate
176
- * // Hours 40-48: 1.5x
177
- * // Hours 48+: 2.0x
178
- * tieredOvertimeMultiplier([
179
- * { after: 40, factor: 1.5 },
180
- * { after: 48, factor: 2.0 },
181
- * ])
182
- * ```
183
147
  */
184
148
  export function tieredOvertimeMultiplier(tiers, opts) {
185
149
  return makeCostRule("overtime-tiered-multiplier", { tiers, ...opts });
@@ -1 +1 @@
1
- {"version":3,"file":"cost.js","sourceRoot":"","sources":["../../src/schedule/cost.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA2BxC,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E,SAAS,YAAY,CAAC,IAAY,EAAE,MAA+B;IACjE,OAAO,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAClC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,YAAY,CAAC,IAAsB;IACjD,OAAO,YAAY,CAAC,eAAe,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,IAAsB;IAClE,OAAO,YAAY,CAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AAClE,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAAC,aAAqB,EAAE,IAAsB;IACxE,OAAO,YAAY,CAAC,oBAAoB,EAAE,EAAE,aAAa,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AACxE,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,aAAa,CAC3B,aAAqB,EACrB,MAA6C,EAC7C,IAAsB;IAEtB,OAAO,YAAY,CAAC,qBAAqB,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AACjF,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAAyD;IAEzD,OAAO,YAAY,CAAC,4BAA4B,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AACjE,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAyD;IAEzD,OAAO,YAAY,CAAC,2BAA2B,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AAChE,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,uBAAuB,CACrC,IAAyD;IAEzD,OAAO,YAAY,CAAC,2BAA2B,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AAChE,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAyD;IAEzD,OAAO,YAAY,CAAC,0BAA0B,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,wBAAwB,CACtC,KAAwC,EACxC,IAAsB;IAEtB,OAAO,YAAY,CAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AACxE,CAAC"}
1
+ {"version":3,"file":"cost.js","sourceRoot":"","sources":["../../src/schedule/cost.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA2BxC,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E,SAAS,YAAY,CACnB,IAAU,EACV,MAAc;IAEd,OAAO,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAClC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,YAAY,CAAC,IAAsB;IACjD,OAAO,YAAY,CAAC,eAAe,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAc,EACd,IAAsB;IAEtB,OAAO,YAAY,CAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AAClE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAC1B,aAAqB,EACrB,IAAsB;IAEtB,OAAO,YAAY,CAAC,oBAAoB,EAAE,EAAE,aAAa,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AACxE,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAC3B,aAAqB,EACrB,MAA6C,EAC7C,IAAsB;IAKtB,OAAO,YAAY,CAAC,qBAAqB,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AACjF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAAyD;IAEzD,OAAO,YAAY,CAAC,4BAA4B,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AACjE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAyD;IAEzD,OAAO,YAAY,CAAC,2BAA2B,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AAChE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CACrC,IAAyD;IAEzD,OAAO,YAAY,CAAC,2BAA2B,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AAChE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAyD;IAEzD,OAAO,YAAY,CAAC,0BAA0B,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,wBAAwB,CACtC,KAAwC,EACxC,IAAsB;IAKtB,OAAO,YAAY,CAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AACxE,CAAC"}
@@ -1,9 +1,32 @@
1
1
  /**
2
- * Coverage definitions: staffing requirements per semantic time period.
2
+ * Coverage definitions: lower-bound staffing requirements per semantic time period.
3
+ *
4
+ * Coverage answers "what floor should apply throughout this scoped time, with
5
+ * the chosen priority?". It attaches sustained lower bounds to semantic times,
6
+ * whether those periods are
7
+ * explicit in the requirements or inferred to separate distinct business
8
+ * requirements. Coverage does not express caps, targets, fairness, or other
9
+ * assignment-shaping logic. Use rules for those concerns.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * coverage: [
14
+ * cover("lunch", "waiter", 2, { dayOfWeek: weekdays }),
15
+ * cover("lunch", "waiter", 3, { dayOfWeek: weekend }),
16
+ * cover("dinner", ["manager", "supervisor"], 1),
17
+ * cover("opening", "keyholder", 1),
18
+ *
19
+ * // Variant form: different counts by day
20
+ * cover("peak_hours", "agent",
21
+ * { count: 4 },
22
+ * { count: 2, dates: ["2025-12-24"] },
23
+ * ),
24
+ * ]
25
+ * ```
3
26
  *
4
27
  * @module
5
28
  */
6
- import type { DayOfWeek } from "../types.js";
29
+ import type { DateString, DayOfWeek } from "../types.js";
7
30
  import type { CoverageVariant } from "../cpsat/semantic-time.js";
8
31
  import type { Priority } from "../cpsat/types.js";
9
32
  export type { CoverageVariant } from "../cpsat/semantic-time.js";
@@ -13,7 +36,15 @@ export type { CoverageVariant } from "../cpsat/semantic-time.js";
13
36
  * @remarks
14
37
  * Day/date scoping controls which days this coverage entry applies to.
15
38
  * An entry without `dayOfWeek` or `dates` applies every day in the
16
- * scheduling period.
39
+ * scheduling period. Scope answers where the floor applies; it does not change
40
+ * the meaning of coverage itself. `priority` controls how hard the coverage floor is.
41
+ * Use it to distinguish language like "must keep 5 staffed on Saturdays"
42
+ * from "ideally keep 5 staffed on Mondays too" without changing the
43
+ * underlying coverage shape. `skillIds` is a hard filter, not a preference.
44
+ * Use it only when the required minimum truly needs those skills throughout
45
+ * the window. If a role or skill mix is preferred rather than required, model
46
+ * that with rules such as {@link preferAssignment} instead of skill-filtered
47
+ * coverage.
17
48
  *
18
49
  * @category Coverage
19
50
  */
@@ -23,7 +54,7 @@ export interface CoverageOptions {
23
54
  /** Restrict to specific days of the week. */
24
55
  dayOfWeek?: readonly [DayOfWeek, ...DayOfWeek[]];
25
56
  /** Restrict to specific dates (YYYY-MM-DD). */
26
- dates?: string[];
57
+ dates?: DateString[];
27
58
  /** Defaults to `"MANDATORY"`. */
28
59
  priority?: Priority;
29
60
  }
@@ -48,36 +79,34 @@ export interface CoverageEntry<T extends string = string, R extends string = str
48
79
  * Defines a staffing requirement for a semantic time period.
49
80
  *
50
81
  * @remarks
51
- * Entries for the same time and role **stack additively**.
52
- * For weekday vs weekend staffing, use mutually exclusive `dayOfWeek`
53
- * on both entries.
82
+ * Coverage always defines a lower bound that applies throughout the scoped
83
+ * semantic time, with strength controlled by `priority`. If the requirements
84
+ * also state an upper bound or productive
85
+ * cap, model that separately in `rules`, for example with
86
+ * {@link maxConcurrentAssignments}.
87
+ *
88
+ * Scope answers where the floor applies. Priority answers how strictly the
89
+ * solver should preserve that floor when trade-offs are necessary.
90
+ *
91
+ * Attach coverage to the narrowest semantic time that actually carries that
92
+ * minimum. Avoid layering a broad parent coverage window on top of narrower
93
+ * windows unless the same lower bound truly applies throughout the full span.
94
+ * If the requirements talk about hitting full occupancy at the busy point,
95
+ * prefer {@link targetPeakConcurrentAssignments} over turning that into a
96
+ * whole-window minimum. Do not infer a synthetic "peak" semantic time just to attach
97
+ * `cover(..., 5)` unless the requirements really define a sustained window
98
+ * that needs that minimum throughout.
99
+ *
100
+ * Overlapping entries for the same time and role produce independent
101
+ * constraints; the solver enforces the **max** count, not the sum.
102
+ * An unscoped entry acts as a floor that scoped entries cannot reduce.
103
+ * Use mutually exclusive scopes when different days need different coverage.
54
104
  *
55
105
  * @param timeName - Name of a declared semantic time
56
106
  * @param target - Role name (string), array of role names (OR logic), or skill name
57
107
  * @param count - Number of people needed
58
108
  * @param opts - Options: `skillIds` (AND filter), `dayOfWeek`, `dates`, `priority`
59
109
  *
60
- * @example
61
- * ```typescript
62
- * coverage: [
63
- * // 2 waiters during lunch
64
- * cover("lunch", "waiter", 2),
65
- *
66
- * // 1 manager OR supervisor during dinner
67
- * cover("dinner", ["manager", "supervisor"], 1),
68
- *
69
- * // 1 person with keyholder skill at opening
70
- * cover("opening", "keyholder", 1),
71
- *
72
- * // 1 senior waiter (role + skill AND)
73
- * cover("lunch", "waiter", 1, { skillIds: ["senior"] }),
74
- *
75
- * // Different counts by day (mutually exclusive dayOfWeek!)
76
- * cover("lunch", "waiter", 2, { dayOfWeek: weekdays }),
77
- * cover("lunch", "waiter", 3, { dayOfWeek: weekend }),
78
- * ]
79
- * ```
80
- *
81
110
  * @category Coverage
82
111
  */
83
112
  export declare function cover<T extends string, const R extends string>(timeName: T, target: R | [R, ...R[]], count: number, opts?: CoverageOptions): CoverageEntry<T, R>;
@@ -1 +1 @@
1
- {"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../src/schedule/coverage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,YAAY,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEjE;;;;;;;;;GASG;AACH,MAAM,WAAW,eAAe;IAC9B,mEAAmE;IACnE,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IACjC,6CAA6C;IAC7C,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;IACjD,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM;IACjF,gBAAgB,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC5C,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IAC1C,gBAAgB,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACxC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IACnD,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;CAChD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,CAAC,CAAC,SAAS,MAAM,EAC5D,QAAQ,EAAE,CAAC,EACX,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EACvB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,eAAe,GACrB,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvB,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,CAAC,CAAC,SAAS,MAAM,EAC5D,QAAQ,EAAE,CAAC,EACX,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EACvB,GAAG,QAAQ,EAAE,CAAC,eAAe,EAAE,GAAG,eAAe,EAAE,CAAC,GACnD,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../src/schedule/coverage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,YAAY,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEjE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,eAAe;IAC9B,mEAAmE;IACnE,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IACjC,6CAA6C;IAC7C,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;IACjD,+CAA+C;IAC/C,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM;IACjF,gBAAgB,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC5C,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IAC1C,gBAAgB,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACxC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IACnD,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;CAChD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,CAAC,CAAC,SAAS,MAAM,EAC5D,QAAQ,EAAE,CAAC,EACX,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EACvB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,eAAe,GACrB,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvB,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,CAAC,CAAC,SAAS,MAAM,EAC5D,QAAQ,EAAE,CAAC,EACX,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EACvB,GAAG,QAAQ,EAAE,CAAC,eAAe,EAAE,GAAG,eAAe,EAAE,CAAC,GACnD,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC"}
@@ -1,5 +1,28 @@
1
1
  /**
2
- * Coverage definitions: staffing requirements per semantic time period.
2
+ * Coverage definitions: lower-bound staffing requirements per semantic time period.
3
+ *
4
+ * Coverage answers "what floor should apply throughout this scoped time, with
5
+ * the chosen priority?". It attaches sustained lower bounds to semantic times,
6
+ * whether those periods are
7
+ * explicit in the requirements or inferred to separate distinct business
8
+ * requirements. Coverage does not express caps, targets, fairness, or other
9
+ * assignment-shaping logic. Use rules for those concerns.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * coverage: [
14
+ * cover("lunch", "waiter", 2, { dayOfWeek: weekdays }),
15
+ * cover("lunch", "waiter", 3, { dayOfWeek: weekend }),
16
+ * cover("dinner", ["manager", "supervisor"], 1),
17
+ * cover("opening", "keyholder", 1),
18
+ *
19
+ * // Variant form: different counts by day
20
+ * cover("peak_hours", "agent",
21
+ * { count: 4 },
22
+ * { count: 2, dates: ["2025-12-24"] },
23
+ * ),
24
+ * ]
25
+ * ```
3
26
  *
4
27
  * @module
5
28
  */
@@ -1 +1 @@
1
- {"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../src/schedule/coverage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA8FH,MAAM,UAAU,KAAK,CACnB,QAAW,EACX,MAAuB,EACvB,mBAA6C,EAC7C,GAAG,IAAe;IAElB,IAAI,OAAO,mBAAmB,KAAK,QAAQ,EAAE,CAAC;QAC5C,iDAAiD;QACjD,OAAO;YACL,KAAK,EAAE,UAAU;YACjB,QAAQ;YACR,MAAM;YACN,KAAK,EAAE,mBAAmB;YAC1B,OAAO,EAAG,IAAI,CAAC,CAAC,CAAiC,IAAI,EAAE;SACxD,CAAC;IACJ,CAAC;IAED,iDAAiD;IACjD,MAAM,QAAQ,GAAG,CAAC,mBAAmB,EAAE,GAAI,IAA0B,CAAC,CAAC;IAEvE,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAClE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,4EAA4E;YAC1E,SAAS,QAAQ,CAAC,MAAM,oBAAoB,CAC/C,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK,EAAE,UAAU;QACjB,QAAQ;QACR,MAAM;QACN,KAAK,EAAE,CAAC;QACR,OAAO,EAAE,EAAE;QACX,QAAQ;KACT,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../src/schedule/coverage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAoGH,MAAM,UAAU,KAAK,CACnB,QAAW,EACX,MAAuB,EACvB,mBAA6C,EAC7C,GAAG,IAAe;IAElB,IAAI,OAAO,mBAAmB,KAAK,QAAQ,EAAE,CAAC;QAC5C,iDAAiD;QACjD,OAAO;YACL,KAAK,EAAE,UAAU;YACjB,QAAQ;YACR,MAAM;YACN,KAAK,EAAE,mBAAmB;YAC1B,OAAO,EAAG,IAAI,CAAC,CAAC,CAAiC,IAAI,EAAE;SACxD,CAAC;IACJ,CAAC;IAED,iDAAiD;IACjD,MAAM,QAAQ,GAAG,CAAC,mBAAmB,EAAE,GAAI,IAA0B,CAAC,CAAC;IAEvE,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAClE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,4EAA4E;YAC1E,SAAS,QAAQ,CAAC,MAAM,oBAAoB,CAC/C,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK,EAAE,UAAU;QACjB,QAAQ;QACR,MAAM;QACN,KAAK,EAAE,CAAC;QACR,OAAO,EAAE,EAAE;QACX,QAAQ;KACT,CAAC;AACJ,CAAC"}