@kernhq/module-hr 0.14.1 → 0.16.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 (35) hide show
  1. package/dist/contract/router.d.ts +14 -2
  2. package/dist/contract/router.d.ts.map +1 -1
  3. package/dist/contract/router.js +11 -2
  4. package/dist/contract/router.js.map +1 -1
  5. package/dist/server/index.d.ts.map +1 -1
  6. package/dist/server/index.js +51 -0
  7. package/dist/server/index.js.map +1 -1
  8. package/dist/server/jobs.d.ts +5 -2
  9. package/dist/server/jobs.d.ts.map +1 -1
  10. package/dist/server/jobs.js +109 -2
  11. package/dist/server/jobs.js.map +1 -1
  12. package/dist/server/router.d.ts +122 -2
  13. package/dist/server/router.d.ts.map +1 -1
  14. package/dist/server/router.js +448 -274
  15. package/dist/server/router.js.map +1 -1
  16. package/dist/server/schema.d.ts +85 -0
  17. package/dist/server/schema.d.ts.map +1 -1
  18. package/dist/server/schema.js +32 -0
  19. package/dist/server/schema.js.map +1 -1
  20. package/dist/server/services/approvals.d.ts +150 -6
  21. package/dist/server/services/approvals.d.ts.map +1 -1
  22. package/dist/server/services/approvals.js +428 -26
  23. package/dist/server/services/approvals.js.map +1 -1
  24. package/migrations/0010_approval_timeouts.sql +28 -0
  25. package/migrations/meta/0010_snapshot.json +4263 -0
  26. package/migrations/meta/_journal.json +8 -1
  27. package/package.json +1 -1
  28. package/src/client/components/DecisionDialog.svelte +99 -7
  29. package/src/client/messages.ts +85 -0
  30. package/src/client/mock.ts +256 -15
  31. package/src/client/pages/ApprovalsPage.svelte +256 -27
  32. package/src/client/pages/DirectoryPage.svelte +1 -1
  33. package/src/client/query.ts +2 -2
  34. package/src/client/widgets/ApprovalsWidget.svelte +120 -9
  35. package/src/contract/router.ts +11 -2
@@ -1,7 +1,48 @@
1
1
  import { KernError, uuidv7 } from '@kernhq/kernel';
2
- import { and, arrayOverlaps, desc, eq, inArray, isNull, lte, sql } from 'drizzle-orm';
2
+ import { and, arrayOverlaps, asc, desc, eq, inArray, isNotNull, isNull, lte, ne, or, sql } from 'drizzle-orm';
3
+ import { MODULE_ID, } from '../../contract/index.js';
3
4
  import { approvalChains, approvalDecisions, approvalRequests, approvalSteps, delegations, employments, officeAssignments, offices, orgUnits, people, } from '../schema.js';
4
5
  import { inForceOn, todayIso } from './db.js';
6
+ /**
7
+ * Who an auto-approval is attributed to: nobody.
8
+ *
9
+ * `approval_decisions.approver_id` is `not null` and the contract types it as a uuid, so a timeout's
10
+ * decision needs *a* uuid — and the only honest one is the nil UUID, which `uuidv7()` cannot
11
+ * produce and no person can therefore hold. `source = 'timeout'` on the same row is what says why.
12
+ *
13
+ * It also buys the idempotence for free: `hr_approval_decisions_uq` is unique on
14
+ * `(step_id, approver_id)`, so the database refuses a second auto-approval of one step exactly the
15
+ * way it refuses a manager's double click.
16
+ *
17
+ * And it survives the contract, which is the part worth checking before copying this trick
18
+ * elsewhere: zod's `z.uuid()` rejects a uuid whose version nibble is not 1–8, so most placeholders
19
+ * fail the inbox's own output schema — but it special-cases the nil and max UUIDs and lets both
20
+ * through. Verified against zod 4.4.3, the version this workspace resolves.
21
+ */
22
+ export const TIMEOUT_APPROVER_ID = '00000000-0000-0000-0000-000000000000';
23
+ /**
24
+ * The English fallback each notice is delivered with.
25
+ *
26
+ * Composed here means composed before anyone knows who will read it, so these are English on a
27
+ * Persian screen — the same defect `approval_requests.summary` carries and for the same reason.
28
+ * `data` carries `subjectType` and the request's own `summaryParams`, which is everything a
29
+ * localised renderer needs; the module declares no `notificationTypes` yet, so nothing renders them
30
+ * that way today.
31
+ */
32
+ const NOTICE_TITLE = {
33
+ 'hr.approval.reminder': 'Still waiting for your approval',
34
+ 'hr.approval.escalated': 'An approval passed its deadline and was escalated',
35
+ 'hr.approval.auto_approved': 'An approval was granted automatically when its deadline passed',
36
+ };
37
+ /**
38
+ * How many overdue steps one sweep of one workspace will handle.
39
+ *
40
+ * The sweep runs in a single transaction so a decision and its subject land together, and a
41
+ * transaction that holds a backlog of thousands of rows open is a transaction nobody wants on a
42
+ * shared database. Whatever is left is taken on the next tick an hour later, which is well inside
43
+ * the resolution of a deadline stated in hours.
44
+ */
45
+ const SWEEP_BATCH = 500;
5
46
  /**
6
47
  * The approval engine. One of these, for everything that needs signing off.
7
48
  *
@@ -17,8 +58,19 @@ import { inForceOn, todayIso } from './db.js';
17
58
  */
18
59
  export class ApprovalService {
19
60
  kernel;
20
- constructor(kernel) {
61
+ appliers;
62
+ /**
63
+ * `appliers` is what a caller that can finish the job passes in.
64
+ *
65
+ * A human decision arrives through the router, which applies the subject itself after calling
66
+ * `decide`. A deadline arrives through a job, which has no router around it — so the sweep will
67
+ * not *complete* a request it cannot also apply, and reminds instead. Passing the same appliers
68
+ * here from the router as well would put both paths on one implementation, which is where they
69
+ * belong.
70
+ */
71
+ constructor(kernel, appliers = {}) {
21
72
  this.kernel = kernel;
73
+ this.appliers = appliers;
22
74
  }
23
75
  /**
24
76
  * Expand a subject — "the manager", "whoever heads this office" — into people.
@@ -197,8 +249,17 @@ export class ApprovalService {
197
249
  mode: r.step.mode,
198
250
  minApprovals: r.step.minApprovals,
199
251
  approverIds: r.approverIds,
200
- status: index === 0 ? 'pending' : 'pending',
201
- dueAt: r.step.slaHours ? new Date(Date.now() + r.step.slaHours * 3600_000) : null,
252
+ status: 'pending',
253
+ // The deadline policy travels with the step, because the snapshot cannot be indexed back
254
+ // into: `usable` has dropped the steps that resolved to nobody, so `stepIndex` and the
255
+ // spec's array position are the same number only until one step is dropped.
256
+ onTimeout: r.step.onTimeout,
257
+ slaHours: r.step.slaHours,
258
+ // Only the step that is actually waiting has a clock. Every step used to be given one at
259
+ // request time, so a two-step chain with a 24-hour SLA had step 2 overdue before step 1 had
260
+ // been looked at — "you have 24 hours" measured from a moment the approver could not act
261
+ // in. `settleStep` starts the next one when the request reaches it.
262
+ dueAt: index === 0 ? deadlineFrom(r.step.slaHours) : null,
202
263
  });
203
264
  }
204
265
  return {
@@ -234,8 +295,9 @@ export class ApprovalService {
234
295
  const actingAs = onBehalfOfId ?? approverPersonId;
235
296
  if (!step.approverIds.includes(actingAs))
236
297
  throw KernError.forbidden('You are not an approver on this step');
237
- if (onBehalfOfId && !(await this.mayActFor(tx, workspaceId, approverPersonId, onBehalfOfId)))
238
- throw KernError.forbidden('You do not hold a delegation from that person');
298
+ if (onBehalfOfId &&
299
+ !(await this.mayActFor(tx, workspaceId, approverPersonId, onBehalfOfId, request.subjectType)))
300
+ throw KernError.forbidden('You do not hold a delegation from that person for this');
239
301
  await tx.insert(approvalDecisions).values({
240
302
  id: uuidv7(),
241
303
  workspaceId,
@@ -258,35 +320,326 @@ export class ApprovalService {
258
320
  .where(eq(approvalRequests.id, requestId));
259
321
  return { status: 'rejected', request };
260
322
  }
261
- const needed = step.mode === 'all' ? step.approverIds.length : step.mode === 'any' ? 1 : step.minApprovals;
262
- if (approvals < needed)
323
+ if (approvals < requiredApprovals(step))
263
324
  return { status: 'pending', request };
325
+ const advancedTo = await this.settleStep(tx, request, step);
326
+ if (advancedTo !== null)
327
+ return { status: 'pending', request, advancedTo };
328
+ return { status: 'approved', request };
329
+ }
330
+ /**
331
+ * Mark a satisfied step approved and move the request on — the half of a decision that is the
332
+ * same whether a person made it or a deadline did.
333
+ *
334
+ * Returns the index it advanced to, or null when there was nothing after it and the request is
335
+ * now approved. Starting the next step's clock here is the point: a deadline is a promise about
336
+ * how long an approver has, and it can only be counted from the moment they could act.
337
+ */
338
+ async settleStep(tx, request, step, now = new Date()) {
264
339
  await tx.update(approvalSteps).set({ status: 'approved' }).where(eq(approvalSteps.id, step.id));
265
340
  const [next] = await tx
266
341
  .select()
267
342
  .from(approvalSteps)
268
- .where(and(eq(approvalSteps.requestId, requestId), eq(approvalSteps.stepIndex, request.currentStep + 1)))
343
+ .where(and(eq(approvalSteps.requestId, request.id), eq(approvalSteps.stepIndex, step.stepIndex + 1)))
269
344
  .limit(1);
270
345
  if (next) {
271
346
  await tx
272
347
  .update(approvalRequests)
273
- .set({ currentStep: request.currentStep + 1, version: sql `${approvalRequests.version} + 1` })
274
- .where(eq(approvalRequests.id, requestId));
275
- return { status: 'pending', request, advancedTo: next.stepIndex };
348
+ .set({ currentStep: next.stepIndex, version: sql `${approvalRequests.version} + 1` })
349
+ .where(eq(approvalRequests.id, request.id));
350
+ // Left alone when the step states no SLA of its own, so a request raised before steps carried
351
+ // `sla_hours` keeps whatever deadline it was given rather than losing it to a null.
352
+ if (next.slaHours)
353
+ await tx
354
+ .update(approvalSteps)
355
+ .set({ dueAt: deadlineFrom(next.slaHours, now) })
356
+ .where(eq(approvalSteps.id, next.id));
357
+ return next.stepIndex;
276
358
  }
277
359
  await tx
278
360
  .update(approvalRequests)
279
- .set({ status: 'approved', decidedAt: new Date(), version: sql `${approvalRequests.version} + 1` })
280
- .where(eq(approvalRequests.id, requestId));
281
- return { status: 'approved', request };
361
+ .set({ status: 'approved', decidedAt: now, version: sql `${approvalRequests.version} + 1` })
362
+ .where(eq(approvalRequests.id, request.id));
363
+ return null;
282
364
  }
283
- /** Does `actor` hold a live delegation from `from`? */
284
- async mayActFor(tx, workspaceId, actor, from) {
365
+ /**
366
+ * Act on every step whose deadline has passed, and say who has to be told.
367
+ *
368
+ * The chain editor has offered `slaHours` and `onTimeout` since the day it shipped and nothing
369
+ * read either one, so a step with a deadline waited exactly as long as a step without one. This
370
+ * is what makes the three answers mean something:
371
+ *
372
+ * - **remind** — tell the approvers again. Once per deadline: the deadline is reached once, and
373
+ * an hourly job that reminds on every tick is a job an approver mutes.
374
+ * - **escalate** — widen the step to whoever is above its approvers, once, and tell everybody.
375
+ * - **auto_approve** — decide it, attributed to the timeout and never to a person.
376
+ *
377
+ * Nothing here fans out per office, and that is deliberate rather than an oversight: an SLA is an
378
+ * *elapsed duration*, and twenty-four hours is twenty-four hours in Tehran and in New York alike.
379
+ * The per-office fan-out in this module exists for boundaries that are a date in a calendar —
380
+ * "the month has ended" — which is a different question. `auto-clock-out` is the same shape.
381
+ *
382
+ * Idempotence is a column, not a schedule: `timeout_handled_at` is set with the action taken and
383
+ * the query will not look at that step again. The auto-approval has a second guard underneath
384
+ * that one, in the unique index on `(step_id, approver_id)`.
385
+ */
386
+ async sweepTimeouts(tx, workspaceId, now = new Date()) {
387
+ const due = await tx
388
+ .select({ step: approvalSteps, request: approvalRequests })
389
+ .from(approvalSteps)
390
+ .innerJoin(approvalRequests, eq(approvalRequests.id, approvalSteps.requestId))
391
+ .where(and(eq(approvalSteps.workspaceId, workspaceId),
392
+ // The three leading predicates are `hr_approval_steps_due_idx`, in its order.
393
+ eq(approvalSteps.status, 'pending'), isNotNull(approvalSteps.dueAt), lte(approvalSteps.dueAt, now), isNull(approvalSteps.timeoutHandledAt), eq(approvalRequests.status, 'pending'),
394
+ // Only the step the request is actually standing on. A later step of a live request is
395
+ // pending too, and acting on one would decide a signature out of order.
396
+ eq(approvalSteps.stepIndex, approvalRequests.currentStep)))
397
+ .orderBy(asc(approvalSteps.dueAt))
398
+ .limit(SWEEP_BATCH);
399
+ if (!due.length)
400
+ return {
401
+ notices: [],
402
+ touchedRequestIds: [],
403
+ decided: [],
404
+ reminded: 0,
405
+ escalated: 0,
406
+ autoApproved: 0,
407
+ };
408
+ const sweep = {
409
+ notices: [],
410
+ touchedRequestIds: [],
411
+ decided: [],
412
+ reminded: 0,
413
+ escalated: 0,
414
+ autoApproved: 0,
415
+ };
416
+ const touched = new Set();
417
+ /** Notices before their people have been turned into accounts — one lookup for the whole batch. */
418
+ const pending = [];
419
+ for (const { step, request } of due) {
420
+ let action = step.onTimeout ?? 'remind';
421
+ if (action === 'escalate') {
422
+ const above = await this.whoIsAbove(tx, workspaceId, step.approverIds, request.requesterPersonId);
423
+ if (above.length) {
424
+ await tx
425
+ .update(approvalSteps)
426
+ .set({
427
+ approverIds: [...step.approverIds, ...above],
428
+ escalatedAt: now,
429
+ // Escalating must not make the step *harder* to satisfy, and `all` derives what it
430
+ // needs from the length of the array — so widening the set would silently add a
431
+ // signature to collect. The bar is pinned to what it was and the set grows around it.
432
+ mode: step.mode === 'all' ? 'quorum' : step.mode,
433
+ minApprovals: step.mode === 'all' ? step.approverIds.length : step.minApprovals,
434
+ })
435
+ .where(eq(approvalSteps.id, step.id));
436
+ // Everyone on the step, old and new. The people it went over the head of are the ones
437
+ // most owed the sentence, and the ones it landed on cannot act on what they are not told.
438
+ pending.push({
439
+ type: 'hr.approval.escalated',
440
+ request,
441
+ personIds: [...step.approverIds, ...above],
442
+ });
443
+ sweep.escalated++;
444
+ }
445
+ else {
446
+ // The only "who is above" this module has is `employments.manager_person_id`. When it
447
+ // answers nobody there is no hierarchy to escalate into, and inventing one — the office
448
+ // head, whoever holds a permission — would route somebody's leave to a person the
449
+ // workspace never nominated. So the step falls back to the weakest honest action.
450
+ this.kernel.log.warn({ module: 'hr', workspaceId, requestId: request.id, stepId: step.id }, 'approval escalation has nobody above its approvers; reminded instead');
451
+ action = 'remind';
452
+ }
453
+ }
454
+ if (action === 'auto_approve') {
455
+ const [next] = await tx
456
+ .select({ id: approvalSteps.id })
457
+ .from(approvalSteps)
458
+ .where(and(eq(approvalSteps.requestId, request.id), eq(approvalSteps.stepIndex, step.stepIndex + 1)))
459
+ .limit(1);
460
+ const applier = this.appliers[request.subjectType];
461
+ if (!next && !applier) {
462
+ // Approving the last step is what makes the *request* approved, and an approved request
463
+ // whose subject was never applied is worse than a late one: the leave reads approved in
464
+ // the inbox, stays pending on the employee's own screen, and never costs the balance it
465
+ // was granted from. Advancing to a further step has no subject effect at all, so that
466
+ // half needs nothing and still runs.
467
+ this.kernel.log.warn({ module: 'hr', workspaceId, requestId: request.id, subjectType: request.subjectType }, 'auto-approval would complete a request nothing here can apply to its subject; reminded instead');
468
+ action = 'remind';
469
+ }
470
+ else {
471
+ await tx
472
+ .insert(approvalDecisions)
473
+ .values({
474
+ id: uuidv7(),
475
+ workspaceId,
476
+ stepId: step.id,
477
+ approverId: TIMEOUT_APPROVER_ID,
478
+ onBehalfOfId: null,
479
+ decision: 'approve',
480
+ // Left empty on purpose. A comment is what an approver wrote, and a sentence composed
481
+ // here would be English in every locale and indistinguishable from one somebody
482
+ // typed. `source` is the machine-readable half and it is not a sentence.
483
+ comment: null,
484
+ source: 'timeout',
485
+ })
486
+ .onConflictDoNothing({
487
+ target: [approvalDecisions.stepId, approvalDecisions.approverId],
488
+ });
489
+ const advancedTo = await this.settleStep(tx, request, step, now);
490
+ if (advancedTo === null) {
491
+ // In the same transaction as the decision: either the request is approved and its leave
492
+ // is booked, or neither happened.
493
+ await applier?.(tx, workspaceId, request, 'approved');
494
+ sweep.decided.push({
495
+ requestId: request.id,
496
+ subjectType: request.subjectType,
497
+ subjectId: request.subjectId,
498
+ status: 'approved',
499
+ });
500
+ }
501
+ // The requester first: somebody whose leave was granted by a clock running out should
502
+ // hear it from the system rather than notice it.
503
+ pending.push({
504
+ type: 'hr.approval.auto_approved',
505
+ request,
506
+ personIds: [
507
+ ...(request.requesterPersonId ? [request.requesterPersonId] : []),
508
+ ...step.approverIds,
509
+ ],
510
+ });
511
+ sweep.autoApproved++;
512
+ }
513
+ }
514
+ if (action === 'remind') {
515
+ pending.push({ type: 'hr.approval.reminder', request, personIds: step.approverIds });
516
+ sweep.reminded++;
517
+ }
518
+ await tx
519
+ .update(approvalSteps)
520
+ .set({ timeoutHandledAt: now, timeoutAction: action })
521
+ .where(eq(approvalSteps.id, step.id));
522
+ touched.add(request.id);
523
+ }
524
+ sweep.touchedRequestIds = [...touched];
525
+ const everyone = [...new Set(pending.flatMap((p) => p.personIds))];
526
+ const accounts = everyone.length
527
+ ? await tx
528
+ .select({ id: people.id, userId: people.userId })
529
+ .from(people)
530
+ .where(and(eq(people.workspaceId, workspaceId), inArray(people.id, everyone)))
531
+ : [];
532
+ // An employee need not have a Kern account, and one that was removed from the workspace has had
533
+ // the link cleared. Both are "nothing to deliver", not an error.
534
+ const userIdOf = new Map(accounts.filter((a) => a.userId).map((a) => [a.id, a.userId]));
535
+ for (const p of pending) {
536
+ const userIds = [
537
+ ...new Set(p.personIds.map((id) => userIdOf.get(id)).filter((id) => !!id)),
538
+ ];
539
+ if (!userIds.length)
540
+ continue;
541
+ sweep.notices.push({
542
+ type: p.type,
543
+ workspaceId,
544
+ requestId: p.request.id,
545
+ subjectType: p.request.subjectType,
546
+ summary: p.request.summary,
547
+ summaryParams: p.request.summaryParams,
548
+ userIds,
549
+ });
550
+ }
551
+ return sweep;
552
+ }
553
+ /**
554
+ * Whoever is above a step's approvers, for an escalation.
555
+ *
556
+ * Asked of each *approver*, not of the requester: a step may be an office head or a permission
557
+ * holder who is nowhere near the requester's own management line, and "two levels above the
558
+ * person asking" would then escalate to somebody with no connection to the step at all.
559
+ *
560
+ * The requester is removed for the same reason `raise` removes them — nobody approves their own
561
+ * request — and so are people already on the step, so an escalation that resolves to the same
562
+ * people is correctly reported as having nowhere to go.
563
+ */
564
+ async whoIsAbove(tx, workspaceId, approverIds, requesterPersonId) {
565
+ const on = todayIso();
566
+ const above = new Set();
567
+ for (const approverId of approverIds) {
568
+ const manager = await this.managerOf(tx, workspaceId, approverId, on);
569
+ if (manager)
570
+ above.add(manager);
571
+ }
572
+ for (const id of approverIds)
573
+ above.delete(id);
574
+ if (requesterPersonId)
575
+ above.delete(requesterPersonId);
576
+ return [...above];
577
+ }
578
+ /**
579
+ * Send what a sweep produced, **after** its transaction has committed.
580
+ *
581
+ * One failed notification must not cost the decision that caused it, so every call is caught: the
582
+ * decision is in the database either way, and a reminder that did not arrive is a smaller loss
583
+ * than a rollback of the leave it was about. A self-hosted instance with core unreachable from
584
+ * this process gets a warning per notice rather than a failed job.
585
+ */
586
+ async deliverNotices(notices) {
587
+ let sent = 0;
588
+ for (const notice of notices)
589
+ for (const userId of notice.userIds)
590
+ try {
591
+ await this.kernel.call('core.notifications.create', {
592
+ userId,
593
+ workspaceId: notice.workspaceId,
594
+ module: MODULE_ID,
595
+ type: notice.type,
596
+ title: NOTICE_TITLE[notice.type],
597
+ body: notice.summary || null,
598
+ object: null,
599
+ url: '/hr/approvals',
600
+ // The sentence as data, beside the English one above it, so a localised renderer can
601
+ // be added without a second round of notifications.
602
+ data: {
603
+ subjectType: notice.subjectType,
604
+ requestId: notice.requestId,
605
+ params: notice.summaryParams ?? {},
606
+ },
607
+ // One request collapses into one card however many times it is reminded about.
608
+ groupKey: `hr.approval:${notice.requestId}`,
609
+ actorId: null,
610
+ }, this.kernel.system);
611
+ sent++;
612
+ }
613
+ catch (err) {
614
+ this.kernel.log.warn({
615
+ module: 'hr',
616
+ workspaceId: notice.workspaceId,
617
+ requestId: notice.requestId,
618
+ err: err.message,
619
+ }, 'approval notification not delivered');
620
+ }
621
+ return sent;
622
+ }
623
+ /**
624
+ * Does `actor` hold a live delegation from `from`, **for this kind of thing**?
625
+ *
626
+ * `subjectType` is the half that was missing, and leaving it out granted more than its author
627
+ * did: `Delegation.subjectType` is documented as "null delegates every subject type", so a value
628
+ * means one kind and only that kind. Without the predicate somebody handed leave cover for a
629
+ * fortnight could also sign off attendance corrections and, once they exist, overtime and
630
+ * timesheets — never "decide as anybody", since a live delegation from that person is still
631
+ * required, but wider than what was granted, which is the sort of thing an audit finds rather
632
+ * than a user reports.
633
+ */
634
+ async mayActFor(tx, workspaceId, actor, from, subjectType) {
285
635
  const today = todayIso();
286
636
  const [row] = await tx
287
637
  .select({ id: delegations.id })
288
638
  .from(delegations)
289
- .where(and(eq(delegations.workspaceId, workspaceId), eq(delegations.toPersonId, actor), eq(delegations.fromPersonId, from), lte(delegations.startsOn, today), sql `${delegations.endsOn} >= ${today}`))
639
+ .where(and(eq(delegations.workspaceId, workspaceId), eq(delegations.toPersonId, actor), eq(delegations.fromPersonId, from),
640
+ // Null is the wildcard, so it has to be matched explicitly — `eq` on a null column is
641
+ // null, not true, and would refuse exactly the delegations that cover everything.
642
+ or(isNull(delegations.subjectType), eq(delegations.subjectType, subjectType)), lte(delegations.startsOn, today), sql `${delegations.endsOn} >= ${today}`))
290
643
  .limit(1);
291
644
  return !!row;
292
645
  }
@@ -297,14 +650,36 @@ export class ApprovalService {
297
650
  .set({ status: 'cancelled', decidedAt: new Date() })
298
651
  .where(and(eq(approvalRequests.workspaceId, workspaceId), eq(approvalRequests.subjectType, subjectType), eq(approvalRequests.subjectId, subjectId), eq(approvalRequests.status, 'pending')));
299
652
  }
300
- /** Everything waiting on this person, including what they may decide by delegation. */
301
- async inboxFor(tx, workspaceId, personId, includeDecided, limit) {
653
+ /**
654
+ * Everything waiting on this person, including what they may decide by delegation — or, with
655
+ * `status: 'decided'`, everything they have already settled.
656
+ *
657
+ * The two are exclusive. This took a boolean called `includeDecided` and applied *no* status
658
+ * filter when it was true, so the caller's "Decided" tab listed pending requests under a heading
659
+ * saying they had been decided.
660
+ */
661
+ async inboxFor(tx, workspaceId, personId, status, limit) {
302
662
  const today = todayIso();
303
663
  const delegated = await tx
304
- .select({ fromPersonId: delegations.fromPersonId })
664
+ .select({ fromPersonId: delegations.fromPersonId, subjectType: delegations.subjectType })
305
665
  .from(delegations)
306
666
  .where(and(eq(delegations.workspaceId, workspaceId), eq(delegations.toPersonId, personId), lte(delegations.startsOn, today), sql `${delegations.endsOn} >= ${today}`));
307
667
  const actingFor = [personId, ...delegated.map((d) => d.fromPersonId)];
668
+ /**
669
+ * What each delegator handed over. `null` in the set is the wildcard.
670
+ *
671
+ * One person may delegate twice with different scopes, so this is a set per delegator rather
672
+ * than a single value — taking the last row would silently drop the other grant.
673
+ */
674
+ const scopeOf = new Map();
675
+ for (const d of delegated) {
676
+ const set = scopeOf.get(d.fromPersonId) ?? new Set();
677
+ set.add(d.subjectType);
678
+ scopeOf.set(d.fromPersonId, set);
679
+ }
680
+ const mayDecide = (approverIds, subjectType) => approverIds.some((id) => id === personId ||
681
+ scopeOf.get(id)?.has(null) === true ||
682
+ scopeOf.get(id)?.has(subjectType) === true);
308
683
  // The overlap goes through `arrayOverlaps`, which binds the ids as one `uuid[]` parameter. The
309
684
  // hand-built `ARRAY['…','…']::uuid[]` it replaces pasted values straight into the statement —
310
685
  // they come from this module's own rows, so nothing could be injected through it, but a query
@@ -314,22 +689,49 @@ export class ApprovalService {
314
689
  // an array overlap, so this — the query every manager triggers on every page load — was a
315
690
  // sequential scan over a table that only ever grows. Only `requestId` is read, so only
316
691
  // `requestId` is selected; the rest of the step is fetched by the detail view.
692
+ // `approverIds` comes back too, because a delegation may be narrower than the person who
693
+ // granted it: which of these steps this reader may actually act on depends on the *request's*
694
+ // subject type, which is not known until the requests below are read.
317
695
  const steps = await tx
318
- .select({ requestId: approvalSteps.requestId })
696
+ .select({ requestId: approvalSteps.requestId, approverIds: approvalSteps.approverIds })
319
697
  .from(approvalSteps)
320
698
  .where(and(eq(approvalSteps.workspaceId, workspaceId), arrayOverlaps(approvalSteps.approverIds, actingFor)));
321
699
  if (!steps.length)
322
700
  return [];
323
- const requestIds = [...new Set(steps.map((s) => s.requestId))];
701
+ const approversOf = new Map();
702
+ for (const s of steps)
703
+ approversOf.set(s.requestId, [...(approversOf.get(s.requestId) ?? []), ...s.approverIds]);
704
+ const requestIds = [...approversOf.keys()];
324
705
  const where = [eq(approvalRequests.workspaceId, workspaceId), inArray(approvalRequests.id, requestIds)];
325
- if (!includeDecided)
326
- where.push(eq(approvalRequests.status, 'pending'));
327
- return tx
706
+ where.push(status === 'pending' ? eq(approvalRequests.status, 'pending') : ne(approvalRequests.status, 'pending'));
707
+ const rows = await tx
328
708
  .select()
329
709
  .from(approvalRequests)
330
710
  .where(and(...where))
331
711
  .orderBy(desc(approvalRequests.requestedAt))
332
712
  .limit(limit);
713
+ // The scope check lands here rather than in SQL because it is a per-row question about two
714
+ // tables. It can return fewer than `limit` — acceptable while this endpoint answers
715
+ // `nextCursor: null` and never pages; if it ever does, the filter has to move into the query
716
+ // or the page will look empty while rows remain.
717
+ return rows.filter((r) => mayDecide(approversOf.get(r.id) ?? [], r.subjectType));
333
718
  }
334
719
  }
720
+ /**
721
+ * How many approvals satisfy a step.
722
+ *
723
+ * `all` derives it from the array rather than from `minApprovals`, which is why an escalation that
724
+ * widens the array has to pin the number first — see `sweepTimeouts`.
725
+ */
726
+ function requiredApprovals(step) {
727
+ if (step.mode === 'all')
728
+ return step.approverIds.length;
729
+ if (step.mode === 'any')
730
+ return 1;
731
+ return step.minApprovals;
732
+ }
733
+ /** When a step that starts now runs out of time, or null when it never does. */
734
+ function deadlineFrom(slaHours, from = new Date()) {
735
+ return slaHours ? new Date(from.getTime() + slaHours * 3600_000) : null;
736
+ }
335
737
  //# sourceMappingURL=approvals.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"approvals.js","sourceRoot":"","sources":["../../../src/server/services/approvals.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"approvals.js","sourceRoot":"","sources":["../../../src/server/services/approvals.ts"],"names":[],"mappings":"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"}