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.
- package/CHANGELOG.md +21 -0
- package/README.md +22 -27
- package/dist/client.d.ts +39 -3
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js.map +1 -1
- package/dist/client.schemas.d.ts +118 -18
- package/dist/client.schemas.d.ts.map +1 -1
- package/dist/client.schemas.js +110 -6
- package/dist/client.schemas.js.map +1 -1
- package/dist/client.types.d.ts +63 -7
- package/dist/client.types.d.ts.map +1 -1
- package/dist/client.types.js.map +1 -1
- package/dist/cpsat/cost.d.ts +5 -2
- package/dist/cpsat/cost.d.ts.map +1 -1
- package/dist/cpsat/cost.js +13 -6
- package/dist/cpsat/cost.js.map +1 -1
- package/dist/cpsat/model-builder.d.ts +42 -61
- package/dist/cpsat/model-builder.d.ts.map +1 -1
- package/dist/cpsat/model-builder.js +451 -56
- package/dist/cpsat/model-builder.js.map +1 -1
- package/dist/cpsat/response.d.ts +19 -7
- package/dist/cpsat/response.d.ts.map +1 -1
- package/dist/cpsat/response.js +48 -9
- package/dist/cpsat/response.js.map +1 -1
- package/dist/cpsat/rule-descriptor.d.ts +250 -0
- package/dist/cpsat/rule-descriptor.d.ts.map +1 -0
- package/dist/cpsat/rule-descriptor.js +51 -0
- package/dist/cpsat/rule-descriptor.js.map +1 -0
- package/dist/cpsat/rules/artifacts.d.ts +9 -0
- package/dist/cpsat/rules/artifacts.d.ts.map +1 -0
- package/dist/cpsat/rules/artifacts.js +31 -0
- package/dist/cpsat/rules/artifacts.js.map +1 -0
- package/dist/cpsat/rules/assign-together.d.ts +18 -20
- package/dist/cpsat/rules/assign-together.d.ts.map +1 -1
- package/dist/cpsat/rules/assign-together.js +90 -54
- package/dist/cpsat/rules/assign-together.js.map +1 -1
- package/dist/cpsat/rules/assigned-day.d.ts +12 -0
- package/dist/cpsat/rules/assigned-day.d.ts.map +1 -0
- package/dist/cpsat/rules/assigned-day.js +43 -0
- package/dist/cpsat/rules/assigned-day.js.map +1 -0
- package/dist/cpsat/rules/assignment-priority.d.ts +15 -29
- package/dist/cpsat/rules/assignment-priority.d.ts.map +1 -1
- package/dist/cpsat/rules/assignment-priority.js +47 -50
- package/dist/cpsat/rules/assignment-priority.js.map +1 -1
- package/dist/cpsat/rules/assignment-terms.d.ts +6 -0
- package/dist/cpsat/rules/assignment-terms.d.ts.map +1 -0
- package/dist/cpsat/rules/assignment-terms.js +19 -0
- package/dist/cpsat/rules/assignment-terms.js.map +1 -0
- package/dist/cpsat/rules/concurrent-intervals.d.ts +19 -0
- package/dist/cpsat/rules/concurrent-intervals.d.ts.map +1 -0
- package/dist/cpsat/rules/concurrent-intervals.js +57 -0
- package/dist/cpsat/rules/concurrent-intervals.js.map +1 -0
- package/dist/cpsat/rules/cost-utils.d.ts +1 -3
- package/dist/cpsat/rules/cost-utils.d.ts.map +1 -1
- package/dist/cpsat/rules/cost-utils.js +0 -7
- package/dist/cpsat/rules/cost-utils.js.map +1 -1
- package/dist/cpsat/rules/day-cost-multiplier.d.ts +10 -10
- package/dist/cpsat/rules/day-cost-multiplier.d.ts.map +1 -1
- package/dist/cpsat/rules/day-cost-multiplier.js +88 -77
- package/dist/cpsat/rules/day-cost-multiplier.js.map +1 -1
- package/dist/cpsat/rules/day-cost-surcharge.d.ts +10 -10
- package/dist/cpsat/rules/day-cost-surcharge.d.ts.map +1 -1
- package/dist/cpsat/rules/day-cost-surcharge.js +76 -65
- package/dist/cpsat/rules/day-cost-surcharge.js.map +1 -1
- package/dist/cpsat/rules/index.d.ts +30 -24
- package/dist/cpsat/rules/index.d.ts.map +1 -1
- package/dist/cpsat/rules/index.js +30 -24
- package/dist/cpsat/rules/index.js.map +1 -1
- package/dist/cpsat/rules/location-preference.d.ts +14 -21
- package/dist/cpsat/rules/location-preference.d.ts.map +1 -1
- package/dist/cpsat/rules/location-preference.js +45 -45
- package/dist/cpsat/rules/location-preference.js.map +1 -1
- package/dist/cpsat/rules/max-concurrent-assignments.d.ts +46 -0
- package/dist/cpsat/rules/max-concurrent-assignments.d.ts.map +1 -0
- package/dist/cpsat/rules/max-concurrent-assignments.js +121 -0
- package/dist/cpsat/rules/max-concurrent-assignments.js.map +1 -0
- package/dist/cpsat/rules/max-consecutive-days.d.ts +18 -17
- package/dist/cpsat/rules/max-consecutive-days.d.ts.map +1 -1
- package/dist/cpsat/rules/max-consecutive-days.js +67 -66
- package/dist/cpsat/rules/max-consecutive-days.js.map +1 -1
- package/dist/cpsat/rules/max-days-of-week-per-period.d.ts +45 -0
- package/dist/cpsat/rules/max-days-of-week-per-period.d.ts.map +1 -0
- package/dist/cpsat/rules/max-days-of-week-per-period.js +95 -0
- package/dist/cpsat/rules/max-days-of-week-per-period.js.map +1 -0
- package/dist/cpsat/rules/max-days-week.d.ts +17 -31
- package/dist/cpsat/rules/max-days-week.d.ts.map +1 -1
- package/dist/cpsat/rules/max-days-week.js +69 -81
- package/dist/cpsat/rules/max-days-week.js.map +1 -1
- package/dist/cpsat/rules/max-hours-day.d.ts +14 -31
- package/dist/cpsat/rules/max-hours-day.d.ts.map +1 -1
- package/dist/cpsat/rules/max-hours-day.js +56 -72
- package/dist/cpsat/rules/max-hours-day.js.map +1 -1
- package/dist/cpsat/rules/max-hours-week.d.ts +15 -31
- package/dist/cpsat/rules/max-hours-week.d.ts.map +1 -1
- package/dist/cpsat/rules/max-hours-week.js +60 -75
- package/dist/cpsat/rules/max-hours-week.js.map +1 -1
- package/dist/cpsat/rules/max-shifts-day.d.ts +17 -33
- package/dist/cpsat/rules/max-shifts-day.d.ts.map +1 -1
- package/dist/cpsat/rules/max-shifts-day.js +57 -73
- package/dist/cpsat/rules/max-shifts-day.js.map +1 -1
- package/dist/cpsat/rules/min-consecutive-days.d.ts +18 -18
- package/dist/cpsat/rules/min-consecutive-days.d.ts.map +1 -1
- package/dist/cpsat/rules/min-consecutive-days.js +123 -94
- package/dist/cpsat/rules/min-consecutive-days.js.map +1 -1
- package/dist/cpsat/rules/min-days-of-week-per-period.d.ts +35 -0
- package/dist/cpsat/rules/min-days-of-week-per-period.d.ts.map +1 -0
- package/dist/cpsat/rules/min-days-of-week-per-period.js +108 -0
- package/dist/cpsat/rules/min-days-of-week-per-period.js.map +1 -0
- package/dist/cpsat/rules/min-days-week.d.ts +13 -26
- package/dist/cpsat/rules/min-days-week.d.ts.map +1 -1
- package/dist/cpsat/rules/min-days-week.js +85 -74
- package/dist/cpsat/rules/min-days-week.js.map +1 -1
- package/dist/cpsat/rules/min-hours-day.d.ts +14 -17
- package/dist/cpsat/rules/min-hours-day.d.ts.map +1 -1
- package/dist/cpsat/rules/min-hours-day.js +72 -54
- package/dist/cpsat/rules/min-hours-day.js.map +1 -1
- package/dist/cpsat/rules/min-hours-week.d.ts +15 -18
- package/dist/cpsat/rules/min-hours-week.d.ts.map +1 -1
- package/dist/cpsat/rules/min-hours-week.js +75 -57
- package/dist/cpsat/rules/min-hours-week.js.map +1 -1
- package/dist/cpsat/rules/min-rest-between-shifts.d.ts +14 -17
- package/dist/cpsat/rules/min-rest-between-shifts.d.ts.map +1 -1
- package/dist/cpsat/rules/min-rest-between-shifts.js +148 -138
- package/dist/cpsat/rules/min-rest-between-shifts.js.map +1 -1
- package/dist/cpsat/rules/minimize-cost.d.ts +2 -18
- package/dist/cpsat/rules/minimize-cost.d.ts.map +1 -1
- package/dist/cpsat/rules/minimize-cost.js +151 -163
- package/dist/cpsat/rules/minimize-cost.js.map +1 -1
- package/dist/cpsat/rules/must-assign.d.ts +5 -42
- package/dist/cpsat/rules/must-assign.d.ts.map +1 -1
- package/dist/cpsat/rules/must-assign.js +43 -75
- package/dist/cpsat/rules/must-assign.js.map +1 -1
- package/dist/cpsat/rules/overtime-daily-multiplier.d.ts +6 -10
- package/dist/cpsat/rules/overtime-daily-multiplier.d.ts.map +1 -1
- package/dist/cpsat/rules/overtime-daily-multiplier.js +118 -112
- package/dist/cpsat/rules/overtime-daily-multiplier.js.map +1 -1
- package/dist/cpsat/rules/overtime-daily-surcharge.d.ts +6 -11
- package/dist/cpsat/rules/overtime-daily-surcharge.d.ts.map +1 -1
- package/dist/cpsat/rules/overtime-daily-surcharge.js +104 -99
- package/dist/cpsat/rules/overtime-daily-surcharge.js.map +1 -1
- package/dist/cpsat/rules/overtime-tiered-multiplier.d.ts +9 -21
- package/dist/cpsat/rules/overtime-tiered-multiplier.d.ts.map +1 -1
- package/dist/cpsat/rules/overtime-tiered-multiplier.js +181 -199
- package/dist/cpsat/rules/overtime-tiered-multiplier.js.map +1 -1
- package/dist/cpsat/rules/overtime-weekly-multiplier.d.ts +13 -12
- package/dist/cpsat/rules/overtime-weekly-multiplier.d.ts.map +1 -1
- package/dist/cpsat/rules/overtime-weekly-multiplier.js +143 -143
- package/dist/cpsat/rules/overtime-weekly-multiplier.js.map +1 -1
- package/dist/cpsat/rules/overtime-weekly-surcharge.d.ts +7 -11
- package/dist/cpsat/rules/overtime-weekly-surcharge.d.ts.map +1 -1
- package/dist/cpsat/rules/overtime-weekly-surcharge.js +124 -119
- package/dist/cpsat/rules/overtime-weekly-surcharge.js.map +1 -1
- package/dist/cpsat/rules/pattern-eligibility.d.ts +6 -0
- package/dist/cpsat/rules/pattern-eligibility.d.ts.map +1 -0
- package/dist/cpsat/rules/pattern-eligibility.js +16 -0
- package/dist/cpsat/rules/pattern-eligibility.js.map +1 -0
- package/dist/cpsat/rules/pattern-time.d.ts +5 -0
- package/dist/cpsat/rules/pattern-time.d.ts.map +1 -0
- package/dist/cpsat/rules/pattern-time.js +20 -0
- package/dist/cpsat/rules/pattern-time.js.map +1 -0
- package/dist/cpsat/rules/registry.d.ts +217 -30
- package/dist/cpsat/rules/registry.d.ts.map +1 -1
- package/dist/cpsat/rules/registry.js +98 -34
- package/dist/cpsat/rules/registry.js.map +1 -1
- package/dist/cpsat/rules/resolver.d.ts +9 -7
- package/dist/cpsat/rules/resolver.d.ts.map +1 -1
- package/dist/cpsat/rules/resolver.js +19 -18
- package/dist/cpsat/rules/resolver.js.map +1 -1
- package/dist/cpsat/rules/role-preference.d.ts +24 -0
- package/dist/cpsat/rules/role-preference.d.ts.map +1 -0
- package/dist/cpsat/rules/role-preference.js +72 -0
- package/dist/cpsat/rules/role-preference.js.map +1 -0
- package/dist/cpsat/rules/rules.types.d.ts +90 -17
- package/dist/cpsat/rules/rules.types.d.ts.map +1 -1
- package/dist/cpsat/rules/scope.types.d.ts +24 -11
- package/dist/cpsat/rules/scope.types.d.ts.map +1 -1
- package/dist/cpsat/rules/scope.types.js +14 -19
- package/dist/cpsat/rules/scope.types.js.map +1 -1
- package/dist/cpsat/rules/target-days-week.d.ts +31 -0
- package/dist/cpsat/rules/target-days-week.d.ts.map +1 -0
- package/dist/cpsat/rules/target-days-week.js +80 -0
- package/dist/cpsat/rules/target-days-week.js.map +1 -0
- package/dist/cpsat/rules/target-peak-concurrent-assignments.d.ts +33 -0
- package/dist/cpsat/rules/target-peak-concurrent-assignments.d.ts.map +1 -0
- package/dist/cpsat/rules/target-peak-concurrent-assignments.js +146 -0
- package/dist/cpsat/rules/target-peak-concurrent-assignments.js.map +1 -0
- package/dist/cpsat/rules/time-cost-surcharge.d.ts +15 -14
- package/dist/cpsat/rules/time-cost-surcharge.d.ts.map +1 -1
- package/dist/cpsat/rules/time-cost-surcharge.js +82 -96
- package/dist/cpsat/rules/time-cost-surcharge.js.map +1 -1
- package/dist/cpsat/rules/time-off.d.ts +21 -57
- package/dist/cpsat/rules/time-off.d.ts.map +1 -1
- package/dist/cpsat/rules/time-off.js +114 -127
- package/dist/cpsat/rules/time-off.js.map +1 -1
- package/dist/cpsat/rules/variables.d.ts +4 -0
- package/dist/cpsat/rules/variables.d.ts.map +1 -0
- package/dist/cpsat/rules/variables.js +10 -0
- package/dist/cpsat/rules/variables.js.map +1 -0
- package/dist/cpsat/rules.d.ts +20 -3
- package/dist/cpsat/rules.d.ts.map +1 -1
- package/dist/cpsat/rules.js +19 -2
- package/dist/cpsat/rules.js.map +1 -1
- package/dist/cpsat/semantic-time.d.ts +7 -6
- package/dist/cpsat/semantic-time.d.ts.map +1 -1
- package/dist/cpsat/semantic-time.js +15 -28
- package/dist/cpsat/semantic-time.js.map +1 -1
- package/dist/cpsat/types.d.ts +47 -4
- package/dist/cpsat/types.d.ts.map +1 -1
- package/dist/cpsat/types.js +24 -1
- package/dist/cpsat/types.js.map +1 -1
- package/dist/cpsat/utils.d.ts +23 -6
- package/dist/cpsat/utils.d.ts.map +1 -1
- package/dist/cpsat/utils.js +76 -15
- package/dist/cpsat/utils.js.map +1 -1
- package/dist/cpsat/validation-reporter.d.ts +6 -2
- package/dist/cpsat/validation-reporter.d.ts.map +1 -1
- package/dist/cpsat/validation-reporter.js +122 -10
- package/dist/cpsat/validation-reporter.js.map +1 -1
- package/dist/cpsat/validation.types.d.ts +21 -10
- package/dist/cpsat/validation.types.d.ts.map +1 -1
- package/dist/datetime.utils.d.ts +7 -13
- package/dist/datetime.utils.d.ts.map +1 -1
- package/dist/datetime.utils.js +29 -36
- package/dist/datetime.utils.js.map +1 -1
- package/dist/index.d.ts +12 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -3
- package/dist/index.js.map +1 -1
- package/dist/schedule/cost.d.ts +48 -60
- package/dist/schedule/cost.d.ts.map +1 -1
- package/dist/schedule/cost.js +15 -51
- package/dist/schedule/cost.js.map +1 -1
- package/dist/schedule/coverage.d.ts +57 -28
- package/dist/schedule/coverage.d.ts.map +1 -1
- package/dist/schedule/coverage.js +24 -1
- package/dist/schedule/coverage.js.map +1 -1
- package/dist/schedule/definition.d.ts +138 -19
- package/dist/schedule/definition.d.ts.map +1 -1
- package/dist/schedule/definition.js +99 -90
- package/dist/schedule/definition.js.map +1 -1
- package/dist/schedule/index.d.ts +4 -4
- package/dist/schedule/index.d.ts.map +1 -1
- package/dist/schedule/index.js +2 -2
- package/dist/schedule/index.js.map +1 -1
- package/dist/schedule/rules.d.ts +438 -113
- package/dist/schedule/rules.d.ts.map +1 -1
- package/dist/schedule/rules.js +310 -108
- package/dist/schedule/rules.js.map +1 -1
- package/dist/schedule/shift-patterns.d.ts +0 -17
- package/dist/schedule/shift-patterns.d.ts.map +1 -1
- package/dist/schedule/shift-patterns.js +0 -17
- package/dist/schedule/shift-patterns.js.map +1 -1
- package/dist/schedule/time-periods.d.ts +37 -27
- package/dist/schedule/time-periods.d.ts.map +1 -1
- package/dist/schedule/time-periods.js +37 -27
- package/dist/schedule/time-periods.js.map +1 -1
- package/dist/types.d.ts +67 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +64 -0
- package/dist/types.js.map +1 -1
- package/package.json +8 -9
- package/solver/src/solver/models.py +41 -4
- package/solver/src/solver/solver.py +546 -157
- package/solver/tests/test_solver.py +363 -7
- package/src/client.schemas.ts +127 -10
- package/src/client.ts +3 -0
- package/src/client.types.ts +73 -7
- package/src/cpsat/cost.ts +17 -7
- package/src/cpsat/model-builder.ts +614 -129
- package/src/cpsat/response.ts +57 -13
- package/src/cpsat/rule-descriptor.ts +311 -0
- package/src/cpsat/rules/artifacts.ts +56 -0
- package/src/cpsat/rules/assign-together.ts +104 -69
- package/src/cpsat/rules/assigned-day.ts +70 -0
- package/src/cpsat/rules/assignment-priority.ts +54 -58
- package/src/cpsat/rules/assignment-terms.ts +43 -0
- package/src/cpsat/rules/concurrent-intervals.ts +93 -0
- package/src/cpsat/rules/cost-utils.ts +1 -9
- package/src/cpsat/rules/day-cost-multiplier.ts +101 -81
- package/src/cpsat/rules/day-cost-surcharge.ts +91 -70
- package/src/cpsat/rules/index.ts +30 -24
- package/src/cpsat/rules/location-preference.ts +47 -52
- package/src/cpsat/rules/max-concurrent-assignments.ts +170 -0
- package/src/cpsat/rules/max-consecutive-days.ts +74 -91
- package/src/cpsat/rules/max-days-of-week-per-period.ts +127 -0
- package/src/cpsat/rules/max-days-week.ts +89 -115
- package/src/cpsat/rules/max-hours-day.ts +64 -84
- package/src/cpsat/rules/max-hours-week.ts +74 -90
- package/src/cpsat/rules/max-shifts-day.ts +65 -85
- package/src/cpsat/rules/min-consecutive-days.ts +161 -127
- package/src/cpsat/rules/min-days-of-week-per-period.ts +144 -0
- package/src/cpsat/rules/min-days-week.ts +93 -91
- package/src/cpsat/rules/min-hours-day.ts +79 -58
- package/src/cpsat/rules/min-hours-week.ts +87 -62
- package/src/cpsat/rules/min-rest-between-shifts.ts +191 -178
- package/src/cpsat/rules/minimize-cost.ts +175 -188
- package/src/cpsat/rules/must-assign.ts +44 -81
- package/src/cpsat/rules/overtime-daily-multiplier.ts +158 -140
- package/src/cpsat/rules/overtime-daily-surcharge.ts +141 -126
- package/src/cpsat/rules/overtime-tiered-multiplier.ts +234 -253
- package/src/cpsat/rules/overtime-weekly-multiplier.ts +183 -175
- package/src/cpsat/rules/overtime-weekly-surcharge.ts +161 -150
- package/src/cpsat/rules/pattern-eligibility.ts +26 -0
- package/src/cpsat/rules/pattern-time.ts +30 -0
- package/src/cpsat/rules/registry.ts +140 -62
- package/src/cpsat/rules/resolver.ts +58 -30
- package/src/cpsat/rules/role-preference.ts +92 -0
- package/src/cpsat/rules/rules.types.ts +89 -17
- package/src/cpsat/rules/scope.types.ts +31 -26
- package/src/cpsat/rules/target-days-week.ts +105 -0
- package/src/cpsat/rules/target-peak-concurrent-assignments.ts +212 -0
- package/src/cpsat/rules/time-cost-surcharge.ts +116 -122
- package/src/cpsat/rules/time-off.ts +154 -163
- package/src/cpsat/rules/variables.ts +11 -0
- package/src/cpsat/rules.ts +43 -17
- package/src/cpsat/semantic-time.ts +29 -43
- package/src/cpsat/types.ts +53 -4
- package/src/cpsat/utils.ts +92 -20
- package/src/cpsat/validation-reporter.ts +170 -19
- package/src/cpsat/validation.types.ts +22 -11
- package/src/datetime.utils.ts +45 -44
- package/src/index.ts +64 -12
- package/src/schedule/cost.ts +40 -61
- package/src/schedule/coverage.ts +57 -28
- package/src/schedule/definition.ts +565 -76
- package/src/schedule/index.ts +23 -3
- package/src/schedule/rules.ts +631 -132
- package/src/schedule/shift-patterns.ts +0 -17
- package/src/schedule/time-periods.ts +37 -27
- package/src/types.ts +114 -2
package/dist/schedule/cost.d.ts
CHANGED
|
@@ -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
|
|
1
|
+
{"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../../src/schedule/cost.ts"],"names":[],"mappings":"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"}
|
package/dist/schedule/cost.js
CHANGED
|
@@ -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
|
|
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?:
|
|
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
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
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
|
|
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
|
|
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"}
|