@kernhq/module-hr 0.18.1 → 0.20.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/dist/contract/capabilities.d.ts.map +1 -1
- package/dist/contract/capabilities.js +45 -0
- package/dist/contract/capabilities.js.map +1 -1
- package/dist/contract/exports.d.ts +459 -0
- package/dist/contract/exports.d.ts.map +1 -0
- package/dist/contract/exports.js +331 -0
- package/dist/contract/exports.js.map +1 -0
- package/dist/contract/index.d.ts +2 -0
- package/dist/contract/index.d.ts.map +1 -1
- package/dist/contract/index.js +2 -0
- package/dist/contract/index.js.map +1 -1
- package/dist/contract/permissions.d.ts +10 -2
- package/dist/contract/permissions.d.ts.map +1 -1
- package/dist/contract/permissions.js +44 -5
- package/dist/contract/permissions.js.map +1 -1
- package/dist/contract/rosters.d.ts +183 -0
- package/dist/contract/rosters.d.ts.map +1 -0
- package/dist/contract/rosters.js +138 -0
- package/dist/contract/rosters.js.map +1 -0
- package/dist/contract/router.d.ts +893 -0
- package/dist/contract/router.d.ts.map +1 -1
- package/dist/contract/router.js +220 -1
- package/dist/contract/router.js.map +1 -1
- package/dist/server/router.d.ts +1210 -0
- package/dist/server/router.d.ts.map +1 -1
- package/dist/server/router.js +578 -1
- package/dist/server/router.js.map +1 -1
- package/dist/server/schema.d.ts +727 -1
- package/dist/server/schema.d.ts.map +1 -1
- package/dist/server/schema.js +105 -0
- package/dist/server/schema.js.map +1 -1
- package/dist/server/services/exports.d.ts +321 -0
- package/dist/server/services/exports.d.ts.map +1 -0
- package/dist/server/services/exports.js +765 -0
- package/dist/server/services/exports.js.map +1 -0
- package/dist/server/services/rosters.d.ts +166 -0
- package/dist/server/services/rosters.d.ts.map +1 -0
- package/dist/server/services/rosters.js +268 -0
- package/dist/server/services/rosters.js.map +1 -0
- package/migrations/0012_rosters.sql +163 -0
- package/migrations/meta/0012_snapshot.json +4847 -0
- package/migrations/meta/_journal.json +7 -0
- package/package.json +1 -1
- package/src/client/messages.ts +13 -0
- package/src/contract/capabilities.ts +45 -0
- package/src/contract/exports.ts +354 -0
- package/src/contract/index.ts +2 -0
- package/src/contract/permissions.ts +47 -5
- package/src/contract/rosters.ts +156 -0
- package/src/contract/router.ts +256 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exports.js","sourceRoot":"","sources":["../../../src/server/services/exports.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { type Tx } from '@kernhq/kernel';
|
|
2
|
+
import type { RosterDaySource } from '../../contract/rosters.js';
|
|
3
|
+
import type { ShiftSpec } from '../../policy/working-time.js';
|
|
4
|
+
import { rosterShifts } from '../schema.js';
|
|
5
|
+
/**
|
|
6
|
+
* What a person is rostered to work on a date.
|
|
7
|
+
*
|
|
8
|
+
* The arithmetic is the point of this file, and all of it is pure. A rotation is a cycle plus the
|
|
9
|
+
* date the cycle starts from, so what somebody works on any date at all — including dates before
|
|
10
|
+
* the anchor and dates years after it — is one modulus. Nothing is generated, stored, or swept:
|
|
11
|
+
* expanding a year of shifts per person into rows is what makes a roster impossible to change
|
|
12
|
+
* afterwards, because moving a crew forward by a day then means rewriting thousands of rows with no
|
|
13
|
+
* way left to tell which of them a human had already corrected.
|
|
14
|
+
*
|
|
15
|
+
* Only exceptions are rows. `roster_overrides` holds one day that differs, and an override that
|
|
16
|
+
* says "off" is a row with an empty `shift_ids` — the reason it is a row rather than a deletion is
|
|
17
|
+
* that "planned rest" and "nothing rosters this person" are different facts, and a screen that
|
|
18
|
+
* renders them the same tells somebody their absence was intended.
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Days since 1970-01-01 for a civil date, by pure arithmetic.
|
|
22
|
+
*
|
|
23
|
+
* Not `new Date(iso).getTime() / 86400000`: that parses as UTC midnight and then everything the
|
|
24
|
+
* result touches is a step away from the runtime's own zone, and it is wrong by a day for anybody
|
|
25
|
+
* west of Greenwich the moment a caller formats it back. This is Howard Hinnant's `days_from_civil`
|
|
26
|
+
* — exact for every proleptic Gregorian date, with no `Date`, no zone and no daylight saving
|
|
27
|
+
* anywhere near it. A cycle index computed from instants would slip by one twice a year in every
|
|
28
|
+
* zone that observes it, which on a 4-on-4-off rotation puts a whole crew on the wrong shift.
|
|
29
|
+
*/
|
|
30
|
+
export declare function dayNumber(date: string): number;
|
|
31
|
+
/** Whole days from `from` to `to`. Negative when `to` is the earlier date. */
|
|
32
|
+
export declare const daysBetween: (from: string, to: string) => number;
|
|
33
|
+
export interface RosterPatternSpec {
|
|
34
|
+
id: string;
|
|
35
|
+
anchorDate: string;
|
|
36
|
+
days: readonly (readonly string[])[];
|
|
37
|
+
}
|
|
38
|
+
export interface RosterAssignmentSpec {
|
|
39
|
+
patternId: string;
|
|
40
|
+
effectiveFrom: string;
|
|
41
|
+
effectiveTo: string | null;
|
|
42
|
+
cycleOffset: number;
|
|
43
|
+
}
|
|
44
|
+
export interface RosterOverrideSpec {
|
|
45
|
+
businessDate: string;
|
|
46
|
+
shiftIds: readonly string[];
|
|
47
|
+
note: string | null;
|
|
48
|
+
}
|
|
49
|
+
export interface PlannedDay {
|
|
50
|
+
businessDate: string;
|
|
51
|
+
shiftIds: string[];
|
|
52
|
+
source: RosterDaySource;
|
|
53
|
+
note: string | null;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Which position of the cycle a date falls on.
|
|
57
|
+
*
|
|
58
|
+
* `((raw % len) + len) % len` rather than `raw % len`, because JavaScript's `%` keeps the sign of
|
|
59
|
+
* the dividend: a date before the anchor gives a negative index, and `days[-3]` is `undefined` —
|
|
60
|
+
* which reads as a rest day rather than as an error. A roster asked about last month would then
|
|
61
|
+
* quietly report that everybody was off.
|
|
62
|
+
*
|
|
63
|
+
* Returns -1 for a pattern with no cycle at all, which is a misconfiguration rather than a rest day
|
|
64
|
+
* and is reported as `none` by the caller.
|
|
65
|
+
*/
|
|
66
|
+
export declare function cycleIndexFor(pattern: Pick<RosterPatternSpec, 'anchorDate' | 'days'>, date: string, cycleOffset?: number): number;
|
|
67
|
+
/** The shifts a rotation puts on a date. `[]` is a planned rest day; null is no cycle to read. */
|
|
68
|
+
export declare function patternShiftIdsOn(pattern: Pick<RosterPatternSpec, 'anchorDate' | 'days'>, date: string, cycleOffset?: number): string[] | null;
|
|
69
|
+
/**
|
|
70
|
+
* The assignment in force on a date.
|
|
71
|
+
*
|
|
72
|
+
* The exclusion constraint makes two-in-force impossible in the database, so this is not resolving
|
|
73
|
+
* a conflict — it is refusing to depend on row order for the answer. `schedule_assignments` did
|
|
74
|
+
* depend on it for five migrations, and the symptom was a day sheet whose figures changed between
|
|
75
|
+
* one recomputation and the next on rows a locked payroll period had been filed against.
|
|
76
|
+
*/
|
|
77
|
+
export declare function assignmentOn<A extends RosterAssignmentSpec>(assignments: readonly A[], date: string): A | null;
|
|
78
|
+
/**
|
|
79
|
+
* The roster for one person over a set of dates.
|
|
80
|
+
*
|
|
81
|
+
* Takes the dates rather than a range so a caller asking about two adjacent days — which is what
|
|
82
|
+
* the night-shift attribution needs — does not have to expand a range to get them.
|
|
83
|
+
*
|
|
84
|
+
* The precedence is override, then rotation, then nothing, and it is deliberate that an override
|
|
85
|
+
* wins even when it is empty: somebody taken off a Tuesday they were rostered for is off that
|
|
86
|
+
* Tuesday, and a rotation that could still speak over the top of that would undo the correction.
|
|
87
|
+
*/
|
|
88
|
+
export declare function rosterPlan(input: {
|
|
89
|
+
dates: readonly string[];
|
|
90
|
+
assignments: readonly RosterAssignmentSpec[];
|
|
91
|
+
patterns: ReadonlyMap<string, RosterPatternSpec>;
|
|
92
|
+
overrides: readonly RosterOverrideSpec[];
|
|
93
|
+
}): PlannedDay[];
|
|
94
|
+
export type RosterShiftRow = typeof rosterShifts.$inferSelect;
|
|
95
|
+
/** A rostered shift as the working-time layer wants it. The one seam between the two. */
|
|
96
|
+
export declare const toShiftSpec: (shift: RosterShiftRow) => ShiftSpec;
|
|
97
|
+
/**
|
|
98
|
+
* A stable string for what a day was rostered as.
|
|
99
|
+
*
|
|
100
|
+
* `attendance_days.policy_hash` is what tells a recomputation whether a stored figure is stale, and
|
|
101
|
+
* `hashSchedule` keys only on the schedule id and the rounding policy. That is enough while a
|
|
102
|
+
* schedule is a week that only changes when the schedule row does; it is not enough once a roster
|
|
103
|
+
* can change one Tuesday, because the id and the rounding are identical either side of the change
|
|
104
|
+
* and the sheet would stay stale with nothing able to notice.
|
|
105
|
+
*
|
|
106
|
+
* So this folds in what the day was actually rostered as — the shift ids **and** their wall clocks,
|
|
107
|
+
* because editing a shift from 06:00 to 07:00 changes every day it appears on without changing an
|
|
108
|
+
* id anywhere.
|
|
109
|
+
*/
|
|
110
|
+
export declare function rosterFingerprint(day: {
|
|
111
|
+
source: RosterDaySource;
|
|
112
|
+
shifts: readonly RosterShiftRow[];
|
|
113
|
+
}): string;
|
|
114
|
+
/** The ceiling on a coverage grid's person-days — a hundred people for a six-week rotation. */
|
|
115
|
+
export declare const MAX_COVERAGE_CELLS = 4200;
|
|
116
|
+
/**
|
|
117
|
+
* Why a range is refused, as a sentence.
|
|
118
|
+
*
|
|
119
|
+
* A roster range is cheap to expand and expensive to send, and a coverage grid multiplies by the
|
|
120
|
+
* population of an office. Both refusals name the number asked for as well as the ceiling, because
|
|
121
|
+
* "too long" without either is a message somebody has to guess their way out of.
|
|
122
|
+
*/
|
|
123
|
+
export declare function rosterRefusal(input: {
|
|
124
|
+
from: string;
|
|
125
|
+
to: string;
|
|
126
|
+
coverage: boolean;
|
|
127
|
+
population?: number;
|
|
128
|
+
}): string | null;
|
|
129
|
+
export interface ResolvedRosterDay {
|
|
130
|
+
businessDate: string;
|
|
131
|
+
shifts: RosterShiftRow[];
|
|
132
|
+
source: RosterDaySource;
|
|
133
|
+
note: string | null;
|
|
134
|
+
}
|
|
135
|
+
export declare class RosterService {
|
|
136
|
+
/**
|
|
137
|
+
* Every shift in the workspace by id, **archived ones included**.
|
|
138
|
+
*
|
|
139
|
+
* A pattern and a stored override both point at a shift by id, so resolving only the live ones
|
|
140
|
+
* would silently empty out every rostered day that used a shift somebody archived last week —
|
|
141
|
+
* which reads as "nobody is working" rather than as "this shift is retired".
|
|
142
|
+
*/
|
|
143
|
+
shiftsById(tx: Tx, workspaceId: string): Promise<Map<string, RosterShiftRow>>;
|
|
144
|
+
/**
|
|
145
|
+
* What each of `personIds` is rostered for on each of `dates`.
|
|
146
|
+
*
|
|
147
|
+
* One query per table for the whole population rather than one per person: a coverage grid over
|
|
148
|
+
* an office of eighty is otherwise 240 round trips for arithmetic that takes microseconds.
|
|
149
|
+
*
|
|
150
|
+
* `inArray` renders an expanded parameter list — `person_id in ($1, $2, …)`. That is deliberate
|
|
151
|
+
* and is not the same as binding one array: `= any($1::uuid[])` with drizzle expanding the array
|
|
152
|
+
* into a list produces `any(($1,$2)::uuid[])`, which Postgres rejects with 42846, "cannot cast
|
|
153
|
+
* type record to uuid[]".
|
|
154
|
+
*/
|
|
155
|
+
plan(tx: Tx, workspaceId: string, personIds: readonly string[], dates: readonly string[]): Promise<Map<string, ResolvedRosterDay[]>>;
|
|
156
|
+
/** One person over a contiguous range — the shape a roster screen asks for. */
|
|
157
|
+
forPerson(tx: Tx, workspaceId: string, personId: string, from: string, to: string): Promise<ResolvedRosterDay[]>;
|
|
158
|
+
/**
|
|
159
|
+
* Refuse a pattern or an override that names a shift this workspace does not have.
|
|
160
|
+
*
|
|
161
|
+
* Checked on write rather than tolerated on read: a dangling id is invisible on the screen that
|
|
162
|
+
* created it and shows up weeks later as a person who is somehow rostered for nothing.
|
|
163
|
+
*/
|
|
164
|
+
assertShiftsExist(tx: Tx, workspaceId: string, shiftIds: readonly string[]): Promise<void>;
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=rosters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rosters.d.ts","sourceRoot":"","sources":["../../../src/server/services/rosters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { KernError } from '@kernhq/kernel';
|
|
2
|
+
import { and, eq, gte, inArray, isNull, lte, or } from 'drizzle-orm';
|
|
3
|
+
import { MAX_COVERAGE_DAYS, MAX_ROSTER_DAYS } from '../../contract/rosters.js';
|
|
4
|
+
import { datesBetween } from '../../policy/calendar.js';
|
|
5
|
+
import { rosterAssignments, rosterOverrides, rosterPatterns, rosterShifts } from '../schema.js';
|
|
6
|
+
/**
|
|
7
|
+
* What a person is rostered to work on a date.
|
|
8
|
+
*
|
|
9
|
+
* The arithmetic is the point of this file, and all of it is pure. A rotation is a cycle plus the
|
|
10
|
+
* date the cycle starts from, so what somebody works on any date at all — including dates before
|
|
11
|
+
* the anchor and dates years after it — is one modulus. Nothing is generated, stored, or swept:
|
|
12
|
+
* expanding a year of shifts per person into rows is what makes a roster impossible to change
|
|
13
|
+
* afterwards, because moving a crew forward by a day then means rewriting thousands of rows with no
|
|
14
|
+
* way left to tell which of them a human had already corrected.
|
|
15
|
+
*
|
|
16
|
+
* Only exceptions are rows. `roster_overrides` holds one day that differs, and an override that
|
|
17
|
+
* says "off" is a row with an empty `shift_ids` — the reason it is a row rather than a deletion is
|
|
18
|
+
* that "planned rest" and "nothing rosters this person" are different facts, and a screen that
|
|
19
|
+
* renders them the same tells somebody their absence was intended.
|
|
20
|
+
*/
|
|
21
|
+
// ---------------------------------------------------------------------------------------------
|
|
22
|
+
// pure: the calendar arithmetic
|
|
23
|
+
// ---------------------------------------------------------------------------------------------
|
|
24
|
+
/**
|
|
25
|
+
* Days since 1970-01-01 for a civil date, by pure arithmetic.
|
|
26
|
+
*
|
|
27
|
+
* Not `new Date(iso).getTime() / 86400000`: that parses as UTC midnight and then everything the
|
|
28
|
+
* result touches is a step away from the runtime's own zone, and it is wrong by a day for anybody
|
|
29
|
+
* west of Greenwich the moment a caller formats it back. This is Howard Hinnant's `days_from_civil`
|
|
30
|
+
* — exact for every proleptic Gregorian date, with no `Date`, no zone and no daylight saving
|
|
31
|
+
* anywhere near it. A cycle index computed from instants would slip by one twice a year in every
|
|
32
|
+
* zone that observes it, which on a 4-on-4-off rotation puts a whole crew on the wrong shift.
|
|
33
|
+
*/
|
|
34
|
+
export function dayNumber(date) {
|
|
35
|
+
const [y, m, d] = date.split('-').map(Number);
|
|
36
|
+
const year = y - (m <= 2 ? 1 : 0);
|
|
37
|
+
const era = Math.floor(year / 400);
|
|
38
|
+
const yoe = year - era * 400;
|
|
39
|
+
const doy = Math.floor((153 * (m + (m > 2 ? -3 : 9)) + 2) / 5) + d - 1;
|
|
40
|
+
const doe = yoe * 365 + Math.floor(yoe / 4) - Math.floor(yoe / 100) + doy;
|
|
41
|
+
return era * 146_097 + doe - 719_468;
|
|
42
|
+
}
|
|
43
|
+
/** Whole days from `from` to `to`. Negative when `to` is the earlier date. */
|
|
44
|
+
export const daysBetween = (from, to) => dayNumber(to) - dayNumber(from);
|
|
45
|
+
/**
|
|
46
|
+
* Which position of the cycle a date falls on.
|
|
47
|
+
*
|
|
48
|
+
* `((raw % len) + len) % len` rather than `raw % len`, because JavaScript's `%` keeps the sign of
|
|
49
|
+
* the dividend: a date before the anchor gives a negative index, and `days[-3]` is `undefined` —
|
|
50
|
+
* which reads as a rest day rather than as an error. A roster asked about last month would then
|
|
51
|
+
* quietly report that everybody was off.
|
|
52
|
+
*
|
|
53
|
+
* Returns -1 for a pattern with no cycle at all, which is a misconfiguration rather than a rest day
|
|
54
|
+
* and is reported as `none` by the caller.
|
|
55
|
+
*/
|
|
56
|
+
export function cycleIndexFor(pattern, date, cycleOffset = 0) {
|
|
57
|
+
const len = pattern.days.length;
|
|
58
|
+
if (len <= 0)
|
|
59
|
+
return -1;
|
|
60
|
+
const raw = daysBetween(pattern.anchorDate, date) + cycleOffset;
|
|
61
|
+
return ((raw % len) + len) % len;
|
|
62
|
+
}
|
|
63
|
+
/** The shifts a rotation puts on a date. `[]` is a planned rest day; null is no cycle to read. */
|
|
64
|
+
export function patternShiftIdsOn(pattern, date, cycleOffset = 0) {
|
|
65
|
+
const index = cycleIndexFor(pattern, date, cycleOffset);
|
|
66
|
+
if (index < 0)
|
|
67
|
+
return null;
|
|
68
|
+
return [...(pattern.days[index] ?? [])];
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* The assignment in force on a date.
|
|
72
|
+
*
|
|
73
|
+
* The exclusion constraint makes two-in-force impossible in the database, so this is not resolving
|
|
74
|
+
* a conflict — it is refusing to depend on row order for the answer. `schedule_assignments` did
|
|
75
|
+
* depend on it for five migrations, and the symptom was a day sheet whose figures changed between
|
|
76
|
+
* one recomputation and the next on rows a locked payroll period had been filed against.
|
|
77
|
+
*/
|
|
78
|
+
export function assignmentOn(assignments, date) {
|
|
79
|
+
let best = null;
|
|
80
|
+
for (const a of assignments) {
|
|
81
|
+
if (a.effectiveFrom > date)
|
|
82
|
+
continue;
|
|
83
|
+
if (a.effectiveTo !== null && a.effectiveTo < date)
|
|
84
|
+
continue;
|
|
85
|
+
if (!best || a.effectiveFrom > best.effectiveFrom)
|
|
86
|
+
best = a;
|
|
87
|
+
}
|
|
88
|
+
return best;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* The roster for one person over a set of dates.
|
|
92
|
+
*
|
|
93
|
+
* Takes the dates rather than a range so a caller asking about two adjacent days — which is what
|
|
94
|
+
* the night-shift attribution needs — does not have to expand a range to get them.
|
|
95
|
+
*
|
|
96
|
+
* The precedence is override, then rotation, then nothing, and it is deliberate that an override
|
|
97
|
+
* wins even when it is empty: somebody taken off a Tuesday they were rostered for is off that
|
|
98
|
+
* Tuesday, and a rotation that could still speak over the top of that would undo the correction.
|
|
99
|
+
*/
|
|
100
|
+
export function rosterPlan(input) {
|
|
101
|
+
const byDate = new Map(input.overrides.map((o) => [o.businessDate, o]));
|
|
102
|
+
return input.dates.map((businessDate) => {
|
|
103
|
+
const override = byDate.get(businessDate);
|
|
104
|
+
if (override)
|
|
105
|
+
return {
|
|
106
|
+
businessDate,
|
|
107
|
+
shiftIds: [...override.shiftIds],
|
|
108
|
+
source: 'override',
|
|
109
|
+
note: override.note,
|
|
110
|
+
};
|
|
111
|
+
const assignment = assignmentOn(input.assignments, businessDate);
|
|
112
|
+
const pattern = assignment ? input.patterns.get(assignment.patternId) : undefined;
|
|
113
|
+
const ids = pattern ? patternShiftIdsOn(pattern, businessDate, assignment?.cycleOffset ?? 0) : null;
|
|
114
|
+
if (ids === null)
|
|
115
|
+
return { businessDate, shiftIds: [], source: 'none', note: null };
|
|
116
|
+
return { businessDate, shiftIds: ids, source: 'pattern', note: null };
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
/** A rostered shift as the working-time layer wants it. The one seam between the two. */
|
|
120
|
+
export const toShiftSpec = (shift) => ({
|
|
121
|
+
start: shift.startTime,
|
|
122
|
+
end: shift.endTime,
|
|
123
|
+
breakMinutes: shift.breakMinutes,
|
|
124
|
+
graceInMinutes: shift.graceInMinutes,
|
|
125
|
+
graceOutMinutes: shift.graceOutMinutes,
|
|
126
|
+
});
|
|
127
|
+
/**
|
|
128
|
+
* A stable string for what a day was rostered as.
|
|
129
|
+
*
|
|
130
|
+
* `attendance_days.policy_hash` is what tells a recomputation whether a stored figure is stale, and
|
|
131
|
+
* `hashSchedule` keys only on the schedule id and the rounding policy. That is enough while a
|
|
132
|
+
* schedule is a week that only changes when the schedule row does; it is not enough once a roster
|
|
133
|
+
* can change one Tuesday, because the id and the rounding are identical either side of the change
|
|
134
|
+
* and the sheet would stay stale with nothing able to notice.
|
|
135
|
+
*
|
|
136
|
+
* So this folds in what the day was actually rostered as — the shift ids **and** their wall clocks,
|
|
137
|
+
* because editing a shift from 06:00 to 07:00 changes every day it appears on without changing an
|
|
138
|
+
* id anywhere.
|
|
139
|
+
*/
|
|
140
|
+
export function rosterFingerprint(day) {
|
|
141
|
+
const parts = day.shifts.map((s) => `${s.id}@${s.startTime}-${s.endTime}/${s.breakMinutes}/${s.graceInMinutes}/${s.graceOutMinutes}`);
|
|
142
|
+
return `${day.source}:${parts.join('+')}`;
|
|
143
|
+
}
|
|
144
|
+
/** The ceiling on a coverage grid's person-days — a hundred people for a six-week rotation. */
|
|
145
|
+
export const MAX_COVERAGE_CELLS = 4200;
|
|
146
|
+
/**
|
|
147
|
+
* Why a range is refused, as a sentence.
|
|
148
|
+
*
|
|
149
|
+
* A roster range is cheap to expand and expensive to send, and a coverage grid multiplies by the
|
|
150
|
+
* population of an office. Both refusals name the number asked for as well as the ceiling, because
|
|
151
|
+
* "too long" without either is a message somebody has to guess their way out of.
|
|
152
|
+
*/
|
|
153
|
+
export function rosterRefusal(input) {
|
|
154
|
+
if (input.to < input.from)
|
|
155
|
+
return `The end date ${input.to} is before the start date ${input.from}.`;
|
|
156
|
+
const days = daysBetween(input.from, input.to) + 1;
|
|
157
|
+
const max = input.coverage ? MAX_COVERAGE_DAYS : MAX_ROSTER_DAYS;
|
|
158
|
+
if (days > max)
|
|
159
|
+
return input.coverage
|
|
160
|
+
? `A coverage grid covers at most ${max} days, and this one asks for ${days}. Ask for a shorter range.`
|
|
161
|
+
: `A roster covers at most ${max} days, and this one asks for ${days}. Ask for a shorter range.`;
|
|
162
|
+
if (input.coverage && input.population !== undefined) {
|
|
163
|
+
const cells = input.population * days;
|
|
164
|
+
if (cells > MAX_COVERAGE_CELLS)
|
|
165
|
+
return `${input.population} people over ${days} days is ${cells} person-days, and a coverage grid resolves at most ${MAX_COVERAGE_CELLS}. Ask for one office, or a shorter range.`;
|
|
166
|
+
}
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
export class RosterService {
|
|
170
|
+
/**
|
|
171
|
+
* Every shift in the workspace by id, **archived ones included**.
|
|
172
|
+
*
|
|
173
|
+
* A pattern and a stored override both point at a shift by id, so resolving only the live ones
|
|
174
|
+
* would silently empty out every rostered day that used a shift somebody archived last week —
|
|
175
|
+
* which reads as "nobody is working" rather than as "this shift is retired".
|
|
176
|
+
*/
|
|
177
|
+
async shiftsById(tx, workspaceId) {
|
|
178
|
+
const rows = await tx.select().from(rosterShifts).where(eq(rosterShifts.workspaceId, workspaceId));
|
|
179
|
+
return new Map(rows.map((r) => [r.id, r]));
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* What each of `personIds` is rostered for on each of `dates`.
|
|
183
|
+
*
|
|
184
|
+
* One query per table for the whole population rather than one per person: a coverage grid over
|
|
185
|
+
* an office of eighty is otherwise 240 round trips for arithmetic that takes microseconds.
|
|
186
|
+
*
|
|
187
|
+
* `inArray` renders an expanded parameter list — `person_id in ($1, $2, …)`. That is deliberate
|
|
188
|
+
* and is not the same as binding one array: `= any($1::uuid[])` with drizzle expanding the array
|
|
189
|
+
* into a list produces `any(($1,$2)::uuid[])`, which Postgres rejects with 42846, "cannot cast
|
|
190
|
+
* type record to uuid[]".
|
|
191
|
+
*/
|
|
192
|
+
async plan(tx, workspaceId, personIds, dates) {
|
|
193
|
+
const out = new Map();
|
|
194
|
+
if (!personIds.length || !dates.length)
|
|
195
|
+
return out;
|
|
196
|
+
const sorted = [...dates].sort();
|
|
197
|
+
const first = sorted[0];
|
|
198
|
+
const last = sorted[sorted.length - 1];
|
|
199
|
+
const ids = [...new Set(personIds)];
|
|
200
|
+
const assignments = await tx
|
|
201
|
+
.select()
|
|
202
|
+
.from(rosterAssignments)
|
|
203
|
+
.where(and(eq(rosterAssignments.workspaceId, workspaceId), inArray(rosterAssignments.personId, ids), lte(rosterAssignments.effectiveFrom, last), or(isNull(rosterAssignments.effectiveTo), gte(rosterAssignments.effectiveTo, first))));
|
|
204
|
+
const overrides = await tx
|
|
205
|
+
.select()
|
|
206
|
+
.from(rosterOverrides)
|
|
207
|
+
.where(and(eq(rosterOverrides.workspaceId, workspaceId), inArray(rosterOverrides.personId, ids), inArray(rosterOverrides.businessDate, [...new Set(sorted)])));
|
|
208
|
+
const patternIds = [...new Set(assignments.map((a) => a.patternId))];
|
|
209
|
+
const patternRows = patternIds.length
|
|
210
|
+
? await tx
|
|
211
|
+
.select()
|
|
212
|
+
.from(rosterPatterns)
|
|
213
|
+
.where(and(eq(rosterPatterns.workspaceId, workspaceId), inArray(rosterPatterns.id, patternIds)))
|
|
214
|
+
: [];
|
|
215
|
+
const patterns = new Map(patternRows.map((p) => [p.id, { id: p.id, anchorDate: p.anchorDate, days: p.days ?? [] }]));
|
|
216
|
+
const shifts = await this.shiftsById(tx, workspaceId);
|
|
217
|
+
for (const personId of ids) {
|
|
218
|
+
const plan = rosterPlan({
|
|
219
|
+
dates,
|
|
220
|
+
assignments: assignments.filter((a) => a.personId === personId),
|
|
221
|
+
patterns,
|
|
222
|
+
overrides: overrides
|
|
223
|
+
.filter((o) => o.personId === personId)
|
|
224
|
+
.map((o) => ({ businessDate: o.businessDate, shiftIds: o.shiftIds ?? [], note: o.note })),
|
|
225
|
+
});
|
|
226
|
+
out.set(personId, plan.map((day) => ({
|
|
227
|
+
businessDate: day.businessDate,
|
|
228
|
+
// A shift id with no row behind it is dropped rather than rendered as a hole: the only
|
|
229
|
+
// way to produce one is to point a pattern at an id that was never a shift, and the
|
|
230
|
+
// procedures below refuse that on write.
|
|
231
|
+
shifts: day.shiftIds.flatMap((id) => {
|
|
232
|
+
const shift = shifts.get(id);
|
|
233
|
+
return shift ? [shift] : [];
|
|
234
|
+
}),
|
|
235
|
+
source: day.source,
|
|
236
|
+
note: day.note,
|
|
237
|
+
})));
|
|
238
|
+
}
|
|
239
|
+
return out;
|
|
240
|
+
}
|
|
241
|
+
/** One person over a contiguous range — the shape a roster screen asks for. */
|
|
242
|
+
async forPerson(tx, workspaceId, personId, from, to) {
|
|
243
|
+
const plan = await this.plan(tx, workspaceId, [personId], datesBetween(from, to));
|
|
244
|
+
return plan.get(personId) ?? [];
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Refuse a pattern or an override that names a shift this workspace does not have.
|
|
248
|
+
*
|
|
249
|
+
* Checked on write rather than tolerated on read: a dangling id is invisible on the screen that
|
|
250
|
+
* created it and shows up weeks later as a person who is somehow rostered for nothing.
|
|
251
|
+
*/
|
|
252
|
+
async assertShiftsExist(tx, workspaceId, shiftIds) {
|
|
253
|
+
const wanted = [...new Set(shiftIds)];
|
|
254
|
+
if (!wanted.length)
|
|
255
|
+
return;
|
|
256
|
+
const found = await tx
|
|
257
|
+
.select({ id: rosterShifts.id })
|
|
258
|
+
.from(rosterShifts)
|
|
259
|
+
.where(and(eq(rosterShifts.workspaceId, workspaceId), inArray(rosterShifts.id, wanted)));
|
|
260
|
+
const have = new Set(found.map((r) => r.id));
|
|
261
|
+
const missing = wanted.filter((id) => !have.has(id));
|
|
262
|
+
if (missing.length)
|
|
263
|
+
throw KernError.badRequest(missing.length === 1
|
|
264
|
+
? `This roster names a shift this workspace does not have: ${missing[0]}.`
|
|
265
|
+
: `This roster names shifts this workspace does not have: ${missing.join(', ')}.`);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=rosters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rosters.js","sourceRoot":"","sources":["../../../src/server/services/rosters.ts"],"names":[],"mappings":"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"}
|