@lilaquadrat/studio 12.2.0 → 13.0.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 (66) hide show
  1. package/lib/src/helpers/shiftPlanAllocation.d.ts +53 -0
  2. package/lib/src/helpers/shiftPlanAllocation.js +110 -0
  3. package/lib/src/helpers/shiftPlanAllocation.js.map +1 -0
  4. package/lib/src/helpers/shiftPlanCoverage.d.ts +2 -0
  5. package/lib/src/helpers/shiftPlanCoverage.js +4 -0
  6. package/lib/src/helpers/shiftPlanCoverage.js.map +1 -0
  7. package/lib/src/helpers/shiftPlanningTime.js +26 -2
  8. package/lib/src/helpers/shiftPlanningTime.js.map +1 -1
  9. package/lib/src/helpers/shiftPlanningValidation.d.ts +8 -2
  10. package/lib/src/helpers/shiftPlanningValidation.js +16 -0
  11. package/lib/src/helpers/shiftPlanningValidation.js.map +1 -1
  12. package/lib/src/helpers/structureMatch.js +3 -1
  13. package/lib/src/helpers/structureMatch.js.map +1 -1
  14. package/lib/src/interfaces/ListPlanningParticipant.d.ts +17 -0
  15. package/lib/src/interfaces/ListPlanningParticipant.js +2 -0
  16. package/lib/src/interfaces/ListPlanningParticipant.js.map +1 -0
  17. package/lib/src/interfaces/PlanCoveragePreparation.d.ts +17 -0
  18. package/lib/src/interfaces/PlanCoveragePreparation.js +2 -0
  19. package/lib/src/interfaces/PlanCoveragePreparation.js.map +1 -0
  20. package/lib/src/interfaces/PlanningParticipantsResult.d.ts +12 -0
  21. package/lib/src/interfaces/PlanningParticipantsResult.js +2 -0
  22. package/lib/src/interfaces/PlanningParticipantsResult.js.map +1 -0
  23. package/lib/src/interfaces/ShiftAutofillResult.d.ts +6 -0
  24. package/lib/src/interfaces/ShiftAutofillResult.js +2 -0
  25. package/lib/src/interfaces/ShiftAutofillResult.js.map +1 -0
  26. package/lib/src/interfaces/ShiftReportContextOptions.d.ts +9 -0
  27. package/lib/src/interfaces/ShiftReportContextOptions.js +2 -0
  28. package/lib/src/interfaces/ShiftReportContextOptions.js.map +1 -0
  29. package/lib/src/models/lists.model.js +2 -1
  30. package/lib/src/models/lists.model.js.map +1 -1
  31. package/lib/src/services/customers.service.d.ts +2 -2
  32. package/lib/src/services/customers.service.js +2 -2
  33. package/lib/src/services/customers.service.js.map +1 -1
  34. package/lib/src/services/listParticipants.service.d.ts +45 -8
  35. package/lib/src/services/listParticipants.service.js +320 -39
  36. package/lib/src/services/listParticipants.service.js.map +1 -1
  37. package/lib/src/services/lists.service.d.ts +2 -0
  38. package/lib/src/services/lists.service.js +28 -1
  39. package/lib/src/services/lists.service.js.map +1 -1
  40. package/lib/src/services/shiftPlanDays.service.d.ts +2 -0
  41. package/lib/src/services/shiftPlanDays.service.js +12 -0
  42. package/lib/src/services/shiftPlanDays.service.js.map +1 -1
  43. package/lib/src/services/shiftPlans.service.d.ts +2 -2
  44. package/lib/src/services/shiftPlans.service.js +67 -9
  45. package/lib/src/services/shiftPlans.service.js.map +1 -1
  46. package/lib/src/services/shifts.service.d.ts +20 -1
  47. package/lib/src/services/shifts.service.js +180 -26
  48. package/lib/src/services/shifts.service.js.map +1 -1
  49. package/lib/tests/listParticipantsPlanning.spec.js +406 -10
  50. package/lib/tests/listParticipantsPlanning.spec.js.map +1 -1
  51. package/lib/tests/listsServiceCreateExternalProducts.spec.js +18 -0
  52. package/lib/tests/listsServiceCreateExternalProducts.spec.js.map +1 -1
  53. package/lib/tests/shiftPlanCoverage.spec.d.ts +1 -0
  54. package/lib/tests/shiftPlanCoverage.spec.js +189 -0
  55. package/lib/tests/shiftPlanCoverage.spec.js.map +1 -0
  56. package/lib/tests/shiftPlanning.spec.js +430 -38
  57. package/lib/tests/shiftPlanning.spec.js.map +1 -1
  58. package/lib/tests/shiftPlanningTime.spec.d.ts +1 -0
  59. package/lib/tests/shiftPlanningTime.spec.js +90 -0
  60. package/lib/tests/shiftPlanningTime.spec.js.map +1 -0
  61. package/lib/tests/shiftPlansList.spec.d.ts +1 -0
  62. package/lib/tests/shiftPlansList.spec.js +161 -0
  63. package/lib/tests/shiftPlansList.spec.js.map +1 -0
  64. package/lib/tests/structureMatch.spec.js +42 -0
  65. package/lib/tests/structureMatch.spec.js.map +1 -1
  66. package/package.json +2 -2
@@ -0,0 +1,53 @@
1
+ import type { ObjectId, WithId } from 'mongodb';
2
+ import type { Shift, ShiftAssignmentBreak, ShiftCoverage, ShiftReportContext, StructureCondition } from '@lilaquadrat/interfaces';
3
+ export interface ShiftFillCandidate {
4
+ participant: ObjectId;
5
+ customer: ObjectId;
6
+ /** The candidate fulfils the shift's required/forbidden constraints. */
7
+ matching: boolean;
8
+ /** Absolute break times to carry into the assignment; coverage leaves them to the planner. */
9
+ breaks?: ShiftAssignmentBreak[];
10
+ }
11
+ export interface ShiftFillTarget {
12
+ shift: WithId<Shift>;
13
+ conditions: StructureCondition[];
14
+ /** Ranked pool; unfit candidates are last but may still fill a shift as a fallback. */
15
+ candidates: ShiftFillCandidate[];
16
+ }
17
+ export interface ShiftFillPolicy {
18
+ /** Use matching people as the target instead of total staffing headcount. */
19
+ matchingGate: boolean;
20
+ /** Treat break-rule violations as blocking; coverage leaves breaks to the planner. */
21
+ breaksBlocking: boolean;
22
+ /** Stop at the first shift that cannot be filled. */
23
+ stopOnUnfillable: boolean;
24
+ }
25
+ export interface ShiftFillResult {
26
+ coverage: ShiftCoverage[];
27
+ fillable: boolean;
28
+ /** False when stop-on-unfillable ended the run before every target was evaluated. */
29
+ complete: boolean;
30
+ /** The targets after allocation; unchanged shifts keep their persisted assignments. */
31
+ shifts: WithId<Shift>[];
32
+ }
33
+ /** Coverage only needs the counts; kept so existing callers and types stay unchanged. */
34
+ export interface CoverageAllocation {
35
+ coverage: ShiftCoverage[];
36
+ fillable: boolean;
37
+ complete: boolean;
38
+ }
39
+ /**
40
+ * Fills every target shift greedily in start order, keeping one shared in-memory schedule so a person
41
+ * already used in a colliding shift cannot be picked again. Only the supplied schedules are compared;
42
+ * callers decide the conflict scope (the plan's own shifts or the wider neighbourhood).
43
+ *
44
+ * Rule checks stay local to the candidate's customer: adding an assignment cannot change another
45
+ * person's hours, and shifts without that customer cannot conflict. This keeps the work per candidate
46
+ * proportional to that person's shifts instead of the whole set.
47
+ *
48
+ * The policy decides whether matching people or total headcount is the target, whether break violations block, and
49
+ * whether an unfillable shift ends the run.
50
+ */
51
+ export declare function allocateShiftFills(schedules: WithId<Shift>[], targets: ShiftFillTarget[], context: Omit<ShiftReportContext, 'schedules'>, policy: ShiftFillPolicy): ShiftFillResult;
52
+ /** Lists retain matching-based coverage; the shifts overview only requires staffing headcount. */
53
+ export declare function allocateShiftCoverage(schedules: WithId<Shift>[], targets: ShiftFillTarget[], context: Omit<ShiftReportContext, 'schedules'>, stopOnUnfillable?: boolean, coverageMode?: 'staffing' | 'matching'): CoverageAllocation;
@@ -0,0 +1,110 @@
1
+ import { reportShift } from './shiftPlanningReports.js';
2
+ import { newScheduleViolations } from './shiftPlanningValidation.js';
3
+ import { structureScore } from './structureMatch.js';
4
+ function evidenceOf(schedules, context, evidence) {
5
+ return schedules.map((shift) => reportShift(shift, context, false, evidence));
6
+ }
7
+ /**
8
+ * Fills every target shift greedily in start order, keeping one shared in-memory schedule so a person
9
+ * already used in a colliding shift cannot be picked again. Only the supplied schedules are compared;
10
+ * callers decide the conflict scope (the plan's own shifts or the wider neighbourhood).
11
+ *
12
+ * Rule checks stay local to the candidate's customer: adding an assignment cannot change another
13
+ * person's hours, and shifts without that customer cannot conflict. This keeps the work per candidate
14
+ * proportional to that person's shifts instead of the whole set.
15
+ *
16
+ * The policy decides whether matching people or total headcount is the target, whether break violations block, and
17
+ * whether an unfillable shift ends the run.
18
+ */
19
+ export function allocateShiftFills(schedules, targets, context, policy) {
20
+ const liveById = new Map(schedules.map((shift) => [shift._id.toHexString(), shift]));
21
+ const shiftsByCustomer = new Map();
22
+ const index = (customer, shift) => {
23
+ const hex = customer.toHexString();
24
+ const ids = shiftsByCustomer.get(hex) ?? new Set();
25
+ ids.add(shift.toHexString());
26
+ shiftsByCustomer.set(hex, ids);
27
+ };
28
+ for (const shift of schedules)
29
+ for (const assignment of shift.assignments)
30
+ index(assignment.customer, shift._id);
31
+ const customerSchedules = (customer) => [...(shiftsByCustomer.get(customer.toHexString()) ?? [])]
32
+ .map((id) => liveById.get(id)).filter((shift) => shift !== undefined);
33
+ const baselineByCustomer = new Map();
34
+ const detailsByParticipant = new Map(context.participantDetails.map((entry) => [entry._id.toHexString(), entry]));
35
+ const ordered = [...targets].sort((left, right) => left.shift.start.localeCompare(right.shift.start)
36
+ || left.shift._id.toHexString().localeCompare(right.shift._id.toHexString()));
37
+ const coverage = [];
38
+ const shifts = [];
39
+ let fillable = true;
40
+ for (const target of ordered) {
41
+ const current = liveById.get(target.shift._id.toHexString()) ?? target.shift;
42
+ const requiredPeople = current.requiredPeople ?? 0;
43
+ const minimumMatching = current.matchingPeople ?? 0;
44
+ const assigned = [...current.assignments];
45
+ const assignedParticipants = new Set(assigned.map((assignment) => assignment.participant.toHexString()));
46
+ const assignedCustomers = new Set(assigned.map((assignment) => assignment.customer.toHexString()));
47
+ let matching = policy.matchingGate ? assigned.filter((assignment) => {
48
+ const detail = detailsByParticipant.get(assignment.participant.toHexString());
49
+ return detail !== undefined && structureScore(target.conditions, detail).state === 'fulfilled';
50
+ }).length : 0;
51
+ for (const candidate of target.candidates) {
52
+ if (policy.matchingGate ? matching >= minimumMatching : assigned.length >= requiredPeople)
53
+ break;
54
+ if (policy.matchingGate && !candidate.matching)
55
+ continue;
56
+ if (assignedParticipants.has(candidate.participant.toHexString()) || assignedCustomers.has(candidate.customer.toHexString()))
57
+ continue;
58
+ const assignment = { participant: candidate.participant, customer: candidate.customer, breaks: candidate.breaks ?? [] };
59
+ const proposed = { ...current, assignments: [...assigned, assignment] };
60
+ const customerHex = candidate.customer.toHexString();
61
+ // A customer's violations only depend on that customer's shifts, so both sides are scoped to them.
62
+ const others = customerSchedules(candidate.customer).filter((shift) => !shift._id.equals(proposed._id));
63
+ let baseline = baselineByCustomer.get(customerHex);
64
+ if (!baseline) {
65
+ baseline = new Map();
66
+ evidenceOf(others, { ...context, schedules: others }, baseline);
67
+ baselineByCustomer.set(customerHex, baseline);
68
+ }
69
+ const candidateSchedules = [...others, proposed];
70
+ const updatedEvidence = new Map();
71
+ const updated = evidenceOf(candidateSchedules, { ...context, schedules: candidateSchedules }, updatedEvidence);
72
+ const violations = newScheduleViolations(proposed, current, updated, baseline, updatedEvidence, !policy.breaksBlocking);
73
+ if (violations.length)
74
+ continue;
75
+ assigned.push(assignment);
76
+ assignedParticipants.add(candidate.participant.toHexString());
77
+ assignedCustomers.add(customerHex);
78
+ if (candidate.matching)
79
+ matching += 1;
80
+ liveById.set(proposed._id.toHexString(), proposed);
81
+ index(candidate.customer, proposed._id);
82
+ baselineByCustomer.delete(customerHex);
83
+ }
84
+ const entry = {
85
+ shift: current._id,
86
+ title: current.title,
87
+ start: current.start,
88
+ end: current.end,
89
+ requiredPeople,
90
+ matchingPeople: minimumMatching,
91
+ assigned: assigned.length,
92
+ ...(policy.matchingGate ? { matching } : {}),
93
+ fillable: policy.matchingGate ? matching >= minimumMatching : assigned.length >= requiredPeople,
94
+ };
95
+ coverage.push(entry);
96
+ shifts.push(liveById.get(current._id.toHexString()) ?? current);
97
+ if (!entry.fillable) {
98
+ fillable = false;
99
+ if (policy.stopOnUnfillable)
100
+ break;
101
+ }
102
+ }
103
+ return { coverage, fillable, complete: coverage.length === targets.length, shifts };
104
+ }
105
+ /** Lists retain matching-based coverage; the shifts overview only requires staffing headcount. */
106
+ export function allocateShiftCoverage(schedules, targets, context, stopOnUnfillable = false, coverageMode = 'matching') {
107
+ const result = allocateShiftFills(schedules, targets, context, { matchingGate: coverageMode === 'matching', breaksBlocking: false, stopOnUnfillable });
108
+ return { coverage: result.coverage, fillable: result.fillable, complete: result.complete };
109
+ }
110
+ //# sourceMappingURL=shiftPlanAllocation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shiftPlanAllocation.js","sourceRoot":"","sources":["../../../src/helpers/shiftPlanAllocation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { allocateShiftCoverage, allocateShiftFills } from './shiftPlanAllocation.js';
2
+ export type { CoverageAllocation, ShiftFillCandidate as CoverageCandidate, ShiftFillPolicy, ShiftFillResult, ShiftFillTarget as CoverageTarget, } from './shiftPlanAllocation.js';
@@ -0,0 +1,4 @@
1
+ // The allocation core moved to shiftPlanAllocation.ts so coverage and autofill share one greedy
2
+ // fill; this module keeps the coverage-facing names for existing imports.
3
+ export { allocateShiftCoverage, allocateShiftFills } from './shiftPlanAllocation.js';
4
+ //# sourceMappingURL=shiftPlanCoverage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shiftPlanCoverage.js","sourceRoot":"","sources":["../../../src/helpers/shiftPlanCoverage.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,0EAA0E;AAC1E,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -1,6 +1,11 @@
1
1
  import ImmutableError from '../classes/errors/Immutable.error.js';
2
2
  export const minuteMilliseconds = 60000;
3
3
  export const maximumShiftMilliseconds = 7 * 24 * 60 * minuteMilliseconds;
4
+ // Candidate trials revisit the same instants; bounds keep reuse independent of process lifetime.
5
+ const formatters = new Map();
6
+ const partsByFormatter = new WeakMap();
7
+ const maximumFormatters = 16;
8
+ const maximumLocalParts = 4096;
4
9
  export function planningValidation(path, message) {
5
10
  throw new ImmutableError('VALIDATION_FAILED', [{
6
11
  instancePath: path, schemaPath: '#/shiftPlanning', keyword: 'shiftPlanning', params: {}, message,
@@ -29,19 +34,38 @@ export function interval(start, end) {
29
34
  return result;
30
35
  }
31
36
  export function localFormatter(timeZone) {
37
+ const cached = formatters.get(timeZone);
38
+ if (cached)
39
+ return cached;
32
40
  try {
33
- return new Intl.DateTimeFormat('en-GB', {
41
+ const formatter = new Intl.DateTimeFormat('en-GB', {
34
42
  timeZone, year: 'numeric', month: '2-digit', day: '2-digit',
35
43
  hour: '2-digit', minute: '2-digit', hourCycle: 'h23',
36
44
  });
45
+ if (formatters.size >= maximumFormatters)
46
+ formatters.delete(formatters.keys().next().value);
47
+ formatters.set(timeZone, formatter);
48
+ return formatter;
37
49
  }
38
50
  catch {
39
51
  return planningValidation('/timeZone', 'must be a valid IANA time zone');
40
52
  }
41
53
  }
42
54
  function localParts(formatter, instant) {
55
+ let cache = partsByFormatter.get(formatter);
56
+ if (!cache) {
57
+ cache = new Map();
58
+ partsByFormatter.set(formatter, cache);
59
+ }
60
+ const cached = cache.get(instant);
61
+ if (cached)
62
+ return cached;
43
63
  const parts = Object.fromEntries(formatter.formatToParts(instant).map((part) => [part.type, part.value]));
44
- return { date: `${parts.year.padStart(4, '0')}-${parts.month}-${parts.day}`, clock: `${parts.hour}:${parts.minute}` };
64
+ const result = { date: `${parts.year.padStart(4, '0')}-${parts.month}-${parts.day}`, clock: `${parts.hour}:${parts.minute}` };
65
+ if (cache.size >= maximumLocalParts)
66
+ cache.delete(cache.keys().next().value);
67
+ cache.set(instant, result);
68
+ return result;
45
69
  }
46
70
  export function localDate(instant, timeZone) {
47
71
  return localParts(localFormatter(timeZone), Date.parse(instant)).date;
@@ -1 +1 @@
1
- {"version":3,"file":"shiftPlanningTime.js","sourceRoot":"","sources":["../../../src/helpers/shiftPlanningTime.ts"],"names":[],"mappings":"AAIA,OAAO,cAAc,MAAM,sCAAsC,CAAC;AAElE,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AACxC,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,kBAAkB,CAAC;AAEzE,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,OAAe;IAE9D,MAAM,IAAI,cAAc,CAAC,mBAAmB,EAAE,CAAC;YAC7C,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,iBAAiB,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO;SACjG,CAAC,CAAC,CAAC;AAEN,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAE5C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,kBAAkB,CAAC,EAAE,EAAE,yBAAyB,CAAC,CAAC;IACjF,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IACnD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,kBAAkB,CAAC,EAAE,EAAE,yCAAyC,CAAC,CAAC;IACnG,OAAO,UAAU,CAAC;AAEpB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa;IAEzC,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,KAAK,YAAY,CAAC,CAAC;IAC/C,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;WACpE,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK;QAAE,kBAAkB,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;IACvG,OAAO,KAAK,CAAC;AAEf,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAa,EAAE,GAAW;IAEjD,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9E,IAAI,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,KAAK;QAAE,kBAAkB,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAClF,OAAO,MAAM,CAAC;AAEhB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAgB;IAE7C,IAAI,CAAC;QAEH,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;YACtC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;YAC3D,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK;SACrD,CAAC,CAAC;IAEL,CAAC;IAAC,MAAM,CAAC;QAEP,OAAO,kBAAkB,CAAC,WAAW,EAAE,gCAAgC,CAAC,CAAC;IAE3E,CAAC;AAEH,CAAC;AAED,SAAS,UAAU,CAAC,SAA8B,EAAE,OAAe;IAEjE,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1G,OAAO,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;AAExH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,QAAgB;IAEzD,OAAO,UAAU,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAExE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IAEvC,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,YAAY,CAAC,CAAC;IAC9C,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7C,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAE5C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,SAAuC,EAAE;IAEtE,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QAEvC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,OAAO,CAAC,GAAG;eAC1C,MAAM,CAAC,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YAEpG,kBAAkB,CAAC,WAAW,EAAE,8CAA8C,CAAC,CAAC;QAElF,CAAC;IAEH,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAElB,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YAEhE,kBAAkB,CAAC,+BAA+B,EAAE,wCAAwC,CAAC,CAAC;QAEhG,CAAC;QACD,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YAErD,IAAI,WAAW,CAAC,gBAAgB,IAAI,YAAY,IAAI,WAAW,CAAC,wBAAwB,GAAG,aAAa,EAAE,CAAC;gBAEzG,kBAAkB,CAAC,+BAA+B,EAAE,gEAAgE,CAAC,CAAC;YAExH,CAAC;YACD,YAAY,GAAG,WAAW,CAAC,gBAAgB,CAAC;YAC5C,aAAa,GAAG,WAAW,CAAC,wBAAwB,CAAC;QAEvD,CAAC;IAEH,CAAC;AAEH,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,OAAwC,EACxC,SAAuC;IAGvC,qHAAqH;IACrH,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,SAAS,EAAE,CAAC;IAC5C,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,6BAA6B;WAC5E,CAAC,MAAM,CAAC,uBAAuB,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAC3F,uEAAuE;IACvE,IAAI,CAAC;QAEH,cAAc,CAAC,MAAM,CAAC,CAAC;IAEzB,CAAC;IAAC,MAAM,CAAC;QAEP,OAAO,IAAI,CAAC;IAEd,CAAC;IACD,+DAA+D;IAC/D,OAAO,EAAE,GAAG,MAAM,EAAE,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,KAAK,IAAI,EAAyB,CAAC;AAEtG,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAmC,EAAE,UAA2B;IAE9F,IAAI,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC;IAC9B,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAE7C,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QACpD,IAAI,UAAU,CAAC,KAAK,GAAG,WAAW,IAAI,UAAU,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;YAEjE,kBAAkB,CAAC,qBAAqB,EAAE,8DAA8D,CAAC,CAAC;QAE5G,CAAC;QACD,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC;QAC7B,OAAO,UAAU,CAAC;IAEpB,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,GAAG,UAAU,EAAE,MAAM,EAAE,CAAC;AAEnC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAmC,EAAE,UAA2B;IAE3F,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrC,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QAEtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,KAAK,GAAG,MAAM;YAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QACnD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEjC,CAAC;IACD,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnF,OAAO,QAAQ,CAAC;AAElB,CAAC;AAED,iHAAiH;AACjH,MAAM,UAAU,oBAAoB,CAAC,KAAY,EAAE,UAA2B,EAAE,QAAgB,EAAE,MAA2B;IAE3H,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,WAAW,GAAqB;QACpC,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC;QACnF,YAAY,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,kBAAkB,EAAE,CAAC,CAAC;KAC5I,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAC/B,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC;QAE3D,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,4FAA4F;QAC5F,OAAO,MAAM,GAAG,GAAG,EAAE,CAAC;YAEpB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC;YAC/F,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC5C,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG;gBAC3C,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG;gBAC3D,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC;YAC9D,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,kBAAkB,CAAC;YACvG,MAAM,GAAG,IAAI,CAAC;QAEhB,CAAC;IAEH,CAAC;IACD,OAAO,WAAW,CAAC;AAErB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAY,EAAE,UAA2B,EAAE,QAAgB;IAErF,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC;QAE3D,sFAAsF;QACtF,KAAK,IAAI,MAAM,GAAG,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,MAAM,IAAI,CAAC,GAAG,EAAE,GAAG,kBAAkB,EAAE,CAAC;YAE7E,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;QAEjD,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAElD,CAAC;IACD,OAAO,MAAM,CAAC;AAEhB,CAAC;AAED,sHAAsH;AACtH,MAAM,UAAU,mBAAmB,CAAC,KAAY,EAAE,UAA2B,EAAE,QAAgB;IAE7F,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC;QAE3D,KAAK,IAAI,MAAM,GAAG,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,MAAM,IAAI,kBAAkB,EAAE,CAAC;YAEpE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAAC,CAAC;YACxD,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC;YAChD,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,kBAAkB,CAAC,CAAC;QAEnF,CAAC;IAEH,CAAC;IACD,OAAO,MAAM,CAAC;AAEhB,CAAC;AAED,gHAAgH;AAChH,MAAM,UAAU,cAAc,CAAC,KAAY,EAAE,UAA2B,EAAE,MAA2B;IAEnG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IACzC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;IACnC,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QAEtC,UAAU,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,GAAG,kBAAkB,CAAC;QACtE,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,kBAAkB,CAAC;QACxF,SAAS,IAAI,QAAQ,CAAC;QACtB,IAAI,QAAQ,IAAI,YAAY,CAAC,6BAA6B,EAAE,CAAC;YAE3D,gBAAgB,IAAI,QAAQ,CAAC;YAC7B,UAAU,GAAG,CAAC,CAAC;QAEjB,CAAC;QACD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEjC,CAAC;IACD,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,kBAAkB,CAAC,CAAC;IACpH,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,kBAAkB,GAAG,SAAS,CAAC;IAClG,OAAO,iBAAiB,GAAG,YAAY,CAAC,4BAA4B;WAC/D,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,GAAG,KAAK,CAAC,gBAAgB,IAAI,gBAAgB,GAAG,KAAK,CAAC,wBAAwB,CAAC,CAAC;AAEvI,CAAC"}
1
+ {"version":3,"file":"shiftPlanningTime.js","sourceRoot":"","sources":["../../../src/helpers/shiftPlanningTime.ts"],"names":[],"mappings":"AAIA,OAAO,cAAc,MAAM,sCAAsC,CAAC;AAElE,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AACxC,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,kBAAkB,CAAC;AAEzE,iGAAiG;AACjG,MAAM,UAAU,GAAG,IAAI,GAAG,EAA+B,CAAC;AAC1D,MAAM,gBAAgB,GAAG,IAAI,OAAO,EAAqE,CAAC;AAC1G,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAC7B,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAE/B,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,OAAe;IAE9D,MAAM,IAAI,cAAc,CAAC,mBAAmB,EAAE,CAAC;YAC7C,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,iBAAiB,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO;SACjG,CAAC,CAAC,CAAC;AAEN,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAE5C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,kBAAkB,CAAC,EAAE,EAAE,yBAAyB,CAAC,CAAC;IACjF,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IACnD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,kBAAkB,CAAC,EAAE,EAAE,yCAAyC,CAAC,CAAC;IACnG,OAAO,UAAU,CAAC;AAEpB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa;IAEzC,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,KAAK,YAAY,CAAC,CAAC;IAC/C,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;WACpE,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK;QAAE,kBAAkB,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;IACvG,OAAO,KAAK,CAAC;AAEf,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAa,EAAE,GAAW;IAEjD,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9E,IAAI,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,KAAK;QAAE,kBAAkB,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAClF,OAAO,MAAM,CAAC;AAEhB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAgB;IAE7C,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,IAAI,CAAC;QAEH,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;YACjD,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;YAC3D,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK;SACrD,CAAC,CAAC;QACH,IAAI,UAAU,CAAC,IAAI,IAAI,iBAAiB;YAAE,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAM,CAAC,CAAC;QAC7F,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACpC,OAAO,SAAS,CAAC;IAEnB,CAAC;IAAC,MAAM,CAAC;QAEP,OAAO,kBAAkB,CAAC,WAAW,EAAE,gCAAgC,CAAC,CAAC;IAE3E,CAAC;AAEH,CAAC;AAED,SAAS,UAAU,CAAC,SAA8B,EAAE,OAAe;IAEjE,IAAI,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;QAEX,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;QAClB,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAEzC,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1G,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;IAC9H,IAAI,KAAK,CAAC,IAAI,IAAI,iBAAiB;QAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAM,CAAC,CAAC;IAC9E,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC;AAEhB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,QAAgB;IAEzD,OAAO,UAAU,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAExE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IAEvC,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,YAAY,CAAC,CAAC;IAC9C,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7C,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAE5C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,SAAuC,EAAE;IAEtE,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QAEvC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,OAAO,CAAC,GAAG;eAC1C,MAAM,CAAC,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YAEpG,kBAAkB,CAAC,WAAW,EAAE,8CAA8C,CAAC,CAAC;QAElF,CAAC;IAEH,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAElB,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YAEhE,kBAAkB,CAAC,+BAA+B,EAAE,wCAAwC,CAAC,CAAC;QAEhG,CAAC;QACD,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YAErD,IAAI,WAAW,CAAC,gBAAgB,IAAI,YAAY,IAAI,WAAW,CAAC,wBAAwB,GAAG,aAAa,EAAE,CAAC;gBAEzG,kBAAkB,CAAC,+BAA+B,EAAE,gEAAgE,CAAC,CAAC;YAExH,CAAC;YACD,YAAY,GAAG,WAAW,CAAC,gBAAgB,CAAC;YAC5C,aAAa,GAAG,WAAW,CAAC,wBAAwB,CAAC;QAEvD,CAAC;IAEH,CAAC;AAEH,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,OAAwC,EACxC,SAAuC;IAGvC,qHAAqH;IACrH,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,SAAS,EAAE,CAAC;IAC5C,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,6BAA6B;WAC5E,CAAC,MAAM,CAAC,uBAAuB,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAC3F,uEAAuE;IACvE,IAAI,CAAC;QAEH,cAAc,CAAC,MAAM,CAAC,CAAC;IAEzB,CAAC;IAAC,MAAM,CAAC;QAEP,OAAO,IAAI,CAAC;IAEd,CAAC;IACD,+DAA+D;IAC/D,OAAO,EAAE,GAAG,MAAM,EAAE,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,KAAK,IAAI,EAAyB,CAAC;AAEtG,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAmC,EAAE,UAA2B;IAE9F,IAAI,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC;IAC9B,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAE7C,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QACpD,IAAI,UAAU,CAAC,KAAK,GAAG,WAAW,IAAI,UAAU,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;YAEjE,kBAAkB,CAAC,qBAAqB,EAAE,8DAA8D,CAAC,CAAC;QAE5G,CAAC;QACD,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC;QAC7B,OAAO,UAAU,CAAC;IAEpB,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,GAAG,UAAU,EAAE,MAAM,EAAE,CAAC;AAEnC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAmC,EAAE,UAA2B;IAE3F,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrC,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QAEtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,KAAK,GAAG,MAAM;YAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QACnD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEjC,CAAC;IACD,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnF,OAAO,QAAQ,CAAC;AAElB,CAAC;AAED,iHAAiH;AACjH,MAAM,UAAU,oBAAoB,CAAC,KAAY,EAAE,UAA2B,EAAE,QAAgB,EAAE,MAA2B;IAE3H,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,WAAW,GAAqB;QACpC,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC;QACnF,YAAY,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,kBAAkB,EAAE,CAAC,CAAC;KAC5I,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAC/B,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC;QAE3D,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,4FAA4F;QAC5F,OAAO,MAAM,GAAG,GAAG,EAAE,CAAC;YAEpB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC;YAC/F,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC5C,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG;gBAC3C,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG;gBAC3D,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC;YAC9D,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,kBAAkB,CAAC;YACvG,MAAM,GAAG,IAAI,CAAC;QAEhB,CAAC;IAEH,CAAC;IACD,OAAO,WAAW,CAAC;AAErB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAY,EAAE,UAA2B,EAAE,QAAgB;IAErF,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC;QAE3D,sFAAsF;QACtF,KAAK,IAAI,MAAM,GAAG,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,MAAM,IAAI,CAAC,GAAG,EAAE,GAAG,kBAAkB,EAAE,CAAC;YAE7E,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;QAEjD,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAElD,CAAC;IACD,OAAO,MAAM,CAAC;AAEhB,CAAC;AAED,sHAAsH;AACtH,MAAM,UAAU,mBAAmB,CAAC,KAAY,EAAE,UAA2B,EAAE,QAAgB;IAE7F,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC;QAE3D,KAAK,IAAI,MAAM,GAAG,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,MAAM,IAAI,kBAAkB,EAAE,CAAC;YAEpE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAAC,CAAC;YACxD,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC;YAChD,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,kBAAkB,CAAC,CAAC;QAEnF,CAAC;IAEH,CAAC;IACD,OAAO,MAAM,CAAC;AAEhB,CAAC;AAED,gHAAgH;AAChH,MAAM,UAAU,cAAc,CAAC,KAAY,EAAE,UAA2B,EAAE,MAA2B;IAEnG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IACzC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;IACnC,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QAEtC,UAAU,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,GAAG,kBAAkB,CAAC;QACtE,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,kBAAkB,CAAC;QACxF,SAAS,IAAI,QAAQ,CAAC;QACtB,IAAI,QAAQ,IAAI,YAAY,CAAC,6BAA6B,EAAE,CAAC;YAE3D,gBAAgB,IAAI,QAAQ,CAAC;YAC7B,UAAU,GAAG,CAAC,CAAC;QAEjB,CAAC;QACD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEjC,CAAC;IACD,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,kBAAkB,CAAC,CAAC;IACpH,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,kBAAkB,GAAG,SAAS,CAAC;IAClG,OAAO,iBAAiB,GAAG,YAAY,CAAC,4BAA4B;WAC/D,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,GAAG,KAAK,CAAC,gBAAgB,IAAI,gBAAgB,GAAG,KAAK,CAAC,wBAAwB,CAAC,CAAC;AAEvI,CAAC"}
@@ -1,5 +1,5 @@
1
- import { Filter } from 'mongodb';
2
- import type { ShiftAssignment, ShiftAssignmentBreak, ShiftPlanningPage, ShiftPlanningViolation } from '@lilaquadrat/interfaces';
1
+ import { Filter, WithId } from 'mongodb';
2
+ import type { Shift, ShiftAssignment, ShiftAssignmentBreak, ShiftPlanningPage, ShiftPlanningViolation, ShiftResponse } from '@lilaquadrat/interfaces';
3
3
  export declare const planningLimit = 30;
4
4
  export declare function assertUniquePlanningIds(values: string[], path: string): void;
5
5
  export declare function equalBreaks(left: ShiftAssignmentBreak[], right: ShiftAssignmentBreak[]): boolean;
@@ -8,6 +8,12 @@ export declare function equalAssignment(left: ShiftAssignment, right: ShiftAssig
8
8
  export declare function equalAssignmentSets(left: ShiftAssignment[], right: ShiftAssignment[]): boolean;
9
9
  /** These identity fields are fixed enums/hex IDs; severity and object property order are deliberately excluded. */
10
10
  export declare function violationIdentity(violation: ShiftPlanningViolation): string;
11
+ /**
12
+ * Violations a proposed assignment adds or worsens. Persisted severities are the baseline, so existing
13
+ * attention items need not block a safe addition; only the candidate's own changed customers count as
14
+ * new. Break rules can be ignored while their times are still unknown and get planned later.
15
+ */
16
+ export declare function newScheduleViolations(candidate: WithId<Shift>, previous: WithId<Shift> | undefined, updated: ShiftResponse[], baseline: Map<string, number>, updatedEvidence: Map<string, number>, ignoreBreaks?: boolean): ShiftPlanningViolation[];
11
17
  export declare function planningIntervalFilter<T extends {
12
18
  start: string;
13
19
  end: string;
@@ -25,6 +25,22 @@ export function equalAssignmentSets(left, right) {
25
25
  export function violationIdentity(violation) {
26
26
  return [violation.customer, violation.shift, violation.rule, violation.relatedShift ?? '', violation.absence ?? ''].join(':');
27
27
  }
28
+ /**
29
+ * Violations a proposed assignment adds or worsens. Persisted severities are the baseline, so existing
30
+ * attention items need not block a safe addition; only the candidate's own changed customers count as
31
+ * new. Break rules can be ignored while their times are still unknown and get planned later.
32
+ */
33
+ export function newScheduleViolations(candidate, previous, updated, baseline, updatedEvidence, ignoreBreaks = false) {
34
+ const changedCustomers = new Set(candidate.assignments.filter((assignment) => !previous || previous.start !== candidate.start || previous.end !== candidate.end
35
+ || !previous.assignments.some((existing) => equalAssignment(existing, assignment))).map((assignment) => assignment.customer.toHexString()));
36
+ return updated.flatMap((report) => report.violations.filter((violation) => {
37
+ if (ignoreBreaks && violation.rule === 'breaks')
38
+ return false;
39
+ const identity = violationIdentity(violation);
40
+ return (report._id.equals(candidate._id) && changedCustomers.has(violation.customer))
41
+ || (updatedEvidence.get(identity) ?? 0) > (baseline.get(identity) ?? 0);
42
+ }));
43
+ }
28
44
  export function planningIntervalFilter(filters) {
29
45
  const result = {};
30
46
  if (filters.from)
@@ -1 +1 @@
1
- {"version":3,"file":"shiftPlanningValidation.js","sourceRoot":"","sources":["../../../src/helpers/shiftPlanningValidation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shiftPlanningValidation.js","sourceRoot":"","sources":["../../../src/helpers/shiftPlanningValidation.ts"],"names":[],"mappings":"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"}
@@ -55,7 +55,9 @@ export function structureScore(conditions, participant) {
55
55
  : answers[structure.id] !== undefined ? answers[structure.id] : userAnswers?.[structure.id];
56
56
  const met = structure?.type === 'number' && condition.operator !== undefined && typeof condition.value === 'number'
57
57
  ? numberMet(condition.operator, answer, condition.value)
58
- : condition.value !== undefined ? answer === condition.value : Boolean(answer);
58
+ : condition.value !== undefined
59
+ ? answer === condition.value || (structure?.type === 'select' && Array.isArray(answer) && answer.includes(condition.value))
60
+ : Boolean(answer);
59
61
  if (met)
60
62
  matched += 1;
61
63
  if (condition.constraint === 'required' && !met)
@@ -1 +1 @@
1
- {"version":3,"file":"structureMatch.js","sourceRoot":"","sources":["../../../src/helpers/structureMatch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"structureMatch.js","sourceRoot":"","sources":["../../../src/helpers/structureMatch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { ListParticipantMatch, ListParticipants } from '@lilaquadrat/interfaces';
2
+ import type { ObjectId } from 'mongodb';
3
+ export interface ListPlanningParticipant {
4
+ _id: ObjectId;
5
+ category?: string;
6
+ state: ListParticipants['state'];
7
+ match: ListParticipantMatch & {
8
+ /** Relative to the full filtered pool; tied-only pools share stage 4. */
9
+ normalizedScore: 1 | 2 | 3 | 4;
10
+ };
11
+ user?: {
12
+ _id: ObjectId;
13
+ id?: string;
14
+ name: string;
15
+ email?: string;
16
+ };
17
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ListPlanningParticipant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListPlanningParticipant.js","sourceRoot":"","sources":["../../../src/interfaces/ListPlanningParticipant.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import type { ObjectId, WithId } from 'mongodb';
2
+ import type { Shift, ShiftPlan, ShiftPlanningSettings, Structure } from '@lilaquadrat/interfaces';
3
+ import type { CoverageTarget } from '../helpers/shiftPlanCoverage.js';
4
+ /**
5
+ * Everything a plan coverage run needs after the shared reads. Candidate pools are already ranked
6
+ * and the ids are the people that must be resolved for reporting, so callers only add the schedule.
7
+ */
8
+ export interface PlanCoveragePreparation {
9
+ plan: WithId<ShiftPlan>;
10
+ shifts: WithId<Shift>[];
11
+ targets: CoverageTarget[];
12
+ participantIds: ObjectId[];
13
+ customerIds: ObjectId[];
14
+ settings: ShiftPlanningSettings | null;
15
+ listStructures: WithId<Structure>[];
16
+ customerStructures: WithId<Structure>[];
17
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=PlanCoveragePreparation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlanCoveragePreparation.js","sourceRoot":"","sources":["../../../src/interfaces/PlanCoveragePreparation.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import type { ShiftScopeCoverage } from '@lilaquadrat/interfaces';
2
+ import type { ListPlanningParticipant } from './ListPlanningParticipant.js';
3
+ /**
4
+ * Candidate page for a shift or work area, or coverage for a day or plan. `data` is empty when
5
+ * `coverage` is present.
6
+ */
7
+ export interface PlanningParticipantsResult {
8
+ all: number;
9
+ count: number;
10
+ data: ListPlanningParticipant[];
11
+ coverage?: ShiftScopeCoverage;
12
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=PlanningParticipantsResult.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlanningParticipantsResult.js","sourceRoot":"","sources":["../../../src/interfaces/PlanningParticipantsResult.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import type { ObjectId } from 'mongodb';
2
+ export interface ShiftAutofillResult {
3
+ shift: ObjectId;
4
+ /** Assignments anchor list entries rather than customer records. */
5
+ users: ObjectId[];
6
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ShiftAutofillResult.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShiftAutofillResult.js","sourceRoot":"","sources":["../../../src/interfaces/ShiftAutofillResult.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import type { ObjectId, WithId } from 'mongodb';
2
+ import type { Shift } from '@lilaquadrat/interfaces';
3
+ import type { PlanCoveragePreparation } from './PlanCoveragePreparation.js';
4
+ export interface ShiftReportContextOptions {
5
+ replacement?: WithId<Shift>;
6
+ plan?: ObjectId;
7
+ schedules?: WithId<Shift>[];
8
+ preparation?: PlanCoveragePreparation;
9
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ShiftReportContextOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShiftReportContextOptions.js","sourceRoot":"","sources":["../../../src/interfaces/ShiftReportContextOptions.ts"],"names":[],"mappings":""}
@@ -1,6 +1,6 @@
1
1
  import Modelv2 from '../classes/modelv2.class.js';
2
2
  const model = new Modelv2('lists', 'lists');
3
- model.removeWhenEmpty = ['start', 'end', 'description', 'participants', 'content', 'emails', 'location'];
3
+ model.removeWhenEmpty = ['start', 'end', 'description', 'participants', 'content', 'emails', 'location', 'shiftPlan'];
4
4
  model.immutable = ['mode'];
5
5
  model.addIndex({
6
6
  key: {
@@ -20,6 +20,7 @@ const baseProperties = {
20
20
  state: { enum: ['open', 'closed', 'waiting'] },
21
21
  start: { type: 'string', format: 'date-time' },
22
22
  end: { type: 'string', format: 'date-time' },
23
+ shiftPlan: { type: 'object' },
23
24
  };
24
25
  // Common email schema
25
26
  const emailsSchema = {
@@ -1 +1 @@
1
- {"version":3,"file":"lists.model.js","sourceRoot":"","sources":["../../../src/models/lists.model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lists.model.js","sourceRoot":"","sources":["../../../src/models/lists.model.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,11 @@
1
- import { ObjectId, UnorderedBulkOperation, UpdateResult, WithId } from 'mongodb';
1
+ import { FindOptions, ObjectId, UnorderedBulkOperation, UpdateResult, WithId } from 'mongodb';
2
2
  import Immutable from '../Immutable.class.js';
3
3
  import { CustomerPerson, CustomerCompany, CustomersModelActions, CustomerPersonWithEmail, CreateResult, UserAppWithOptions, BasicData, Options, Customers, History, CustomerImportResult, ObjectIdString, MemberProfileUpdate } from '@lilaquadrat/interfaces';
4
4
  import { Location } from '@lilaquadrat/interfaces';
5
5
  import { ValidateFunction } from 'ajv';
6
6
  export declare class CustomersService extends Immutable<CustomerPerson | CustomerCompany> {
7
7
  model: import("../classes/modelv2.class.js").default<Customers, CustomersModelActions>;
8
- peopleForPlanning(customers: ObjectId[], company: string): Promise<(CustomerPerson & {
8
+ peopleForPlanning(customers: ObjectId[], company: string, projection?: FindOptions['projection']): Promise<(CustomerPerson & {
9
9
  _id: ObjectId;
10
10
  })[]>;
11
11
  /** Account, app and project must belong to the same membership entry, not three separate array elements. */
@@ -24,8 +24,8 @@ export class CustomersService extends Immutable {
24
24
  super(...arguments);
25
25
  this.model = CustomersModel;
26
26
  }
27
- peopleForPlanning(customers, company) {
28
- return this.model.db.find({ _id: { $in: customers }, company, type: 'person' }).toArray();
27
+ peopleForPlanning(customers, company, projection) {
28
+ return this.model.db.find({ _id: { $in: customers }, company, type: 'person' }, { projection }).toArray();
29
29
  }
30
30
  /** Account, app and project must belong to the same membership entry, not three separate array elements. */
31
31
  memberForPlanning(customer, options) {