dabke 0.78.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/CHANGELOG.md +120 -0
  2. package/LICENSE +21 -0
  3. package/README.md +187 -0
  4. package/dist/client.d.ts +14 -0
  5. package/dist/client.d.ts.map +1 -0
  6. package/dist/client.js +42 -0
  7. package/dist/client.js.map +1 -0
  8. package/dist/client.schemas.d.ts +250 -0
  9. package/dist/client.schemas.d.ts.map +1 -0
  10. package/dist/client.schemas.js +137 -0
  11. package/dist/client.schemas.js.map +1 -0
  12. package/dist/client.types.d.ts +34 -0
  13. package/dist/client.types.d.ts.map +1 -0
  14. package/dist/client.types.js +18 -0
  15. package/dist/client.types.js.map +1 -0
  16. package/dist/cpsat/model-builder.d.ts +128 -0
  17. package/dist/cpsat/model-builder.d.ts.map +1 -0
  18. package/dist/cpsat/model-builder.js +640 -0
  19. package/dist/cpsat/model-builder.js.map +1 -0
  20. package/dist/cpsat/response.d.ts +74 -0
  21. package/dist/cpsat/response.d.ts.map +1 -0
  22. package/dist/cpsat/response.js +92 -0
  23. package/dist/cpsat/response.js.map +1 -0
  24. package/dist/cpsat/rules/assign-together.d.ts +23 -0
  25. package/dist/cpsat/rules/assign-together.d.ts.map +1 -0
  26. package/dist/cpsat/rules/assign-together.js +78 -0
  27. package/dist/cpsat/rules/assign-together.js.map +1 -0
  28. package/dist/cpsat/rules/employee-assignment-priority.d.ts +64 -0
  29. package/dist/cpsat/rules/employee-assignment-priority.d.ts.map +1 -0
  30. package/dist/cpsat/rules/employee-assignment-priority.js +151 -0
  31. package/dist/cpsat/rules/employee-assignment-priority.js.map +1 -0
  32. package/dist/cpsat/rules/index.d.ts +13 -0
  33. package/dist/cpsat/rules/index.d.ts.map +1 -0
  34. package/dist/cpsat/rules/index.js +13 -0
  35. package/dist/cpsat/rules/index.js.map +1 -0
  36. package/dist/cpsat/rules/location-preference.d.ts +29 -0
  37. package/dist/cpsat/rules/location-preference.d.ts.map +1 -0
  38. package/dist/cpsat/rules/location-preference.js +59 -0
  39. package/dist/cpsat/rules/location-preference.js.map +1 -0
  40. package/dist/cpsat/rules/max-consecutive-days.d.ts +28 -0
  41. package/dist/cpsat/rules/max-consecutive-days.d.ts.map +1 -0
  42. package/dist/cpsat/rules/max-consecutive-days.js +70 -0
  43. package/dist/cpsat/rules/max-consecutive-days.js.map +1 -0
  44. package/dist/cpsat/rules/max-hours-day.d.ts +57 -0
  45. package/dist/cpsat/rules/max-hours-day.d.ts.map +1 -0
  46. package/dist/cpsat/rules/max-hours-day.js +159 -0
  47. package/dist/cpsat/rules/max-hours-day.js.map +1 -0
  48. package/dist/cpsat/rules/max-hours-week.d.ts +62 -0
  49. package/dist/cpsat/rules/max-hours-week.d.ts.map +1 -0
  50. package/dist/cpsat/rules/max-hours-week.js +169 -0
  51. package/dist/cpsat/rules/max-hours-week.js.map +1 -0
  52. package/dist/cpsat/rules/max-shifts-day.d.ts +69 -0
  53. package/dist/cpsat/rules/max-shifts-day.d.ts.map +1 -0
  54. package/dist/cpsat/rules/max-shifts-day.js +170 -0
  55. package/dist/cpsat/rules/max-shifts-day.js.map +1 -0
  56. package/dist/cpsat/rules/min-consecutive-days.d.ts +29 -0
  57. package/dist/cpsat/rules/min-consecutive-days.d.ts.map +1 -0
  58. package/dist/cpsat/rules/min-consecutive-days.js +104 -0
  59. package/dist/cpsat/rules/min-consecutive-days.js.map +1 -0
  60. package/dist/cpsat/rules/min-hours-day.d.ts +28 -0
  61. package/dist/cpsat/rules/min-hours-day.d.ts.map +1 -0
  62. package/dist/cpsat/rules/min-hours-day.js +61 -0
  63. package/dist/cpsat/rules/min-hours-day.js.map +1 -0
  64. package/dist/cpsat/rules/min-hours-week.d.ts +29 -0
  65. package/dist/cpsat/rules/min-hours-week.d.ts.map +1 -0
  66. package/dist/cpsat/rules/min-hours-week.js +68 -0
  67. package/dist/cpsat/rules/min-hours-week.js.map +1 -0
  68. package/dist/cpsat/rules/min-rest-between-shifts.d.ts +28 -0
  69. package/dist/cpsat/rules/min-rest-between-shifts.d.ts.map +1 -0
  70. package/dist/cpsat/rules/min-rest-between-shifts.js +95 -0
  71. package/dist/cpsat/rules/min-rest-between-shifts.js.map +1 -0
  72. package/dist/cpsat/rules/registry.d.ts +7 -0
  73. package/dist/cpsat/rules/registry.d.ts.map +1 -0
  74. package/dist/cpsat/rules/registry.js +28 -0
  75. package/dist/cpsat/rules/registry.js.map +1 -0
  76. package/dist/cpsat/rules/resolver.d.ts +31 -0
  77. package/dist/cpsat/rules/resolver.d.ts.map +1 -0
  78. package/dist/cpsat/rules/resolver.js +124 -0
  79. package/dist/cpsat/rules/resolver.js.map +1 -0
  80. package/dist/cpsat/rules/rules.types.d.ts +32 -0
  81. package/dist/cpsat/rules/rules.types.d.ts.map +1 -0
  82. package/dist/cpsat/rules/rules.types.js +2 -0
  83. package/dist/cpsat/rules/rules.types.js.map +1 -0
  84. package/dist/cpsat/rules/scoping.d.ts +129 -0
  85. package/dist/cpsat/rules/scoping.d.ts.map +1 -0
  86. package/dist/cpsat/rules/scoping.js +190 -0
  87. package/dist/cpsat/rules/scoping.js.map +1 -0
  88. package/dist/cpsat/rules/time-off.d.ts +78 -0
  89. package/dist/cpsat/rules/time-off.d.ts.map +1 -0
  90. package/dist/cpsat/rules/time-off.js +261 -0
  91. package/dist/cpsat/rules/time-off.js.map +1 -0
  92. package/dist/cpsat/rules.d.ts +5 -0
  93. package/dist/cpsat/rules.d.ts.map +1 -0
  94. package/dist/cpsat/rules.js +4 -0
  95. package/dist/cpsat/rules.js.map +1 -0
  96. package/dist/cpsat/semantic-time.d.ts +198 -0
  97. package/dist/cpsat/semantic-time.d.ts.map +1 -0
  98. package/dist/cpsat/semantic-time.js +222 -0
  99. package/dist/cpsat/semantic-time.js.map +1 -0
  100. package/dist/cpsat/types.d.ts +180 -0
  101. package/dist/cpsat/types.d.ts.map +1 -0
  102. package/dist/cpsat/types.js +2 -0
  103. package/dist/cpsat/types.js.map +1 -0
  104. package/dist/cpsat/utils.d.ts +47 -0
  105. package/dist/cpsat/utils.d.ts.map +1 -0
  106. package/dist/cpsat/utils.js +92 -0
  107. package/dist/cpsat/utils.js.map +1 -0
  108. package/dist/cpsat/validation-reporter.d.ts +54 -0
  109. package/dist/cpsat/validation-reporter.d.ts.map +1 -0
  110. package/dist/cpsat/validation-reporter.js +261 -0
  111. package/dist/cpsat/validation-reporter.js.map +1 -0
  112. package/dist/cpsat/validation.types.d.ts +141 -0
  113. package/dist/cpsat/validation.types.d.ts.map +1 -0
  114. package/dist/cpsat/validation.types.js +14 -0
  115. package/dist/cpsat/validation.types.js.map +1 -0
  116. package/dist/datetime.utils.d.ts +245 -0
  117. package/dist/datetime.utils.d.ts.map +1 -0
  118. package/dist/datetime.utils.js +372 -0
  119. package/dist/datetime.utils.js.map +1 -0
  120. package/dist/errors.d.ts +12 -0
  121. package/dist/errors.d.ts.map +1 -0
  122. package/dist/errors.js +17 -0
  123. package/dist/errors.js.map +1 -0
  124. package/dist/index.d.ts +112 -0
  125. package/dist/index.d.ts.map +1 -0
  126. package/dist/index.js +116 -0
  127. package/dist/index.js.map +1 -0
  128. package/dist/llms.d.ts +5 -0
  129. package/dist/llms.d.ts.map +1 -0
  130. package/dist/llms.js +8 -0
  131. package/dist/llms.js.map +1 -0
  132. package/dist/testing/index.d.ts +12 -0
  133. package/dist/testing/index.d.ts.map +1 -0
  134. package/dist/testing/index.js +11 -0
  135. package/dist/testing/index.js.map +1 -0
  136. package/dist/testing/solver-container.d.ts +49 -0
  137. package/dist/testing/solver-container.d.ts.map +1 -0
  138. package/dist/testing/solver-container.js +127 -0
  139. package/dist/testing/solver-container.js.map +1 -0
  140. package/dist/types.d.ts +155 -0
  141. package/dist/types.d.ts.map +1 -0
  142. package/dist/types.js +20 -0
  143. package/dist/types.js.map +1 -0
  144. package/dist/validation.d.ts +105 -0
  145. package/dist/validation.d.ts.map +1 -0
  146. package/dist/validation.js +130 -0
  147. package/dist/validation.js.map +1 -0
  148. package/llms.txt +2188 -0
  149. package/package.json +76 -0
  150. package/solver/Dockerfile +31 -0
  151. package/solver/README.md +23 -0
  152. package/solver/pyproject.toml +28 -0
  153. package/solver/src/solver/__init__.py +1 -0
  154. package/solver/src/solver/app.py +24 -0
  155. package/solver/src/solver/models.py +120 -0
  156. package/solver/src/solver/solver.py +359 -0
  157. package/solver/tests/test_solver.py +156 -0
  158. package/solver/uv.lock +661 -0
  159. package/src/client.schemas.ts +163 -0
  160. package/src/client.ts +67 -0
  161. package/src/client.types.ts +66 -0
  162. package/src/cpsat/model-builder.ts +858 -0
  163. package/src/cpsat/response.ts +130 -0
  164. package/src/cpsat/rules/assign-together.ts +96 -0
  165. package/src/cpsat/rules/employee-assignment-priority.ts +182 -0
  166. package/src/cpsat/rules/index.ts +12 -0
  167. package/src/cpsat/rules/location-preference.ts +68 -0
  168. package/src/cpsat/rules/max-consecutive-days.ts +98 -0
  169. package/src/cpsat/rules/max-hours-day.ts +187 -0
  170. package/src/cpsat/rules/max-hours-week.ts +197 -0
  171. package/src/cpsat/rules/max-shifts-day.ts +198 -0
  172. package/src/cpsat/rules/min-consecutive-days.ts +140 -0
  173. package/src/cpsat/rules/min-hours-day.ts +69 -0
  174. package/src/cpsat/rules/min-hours-week.ts +77 -0
  175. package/src/cpsat/rules/min-rest-between-shifts.ts +121 -0
  176. package/src/cpsat/rules/registry.ts +49 -0
  177. package/src/cpsat/rules/resolver.ts +181 -0
  178. package/src/cpsat/rules/rules.types.ts +41 -0
  179. package/src/cpsat/rules/scoping.ts +340 -0
  180. package/src/cpsat/rules/time-off.ts +336 -0
  181. package/src/cpsat/rules.ts +27 -0
  182. package/src/cpsat/semantic-time.ts +463 -0
  183. package/src/cpsat/types.ts +194 -0
  184. package/src/cpsat/utils.ts +105 -0
  185. package/src/cpsat/validation-reporter.ts +366 -0
  186. package/src/cpsat/validation.types.ts +185 -0
  187. package/src/datetime.utils.ts +426 -0
  188. package/src/errors.ts +17 -0
  189. package/src/index.ts +289 -0
  190. package/src/llms.ts +9 -0
  191. package/src/testing/index.ts +12 -0
  192. package/src/testing/solver-container.ts +172 -0
  193. package/src/types.ts +191 -0
  194. package/src/validation.ts +188 -0
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Zod schemas for CP-SAT solver transport types.
3
+ *
4
+ * These schemas define the contract between scheduling clients and the solver service.
5
+ * TypeScript types are derived from these schemas using z.infer to ensure they stay in sync.
6
+ *
7
+ * @see client.types.ts for the derived TypeScript types
8
+ */
9
+ import { z } from "zod";
10
+ // --------------------------------------------------------------------------
11
+ // Variable schemas
12
+ // --------------------------------------------------------------------------
13
+ export const SolverTermSchema = z.object({
14
+ var: z.string(),
15
+ coeff: z.number(),
16
+ });
17
+ export const BoolVariableSchema = z.object({
18
+ type: z.literal("bool"),
19
+ name: z.string(),
20
+ });
21
+ export const IntVariableSchema = z.object({
22
+ type: z.literal("int"),
23
+ name: z.string(),
24
+ min: z.number(),
25
+ max: z.number(),
26
+ });
27
+ export const IntervalVariableSchema = z.object({
28
+ type: z.literal("interval"),
29
+ name: z.string(),
30
+ start: z.number(),
31
+ end: z.number(),
32
+ size: z.number(),
33
+ /** If present, this is an optional interval enforced by this boolean var. */
34
+ presenceVar: z.string().optional(),
35
+ });
36
+ export const SolverVariableSchema = z.union([
37
+ BoolVariableSchema,
38
+ IntVariableSchema,
39
+ IntervalVariableSchema,
40
+ ]);
41
+ // --------------------------------------------------------------------------
42
+ // Constraint schemas
43
+ // --------------------------------------------------------------------------
44
+ export const LinearConstraintSchema = z.object({
45
+ type: z.literal("linear"),
46
+ terms: z.array(SolverTermSchema),
47
+ op: z.union([z.literal("<="), z.literal(">="), z.literal("==")]),
48
+ rhs: z.number(),
49
+ });
50
+ export const SoftLinearConstraintSchema = z.object({
51
+ type: z.literal("soft_linear"),
52
+ terms: z.array(SolverTermSchema),
53
+ op: z.union([z.literal("<="), z.literal(">=")]),
54
+ rhs: z.number(),
55
+ penalty: z.number(),
56
+ id: z.string().optional(),
57
+ });
58
+ export const ExactlyOneConstraintSchema = z.object({
59
+ type: z.literal("exactly_one"),
60
+ vars: z.array(z.string()),
61
+ });
62
+ export const AtMostOneConstraintSchema = z.object({
63
+ type: z.literal("at_most_one"),
64
+ vars: z.array(z.string()),
65
+ });
66
+ export const ImplicationConstraintSchema = z.object({
67
+ type: z.literal("implication"),
68
+ if: z.string(),
69
+ // oxlint-disable-next-line unicorn/no-thenable -- This is a schema property, not a Promise
70
+ then: z.string(),
71
+ });
72
+ export const BoolOrConstraintSchema = z.object({
73
+ type: z.literal("bool_or"),
74
+ vars: z.array(z.string()),
75
+ });
76
+ export const BoolAndConstraintSchema = z.object({
77
+ type: z.literal("bool_and"),
78
+ vars: z.array(z.string()),
79
+ });
80
+ export const NoOverlapConstraintSchema = z.object({
81
+ type: z.literal("no_overlap"),
82
+ intervals: z.array(z.string()),
83
+ });
84
+ export const SolverConstraintSchema = z.union([
85
+ LinearConstraintSchema,
86
+ SoftLinearConstraintSchema,
87
+ ExactlyOneConstraintSchema,
88
+ AtMostOneConstraintSchema,
89
+ ImplicationConstraintSchema,
90
+ BoolOrConstraintSchema,
91
+ BoolAndConstraintSchema,
92
+ NoOverlapConstraintSchema,
93
+ ]);
94
+ // --------------------------------------------------------------------------
95
+ // Objective schema
96
+ // --------------------------------------------------------------------------
97
+ export const SolverObjectiveSchema = z.object({
98
+ sense: z.union([z.literal("minimize"), z.literal("maximize")]),
99
+ terms: z.array(SolverTermSchema),
100
+ });
101
+ // --------------------------------------------------------------------------
102
+ // Options schema
103
+ // --------------------------------------------------------------------------
104
+ export const SolverOptionsSchema = z.object({
105
+ timeLimitSeconds: z.number().optional(),
106
+ solutionLimit: z.number().optional(),
107
+ });
108
+ // --------------------------------------------------------------------------
109
+ // Request/Response schemas
110
+ // --------------------------------------------------------------------------
111
+ export const SolverRequestSchema = z.object({
112
+ variables: z.array(SolverVariableSchema),
113
+ constraints: z.array(SolverConstraintSchema),
114
+ objective: SolverObjectiveSchema.optional(),
115
+ options: SolverOptionsSchema.optional(),
116
+ });
117
+ export const SolverStatusSchema = z.enum(["OPTIMAL", "FEASIBLE", "INFEASIBLE", "TIMEOUT", "ERROR"]);
118
+ export const SolverStatisticsSchema = z.object({
119
+ solveTimeMs: z.number().optional(),
120
+ conflicts: z.number().optional(),
121
+ branches: z.number().optional(),
122
+ });
123
+ export const SoftConstraintViolationSchema = z.object({
124
+ constraintId: z.string(),
125
+ violationAmount: z.number(),
126
+ targetValue: z.number(),
127
+ actualValue: z.number(),
128
+ });
129
+ export const SolverResponseSchema = z.object({
130
+ status: SolverStatusSchema,
131
+ values: z.record(z.string(), z.number()).optional(),
132
+ statistics: SolverStatisticsSchema.optional(),
133
+ error: z.string().optional(),
134
+ solutionInfo: z.string().optional(),
135
+ softViolations: z.array(SoftConstraintViolationSchema).optional(),
136
+ });
137
+ //# sourceMappingURL=client.schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.schemas.js","sourceRoot":"","sources":["../src/client.schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * CP-SAT solver transport types and status constants.
3
+ *
4
+ * Types are derived from Zod schemas to ensure validation and types stay in sync.
5
+ *
6
+ * @see client.schemas.ts for the source Zod schemas
7
+ */
8
+ import type { z } from "zod";
9
+ import type { SolverTermSchema, SolverVariableSchema, SolverConstraintSchema, SolverObjectiveSchema, SolverRequestSchema, SolverResponseSchema, SolverStatusSchema, SoftConstraintViolationSchema } from "./client.schemas.js";
10
+ export type SolverTerm = z.infer<typeof SolverTermSchema>;
11
+ export type SolverVariable = z.infer<typeof SolverVariableSchema>;
12
+ export type SolverConstraint = z.infer<typeof SolverConstraintSchema>;
13
+ export type SolverObjective = z.infer<typeof SolverObjectiveSchema>;
14
+ export type SolverRequest = z.infer<typeof SolverRequestSchema>;
15
+ export type SolverResponse = z.infer<typeof SolverResponseSchema>;
16
+ export type SolverStatus = z.infer<typeof SolverStatusSchema>;
17
+ export type SoftConstraintViolation = z.infer<typeof SoftConstraintViolationSchema>;
18
+ export declare const SOLVER_STATUS: {
19
+ readonly OPTIMAL: "OPTIMAL";
20
+ readonly FEASIBLE: "FEASIBLE";
21
+ readonly INFEASIBLE: "INFEASIBLE";
22
+ readonly TIMEOUT: "TIMEOUT";
23
+ readonly ERROR: "ERROR";
24
+ };
25
+ export type FetcherLike = typeof fetch | {
26
+ fetch: typeof fetch;
27
+ };
28
+ export interface SolverClient {
29
+ solve(request: SolverRequest, options?: {
30
+ signal?: AbortSignal;
31
+ }): Promise<SolverResponse>;
32
+ health?(): Promise<void>;
33
+ }
34
+ //# sourceMappingURL=client.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.types.d.ts","sourceRoot":"","sources":["../src/client.types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,6BAA6B,EAC9B,MAAM,qBAAqB,CAAC;AAM7B,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAMpF,eAAO,MAAM,aAAa;;;;;;CAMhB,CAAC;AAMX,MAAM,MAAM,WAAW,GACnB,OAAO,KAAK,GACZ;IACE,KAAK,EAAE,OAAO,KAAK,CAAC;CACrB,CAAC;AAEN,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3F,MAAM,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * CP-SAT solver transport types and status constants.
3
+ *
4
+ * Types are derived from Zod schemas to ensure validation and types stay in sync.
5
+ *
6
+ * @see client.schemas.ts for the source Zod schemas
7
+ */
8
+ // --------------------------------------------------------------------------
9
+ // Status constants (for convenience)
10
+ // --------------------------------------------------------------------------
11
+ export const SOLVER_STATUS = {
12
+ OPTIMAL: "OPTIMAL",
13
+ FEASIBLE: "FEASIBLE",
14
+ INFEASIBLE: "INFEASIBLE",
15
+ TIMEOUT: "TIMEOUT",
16
+ ERROR: "ERROR",
17
+ };
18
+ //# sourceMappingURL=client.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.types.js","sourceRoot":"","sources":["../src/client.types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAkCH,6EAA6E;AAC7E,qCAAqC;AACrC,6EAA6E;AAE7E,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,UAAU,EAAE,YAAY;IACxB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;CACN,CAAC"}
@@ -0,0 +1,128 @@
1
+ import type { SolverRequest } from "../client.types.js";
2
+ import type { DayOfWeek, SchedulingPeriod } from "../types.js";
3
+ import type { CoverageRequirement, ModelBuilderOptions, ShiftPattern, SchedulingEmployee, Term } from "./types.js";
4
+ import type { CpsatRuleConfigEntry, CpsatRuleFactories } from "./rules/rules.types.js";
5
+ import type { ValidationReporter } from "./validation-reporter.js";
6
+ import type { ScheduleValidation } from "./validation.types.js";
7
+ import type { ResolvedShiftAssignment } from "./response.js";
8
+ /**
9
+ * Builds a CP-SAT solver request from high-level scheduling constructs
10
+ * (team, shift patterns, coverage, and rule compilers).
11
+ */
12
+ /**
13
+ * Context provided to rules during post-solve validation.
14
+ */
15
+ export interface RuleValidationContext {
16
+ readonly employees: SchedulingEmployee[];
17
+ readonly days: string[];
18
+ readonly shiftPatterns: ShiftPattern[];
19
+ }
20
+ export interface CompilationRule {
21
+ compile(builder: ModelBuilder): void;
22
+ validate?(assignments: ResolvedShiftAssignment[], reporter: ValidationReporter, context: RuleValidationContext): void;
23
+ }
24
+ export interface CompilationResult {
25
+ request: SolverRequest;
26
+ validation: ScheduleValidation;
27
+ canSolve: boolean;
28
+ }
29
+ /**
30
+ * Configuration for ModelBuilder.
31
+ *
32
+ * @example Date range with day-of-week filtering (restaurant closed Mon/Tue)
33
+ * ```typescript
34
+ * const config: ModelBuilderConfig = {
35
+ * employees: [...],
36
+ * shiftPatterns: [...],
37
+ * coverage: [...],
38
+ * schedulingPeriod: {
39
+ * dateRange: { start: '2025-02-03', end: '2025-02-09' },
40
+ * daysOfWeek: ['wednesday', 'thursday', 'friday', 'saturday', 'sunday'],
41
+ * },
42
+ * };
43
+ * ```
44
+ */
45
+ export interface ModelBuilderConfig extends ModelBuilderOptions {
46
+ employees: SchedulingEmployee[];
47
+ shiftPatterns: ShiftPattern[];
48
+ /**
49
+ * Defines when scheduling should occur. Can specify either a date range
50
+ * (with optional day-of-week filtering) or a list of specific dates.
51
+ */
52
+ schedulingPeriod: SchedulingPeriod;
53
+ coverage: CoverageRequirement[];
54
+ /**
55
+ * Pre-compiled rules; use this for custom rules that are not part of the registry.
56
+ */
57
+ rules?: CompilationRule[];
58
+ /**
59
+ * Named rule configurations that will be compiled using the provided rule factories.
60
+ */
61
+ ruleConfigs?: CpsatRuleConfigEntry[];
62
+ /**
63
+ * Rule factories to use when compiling ruleConfigs. Defaults to built-in CP-SAT rules.
64
+ */
65
+ ruleFactories?: CpsatRuleFactories;
66
+ /**
67
+ * Optional validation reporter for diagnostics.
68
+ */
69
+ reporter?: ValidationReporter;
70
+ }
71
+ /**
72
+ * Compilation context that creates variables, constraints, and objectives
73
+ * and emits a `SolverRequest` for the Python CP-SAT solver service.
74
+ */
75
+ export declare class ModelBuilder {
76
+ #private;
77
+ readonly employees: SchedulingEmployee[];
78
+ readonly shiftPatterns: ShiftPattern[];
79
+ readonly days: string[];
80
+ readonly coverage: CoverageRequirement[];
81
+ readonly rules: CompilationRule[];
82
+ readonly weekStartsOn: DayOfWeek;
83
+ readonly options: SolverRequest["options"] | undefined;
84
+ readonly coverageBucketMinutes: number;
85
+ readonly reporter: ValidationReporter;
86
+ readonly fairDistribution: boolean;
87
+ constructor(config: ModelBuilderConfig);
88
+ boolVar(name: string): string;
89
+ intVar(name: string, min: number, max: number): string;
90
+ shiftActive(patternId: string, day: string): string;
91
+ assignment(employeeId: string, patternId: string, day: string): string;
92
+ addLinear(terms: Term[], op: "<=" | ">=" | "==", rhs: number): void;
93
+ addSoftLinear(terms: Term[], op: "<=" | ">=", rhs: number, penalty: number, id?: string): void;
94
+ addExactlyOne(vars: string[]): void;
95
+ addAtMostOne(vars: string[]): void;
96
+ addImplication(ifVar: string, thenVar: string): void;
97
+ addBoolOr(vars: string[]): void;
98
+ addBoolAnd(vars: string[]): void;
99
+ intervalVar(name: string, start: number, end: number, size: number, presenceVar?: string): string;
100
+ addNoOverlap(intervals: string[]): void;
101
+ addPenalty(varName: string, weight: number): void;
102
+ employeesWithRole(roleId: string): SchedulingEmployee[];
103
+ /**
104
+ * Returns team members who can satisfy a coverage requirement.
105
+ *
106
+ * Matching logic:
107
+ * - If only roleId: must have that role
108
+ * - If only skillIds: must have ALL specified skills
109
+ * - If both: must have the role AND ALL specified skills
110
+ */
111
+ employeesForCoverage(cov: CoverageRequirement): SchedulingEmployee[];
112
+ canAssign(employee: SchedulingEmployee, pattern: ShiftPattern): boolean;
113
+ /**
114
+ * Checks if a shift pattern can be used on a specific day.
115
+ * Returns false if the pattern has daysOfWeek restrictions that exclude this day.
116
+ */
117
+ patternAvailableOnDay(pattern: ShiftPattern, day: string): boolean;
118
+ patternDuration(patternId: string): number;
119
+ startMinutes(pattern: ShiftPattern, day: string): number;
120
+ endMinutes(pattern: ShiftPattern, day: string): number;
121
+ compile(): CompilationResult;
122
+ /**
123
+ * Run post-solve validation on all rules.
124
+ * Call this after solving with the resolved assignments.
125
+ */
126
+ validateSolution(assignments: ResolvedShiftAssignment[]): void;
127
+ }
128
+ //# sourceMappingURL=model-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-builder.d.ts","sourceRoot":"","sources":["../../src/cpsat/model-builder.ts"],"names":[],"mappings":"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"}