@feedmepos/mf-hrm-portal 2.2.5-dev → 2.2.5-dev.10

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 (167) hide show
  1. package/dist/{ApprovalCodeList-DgcWZ3SZ.js → ApprovalCodeList-BsDMMSIz.js} +4 -4
  2. package/dist/{AuditLogList-vWKMMGvd.js → AuditLogList-CGNZdtmn.js} +18 -17
  3. package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-DuhXogXK.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-C6MoToqi.js} +2 -2
  4. package/dist/EmployeeList-B_OuDWWQ.js +787 -0
  5. package/dist/{FormItem.vue_vue_type_script_setup_true_lang-DPT2FoIc.js → FormItem.vue_vue_type_script_setup_true_lang-CUnlKsxk.js} +1 -1
  6. package/dist/{GrantUserList-BAW0C1bA.js → GrantUserList-Bd0lXmFo.js} +5 -5
  7. package/dist/{Main-NzpdRNB3.js → Main-B66lSeOv.js} +5 -5
  8. package/dist/{Main-Wr6cTqfM.js → Main-CzHSNHsH.js} +2 -2
  9. package/dist/{Main-B7Nn8CLQ.js → Main-njRQ1tFk.js} +9 -9
  10. package/dist/PasscodePinField.vue_vue_type_script_setup_true_lang-CqG0v0Sz.js +243 -0
  11. package/dist/{PermissionSetList-D6AFOleD.js → PermissionSetList-GTI6Cwj5.js} +18 -18
  12. package/dist/{PortalPermissionEditor.vue_vue_type_script_setup_true_lang-Bzq2_BMn.js → PortalPermissionEditor.vue_vue_type_script_setup_true_lang-C-QEQ-js.js} +1052 -1052
  13. package/dist/{RoleList-BuqpmXn_.js → RoleList-CmHgtM0m.js} +7 -7
  14. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-SFqxftRx.js +426 -0
  15. package/dist/ScheduleButton.vue_vue_type_script_setup_true_lang-CrWfo-zF.js +690 -0
  16. package/dist/ScheduleGeneralPage-DxFxJN5j.js +320 -0
  17. package/dist/SchedulePage-cJDI3-E7.js +14647 -0
  18. package/dist/SchedulePositionPage-n1wUShIM.js +293 -0
  19. package/dist/ScheduleSelect.vue_vue_type_script_setup_true_lang-B8W4sTsA.js +242 -0
  20. package/dist/SelectFilter-CG13h83-.js +264 -0
  21. package/dist/TeamMemberList-ByZt3VqN.js +1154 -0
  22. package/dist/{TimesheetList-B5FyVyCz.js → TimesheetList-Dv0-W--W.js} +54 -53
  23. package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-C99Jr6Ax.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-DIo6h5-a.js} +2 -2
  24. package/dist/_plugin-vue_export-helper-CHgC5LLL.js +9 -0
  25. package/dist/{app-8samJY5z.js → app-SCXGJ95F.js} +3146 -2553
  26. package/dist/app.js +1 -1
  27. package/dist/{dayjs.min-Ba4X_9nY.js → dayjs.min-DqMLPYv-.js} +1 -1
  28. package/dist/{employee-BcFgm8Rt.js → employee-DT_xYQkz.js} +3 -3
  29. package/dist/{iteration-Dhdew1jW.js → iteration-B5dB9ecy.js} +1 -1
  30. package/dist/{lodash-CJ3mHku0.js → lodash-CRHFapxI.js} +1 -1
  31. package/dist/{role-BViYS7RK.js → role-CJm8pXaw.js} +1 -1
  32. package/dist/{rule-Dxt1ZSQS.js → rule-AJm-eVzJ.js} +276 -272
  33. package/dist/src/api/schedule/index.d.ts +41 -0
  34. package/dist/src/components/form/OutletRoleAssignment.vue.d.ts +16 -0
  35. package/dist/src/components/layout/AppSidebar.vue.d.ts +2 -0
  36. package/dist/src/components/layout/PortalShell.vue.d.ts +12 -0
  37. package/dist/src/components/layout/withShell.d.ts +14 -0
  38. package/dist/src/helpers/outlet-role-assignment.d.ts +40 -0
  39. package/dist/src/helpers/rule.d.ts +15 -0
  40. package/dist/src/router/shared.d.ts +4 -1
  41. package/dist/src/types/schedule.d.ts +232 -0
  42. package/dist/src/views/scheduling/ScheduleGeneralPage.vue.d.ts +3 -0
  43. package/dist/src/views/scheduling/SchedulePage.vue.d.ts +3 -0
  44. package/dist/src/views/scheduling/SchedulePositionPage.vue.d.ts +3 -0
  45. package/dist/src/views/scheduling/components/ScheduleAddEmployeeIdentitySection.vue.d.ts +6 -0
  46. package/dist/src/views/scheduling/components/ScheduleAddEmployeeModal.vue.d.ts +10 -0
  47. package/dist/src/views/scheduling/components/ScheduleAddEmployeeModeStep.vue.d.ts +6 -0
  48. package/dist/src/views/scheduling/components/ScheduleAddEmployeePosAccessSection.vue.d.ts +6 -0
  49. package/dist/src/views/scheduling/components/ScheduleAddEmployeePositionsSection.vue.d.ts +10 -0
  50. package/dist/src/views/scheduling/components/ScheduleAddEmployeeSchedulingSection.vue.d.ts +6 -0
  51. package/dist/src/views/scheduling/components/ScheduleAddPickPopover.vue.d.ts +6 -0
  52. package/dist/src/views/scheduling/components/ScheduleAddPositionModal.vue.d.ts +6 -0
  53. package/dist/src/views/scheduling/components/ScheduleAllShiftsRow.vue.d.ts +22 -0
  54. package/dist/src/views/scheduling/components/ScheduleAreaRows.vue.d.ts +34 -0
  55. package/dist/src/views/scheduling/components/ScheduleAssignEmployeePopover.vue.d.ts +6 -0
  56. package/dist/src/views/scheduling/components/ScheduleAutoScheduleModal.vue.d.ts +10 -0
  57. package/dist/src/views/scheduling/components/ScheduleButton.vue.d.ts +23 -0
  58. package/dist/src/views/scheduling/components/ScheduleChangeEmployeeModal.vue.d.ts +8 -0
  59. package/dist/src/views/scheduling/components/ScheduleConfirmModal.vue.d.ts +24 -0
  60. package/dist/src/views/scheduling/components/ScheduleCostRail.vue.d.ts +8 -0
  61. package/dist/src/views/scheduling/components/ScheduleDateRangePopover.vue.d.ts +6 -0
  62. package/dist/src/views/scheduling/components/ScheduleDayNotePopover.vue.d.ts +6 -0
  63. package/dist/src/views/scheduling/components/ScheduleDayTimeline.vue.d.ts +12 -0
  64. package/dist/src/views/scheduling/components/ScheduleDemandRow.vue.d.ts +23 -0
  65. package/dist/src/views/scheduling/components/ScheduleDemandSheet.vue.d.ts +10 -0
  66. package/dist/src/views/scheduling/components/ScheduleDotsIcon.vue.d.ts +2 -0
  67. package/dist/src/views/scheduling/components/ScheduleEmployeeDetailPanel.vue.d.ts +12 -0
  68. package/dist/src/views/scheduling/components/ScheduleEmployeeIdentity.vue.d.ts +17 -0
  69. package/dist/src/views/scheduling/components/ScheduleEmployeeMenu.vue.d.ts +6 -0
  70. package/dist/src/views/scheduling/components/ScheduleFilterBar.vue.d.ts +18 -0
  71. package/dist/src/views/scheduling/components/ScheduleGapPopover.vue.d.ts +6 -0
  72. package/dist/src/views/scheduling/components/ScheduleGridHeader.vue.d.ts +18 -0
  73. package/dist/src/views/scheduling/components/ScheduleGridSkeleton.vue.d.ts +2 -0
  74. package/dist/src/views/scheduling/components/ScheduleLeaveEditModal.vue.d.ts +8 -0
  75. package/dist/src/views/scheduling/components/ScheduleLegendBar.vue.d.ts +6 -0
  76. package/dist/src/views/scheduling/components/ScheduleOnboardingWelcome.vue.d.ts +12 -0
  77. package/dist/src/views/scheduling/components/ScheduleOnboardingWizard.vue.d.ts +9 -0
  78. package/dist/src/views/scheduling/components/ScheduleOpenShiftCardMenu.vue.d.ts +14 -0
  79. package/dist/src/views/scheduling/components/SchedulePdfPreview.vue.d.ts +6 -0
  80. package/dist/src/views/scheduling/components/SchedulePublishModal.vue.d.ts +8 -0
  81. package/dist/src/views/scheduling/components/ScheduleReviewBar.vue.d.ts +12 -0
  82. package/dist/src/views/scheduling/components/ScheduleSelect.vue.d.ts +54 -0
  83. package/dist/src/views/scheduling/components/ScheduleSelectExistingEmployeeModal.vue.d.ts +6 -0
  84. package/dist/src/views/scheduling/components/ScheduleShiftCardMenu.vue.d.ts +12 -0
  85. package/dist/src/views/scheduling/components/ScheduleShiftCell.vue.d.ts +35 -0
  86. package/dist/src/views/scheduling/components/ScheduleShiftHeadcountEditor.vue.d.ts +10 -0
  87. package/dist/src/views/scheduling/components/ScheduleShiftImpact.vue.d.ts +6 -0
  88. package/dist/src/views/scheduling/components/ScheduleShiftMoreOptions.vue.d.ts +6 -0
  89. package/dist/src/views/scheduling/components/ScheduleShiftPopover.vue.d.ts +16 -0
  90. package/dist/src/views/scheduling/components/ScheduleShiftRepeatDaysRow.vue.d.ts +8 -0
  91. package/dist/src/views/scheduling/components/ScheduleShiftSegmentsEditor.vue.d.ts +8 -0
  92. package/dist/src/views/scheduling/components/ScheduleShiftWhoPicker.vue.d.ts +25 -0
  93. package/dist/src/views/scheduling/components/ScheduleStackPopover.vue.d.ts +14 -0
  94. package/dist/src/views/scheduling/components/ScheduleStaffRail.vue.d.ts +18 -0
  95. package/dist/src/views/scheduling/components/ScheduleStaffRows.vue.d.ts +60 -0
  96. package/dist/src/views/scheduling/components/ScheduleStatsRow.vue.d.ts +12 -0
  97. package/dist/src/views/scheduling/components/ScheduleSwapShiftsModal.vue.d.ts +8 -0
  98. package/dist/src/views/scheduling/components/ScheduleTimePickerPopover.vue.d.ts +6 -0
  99. package/dist/src/views/scheduling/components/ScheduleTopbar.vue.d.ts +20 -0
  100. package/dist/src/views/scheduling/composables/schedule-add-employee-form.d.ts +72 -0
  101. package/dist/src/views/scheduling/composables/schedule-board-helpers.d.ts +38 -0
  102. package/dist/src/views/scheduling/composables/schedule-day-meta.d.ts +29 -0
  103. package/dist/src/views/scheduling/composables/schedule-employee-profile.d.ts +7 -0
  104. package/dist/src/views/scheduling/composables/schedule-popover-position.d.ts +16 -0
  105. package/dist/src/views/scheduling/composables/schedule-shift-time.d.ts +14 -0
  106. package/dist/src/views/scheduling/composables/schedule-week-cache.d.ts +10 -0
  107. package/dist/src/views/scheduling/composables/scheduleAutoSolver.d.ts +21 -0
  108. package/dist/src/views/scheduling/composables/useCollapsedList.d.ts +9 -0
  109. package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +98 -0
  110. package/dist/src/views/scheduling/composables/useScheduleAddPick.d.ts +73 -0
  111. package/dist/src/views/scheduling/composables/useScheduleAllShiftsRow.d.ts +77 -0
  112. package/dist/src/views/scheduling/composables/useScheduleAreaBoard.d.ts +50 -0
  113. package/dist/src/views/scheduling/composables/useScheduleAreaDragDrop.d.ts +18 -0
  114. package/dist/src/views/scheduling/composables/useScheduleAssign.d.ts +122 -0
  115. package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +143 -0
  116. package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +426 -0
  117. package/dist/src/views/scheduling/composables/useScheduleCellState.d.ts +27 -0
  118. package/dist/src/views/scheduling/composables/useScheduleClashDetection.d.ts +18 -0
  119. package/dist/src/views/scheduling/composables/useScheduleCopyWeek.d.ts +19 -0
  120. package/dist/src/views/scheduling/composables/useScheduleCostRail.d.ts +43 -0
  121. package/dist/src/views/scheduling/composables/useScheduleDayNote.d.ts +48 -0
  122. package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +77 -0
  123. package/dist/src/views/scheduling/composables/useScheduleDemand.d.ts +76 -0
  124. package/dist/src/views/scheduling/composables/useScheduleDemandRow.d.ts +45 -0
  125. package/dist/src/views/scheduling/composables/useScheduleDemandSheet.d.ts +145 -0
  126. package/dist/src/views/scheduling/composables/useScheduleDragDrop.d.ts +22 -0
  127. package/dist/src/views/scheduling/composables/useScheduleEmployeeIdentity.d.ts +41 -0
  128. package/dist/src/views/scheduling/composables/useScheduleEmployeeMenu.d.ts +35 -0
  129. package/dist/src/views/scheduling/composables/useScheduleEmployeeProfile.d.ts +16 -0
  130. package/dist/src/views/scheduling/composables/useScheduleExport.d.ts +26 -0
  131. package/dist/src/views/scheduling/composables/useScheduleFilterBar.d.ts +14 -0
  132. package/dist/src/views/scheduling/composables/useScheduleGapPopover.d.ts +82 -0
  133. package/dist/src/views/scheduling/composables/useScheduleLeave.d.ts +70 -0
  134. package/dist/src/views/scheduling/composables/useScheduleLegend.d.ts +15 -0
  135. package/dist/src/views/scheduling/composables/useScheduleLegendBar.d.ts +35 -0
  136. package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +1316 -0
  137. package/dist/src/views/scheduling/composables/useScheduleOpenShiftCard.d.ts +23 -0
  138. package/dist/src/views/scheduling/composables/useScheduleOutlet.d.ts +20 -0
  139. package/dist/src/views/scheduling/composables/useSchedulePositionModal.d.ts +50 -0
  140. package/dist/src/views/scheduling/composables/useSchedulePositions.d.ts +32 -0
  141. package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +93 -0
  142. package/dist/src/views/scheduling/composables/useScheduleRangeCalendar.d.ts +27 -0
  143. package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +189 -0
  144. package/dist/src/views/scheduling/composables/useScheduleSettings.d.ts +54 -0
  145. package/dist/src/views/scheduling/composables/useScheduleSetupBanner.d.ts +18 -0
  146. package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +163 -0
  147. package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +181 -0
  148. package/dist/src/views/scheduling/composables/useScheduleStaffRail.d.ts +23 -0
  149. package/dist/src/views/scheduling/composables/useScheduleStatsRow.d.ts +25 -0
  150. package/dist/src/views/scheduling/composables/useScheduleTimePicker.d.ts +49 -0
  151. package/dist/src/views/scheduling/composables/useScheduleTopbar.d.ts +10 -0
  152. package/dist/src/views/scheduling/composables/useScheduleViewportFit.d.ts +9 -0
  153. package/dist/src/views/scheduling/data.d.ts +110 -0
  154. package/dist/src/views/scheduling/locales/index.d.ts +496 -0
  155. package/dist/src/views/scheduling/schedule-store.d.ts +151 -0
  156. package/dist/src/views/scheduling/types.d.ts +324 -0
  157. package/dist/src/views/team/components/PortalConditionForm.vue.d.ts +2 -2
  158. package/dist/src/views/team/condition-builders/ConditionBuilderForm.vue.d.ts +2 -2
  159. package/dist/src/views/team/member/TeamMemberMasterUser.vue.d.ts +12 -3
  160. package/dist/style.css +1 -1
  161. package/dist/tsconfig.app.tsbuildinfo +1 -1
  162. package/dist/{useReportPermissions-BiyAfGvZ.js → useReportPermissions-Cg3lV70m.js} +3 -3
  163. package/package.json +1 -1
  164. package/dist/EmployeeList-Cu4RxVQX.js +0 -889
  165. package/dist/PasscodePinField.vue_vue_type_script_setup_true_lang-BUI0Xsgc.js +0 -85
  166. package/dist/SelectFilter-ATOm0hdn.js +0 -269
  167. package/dist/TeamMemberList-M6HA9BWu.js +0 -1248
@@ -0,0 +1,324 @@
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
+ /** Specific hours (HH:MM), for leave that is neither all day nor a morning / afternoon. */
38
+ from?: string;
39
+ to?: string;
40
+ appliedOn?: string;
41
+ note?: string;
42
+ cert?: {
43
+ name: string;
44
+ size: string;
45
+ } | null;
46
+ bal?: LeaveBalance;
47
+ }
48
+ export type DaySlot = WorkSlot | WorkSlot[] | LeaveSlot | null;
49
+ export interface EmployeeRemark {
50
+ author: string;
51
+ date: string;
52
+ type: 'note' | 'warning' | 'praise';
53
+ text: string;
54
+ }
55
+ /** One weekday's availability window, used only for the part-timer "hours they can work"
56
+ * editor on the Add Employee form — informational HR data, not read by the grid. This board
57
+ * has no standing weekly rest-day pattern (see cellStateClasses); a day someone is actually
58
+ * away is booked as dated leave, not derived from this. */
59
+ export interface EmployeeAvailHours {
60
+ from: string;
61
+ to: string;
62
+ }
63
+ export interface Employee {
64
+ id: number;
65
+ name: string;
66
+ role: string;
67
+ initials: string;
68
+ color: string;
69
+ weekHours: number;
70
+ /** Full-time-equivalent percentage, e.g. 100 for a full-timer, 60 for 0.6 FTE. */
71
+ pct: number;
72
+ /** Hours per week this person is contracted to, as agreed with them. Per-person rather than
73
+ * a venue default: ScheduleSettings holds pay rates only, and EmployeeProfiles.workingHour
74
+ * is where the figure is actually stated. Undefined means nobody has agreed one. */
75
+ contractHours?: number;
76
+ rate: number;
77
+ positions: string[];
78
+ /** One entry per visible day of the horizon; null = day off. */
79
+ shifts: DaySlot[];
80
+ remarks: EmployeeRemark[];
81
+ section: string;
82
+ compGroup?: string;
83
+ mobile?: string;
84
+ dial?: string;
85
+ /** Outlets this person may be rostered at. */
86
+ locations?: string[];
87
+ payBasis?: 'hourly' | 'monthly';
88
+ /** The figure as agreed with them, in payBasis's unit — `rate` above is always the
89
+ * hourly figure derived from this and is what the grid actually costs shifts with. */
90
+ payAmount?: number;
91
+ maxHours?: number;
92
+ maxOtHours?: number;
93
+ /** Shortest shift, in hours, this person will come in for. Asking for less is allowed but
94
+ * warned about in the shift popover. */
95
+ minHours?: number;
96
+ otAfterDaily?: number;
97
+ preferences?: string[];
98
+ seniority?: 'senior' | 'junior' | '';
99
+ /** Recurring days off (full-timer) or days available (part-timer) — see
100
+ * EmployeeAvailHours above for why the grid does not read this. */
101
+ availDays?: boolean[];
102
+ availHours?: EmployeeAvailHours[];
103
+ /** POS sign-in code. Optional: rostering, costing and publishing never depend on it. */
104
+ passcode?: string;
105
+ masterUser?: boolean;
106
+ }
107
+ export interface Section {
108
+ id: string;
109
+ label: string;
110
+ roles: string[];
111
+ /** The "Unassigned" bucket — always present, never deletable. */
112
+ system?: boolean;
113
+ }
114
+ export interface OpenShift {
115
+ id: number;
116
+ dayIdx: number;
117
+ position: string;
118
+ required: number;
119
+ filledBy: number | null;
120
+ sen?: 'junior' | 'senior';
121
+ empType?: 'full' | 'part';
122
+ /** Optional custom label for this open shift, shown above the time on its card
123
+ * (e.g. "Weekend cover") — distinct from the position it asks for. */
124
+ name?: string;
125
+ /** Hours this record asks for. Defaults to the active shift template's hours at
126
+ * creation, but the shift popover lets a manager retime one open shift on its own. */
127
+ start: string;
128
+ end: string;
129
+ breakMins?: number;
130
+ }
131
+ export interface ShiftTemplate {
132
+ key: string;
133
+ label: string;
134
+ start: string;
135
+ end: string;
136
+ color: string;
137
+ active: boolean;
138
+ breakMins: number;
139
+ }
140
+ /** Coverage requirement for one shift template: position -> [Mon..Sun] headcount. */
141
+ export type CoverageRow = Record<string, number[]>;
142
+ /** What an hour costs, by the kind of day it falls on — the ScheduleSettings document's whole
143
+ * content. `regular` multiplies ORDINARY hours and `overtime` multiplies hours past the OT
144
+ * threshold; a NORMAL day has no `regular` because an ordinary hour at ordinary pay is 1×.
145
+ *
146
+ * REST_DAY is carried but unread: this board has no standing weekly rest-day pattern to decide
147
+ * which dates are rest days (see cellStateClasses), so nothing can ask for its rates yet. */
148
+ export interface PayRate {
149
+ NORMAL: {
150
+ overtime: number;
151
+ };
152
+ REST_DAY: {
153
+ regular: number;
154
+ overtime: number;
155
+ };
156
+ PUBLIC_HOLIDAY: {
157
+ regular: number;
158
+ overtime: number;
159
+ };
160
+ }
161
+ export interface ScheduleRules {
162
+ coverage: Record<string, CoverageRow>;
163
+ openFrom: string;
164
+ openTo: string;
165
+ /** Per grid day (0 = Mon) trading windows straight off the outlet's own profile — one or
166
+ * more `{start, end}` pairs a day (a lunch/dinner split reads as two windows, not one that
167
+ * spans the gap between them), empty for a structurally closed day. `openFrom`/`openTo`
168
+ * above stay the widest span across the whole week: the coverage bar, day timeline and shift
169
+ * forms are still drawn against one axis for the whole board, not a different one per day. */
170
+ dayHours: Array<{
171
+ start: string;
172
+ end: string;
173
+ }>[];
174
+ payRate: PayRate;
175
+ otAfterDaily: number;
176
+ /** Weekly sales forecast (RM) — the stats row's editable input and the figure the
177
+ * per-day forecast curve distributes across the week. */
178
+ salesForecast: number;
179
+ /** Weekday indices (0 = Mon) the venue never opens on. Empty by default — this seed venue
180
+ * runs every day. Feeds copy-week's and export's "Closed" labeling. */
181
+ closedWeekdays: number[];
182
+ /** Labour cost target as a % of sales — Settings page "Labour budget" tab. */
183
+ labourTarget: number;
184
+ /** When true, the weekly labour cap is derived from salesForecast * labourTarget instead
185
+ * of being a standalone figure. */
186
+ budgetFromSales: boolean;
187
+ /** Weekly labour cap (RM), editable directly when budgetFromSales is false. */
188
+ budget: number;
189
+ /** Monthly OT cap (hours) — Settings page "Overtime" tab. */
190
+ otCapHours: number;
191
+ /** Monthly OT budget (RM), advisory only. */
192
+ otBudget: number;
193
+ notify: {
194
+ waConnected: boolean;
195
+ waNumber: string;
196
+ waDisplayName: string;
197
+ defaults: {
198
+ wa: boolean;
199
+ push: boolean;
200
+ email: boolean;
201
+ };
202
+ };
203
+ }
204
+ export interface PendingChange {
205
+ empId: number;
206
+ dayIdx: number;
207
+ kind: 'add' | 'change' | 'remove';
208
+ label: string;
209
+ }
210
+ export type NotifyChannel = 'wa' | 'push' | 'email';
211
+ export interface ScheduleVersionSnapshot {
212
+ id: number;
213
+ name: string;
214
+ weekHours: number;
215
+ shifts: DaySlot[];
216
+ }
217
+ export interface ScheduleVersion {
218
+ v: number;
219
+ at: Date;
220
+ by: string;
221
+ note: string;
222
+ changeCount: number;
223
+ staffAffected: number;
224
+ snapshot: ScheduleVersionSnapshot[];
225
+ }
226
+ export type ScheduleStatusTone = 'neutral' | 'warn' | 'ok' | 'locked';
227
+ export interface ScheduleStatusInfo {
228
+ tone: ScheduleStatusTone;
229
+ label: string;
230
+ hint: string;
231
+ allLocked: boolean;
232
+ }
233
+ /** Someone in the business's employee directory who is not yet on THIS outlet's schedule —
234
+ * they may already be scheduled elsewhere (see `otherOutlets`), or nowhere at all. Picking one
235
+ * puts a second, independent EmployeeProfiles document against their `employeeId`; it does not
236
+ * move or copy their profile from wherever else they work. */
237
+ export interface ExistingStaffCandidate {
238
+ employeeId: string;
239
+ name: string;
240
+ /** Other outlets this person already has a POS/HR association with — not necessarily a
241
+ * scheduling profile there, just enough context to tell two same-named people apart and to
242
+ * warn against loaning someone who's clearly based elsewhere. */
243
+ otherOutlets: string[];
244
+ /** Every outlet the person works at, by name (this one included when the POS lists it). */
245
+ locations: string[];
246
+ }
247
+ export interface CompGroupMeta {
248
+ basis: 'Hourly' | 'Monthly';
249
+ rate: number;
250
+ note: string;
251
+ }
252
+ /** A manager's note on a DATE, not on a shift — it survives every shift on that date being
253
+ * deleted, because a day with nothing rostered can still be an event day. The title is what
254
+ * makes the note visible on the day card; the description shows on hover. */
255
+ export interface ScheduleDayNote {
256
+ title: string;
257
+ desc: string;
258
+ }
259
+ /** One named slice of a staffing-demand period: "of the 8 people, 2 on grill". Named rows are
260
+ * a PART of the period's headcount, never an addition to it — whatever they don't name is the
261
+ * "any position" remainder, which is derived and never stored. */
262
+ export interface DemandRole {
263
+ position: string;
264
+ n: number;
265
+ }
266
+ /** A stretch of a day and how many people the floor needs across it. Deliberately not a shift:
267
+ * it carries no person and no times anybody works, so five staggered shifts can add up to the
268
+ * five people it asks for at 4pm without any of them being "the" shift for it. */
269
+ export interface DemandPeriod {
270
+ from: string;
271
+ to: string;
272
+ n: number;
273
+ /** Absent and empty mean the same thing — "anybody" — so only a stated breakdown is kept. */
274
+ roles?: DemandRole[];
275
+ }
276
+ /** One slice of a day where neither what was asked for nor who is on the floor changes. The
277
+ * timeline draws one of these per segment and the day's percentage is their weighted sum. */
278
+ export interface CoverageSegment {
279
+ from: number;
280
+ to: number;
281
+ required: number;
282
+ scheduled: number;
283
+ /** Heads asked for that nobody present answers — which is not the same as "too few bodies":
284
+ * eight people none of whom is a cook leaves a 2-grill ask two short with nobody missing. */
285
+ short: number;
286
+ over: number;
287
+ roles: Array<DemandRole & {
288
+ required: number;
289
+ got: number;
290
+ short: number;
291
+ }>;
292
+ /** The unnamed remainder of the period's headcount, and how much of it is covered. */
293
+ anyReq: number;
294
+ anyGot: number;
295
+ /** Nothing was asked for in these hours — an absence of a question, not a gap in one. */
296
+ none: boolean;
297
+ }
298
+ export type DemandApplyMode = 'day' | 'every' | 'weekday' | 'weekdays' | 'custom';
299
+ export interface NoticeBanner {
300
+ variant: 'holiday' | 'info' | 'warning';
301
+ dayIdx: number;
302
+ label: string;
303
+ detail: string;
304
+ action?: string;
305
+ }
306
+ /** One Auto-Schedule suggestion: put `empId` on `dayIdx` for the given hours/position.
307
+ * Phase 2 only ever proposes filling an empty day (an open shift or a coverage gap),
308
+ * so there is no 'change'/'remove' kind like the mockup's fuller engine. */
309
+ export interface Proposal {
310
+ id: number;
311
+ empId: number;
312
+ dayIdx: number;
313
+ start: string;
314
+ end: string;
315
+ role: string;
316
+ /** Set when this proposal would fill a named OpenShift record. */
317
+ openId?: number;
318
+ status: 'pending' | 'rejected';
319
+ /** The week these belong to: its first day's date. Proposals are day positions, so without
320
+ * this they would appear on whichever week is showing. */
321
+ weekKey?: string;
322
+ /** Why this person, for the card's tooltip. */
323
+ reason?: string;
324
+ }
@@ -17,21 +17,21 @@ type __VLS_Props = {
17
17
  title?: string;
18
18
  };
19
19
  declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
20
- apply: () => any;
21
20
  "update-form": (payload: {
22
21
  builder: ConditionBuilder;
23
22
  form: unknown;
24
23
  }) => any;
24
+ apply: () => any;
25
25
  "update-inherit-mode": (payload: {
26
26
  builder: ConditionBuilder;
27
27
  mode: "inherit" | "custom";
28
28
  }) => any;
29
29
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
30
- onApply?: (() => any) | undefined;
31
30
  "onUpdate-form"?: ((payload: {
32
31
  builder: ConditionBuilder;
33
32
  form: unknown;
34
33
  }) => any) | undefined;
34
+ onApply?: (() => any) | undefined;
35
35
  "onUpdate-inherit-mode"?: ((payload: {
36
36
  builder: ConditionBuilder;
37
37
  mode: "inherit" | "custom";
@@ -14,17 +14,17 @@ type __VLS_Slots = {} & {
14
14
  section?: (props: typeof __VLS_1) => any;
15
15
  };
16
16
  declare const __VLS_component: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
17
- apply: () => any;
18
17
  "update-form": (payload: {
19
18
  builder: ConditionBuilder;
20
19
  form: unknown;
21
20
  }) => any;
21
+ apply: () => any;
22
22
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
23
- onApply?: (() => any) | undefined;
24
23
  "onUpdate-form"?: ((payload: {
25
24
  builder: ConditionBuilder;
26
25
  form: unknown;
27
26
  }) => any) | undefined;
27
+ onApply?: (() => any) | undefined;
28
28
  }>, {
29
29
  title: string;
30
30
  disable: boolean;
@@ -1,6 +1,6 @@
1
1
  import { type PropType } from 'vue';
2
2
  import type { HrmRestaurant } from '@/types/restaurant';
3
- import type { CheckboxOption } from '@/components/CheckboxInput.vue';
3
+ import type { Role } from '@/types/role';
4
4
  import type { IFdtoPermissionPosUser } from '@/types/team';
5
5
  declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
6
6
  modelValue: {
@@ -20,9 +20,13 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
20
20
  required: true;
21
21
  };
22
22
  roles: {
23
- type: PropType<CheckboxOption[]>;
23
+ type: PropType<Role[]>;
24
24
  required: true;
25
25
  };
26
+ usableRoleIds: {
27
+ type: PropType<string[] | null>;
28
+ default: null;
29
+ };
26
30
  posUserId: {
27
31
  type: StringConstructor;
28
32
  default: undefined;
@@ -47,9 +51,13 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
47
51
  required: true;
48
52
  };
49
53
  roles: {
50
- type: PropType<CheckboxOption[]>;
54
+ type: PropType<Role[]>;
51
55
  required: true;
52
56
  };
57
+ usableRoleIds: {
58
+ type: PropType<string[] | null>;
59
+ default: null;
60
+ };
53
61
  posUserId: {
54
62
  type: StringConstructor;
55
63
  default: undefined;
@@ -59,6 +67,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
59
67
  }>, {
60
68
  modelValue: IFdtoPermissionPosUser | null;
61
69
  fallbackPasscode: string;
70
+ usableRoleIds: string[] | null;
62
71
  posUserId: string;
63
72
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
64
73
  export default _default;