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
|
@@ -1,33 +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
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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;
|
|
29
44
|
/**
|
|
30
|
-
*
|
|
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
|
|
31
53
|
*/
|
|
32
|
-
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
|
+
};
|
|
33
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,40 +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-days-week": createMaxDaysWeekRule,
|
|
8
|
-
"max-hours-day": createMaxHoursDayRule,
|
|
9
|
-
"max-hours-week": createMaxHoursWeekRule,
|
|
10
|
-
"max-shifts-day": createMaxShiftsDayRule,
|
|
11
|
-
"min-consecutive-days": createMinConsecutiveDaysRule,
|
|
12
|
-
"min-days-week": createMinDaysWeekRule,
|
|
13
|
-
"min-hours-day": createMinHoursDayRule,
|
|
14
|
-
"min-hours-week": createMinHoursWeekRule,
|
|
15
|
-
"min-rest-between-shifts": createMinRestBetweenShiftsRule,
|
|
16
|
-
"must-assign": createMustAssignRule,
|
|
17
|
-
"time-off": createTimeOffRule,
|
|
18
|
-
"minimize-cost": createMinimizeCostRule,
|
|
19
|
-
"day-cost-multiplier": createDayCostMultiplierRule,
|
|
20
|
-
"day-cost-surcharge": createDayCostSurchargeRule,
|
|
21
|
-
"time-cost-surcharge": createTimeCostSurchargeRule,
|
|
22
|
-
"overtime-weekly-multiplier": createOvertimeWeeklyMultiplierRule,
|
|
23
|
-
"overtime-weekly-surcharge": createOvertimeWeeklySurchargeRule,
|
|
24
|
-
"overtime-daily-multiplier": createOvertimeDailyMultiplierRule,
|
|
25
|
-
"overtime-daily-surcharge": createOvertimeDailySurchargeRule,
|
|
26
|
-
"overtime-tiered-multiplier": createOvertimeTieredMultiplierRule,
|
|
27
|
-
};
|
|
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";
|
|
28
2
|
/**
|
|
29
|
-
*
|
|
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
|
|
30
11
|
*/
|
|
31
|
-
export function
|
|
32
|
-
for (const
|
|
33
|
-
if (name
|
|
34
|
-
|
|
35
|
-
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}".`);
|
|
36
16
|
}
|
|
37
17
|
}
|
|
38
|
-
return
|
|
18
|
+
return ruleRegistry;
|
|
39
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
|
+
});
|
|
40
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":"AACA,OAAO,EACL,gBAAgB,EAChB,cAAc,GAGf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,iCAAiC,EACjC,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,eAAe,CAAC;AASvB,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAS9D;;GAEG;AACH,SAAS,WAAW,CAAC,KAA8B;IACjD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC;IACzC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAyB,EACzB,OAA2B;IAE3B,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACnD,OAAO,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3D,CAAC;QACD,KAAK,OAAO;YACV,OAAO,OAAO;iBACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;iBAChE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACtB,KAAK,QAAQ;YACX,OAAO,OAAO;iBACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;iBACnE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACtB,KAAK,QAAQ,CAAC;QACd;YACE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;AACH,CAAC;AAED,sEAAsE;AACtE,SAAS,WAAW,CAAC,MAAyB;IAC5C,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,SAAS;YACZ,OAAO,CAAC,CAAC;QACX,KAAK,OAAO;YACV,OAAO,CAAC,CAAC;QACX,KAAK,QAAQ;YACX,OAAO,CAAC,CAAC;QACX,KAAK,QAAQ,CAAC;QACd;YACE,OAAO,CAAC,CAAC;IACb,CAAC;AACH,CAAC;AAED,8DAA8D;AAC9D,SAAS,WAAW,CAAC,GAAa,EAAE,QAAqB;IACvD,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CAAC,IAAqB;IACzC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,MAAM;YACT,OAAO,QAAQ,CAAC;QAClB,KAAK,WAAW;YACd,OAAO,aAAa,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/C,KAAK,eAAe;YAClB,OAAO,iBAAiB,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACjE,KAAK,WAAW;YACd,OAAO,aAAa,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5D,KAAK,WAAW;YACd,OAAO,aAAa,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACvH,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAE9D;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAA2C,EAC3C,OAA2B;IAE3B,MAAM,QAAQ,GAA8B,EAAE,CAAC;IAC/C,MAAM,aAAa,GAA6D,EAAE,CAAC;IAEnF,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC/B,IAAI,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,wBAAwB,CAAC,EAAE,CAAC;YAClF,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACvC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAC;IACnD,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;QACzC,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC;YACR,KAAK;YACL,KAAK;YACL,WAAW,EAAE,MAAM;YACnB,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YACzC,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YACzC,IAAI,KAAK,KAAK,KAAK;gBAAE,OAAO,KAAK,GAAG,KAAK,CAAC;YAC1C,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;QAE1C,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAClE,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;YAC1D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAErC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAEnD,MAAM,EACJ,SAAS,EAAE,UAAU,EACrB,OAAO,EAAE,QAAQ,EACjB,QAAQ,EAAE,SAAS,EACnB,GAAG,wBAAwB,EAC5B,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5B,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;gBACrB,GAAG,wBAAwB;gBAC3B,SAAS,EAAE,SAAS;aACrB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAuBD,MAAM,UAAU,eAAe,CAC7B,OAA2C,EAC3C,OAA2B,EAC3B,cAAkC,EAClC,eAAkC,wBAAwB;IAE1D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,4BAA4B,CAAC,YAAY,CAAC,CAAC;IAC3C,iCAAiC,CAAC,YAAY,CAAC,CAAC;IAEhD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAErD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC5B,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,wBAAwB,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,qBAAqB,CAAC,UAAU,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -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"}
|