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.
- package/CHANGELOG.md +44 -0
- package/README.md +22 -24
- 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 -21
- package/dist/cpsat/rules/index.d.ts.map +1 -1
- package/dist/cpsat/rules/index.js +30 -21
- 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 +30 -0
- package/dist/cpsat/rules/max-days-week.d.ts.map +1 -0
- package/dist/cpsat/rules/max-days-week.js +83 -0
- package/dist/cpsat/rules/max-days-week.js.map +1 -0
- 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 +21 -0
- package/dist/cpsat/rules/min-days-week.d.ts.map +1 -0
- package/dist/cpsat/rules/min-days-week.js +95 -0
- package/dist/cpsat/rules/min-days-week.js.map +1 -0
- 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 +12 -0
- package/dist/cpsat/rules/must-assign.d.ts.map +1 -0
- package/dist/cpsat/rules/must-assign.js +54 -0
- package/dist/cpsat/rules/must-assign.js.map +1 -0
- 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 -27
- package/dist/cpsat/rules/registry.d.ts.map +1 -1
- package/dist/cpsat/rules/registry.js +98 -31
- 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 +93 -17
- package/dist/cpsat/rules/rules.types.d.ts.map +1 -1
- package/dist/cpsat/rules/scope.types.d.ts +25 -12
- 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 +15 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -4
- package/dist/index.js.map +1 -1
- package/dist/schedule/cost.d.ts +192 -0
- package/dist/schedule/cost.d.ts.map +1 -0
- package/dist/schedule/cost.js +151 -0
- package/dist/schedule/cost.js.map +1 -0
- package/dist/schedule/coverage.d.ts +114 -0
- package/dist/schedule/coverage.d.ts.map +1 -0
- package/dist/schedule/coverage.js +56 -0
- package/dist/schedule/coverage.js.map +1 -0
- package/dist/schedule/definition.d.ts +346 -0
- package/dist/schedule/definition.d.ts.map +1 -0
- package/dist/schedule/definition.js +668 -0
- package/dist/schedule/definition.js.map +1 -0
- package/dist/schedule/index.d.ts +67 -0
- package/dist/schedule/index.d.ts.map +1 -0
- package/dist/schedule/index.js +69 -0
- package/dist/schedule/index.js.map +1 -0
- package/dist/schedule/rules.d.ts +678 -0
- package/dist/schedule/rules.d.ts.map +1 -0
- package/dist/schedule/rules.js +554 -0
- package/dist/schedule/rules.js.map +1 -0
- package/dist/schedule/shift-patterns.d.ts +17 -0
- package/dist/schedule/shift-patterns.d.ts.map +1 -0
- package/dist/schedule/shift-patterns.js +24 -0
- package/dist/schedule/shift-patterns.js.map +1 -0
- package/dist/schedule/time-periods.d.ts +79 -0
- package/dist/schedule/time-periods.d.ts.map +1 -0
- package/dist/schedule/time-periods.js +101 -0
- package/dist/schedule/time-periods.js.map +1 -0
- 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 -14
- 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 -21
- 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 +117 -0
- 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 +122 -0
- 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 +71 -0
- 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 -56
- package/src/cpsat/rules/resolver.ts +58 -30
- package/src/cpsat/rules/role-preference.ts +92 -0
- package/src/cpsat/rules/rules.types.ts +92 -17
- package/src/cpsat/rules/scope.types.ts +32 -27
- 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 +72 -15
- package/src/schedule/cost.ts +221 -0
- package/src/schedule/coverage.ts +164 -0
- package/src/schedule/definition.ts +1447 -0
- package/src/schedule/index.ts +132 -0
- package/src/schedule/rules.ts +1028 -0
- package/src/schedule/shift-patterns.ts +29 -0
- package/src/schedule/time-periods.ts +120 -0
- package/src/types.ts +114 -2
- package/dist/llms.d.ts +0 -2
- package/dist/llms.d.ts.map +0 -1
- package/dist/llms.js +0 -3
- package/dist/llms.js.map +0 -1
- package/dist/schedule.d.ts +0 -917
- package/dist/schedule.d.ts.map +0 -1
- package/dist/schedule.js +0 -1323
- package/dist/schedule.js.map +0 -1
- package/llms.txt +0 -758
- package/src/llms.ts +0 -3
- package/src/schedule.ts +0 -1960
|
@@ -1,30 +1,220 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
1
|
+
import type { CpsatRuleRegistry } from "./rules.types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Validates that each rule registry key matches the descriptor name it points to.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* This enforces the invariant required by registry-driven config typing and by
|
|
7
|
+
* runtime rule resolution. A registry entry like `{ debug: descriptorNamedFoo }`
|
|
8
|
+
* is rejected because the key and descriptor identity diverge.
|
|
9
|
+
*
|
|
10
|
+
* @category Rules
|
|
11
|
+
*/
|
|
12
|
+
export declare function assertValidCpsatRuleRegistry<Registry extends CpsatRuleRegistry>(ruleRegistry: Registry): Registry;
|
|
13
|
+
/**
|
|
14
|
+
* Validates that a registry does not shadow built-in rule names with different descriptors.
|
|
15
|
+
*
|
|
16
|
+
* @remarks
|
|
17
|
+
* A registry may reuse the exact built-in descriptor instance under the same name,
|
|
18
|
+
* but it may not replace a built-in rule with an incompatible descriptor.
|
|
19
|
+
*/
|
|
20
|
+
export declare function assertNoBuiltInCpsatRuleOverrides<Registry extends CpsatRuleRegistry>(ruleRegistry: Registry): Registry;
|
|
21
|
+
/**
|
|
22
|
+
* Creates a custom CP-SAT rule registry.
|
|
23
|
+
*
|
|
24
|
+
* @remarks
|
|
25
|
+
* Built-in rule names cannot be redefined unless the registry entry points to
|
|
26
|
+
* the exact same built-in descriptor instance.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```ts
|
|
30
|
+
* const debugRuleRegistry = createCpsatRuleRegistry({
|
|
31
|
+
* debug: defineRuleDescriptor({
|
|
32
|
+
* name: "debug",
|
|
33
|
+
* schema: z.object({ flag: z.boolean() }),
|
|
34
|
+
* compile() {
|
|
35
|
+
* return { rule: "debug", artifacts: [] };
|
|
36
|
+
* },
|
|
37
|
+
* }),
|
|
38
|
+
* });
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* @category Rules
|
|
42
|
+
*/
|
|
43
|
+
export declare function createCpsatRuleRegistry<Registry extends CpsatRuleRegistry>(ruleRegistry: Registry): Registry;
|
|
26
44
|
/**
|
|
27
|
-
*
|
|
45
|
+
* The built-in CP-SAT rule registry.
|
|
46
|
+
*
|
|
47
|
+
* @remarks
|
|
48
|
+
* Pass this to {@link defineRuleFor} when you want registry-bound authoring for
|
|
49
|
+
* built-in rules, or spread it into a larger registry when building a fully
|
|
50
|
+
* explicit descriptor set.
|
|
51
|
+
*
|
|
52
|
+
* @category Rules
|
|
28
53
|
*/
|
|
29
|
-
export declare
|
|
54
|
+
export declare const builtInCpsatRuleRegistry: {
|
|
55
|
+
"assign-together": import("../rule-descriptor.js").RuleDescriptor<"assign-together", {
|
|
56
|
+
groupMemberIds: [string, string, ...string[]];
|
|
57
|
+
priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
|
|
58
|
+
}>;
|
|
59
|
+
"assignment-priority": import("../rule-descriptor.js").RuleDescriptor<"assignment-priority", ({
|
|
60
|
+
preference: "prefer" | "avoid";
|
|
61
|
+
priority?: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY" | undefined;
|
|
62
|
+
} & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
|
|
63
|
+
"location-preference": import("../rule-descriptor.js").RuleDescriptor<"location-preference", {
|
|
64
|
+
locationId: string;
|
|
65
|
+
priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
|
|
66
|
+
} & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">>;
|
|
67
|
+
"role-preference": import("../rule-descriptor.js").RuleDescriptor<"role-preference", {
|
|
68
|
+
roleId: string;
|
|
69
|
+
priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
|
|
70
|
+
} & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">>;
|
|
71
|
+
"max-concurrent-assignments": import("../rule-descriptor.js").RuleDescriptor<"max-concurrent-assignments", ({
|
|
72
|
+
assignments: number;
|
|
73
|
+
priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
|
|
74
|
+
startTime?: {
|
|
75
|
+
hours: number;
|
|
76
|
+
minutes: number;
|
|
77
|
+
} | undefined;
|
|
78
|
+
endTime?: {
|
|
79
|
+
hours: number;
|
|
80
|
+
minutes: number;
|
|
81
|
+
} | undefined;
|
|
82
|
+
} & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
|
|
83
|
+
"target-peak-concurrent-assignments": import("../rule-descriptor.js").RuleDescriptor<"target-peak-concurrent-assignments", ({
|
|
84
|
+
assignments: number;
|
|
85
|
+
priority: "LOW" | "MEDIUM" | "HIGH";
|
|
86
|
+
} & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
|
|
87
|
+
"target-days-week": import("../rule-descriptor.js").RuleDescriptor<"target-days-week", {
|
|
88
|
+
days: number;
|
|
89
|
+
priority: "LOW" | "MEDIUM" | "HIGH";
|
|
90
|
+
weekStartsOn?: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday" | undefined;
|
|
91
|
+
} & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">>;
|
|
92
|
+
"max-consecutive-days": import("../rule-descriptor.js").RuleDescriptor<"max-consecutive-days", {
|
|
93
|
+
days: number;
|
|
94
|
+
priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
|
|
95
|
+
} & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">>;
|
|
96
|
+
"max-days-week": import("../rule-descriptor.js").RuleDescriptor<"max-days-week", ({
|
|
97
|
+
days: number;
|
|
98
|
+
priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
|
|
99
|
+
weekStartsOn?: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday" | undefined;
|
|
100
|
+
} & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
|
|
101
|
+
"max-hours-day": import("../rule-descriptor.js").RuleDescriptor<"max-hours-day", ({
|
|
102
|
+
hours: number;
|
|
103
|
+
priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
|
|
104
|
+
} & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
|
|
105
|
+
"max-hours-week": import("../rule-descriptor.js").RuleDescriptor<"max-hours-week", ({
|
|
106
|
+
hours: number;
|
|
107
|
+
priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
|
|
108
|
+
weekStartsOn?: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday" | undefined;
|
|
109
|
+
} & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
|
|
110
|
+
"max-shifts-day": import("../rule-descriptor.js").RuleDescriptor<"max-shifts-day", ({
|
|
111
|
+
shifts: number;
|
|
112
|
+
priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
|
|
113
|
+
} & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
|
|
114
|
+
"min-consecutive-days": import("../rule-descriptor.js").RuleDescriptor<"min-consecutive-days", {
|
|
115
|
+
days: number;
|
|
116
|
+
priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
|
|
117
|
+
} & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">>;
|
|
118
|
+
"min-days-week": import("../rule-descriptor.js").RuleDescriptor<"min-days-week", {
|
|
119
|
+
days: number;
|
|
120
|
+
priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
|
|
121
|
+
weekStartsOn?: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday" | undefined;
|
|
122
|
+
} & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">>;
|
|
123
|
+
"min-hours-day": import("../rule-descriptor.js").RuleDescriptor<"min-hours-day", {
|
|
124
|
+
hours: number;
|
|
125
|
+
priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
|
|
126
|
+
} & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">>;
|
|
127
|
+
"min-hours-week": import("../rule-descriptor.js").RuleDescriptor<"min-hours-week", {
|
|
128
|
+
hours: number;
|
|
129
|
+
priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
|
|
130
|
+
weekStartsOn?: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday" | undefined;
|
|
131
|
+
} & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">>;
|
|
132
|
+
"min-rest-between-shifts": import("../rule-descriptor.js").RuleDescriptor<"min-rest-between-shifts", {
|
|
133
|
+
hours: number;
|
|
134
|
+
priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
|
|
135
|
+
} & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">>;
|
|
136
|
+
"must-assign": import("../rule-descriptor.js").RuleDescriptor<"must-assign", {
|
|
137
|
+
weekStartsOn?: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday" | undefined;
|
|
138
|
+
} & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">>;
|
|
139
|
+
"time-off": import("../rule-descriptor.js").RuleDescriptor<"time-off", ({
|
|
140
|
+
priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
|
|
141
|
+
startTime?: {
|
|
142
|
+
hours: number;
|
|
143
|
+
minutes: number;
|
|
144
|
+
} | undefined;
|
|
145
|
+
endTime?: {
|
|
146
|
+
hours: number;
|
|
147
|
+
minutes: number;
|
|
148
|
+
} | undefined;
|
|
149
|
+
} & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").RequiredTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
|
|
150
|
+
"minimize-cost": import("../rule-descriptor.js").RuleDescriptor<"minimize-cost", import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills"> & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
|
|
151
|
+
"day-cost-multiplier": import("../rule-descriptor.js").RuleDescriptor<"day-cost-multiplier", ({
|
|
152
|
+
factor: number;
|
|
153
|
+
} & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
|
|
154
|
+
"day-cost-surcharge": import("../rule-descriptor.js").RuleDescriptor<"day-cost-surcharge", ({
|
|
155
|
+
amountPerHour: number;
|
|
156
|
+
} & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
|
|
157
|
+
"time-cost-surcharge": import("../rule-descriptor.js").RuleDescriptor<"time-cost-surcharge", ({
|
|
158
|
+
amountPerHour: number;
|
|
159
|
+
window: {
|
|
160
|
+
from: {
|
|
161
|
+
hours: number;
|
|
162
|
+
minutes: number;
|
|
163
|
+
};
|
|
164
|
+
until: {
|
|
165
|
+
hours: number;
|
|
166
|
+
minutes: number;
|
|
167
|
+
};
|
|
168
|
+
};
|
|
169
|
+
} & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
|
|
170
|
+
"overtime-weekly-multiplier": import("../rule-descriptor.js").RuleDescriptor<"overtime-weekly-multiplier", ({
|
|
171
|
+
after: number;
|
|
172
|
+
factor: number;
|
|
173
|
+
weekStartsOn?: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday" | undefined;
|
|
174
|
+
} & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
|
|
175
|
+
"overtime-weekly-surcharge": import("../rule-descriptor.js").RuleDescriptor<"overtime-weekly-surcharge", ({
|
|
176
|
+
after: number;
|
|
177
|
+
amount: number;
|
|
178
|
+
weekStartsOn?: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday" | undefined;
|
|
179
|
+
} & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
|
|
180
|
+
"overtime-daily-multiplier": import("../rule-descriptor.js").RuleDescriptor<"overtime-daily-multiplier", ({
|
|
181
|
+
after: number;
|
|
182
|
+
factor: number;
|
|
183
|
+
} & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
|
|
184
|
+
"overtime-daily-surcharge": import("../rule-descriptor.js").RuleDescriptor<"overtime-daily-surcharge", ({
|
|
185
|
+
after: number;
|
|
186
|
+
amount: number;
|
|
187
|
+
} & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
|
|
188
|
+
"overtime-tiered-multiplier": import("../rule-descriptor.js").RuleDescriptor<"overtime-tiered-multiplier", ({
|
|
189
|
+
tiers: {
|
|
190
|
+
after: number;
|
|
191
|
+
factor: number;
|
|
192
|
+
}[];
|
|
193
|
+
weekStartsOn?: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday" | undefined;
|
|
194
|
+
} & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
|
|
195
|
+
"max-days-of-week-per-period": import("../rule-descriptor.js").RuleDescriptor<"max-days-of-week-per-period", {
|
|
196
|
+
days: number;
|
|
197
|
+
dayOfWeek: ("monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday")[];
|
|
198
|
+
period: {
|
|
199
|
+
type: "weeks";
|
|
200
|
+
value: number;
|
|
201
|
+
} | {
|
|
202
|
+
type: "months";
|
|
203
|
+
value: number;
|
|
204
|
+
};
|
|
205
|
+
priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
|
|
206
|
+
} & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">>;
|
|
207
|
+
"min-days-of-week-per-period": import("../rule-descriptor.js").RuleDescriptor<"min-days-of-week-per-period", {
|
|
208
|
+
days: number;
|
|
209
|
+
dayOfWeek: ("monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday")[];
|
|
210
|
+
period: {
|
|
211
|
+
type: "weeks";
|
|
212
|
+
value: number;
|
|
213
|
+
} | {
|
|
214
|
+
type: "months";
|
|
215
|
+
value: number;
|
|
216
|
+
};
|
|
217
|
+
priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
|
|
218
|
+
} & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">>;
|
|
219
|
+
};
|
|
30
220
|
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/cpsat/rules/registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/cpsat/rules/registry.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAA2C,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAEnG;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,SAAS,iBAAiB,EAC7E,YAAY,EAAE,QAAQ,GACrB,QAAQ,CAUV;AAED;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAAC,QAAQ,SAAS,iBAAiB,EAClF,YAAY,EAAE,QAAQ,GACrB,QAAQ,CAWV;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,SAAS,iBAAiB,EACxE,YAAY,EAAE,QAAQ,GACrB,QAAQ,CAGV;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BA,CAAC"}
|
|
@@ -1,37 +1,104 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export const builtInCpsatRuleFactories = {
|
|
3
|
-
"assign-together": createAssignTogetherRule,
|
|
4
|
-
"assignment-priority": createAssignmentPriorityRule,
|
|
5
|
-
"location-preference": createLocationPreferenceRule,
|
|
6
|
-
"max-consecutive-days": createMaxConsecutiveDaysRule,
|
|
7
|
-
"max-hours-day": createMaxHoursDayRule,
|
|
8
|
-
"max-hours-week": createMaxHoursWeekRule,
|
|
9
|
-
"max-shifts-day": createMaxShiftsDayRule,
|
|
10
|
-
"min-consecutive-days": createMinConsecutiveDaysRule,
|
|
11
|
-
"min-hours-day": createMinHoursDayRule,
|
|
12
|
-
"min-hours-week": createMinHoursWeekRule,
|
|
13
|
-
"min-rest-between-shifts": createMinRestBetweenShiftsRule,
|
|
14
|
-
"time-off": createTimeOffRule,
|
|
15
|
-
"minimize-cost": createMinimizeCostRule,
|
|
16
|
-
"day-cost-multiplier": createDayCostMultiplierRule,
|
|
17
|
-
"day-cost-surcharge": createDayCostSurchargeRule,
|
|
18
|
-
"time-cost-surcharge": createTimeCostSurchargeRule,
|
|
19
|
-
"overtime-weekly-multiplier": createOvertimeWeeklyMultiplierRule,
|
|
20
|
-
"overtime-weekly-surcharge": createOvertimeWeeklySurchargeRule,
|
|
21
|
-
"overtime-daily-multiplier": createOvertimeDailyMultiplierRule,
|
|
22
|
-
"overtime-daily-surcharge": createOvertimeDailySurchargeRule,
|
|
23
|
-
"overtime-tiered-multiplier": createOvertimeTieredMultiplierRule,
|
|
24
|
-
};
|
|
1
|
+
import { assignTogetherRuleDescriptor, assignmentPriorityRuleDescriptor, dayCostMultiplierRuleDescriptor, dayCostSurchargeRuleDescriptor, locationPreferenceRuleDescriptor, maxConcurrentAssignmentsRuleDescriptor, maxConsecutiveDaysRuleDescriptor, maxDaysOfWeekPerPeriodRuleDescriptor, maxDaysWeekRuleDescriptor, maxHoursDayRuleDescriptor, maxHoursWeekRuleDescriptor, maxShiftsDayRuleDescriptor, minConsecutiveDaysRuleDescriptor, minDaysOfWeekPerPeriodRuleDescriptor, minDaysWeekRuleDescriptor, minHoursDayRuleDescriptor, minHoursWeekRuleDescriptor, minRestBetweenShiftsRuleDescriptor, minimizeCostRuleDescriptor, mustAssignRuleDescriptor, overtimeDailyMultiplierRuleDescriptor, overtimeDailySurchargeRuleDescriptor, overtimeTieredMultiplierRuleDescriptor, overtimeWeeklyMultiplierRuleDescriptor, overtimeWeeklySurchargeRuleDescriptor, rolePreferenceRuleDescriptor, targetDaysWeekRuleDescriptor, targetPeakConcurrentAssignmentsRuleDescriptor, timeCostSurchargeRuleDescriptor, timeOffRuleDescriptor, } from "./index.js";
|
|
25
2
|
/**
|
|
26
|
-
*
|
|
3
|
+
* Validates that each rule registry key matches the descriptor name it points to.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* This enforces the invariant required by registry-driven config typing and by
|
|
7
|
+
* runtime rule resolution. A registry entry like `{ debug: descriptorNamedFoo }`
|
|
8
|
+
* is rejected because the key and descriptor identity diverge.
|
|
9
|
+
*
|
|
10
|
+
* @category Rules
|
|
27
11
|
*/
|
|
28
|
-
export function
|
|
29
|
-
for (const
|
|
30
|
-
if (name
|
|
31
|
-
|
|
32
|
-
throw new Error(`Cannot override built-in CP-SAT rule "${name}" in custom factory`);
|
|
12
|
+
export function assertValidCpsatRuleRegistry(ruleRegistry) {
|
|
13
|
+
for (const [key, descriptor] of Object.entries(ruleRegistry)) {
|
|
14
|
+
if (descriptor.name !== key) {
|
|
15
|
+
throw new Error(`Registered CP-SAT rule descriptor key "${key}" must match descriptor.name "${descriptor.name}".`);
|
|
33
16
|
}
|
|
34
17
|
}
|
|
35
|
-
return
|
|
18
|
+
return ruleRegistry;
|
|
36
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Validates that a registry does not shadow built-in rule names with different descriptors.
|
|
22
|
+
*
|
|
23
|
+
* @remarks
|
|
24
|
+
* A registry may reuse the exact built-in descriptor instance under the same name,
|
|
25
|
+
* but it may not replace a built-in rule with an incompatible descriptor.
|
|
26
|
+
*/
|
|
27
|
+
export function assertNoBuiltInCpsatRuleOverrides(ruleRegistry) {
|
|
28
|
+
for (const name in ruleRegistry) {
|
|
29
|
+
if (name in builtInCpsatRuleRegistry &&
|
|
30
|
+
ruleRegistry[name] !== builtInCpsatRuleRegistry[name]) {
|
|
31
|
+
throw new Error(`Cannot override built-in CP-SAT rule "${name}" in custom registry`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return ruleRegistry;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Creates a custom CP-SAT rule registry.
|
|
38
|
+
*
|
|
39
|
+
* @remarks
|
|
40
|
+
* Built-in rule names cannot be redefined unless the registry entry points to
|
|
41
|
+
* the exact same built-in descriptor instance.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```ts
|
|
45
|
+
* const debugRuleRegistry = createCpsatRuleRegistry({
|
|
46
|
+
* debug: defineRuleDescriptor({
|
|
47
|
+
* name: "debug",
|
|
48
|
+
* schema: z.object({ flag: z.boolean() }),
|
|
49
|
+
* compile() {
|
|
50
|
+
* return { rule: "debug", artifacts: [] };
|
|
51
|
+
* },
|
|
52
|
+
* }),
|
|
53
|
+
* });
|
|
54
|
+
* ```
|
|
55
|
+
*
|
|
56
|
+
* @category Rules
|
|
57
|
+
*/
|
|
58
|
+
export function createCpsatRuleRegistry(ruleRegistry) {
|
|
59
|
+
assertNoBuiltInCpsatRuleOverrides(ruleRegistry);
|
|
60
|
+
return assertValidCpsatRuleRegistry(ruleRegistry);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* The built-in CP-SAT rule registry.
|
|
64
|
+
*
|
|
65
|
+
* @remarks
|
|
66
|
+
* Pass this to {@link defineRuleFor} when you want registry-bound authoring for
|
|
67
|
+
* built-in rules, or spread it into a larger registry when building a fully
|
|
68
|
+
* explicit descriptor set.
|
|
69
|
+
*
|
|
70
|
+
* @category Rules
|
|
71
|
+
*/
|
|
72
|
+
export const builtInCpsatRuleRegistry = assertValidCpsatRuleRegistry({
|
|
73
|
+
"assign-together": assignTogetherRuleDescriptor,
|
|
74
|
+
"assignment-priority": assignmentPriorityRuleDescriptor,
|
|
75
|
+
"location-preference": locationPreferenceRuleDescriptor,
|
|
76
|
+
"role-preference": rolePreferenceRuleDescriptor,
|
|
77
|
+
"max-concurrent-assignments": maxConcurrentAssignmentsRuleDescriptor,
|
|
78
|
+
"target-peak-concurrent-assignments": targetPeakConcurrentAssignmentsRuleDescriptor,
|
|
79
|
+
"target-days-week": targetDaysWeekRuleDescriptor,
|
|
80
|
+
"max-consecutive-days": maxConsecutiveDaysRuleDescriptor,
|
|
81
|
+
"max-days-week": maxDaysWeekRuleDescriptor,
|
|
82
|
+
"max-hours-day": maxHoursDayRuleDescriptor,
|
|
83
|
+
"max-hours-week": maxHoursWeekRuleDescriptor,
|
|
84
|
+
"max-shifts-day": maxShiftsDayRuleDescriptor,
|
|
85
|
+
"min-consecutive-days": minConsecutiveDaysRuleDescriptor,
|
|
86
|
+
"min-days-week": minDaysWeekRuleDescriptor,
|
|
87
|
+
"min-hours-day": minHoursDayRuleDescriptor,
|
|
88
|
+
"min-hours-week": minHoursWeekRuleDescriptor,
|
|
89
|
+
"min-rest-between-shifts": minRestBetweenShiftsRuleDescriptor,
|
|
90
|
+
"must-assign": mustAssignRuleDescriptor,
|
|
91
|
+
"time-off": timeOffRuleDescriptor,
|
|
92
|
+
"minimize-cost": minimizeCostRuleDescriptor,
|
|
93
|
+
"day-cost-multiplier": dayCostMultiplierRuleDescriptor,
|
|
94
|
+
"day-cost-surcharge": dayCostSurchargeRuleDescriptor,
|
|
95
|
+
"time-cost-surcharge": timeCostSurchargeRuleDescriptor,
|
|
96
|
+
"overtime-weekly-multiplier": overtimeWeeklyMultiplierRuleDescriptor,
|
|
97
|
+
"overtime-weekly-surcharge": overtimeWeeklySurchargeRuleDescriptor,
|
|
98
|
+
"overtime-daily-multiplier": overtimeDailyMultiplierRuleDescriptor,
|
|
99
|
+
"overtime-daily-surcharge": overtimeDailySurchargeRuleDescriptor,
|
|
100
|
+
"overtime-tiered-multiplier": overtimeTieredMultiplierRuleDescriptor,
|
|
101
|
+
"max-days-of-week-per-period": maxDaysOfWeekPerPeriodRuleDescriptor,
|
|
102
|
+
"min-days-of-week-per-period": minDaysOfWeekPerPeriodRuleDescriptor,
|
|
103
|
+
});
|
|
37
104
|
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/cpsat/rules/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/cpsat/rules/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,gCAAgC,EAChC,+BAA+B,EAC/B,8BAA8B,EAC9B,gCAAgC,EAChC,sCAAsC,EACtC,gCAAgC,EAChC,oCAAoC,EACpC,yBAAyB,EACzB,yBAAyB,EACzB,0BAA0B,EAC1B,0BAA0B,EAC1B,gCAAgC,EAChC,oCAAoC,EACpC,yBAAyB,EACzB,yBAAyB,EACzB,0BAA0B,EAC1B,kCAAkC,EAClC,0BAA0B,EAC1B,wBAAwB,EACxB,qCAAqC,EACrC,oCAAoC,EACpC,sCAAsC,EACtC,sCAAsC,EACtC,qCAAqC,EACrC,4BAA4B,EAC5B,4BAA4B,EAC5B,6CAA6C,EAC7C,+BAA+B,EAC/B,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAGpB;;;;;;;;;GASG;AACH,MAAM,UAAU,4BAA4B,CAC1C,YAAsB;IAEtB,KAAK,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7D,IAAI,UAAU,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CACb,0CAA0C,GAAG,iCAAiC,UAAU,CAAC,IAAI,IAAI,CAClG,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iCAAiC,CAC/C,YAAsB;IAEtB,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,IACE,IAAI,IAAI,wBAAwB;YAChC,YAAY,CAAC,IAAI,CAAC,KAAK,wBAAwB,CAAC,IAAqB,CAAC,EACtE,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,yCAAyC,IAAI,sBAAsB,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,uBAAuB,CACrC,YAAsB;IAEtB,iCAAiC,CAAC,YAAY,CAAC,CAAC;IAChD,OAAO,4BAA4B,CAAC,YAAY,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,4BAA4B,CAAC;IACnE,iBAAiB,EAAE,4BAA4B;IAC/C,qBAAqB,EAAE,gCAAgC;IACvD,qBAAqB,EAAE,gCAAgC;IACvD,iBAAiB,EAAE,4BAA4B;IAC/C,4BAA4B,EAAE,sCAAsC;IACpE,oCAAoC,EAAE,6CAA6C;IACnF,kBAAkB,EAAE,4BAA4B;IAChD,sBAAsB,EAAE,gCAAgC;IACxD,eAAe,EAAE,yBAAyB;IAC1C,eAAe,EAAE,yBAAyB;IAC1C,gBAAgB,EAAE,0BAA0B;IAC5C,gBAAgB,EAAE,0BAA0B;IAC5C,sBAAsB,EAAE,gCAAgC;IACxD,eAAe,EAAE,yBAAyB;IAC1C,eAAe,EAAE,yBAAyB;IAC1C,gBAAgB,EAAE,0BAA0B;IAC5C,yBAAyB,EAAE,kCAAkC;IAC7D,aAAa,EAAE,wBAAwB;IACvC,UAAU,EAAE,qBAAqB;IACjC,eAAe,EAAE,0BAA0B;IAC3C,qBAAqB,EAAE,+BAA+B;IACtD,oBAAoB,EAAE,8BAA8B;IACpD,qBAAqB,EAAE,+BAA+B;IACtD,4BAA4B,EAAE,sCAAsC;IACpE,2BAA2B,EAAE,qCAAqC;IAClE,2BAA2B,EAAE,qCAAqC;IAClE,0BAA0B,EAAE,oCAAoC;IAChE,4BAA4B,EAAE,sCAAsC;IACpE,6BAA6B,EAAE,oCAAoC;IACnE,6BAA6B,EAAE,oCAAoC;CACjC,CAAC,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { SchedulingMember } from "../types.js";
|
|
2
2
|
import { type ParsedEntityScope } from "./scope.types.js";
|
|
3
|
-
import type { CpsatRuleConfigEntry,
|
|
4
|
-
import type {
|
|
3
|
+
import type { AnyCpsatRuleConfigEntry, BuiltInCpsatRuleRegistry, CpsatRuleConfigEntry, CpsatRuleConfigEntryFor, CpsatRuleRegistry } from "./rules.types.js";
|
|
4
|
+
import type { CompiledRule, RuleCompileContext } from "../rule-descriptor.js";
|
|
5
5
|
/**
|
|
6
6
|
* Gets the IDs that match an entity scope.
|
|
7
7
|
* All scope types are expanded to concrete IDs.
|
|
@@ -11,16 +11,18 @@ export declare function getMemberIdsForScope(entity: ParsedEntityScope, members:
|
|
|
11
11
|
* Resolves overlapping scopes so that more specific scopes override broader ones.
|
|
12
12
|
*
|
|
13
13
|
* Resolution rules:
|
|
14
|
-
* 1.
|
|
15
|
-
* 2.
|
|
14
|
+
* 1. Custom rules and built-in rules in NON_SCOPED_RULES pass through unchanged
|
|
15
|
+
* 2. Built-in rules with different time scopes coexist (different time windows don't compete)
|
|
16
16
|
* 3. Within the same time scope, rules are sorted by specificity (person > role > skill > global)
|
|
17
17
|
* and then by insertion order (later wins for same specificity, i.e., last insert overrides)
|
|
18
18
|
* 4. More specific rules claim their IDs first; less specific rules get the remainder
|
|
19
19
|
* 5. All scope types (person, role, skill, global) are expanded to explicit IDs
|
|
20
20
|
*/
|
|
21
|
-
export declare function resolveRuleScopes(entries:
|
|
21
|
+
export declare function resolveRuleScopes(entries: readonly AnyCpsatRuleConfigEntry[], members: SchedulingMember[]): AnyCpsatRuleConfigEntry[];
|
|
22
22
|
/**
|
|
23
|
-
* Builds
|
|
23
|
+
* Builds compiled rules from named configs, applying scoping resolution.
|
|
24
24
|
*/
|
|
25
|
-
export declare function buildCpsatRules(entries: CpsatRuleConfigEntry[], members: SchedulingMember[],
|
|
25
|
+
export declare function buildCpsatRules(entries: readonly CpsatRuleConfigEntry[], members: SchedulingMember[], compileContext: RuleCompileContext, ruleRegistry?: BuiltInCpsatRuleRegistry): CompiledRule[];
|
|
26
|
+
export declare function buildCpsatRules<Registry extends CpsatRuleRegistry>(entries: readonly CpsatRuleConfigEntryFor<Registry>[], members: SchedulingMember[], compileContext: RuleCompileContext, ruleRegistry: Registry): CompiledRule[];
|
|
27
|
+
export declare function buildCpsatRules(entries: readonly AnyCpsatRuleConfigEntry[], members: SchedulingMember[], compileContext: RuleCompileContext, ruleRegistry: CpsatRuleRegistry): CompiledRule[];
|
|
26
28
|
//# sourceMappingURL=resolver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../src/cpsat/rules/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAGL,KAAK,iBAAiB,EAEvB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../src/cpsat/rules/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAGL,KAAK,iBAAiB,EAEvB,MAAM,kBAAkB,CAAC;AAM1B,OAAO,KAAK,EACV,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAkB9E;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,gBAAgB,EAAE,GAC1B,MAAM,EAAE,CAkBV;AAgDD;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,uBAAuB,EAAE,EAC3C,OAAO,EAAE,gBAAgB,EAAE,GAC1B,uBAAuB,EAAE,CAiE3B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,SAAS,oBAAoB,EAAE,EACxC,OAAO,EAAE,gBAAgB,EAAE,EAC3B,cAAc,EAAE,kBAAkB,EAClC,YAAY,CAAC,EAAE,wBAAwB,GACtC,YAAY,EAAE,CAAC;AAClB,wBAAgB,eAAe,CAAC,QAAQ,SAAS,iBAAiB,EAChE,OAAO,EAAE,SAAS,uBAAuB,CAAC,QAAQ,CAAC,EAAE,EACrD,OAAO,EAAE,gBAAgB,EAAE,EAC3B,cAAc,EAAE,kBAAkB,EAClC,YAAY,EAAE,QAAQ,GACrB,YAAY,EAAE,CAAC;AAClB,wBAAgB,eAAe,CAC7B,OAAO,EAAE,SAAS,uBAAuB,EAAE,EAC3C,OAAO,EAAE,gBAAgB,EAAE,EAC3B,cAAc,EAAE,kBAAkB,EAClC,YAAY,EAAE,iBAAiB,GAC9B,YAAY,EAAE,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { parseEntityScope, parseTimeScope, } from "./scope.types.js";
|
|
2
|
-
import {
|
|
2
|
+
import { assertNoBuiltInCpsatRuleOverrides, assertValidCpsatRuleRegistry, builtInCpsatRuleRegistry, } from "./registry.js";
|
|
3
|
+
import { compileRuleDescriptor } from "../rule-descriptor.js";
|
|
3
4
|
/**
|
|
4
5
|
* Extract the config portion from a flat rule entry (everything except `name`).
|
|
5
6
|
*/
|
|
@@ -67,15 +68,17 @@ function timeScopeKey(time) {
|
|
|
67
68
|
}
|
|
68
69
|
}
|
|
69
70
|
/**
|
|
70
|
-
*
|
|
71
|
+
* Built-in rules that don't use standard scoping and should pass through unchanged.
|
|
72
|
+
* Custom rules also pass through unchanged so they can receive their declared
|
|
73
|
+
* scope fields directly.
|
|
71
74
|
*/
|
|
72
75
|
const NON_SCOPED_RULES = new Set(["assign-together"]);
|
|
73
76
|
/**
|
|
74
77
|
* Resolves overlapping scopes so that more specific scopes override broader ones.
|
|
75
78
|
*
|
|
76
79
|
* Resolution rules:
|
|
77
|
-
* 1.
|
|
78
|
-
* 2.
|
|
80
|
+
* 1. Custom rules and built-in rules in NON_SCOPED_RULES pass through unchanged
|
|
81
|
+
* 2. Built-in rules with different time scopes coexist (different time windows don't compete)
|
|
79
82
|
* 3. Within the same time scope, rules are sorted by specificity (person > role > skill > global)
|
|
80
83
|
* and then by insertion order (later wins for same specificity, i.e., last insert overrides)
|
|
81
84
|
* 4. More specific rules claim their IDs first; less specific rules get the remainder
|
|
@@ -85,7 +88,7 @@ export function resolveRuleScopes(entries, members) {
|
|
|
85
88
|
const resolved = [];
|
|
86
89
|
const scopedEntries = [];
|
|
87
90
|
entries.forEach((entry, index) => {
|
|
88
|
-
if (NON_SCOPED_RULES.has(entry.name)) {
|
|
91
|
+
if (NON_SCOPED_RULES.has(entry.name) || !(entry.name in builtInCpsatRuleRegistry)) {
|
|
89
92
|
resolved.push(entry);
|
|
90
93
|
}
|
|
91
94
|
else {
|
|
@@ -105,8 +108,7 @@ export function resolveRuleScopes(entries, members) {
|
|
|
105
108
|
const list = grouped.get(groupKey) ?? [];
|
|
106
109
|
list.push({
|
|
107
110
|
index,
|
|
108
|
-
|
|
109
|
-
config,
|
|
111
|
+
entry,
|
|
110
112
|
entityScope: entity,
|
|
111
113
|
timeScope: time,
|
|
112
114
|
});
|
|
@@ -121,15 +123,15 @@ export function resolveRuleScopes(entries, members) {
|
|
|
121
123
|
return b.index - a.index;
|
|
122
124
|
});
|
|
123
125
|
const assignedMembers = new Set();
|
|
124
|
-
for (const
|
|
125
|
-
const targetIds = getMemberIdsForScope(
|
|
126
|
+
for (const item of sorted) {
|
|
127
|
+
const targetIds = getMemberIdsForScope(item.entityScope, members);
|
|
126
128
|
const remaining = subtractIds(targetIds, assignedMembers);
|
|
127
129
|
if (remaining.length === 0)
|
|
128
130
|
continue;
|
|
129
131
|
remaining.forEach((id) => assignedMembers.add(id));
|
|
130
|
-
const { memberIds: _memberIds, roleIds: _roleIds, skillIds: _skillIds, ...configWithoutEntityScope } = entry
|
|
132
|
+
const { memberIds: _memberIds, roleIds: _roleIds, skillIds: _skillIds, ...configWithoutEntityScope } = entryConfig(item.entry);
|
|
131
133
|
resolved.push({
|
|
132
|
-
name: entry.name,
|
|
134
|
+
name: item.entry.name,
|
|
133
135
|
...configWithoutEntityScope,
|
|
134
136
|
memberIds: remaining,
|
|
135
137
|
});
|
|
@@ -137,19 +139,18 @@ export function resolveRuleScopes(entries, members) {
|
|
|
137
139
|
}
|
|
138
140
|
return resolved;
|
|
139
141
|
}
|
|
140
|
-
|
|
141
|
-
* Builds CompilationRule instances from named configs, applying scoping resolution.
|
|
142
|
-
*/
|
|
143
|
-
export function buildCpsatRules(entries, members, factories = builtInCpsatRuleFactories) {
|
|
142
|
+
export function buildCpsatRules(entries, members, compileContext, ruleRegistry = builtInCpsatRuleRegistry) {
|
|
144
143
|
if (entries.length === 0)
|
|
145
144
|
return [];
|
|
145
|
+
assertValidCpsatRuleRegistry(ruleRegistry);
|
|
146
|
+
assertNoBuiltInCpsatRuleOverrides(ruleRegistry);
|
|
146
147
|
const resolved = resolveRuleScopes(entries, members);
|
|
147
148
|
return resolved.map((entry) => {
|
|
148
|
-
const
|
|
149
|
-
if (!
|
|
149
|
+
const descriptor = ruleRegistry[entry.name];
|
|
150
|
+
if (!descriptor) {
|
|
150
151
|
throw new Error(`Unknown CP-SAT rule "${entry.name}"`);
|
|
151
152
|
}
|
|
152
|
-
return
|
|
153
|
+
return compileRuleDescriptor(descriptor, entryConfig(entry), compileContext);
|
|
153
154
|
});
|
|
154
155
|
}
|
|
155
156
|
//# sourceMappingURL=resolver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../src/cpsat/rules/resolver.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,cAAc,GAGf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../src/cpsat/rules/resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as z from "zod";
|
|
2
|
+
export declare const RolePreferenceSchema: z.ZodIntersection<z.ZodObject<{
|
|
3
|
+
roleId: z.ZodString;
|
|
4
|
+
priority: z.ZodDefault<z.ZodEnum<{
|
|
5
|
+
LOW: "LOW";
|
|
6
|
+
MEDIUM: "MEDIUM";
|
|
7
|
+
HIGH: "HIGH";
|
|
8
|
+
MANDATORY: "MANDATORY";
|
|
9
|
+
}>>;
|
|
10
|
+
}, z.core.$strip>, z.ZodType<import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">, unknown, z.core.$ZodTypeInternals<import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">, unknown>>>;
|
|
11
|
+
/**
|
|
12
|
+
* Configuration for {@link rolePreferenceRuleDescriptor}.
|
|
13
|
+
*/
|
|
14
|
+
export type RolePreferenceConfig = z.infer<typeof RolePreferenceSchema>;
|
|
15
|
+
/**
|
|
16
|
+
* Low-level descriptor for role preference rules.
|
|
17
|
+
*
|
|
18
|
+
* @category Rules
|
|
19
|
+
*/
|
|
20
|
+
export declare const rolePreferenceRuleDescriptor: import("../rule-descriptor.js").RuleDescriptor<"role-preference", {
|
|
21
|
+
roleId: string;
|
|
22
|
+
priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
|
|
23
|
+
} & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">>;
|
|
24
|
+
//# sourceMappingURL=role-preference.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-preference.d.ts","sourceRoot":"","sources":["../../../src/cpsat/rules/role-preference.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAazB,eAAO,MAAM,oBAAoB;;;;;;;;iOAKkB,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAExE;;;;GAIG;AACH,eAAO,MAAM,4BAA4B;;;+EA6DvC,CAAC"}
|