@feedmepos/mf-hrm-portal 2.2.5-dev.4 → 2.2.5-dev.5

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 (152) hide show
  1. package/dist/{ApprovalCodeList-D0B_X3Sf.js → ApprovalCodeList-DqR6ouRS.js} +4 -4
  2. package/dist/{AuditLogList-D9anf4YQ.js → AuditLogList-CG2BiQX6.js} +17 -18
  3. package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-4oENMRO3.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-C7nMXx8R.js} +2 -2
  4. package/dist/{EmployeeList-DREDu3Ou.js → EmployeeList-CGZzol7v.js} +27 -29
  5. package/dist/{FormItem.vue_vue_type_script_setup_true_lang-CUnlKsxk.js → FormItem.vue_vue_type_script_setup_true_lang-DPT2FoIc.js} +1 -1
  6. package/dist/{GrantUserList-CLDshEN9.js → GrantUserList-D1fBv1KQ.js} +5 -5
  7. package/dist/{Main-lqlb8tPw.js → Main-BOt-Y1wv.js} +9 -9
  8. package/dist/{Main-QhQxU593.js → Main-CFoZot3K.js} +5 -5
  9. package/dist/{Main-DtMaG42L.js → Main-zg7fbEtx.js} +2 -2
  10. package/dist/{PermissionSetList-BK8yBpJJ.js → PermissionSetList-bJpwD62u.js} +10 -11
  11. package/dist/{PortalPermissionEditor.vue_vue_type_script_setup_true_lang-uSdvH81B.js → PortalPermissionEditor.vue_vue_type_script_setup_true_lang-C4C8Cvf4.js} +911 -912
  12. package/dist/{RoleList-D6AX6BqB.js → RoleList-DUVZ7dkO.js} +7 -7
  13. package/dist/SelectFilter-ATOm0hdn.js +269 -0
  14. package/dist/{TeamMemberList-BM5JoR6J.js → TeamMemberList-DAnM-DSd.js} +34 -36
  15. package/dist/{TimesheetList-Ch_f_PD5.js → TimesheetList-5sdcWjEf.js} +53 -54
  16. package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-CxqxqwyD.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-GhPw_mCW.js} +2 -2
  17. package/dist/{app-tDHL6k4G.js → app-D-cQzgkr.js} +2299 -2884
  18. package/dist/app.js +1 -1
  19. package/dist/{dayjs.min-B_XWc0Hu.js → dayjs.min-DqFS0ebn.js} +1 -1
  20. package/dist/employee-DvvnCQMK.js +204 -0
  21. package/dist/{index-jxRluZiW.js → iteration-BjW8Cs9e.js} +726 -698
  22. package/dist/{lodash-D5vM3paU.js → lodash-wjhSWqez.js} +1 -1
  23. package/dist/{role-7ccipEEe.js → role-CEUcSmA6.js} +3 -4
  24. package/dist/{rule-7faruCdz.js → rule-Df8LOhxm.js} +70 -71
  25. package/dist/src/router/shared.d.ts +1 -4
  26. package/dist/src/views/team/components/PortalConditionForm.vue.d.ts +2 -2
  27. package/dist/src/views/team/condition-builders/ConditionBuilderForm.vue.d.ts +2 -2
  28. package/dist/style.css +1 -1
  29. package/dist/tsconfig.app.tsbuildinfo +1 -1
  30. package/dist/{useReportPermissions-FieO4EAD.js → useReportPermissions-4wm7pJcK.js} +3 -3
  31. package/package.json +1 -1
  32. package/dist/ScheduleGeneralPage-DAECTCDu.js +0 -242
  33. package/dist/SchedulePage-CdFR7JuO.js +0 -10751
  34. package/dist/SchedulePositionPage-DTtKg0sx.js +0 -220
  35. package/dist/ScheduleSelect.vue_vue_type_script_setup_true_lang-BiuUrr50.js +0 -199
  36. package/dist/SelectFilter-CG13h83-.js +0 -264
  37. package/dist/_plugin-vue_export-helper-CHgC5LLL.js +0 -9
  38. package/dist/employee-Bs_2vqBY.js +0 -139
  39. package/dist/index-Cz2b95YF.js +0 -70
  40. package/dist/iteration-CcXrOMQe.js +0 -30
  41. package/dist/src/api/schedule/index.d.ts +0 -44
  42. package/dist/src/components/layout/AppSidebar.vue.d.ts +0 -2
  43. package/dist/src/components/layout/PortalShell.vue.d.ts +0 -12
  44. package/dist/src/components/layout/withShell.d.ts +0 -14
  45. package/dist/src/types/schedule.d.ts +0 -232
  46. package/dist/src/views/scheduling/ScheduleGeneralPage.vue.d.ts +0 -4
  47. package/dist/src/views/scheduling/SchedulePage.vue.d.ts +0 -4
  48. package/dist/src/views/scheduling/SchedulePositionPage.vue.d.ts +0 -4
  49. package/dist/src/views/scheduling/components/ScheduleAddEmployeeIdentitySection.vue.d.ts +0 -6
  50. package/dist/src/views/scheduling/components/ScheduleAddEmployeeModal.vue.d.ts +0 -6
  51. package/dist/src/views/scheduling/components/ScheduleAddEmployeeModeStep.vue.d.ts +0 -6
  52. package/dist/src/views/scheduling/components/ScheduleAddEmployeePosAccessSection.vue.d.ts +0 -6
  53. package/dist/src/views/scheduling/components/ScheduleAddEmployeePositionsSection.vue.d.ts +0 -6
  54. package/dist/src/views/scheduling/components/ScheduleAddEmployeeSchedulingSection.vue.d.ts +0 -6
  55. package/dist/src/views/scheduling/components/ScheduleAddPickPopover.vue.d.ts +0 -6
  56. package/dist/src/views/scheduling/components/ScheduleAllShiftsRow.vue.d.ts +0 -22
  57. package/dist/src/views/scheduling/components/ScheduleAreaRows.vue.d.ts +0 -34
  58. package/dist/src/views/scheduling/components/ScheduleAssignEmployeePopover.vue.d.ts +0 -6
  59. package/dist/src/views/scheduling/components/ScheduleAutoScheduleModal.vue.d.ts +0 -6
  60. package/dist/src/views/scheduling/components/ScheduleChangeEmployeeModal.vue.d.ts +0 -8
  61. package/dist/src/views/scheduling/components/ScheduleConfirmModal.vue.d.ts +0 -24
  62. package/dist/src/views/scheduling/components/ScheduleCostRail.vue.d.ts +0 -8
  63. package/dist/src/views/scheduling/components/ScheduleDateRangePopover.vue.d.ts +0 -6
  64. package/dist/src/views/scheduling/components/ScheduleDayNotePopover.vue.d.ts +0 -6
  65. package/dist/src/views/scheduling/components/ScheduleDayTimeline.vue.d.ts +0 -12
  66. package/dist/src/views/scheduling/components/ScheduleDemandRow.vue.d.ts +0 -23
  67. package/dist/src/views/scheduling/components/ScheduleDemandSheet.vue.d.ts +0 -10
  68. package/dist/src/views/scheduling/components/ScheduleDotsIcon.vue.d.ts +0 -2
  69. package/dist/src/views/scheduling/components/ScheduleEmployeeDetailPanel.vue.d.ts +0 -12
  70. package/dist/src/views/scheduling/components/ScheduleEmployeeIdentity.vue.d.ts +0 -17
  71. package/dist/src/views/scheduling/components/ScheduleFilterBar.vue.d.ts +0 -18
  72. package/dist/src/views/scheduling/components/ScheduleGapPopover.vue.d.ts +0 -6
  73. package/dist/src/views/scheduling/components/ScheduleGridHeader.vue.d.ts +0 -18
  74. package/dist/src/views/scheduling/components/ScheduleLeaveEditModal.vue.d.ts +0 -6
  75. package/dist/src/views/scheduling/components/ScheduleLegendBar.vue.d.ts +0 -6
  76. package/dist/src/views/scheduling/components/ScheduleOnboardingWelcome.vue.d.ts +0 -12
  77. package/dist/src/views/scheduling/components/ScheduleOnboardingWizard.vue.d.ts +0 -6
  78. package/dist/src/views/scheduling/components/ScheduleOpenShiftCardMenu.vue.d.ts +0 -14
  79. package/dist/src/views/scheduling/components/SchedulePdfPreview.vue.d.ts +0 -6
  80. package/dist/src/views/scheduling/components/SchedulePublishModal.vue.d.ts +0 -8
  81. package/dist/src/views/scheduling/components/ScheduleReviewBar.vue.d.ts +0 -12
  82. package/dist/src/views/scheduling/components/ScheduleSelect.vue.d.ts +0 -24
  83. package/dist/src/views/scheduling/components/ScheduleSelectExistingEmployeeModal.vue.d.ts +0 -6
  84. package/dist/src/views/scheduling/components/ScheduleShiftCardMenu.vue.d.ts +0 -12
  85. package/dist/src/views/scheduling/components/ScheduleShiftCell.vue.d.ts +0 -31
  86. package/dist/src/views/scheduling/components/ScheduleShiftHeadcountEditor.vue.d.ts +0 -6
  87. package/dist/src/views/scheduling/components/ScheduleShiftImpact.vue.d.ts +0 -6
  88. package/dist/src/views/scheduling/components/ScheduleShiftMoreOptions.vue.d.ts +0 -6
  89. package/dist/src/views/scheduling/components/ScheduleShiftPopover.vue.d.ts +0 -14
  90. package/dist/src/views/scheduling/components/ScheduleShiftRepeatDaysRow.vue.d.ts +0 -8
  91. package/dist/src/views/scheduling/components/ScheduleShiftSegmentsEditor.vue.d.ts +0 -8
  92. package/dist/src/views/scheduling/components/ScheduleShiftWhoPicker.vue.d.ts +0 -25
  93. package/dist/src/views/scheduling/components/ScheduleStackPopover.vue.d.ts +0 -14
  94. package/dist/src/views/scheduling/components/ScheduleStaffRail.vue.d.ts +0 -16
  95. package/dist/src/views/scheduling/components/ScheduleStaffRows.vue.d.ts +0 -54
  96. package/dist/src/views/scheduling/components/ScheduleStatsRow.vue.d.ts +0 -12
  97. package/dist/src/views/scheduling/components/ScheduleSwapShiftsModal.vue.d.ts +0 -8
  98. package/dist/src/views/scheduling/components/ScheduleTimePickerPopover.vue.d.ts +0 -6
  99. package/dist/src/views/scheduling/components/ScheduleTopbar.vue.d.ts +0 -22
  100. package/dist/src/views/scheduling/composables/schedule-add-employee-form.d.ts +0 -67
  101. package/dist/src/views/scheduling/composables/schedule-board-helpers.d.ts +0 -38
  102. package/dist/src/views/scheduling/composables/schedule-day-meta.d.ts +0 -29
  103. package/dist/src/views/scheduling/composables/schedule-employee-profile.d.ts +0 -7
  104. package/dist/src/views/scheduling/composables/schedule-shift-time.d.ts +0 -14
  105. package/dist/src/views/scheduling/composables/schedule-week-cache.d.ts +0 -10
  106. package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +0 -86
  107. package/dist/src/views/scheduling/composables/useScheduleAddPick.d.ts +0 -66
  108. package/dist/src/views/scheduling/composables/useScheduleAllShiftsRow.d.ts +0 -77
  109. package/dist/src/views/scheduling/composables/useScheduleAreaBoard.d.ts +0 -50
  110. package/dist/src/views/scheduling/composables/useScheduleAreaDragDrop.d.ts +0 -18
  111. package/dist/src/views/scheduling/composables/useScheduleAssign.d.ts +0 -113
  112. package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +0 -136
  113. package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +0 -415
  114. package/dist/src/views/scheduling/composables/useScheduleCellState.d.ts +0 -27
  115. package/dist/src/views/scheduling/composables/useScheduleClashDetection.d.ts +0 -18
  116. package/dist/src/views/scheduling/composables/useScheduleCopyWeek.d.ts +0 -17
  117. package/dist/src/views/scheduling/composables/useScheduleCostRail.d.ts +0 -43
  118. package/dist/src/views/scheduling/composables/useScheduleDayNote.d.ts +0 -48
  119. package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +0 -82
  120. package/dist/src/views/scheduling/composables/useScheduleDemand.d.ts +0 -68
  121. package/dist/src/views/scheduling/composables/useScheduleDemandRow.d.ts +0 -45
  122. package/dist/src/views/scheduling/composables/useScheduleDemandSheet.d.ts +0 -139
  123. package/dist/src/views/scheduling/composables/useScheduleDragDrop.d.ts +0 -22
  124. package/dist/src/views/scheduling/composables/useScheduleEmployeeIdentity.d.ts +0 -32
  125. package/dist/src/views/scheduling/composables/useScheduleEmployeeProfile.d.ts +0 -16
  126. package/dist/src/views/scheduling/composables/useScheduleExport.d.ts +0 -26
  127. package/dist/src/views/scheduling/composables/useScheduleFilterBar.d.ts +0 -14
  128. package/dist/src/views/scheduling/composables/useScheduleGapPopover.d.ts +0 -80
  129. package/dist/src/views/scheduling/composables/useScheduleLeave.d.ts +0 -20
  130. package/dist/src/views/scheduling/composables/useScheduleLegend.d.ts +0 -15
  131. package/dist/src/views/scheduling/composables/useScheduleLegendBar.d.ts +0 -35
  132. package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +0 -179
  133. package/dist/src/views/scheduling/composables/useScheduleOpenShiftCard.d.ts +0 -23
  134. package/dist/src/views/scheduling/composables/useScheduleOutlet.d.ts +0 -19
  135. package/dist/src/views/scheduling/composables/useSchedulePositions.d.ts +0 -32
  136. package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +0 -91
  137. package/dist/src/views/scheduling/composables/useScheduleRangeCalendar.d.ts +0 -18
  138. package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +0 -183
  139. package/dist/src/views/scheduling/composables/useScheduleSettings.d.ts +0 -54
  140. package/dist/src/views/scheduling/composables/useScheduleSetupBanner.d.ts +0 -18
  141. package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +0 -225
  142. package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +0 -174
  143. package/dist/src/views/scheduling/composables/useScheduleStaffRail.d.ts +0 -20
  144. package/dist/src/views/scheduling/composables/useScheduleStatsRow.d.ts +0 -25
  145. package/dist/src/views/scheduling/composables/useScheduleTimePicker.d.ts +0 -44
  146. package/dist/src/views/scheduling/composables/useScheduleTopbar.d.ts +0 -10
  147. package/dist/src/views/scheduling/data.d.ts +0 -105
  148. package/dist/src/views/scheduling/locales/index.d.ts +0 -496
  149. package/dist/src/views/scheduling/schedule-store.d.ts +0 -116
  150. package/dist/src/views/scheduling/types.d.ts +0 -311
  151. package/dist/useScheduleOutlet-CmIG5dwQ.js +0 -557
  152. package/dist/useSchedulePositions-DPVAgdB2.js +0 -103
@@ -1,311 +0,0 @@
1
- export type ShiftStatus = 'confirmed' | 'pending' | 'ot';
2
- export interface ShiftClock {
3
- in: string | null;
4
- out: string | null;
5
- status: 'on-time' | 'late' | 'early-out' | 'absent';
6
- }
7
- export interface WorkSlot {
8
- start: string;
9
- end: string;
10
- role: string;
11
- status: ShiftStatus;
12
- clock?: ShiftClock;
13
- conflict?: boolean;
14
- conflictReason?: string;
15
- /** Set when this slot is the filled form of an OpenShift record. */
16
- openId?: number;
17
- /** Unpaid break length in minutes, authored in the shift popover. Not currently
18
- * subtracted by the cost rail / stats row's hour totals — those stay gross-hours,
19
- * matching how this board priced shifts before the popover surfaced a break field. */
20
- breakMins?: number;
21
- /** The ShiftAssignments document this slot is saved as, once it has one — see
22
- * useScheduleBoard's commitShift/removeShift/moveShift. Absent means either it hasn't
23
- * round-tripped to the backend yet, or it's an OpenShift fill (see openId), which has its
24
- * own record shape and no write path of its own yet. */
25
- assignmentId?: string;
26
- }
27
- export interface LeaveBalance {
28
- type: string;
29
- entitled: number;
30
- used: number;
31
- }
32
- export interface LeaveSlot {
33
- timeOff: 'approved' | 'pending';
34
- reason: string;
35
- half?: boolean;
36
- halfPart?: 'AM' | 'PM';
37
- appliedOn?: string;
38
- note?: string;
39
- cert?: {
40
- name: string;
41
- size: string;
42
- } | null;
43
- bal?: LeaveBalance;
44
- }
45
- export type DaySlot = WorkSlot | WorkSlot[] | LeaveSlot | null;
46
- export interface EmployeeRemark {
47
- author: string;
48
- date: string;
49
- type: 'note' | 'warning' | 'praise';
50
- text: string;
51
- }
52
- /** One weekday's availability window, used only for the part-timer "hours they can work"
53
- * editor on the Add Employee form — informational HR data, not read by the grid. This board
54
- * has no standing weekly rest-day pattern (see cellStateClasses); a day someone is actually
55
- * away is booked as dated leave, not derived from this. */
56
- export interface EmployeeAvailHours {
57
- from: string;
58
- to: string;
59
- }
60
- export interface Employee {
61
- id: number;
62
- name: string;
63
- role: string;
64
- initials: string;
65
- color: string;
66
- weekHours: number;
67
- /** Full-time-equivalent percentage, e.g. 100 for a full-timer, 60 for 0.6 FTE. */
68
- pct: number;
69
- /** Hours per week this person is contracted to, as agreed with them. Per-person rather than
70
- * a venue default: ScheduleSettings holds pay rates only, and EmployeeProfiles.workingHour
71
- * is where the figure is actually stated. Undefined means nobody has agreed one. */
72
- contractHours?: number;
73
- rate: number;
74
- positions: string[];
75
- /** One entry per visible day of the horizon; null = day off. */
76
- shifts: DaySlot[];
77
- remarks: EmployeeRemark[];
78
- section: string;
79
- compGroup?: string;
80
- mobile?: string;
81
- dial?: string;
82
- /** Outlets this person may be rostered at. */
83
- locations?: string[];
84
- payBasis?: 'hourly' | 'monthly';
85
- /** The figure as agreed with them, in payBasis's unit — `rate` above is always the
86
- * hourly figure derived from this and is what the grid actually costs shifts with. */
87
- payAmount?: number;
88
- maxHours?: number;
89
- maxOtHours?: number;
90
- otAfterDaily?: number;
91
- preferences?: string[];
92
- seniority?: 'senior' | 'junior' | '';
93
- /** Recurring days off (full-timer) or days available (part-timer) — see
94
- * EmployeeAvailHours above for why the grid does not read this. */
95
- availDays?: boolean[];
96
- availHours?: EmployeeAvailHours[];
97
- /** POS sign-in code. Optional: rostering, costing and publishing never depend on it. */
98
- passcode?: string;
99
- masterUser?: boolean;
100
- }
101
- export interface Section {
102
- id: string;
103
- label: string;
104
- roles: string[];
105
- /** The "Unassigned" bucket — always present, never deletable. */
106
- system?: boolean;
107
- }
108
- export interface OpenShift {
109
- id: number;
110
- dayIdx: number;
111
- position: string;
112
- required: number;
113
- filledBy: number | null;
114
- sen?: 'junior' | 'senior';
115
- empType?: 'full' | 'part';
116
- /** Optional custom label for this open shift, shown above the time on its card
117
- * (e.g. "Weekend cover") — distinct from the position it asks for. */
118
- name?: string;
119
- /** Hours this record asks for. Defaults to the active shift template's hours at
120
- * creation, but the shift popover lets a manager retime one open shift on its own. */
121
- start: string;
122
- end: string;
123
- breakMins?: number;
124
- }
125
- export interface ShiftTemplate {
126
- key: string;
127
- label: string;
128
- start: string;
129
- end: string;
130
- color: string;
131
- active: boolean;
132
- breakMins: number;
133
- }
134
- /** Coverage requirement for one shift template: position -> [Mon..Sun] headcount. */
135
- export type CoverageRow = Record<string, number[]>;
136
- /** What an hour costs, by the kind of day it falls on — the ScheduleSettings document's whole
137
- * content. `regular` multiplies ORDINARY hours and `overtime` multiplies hours past the OT
138
- * threshold; a NORMAL day has no `regular` because an ordinary hour at ordinary pay is 1×.
139
- *
140
- * REST_DAY is carried but unread: this board has no standing weekly rest-day pattern to decide
141
- * which dates are rest days (see cellStateClasses), so nothing can ask for its rates yet. */
142
- export interface PayRate {
143
- NORMAL: {
144
- overtime: number;
145
- };
146
- REST_DAY: {
147
- regular: number;
148
- overtime: number;
149
- };
150
- PUBLIC_HOLIDAY: {
151
- regular: number;
152
- overtime: number;
153
- };
154
- }
155
- export interface ScheduleRules {
156
- coverage: Record<string, CoverageRow>;
157
- openFrom: string;
158
- openTo: string;
159
- /** Per grid day (0 = Mon) trading windows straight off the outlet's own profile — one or
160
- * more `{start, end}` pairs a day (a lunch/dinner split reads as two windows, not one that
161
- * spans the gap between them), empty for a structurally closed day. `openFrom`/`openTo`
162
- * above stay the widest span across the whole week: the coverage bar, day timeline and shift
163
- * forms are still drawn against one axis for the whole board, not a different one per day. */
164
- dayHours: Array<{
165
- start: string;
166
- end: string;
167
- }>[];
168
- payRate: PayRate;
169
- otAfterDaily: number;
170
- /** Weekly sales forecast (RM) — the stats row's editable input and the figure the
171
- * per-day forecast curve distributes across the week. */
172
- salesForecast: number;
173
- /** Weekday indices (0 = Mon) the venue never opens on. Empty by default — this seed venue
174
- * runs every day. Feeds copy-week's and export's "Closed" labeling. */
175
- closedWeekdays: number[];
176
- /** Labour cost target as a % of sales — Settings page "Labour budget" tab. */
177
- labourTarget: number;
178
- /** When true, the weekly labour cap is derived from salesForecast * labourTarget instead
179
- * of being a standalone figure. */
180
- budgetFromSales: boolean;
181
- /** Weekly labour cap (RM), editable directly when budgetFromSales is false. */
182
- budget: number;
183
- /** Monthly OT cap (hours) — Settings page "Overtime" tab. */
184
- otCapHours: number;
185
- /** Monthly OT budget (RM), advisory only. */
186
- otBudget: number;
187
- notify: {
188
- waConnected: boolean;
189
- waNumber: string;
190
- waDisplayName: string;
191
- defaults: {
192
- wa: boolean;
193
- push: boolean;
194
- email: boolean;
195
- };
196
- };
197
- }
198
- export interface PendingChange {
199
- empId: number;
200
- dayIdx: number;
201
- kind: 'add' | 'change' | 'remove';
202
- label: string;
203
- }
204
- export type NotifyChannel = 'wa' | 'push' | 'email';
205
- export interface ScheduleVersionSnapshot {
206
- id: number;
207
- name: string;
208
- weekHours: number;
209
- shifts: DaySlot[];
210
- }
211
- export interface ScheduleVersion {
212
- v: number;
213
- at: Date;
214
- by: string;
215
- note: string;
216
- changeCount: number;
217
- staffAffected: number;
218
- snapshot: ScheduleVersionSnapshot[];
219
- }
220
- export type ScheduleStatusTone = 'neutral' | 'warn' | 'ok' | 'locked';
221
- export interface ScheduleStatusInfo {
222
- tone: ScheduleStatusTone;
223
- label: string;
224
- hint: string;
225
- allLocked: boolean;
226
- }
227
- /** Someone in the business's employee directory who is not yet on THIS outlet's schedule —
228
- * they may already be scheduled elsewhere (see `otherOutlets`), or nowhere at all. Picking one
229
- * puts a second, independent EmployeeProfiles document against their `employeeId`; it does not
230
- * move or copy their profile from wherever else they work. */
231
- export interface ExistingStaffCandidate {
232
- employeeId: string;
233
- name: string;
234
- /** Other outlets this person already has a POS/HR association with — not necessarily a
235
- * scheduling profile there, just enough context to tell two same-named people apart and to
236
- * warn against loaning someone who's clearly based elsewhere. */
237
- otherOutlets: string[];
238
- }
239
- export interface CompGroupMeta {
240
- basis: 'Hourly' | 'Monthly';
241
- rate: number;
242
- note: string;
243
- }
244
- /** A manager's note on a DATE, not on a shift — it survives every shift on that date being
245
- * deleted, because a day with nothing rostered can still be an event day. The title is what
246
- * makes the note visible on the day card; the description shows on hover. */
247
- export interface ScheduleDayNote {
248
- title: string;
249
- desc: string;
250
- }
251
- /** One named slice of a staffing-demand period: "of the 8 people, 2 on grill". Named rows are
252
- * a PART of the period's headcount, never an addition to it — whatever they don't name is the
253
- * "any position" remainder, which is derived and never stored. */
254
- export interface DemandRole {
255
- position: string;
256
- n: number;
257
- }
258
- /** A stretch of a day and how many people the floor needs across it. Deliberately not a shift:
259
- * it carries no person and no times anybody works, so five staggered shifts can add up to the
260
- * five people it asks for at 4pm without any of them being "the" shift for it. */
261
- export interface DemandPeriod {
262
- from: string;
263
- to: string;
264
- n: number;
265
- /** Absent and empty mean the same thing — "anybody" — so only a stated breakdown is kept. */
266
- roles?: DemandRole[];
267
- }
268
- /** One slice of a day where neither what was asked for nor who is on the floor changes. The
269
- * timeline draws one of these per segment and the day's percentage is their weighted sum. */
270
- export interface CoverageSegment {
271
- from: number;
272
- to: number;
273
- required: number;
274
- scheduled: number;
275
- /** Heads asked for that nobody present answers — which is not the same as "too few bodies":
276
- * eight people none of whom is a cook leaves a 2-grill ask two short with nobody missing. */
277
- short: number;
278
- over: number;
279
- roles: Array<DemandRole & {
280
- required: number;
281
- got: number;
282
- short: number;
283
- }>;
284
- /** The unnamed remainder of the period's headcount, and how much of it is covered. */
285
- anyReq: number;
286
- anyGot: number;
287
- /** Nothing was asked for in these hours — an absence of a question, not a gap in one. */
288
- none: boolean;
289
- }
290
- export type DemandApplyMode = 'day' | 'weekday' | 'weekdays' | 'custom';
291
- export interface NoticeBanner {
292
- variant: 'holiday' | 'info' | 'warning';
293
- dayIdx: number;
294
- label: string;
295
- detail: string;
296
- action?: string;
297
- }
298
- /** One Auto-Schedule suggestion: put `empId` on `dayIdx` for the given hours/position.
299
- * Phase 2 only ever proposes filling an empty day (an open shift or a coverage gap),
300
- * so there is no 'change'/'remove' kind like the mockup's fuller engine. */
301
- export interface Proposal {
302
- id: number;
303
- empId: number;
304
- dayIdx: number;
305
- start: string;
306
- end: string;
307
- role: string;
308
- /** Set when this proposal would fill a named OpenShift record. */
309
- openId?: number;
310
- status: 'pending' | 'rejected';
311
- }