@feedmepos/mf-hrm-portal 2.3.0-dev.3 → 2.3.0-dev.30

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 (137) hide show
  1. package/dist/{ApprovalCodeList-SjyWZghY.js → ApprovalCodeList-CaDmeGvQ.js} +7 -7
  2. package/dist/{AuditLogList-aTI3QeO0.js → AuditLogList-hnICcJxN.js} +18 -19
  3. package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang--JTV7non.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-CM3AAsUP.js} +2 -2
  4. package/dist/{EmployeeList-D2Q_2ZE0.js → EmployeeList-DjfBIMQV.js} +255 -266
  5. package/dist/{FormItem.vue_vue_type_script_setup_true_lang-CUnlKsxk.js → FormItem.vue_vue_type_script_setup_true_lang-CTGlmY6t.js} +6 -6
  6. package/dist/{GrantUserList-6YXLPuHR.js → GrantUserList-DH1HXfV4.js} +8 -8
  7. package/dist/{Main-dSqOeBRJ.js → Main-1GboTunP.js} +11 -11
  8. package/dist/{Main-B-a6F9g8.js → Main-C4S5bpnK.js} +8 -8
  9. package/dist/{Main-CFIWlIaC.js → Main-D0o-aQHX.js} +5 -5
  10. package/dist/{PermissionSetList-DxkaPCMs.js → PermissionSetList-CSONq6qt.js} +19 -18
  11. package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-fU3Feetb.js +4167 -0
  12. package/dist/{PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-fe-Rdwn4.js → PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-DQcgZ0nF.js} +1 -1
  13. package/dist/ResponsiveContextMenu.vue_vue_type_script_setup_true_lang-mSJFKo7r.js +132 -0
  14. package/dist/{RoleList-DQZ_w5uM.js → RoleList-WdgayfhL.js} +21 -20
  15. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-Bx1P_UAW.js +530 -0
  16. package/dist/ScheduleGeneralPage-XUX2-_Vc.js +776 -0
  17. package/dist/ScheduleModal.vue_vue_type_script_setup_true_lang-CECio4Kc.js +2457 -0
  18. package/dist/SchedulePage-LQ7-8VUw.js +19366 -0
  19. package/dist/{SchedulePositionPage-BGrZBU3g.js → SchedulePositionPage-DcUbTYV6.js} +79 -81
  20. package/dist/{SelectFilter-CG13h83-.js → SelectFilter-BbkPuYP_.js} +1 -1
  21. package/dist/{TeamMemberList-BiTHVJwE.js → TeamMemberList-BMdMDYBF.js} +27 -27
  22. package/dist/{TimesheetList-CUkYacGW.js → TimesheetList-B6vZEmgb.js} +52 -53
  23. package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-B1Y587O-.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-Bna8vHO7.js} +3 -3
  24. package/dist/{app-CAKCDrbJ.js → app-DwBKX4e9.js} +2891 -2474
  25. package/dist/app.js +1 -1
  26. package/dist/{approval-code-C9DmR4Md.js → approval-code-BXUiojPH.js} +1 -1
  27. package/dist/{dayjs.min-CZ8QYRoc.js → dayjs.min-DAKzxOMD.js} +1 -1
  28. package/dist/{employee-D56eWEFe.js → employee-GhYyAhwS.js} +51 -47
  29. package/dist/{grant-user-Bv-pJ9Wt.js → grant-user-CBJ3gEgW.js} +1 -1
  30. package/dist/{iteration-BVJdyLNq.js → iteration-Da8377p8.js} +1 -1
  31. package/dist/{lodash-BcIRkQPW.js → lodash-DChu1GU2.js} +1 -1
  32. package/dist/object-Dwyg2LgX.js +16 -0
  33. package/dist/{restaurant-D7PEQjPY.js → restaurant-D2mfKHaH.js} +48 -48
  34. package/dist/{role-B-eZDaBX.js → role-CyynUSdG.js} +2 -2
  35. package/dist/{rule-D6AIfx8b.js → rule-Cnn7MV1z.js} +3 -3
  36. package/dist/src/api/employee/index.d.ts +2 -2
  37. package/dist/src/api/schedule/index.d.ts +17 -2
  38. package/dist/src/components/layout/SchedulePromoBanner.vue.d.ts +2 -0
  39. package/dist/src/composables/useDiscardConfirm.d.ts +3 -1
  40. package/dist/src/composables/useMessage.d.ts +8 -2
  41. package/dist/src/stores/employee.d.ts +12 -12
  42. package/dist/src/types/schedule.d.ts +3 -4
  43. package/dist/src/views/audit-log/locales/index.d.ts +252 -0
  44. package/dist/src/views/scheduling/components/ScheduleAreaRows.vue.d.ts +4 -8
  45. package/dist/src/views/scheduling/components/{ScheduleAssignEmployeePopover.vue.d.ts → ScheduleAutoScheduleDetailsModal.vue.d.ts} +2 -2
  46. package/dist/src/views/scheduling/components/ScheduleAutoScheduleDoneArt.vue.d.ts +2 -0
  47. package/dist/src/views/scheduling/components/ScheduleBoardAreaRows.vue.d.ts +1 -4
  48. package/dist/src/views/scheduling/components/ScheduleBoardEditOverlays.vue.d.ts +0 -2
  49. package/dist/src/views/scheduling/components/ScheduleBoardEmployeeRows.vue.d.ts +0 -7
  50. package/dist/src/views/scheduling/components/ScheduleBoardGridHeader.vue.d.ts +5 -0
  51. package/dist/src/views/scheduling/components/ScheduleBoardInteractionOverlays.vue.d.ts +2 -6
  52. package/dist/src/views/scheduling/components/ScheduleBoardOnboardingOverlays.vue.d.ts +1 -0
  53. package/dist/src/views/scheduling/components/ScheduleBoardToolbar.vue.d.ts +0 -1
  54. package/dist/src/views/scheduling/components/ScheduleCompletionDialog.vue.d.ts +1 -1
  55. package/dist/src/views/scheduling/components/ScheduleConfirmModal.vue.d.ts +4 -1
  56. package/dist/src/views/scheduling/components/ScheduleContextMenu.vue.d.ts +1 -5
  57. package/dist/src/views/scheduling/components/ScheduleDayTimeline.vue.d.ts +5 -0
  58. package/dist/src/views/scheduling/components/ScheduleLoadState.vue.d.ts +0 -1
  59. package/dist/src/views/scheduling/components/ScheduleOnboardingAssignPositionModal.vue.d.ts +6 -0
  60. package/dist/src/views/scheduling/components/ScheduleOnboardingSettings.vue.d.ts +6 -0
  61. package/dist/src/views/scheduling/components/SchedulePublishShareArt.vue.d.ts +2 -0
  62. package/dist/src/views/scheduling/components/ScheduleSelect.vue.d.ts +10 -0
  63. package/dist/src/views/scheduling/components/ScheduleShiftPopover.vue.d.ts +1 -1
  64. package/dist/src/views/scheduling/components/ScheduleStaffRows.vue.d.ts +0 -10
  65. package/dist/src/views/scheduling/composables/auto-schedule-mapping.d.ts +33 -0
  66. package/dist/src/views/scheduling/composables/onboarding-types.d.ts +2 -1
  67. package/dist/src/views/scheduling/composables/remyPrompt.d.ts +15 -0
  68. package/dist/src/views/scheduling/composables/schedule-add-employee-form.d.ts +12 -8
  69. package/dist/src/views/scheduling/composables/schedule-board-helpers.d.ts +4 -0
  70. package/dist/src/views/scheduling/composables/schedule-day-meta.d.ts +1 -3
  71. package/dist/src/views/scheduling/composables/schedule-demand-domain.d.ts +13 -1
  72. package/dist/src/views/scheduling/composables/schedule-error.d.ts +1 -0
  73. package/dist/src/views/scheduling/composables/schedule-quick-pick.d.ts +22 -0
  74. package/dist/src/views/scheduling/composables/schedule-shift-time.d.ts +3 -0
  75. package/dist/src/views/scheduling/composables/useRemyAppStore.d.ts +16 -0
  76. package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +46 -11
  77. package/dist/src/views/scheduling/composables/useScheduleAddPick.d.ts +3 -11
  78. package/dist/src/views/scheduling/composables/useScheduleAreaBoard.d.ts +0 -13
  79. package/dist/src/views/scheduling/composables/useScheduleAreaDragDrop.d.ts +2 -9
  80. package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +126 -4
  81. package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +86 -11
  82. package/dist/src/views/scheduling/composables/useScheduleCopyWeek.d.ts +3 -10
  83. package/dist/src/views/scheduling/composables/useScheduleCostRail.d.ts +13 -1
  84. package/dist/src/views/scheduling/composables/useScheduleDayNote.d.ts +0 -1
  85. package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +16 -5
  86. package/dist/src/views/scheduling/composables/useScheduleDemand.d.ts +3 -5
  87. package/dist/src/views/scheduling/composables/useScheduleDemandSheet.d.ts +14 -3
  88. package/dist/src/views/scheduling/composables/useScheduleDragDrop.d.ts +1 -0
  89. package/dist/src/views/scheduling/composables/useScheduleEmployeeAccess.d.ts +20 -7
  90. package/dist/src/views/scheduling/composables/useScheduleEmployeeAvailability.d.ts +1 -1
  91. package/dist/src/views/scheduling/composables/useScheduleEmployeeCandidates.d.ts +26 -3
  92. package/dist/src/views/scheduling/composables/useScheduleEmployeePersistence.d.ts +7 -0
  93. package/dist/src/views/scheduling/composables/useScheduleEmployeeValidation.d.ts +2 -2
  94. package/dist/src/views/scheduling/composables/useScheduleGapPopover.d.ts +2 -0
  95. package/dist/src/views/scheduling/composables/useScheduleOnboardingDemand.d.ts +1 -1
  96. package/dist/src/views/scheduling/composables/useScheduleOnboardingEmployees.d.ts +48 -4
  97. package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +425 -29
  98. package/dist/src/views/scheduling/composables/useScheduleOutlet.d.ts +11 -8
  99. package/dist/src/views/scheduling/composables/useSchedulePageActions.d.ts +1 -1
  100. package/dist/src/views/scheduling/composables/useSchedulePageCellDrop.d.ts +3 -1
  101. package/dist/src/views/scheduling/composables/useSchedulePageClearActions.d.ts +1 -0
  102. package/dist/src/views/scheduling/composables/useSchedulePageOverlays.d.ts +0 -4
  103. package/dist/src/views/scheduling/composables/useSchedulePositionModal.d.ts +1 -0
  104. package/dist/src/views/scheduling/composables/useSchedulePositions.d.ts +7 -1
  105. package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +3 -0
  106. package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +70 -4
  107. package/dist/src/views/scheduling/composables/useScheduleSettings.d.ts +7 -2
  108. package/dist/src/views/scheduling/composables/useScheduleSetupBanner.d.ts +2 -2
  109. package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +41 -3
  110. package/dist/src/views/scheduling/composables/useScheduleShiftDraft.d.ts +1 -0
  111. package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +47 -6
  112. package/dist/src/views/scheduling/country-rules/index.d.ts +9 -4
  113. package/dist/src/views/scheduling/data.d.ts +22 -1
  114. package/dist/src/views/scheduling/locales/index.d.ts +28 -0
  115. package/dist/src/views/scheduling/schedule-state.d.ts +362 -298
  116. package/dist/src/views/scheduling/schedule-store.d.ts +41 -12
  117. package/dist/src/views/scheduling/types.d.ts +33 -5
  118. package/dist/style.css +1 -1
  119. package/dist/tsconfig.app.tsbuildinfo +1 -1
  120. package/dist/{useAppStore-d_nHyK5u.js → useAppStore-DZCdxlCd.js} +1 -1
  121. package/dist/useDiscardConfirm-CzZSPyvh.js +28 -0
  122. package/dist/{useLoading-JFoghhRz.js → useLoading-Nygx2zn8.js} +1 -1
  123. package/dist/{useReportPermissions-DHA0jrIr.js → useReportPermissions-B3OMJ4QX.js} +3 -3
  124. package/package.json +3 -2
  125. package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-DnKckKZ0.js +0 -4167
  126. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-Dr6QruG6.js +0 -470
  127. package/dist/ScheduleGeneralPage-CvskrXcV.js +0 -666
  128. package/dist/ScheduleModal.vue_vue_type_script_setup_true_lang-C4On5sVD.js +0 -2157
  129. package/dist/SchedulePage-CW-K836l.js +0 -18248
  130. package/dist/_plugin-vue_export-helper-CHgC5LLL.js +0 -9
  131. package/dist/src/views/scheduling/components/ScheduleAllShiftsRow.vue.d.ts +0 -22
  132. package/dist/src/views/scheduling/components/ScheduleStackPopover.vue.d.ts +0 -14
  133. package/dist/src/views/scheduling/composables/scheduleAutoSolver.d.ts +0 -23
  134. package/dist/src/views/scheduling/composables/useScheduleAllShiftsRow.d.ts +0 -77
  135. package/dist/src/views/scheduling/composables/useScheduleAssign.d.ts +0 -124
  136. package/dist/src/views/scheduling/composables/useScheduleOpenShiftCard.d.ts +0 -23
  137. package/dist/useDiscardConfirm-DPhEV6v0.js +0 -157
@@ -13,8 +13,9 @@ export interface ScheduleAutoScheduleOptions {
13
13
  followPatterns: boolean;
14
14
  costEfficient: boolean;
15
15
  }
16
- /** Backend-powered draft generation and local proposal review. Generation never writes;
17
- * accepted proposals use the board's existing assignment persistence path. */
16
+ /** Backend-powered draft generation and local proposal review — the engine lives in hr-backend;
17
+ * this composable only maps its result onto the board and lets a manager review it. Generation
18
+ * never writes; accepted proposals use the board's existing assignment persistence path. */
18
19
  export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand: ScheduleDemandApi): {
19
20
  wizardOpen: import("vue").Ref<boolean, boolean>;
20
21
  step: import("vue").Ref<ScheduleAutoScheduleStep, ScheduleAutoScheduleStep>;
@@ -29,14 +30,36 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
29
30
  generating: import("vue").Ref<boolean, boolean>;
30
31
  generateError: import("vue").Ref<string | null, string | null>;
31
32
  result: import("vue").Ref<{
33
+ objective: "BALANCED" | "SERVICE" | "LOWER_COST" | "STABLE_HOURS";
34
+ allowOvertime: boolean;
35
+ model: string | null;
32
36
  proposals: {
37
+ rejectReason?: string | null | undefined | undefined;
33
38
  date: string;
34
39
  startTime: string;
35
40
  endTime: string;
36
41
  employeeId: string;
42
+ positionId: string | null;
43
+ employeeName: string;
37
44
  position: string;
45
+ reason: string;
38
46
  }[];
39
47
  unfilledCount: number;
48
+ unfilledNeeds: {
49
+ date: string;
50
+ startTime: string;
51
+ endTime: string;
52
+ position: string | null;
53
+ short: number;
54
+ excluded: {
55
+ occupied: number;
56
+ notQualified: number;
57
+ weeklyCap: number;
58
+ dailyCap: number;
59
+ rest: number;
60
+ dayOff: number;
61
+ };
62
+ }[];
40
63
  metrics: {
41
64
  minimumCoveragePercent: number;
42
65
  recommendedCoveragePercent: number;
@@ -64,15 +87,45 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
64
87
  };
65
88
  explanations: string[];
66
89
  solver: string;
90
+ week: {
91
+ from: string;
92
+ to: string;
93
+ };
94
+ timing: {
95
+ totalMs: number;
96
+ modelMs: number | null;
97
+ };
67
98
  } | null, {
99
+ objective: "BALANCED" | "SERVICE" | "LOWER_COST" | "STABLE_HOURS";
100
+ allowOvertime: boolean;
101
+ model: string | null;
68
102
  proposals: {
103
+ rejectReason?: string | null | undefined;
69
104
  date: string;
70
105
  startTime: string;
71
106
  endTime: string;
72
107
  employeeId: string;
108
+ positionId: string | null;
109
+ employeeName: string;
73
110
  position: string;
111
+ reason: string;
74
112
  }[];
75
113
  unfilledCount: number;
114
+ unfilledNeeds: {
115
+ date: string;
116
+ startTime: string;
117
+ endTime: string;
118
+ position: string | null;
119
+ short: number;
120
+ excluded: {
121
+ occupied: number;
122
+ notQualified: number;
123
+ weeklyCap: number;
124
+ dailyCap: number;
125
+ rest: number;
126
+ dayOff: number;
127
+ };
128
+ }[];
76
129
  metrics: {
77
130
  minimumCoveragePercent: number;
78
131
  recommendedCoveragePercent: number;
@@ -100,15 +153,45 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
100
153
  };
101
154
  explanations: string[];
102
155
  solver: string;
156
+ week: {
157
+ from: string;
158
+ to: string;
159
+ };
160
+ timing: {
161
+ totalMs: number;
162
+ modelMs: number | null;
163
+ };
103
164
  } | {
165
+ objective: "BALANCED" | "SERVICE" | "LOWER_COST" | "STABLE_HOURS";
166
+ allowOvertime: boolean;
167
+ model: string | null;
104
168
  proposals: {
169
+ rejectReason?: string | null | undefined | undefined;
105
170
  date: string;
106
171
  startTime: string;
107
172
  endTime: string;
108
173
  employeeId: string;
174
+ positionId: string | null;
175
+ employeeName: string;
109
176
  position: string;
177
+ reason: string;
110
178
  }[];
111
179
  unfilledCount: number;
180
+ unfilledNeeds: {
181
+ date: string;
182
+ startTime: string;
183
+ endTime: string;
184
+ position: string | null;
185
+ short: number;
186
+ excluded: {
187
+ occupied: number;
188
+ notQualified: number;
189
+ weeklyCap: number;
190
+ dailyCap: number;
191
+ rest: number;
192
+ dayOff: number;
193
+ };
194
+ }[];
112
195
  metrics: {
113
196
  minimumCoveragePercent: number;
114
197
  recommendedCoveragePercent: number;
@@ -136,17 +219,26 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
136
219
  };
137
220
  explanations: string[];
138
221
  solver: string;
222
+ week: {
223
+ from: string;
224
+ to: string;
225
+ };
226
+ timing: {
227
+ totalMs: number;
228
+ modelMs: number | null;
229
+ };
139
230
  } | null>;
140
231
  gapCount: import("vue").ComputedRef<number>;
141
232
  hasDemand: import("vue").ComputedRef<boolean>;
142
233
  noDemandOpen: import("vue").Ref<boolean, boolean>;
143
234
  rangeLabel: import("vue").ComputedRef<string>;
144
- openWizard: () => void;
235
+ openWizard: (fromSetup?: boolean) => void;
145
236
  closeWizard: () => void;
146
237
  next: () => void;
147
238
  back: () => void;
148
239
  generate: () => Promise<void>;
149
240
  reviewMode: import("vue").ComputedRef<boolean>;
241
+ hasPendingChanges: import("vue").ComputedRef<boolean>;
150
242
  proposals: import("vue").ComputedRef<{
151
243
  id: number;
152
244
  empId: number;
@@ -154,10 +246,12 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
154
246
  start: string;
155
247
  end: string;
156
248
  role: string;
249
+ positionId?: string | null | undefined;
157
250
  openId?: number | undefined;
158
251
  status: "pending" | "rejected";
159
252
  weekKey?: string | undefined;
160
253
  reason?: string | undefined;
254
+ rejectReason?: string | undefined;
161
255
  }[]>;
162
256
  weekHasProposals: import("vue").ComputedRef<boolean>;
163
257
  unmetCount: import("vue").Ref<number, number>;
@@ -174,6 +268,34 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
174
268
  toggleReject: (id: number) => void;
175
269
  rejectAll: () => void;
176
270
  exitReview: () => void;
177
- apply: () => number;
271
+ completionOpen: import("vue").Ref<boolean, boolean>;
272
+ completionCount: import("vue").Ref<number, number>;
273
+ completionPublished: import("vue").Ref<boolean, boolean>;
274
+ completionFromSetup: import("vue").Ref<boolean, boolean>;
275
+ closeCompletion: () => void;
276
+ leaveReviewOpen: import("vue").Ref<boolean, boolean>;
277
+ confirmLeaveReview: () => void;
278
+ cancelLeaveReview: () => void;
279
+ apply: (showCompletion?: boolean, status?: "DRAFT" | "PUBLISHED") => Promise<number | null>;
280
+ applying: import("vue").Ref<boolean, boolean>;
281
+ applyRejections: import("vue").Ref<{
282
+ employeeName: string;
283
+ day: string;
284
+ time: string;
285
+ message: string;
286
+ }[], {
287
+ employeeName: string;
288
+ day: string;
289
+ time: string;
290
+ message: string;
291
+ }[] | {
292
+ employeeName: string;
293
+ day: string;
294
+ time: string;
295
+ message: string;
296
+ }[]>;
297
+ applyError: import("vue").Ref<string | null, string | null>;
298
+ detailsOpen: import("vue").Ref<boolean, boolean>;
299
+ toggleDetails: () => void;
178
300
  };
179
301
  export type ScheduleAutoScheduleApi = ReturnType<typeof useScheduleAutoSchedule>;
@@ -1,21 +1,19 @@
1
1
  import type { Employee, OpenShift, PendingChange, ScheduleStatusInfo, ScheduleVersion, ScheduleVersionSnapshot, Section, WorkSlot } from '../types';
2
2
  import { RANGE_LEN } from './schedule-week-cache';
3
- import { contractCapFor, isGenuineSplitGroup, isLeaveSlot, isPartTime, isoDateKey, isWorkSlot, overContract, positionKeyOf, workSlotsOf } from './schedule-board-helpers';
4
- export { contractCapFor, isGenuineSplitGroup, isLeaveSlot, isPartTime, isoDateKey, isWorkSlot, overContract, positionKeyOf, workSlotsOf, };
3
+ import { contractCapFor, isGenuineSplitGroup, isLeaveSlot, isPartTime, isoDateKey, isWorkSlot, overContract, overlapsAnotherSlot, positionKeyOf, workSlotsOf } from './schedule-board-helpers';
4
+ export { contractCapFor, isGenuineSplitGroup, isLeaveSlot, isPartTime, isoDateKey, isWorkSlot, overContract, overlapsAnotherSlot, positionKeyOf, workSlotsOf, };
5
5
  export { RANGE_LEN };
6
6
  export type ScheduleGranularity = 'day' | 'week';
7
7
  export declare function useScheduleBoard(handlers?: {
8
8
  onPersistError?: (message: string) => void;
9
9
  }): {
10
10
  dayNote: (dayIdx: number) => import("../types").ScheduleDayNote | null;
11
- setDayNote: (dayIdx: number, title: string, desc: string) => void;
11
+ setDayNote: (dayIdx: number, title: string, desc: string, isPublicHoliday?: boolean) => void;
12
12
  clearDayNote: (dayIdx: number) => void;
13
13
  isStandingClosedWeekday: (dayIdx: number) => boolean;
14
14
  holidayName: (dayIdx: number) => string | null;
15
- holidayIsAuto: (dayIdx: number) => boolean;
16
15
  isPublicHoliday: (dayIdx: number) => boolean;
17
16
  holidayRateApplies: (dayIdx: number) => boolean;
18
- setHolidayNormal: (dayIdx: number, toNormal: boolean) => void;
19
17
  setPublicHoliday: (dayIdx: number, on: boolean) => void;
20
18
  otRateOn: (dayIdx: number) => number;
21
19
  regularRateOn: (dayIdx: number) => number;
@@ -33,10 +31,12 @@ export declare function useScheduleBoard(handlers?: {
33
31
  contractHours?: number | undefined;
34
32
  rate: number;
35
33
  positions: string[];
34
+ archivedPositions?: string[] | undefined;
36
35
  shifts: ({
37
36
  start: string;
38
37
  end: string;
39
38
  role: string;
39
+ positionId?: string | undefined;
40
40
  status: import("../types").ShiftStatus;
41
41
  clock?: {
42
42
  in: string | null;
@@ -85,6 +85,7 @@ export declare function useScheduleBoard(handlers?: {
85
85
  start: string;
86
86
  end: string;
87
87
  role: string;
88
+ positionId?: string | undefined;
88
89
  status: import("../types").ShiftStatus;
89
90
  clock?: {
90
91
  in: string | null;
@@ -109,6 +110,28 @@ export declare function useScheduleBoard(handlers?: {
109
110
  updatedAt?: string | undefined;
110
111
  splitGroupId?: string | undefined;
111
112
  }[] | null)[];
113
+ timeOff?: ({
114
+ timeOff: "approved" | "pending";
115
+ requestId?: string | undefined;
116
+ type?: "OFF_DAY" | "LEAVE" | undefined;
117
+ leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
118
+ reason: string;
119
+ half?: boolean | undefined;
120
+ halfPart?: "AM" | "PM" | undefined;
121
+ from?: string | undefined;
122
+ to?: string | undefined;
123
+ appliedOn?: string | undefined;
124
+ note?: string | undefined;
125
+ cert?: {
126
+ name: string;
127
+ size: string;
128
+ } | null | undefined;
129
+ bal?: {
130
+ type: string;
131
+ entitled: number;
132
+ used: number;
133
+ } | undefined;
134
+ } | null)[] | undefined;
112
135
  remarks: {
113
136
  author: string;
114
137
  date: string;
@@ -123,9 +146,16 @@ export declare function useScheduleBoard(handlers?: {
123
146
  payBasis?: "hourly" | "monthly" | undefined;
124
147
  payAmount?: number | undefined;
125
148
  maxHours?: number | undefined;
126
- maxOtHours?: number | undefined;
127
149
  minHours?: number | undefined;
128
- otAfterDaily?: number | undefined;
150
+ minHoursPerDay?: number | undefined;
151
+ workingHours?: {
152
+ minHoursPerDay: number | null;
153
+ maxHoursPerDay: number | null;
154
+ maxHoursPerWeek: number | null;
155
+ } | undefined;
156
+ overtime?: {
157
+ maxHoursPerMonth: number | null;
158
+ } | undefined;
129
159
  preferences?: string[] | undefined;
130
160
  seniority?: "senior" | "junior" | "" | undefined;
131
161
  availDays?: boolean[] | undefined;
@@ -134,6 +164,7 @@ export declare function useScheduleBoard(handlers?: {
134
164
  to: string;
135
165
  }[] | undefined;
136
166
  passcode?: string | undefined;
167
+ code?: string | undefined;
137
168
  masterUser?: boolean | undefined;
138
169
  }[], Employee[] | {
139
170
  id: number;
@@ -148,10 +179,12 @@ export declare function useScheduleBoard(handlers?: {
148
179
  contractHours?: number | undefined;
149
180
  rate: number;
150
181
  positions: string[];
182
+ archivedPositions?: string[] | undefined;
151
183
  shifts: ({
152
184
  start: string;
153
185
  end: string;
154
186
  role: string;
187
+ positionId?: string | undefined;
155
188
  status: import("../types").ShiftStatus;
156
189
  clock?: {
157
190
  in: string | null;
@@ -200,6 +233,7 @@ export declare function useScheduleBoard(handlers?: {
200
233
  start: string;
201
234
  end: string;
202
235
  role: string;
236
+ positionId?: string | undefined;
203
237
  status: import("../types").ShiftStatus;
204
238
  clock?: {
205
239
  in: string | null;
@@ -224,6 +258,28 @@ export declare function useScheduleBoard(handlers?: {
224
258
  updatedAt?: string | undefined;
225
259
  splitGroupId?: string | undefined;
226
260
  }[] | null)[];
261
+ timeOff?: ({
262
+ timeOff: "approved" | "pending";
263
+ requestId?: string | undefined;
264
+ type?: "OFF_DAY" | "LEAVE" | undefined;
265
+ leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
266
+ reason: string;
267
+ half?: boolean | undefined;
268
+ halfPart?: "AM" | "PM" | undefined;
269
+ from?: string | undefined;
270
+ to?: string | undefined;
271
+ appliedOn?: string | undefined;
272
+ note?: string | undefined;
273
+ cert?: {
274
+ name: string;
275
+ size: string;
276
+ } | null | undefined;
277
+ bal?: {
278
+ type: string;
279
+ entitled: number;
280
+ used: number;
281
+ } | undefined;
282
+ } | null)[] | undefined;
227
283
  remarks: {
228
284
  author: string;
229
285
  date: string;
@@ -238,9 +294,16 @@ export declare function useScheduleBoard(handlers?: {
238
294
  payBasis?: "hourly" | "monthly" | undefined;
239
295
  payAmount?: number | undefined;
240
296
  maxHours?: number | undefined;
241
- maxOtHours?: number | undefined;
242
297
  minHours?: number | undefined;
243
- otAfterDaily?: number | undefined;
298
+ minHoursPerDay?: number | undefined;
299
+ workingHours?: {
300
+ minHoursPerDay: number | null;
301
+ maxHoursPerDay: number | null;
302
+ maxHoursPerWeek: number | null;
303
+ } | undefined;
304
+ overtime?: {
305
+ maxHoursPerMonth: number | null;
306
+ } | undefined;
244
307
  preferences?: string[] | undefined;
245
308
  seniority?: "senior" | "junior" | "" | undefined;
246
309
  availDays?: boolean[] | undefined;
@@ -249,6 +312,7 @@ export declare function useScheduleBoard(handlers?: {
249
312
  to: string;
250
313
  }[] | undefined;
251
314
  passcode?: string | undefined;
315
+ code?: string | undefined;
252
316
  masterUser?: boolean | undefined;
253
317
  }[]>;
254
318
  sections: import("vue").Ref<{
@@ -299,12 +363,14 @@ export declare function useScheduleBoard(handlers?: {
299
363
  dayIdx: number;
300
364
  kind: "add" | "change" | "remove";
301
365
  label: string;
366
+ conflict?: boolean | undefined;
302
367
  }[], PendingChange[] | {
303
368
  empId: number;
304
369
  employeeKey: string;
305
370
  dayIdx: number;
306
371
  kind: "add" | "change" | "remove";
307
372
  label: string;
373
+ conflict?: boolean | undefined;
308
374
  }[]>;
309
375
  unpublishedChanges: import("vue").ComputedRef<PendingChange[]>;
310
376
  persistPublish: (items: Array<{
@@ -329,6 +395,7 @@ export declare function useScheduleBoard(handlers?: {
329
395
  start: string;
330
396
  end: string;
331
397
  role: string;
398
+ positionId?: string | undefined;
332
399
  status: import("../types").ShiftStatus;
333
400
  clock?: {
334
401
  in: string | null;
@@ -377,6 +444,7 @@ export declare function useScheduleBoard(handlers?: {
377
444
  start: string;
378
445
  end: string;
379
446
  role: string;
447
+ positionId?: string | undefined;
380
448
  status: import("../types").ShiftStatus;
381
449
  clock?: {
382
450
  in: string | null;
@@ -417,6 +485,7 @@ export declare function useScheduleBoard(handlers?: {
417
485
  start: string;
418
486
  end: string;
419
487
  role: string;
488
+ positionId?: string | undefined;
420
489
  status: import("../types").ShiftStatus;
421
490
  clock?: {
422
491
  in: string | null;
@@ -465,6 +534,7 @@ export declare function useScheduleBoard(handlers?: {
465
534
  start: string;
466
535
  end: string;
467
536
  role: string;
537
+ positionId?: string | undefined;
468
538
  status: import("../types").ShiftStatus;
469
539
  clock?: {
470
540
  in: string | null;
@@ -510,6 +580,7 @@ export declare function useScheduleBoard(handlers?: {
510
580
  rangeLabel: import("vue").ComputedRef<string>;
511
581
  isToday: (dayIdx: number) => boolean;
512
582
  dateKey: (dayIdx: number) => string | null;
583
+ dateKeyAt: (offset: number, dayIdx: number) => string | null;
513
584
  navigate: (delta: number) => void;
514
585
  goToday: () => void;
515
586
  membersOf: (sectionId: string) => Employee[];
@@ -524,12 +595,16 @@ export declare function useScheduleBoard(handlers?: {
524
595
  clearEmployeeShifts: (empId: number) => {
525
596
  shifts: number;
526
597
  };
527
- moveShift: (fromEmpId: number, fromDayIdx: number, toEmpId: number, toDayIdx: number, fromSlotIndex?: number, fromSlotCount?: number) => boolean;
598
+ moveShift: (fromEmpId: number, fromDayIdx: number, toEmpId: number, toDayIdx: number, fromSlotIndex?: number, fromSlotCount?: number, targetPosition?: string, allowLocked?: boolean) => boolean;
528
599
  swapShifts: (empIdA: number, empIdB: number, dayA: number, dayB?: number, slotIndexA?: number, slotIndexB?: number, slotCountA?: number) => boolean;
529
- clearShiftsInRange: () => {
600
+ swapPositions: (empIdA: number, empIdB: number, dayA: number, dayB?: number, slotIndexA?: number, slotIndexB?: number, slotCountA?: number) => boolean;
601
+ clearShiftsInRange: (options?: {
602
+ persist?: boolean;
603
+ }) => {
530
604
  shifts: number;
531
605
  open: number;
532
606
  leave: number;
607
+ assignmentIds: string[];
533
608
  };
534
609
  requiredFor: (dayIdx: number, position: string) => number;
535
610
  scheduledFor: (dayIdx: number, position: string) => number;
@@ -1,19 +1,12 @@
1
1
  import type { ScheduleBoardApi } from './useScheduleBoard';
2
- export interface ScheduleCopySkipReport {
3
- leave: number;
4
- already: number;
5
- hours: number;
6
- full: number;
7
- closed: number;
8
- }
9
2
  /** The mockup's Copy schedule feature (copyLastWeek/copyThisWeekForward), ported against this
10
- * board's per-week-offset bucket cache instead of the mockup's absolute 91-day horizon. Split
11
- * shifts (copyUnitsOf in the mockup) aren't ported — WorkSlot has no splitId concept in this
12
- * data model, so each slot is copied as its own unit. */
3
+ * board's per-week-offset bucket cache instead of the mockup's absolute 91-day horizon. */
13
4
  export declare function useScheduleCopyWeek(board: ScheduleBoardApi, handlers?: {
14
5
  onDemandChanged?: () => void;
6
+ onConfirmOverwrite?: (message: string, onConfirm: () => void) => void;
15
7
  }): {
16
8
  copyLastWeek: (mode: "staffed" | "open") => Promise<void>;
17
9
  copyThisWeekForward: (mode: "staffed" | "open") => Promise<void>;
10
+ isCopying: import("vue").Ref<boolean, boolean>;
18
11
  };
19
12
  export type ScheduleCopyWeekApi = ReturnType<typeof useScheduleCopyWeek>;
@@ -27,8 +27,17 @@ export interface ScheduleOtRisk {
27
27
  empId: number;
28
28
  name: string;
29
29
  hours: number;
30
+ otHours: number;
30
31
  contract: number;
31
32
  }
33
+ export interface ScheduleMonthlyOtSummary {
34
+ key: string;
35
+ label: string;
36
+ used: number;
37
+ cap: number | null;
38
+ progress: number;
39
+ high: boolean;
40
+ }
32
41
  /** The staff rail consumes the same employee identity/load derivation as the area view. */
33
42
  export type ScheduleRailRow = ScheduleEmployeeLoad;
34
43
  /** Weekly labour cost + monthly OT gauge for the collapsible cost rail, built off one
@@ -41,7 +50,10 @@ export declare function useScheduleCostRail(board: ScheduleBoardApi, proposalAt?
41
50
  weeklyCost: import("vue").ComputedRef<number>;
42
51
  otHours: import("vue").ComputedRef<number>;
43
52
  monthlyOtUsed: import("vue").ComputedRef<number>;
44
- monthlyOtCapHours: number;
53
+ monthlyOtSummaries: import("vue").ComputedRef<ScheduleMonthlyOtSummary[]>;
54
+ monthlyOtCapHours: import("vue").ComputedRef<number | null>;
55
+ monthlyOtProgress: import("vue").ComputedRef<number>;
56
+ monthlyOtHigh: import("vue").ComputedRef<boolean>;
45
57
  bySection: import("vue").ComputedRef<ScheduleSectionCost[]>;
46
58
  otRisk: import("vue").ComputedRef<ScheduleOtRisk[]>;
47
59
  };
@@ -33,7 +33,6 @@ export declare function useScheduleDayNote(board: ScheduleBoardApi, opts?: Sched
33
33
  savedNote: import("vue").ComputedRef<import("../types").ScheduleDayNote | null>;
34
34
  hasSaved: import("vue").ComputedRef<boolean>;
35
35
  whenLabel: import("vue").ComputedRef<string>;
36
- isAuto: import("vue").ComputedRef<boolean>;
37
36
  rateApplies: import("vue").ComputedRef<boolean>;
38
37
  holidayHint: import("vue").ComputedRef<string>;
39
38
  openFor: (dayIdx: number, anchor: HTMLElement) => void;
@@ -2,14 +2,19 @@ import type { ScheduleBoardApi } from './useScheduleBoard';
2
2
  import type { ScheduleRosterApi } from './useScheduleRoster';
3
3
  import type { ScheduleAreaBoardApi } from './useScheduleAreaBoard';
4
4
  import type { ScheduleDemandApi } from './useScheduleDemand';
5
+ import { type ScheduleEmployeeLoad } from './useScheduleEmployeeIdentity';
5
6
  declare function minToHHMM(m: number): string;
6
7
  export interface ScheduleTimelineBar {
7
8
  key: string;
9
+ start: number;
10
+ end: number;
8
11
  left: number;
9
12
  width: number;
10
13
  cls: string;
11
14
  label: string;
15
+ labels?: string[];
12
16
  sub?: string;
17
+ conflict?: boolean;
13
18
  title: string;
14
19
  brk?: {
15
20
  left: number;
@@ -17,6 +22,8 @@ export interface ScheduleTimelineBar {
17
22
  };
18
23
  laneTop?: number;
19
24
  laneHeight?: number;
25
+ employeeId?: number;
26
+ slotIndex?: number;
20
27
  onClick?: () => void;
21
28
  }
22
29
  export interface ScheduleTimelineRow {
@@ -27,6 +34,7 @@ export interface ScheduleTimelineRow {
27
34
  avatarInitials?: string;
28
35
  avatarColor?: string;
29
36
  employeeId?: number;
37
+ employeeLoad?: ScheduleEmployeeLoad;
30
38
  roleLabel?: string;
31
39
  hoursLabel?: string;
32
40
  hoursPct?: number;
@@ -34,9 +42,14 @@ export interface ScheduleTimelineRow {
34
42
  name: string;
35
43
  sub: string;
36
44
  bars: ScheduleTimelineBar[];
45
+ pastDay?: boolean;
46
+ lockedDay?: boolean;
47
+ closedDay?: boolean;
48
+ availabilityDay?: boolean;
49
+ availabilityLabel?: string;
37
50
  minHeight?: number;
38
51
  emptyText?: string;
39
- onTrackClick?: () => void;
52
+ onTrackClick?: (anchor: HTMLElement) => void;
40
53
  }
41
54
  export interface ScheduleHourCell {
42
55
  m: number;
@@ -48,11 +61,10 @@ export interface ScheduleHourCell {
48
61
  n: number;
49
62
  }
50
63
  export declare function useScheduleDayTimeline(board: ScheduleBoardApi, roster: ScheduleRosterApi, areaBoard: ScheduleAreaBoardApi, demand: ScheduleDemandApi, handlers: {
51
- onAddShift: (empId: number, dayIdx: number) => void;
64
+ onAddShift: (empId: number, dayIdx: number, anchor: HTMLElement) => void;
65
+ onAddPositionShift: (dayIdx: number, position: string, anchor: HTMLElement) => void;
52
66
  onEditShift: (empId: number, dayIdx: number) => void;
53
67
  onEditLeave: (empId: number, dayIdx: number) => void;
54
- onOpenAssign: (openId: number) => void;
55
- onAddAreaShift: (dayIdx: number, position: string) => void;
56
68
  onOpenDemand: (dayIdx: number) => void;
57
69
  onOpenEmployeeMenu: (empId: number, anchor: HTMLElement) => void;
58
70
  onDemandSegment: (dayIdx: number, from: number, to: number, anchor: HTMLElement) => void;
@@ -68,7 +80,6 @@ export declare function useScheduleDayTimeline(board: ScheduleBoardApi, roster:
68
80
  clock: string;
69
81
  }[]>;
70
82
  isOpenHour: (m: number) => boolean;
71
- openShiftsRow: import("vue").ComputedRef<ScheduleTimelineRow | null>;
72
83
  employeeRows: import("vue").ComputedRef<ScheduleTimelineRow[]>;
73
84
  positionTimelineRows: import("vue").ComputedRef<ScheduleTimelineRow[]>;
74
85
  demandRow: import("vue").ComputedRef<{
@@ -8,12 +8,10 @@ export type { ScheduleCoverageAxis } from './schedule-demand-domain';
8
8
  *
9
9
  * Storage follows this board's dayNotes rather than the mockup's flat `di` index: the mockup
10
10
  * renders one long horizon so a day index identifies a date, but this board pages through
11
- * weeks, and demand put on this Monday must not reappear on every other Monday. So a date's
12
- * own demand is keyed by ISO date, and a standing weekday rule is keyed by weekday index.
11
+ * weeks, and demand put on this Monday must not reappear on every other Monday. Demand is
12
+ * therefore keyed by explicit ISO date.
13
13
  *
14
- * A date's own demand wins over the weekday rule it would otherwise inherit — "every Tuesday
15
- * needs eight" is a standing statement, and "this Tuesday is different" has to be able to
16
- * override it without rewriting the rule. */
14
+ * The weekday fallback remains only as a defensive read path until legacy records are removed. */
17
15
  export declare function useScheduleDemand(board: ScheduleBoardApi): {
18
16
  byDate: Record<string, DemandPeriod[]>;
19
17
  byWeekday: Record<number, DemandPeriod[]>;