@brite-future-schools-contracts/contracts 2.0.28 → 2.0.32

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.
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- export { AcademicTerm, AcademicTermSchema, AcademicYear, AcademicYearSchema, AttendanceRecordInputSchema, AttendanceStatusEnum, AttendanceStatusSchema, BranchRefSchema, BulkUploadStudentRow, BulkUploadStudentRowSchema, BulkUploadStudentsInput, BulkUploadStudentsInputSchema, BulkUploadStudentsOutput, BulkUploadStudentsOutputSchema, ChangePasswordInput, ChangePasswordInputSchema, ClassAttendanceRow, ClassAttendanceRowSchema, ClassSummary, ClassSummarySchema, CreateDepartmentInput, CreateDepartmentInputSchema, CreateGradeInput, CreateGradeInputSchema, CreateStaffInput, CreateStaffInputSchema, CreateStaffOutput, CreateStaffOutputSchema, CreateStudentInput, CreateStudentInputSchema, CreateStudentOutput, CreateStudentOutputSchema, CreateTermInput, CreateTermInputSchema, CreateYearInput, CreateYearInputSchema, CuidSchema, Department, DepartmentSchema, EmploymentTypeSchema, GRADE_LEVELS, GenderSchema, GetByClassInput, GetByClassInputSchema, GetByStudentInput, GetByStudentInputSchema, Grade, GradeLevel, GradeLevelSchema, GradeSchema, LinkGuardianInput, LinkGuardianInputSchema, ListStaffInput, ListStaffInputSchema, ListStudentsInput, ListStudentsInputSchema, ListTermsInputSchema, LoginInput, LoginInputSchema, LoginOutput, LoginOutputSchema, LogoutInputSchema, MarkAttendanceInput, MarkAttendanceInputSchema, MarkAttendanceOutput, MarkAttendanceOutputSchema, PaginationInput, PaginationInputSchema, RefreshTokenInput, RefreshTokenInputSchema, RefreshTokenOutput, RefreshTokenOutputSchema, RequestPasswordResetInputSchema, ResetPasswordInputSchema, SessionUserOutput, SessionUserOutputSchema, SessionUserRoleSchema, SessionUserSubRoleSchema, SetCurrentTermInputSchema, SetCurrentYearInputSchema, SoftDelete, SoftDeleteSchema, StaffListItem, StaffListItemSchema, StaffProfile, StaffProfileSchema, StudentAttendanceRow, StudentAttendanceRowSchema, StudentListItem, StudentListItemSchema, StudentProfile, StudentProfileSchema, StudentStatusSchema, SwitchBranchInput, SwitchBranchInputSchema, Term, TermSchema, Timestamps, TimestampsSchema, UuidSchema, paginatedOutputSchema } from './schemas/index.cjs';
2
- export { attendanceContract, authContract, bulkUploadStudentsContract, calendarContract, calendarListTermsContract, changePasswordContract, createDepartmentContract, createGradeContract, createStaffContract, createStudentContract, createTermContract, createYearContract, getByClassContract, getByStudentContract, getMeContract, getStaffByIdContract, getStudentByIdContract, gradesContract, hrContract, linkGuardianContract, listClassesContract, listDepartmentsContract, listGradesContract, listStaffContract, listStudentsContract, listTermsContract, listYearsContract, loginContract, logoutContract, markAttendanceContract, refreshTokenContract, requestPasswordResetContract, resetPasswordContract, setCurrentTermContract, setCurrentYearContract, studentsContract, switchBranchContract, updateStaffStatusContract } from './contracts/index.cjs';
1
+ export { AcademicTerm, AcademicTermSchema, AcademicYear, AcademicYearSchema, AcknowledgeDeliveryInputSchema, AcknowledgeDiaryEntryInputSchema, AttendanceRecordInputSchema, AttendanceStatusEnum, AttendanceStatusSchema, BankAccountTypeSchema, BlockResolutionMethodSchema, BranchBankAccountSchema, BranchRefSchema, BulkUploadStudentRow, BulkUploadStudentRowSchema, BulkUploadStudentsInput, BulkUploadStudentsInputSchema, BulkUploadStudentsOutput, BulkUploadStudentsOutputSchema, ChangePasswordInput, ChangePasswordInputSchema, ClassAttendanceRow, ClassAttendanceRowSchema, ClassSummary, ClassSummarySchema, CreateBankAccountInput, CreateBankAccountInputSchema, CreateDepartmentInput, CreateDepartmentInputSchema, CreateDiaryCategoryInputSchema, CreateDiaryEntryInputSchema, CreateGradeInput, CreateGradeInputSchema, CreateNotificationInput, CreateNotificationInputSchema, CreateStaffInput, CreateStaffInputSchema, CreateStaffOutput, CreateStaffOutputSchema, CreateStudentInput, CreateStudentInputSchema, CreateStudentOutput, CreateStudentOutputSchema, CreateTermInput, CreateTermInputSchema, CreateYearInput, CreateYearInputSchema, CuidSchema, Department, DepartmentSchema, DiaryAcknowledgementSchema, DiaryBlockIdInputSchema, DiaryBlockSchema, DiaryCategorySchema, DiaryEntryDetailSchema, DiaryEntryForGuardianSchema, DiaryEntrySchema, DiaryEntryStatusSchema, DiarySeveritySchema, EmploymentTypeSchema, GRADE_LEVELS, GenderSchema, GetByClassInput, GetByClassInputSchema, GetByStudentInput, GetByStudentInputSchema, Grade, GradeLevel, GradeLevelSchema, GradeSchema, KenyanBankSchema, LinkGuardianInput, LinkGuardianInputSchema, ListBankAccountsInputSchema, ListDeliveriesInputSchema, ListDiaryAcknowledgementsInputSchema, ListDiaryEntriesInputSchema, ListNotificationTemplatesInputSchema, ListStaffInput, ListStaffInputSchema, ListStudentsInput, ListStudentsInputSchema, ListTermsInputSchema, LoginInput, LoginInputSchema, LoginOutput, LoginOutputSchema, LogoutInputSchema, MarkAttendanceInput, MarkAttendanceInputSchema, MarkAttendanceOutput, MarkAttendanceOutputSchema, MyAcknowledgementSchema, NotificationAudienceItemSchema, NotificationAudienceTypeSchema, NotificationChannelSchema, NotificationDeliverySchema, NotificationResponseItemSchema, NotificationTemplateSchema, NotificationTemplateStatusSchema, NotificationUrgencySchema, PaginationInput, PaginationInputSchema, PortalBlockSchema, PortalBlockTypeSchema, RefreshTokenInput, RefreshTokenInputSchema, RefreshTokenOutput, RefreshTokenOutputSchema, RejectNotificationInputSchema, RequestPasswordResetInputSchema, ResetPasswordInputSchema, RespondToBlockInputSchema, RespondToBlockOutputSchema, RespondToDeliveryInputSchema, RespondToDiaryEntryInputSchema, ResponseSummarySchema, SessionUserOutput, SessionUserOutputSchema, SessionUserRoleSchema, SessionUserSubRoleSchema, SetCurrentTermInputSchema, SetCurrentYearInputSchema, SoftDelete, SoftDeleteSchema, StaffListItem, StaffListItemSchema, StaffProfile, StaffProfileSchema, StudentAttendanceRow, StudentAttendanceRowSchema, StudentListItem, StudentListItemSchema, StudentProfile, StudentProfileSchema, StudentStatusSchema, SwitchBranchInput, SwitchBranchInputSchema, Term, TermSchema, Timestamps, TimestampsSchema, UpdateBankAccountInput, UpdateBankAccountInputSchema, UpdateDiaryCategoryInputSchema, UuidSchema, paginatedOutputSchema } from './schemas/index.cjs';
2
+ export { acknowledgeContract, acknowledgeDiaryEntryContract, approveContract, approveLiftContract, attendanceContract, authContract, bankingContract, blocksContract, bulkUploadStudentsContract, calendarContract, calendarListTermsContract, cancelContract, changePasswordContract, createBankAccountContract, createCategoryContract, createDepartmentContract, createEntryContract, createGradeContract, createNotificationContract, createStaffContract, createStudentContract, createTermContract, createYearContract, deactivateContract, diaryContract, getByClassContract, getByIdContract, getByStudentContract, getEntryContract, getMeContract, getResponseSummaryContract, getStaffByIdContract, getStudentByIdContract, getTemplateContract, gradesContract, hrContract, linkGuardianContract, listAccountsContract, listAcknowledgementsContract, listActiveBlocksContract, listBanksContract, listCategoriesContract, listClassesContract, listDeliveriesContract, listDepartmentsContract, listEntriesContract, listForGuardianContract, listGradesContract, listResponsesContract, listStaffContract, listStudentsContract, listTemplatesContract, listTermsContract, listYearsContract, loginContract, logoutContract, markAttendanceContract, markReadContract, markUnreadContract, notificationsContract, refreshTokenContract, rejectContract, requestLiftContract, requestPasswordResetContract, resetPasswordContract, resolveBlockAltContract, resolveBlockContract, respondContract, respondToBlockContract, respondToDiaryEntryContract, setCurrentTermContract, setCurrentYearContract, setDefaultContract, studentsContract, submitContract, switchBranchContract, updateBankAccountContract, updateCategoryContract, updateStaffStatusContract } from './contracts/index.cjs';
3
3
  import 'zod';
4
4
  import '@orpc/contract';
5
5
 
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- export { AcademicTerm, AcademicTermSchema, AcademicYear, AcademicYearSchema, AttendanceRecordInputSchema, AttendanceStatusEnum, AttendanceStatusSchema, BranchRefSchema, BulkUploadStudentRow, BulkUploadStudentRowSchema, BulkUploadStudentsInput, BulkUploadStudentsInputSchema, BulkUploadStudentsOutput, BulkUploadStudentsOutputSchema, ChangePasswordInput, ChangePasswordInputSchema, ClassAttendanceRow, ClassAttendanceRowSchema, ClassSummary, ClassSummarySchema, CreateDepartmentInput, CreateDepartmentInputSchema, CreateGradeInput, CreateGradeInputSchema, CreateStaffInput, CreateStaffInputSchema, CreateStaffOutput, CreateStaffOutputSchema, CreateStudentInput, CreateStudentInputSchema, CreateStudentOutput, CreateStudentOutputSchema, CreateTermInput, CreateTermInputSchema, CreateYearInput, CreateYearInputSchema, CuidSchema, Department, DepartmentSchema, EmploymentTypeSchema, GRADE_LEVELS, GenderSchema, GetByClassInput, GetByClassInputSchema, GetByStudentInput, GetByStudentInputSchema, Grade, GradeLevel, GradeLevelSchema, GradeSchema, LinkGuardianInput, LinkGuardianInputSchema, ListStaffInput, ListStaffInputSchema, ListStudentsInput, ListStudentsInputSchema, ListTermsInputSchema, LoginInput, LoginInputSchema, LoginOutput, LoginOutputSchema, LogoutInputSchema, MarkAttendanceInput, MarkAttendanceInputSchema, MarkAttendanceOutput, MarkAttendanceOutputSchema, PaginationInput, PaginationInputSchema, RefreshTokenInput, RefreshTokenInputSchema, RefreshTokenOutput, RefreshTokenOutputSchema, RequestPasswordResetInputSchema, ResetPasswordInputSchema, SessionUserOutput, SessionUserOutputSchema, SessionUserRoleSchema, SessionUserSubRoleSchema, SetCurrentTermInputSchema, SetCurrentYearInputSchema, SoftDelete, SoftDeleteSchema, StaffListItem, StaffListItemSchema, StaffProfile, StaffProfileSchema, StudentAttendanceRow, StudentAttendanceRowSchema, StudentListItem, StudentListItemSchema, StudentProfile, StudentProfileSchema, StudentStatusSchema, SwitchBranchInput, SwitchBranchInputSchema, Term, TermSchema, Timestamps, TimestampsSchema, UuidSchema, paginatedOutputSchema } from './schemas/index.js';
2
- export { attendanceContract, authContract, bulkUploadStudentsContract, calendarContract, calendarListTermsContract, changePasswordContract, createDepartmentContract, createGradeContract, createStaffContract, createStudentContract, createTermContract, createYearContract, getByClassContract, getByStudentContract, getMeContract, getStaffByIdContract, getStudentByIdContract, gradesContract, hrContract, linkGuardianContract, listClassesContract, listDepartmentsContract, listGradesContract, listStaffContract, listStudentsContract, listTermsContract, listYearsContract, loginContract, logoutContract, markAttendanceContract, refreshTokenContract, requestPasswordResetContract, resetPasswordContract, setCurrentTermContract, setCurrentYearContract, studentsContract, switchBranchContract, updateStaffStatusContract } from './contracts/index.js';
1
+ export { AcademicTerm, AcademicTermSchema, AcademicYear, AcademicYearSchema, AcknowledgeDeliveryInputSchema, AcknowledgeDiaryEntryInputSchema, AttendanceRecordInputSchema, AttendanceStatusEnum, AttendanceStatusSchema, BankAccountTypeSchema, BlockResolutionMethodSchema, BranchBankAccountSchema, BranchRefSchema, BulkUploadStudentRow, BulkUploadStudentRowSchema, BulkUploadStudentsInput, BulkUploadStudentsInputSchema, BulkUploadStudentsOutput, BulkUploadStudentsOutputSchema, ChangePasswordInput, ChangePasswordInputSchema, ClassAttendanceRow, ClassAttendanceRowSchema, ClassSummary, ClassSummarySchema, CreateBankAccountInput, CreateBankAccountInputSchema, CreateDepartmentInput, CreateDepartmentInputSchema, CreateDiaryCategoryInputSchema, CreateDiaryEntryInputSchema, CreateGradeInput, CreateGradeInputSchema, CreateNotificationInput, CreateNotificationInputSchema, CreateStaffInput, CreateStaffInputSchema, CreateStaffOutput, CreateStaffOutputSchema, CreateStudentInput, CreateStudentInputSchema, CreateStudentOutput, CreateStudentOutputSchema, CreateTermInput, CreateTermInputSchema, CreateYearInput, CreateYearInputSchema, CuidSchema, Department, DepartmentSchema, DiaryAcknowledgementSchema, DiaryBlockIdInputSchema, DiaryBlockSchema, DiaryCategorySchema, DiaryEntryDetailSchema, DiaryEntryForGuardianSchema, DiaryEntrySchema, DiaryEntryStatusSchema, DiarySeveritySchema, EmploymentTypeSchema, GRADE_LEVELS, GenderSchema, GetByClassInput, GetByClassInputSchema, GetByStudentInput, GetByStudentInputSchema, Grade, GradeLevel, GradeLevelSchema, GradeSchema, KenyanBankSchema, LinkGuardianInput, LinkGuardianInputSchema, ListBankAccountsInputSchema, ListDeliveriesInputSchema, ListDiaryAcknowledgementsInputSchema, ListDiaryEntriesInputSchema, ListNotificationTemplatesInputSchema, ListStaffInput, ListStaffInputSchema, ListStudentsInput, ListStudentsInputSchema, ListTermsInputSchema, LoginInput, LoginInputSchema, LoginOutput, LoginOutputSchema, LogoutInputSchema, MarkAttendanceInput, MarkAttendanceInputSchema, MarkAttendanceOutput, MarkAttendanceOutputSchema, MyAcknowledgementSchema, NotificationAudienceItemSchema, NotificationAudienceTypeSchema, NotificationChannelSchema, NotificationDeliverySchema, NotificationResponseItemSchema, NotificationTemplateSchema, NotificationTemplateStatusSchema, NotificationUrgencySchema, PaginationInput, PaginationInputSchema, PortalBlockSchema, PortalBlockTypeSchema, RefreshTokenInput, RefreshTokenInputSchema, RefreshTokenOutput, RefreshTokenOutputSchema, RejectNotificationInputSchema, RequestPasswordResetInputSchema, ResetPasswordInputSchema, RespondToBlockInputSchema, RespondToBlockOutputSchema, RespondToDeliveryInputSchema, RespondToDiaryEntryInputSchema, ResponseSummarySchema, SessionUserOutput, SessionUserOutputSchema, SessionUserRoleSchema, SessionUserSubRoleSchema, SetCurrentTermInputSchema, SetCurrentYearInputSchema, SoftDelete, SoftDeleteSchema, StaffListItem, StaffListItemSchema, StaffProfile, StaffProfileSchema, StudentAttendanceRow, StudentAttendanceRowSchema, StudentListItem, StudentListItemSchema, StudentProfile, StudentProfileSchema, StudentStatusSchema, SwitchBranchInput, SwitchBranchInputSchema, Term, TermSchema, Timestamps, TimestampsSchema, UpdateBankAccountInput, UpdateBankAccountInputSchema, UpdateDiaryCategoryInputSchema, UuidSchema, paginatedOutputSchema } from './schemas/index.js';
2
+ export { acknowledgeContract, acknowledgeDiaryEntryContract, approveContract, approveLiftContract, attendanceContract, authContract, bankingContract, blocksContract, bulkUploadStudentsContract, calendarContract, calendarListTermsContract, cancelContract, changePasswordContract, createBankAccountContract, createCategoryContract, createDepartmentContract, createEntryContract, createGradeContract, createNotificationContract, createStaffContract, createStudentContract, createTermContract, createYearContract, deactivateContract, diaryContract, getByClassContract, getByIdContract, getByStudentContract, getEntryContract, getMeContract, getResponseSummaryContract, getStaffByIdContract, getStudentByIdContract, getTemplateContract, gradesContract, hrContract, linkGuardianContract, listAccountsContract, listAcknowledgementsContract, listActiveBlocksContract, listBanksContract, listCategoriesContract, listClassesContract, listDeliveriesContract, listDepartmentsContract, listEntriesContract, listForGuardianContract, listGradesContract, listResponsesContract, listStaffContract, listStudentsContract, listTemplatesContract, listTermsContract, listYearsContract, loginContract, logoutContract, markAttendanceContract, markReadContract, markUnreadContract, notificationsContract, refreshTokenContract, rejectContract, requestLiftContract, requestPasswordResetContract, resetPasswordContract, resolveBlockAltContract, resolveBlockContract, respondContract, respondToBlockContract, respondToDiaryEntryContract, setCurrentTermContract, setCurrentYearContract, setDefaultContract, studentsContract, submitContract, switchBranchContract, updateBankAccountContract, updateCategoryContract, updateStaffStatusContract } from './contracts/index.js';
3
3
  import 'zod';
4
4
  import '@orpc/contract';
5
5
 
package/dist/index.js CHANGED
@@ -1,49 +1,95 @@
1
- import "./chunk-NCAGCDZV.js";
1
+ import "./chunk-W3NAS6DL.js";
2
2
  import {
3
+ acknowledgeContract,
4
+ acknowledgeDiaryEntryContract,
5
+ approveContract,
6
+ approveLiftContract,
3
7
  attendanceContract,
4
8
  authContract,
9
+ bankingContract,
10
+ blocksContract,
5
11
  bulkUploadStudentsContract,
6
12
  calendarContract,
7
13
  calendarListTermsContract,
14
+ cancelContract,
8
15
  changePasswordContract,
16
+ createBankAccountContract,
17
+ createCategoryContract,
9
18
  createDepartmentContract,
19
+ createEntryContract,
10
20
  createGradeContract,
21
+ createNotificationContract,
11
22
  createStaffContract,
12
23
  createStudentContract,
13
24
  createTermContract,
14
25
  createYearContract,
26
+ deactivateContract,
27
+ diaryContract,
15
28
  getByClassContract,
29
+ getByIdContract,
16
30
  getByStudentContract,
31
+ getEntryContract,
17
32
  getMeContract,
33
+ getResponseSummaryContract,
18
34
  getStaffByIdContract,
19
35
  getStudentByIdContract,
36
+ getTemplateContract,
20
37
  gradesContract,
21
38
  hrContract,
22
39
  linkGuardianContract,
40
+ listAccountsContract,
41
+ listAcknowledgementsContract,
42
+ listActiveBlocksContract,
43
+ listBanksContract,
44
+ listCategoriesContract,
23
45
  listClassesContract,
46
+ listDeliveriesContract,
24
47
  listDepartmentsContract,
48
+ listEntriesContract,
49
+ listForGuardianContract,
25
50
  listGradesContract,
51
+ listResponsesContract,
26
52
  listStaffContract,
27
53
  listStudentsContract,
54
+ listTemplatesContract,
28
55
  listTermsContract,
29
56
  listYearsContract,
30
57
  loginContract,
31
58
  logoutContract,
32
59
  markAttendanceContract,
60
+ markReadContract,
61
+ markUnreadContract,
62
+ notificationsContract,
33
63
  refreshTokenContract,
64
+ rejectContract,
65
+ requestLiftContract,
34
66
  requestPasswordResetContract,
35
67
  resetPasswordContract,
68
+ resolveBlockAltContract,
69
+ resolveBlockContract,
70
+ respondContract,
71
+ respondToBlockContract,
72
+ respondToDiaryEntryContract,
36
73
  setCurrentTermContract,
37
74
  setCurrentYearContract,
75
+ setDefaultContract,
38
76
  studentsContract,
77
+ submitContract,
39
78
  switchBranchContract,
79
+ updateBankAccountContract,
80
+ updateCategoryContract,
40
81
  updateStaffStatusContract
41
- } from "./chunk-YKK4SQI7.js";
82
+ } from "./chunk-2B5AQI2I.js";
42
83
  import {
43
84
  AcademicTermSchema,
44
85
  AcademicYearSchema,
86
+ AcknowledgeDeliveryInputSchema,
87
+ AcknowledgeDiaryEntryInputSchema,
45
88
  AttendanceRecordInputSchema,
46
89
  AttendanceStatusSchema,
90
+ BankAccountTypeSchema,
91
+ BlockResolutionMethodSchema,
92
+ BranchBankAccountSchema,
47
93
  BranchRefSchema,
48
94
  BulkUploadStudentRowSchema,
49
95
  BulkUploadStudentsInputSchema,
@@ -51,8 +97,12 @@ import {
51
97
  ChangePasswordInputSchema,
52
98
  ClassAttendanceRowSchema,
53
99
  ClassSummarySchema,
100
+ CreateBankAccountInputSchema,
54
101
  CreateDepartmentInputSchema,
102
+ CreateDiaryCategoryInputSchema,
103
+ CreateDiaryEntryInputSchema,
55
104
  CreateGradeInputSchema,
105
+ CreateNotificationInputSchema,
56
106
  CreateStaffInputSchema,
57
107
  CreateStaffOutputSchema,
58
108
  CreateStudentInputSchema,
@@ -61,6 +111,15 @@ import {
61
111
  CreateYearInputSchema,
62
112
  CuidSchema,
63
113
  DepartmentSchema,
114
+ DiaryAcknowledgementSchema,
115
+ DiaryBlockIdInputSchema,
116
+ DiaryBlockSchema,
117
+ DiaryCategorySchema,
118
+ DiaryEntryDetailSchema,
119
+ DiaryEntryForGuardianSchema,
120
+ DiaryEntrySchema,
121
+ DiaryEntryStatusSchema,
122
+ DiarySeveritySchema,
64
123
  EmploymentTypeSchema,
65
124
  GRADE_LEVELS,
66
125
  GenderSchema,
@@ -68,7 +127,13 @@ import {
68
127
  GetByStudentInputSchema,
69
128
  GradeLevelSchema,
70
129
  GradeSchema,
130
+ KenyanBankSchema,
71
131
  LinkGuardianInputSchema,
132
+ ListBankAccountsInputSchema,
133
+ ListDeliveriesInputSchema,
134
+ ListDiaryAcknowledgementsInputSchema,
135
+ ListDiaryEntriesInputSchema,
136
+ ListNotificationTemplatesInputSchema,
72
137
  ListStaffInputSchema,
73
138
  ListStudentsInputSchema,
74
139
  ListTermsInputSchema,
@@ -77,11 +142,28 @@ import {
77
142
  LogoutInputSchema,
78
143
  MarkAttendanceInputSchema,
79
144
  MarkAttendanceOutputSchema,
145
+ MyAcknowledgementSchema,
146
+ NotificationAudienceItemSchema,
147
+ NotificationAudienceTypeSchema,
148
+ NotificationChannelSchema,
149
+ NotificationDeliverySchema,
150
+ NotificationResponseItemSchema,
151
+ NotificationTemplateSchema,
152
+ NotificationTemplateStatusSchema,
153
+ NotificationUrgencySchema,
80
154
  PaginationInputSchema,
155
+ PortalBlockSchema,
156
+ PortalBlockTypeSchema,
81
157
  RefreshTokenInputSchema,
82
158
  RefreshTokenOutputSchema,
159
+ RejectNotificationInputSchema,
83
160
  RequestPasswordResetInputSchema,
84
161
  ResetPasswordInputSchema,
162
+ RespondToBlockInputSchema,
163
+ RespondToBlockOutputSchema,
164
+ RespondToDeliveryInputSchema,
165
+ RespondToDiaryEntryInputSchema,
166
+ ResponseSummarySchema,
85
167
  SessionUserOutputSchema,
86
168
  SessionUserRoleSchema,
87
169
  SessionUserSubRoleSchema,
@@ -97,9 +179,11 @@ import {
97
179
  SwitchBranchInputSchema,
98
180
  TermSchema,
99
181
  TimestampsSchema,
182
+ UpdateBankAccountInputSchema,
183
+ UpdateDiaryCategoryInputSchema,
100
184
  UuidSchema,
101
185
  paginatedOutputSchema
102
- } from "./chunk-CL7UHAQE.js";
186
+ } from "./chunk-7AJ4LRST.js";
103
187
 
104
188
  // src/roles/helpers.ts
105
189
  function hasRole(user, role) {
@@ -353,8 +437,13 @@ function isScopedToOwnVehicle(user) {
353
437
  export {
354
438
  AcademicTermSchema,
355
439
  AcademicYearSchema,
440
+ AcknowledgeDeliveryInputSchema,
441
+ AcknowledgeDiaryEntryInputSchema,
356
442
  AttendanceRecordInputSchema,
357
443
  AttendanceStatusSchema,
444
+ BankAccountTypeSchema,
445
+ BlockResolutionMethodSchema,
446
+ BranchBankAccountSchema,
358
447
  BranchRefSchema,
359
448
  BulkUploadStudentRowSchema,
360
449
  BulkUploadStudentsInputSchema,
@@ -362,8 +451,12 @@ export {
362
451
  ChangePasswordInputSchema,
363
452
  ClassAttendanceRowSchema,
364
453
  ClassSummarySchema,
454
+ CreateBankAccountInputSchema,
365
455
  CreateDepartmentInputSchema,
456
+ CreateDiaryCategoryInputSchema,
457
+ CreateDiaryEntryInputSchema,
366
458
  CreateGradeInputSchema,
459
+ CreateNotificationInputSchema,
367
460
  CreateStaffInputSchema,
368
461
  CreateStaffOutputSchema,
369
462
  CreateStudentInputSchema,
@@ -372,6 +465,15 @@ export {
372
465
  CreateYearInputSchema,
373
466
  CuidSchema,
374
467
  DepartmentSchema,
468
+ DiaryAcknowledgementSchema,
469
+ DiaryBlockIdInputSchema,
470
+ DiaryBlockSchema,
471
+ DiaryCategorySchema,
472
+ DiaryEntryDetailSchema,
473
+ DiaryEntryForGuardianSchema,
474
+ DiaryEntrySchema,
475
+ DiaryEntryStatusSchema,
476
+ DiarySeveritySchema,
375
477
  EmploymentTypeSchema,
376
478
  GRADE_LEVELS,
377
479
  GenderSchema,
@@ -379,7 +481,13 @@ export {
379
481
  GetByStudentInputSchema,
380
482
  GradeLevelSchema,
381
483
  GradeSchema,
484
+ KenyanBankSchema,
382
485
  LinkGuardianInputSchema,
486
+ ListBankAccountsInputSchema,
487
+ ListDeliveriesInputSchema,
488
+ ListDiaryAcknowledgementsInputSchema,
489
+ ListDiaryEntriesInputSchema,
490
+ ListNotificationTemplatesInputSchema,
383
491
  ListStaffInputSchema,
384
492
  ListStudentsInputSchema,
385
493
  ListTermsInputSchema,
@@ -388,11 +496,28 @@ export {
388
496
  LogoutInputSchema,
389
497
  MarkAttendanceInputSchema,
390
498
  MarkAttendanceOutputSchema,
499
+ MyAcknowledgementSchema,
500
+ NotificationAudienceItemSchema,
501
+ NotificationAudienceTypeSchema,
502
+ NotificationChannelSchema,
503
+ NotificationDeliverySchema,
504
+ NotificationResponseItemSchema,
505
+ NotificationTemplateSchema,
506
+ NotificationTemplateStatusSchema,
507
+ NotificationUrgencySchema,
391
508
  PaginationInputSchema,
509
+ PortalBlockSchema,
510
+ PortalBlockTypeSchema,
392
511
  RefreshTokenInputSchema,
393
512
  RefreshTokenOutputSchema,
513
+ RejectNotificationInputSchema,
394
514
  RequestPasswordResetInputSchema,
395
515
  ResetPasswordInputSchema,
516
+ RespondToBlockInputSchema,
517
+ RespondToBlockOutputSchema,
518
+ RespondToDeliveryInputSchema,
519
+ RespondToDiaryEntryInputSchema,
520
+ ResponseSummarySchema,
396
521
  SessionUserOutputSchema,
397
522
  SessionUserRoleSchema,
398
523
  SessionUserSubRoleSchema,
@@ -408,9 +533,17 @@ export {
408
533
  SwitchBranchInputSchema,
409
534
  TermSchema,
410
535
  TimestampsSchema,
536
+ UpdateBankAccountInputSchema,
537
+ UpdateDiaryCategoryInputSchema,
411
538
  UuidSchema,
539
+ acknowledgeContract,
540
+ acknowledgeDiaryEntryContract,
541
+ approveContract,
542
+ approveLiftContract,
412
543
  attendanceContract,
413
544
  authContract,
545
+ bankingContract,
546
+ blocksContract,
414
547
  bulkUploadStudentsContract,
415
548
  calendarContract,
416
549
  calendarListTermsContract,
@@ -451,18 +584,29 @@ export {
451
584
  canViewStaffList,
452
585
  canViewStudentList,
453
586
  canViewTransport,
587
+ cancelContract,
454
588
  changePasswordContract,
589
+ createBankAccountContract,
590
+ createCategoryContract,
455
591
  createDepartmentContract,
592
+ createEntryContract,
456
593
  createGradeContract,
594
+ createNotificationContract,
457
595
  createStaffContract,
458
596
  createStudentContract,
459
597
  createTermContract,
460
598
  createYearContract,
599
+ deactivateContract,
600
+ diaryContract,
461
601
  getByClassContract,
602
+ getByIdContract,
462
603
  getByStudentContract,
604
+ getEntryContract,
463
605
  getMeContract,
606
+ getResponseSummaryContract,
464
607
  getStaffByIdContract,
465
608
  getStudentByIdContract,
609
+ getTemplateContract,
466
610
  gradesContract,
467
611
  hrContract,
468
612
  isBoardingMaster,
@@ -496,24 +640,48 @@ export {
496
640
  isSubjectTeacher,
497
641
  isSystemAdmin,
498
642
  linkGuardianContract,
643
+ listAccountsContract,
644
+ listAcknowledgementsContract,
645
+ listActiveBlocksContract,
646
+ listBanksContract,
647
+ listCategoriesContract,
499
648
  listClassesContract,
649
+ listDeliveriesContract,
500
650
  listDepartmentsContract,
651
+ listEntriesContract,
652
+ listForGuardianContract,
501
653
  listGradesContract,
654
+ listResponsesContract,
502
655
  listStaffContract,
503
656
  listStudentsContract,
657
+ listTemplatesContract,
504
658
  listTermsContract,
505
659
  listYearsContract,
506
660
  loginContract,
507
661
  logoutContract,
508
662
  markAttendanceContract,
663
+ markReadContract,
664
+ markUnreadContract,
665
+ notificationsContract,
509
666
  paginatedOutputSchema,
510
667
  refreshTokenContract,
668
+ rejectContract,
669
+ requestLiftContract,
511
670
  requestPasswordResetContract,
512
671
  resetPasswordContract,
672
+ resolveBlockAltContract,
673
+ resolveBlockContract,
674
+ respondContract,
675
+ respondToBlockContract,
676
+ respondToDiaryEntryContract,
513
677
  setCurrentTermContract,
514
678
  setCurrentYearContract,
679
+ setDefaultContract,
515
680
  studentsContract,
681
+ submitContract,
516
682
  switchBranchContract,
683
+ updateBankAccountContract,
684
+ updateCategoryContract,
517
685
  updateStaffStatusContract
518
686
  };
519
687
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/roles/helpers.ts","../src/permissions/index.ts"],"sourcesContent":["/**\n * Brite Future Schools — bfs-contracts\n * Role helper functions.\n *\n * Every helper takes a SessionUser and returns a boolean.\n * Use these instead of hardcoded role string comparisons everywhere.\n *\n * Usage:\n * import { isProprietor, isHeadTeacher } from '@brite-future-schools-contracts/contracts'\n * if (isProprietor(user)) { ... }\n *\n * Phase History:\n * Phase 0.1 (2026-06-05): Initial creation\n * Phase 0.2 (2026-06-06): Roles reconciled against schema — added\n * SCHOOL_NURSE, LAB_TECHNICIAN, SPORTS_COACH,\n * CARETAKER, SECURITY, KITCHEN_STAFF, IT_ADMIN,\n * ORG_SPONSOR, INDIVIDUAL_SPONSOR, KITCHEN_MANAGER,\n * BOARDING_MASTER, PREFECT\n * Phase 6 (2026-07-10): hasRole and hasSubRole unified — helpers that can\n * appear as either a primary role or a subRole now\n * check both. Fixes CLASS_TEACHER, HOD, and others\n * assigned via the subRole system. isStaff fixed\n * to use null-safe branch check.\n *\n * @module src/roles/helpers\n * @since Phase 0.1\n */\n\nimport type { RoleName, SessionUser } from './types.js'\n\n// ── Private helpers ────────────────────────────────────────────────────────────\n\n/** Check primary roles — branch-scoped, null-safe. */\nfunction hasRole(user: SessionUser, role: RoleName): boolean {\n return user.roles.some(\n (r) =>\n r.name === role &&\n (!user.activeBranchId || r.branchId === user.activeBranchId),\n )\n}\n\n/** Check subRoles — branch-scoped, null-safe. */\nfunction hasSubRole(user: SessionUser, code: string): boolean {\n return (user.subRoles ?? []).some(\n (r) =>\n r.code === code &&\n (!user.activeBranchId || r.branchId === user.activeBranchId),\n )\n}\n\n/** Check either primary role OR subRole — use for roles that can be assigned either way. */\nfunction hasRoleOrSubRole(user: SessionUser, code: string): boolean {\n return hasRole(user, code as RoleName) || hasSubRole(user, code)\n}\n\n// ── Senior leadership ──────────────────────────────────────────────────────────\n\nexport function isProprietor(user: SessionUser): boolean {\n return hasRole(user, 'PROPRIETOR')\n}\n\nexport function isDirector(user: SessionUser): boolean {\n return hasRole(user, 'DIRECTOR')\n}\n\nexport function isSystemAdmin(user: SessionUser): boolean {\n return hasRole(user, 'SYSTEM_ADMIN')\n}\n\nexport function isHeadTeacher(user: SessionUser): boolean {\n return hasRole(user, 'HEAD_TEACHER')\n}\n\nexport function isDeputyHeadTeacher(user: SessionUser): boolean {\n return hasRole(user, 'DEPUTY_HEAD_TEACHER')\n}\n\nexport function isSeniorLeadership(user: SessionUser): boolean {\n return (\n isProprietor(user) ||\n isDirector(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user)\n )\n}\n\n// ── Academic staff ─────────────────────────────────────────────────────────────\n\nexport function isHOD(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'HOD')\n}\n\nexport function isClassTeacher(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'CLASS_TEACHER')\n}\n\nexport function isSubjectTeacher(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'SUBJECT_TEACHER')\n}\n\n// ── Support staff ──────────────────────────────────────────────────────────────\n\nexport function isSchoolNurse(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'SCHOOL_NURSE')\n}\n\nexport function isLibrarian(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'LIBRARIAN')\n}\n\nexport function isLabTechnician(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'LAB_TECHNICIAN')\n}\n\nexport function isSportsCoach(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'SPORTS_COACH')\n}\n\nexport function isCounsellor(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'COUNSELLOR')\n}\n\nexport function isCaretaker(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'CARETAKER')\n}\n\nexport function isSecurity(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'SECURITY')\n}\n\nexport function isBoardingMaster(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'BOARDING_MASTER')\n}\n\n// ── Operations ─────────────────────────────────────────────────────────────────\n\nexport function isBursar(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'BURSAR')\n}\n\nexport function isHrAdmin(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'HR_ADMIN')\n}\n\nexport function isDriver(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'DRIVER')\n}\n\nexport function isKitchenStaff(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'KITCHEN_STAFF')\n}\n\nexport function isKitchenManager(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'KITCHEN_MANAGER')\n}\n\nexport function isItAdmin(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'IT_ADMIN')\n}\n\n// ── Students and parents ───────────────────────────────────────────────────────\n\nexport function isPrefect(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'PREFECT')\n}\n\nexport function isStudent(user: SessionUser): boolean {\n return hasRole(user, 'STUDENT')\n}\n\nexport function isParent(user: SessionUser): boolean {\n return hasRole(user, 'PARENT')\n}\n\n// ── Sponsors ───────────────────────────────────────────────────────────────────\n\nexport function isOrgSponsor(user: SessionUser): boolean {\n return hasRole(user, 'ORG_SPONSOR')\n}\n\nexport function isIndividualSponsor(user: SessionUser): boolean {\n return hasRole(user, 'INDIVIDUAL_SPONSOR')\n}\n\n// ── Broad groupings ────────────────────────────────────────────────────────────\n\nexport function isStaff(user: SessionUser): boolean {\n const staffRoles: RoleName[] = [\n 'PROPRIETOR', 'DIRECTOR', 'SYSTEM_ADMIN', 'HEAD_TEACHER', 'DEPUTY_HEAD_TEACHER',\n 'HOD', 'CLASS_TEACHER', 'SUBJECT_TEACHER', 'BURSAR', 'HR_ADMIN',\n 'SCHOOL_NURSE', 'LIBRARIAN', 'LAB_TECHNICIAN', 'SPORTS_COACH',\n 'COUNSELLOR', 'CARETAKER', 'SECURITY', 'KITCHEN_STAFF', 'KITCHEN_MANAGER',\n 'DRIVER', 'IT_ADMIN', 'BOARDING_MASTER', 'PREFECT',\n ]\n return (\n user.roles.some(\n (r) =>\n staffRoles.includes(r.name) &&\n (!user.activeBranchId || r.branchId === user.activeBranchId),\n ) ||\n (user.subRoles ?? []).some(\n (r) =>\n staffRoles.includes(r.code as RoleName) &&\n (!user.activeBranchId || r.branchId === user.activeBranchId),\n )\n )\n}","/**\n * Brite Future Schools — bfs-contracts\n * Permission helper functions.\n *\n * Answer \"can this user do X?\" — not \"is this user role Y?\".\n * Every UI gate and API guard must use these instead of raw role checks.\n *\n * Phase History:\n * Phase 2 (2026-06-08): Initial creation — attendance, staff, students,\n * dashboard permissions\n * Phase 3 (2026-06-10): Added canAssignClassTeacher, canViewClasses\n * Phase 5 (2026-06-21): Added HR, payroll, leave, qualification,\n * tax config, and salary permissions\n * Phase 6 (2026-06-22): Added transport permissions\n *\n * @module src/permissions/index\n * @since Phase 2\n */\n\nimport type { SessionUser } from '../roles/types.js'\nimport {\n isProprietor,\n isDirector,\n isSystemAdmin,\n isHeadTeacher,\n isDeputyHeadTeacher,\n isHOD,\n isClassTeacher,\n isHrAdmin,\n isStudent,\n isParent,\n isOrgSponsor,\n isIndividualSponsor,\n isPrefect,\n isBursar,\n isDriver,\n} from '../roles/helpers.js'\n\n// ── Attendance ─────────────────────────────────────────────────────────────────\n\n/** Class teacher marks roll for their own class; senior staff can mark any. */\nexport function canMarkClassAttendance(user: SessionUser): boolean {\n const hasClassTeacherSubRole = user.subRoles?.some(\n (s) => s.code === 'CLASS_TEACHER',\n ) ?? false\n return (\n hasClassTeacherSubRole ||\n isHOD(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isSystemAdmin(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\nexport function canViewClassAttendance(user: SessionUser): boolean {\n return canMarkClassAttendance(user)\n}\n\nexport function canMarkStaffAttendance(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isSystemAdmin(user)\n )\n}\n\nexport function canViewStaffAttendance(user: SessionUser): boolean {\n return (\n canMarkStaffAttendance(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n// ── Staff ──────────────────────────────────────────────────────────────────────\n\nexport function canViewStaffList(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isSystemAdmin(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\nexport function canManageStaff(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isSystemAdmin(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n// ── Students ───────────────────────────────────────────────────────────────────\n\nexport function canViewStudentList(user: SessionUser): boolean {\n return (\n isClassTeacher(user) ||\n isHOD(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isHrAdmin(user) ||\n isSystemAdmin(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\nexport function canManageStudents(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isHrAdmin(user) ||\n isSystemAdmin(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n// ── Classes ────────────────────────────────────────────────────────────────────\n\nexport function canViewClasses(user: SessionUser): boolean {\n return (\n isClassTeacher(user) ||\n isHOD(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isSystemAdmin(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\nexport function canAssignClassTeacher(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isSystemAdmin(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n// ── Dashboard ──────────────────────────────────────────────────────────────────\n\nexport function canAccessAdminDashboard(user: SessionUser): boolean {\n return (\n !isStudent(user) &&\n !isParent(user) &&\n !isPrefect(user) &&\n !isOrgSponsor(user) &&\n !isIndividualSponsor(user)\n )\n}\n\n// ── Leave ──────────────────────────────────────────────────────────────────────\n\n/** Who can create and manage leave types. */\nexport function canManageLeaveTypes(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** HOD can approve leave for their department (first step). */\nexport function canHodApproveLeave(user: SessionUser): boolean {\n return (\n isHOD(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Final leave approval — Head Teacher and above only. */\nexport function canFinalApproveLeave(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can view all leave requests (not just their own). */\nexport function canViewAllLeaveRequests(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHOD(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n// ── Qualifications ─────────────────────────────────────────────────────────────\n\n/** Who can add or edit staff qualification records. */\nexport function canManageQualifications(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can mark a qualification as verified (triggers payroll effect). */\nexport function canVerifyQualification(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n// ── Remuneration ───────────────────────────────────────────────────────────────\n\n/** Who can manage salary grades and remuneration items. */\nexport function canManageSalaryStructure(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can assign a salary grade to a staff member. */\nexport function canAssignSalaryGrade(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can approve a staff salary record (moves DRAFT → ACTIVE). */\nexport function canApproveSalary(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n// ── Payroll ────────────────────────────────────────────────────────────────────\n\n/** Who can initiate a payroll run. */\nexport function canInitiatePayroll(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can approve a payroll run (moves draft → approved). */\nexport function canApprovePayroll(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can export the payroll run (Equity CSV). */\nexport function canExportPayroll(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can view all staff payslips (not just their own). */\nexport function canViewAllPayslips(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can view payroll summary across all branches. */\nexport function canViewCrossBranchPayroll(user: SessionUser): boolean {\n return isDirector(user) || isProprietor(user)\n}\n\n// ── Tax configuration ──────────────────────────────────────────────────────────\n\n/** Only SYSTEM_ADMIN can edit statutory tax rates. */\nexport function canEditTaxConfig(user: SessionUser): boolean {\n return isSystemAdmin(user)\n}\n\n// ── Transport ──────────────────────────────────────────────────────────────────\n\n/** Who can create, edit, and delete vehicles. */\nexport function canManageFleet(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user) ||\n isSystemAdmin(user)\n )\n}\n\n/** Who can view the full fleet list. */\nexport function canViewFleet(user: SessionUser): boolean {\n return (\n canManageFleet(user) ||\n isHrAdmin(user)\n )\n}\n\n/** Who can manage routes and stops. */\nexport function canManageRoutes(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user) ||\n isSystemAdmin(user)\n )\n}\n\n/** Who can view the transport module at all. */\nexport function canViewTransport(user: SessionUser): boolean {\n return (\n isDriver(user) ||\n isBursar(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isHrAdmin(user) ||\n isDirector(user) ||\n isProprietor(user) ||\n isSystemAdmin(user)\n )\n}\n\n/** Who can create and manage trip logs. */\nexport function canManageTrips(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user) ||\n isSystemAdmin(user)\n )\n}\n\n/** Driver marks boardings on their own trip. */\nexport function canMarkBoardings(user: SessionUser): boolean {\n return (\n isDriver(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can submit a fuel log entry. */\nexport function canSubmitFuelLog(user: SessionUser): boolean {\n return (\n isDriver(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can approve a fuel log entry. */\nexport function canApproveFuelLog(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can submit a vehicle maintenance request. */\nexport function canSubmitMaintenanceRequest(user: SessionUser): boolean {\n return (\n isDriver(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user) ||\n isSystemAdmin(user)\n )\n}\n\n/** Who can review and resolve maintenance requests. */\nexport function canReviewMaintenance(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can review transport applications (route enrolment). */\nexport function canReviewTransportApplication(user: SessionUser): boolean {\n return (\n isBursar(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/**\n * Drivers see only their own vehicle and trips.\n * Returns true if the user is purely a driver with no senior role.\n */\nexport function isScopedToOwnVehicle(user: SessionUser): boolean {\n return (\n isDriver(user) &&\n !isHeadTeacher(user) &&\n !isDeputyHeadTeacher(user) &&\n !isDirector(user) &&\n !isProprietor(user) &&\n !isSystemAdmin(user)\n )\n}"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/roles/helpers.ts","../src/permissions/index.ts"],"sourcesContent":["/**\n * Brite Future Schools — bfs-contracts\n * Role helper functions.\n *\n * Every helper takes a SessionUser and returns a boolean.\n * Use these instead of hardcoded role string comparisons everywhere.\n *\n * Usage:\n * import { isProprietor, isHeadTeacher } from '@brite-future-schools-contracts/contracts'\n * if (isProprietor(user)) { ... }\n *\n * Phase History:\n * Phase 0.1 (2026-06-05): Initial creation\n * Phase 0.2 (2026-06-06): Roles reconciled against schema — added\n * SCHOOL_NURSE, LAB_TECHNICIAN, SPORTS_COACH,\n * CARETAKER, SECURITY, KITCHEN_STAFF, IT_ADMIN,\n * ORG_SPONSOR, INDIVIDUAL_SPONSOR, KITCHEN_MANAGER,\n * BOARDING_MASTER, PREFECT\n * Phase 6 (2026-07-10): hasRole and hasSubRole unified — helpers that can\n * appear as either a primary role or a subRole now\n * check both. Fixes CLASS_TEACHER, HOD, and others\n * assigned via the subRole system. isStaff fixed\n * to use null-safe branch check.\n *\n * @module src/roles/helpers\n * @since Phase 0.1\n */\n\nimport type { RoleName, SessionUser } from './types.js'\n\n// ── Private helpers ────────────────────────────────────────────────────────────\n\n/** Check primary roles — branch-scoped, null-safe. */\nfunction hasRole(user: SessionUser, role: RoleName): boolean {\n return user.roles.some(\n (r) =>\n r.name === role &&\n (!user.activeBranchId || r.branchId === user.activeBranchId),\n )\n}\n\n/** Check subRoles — branch-scoped, null-safe. */\nfunction hasSubRole(user: SessionUser, code: string): boolean {\n return (user.subRoles ?? []).some(\n (r) =>\n r.code === code &&\n (!user.activeBranchId || r.branchId === user.activeBranchId),\n )\n}\n\n/** Check either primary role OR subRole — use for roles that can be assigned either way. */\nfunction hasRoleOrSubRole(user: SessionUser, code: string): boolean {\n return hasRole(user, code as RoleName) || hasSubRole(user, code)\n}\n\n// ── Senior leadership ──────────────────────────────────────────────────────────\n\nexport function isProprietor(user: SessionUser): boolean {\n return hasRole(user, 'PROPRIETOR')\n}\n\nexport function isDirector(user: SessionUser): boolean {\n return hasRole(user, 'DIRECTOR')\n}\n\nexport function isSystemAdmin(user: SessionUser): boolean {\n return hasRole(user, 'SYSTEM_ADMIN')\n}\n\nexport function isHeadTeacher(user: SessionUser): boolean {\n return hasRole(user, 'HEAD_TEACHER')\n}\n\nexport function isDeputyHeadTeacher(user: SessionUser): boolean {\n return hasRole(user, 'DEPUTY_HEAD_TEACHER')\n}\n\nexport function isSeniorLeadership(user: SessionUser): boolean {\n return (\n isProprietor(user) ||\n isDirector(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user)\n )\n}\n\n// ── Academic staff ─────────────────────────────────────────────────────────────\n\nexport function isHOD(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'HOD')\n}\n\nexport function isClassTeacher(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'CLASS_TEACHER')\n}\n\nexport function isSubjectTeacher(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'SUBJECT_TEACHER')\n}\n\n// ── Support staff ──────────────────────────────────────────────────────────────\n\nexport function isSchoolNurse(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'SCHOOL_NURSE')\n}\n\nexport function isLibrarian(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'LIBRARIAN')\n}\n\nexport function isLabTechnician(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'LAB_TECHNICIAN')\n}\n\nexport function isSportsCoach(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'SPORTS_COACH')\n}\n\nexport function isCounsellor(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'COUNSELLOR')\n}\n\nexport function isCaretaker(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'CARETAKER')\n}\n\nexport function isSecurity(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'SECURITY')\n}\n\nexport function isBoardingMaster(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'BOARDING_MASTER')\n}\n\n// ── Operations ─────────────────────────────────────────────────────────────────\n\nexport function isBursar(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'BURSAR')\n}\n\nexport function isHrAdmin(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'HR_ADMIN')\n}\n\nexport function isDriver(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'DRIVER')\n}\n\nexport function isKitchenStaff(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'KITCHEN_STAFF')\n}\n\nexport function isKitchenManager(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'KITCHEN_MANAGER')\n}\n\nexport function isItAdmin(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'IT_ADMIN')\n}\n\n// ── Students and parents ───────────────────────────────────────────────────────\n\nexport function isPrefect(user: SessionUser): boolean {\n return hasRoleOrSubRole(user, 'PREFECT')\n}\n\nexport function isStudent(user: SessionUser): boolean {\n return hasRole(user, 'STUDENT')\n}\n\nexport function isParent(user: SessionUser): boolean {\n return hasRole(user, 'PARENT')\n}\n\n// ── Sponsors ───────────────────────────────────────────────────────────────────\n\nexport function isOrgSponsor(user: SessionUser): boolean {\n return hasRole(user, 'ORG_SPONSOR')\n}\n\nexport function isIndividualSponsor(user: SessionUser): boolean {\n return hasRole(user, 'INDIVIDUAL_SPONSOR')\n}\n\n// ── Broad groupings ────────────────────────────────────────────────────────────\n\nexport function isStaff(user: SessionUser): boolean {\n const staffRoles: RoleName[] = [\n 'PROPRIETOR', 'DIRECTOR', 'SYSTEM_ADMIN', 'HEAD_TEACHER', 'DEPUTY_HEAD_TEACHER',\n 'HOD', 'CLASS_TEACHER', 'SUBJECT_TEACHER', 'BURSAR', 'HR_ADMIN',\n 'SCHOOL_NURSE', 'LIBRARIAN', 'LAB_TECHNICIAN', 'SPORTS_COACH',\n 'COUNSELLOR', 'CARETAKER', 'SECURITY', 'KITCHEN_STAFF', 'KITCHEN_MANAGER',\n 'DRIVER', 'IT_ADMIN', 'BOARDING_MASTER', 'PREFECT',\n ]\n return (\n user.roles.some(\n (r) =>\n staffRoles.includes(r.name) &&\n (!user.activeBranchId || r.branchId === user.activeBranchId),\n ) ||\n (user.subRoles ?? []).some(\n (r) =>\n staffRoles.includes(r.code as RoleName) &&\n (!user.activeBranchId || r.branchId === user.activeBranchId),\n )\n )\n}","/**\n * Brite Future Schools — bfs-contracts\n * Permission helper functions.\n *\n * Answer \"can this user do X?\" — not \"is this user role Y?\".\n * Every UI gate and API guard must use these instead of raw role checks.\n *\n * Phase History:\n * Phase 2 (2026-06-08): Initial creation — attendance, staff, students,\n * dashboard permissions\n * Phase 3 (2026-06-10): Added canAssignClassTeacher, canViewClasses\n * Phase 5 (2026-06-21): Added HR, payroll, leave, qualification,\n * tax config, and salary permissions\n * Phase 6 (2026-06-22): Added transport permissions\n *\n * @module src/permissions/index\n * @since Phase 2\n */\n\nimport type { SessionUser } from '../roles/types.js'\nimport {\n isProprietor,\n isDirector,\n isSystemAdmin,\n isHeadTeacher,\n isDeputyHeadTeacher,\n isHOD,\n isClassTeacher,\n isHrAdmin,\n isStudent,\n isParent,\n isOrgSponsor,\n isIndividualSponsor,\n isPrefect,\n isBursar,\n isDriver,\n} from '../roles/helpers.js'\n\n// ── Attendance ─────────────────────────────────────────────────────────────────\n\n/** Class teacher marks roll for their own class; senior staff can mark any. */\nexport function canMarkClassAttendance(user: SessionUser): boolean {\n const hasClassTeacherSubRole = user.subRoles?.some(\n (s) => s.code === 'CLASS_TEACHER',\n ) ?? false\n return (\n hasClassTeacherSubRole ||\n isHOD(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isSystemAdmin(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\nexport function canViewClassAttendance(user: SessionUser): boolean {\n return canMarkClassAttendance(user)\n}\n\nexport function canMarkStaffAttendance(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isSystemAdmin(user)\n )\n}\n\nexport function canViewStaffAttendance(user: SessionUser): boolean {\n return (\n canMarkStaffAttendance(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n// ── Staff ──────────────────────────────────────────────────────────────────────\n\nexport function canViewStaffList(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isSystemAdmin(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\nexport function canManageStaff(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isSystemAdmin(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n// ── Students ───────────────────────────────────────────────────────────────────\n\nexport function canViewStudentList(user: SessionUser): boolean {\n return (\n isClassTeacher(user) ||\n isHOD(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isHrAdmin(user) ||\n isSystemAdmin(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\nexport function canManageStudents(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isHrAdmin(user) ||\n isSystemAdmin(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n// ── Classes ────────────────────────────────────────────────────────────────────\n\nexport function canViewClasses(user: SessionUser): boolean {\n return (\n isClassTeacher(user) ||\n isHOD(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isSystemAdmin(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\nexport function canAssignClassTeacher(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isSystemAdmin(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n// ── Dashboard ──────────────────────────────────────────────────────────────────\n\nexport function canAccessAdminDashboard(user: SessionUser): boolean {\n return (\n !isStudent(user) &&\n !isParent(user) &&\n !isPrefect(user) &&\n !isOrgSponsor(user) &&\n !isIndividualSponsor(user)\n )\n}\n\n// ── Leave ──────────────────────────────────────────────────────────────────────\n\n/** Who can create and manage leave types. */\nexport function canManageLeaveTypes(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** HOD can approve leave for their department (first step). */\nexport function canHodApproveLeave(user: SessionUser): boolean {\n return (\n isHOD(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Final leave approval — Head Teacher and above only. */\nexport function canFinalApproveLeave(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can view all leave requests (not just their own). */\nexport function canViewAllLeaveRequests(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHOD(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n// ── Qualifications ─────────────────────────────────────────────────────────────\n\n/** Who can add or edit staff qualification records. */\nexport function canManageQualifications(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can mark a qualification as verified (triggers payroll effect). */\nexport function canVerifyQualification(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n// ── Remuneration ───────────────────────────────────────────────────────────────\n\n/** Who can manage salary grades and remuneration items. */\nexport function canManageSalaryStructure(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can assign a salary grade to a staff member. */\nexport function canAssignSalaryGrade(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can approve a staff salary record (moves DRAFT → ACTIVE). */\nexport function canApproveSalary(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n// ── Payroll ────────────────────────────────────────────────────────────────────\n\n/** Who can initiate a payroll run. */\nexport function canInitiatePayroll(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can approve a payroll run (moves draft → approved). */\nexport function canApprovePayroll(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can export the payroll run (Equity CSV). */\nexport function canExportPayroll(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can view all staff payslips (not just their own). */\nexport function canViewAllPayslips(user: SessionUser): boolean {\n return (\n isHrAdmin(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can view payroll summary across all branches. */\nexport function canViewCrossBranchPayroll(user: SessionUser): boolean {\n return isDirector(user) || isProprietor(user)\n}\n\n// ── Tax configuration ──────────────────────────────────────────────────────────\n\n/** Only SYSTEM_ADMIN can edit statutory tax rates. */\nexport function canEditTaxConfig(user: SessionUser): boolean {\n return isSystemAdmin(user)\n}\n\n// ── Transport ──────────────────────────────────────────────────────────────────\n\n/** Who can create, edit, and delete vehicles. */\nexport function canManageFleet(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user) ||\n isSystemAdmin(user)\n )\n}\n\n/** Who can view the full fleet list. */\nexport function canViewFleet(user: SessionUser): boolean {\n return (\n canManageFleet(user) ||\n isHrAdmin(user)\n )\n}\n\n/** Who can manage routes and stops. */\nexport function canManageRoutes(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user) ||\n isSystemAdmin(user)\n )\n}\n\n/** Who can view the transport module at all. */\nexport function canViewTransport(user: SessionUser): boolean {\n return (\n isDriver(user) ||\n isBursar(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isHrAdmin(user) ||\n isDirector(user) ||\n isProprietor(user) ||\n isSystemAdmin(user)\n )\n}\n\n/** Who can create and manage trip logs. */\nexport function canManageTrips(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user) ||\n isSystemAdmin(user)\n )\n}\n\n/** Driver marks boardings on their own trip. */\nexport function canMarkBoardings(user: SessionUser): boolean {\n return (\n isDriver(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can submit a fuel log entry. */\nexport function canSubmitFuelLog(user: SessionUser): boolean {\n return (\n isDriver(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can approve a fuel log entry. */\nexport function canApproveFuelLog(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can submit a vehicle maintenance request. */\nexport function canSubmitMaintenanceRequest(user: SessionUser): boolean {\n return (\n isDriver(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user) ||\n isSystemAdmin(user)\n )\n}\n\n/** Who can review and resolve maintenance requests. */\nexport function canReviewMaintenance(user: SessionUser): boolean {\n return (\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/** Who can review transport applications (route enrolment). */\nexport function canReviewTransportApplication(user: SessionUser): boolean {\n return (\n isBursar(user) ||\n isHeadTeacher(user) ||\n isDeputyHeadTeacher(user) ||\n isDirector(user) ||\n isProprietor(user)\n )\n}\n\n/**\n * Drivers see only their own vehicle and trips.\n * Returns true if the user is purely a driver with no senior role.\n */\nexport function isScopedToOwnVehicle(user: SessionUser): boolean {\n return (\n isDriver(user) &&\n !isHeadTeacher(user) &&\n !isDeputyHeadTeacher(user) &&\n !isDirector(user) &&\n !isProprietor(user) &&\n !isSystemAdmin(user)\n )\n}"],"mappings":"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","names":[]}