@feedmepos/mf-hrm-portal 2.2.5-dev.9 → 2.3.0-dev

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 (116) hide show
  1. package/dist/{ApprovalCodeList-D5l9vIsE.js → ApprovalCodeList-cG0zmQVJ.js} +5 -5
  2. package/dist/{AuditLogList-ByTa5UJY.js → AuditLogList-BTifJhO1.js} +4 -4
  3. package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-mNdn1TYV.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-qr5TwLTK.js} +2 -2
  4. package/dist/{EmployeeList-Bv6ANk-P.js → EmployeeList-DzcMtxJ3.js} +6 -6
  5. package/dist/{GrantUserList-Bt8w3p4j.js → GrantUserList-D5b7tJ8Y.js} +6 -6
  6. package/dist/{Main-DqiGpT4v.js → Main-B2r59IOW.js} +5 -5
  7. package/dist/{Main-DHJcgePj.js → Main-DFwdAWqn.js} +8 -8
  8. package/dist/{Main-DkP8dWgn.js → Main-DkLBemi7.js} +11 -11
  9. package/dist/{PermissionSetList-BIGv1u67.js → PermissionSetList-B80hrfMW.js} +7 -7
  10. package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-DjNcJQM9.js +4167 -0
  11. package/dist/{PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-XHuHin8t.js → PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-fe-Rdwn4.js} +1 -1
  12. package/dist/{RoleList-CH6NDKPU.js → RoleList-DHO4JRKF.js} +9 -9
  13. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-B-XtB64L.js +452 -0
  14. package/dist/ScheduleGeneralPage-WlBM8bxV.js +629 -0
  15. package/dist/SchedulePage-Nm0krGVU.js +17056 -0
  16. package/dist/SchedulePositionPage-C0hrO11d.js +263 -0
  17. package/dist/ScheduleSelect.vue_vue_type_script_setup_true_lang-DTDXir_7.js +1150 -0
  18. package/dist/{TeamMemberList-BwfG3go2.js → TeamMemberList-CgFWLRBM.js} +10 -10
  19. package/dist/{TimesheetList-DcoqzbLO.js → TimesheetList-Dp40G-0I.js} +7 -7
  20. package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-RyhiKTSd.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-BFjrMhUG.js} +3 -3
  21. package/dist/{app-BcZ6C8M8.js → app-CmBSTvaI.js} +851 -739
  22. package/dist/app.js +1 -1
  23. package/dist/{approval-code-jIjkeVEb.js → approval-code-C9DmR4Md.js} +1 -1
  24. package/dist/{dayjs.min-Ch0iysTG.js → dayjs.min-CfL2DQ3d.js} +1 -1
  25. package/dist/{employee-DwYHFacQ.js → employee-DQcHjoij.js} +4 -4
  26. package/dist/{grant-user-SNiDV22U.js → grant-user-Bv-pJ9Wt.js} +1 -1
  27. package/dist/{iteration-D1uWLp0V.js → iteration-BlavheWG.js} +1 -1
  28. package/dist/{lodash-DErxm7xf.js → lodash-QerqayrJ.js} +1 -1
  29. package/dist/{restaurant-BTpBmfBV.js → restaurant-D7PEQjPY.js} +257 -251
  30. package/dist/{role-B9VanAny.js → role-RM2YLO7n.js} +2 -2
  31. package/dist/{rule-C4f_Ilzr.js → rule-DjlvYIuP.js} +3 -3
  32. package/dist/src/api/restaurant/index.d.ts +2 -0
  33. package/dist/src/api/schedule/index.d.ts +12 -2
  34. package/dist/src/composables/useMessage.d.ts +8 -2
  35. package/dist/src/types/schedule.d.ts +10 -218
  36. package/dist/src/views/scheduling/components/ScheduleAddEmployeeModal.vue.d.ts +2 -0
  37. package/dist/src/views/scheduling/components/ScheduleAreaRows.vue.d.ts +11 -0
  38. package/dist/src/views/scheduling/components/ScheduleAutoScheduleDetailsModal.vue.d.ts +6 -0
  39. package/dist/src/views/scheduling/components/ScheduleCloneOutletModal.vue.d.ts +6 -0
  40. package/dist/src/views/scheduling/components/{ScheduleLegendBar.vue.d.ts → ScheduleCoach.vue.d.ts} +2 -2
  41. package/dist/src/views/scheduling/components/ScheduleConfirmModal.vue.d.ts +9 -1
  42. package/dist/src/views/scheduling/components/ScheduleCostRailEmptyArt.vue.d.ts +2 -0
  43. package/dist/src/views/scheduling/components/ScheduleExportDoneDialog.vue.d.ts +6 -0
  44. package/dist/src/views/scheduling/components/ScheduleLeaveEditModal.vue.d.ts +0 -2
  45. package/dist/src/views/scheduling/components/ScheduleOnboardingComplete.vue.d.ts +10 -0
  46. package/dist/src/views/scheduling/components/ScheduleOnboardingDoneArt.vue.d.ts +2 -0
  47. package/dist/src/views/scheduling/components/ScheduleOnboardingWelcome.vue.d.ts +1 -2
  48. package/dist/src/views/scheduling/components/ScheduleShiftCardMenu.vue.d.ts +2 -2
  49. package/dist/src/views/scheduling/components/ScheduleShiftCell.vue.d.ts +6 -6
  50. package/dist/src/views/scheduling/components/ScheduleShiftMoreOptions.vue.d.ts +2 -0
  51. package/dist/src/views/scheduling/components/ScheduleStaffRail.vue.d.ts +0 -2
  52. package/dist/src/views/scheduling/components/ScheduleStaffRows.vue.d.ts +6 -6
  53. package/dist/src/views/scheduling/components/ScheduleTourAllSet.vue.d.ts +6 -0
  54. package/dist/src/views/scheduling/composables/auto-schedule-mapping.d.ts +33 -0
  55. package/dist/src/views/scheduling/composables/onboarding-constants.d.ts +5 -0
  56. package/dist/src/views/scheduling/composables/onboarding-hours.d.ts +7 -0
  57. package/dist/src/views/scheduling/composables/onboarding-types.d.ts +50 -0
  58. package/dist/src/views/scheduling/composables/schedule-add-employee-form.d.ts +8 -2
  59. package/dist/src/views/scheduling/composables/schedule-board-helpers.d.ts +22 -1
  60. package/dist/src/views/scheduling/composables/schedule-breaks.d.ts +3 -0
  61. package/dist/src/views/scheduling/composables/schedule-day-meta.d.ts +2 -8
  62. package/dist/src/views/scheduling/composables/schedule-shift-time.d.ts +12 -0
  63. package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +11 -8
  64. package/dist/src/views/scheduling/composables/useScheduleAddPick.d.ts +10 -2
  65. package/dist/src/views/scheduling/composables/useScheduleAreaBoard.d.ts +13 -0
  66. package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +158 -12
  67. package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +110 -13
  68. package/dist/src/views/scheduling/composables/useScheduleClashDetection.d.ts +11 -1
  69. package/dist/src/views/scheduling/composables/useScheduleCloneOutletModal.d.ts +19 -0
  70. package/dist/src/views/scheduling/composables/useScheduleCoach.d.ts +80 -0
  71. package/dist/src/views/scheduling/composables/useScheduleDayNote.d.ts +0 -3
  72. package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +24 -1
  73. package/dist/src/views/scheduling/composables/useScheduleDemandRow.d.ts +4 -2
  74. package/dist/src/views/scheduling/composables/useScheduleDragDrop.d.ts +33 -1
  75. package/dist/src/views/scheduling/composables/useScheduleExport.d.ts +17 -0
  76. package/dist/src/views/scheduling/composables/useScheduleGapPopover.d.ts +1 -3
  77. package/dist/src/views/scheduling/composables/useScheduleLeave.d.ts +20 -31
  78. package/dist/src/views/scheduling/composables/useScheduleOnboardingFlow.d.ts +9 -0
  79. package/dist/src/views/scheduling/composables/useScheduleOnboardingPersistence.d.ts +13 -0
  80. package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +327 -75
  81. package/dist/src/views/scheduling/composables/useScheduleOutlet.d.ts +5 -3
  82. package/dist/src/views/scheduling/composables/useSchedulePageBootstrap.d.ts +9 -0
  83. package/dist/src/views/scheduling/composables/useSchedulePageClearActions.d.ts +20 -0
  84. package/dist/src/views/scheduling/composables/useSchedulePageOverlays.d.ts +18 -0
  85. package/dist/src/views/scheduling/composables/useSchedulePositionModal.d.ts +2 -0
  86. package/dist/src/views/scheduling/composables/useSchedulePositions.d.ts +0 -5
  87. package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +25 -0
  88. package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +53 -1
  89. package/dist/src/views/scheduling/composables/useScheduleSettings.d.ts +7 -4
  90. package/dist/src/views/scheduling/composables/useScheduleSetupBanner.d.ts +8 -9
  91. package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +63 -92
  92. package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +30 -2
  93. package/dist/src/views/scheduling/composables/useScheduleStaffRail.d.ts +5 -11
  94. package/dist/src/views/scheduling/composables/useScheduleStatsRow.d.ts +0 -1
  95. package/dist/src/views/scheduling/composables/useScheduleTopbar.d.ts +4 -4
  96. package/dist/src/views/scheduling/composables/useScheduleTour.d.ts +93 -0
  97. package/dist/src/views/scheduling/data.d.ts +6 -19
  98. package/dist/src/views/scheduling/locales/index.d.ts +116 -4
  99. package/dist/src/views/scheduling/schedule-state.d.ts +679 -0
  100. package/dist/src/views/scheduling/schedule-store.d.ts +16 -60
  101. package/dist/src/views/scheduling/types.d.ts +29 -2
  102. package/dist/style.css +1 -1
  103. package/dist/tsconfig.app.tsbuildinfo +1 -1
  104. package/dist/{useAppStore-DCwd8GWN.js → useAppStore-d_nHyK5u.js} +1 -1
  105. package/dist/{useLoading-CXzTpIVv.js → useLoading-JFoghhRz.js} +1 -1
  106. package/dist/{useReportPermissions-CTr56kBo.js → useReportPermissions-Bl6Br79r.js} +3 -3
  107. package/package.json +3 -2
  108. package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-niywl_DX.js +0 -4167
  109. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-T1ACkX_6.js +0 -426
  110. package/dist/ScheduleButton.vue_vue_type_script_setup_true_lang-BzQuLLf5.js +0 -690
  111. package/dist/ScheduleGeneralPage-DJPENJZ2.js +0 -320
  112. package/dist/SchedulePage-C1egcbIC.js +0 -14421
  113. package/dist/SchedulePositionPage-OhL_hsqG.js +0 -293
  114. package/dist/ScheduleSelect.vue_vue_type_script_setup_true_lang-B8W4sTsA.js +0 -242
  115. package/dist/src/views/scheduling/composables/scheduleAutoSolver.d.ts +0 -21
  116. package/dist/src/views/scheduling/composables/useScheduleLegendBar.d.ts +0 -35
@@ -1,53 +1,10 @@
1
1
  import type { IFdtoPosUserSummary } from '@/types/employee';
2
- import type { FdtoScheduleAssignment, FdtoScheduleAutoScheduleReq, FdtoScheduleAutoScheduleResult, FdtoScheduleBoard, FdtoScheduleBulkUpdateAssignmentStatusReq, FdtoScheduleCreateEmployeeProfileReq, FdtoScheduleSaveAssignmentReq, FdtoScheduleSavePositionReq, FdtoScheduleSaveScheduleDayReq, FdtoScheduleUpdateEmployeeProfileReq, ScheduleReplaceDemandReq } from '@/types/schedule';
2
+ import type { FdtoScheduleAssignment, FdtoScheduleAutoScheduleApplyReq, FdtoScheduleAutoScheduleApplyResult, FdtoScheduleAutoScheduleCapabilities, FdtoScheduleAutoScheduleGenerateReq, FdtoScheduleAutoScheduleResult, FdtoScheduleBulkUpdateAssignmentStatusReq, FdtoScheduleCreateEmployeeProfileReq, FdtoScheduleSaveAssignmentReq, FdtoScheduleSavePositionReq, FdtoScheduleSaveScheduleDayReq, FdtoScheduleUpdateEmployeeProfileReq, FdtoScheduleCreateTimeOffReq, FdtoScheduleTimeOff, FdtoScheduleUpdateTimeOffStatusReq, FdtoScheduleSaveEmployeeConfigsReq, ScheduleReplaceDemandReq } from '@/types/schedule';
3
+ export { businessEmployees, dataVersion, employeeOutletIds, loadError, loading, outletId, payload, restaurantEmployees, employeeConfigs, rosterLoading, scheduleSetupCompleted, } from './schedule-state';
3
4
  /** dayjs-free local-date key — the board's own isoDateKey, repeated here so the store does not
4
5
  * have to import a composable. Local Y/M/D, never UTC: a BSON-free 'YYYY-MM-DD' that survives
5
6
  * a timezone west of Greenwich. */
6
7
  export declare function isoDate(d: Date): string;
7
- export declare const payload: import("vue").ShallowRef<FdtoScheduleBoard | null, FdtoScheduleBoard | null>;
8
- export declare const loading: import("vue").Ref<boolean, boolean>;
9
- /** The POS roster (who the board's rows are) is fetched separately from the board window. */
10
- export declare const rosterLoading: import("vue").Ref<boolean, boolean>;
11
- export declare const loadError: import("vue").Ref<string | null, string | null>;
12
- /** Whether this outlet has finished setting up scheduling (onboarding). The schedule settings
13
- * will carry this, but the backend has no such field yet, so it is a plain flag that defaults to
14
- * "not finished" — the setup banner keys off it. TODO: when the field exists, set it from the
15
- * settings payload where `payload` is applied (and flip it when the onboarding wizard finishes);
16
- * nothing else needs to change. */
17
- export declare const scheduleSetupCompleted: import("vue").Ref<boolean, boolean>;
18
- /** Bumped every time `payload` is replaced. Anything that caches a derived view of the data
19
- * — the board's per-week buckets above all — watches this and rebuilds. */
20
- export declare const dataVersion: import("vue").Ref<number, number>;
21
- /** The outlet the board is reading. A ref rather than a plain variable so the picker's label
22
- * follows a switch immediately, without waiting for the new outlet's payload to land. */
23
- export declare const outletId: import("vue").Ref<string, string>;
24
- /** Who actually works this outlet, per the POS roster (`restaurantRole` on the pos-user
25
- * record) — the board's roster is everyone here, not everyone with a Schedule EmployeeProfile.
26
- * A profile stays business-wide scheduling settings for a person (pay/positions/availability);
27
- * it no longer decides who shows up at all, only what shows once they do. */
28
- export declare const restaurantEmployees: import("vue").Ref<{
29
- _id: string;
30
- name: string;
31
- code?: string | undefined;
32
- passcode: string;
33
- isMasterUser: boolean;
34
- isRestricted: boolean;
35
- restaurantRole: {
36
- restaurantId: string;
37
- roleId: string;
38
- }[];
39
- }[], IFdtoPosUserSummary[] | {
40
- _id: string;
41
- name: string;
42
- code?: string | undefined;
43
- passcode: string;
44
- isMasterUser: boolean;
45
- isRestricted: boolean;
46
- restaurantRole: {
47
- restaurantId: string;
48
- roleId: string;
49
- }[];
50
- }[]>;
51
8
  /** Points the board at an outlet. Switching throws the held window away rather than widening
52
9
  * it — two outlets' rosters are not one dataset, and half of each is not a schedule.
53
10
  *
@@ -61,25 +18,21 @@ export declare function setOutlet(restaurantId: string): boolean;
61
18
  * separate invalidation path. A generous page size rather than looping pages: real restaurant
62
19
  * headcounts sit nowhere near it. */
63
20
  export declare function ensureRestaurantEmployeesLoaded(restaurantId: string): Promise<void>;
21
+ export declare function saveEmployeeConfigs(configs: FdtoScheduleSaveEmployeeConfigsReq['configs']): Promise<void>;
22
+ export declare function setEmployeeSchedulingEnabled(employeeId: string, enabled: boolean): Promise<void>;
64
23
  /** Re-reads this outlet's POS roster. The roster is what the board's rows are built from and is
65
24
  * otherwise fetched once per outlet, so any write that changes who works here (add, remove)
66
25
  * has to call this for the grid to show it. */
67
26
  export declare function refreshRestaurantEmployees(): Promise<void>;
68
27
  /** Gives an existing POS user a role at this outlet, so they land on its roster. */
69
28
  export declare function addEmployeeToOutlet(employeeId: string, roleId: string): Promise<void>;
29
+ /** Adds an employee to several outlets at once. Scheduling does not require a POS role, so the
30
+ * caller may pass an empty role id and assign the POS role later from Employee. */
31
+ export declare function addEmployeeToOutlets(employeeId: string, restaurantIds: string[], roleId?: string): Promise<void>;
70
32
  /** Takes a POS user off the given outlets' rosters; their other outlets are untouched. */
71
33
  export declare function removeEmployeeFromOutlets(employeeId: string, restaurantIds: string[]): Promise<void>;
72
34
  /** Takes a POS user off this outlet's roster only. */
73
35
  export declare function removeEmployeeFromOutlet(employeeId: string): Promise<void>;
74
- /** Every outlet each person works at (POS user id → outlet ids). The roster above is fetched
75
- * FILTERED to one outlet, and a filtered read describes a person by that outlet alone, so the
76
- * full list has to come from an unfiltered read. Paged until the total is covered. A failure
77
- * leaves the map empty rather than failing the board: locations are display-only here. */
78
- export declare const employeeOutletIds: import("vue").ShallowRef<Record<string, string[]>, Record<string, string[]>>;
79
- /** Everyone in the business (POS user summaries: name, passcode, outlet roles), kept once and
80
- * shared by the locations map, "select existing employee", passcode prefill and the role edits —
81
- * the plain `/pos-users` read they used before returns every user-outlet row in one slow call. */
82
- export declare const businessEmployees: import("vue").ShallowRef<IFdtoPosUserSummary[], IFdtoPosUserSummary[]>;
83
36
  /** The cached business roster, fetched on first use. `force` re-reads it (after a write, or to
84
37
  * refresh a list that is already on screen). Concurrent callers share one request. */
85
38
  export declare function ensureBusinessEmployees(force?: boolean): Promise<IFdtoPosUserSummary[]>;
@@ -101,11 +54,9 @@ export declare function reload(): Promise<void>;
101
54
  export declare function createEmployeeProfile(req: FdtoScheduleCreateEmployeeProfileReq): Promise<void>;
102
55
  /** Edits a profile already on this outlet's schedule. The caller (useScheduleAddEmployee's
103
56
  * `updateExisting`) applies the form to the live `Employee` object itself for instant feedback,
104
- * so this does not bump `dataVersion` — nothing needs a re-derive right now. It still patches
105
- * the entry inside `payload.value.employees` in place, though: that raw array is what the NEXT
106
- * re-derive (the next employee added, the next outlet reload) rebuilds every `Employee` from,
107
- * and a stale entry there would silently revert this edit the moment something else triggers
108
- * one, exactly the trap `createEmployeeProfile` above avoids by pushing onto the same array. */
57
+ * so this does not bump `dataVersion` — nothing needs a board cache rebuild. The raw payload is
58
+ * still replaced immutably so other views, such as the position usage counter, observe the
59
+ * profile change immediately instead of waiting for the next full board reload. */
109
60
  export declare function updateEmployeeProfile(employeeId: string, req: FdtoScheduleUpdateEmployeeProfileReq): Promise<void>;
110
61
  /** Positions are business-level, not per-outlet (see `ScheduleAPI.createPosition`'s own note)
111
62
  * — so unlike the shift-shaped writes below, there's no "discards an unsaved shift" risk in
@@ -134,7 +85,9 @@ export declare function saveDemand(req: ScheduleReplaceDemandReq): Promise<void>
134
85
  * week, so repeating it per date would only shadow later edits to the rule. Returns how many rows
135
86
  * were written. */
136
87
  export declare function copyDateDemand(fromDate: string, toDate: string): Promise<number>;
137
- export declare function generateAutoSchedule(req: FdtoScheduleAutoScheduleReq): Promise<FdtoScheduleAutoScheduleResult>;
88
+ export declare function generateAutoSchedule(req: FdtoScheduleAutoScheduleGenerateReq): Promise<FdtoScheduleAutoScheduleResult>;
89
+ export declare function getAutoScheduleCapabilities(): Promise<FdtoScheduleAutoScheduleCapabilities>;
90
+ export declare function applyAutoSchedule(req: FdtoScheduleAutoScheduleApplyReq): Promise<FdtoScheduleAutoScheduleApplyResult>;
138
91
  /** A one-off shift assignment — someone working these hours on this date, not answering any
139
92
  * Shift requirement. Deliberately does not reload: unlike `createEmployeeProfile` above, there
140
93
  * is nothing here a reload could bring back that the caller doesn't already have — `commitShift`
@@ -146,6 +99,9 @@ export declare function updateAssignment(id: string, req: FdtoScheduleSaveAssign
146
99
  /** Deletes a batch of existing assignments in a single request — see
147
100
  * `ScheduleAPI.deleteAssignments`. Deleting one is just this with a single-id array. */
148
101
  export declare function deleteAssignments(ids: string[]): Promise<void>;
102
+ export declare function createTimeOff(req: FdtoScheduleCreateTimeOffReq): Promise<FdtoScheduleTimeOff>;
103
+ export declare function updateTimeOffStatus(id: string, req: FdtoScheduleUpdateTimeOffStatusReq): Promise<FdtoScheduleTimeOff | null>;
104
+ export declare function deleteTimeOff(id: string): Promise<void>;
149
105
  /** Flips a batch of existing assignments to one status in a single request — see
150
106
  * `ScheduleAPI.bulkUpdateAssignmentStatus`. */
151
107
  export declare function bulkUpdateAssignmentStatus(req: FdtoScheduleBulkUpdateAssignmentStatusReq): Promise<FdtoScheduleAssignment[]>;
@@ -18,11 +18,31 @@ export interface WorkSlot {
18
18
  * subtracted by the cost rail / stats row's hour totals — those stay gross-hours,
19
19
  * matching how this board priced shifts before the popover surfaced a break field. */
20
20
  breakMins?: number;
21
- /** The ShiftAssignments document this slot is saved as, once it has one — see
21
+ /** Breaks as persisted by ScheduleShiftAssignments. `breakMins` remains a derived board calculation
22
+ * value; API writes use only this array. */
23
+ breaks?: Array<{
24
+ type: 'DURATION';
25
+ minutes: number;
26
+ breakPayType: 'PAID' | 'UNPAID';
27
+ } | {
28
+ type: 'TIME_RANGE';
29
+ startTime: string;
30
+ endTime: string;
31
+ breakPayType: 'PAID' | 'UNPAID';
32
+ }>;
33
+ /** The ScheduleShiftAssignments document this slot is saved as, once it has one — see
22
34
  * useScheduleBoard's commitShift/removeShift/moveShift. Absent means either it hasn't
23
35
  * round-tripped to the backend yet, or it's an OpenShift fill (see openId), which has its
24
36
  * own record shape and no write path of its own yet. */
25
37
  assignmentId?: string;
38
+ /** Client-only — never sent to the backend (there's no linking field in
39
+ * FdtoScheduleAssignment to persist it against). Shared by every period of ONE shift
40
+ * authored through the popover's "+ Split", set there and nowhere else. Two workslots on
41
+ * the same day with no matching `splitGroupId` are two independent shifts, not one split
42
+ * shift — e.g. a day where a swap landed a second shift alongside one the person already
43
+ * had. Lost on reload, which is the safe direction to fail in: an unrecognised pair just
44
+ * reads as two separate shifts rather than a false merge. */
45
+ splitGroupId?: string;
26
46
  }
27
47
  export interface LeaveBalance {
28
48
  type: string;
@@ -31,10 +51,13 @@ export interface LeaveBalance {
31
51
  }
32
52
  export interface LeaveSlot {
33
53
  timeOff: 'approved' | 'pending';
54
+ requestId?: string;
55
+ type?: 'OFF_DAY' | 'LEAVE';
56
+ leaveType?: 'ANNUAL' | 'MEDICAL' | 'EMERGENCY' | 'UNPAID';
34
57
  reason: string;
35
58
  half?: boolean;
36
59
  halfPart?: 'AM' | 'PM';
37
- /** Specific hours (HH:MM), for leave that is neither all day nor a morning / afternoon. */
60
+ /** Half-day leave's displayed time window, when supplied by the board data. */
38
61
  from?: string;
39
62
  to?: string;
40
63
  appliedOn?: string;
@@ -63,6 +86,7 @@ export interface EmployeeAvailHours {
63
86
  export interface Employee {
64
87
  id: number;
65
88
  name: string;
89
+ employmentType: 'FULLTIME' | 'PARTTIME';
66
90
  role: string;
67
91
  initials: string;
68
92
  color: string;
@@ -313,6 +337,9 @@ export interface Proposal {
313
337
  start: string;
314
338
  end: string;
315
339
  role: string;
340
+ /** The position backing `role`, when the auto-schedule result named one. `null`/absent means
341
+ * any position (an unnamed need). */
342
+ positionId?: string | null;
316
343
  /** Set when this proposal would fill a named OpenShift record. */
317
344
  openId?: number;
318
345
  status: 'pending' | 'rejected';