@brite-future-schools-contracts/contracts 1.0.0

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.js ADDED
@@ -0,0 +1,1229 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var src_exports = {};
22
+ __export(src_exports, {
23
+ academicsContract: () => academicsContract,
24
+ adminContract: () => adminContract,
25
+ appContract: () => appContract,
26
+ assessmentScoreInputSchema: () => assessmentScoreInputSchema,
27
+ assessmentTypeEnum: () => assessmentTypeEnum,
28
+ assetCategoryEnum: () => assetCategoryEnum,
29
+ assetConditionEnum: () => assetConditionEnum,
30
+ assetsContract: () => assetsContract,
31
+ authContract: () => authContract,
32
+ borrowingStatusEnum: () => borrowingStatusEnum,
33
+ branchSchema: () => branchSchema,
34
+ branchesContract: () => branchesContract,
35
+ busRegisterEntrySchema: () => busRegisterEntrySchema,
36
+ busRegisterStatusEnum: () => busRegisterStatusEnum,
37
+ changePasswordInputSchema: () => changePasswordInputSchema,
38
+ commsContract: () => commsContract,
39
+ createBranchInputSchema: () => createBranchInputSchema,
40
+ createStudentInputSchema: () => createStudentInputSchema,
41
+ dateRangeSchema: () => dateRangeSchema,
42
+ disciplineContract: () => disciplineContract,
43
+ disciplineRulingEnum: () => disciplineRulingEnum,
44
+ employmentTypeEnum: () => employmentTypeEnum,
45
+ feeItemCategoryEnum: () => feeItemCategoryEnum,
46
+ feeItemSchema: () => feeItemSchema,
47
+ financeContract: () => financeContract,
48
+ genderEnum: () => genderEnum,
49
+ gradeLevelEnum: () => gradeLevelEnum,
50
+ guardianSchema: () => guardianSchema,
51
+ hrContract: () => hrContract,
52
+ incidentSeverityEnum: () => incidentSeverityEnum,
53
+ incidentStatusEnum: () => incidentStatusEnum,
54
+ invoiceStatusEnum: () => invoiceStatusEnum,
55
+ leaveRequestInputSchema: () => leaveRequestInputSchema,
56
+ leaveStatusEnum: () => leaveStatusEnum,
57
+ libraryContract: () => libraryContract,
58
+ listStudentsInputSchema: () => listStudentsInputSchema,
59
+ loginInputSchema: () => loginInputSchema,
60
+ loginOutputSchema: () => loginOutputSchema,
61
+ maintenanceTicketStatusEnum: () => maintenanceTicketStatusEnum,
62
+ mfaVerifyInputSchema: () => mfaVerifyInputSchema,
63
+ notificationTypeEnum: () => notificationTypeEnum,
64
+ paginationSchema: () => paginationSchema,
65
+ paymentMethodEnum: () => paymentMethodEnum,
66
+ payrollContract: () => payrollContract,
67
+ payrollRunStatusEnum: () => payrollRunStatusEnum,
68
+ recordPaymentInputSchema: () => recordPaymentInputSchema,
69
+ refreshInputSchema: () => refreshInputSchema,
70
+ refreshTokenOutputSchema: () => refreshTokenOutputSchema,
71
+ reportCardStatusEnum: () => reportCardStatusEnum,
72
+ rubricBandEnum: () => rubricBandEnum,
73
+ sendBulkSmsInputSchema: () => sendBulkSmsInputSchema,
74
+ sponsorSchema: () => sponsorSchema,
75
+ sponsorTypeEnum: () => sponsorTypeEnum,
76
+ staffSchema: () => staffSchema,
77
+ storageContract: () => storageContract,
78
+ studentSchema: () => studentSchema,
79
+ studentStatusEnum: () => studentStatusEnum,
80
+ studentsContract: () => studentsContract,
81
+ subjectSchema: () => subjectSchema,
82
+ systemRoleEnum: () => systemRoleEnum,
83
+ transportContract: () => transportContract,
84
+ tripLogInputSchema: () => tripLogInputSchema,
85
+ userSchema: () => userSchema,
86
+ userStatusEnum: () => userStatusEnum,
87
+ uuidSchema: () => uuidSchema,
88
+ vehicleOwnershipEnum: () => vehicleOwnershipEnum,
89
+ vehicleTypeEnum: () => vehicleTypeEnum
90
+ });
91
+ module.exports = __toCommonJS(src_exports);
92
+
93
+ // src/schemas/index.ts
94
+ var import_zod = require("zod");
95
+ var uuidSchema = import_zod.z.string().uuid();
96
+ var paginationSchema = import_zod.z.object({
97
+ page: import_zod.z.number().int().min(1).default(1),
98
+ limit: import_zod.z.number().int().min(1).max(100).default(20)
99
+ });
100
+ var dateRangeSchema = import_zod.z.object({
101
+ from: import_zod.z.string().datetime().optional(),
102
+ to: import_zod.z.string().datetime().optional()
103
+ });
104
+ var genderEnum = import_zod.z.enum(["male", "female"]);
105
+ var userStatusEnum = import_zod.z.enum(["active", "inactive", "suspended"]);
106
+ var systemRoleEnum = import_zod.z.enum([
107
+ "DIRECTOR",
108
+ "PRINCIPAL",
109
+ "DEPUTY_PRINCIPAL",
110
+ "HOD",
111
+ "CLASS_TEACHER",
112
+ "SUBJECT_TEACHER",
113
+ "BURSAR",
114
+ "HR_ADMIN",
115
+ "SCHOOL_NURSE",
116
+ "LIBRARIAN",
117
+ "LAB_TECHNICIAN",
118
+ "SPORTS_COACH",
119
+ "COUNSELLOR",
120
+ "CARETAKER",
121
+ "SECURITY",
122
+ "KITCHEN_STAFF",
123
+ "DRIVER",
124
+ "IT_ADMIN",
125
+ "STUDENT",
126
+ "PARENT",
127
+ "ORG_SPONSOR",
128
+ "INDIVIDUAL_SPONSOR"
129
+ ]);
130
+ var loginInputSchema = import_zod.z.object({
131
+ email: import_zod.z.string().email(),
132
+ password: import_zod.z.string().min(8),
133
+ deviceFingerprint: import_zod.z.string().optional()
134
+ });
135
+ var loginOutputSchema = import_zod.z.object({
136
+ accessToken: import_zod.z.string(),
137
+ refreshToken: import_zod.z.string().optional(),
138
+ user: import_zod.z.object({
139
+ id: uuidSchema,
140
+ firstName: import_zod.z.string(),
141
+ middleName: import_zod.z.string().nullable(),
142
+ lastName: import_zod.z.string(),
143
+ email: import_zod.z.string().email(),
144
+ avatarUrl: import_zod.z.string().nullable(),
145
+ roles: import_zod.z.array(
146
+ import_zod.z.object({
147
+ id: uuidSchema,
148
+ name: import_zod.z.string(),
149
+ branchId: uuidSchema.nullable()
150
+ })
151
+ ),
152
+ activeBranchId: uuidSchema.nullable(),
153
+ isMfaEnabled: import_zod.z.boolean()
154
+ })
155
+ });
156
+ var refreshTokenOutputSchema = import_zod.z.object({
157
+ accessToken: import_zod.z.string()
158
+ });
159
+ var refreshInputSchema = import_zod.z.object({
160
+ refreshToken: import_zod.z.string().optional()
161
+ });
162
+ var mfaVerifyInputSchema = import_zod.z.object({
163
+ totp: import_zod.z.string().length(6)
164
+ });
165
+ var changePasswordInputSchema = import_zod.z.object({
166
+ currentPassword: import_zod.z.string().min(8),
167
+ newPassword: import_zod.z.string().min(8)
168
+ });
169
+ var userSchema = import_zod.z.object({
170
+ id: uuidSchema,
171
+ firstName: import_zod.z.string(),
172
+ middleName: import_zod.z.string().nullable(),
173
+ lastName: import_zod.z.string(),
174
+ email: import_zod.z.string().email(),
175
+ phone: import_zod.z.string().nullable(),
176
+ avatarUrl: import_zod.z.string().nullable(),
177
+ isActive: import_zod.z.boolean(),
178
+ isMfaEnabled: import_zod.z.boolean(),
179
+ lastLoginAt: import_zod.z.string().datetime().nullable(),
180
+ createdAt: import_zod.z.string().datetime()
181
+ });
182
+ var branchSchema = import_zod.z.object({
183
+ id: uuidSchema,
184
+ name: import_zod.z.string(),
185
+ code: import_zod.z.string(),
186
+ address: import_zod.z.string(),
187
+ county: import_zod.z.string(),
188
+ phone: import_zod.z.string().nullable(),
189
+ email: import_zod.z.string().email().nullable(),
190
+ logoUrl: import_zod.z.string().nullable(),
191
+ motto: import_zod.z.string().nullable(),
192
+ principalId: uuidSchema.nullable(),
193
+ mpesaPaybill: import_zod.z.string().nullable(),
194
+ featureFlags: import_zod.z.record(import_zod.z.boolean()),
195
+ createdAt: import_zod.z.string().datetime()
196
+ });
197
+ var createBranchInputSchema = import_zod.z.object({
198
+ name: import_zod.z.string().min(2).max(100),
199
+ code: import_zod.z.string().min(2).max(20),
200
+ address: import_zod.z.string(),
201
+ county: import_zod.z.string(),
202
+ phone: import_zod.z.string().optional(),
203
+ email: import_zod.z.string().email().optional(),
204
+ motto: import_zod.z.string().optional()
205
+ });
206
+ var studentStatusEnum = import_zod.z.enum([
207
+ "active",
208
+ "transferred",
209
+ "graduated",
210
+ "suspended",
211
+ "withdrawn"
212
+ ]);
213
+ var studentSchema = import_zod.z.object({
214
+ id: uuidSchema,
215
+ branchId: uuidSchema,
216
+ admissionNo: import_zod.z.string(),
217
+ nemisNo: import_zod.z.string().nullable(),
218
+ firstName: import_zod.z.string(),
219
+ middleName: import_zod.z.string().nullable(),
220
+ lastName: import_zod.z.string(),
221
+ dateOfBirth: import_zod.z.string(),
222
+ gender: genderEnum,
223
+ photoUrl: import_zod.z.string().nullable(),
224
+ bloodGroup: import_zod.z.string().nullable(),
225
+ admissionDate: import_zod.z.string(),
226
+ status: studentStatusEnum,
227
+ currentClassId: uuidSchema.nullable(),
228
+ createdAt: import_zod.z.string().datetime()
229
+ });
230
+ var createStudentInputSchema = import_zod.z.object({
231
+ admissionNo: import_zod.z.string().min(1),
232
+ nemisNo: import_zod.z.string().optional(),
233
+ firstName: import_zod.z.string().min(1).max(100),
234
+ middleName: import_zod.z.string().max(100).optional(),
235
+ lastName: import_zod.z.string().min(1).max(100),
236
+ dateOfBirth: import_zod.z.string(),
237
+ gender: genderEnum,
238
+ admissionDate: import_zod.z.string(),
239
+ guardianId: uuidSchema.optional()
240
+ });
241
+ var listStudentsInputSchema = paginationSchema.extend({
242
+ branchId: uuidSchema.optional(),
243
+ classId: uuidSchema.optional(),
244
+ search: import_zod.z.string().optional(),
245
+ status: studentStatusEnum.optional(),
246
+ termId: uuidSchema.optional()
247
+ });
248
+ var guardianSchema = import_zod.z.object({
249
+ id: uuidSchema,
250
+ userId: uuidSchema,
251
+ firstName: import_zod.z.string(),
252
+ middleName: import_zod.z.string().nullable(),
253
+ lastName: import_zod.z.string(),
254
+ relationship: import_zod.z.string(),
255
+ phone: import_zod.z.string(),
256
+ email: import_zod.z.string().email().nullable(),
257
+ nationalId: import_zod.z.string().nullable(),
258
+ occupation: import_zod.z.string().nullable(),
259
+ address: import_zod.z.string().nullable()
260
+ });
261
+ var sponsorTypeEnum = import_zod.z.enum(["organisation", "individual"]);
262
+ var sponsorSchema = import_zod.z.object({
263
+ id: uuidSchema,
264
+ branchId: uuidSchema,
265
+ type: sponsorTypeEnum,
266
+ organisationName: import_zod.z.string().nullable(),
267
+ firstName: import_zod.z.string().nullable(),
268
+ middleName: import_zod.z.string().nullable(),
269
+ lastName: import_zod.z.string().nullable(),
270
+ contactUserId: uuidSchema.nullable(),
271
+ phone: import_zod.z.string(),
272
+ email: import_zod.z.string().email().nullable(),
273
+ address: import_zod.z.string().nullable()
274
+ });
275
+ var gradeLevelEnum = import_zod.z.enum([
276
+ "PP1",
277
+ "PP2",
278
+ "G1",
279
+ "G2",
280
+ "G3",
281
+ "G4",
282
+ "G5",
283
+ "G6",
284
+ "G7",
285
+ "G8",
286
+ "G9"
287
+ ]);
288
+ var assessmentTypeEnum = import_zod.z.enum([
289
+ "formative",
290
+ "summative",
291
+ "knec_national",
292
+ "informal"
293
+ ]);
294
+ var rubricBandEnum = import_zod.z.enum(["EE", "ME", "AE", "BE"]);
295
+ var subjectSchema = import_zod.z.object({
296
+ id: uuidSchema,
297
+ branchId: uuidSchema,
298
+ name: import_zod.z.string(),
299
+ code: import_zod.z.string(),
300
+ gradeLevel: gradeLevelEnum,
301
+ departmentId: uuidSchema.nullable()
302
+ });
303
+ var assessmentScoreInputSchema = import_zod.z.object({
304
+ assessmentId: uuidSchema,
305
+ studentId: uuidSchema,
306
+ subStrandId: uuidSchema,
307
+ numericScore: import_zod.z.number().min(0).max(100),
308
+ comments: import_zod.z.string().optional()
309
+ });
310
+ var reportCardStatusEnum = import_zod.z.enum([
311
+ "draft",
312
+ "hod_review",
313
+ "principal_review",
314
+ "released",
315
+ "blocked"
316
+ ]);
317
+ var feeItemCategoryEnum = import_zod.z.enum([
318
+ "compulsory",
319
+ "class_specific",
320
+ "additive"
321
+ ]);
322
+ var paymentMethodEnum = import_zod.z.enum([
323
+ "mpesa",
324
+ "bank",
325
+ "card",
326
+ "cash",
327
+ "cheque"
328
+ ]);
329
+ var invoiceStatusEnum = import_zod.z.enum([
330
+ "draft",
331
+ "sent",
332
+ "partial",
333
+ "paid",
334
+ "overdue",
335
+ "cancelled"
336
+ ]);
337
+ var feeItemSchema = import_zod.z.object({
338
+ id: uuidSchema,
339
+ branchId: uuidSchema,
340
+ name: import_zod.z.string(),
341
+ category: feeItemCategoryEnum,
342
+ defaultAmount: import_zod.z.number(),
343
+ applicableGrades: import_zod.z.array(gradeLevelEnum),
344
+ isActive: import_zod.z.boolean()
345
+ });
346
+ var recordPaymentInputSchema = import_zod.z.object({
347
+ studentId: uuidSchema,
348
+ invoiceId: uuidSchema,
349
+ amount: import_zod.z.number().positive(),
350
+ method: paymentMethodEnum,
351
+ reference: import_zod.z.string().optional(),
352
+ mpesaReceipt: import_zod.z.string().optional(),
353
+ paymentDate: import_zod.z.string()
354
+ });
355
+ var employmentTypeEnum = import_zod.z.enum([
356
+ "permanent",
357
+ "contract",
358
+ "temporary",
359
+ "intern"
360
+ ]);
361
+ var staffSchema = import_zod.z.object({
362
+ id: uuidSchema,
363
+ branchId: uuidSchema,
364
+ userId: uuidSchema,
365
+ firstName: import_zod.z.string(),
366
+ middleName: import_zod.z.string().nullable(),
367
+ lastName: import_zod.z.string(),
368
+ tscNumber: import_zod.z.string().nullable(),
369
+ nationalId: import_zod.z.string(),
370
+ kraPin: import_zod.z.string().nullable(),
371
+ nhifNo: import_zod.z.string().nullable(),
372
+ nssfNo: import_zod.z.string().nullable(),
373
+ phone: import_zod.z.string(),
374
+ departmentId: uuidSchema.nullable(),
375
+ designation: import_zod.z.string(),
376
+ employmentType: employmentTypeEnum,
377
+ contractStart: import_zod.z.string(),
378
+ contractEnd: import_zod.z.string().nullable(),
379
+ basicSalary: import_zod.z.number(),
380
+ houseAllowance: import_zod.z.number().default(0),
381
+ transportAllowance: import_zod.z.number().default(0),
382
+ bankName: import_zod.z.string().nullable(),
383
+ bankAccount: import_zod.z.string().nullable(),
384
+ status: userStatusEnum
385
+ });
386
+ var leaveStatusEnum = import_zod.z.enum([
387
+ "pending",
388
+ "approved",
389
+ "rejected",
390
+ "cancelled"
391
+ ]);
392
+ var leaveRequestInputSchema = import_zod.z.object({
393
+ leaveTypeId: uuidSchema,
394
+ startDate: import_zod.z.string(),
395
+ endDate: import_zod.z.string(),
396
+ reason: import_zod.z.string().min(10)
397
+ });
398
+ var vehicleOwnershipEnum = import_zod.z.enum(["owned", "contracted"]);
399
+ var vehicleTypeEnum = import_zod.z.enum(["bus", "van", "pickup", "other"]);
400
+ var busRegisterStatusEnum = import_zod.z.enum(["boarded", "alighted", "absent"]);
401
+ var tripLogInputSchema = import_zod.z.object({
402
+ vehicleId: uuidSchema,
403
+ routeId: uuidSchema,
404
+ departureTime: import_zod.z.string().datetime(),
405
+ tripType: import_zod.z.enum(["morning", "evening", "errand"])
406
+ });
407
+ var busRegisterEntrySchema = import_zod.z.object({
408
+ studentId: uuidSchema,
409
+ status: busRegisterStatusEnum
410
+ });
411
+ var assetCategoryEnum = import_zod.z.enum([
412
+ "furniture",
413
+ "lab_equipment",
414
+ "ict_device",
415
+ "vehicle",
416
+ "sports_equipment",
417
+ "kitchen_equipment",
418
+ "musical_instrument",
419
+ "classroom_supply",
420
+ "library_book",
421
+ "other"
422
+ ]);
423
+ var assetConditionEnum = import_zod.z.enum([
424
+ "excellent",
425
+ "good",
426
+ "fair",
427
+ "poor",
428
+ "condemned"
429
+ ]);
430
+ var maintenanceTicketStatusEnum = import_zod.z.enum([
431
+ "open",
432
+ "in_progress",
433
+ "resolved",
434
+ "closed"
435
+ ]);
436
+ var borrowingStatusEnum = import_zod.z.enum([
437
+ "active",
438
+ "returned",
439
+ "overdue",
440
+ "lost"
441
+ ]);
442
+ var incidentSeverityEnum = import_zod.z.enum([
443
+ "minor",
444
+ "moderate",
445
+ "serious",
446
+ "critical"
447
+ ]);
448
+ var incidentStatusEnum = import_zod.z.enum([
449
+ "open",
450
+ "counsellor_review",
451
+ "hod_review",
452
+ "principal_ruling",
453
+ "resolved"
454
+ ]);
455
+ var disciplineRulingEnum = import_zod.z.enum([
456
+ "verbal_warning",
457
+ "written_warning",
458
+ "suspension",
459
+ "expulsion",
460
+ "dismissed"
461
+ ]);
462
+ var payrollRunStatusEnum = import_zod.z.enum(["draft", "approved", "paid"]);
463
+ var notificationTypeEnum = import_zod.z.enum([
464
+ "report_card",
465
+ "fee_invoice",
466
+ "fee_reminder",
467
+ "fee_block",
468
+ "attendance_absent",
469
+ "bus_departed",
470
+ "bus_arrived",
471
+ "discipline_incident",
472
+ "assignment",
473
+ "notice",
474
+ "leave",
475
+ "payslip"
476
+ ]);
477
+ var sendBulkSmsInputSchema = import_zod.z.object({
478
+ branchId: uuidSchema,
479
+ message: import_zod.z.string().min(1).max(160),
480
+ recipientType: import_zod.z.enum(["class", "grade", "whole_school", "custom"]),
481
+ recipientIds: import_zod.z.array(uuidSchema).optional(),
482
+ scheduleAt: import_zod.z.string().datetime().optional()
483
+ });
484
+
485
+ // src/contracts/index.ts
486
+ var import_contract = require("@orpc/contract");
487
+ var import_zod2 = require("zod");
488
+ var authContract = {
489
+ login: import_contract.oc.input(loginInputSchema).output(loginOutputSchema),
490
+ refresh: import_contract.oc.input(refreshInputSchema).output(refreshTokenOutputSchema),
491
+ logout: import_contract.oc.output(import_zod2.z.object({ success: import_zod2.z.boolean() })),
492
+ me: import_contract.oc.output(
493
+ userSchema.extend({
494
+ roles: import_zod2.z.array(
495
+ import_zod2.z.object({
496
+ id: uuidSchema,
497
+ name: import_zod2.z.string(),
498
+ branchId: uuidSchema.nullable()
499
+ })
500
+ )
501
+ })
502
+ ),
503
+ verifyMfa: import_contract.oc.input(mfaVerifyInputSchema).output(import_zod2.z.object({ verified: import_zod2.z.boolean() })),
504
+ changePassword: import_contract.oc.input(changePasswordInputSchema).output(import_zod2.z.object({ success: import_zod2.z.boolean() })),
505
+ switchBranch: import_contract.oc.input(import_zod2.z.object({ branchId: uuidSchema })).output(import_zod2.z.object({ accessToken: import_zod2.z.string() }))
506
+ };
507
+ var branchesContract = {
508
+ list: import_contract.oc.output(import_zod2.z.array(branchSchema)),
509
+ get: import_contract.oc.input(import_zod2.z.object({ id: uuidSchema })).output(branchSchema),
510
+ create: import_contract.oc.input(createBranchInputSchema).output(branchSchema),
511
+ update: import_contract.oc.input(createBranchInputSchema.partial().extend({ id: uuidSchema })).output(branchSchema),
512
+ updateFeatureFlags: import_contract.oc.input(import_zod2.z.object({ branchId: uuidSchema, flags: import_zod2.z.record(import_zod2.z.boolean()) })).output(branchSchema)
513
+ };
514
+ var studentWithGuardians = studentSchema.extend({
515
+ guardians: import_zod2.z.array(guardianSchema),
516
+ sponsors: import_zod2.z.array(sponsorSchema),
517
+ currentClass: import_zod2.z.object({ id: uuidSchema, name: import_zod2.z.string(), grade: import_zod2.z.string() }).nullable()
518
+ });
519
+ var studentsContract = {
520
+ list: import_contract.oc.input(listStudentsInputSchema).output(
521
+ import_zod2.z.object({
522
+ data: import_zod2.z.array(studentSchema),
523
+ total: import_zod2.z.number(),
524
+ page: import_zod2.z.number(),
525
+ limit: import_zod2.z.number()
526
+ })
527
+ ),
528
+ get: import_contract.oc.input(import_zod2.z.object({ id: uuidSchema })).output(studentWithGuardians),
529
+ create: import_contract.oc.input(createStudentInputSchema).output(studentSchema),
530
+ update: import_contract.oc.input(createStudentInputSchema.partial().extend({ id: uuidSchema })).output(studentSchema),
531
+ enroll: import_contract.oc.input(
532
+ import_zod2.z.object({
533
+ studentId: uuidSchema,
534
+ classId: uuidSchema,
535
+ termId: uuidSchema
536
+ })
537
+ ).output(import_zod2.z.object({ success: import_zod2.z.boolean() })),
538
+ transfer: import_contract.oc.input(
539
+ import_zod2.z.object({
540
+ studentId: uuidSchema,
541
+ toBranchId: uuidSchema,
542
+ reason: import_zod2.z.string()
543
+ })
544
+ ).output(import_zod2.z.object({ success: import_zod2.z.boolean() })),
545
+ linkGuardian: import_contract.oc.input(
546
+ import_zod2.z.object({
547
+ studentId: uuidSchema,
548
+ guardianId: uuidSchema,
549
+ isPrimary: import_zod2.z.boolean()
550
+ })
551
+ ).output(import_zod2.z.object({ success: import_zod2.z.boolean() })),
552
+ linkSponsor: import_contract.oc.input(
553
+ import_zod2.z.object({
554
+ studentId: uuidSchema,
555
+ sponsorId: uuidSchema,
556
+ termId: uuidSchema,
557
+ feeItemIds: import_zod2.z.array(uuidSchema)
558
+ })
559
+ ).output(import_zod2.z.object({ success: import_zod2.z.boolean() }))
560
+ };
561
+ var academicsContract = {
562
+ subjects: {
563
+ list: import_contract.oc.input(
564
+ import_zod2.z.object({
565
+ branchId: uuidSchema,
566
+ gradeLevel: gradeLevelEnum.optional()
567
+ })
568
+ ).output(import_zod2.z.array(subjectSchema)),
569
+ create: import_contract.oc.input(
570
+ import_zod2.z.object({
571
+ name: import_zod2.z.string(),
572
+ code: import_zod2.z.string(),
573
+ gradeLevel: gradeLevelEnum,
574
+ departmentId: uuidSchema.optional()
575
+ })
576
+ ).output(subjectSchema)
577
+ },
578
+ timetable: {
579
+ get: import_contract.oc.input(import_zod2.z.object({ classId: uuidSchema, termId: uuidSchema })).output(
580
+ import_zod2.z.array(
581
+ import_zod2.z.object({
582
+ id: uuidSchema,
583
+ dayOfWeek: import_zod2.z.number().min(1).max(5),
584
+ periodNo: import_zod2.z.number(),
585
+ subject: subjectSchema,
586
+ teacherName: import_zod2.z.string(),
587
+ room: import_zod2.z.string().nullable(),
588
+ startTime: import_zod2.z.string(),
589
+ endTime: import_zod2.z.string()
590
+ })
591
+ )
592
+ ),
593
+ upsert: import_contract.oc.input(
594
+ import_zod2.z.object({
595
+ classId: uuidSchema,
596
+ termId: uuidSchema,
597
+ slots: import_zod2.z.array(
598
+ import_zod2.z.object({
599
+ dayOfWeek: import_zod2.z.number().min(1).max(5),
600
+ periodNo: import_zod2.z.number(),
601
+ subjectId: uuidSchema,
602
+ teacherId: uuidSchema,
603
+ room: import_zod2.z.string().optional(),
604
+ startTime: import_zod2.z.string(),
605
+ endTime: import_zod2.z.string()
606
+ })
607
+ )
608
+ })
609
+ ).output(import_zod2.z.object({ success: import_zod2.z.boolean() }))
610
+ },
611
+ assessments: {
612
+ list: import_contract.oc.input(
613
+ import_zod2.z.object({
614
+ classId: uuidSchema,
615
+ termId: uuidSchema,
616
+ type: assessmentTypeEnum.optional()
617
+ })
618
+ ).output(
619
+ import_zod2.z.array(
620
+ import_zod2.z.object({
621
+ id: uuidSchema,
622
+ title: import_zod2.z.string(),
623
+ type: assessmentTypeEnum,
624
+ date: import_zod2.z.string(),
625
+ maxScore: import_zod2.z.number(),
626
+ subjectId: uuidSchema
627
+ })
628
+ )
629
+ ),
630
+ create: import_contract.oc.input(
631
+ import_zod2.z.object({
632
+ title: import_zod2.z.string(),
633
+ type: assessmentTypeEnum,
634
+ classId: uuidSchema,
635
+ subjectId: uuidSchema,
636
+ termId: uuidSchema,
637
+ date: import_zod2.z.string(),
638
+ maxScore: import_zod2.z.number()
639
+ })
640
+ ).output(import_zod2.z.object({ id: uuidSchema })),
641
+ enterScores: import_contract.oc.input(import_zod2.z.object({ scores: import_zod2.z.array(assessmentScoreInputSchema) })).output(import_zod2.z.object({ saved: import_zod2.z.number() }))
642
+ },
643
+ reportCards: {
644
+ list: import_contract.oc.input(
645
+ import_zod2.z.object({
646
+ branchId: uuidSchema,
647
+ termId: uuidSchema,
648
+ classId: uuidSchema.optional(),
649
+ status: reportCardStatusEnum.optional()
650
+ })
651
+ ).output(
652
+ import_zod2.z.array(
653
+ import_zod2.z.object({
654
+ id: uuidSchema,
655
+ studentId: uuidSchema,
656
+ studentName: import_zod2.z.string(),
657
+ status: reportCardStatusEnum,
658
+ generatedAt: import_zod2.z.string().datetime().nullable()
659
+ })
660
+ )
661
+ ),
662
+ get: import_contract.oc.input(import_zod2.z.object({ studentId: uuidSchema, termId: uuidSchema })).output(
663
+ import_zod2.z.object({
664
+ id: uuidSchema,
665
+ studentId: uuidSchema,
666
+ termId: uuidSchema,
667
+ status: reportCardStatusEnum,
668
+ scores: import_zod2.z.array(import_zod2.z.any()),
669
+ teacherComments: import_zod2.z.string().nullable(),
670
+ generatedAt: import_zod2.z.string().datetime().nullable()
671
+ })
672
+ ),
673
+ updateStatus: import_contract.oc.input(
674
+ import_zod2.z.object({
675
+ id: uuidSchema,
676
+ status: reportCardStatusEnum,
677
+ comments: import_zod2.z.string().optional()
678
+ })
679
+ ).output(import_zod2.z.object({ success: import_zod2.z.boolean() }))
680
+ },
681
+ attendance: {
682
+ markClass: import_contract.oc.input(
683
+ import_zod2.z.object({
684
+ classId: uuidSchema,
685
+ date: import_zod2.z.string(),
686
+ subjectId: uuidSchema,
687
+ records: import_zod2.z.array(
688
+ import_zod2.z.object({
689
+ studentId: uuidSchema,
690
+ present: import_zod2.z.boolean(),
691
+ note: import_zod2.z.string().optional()
692
+ })
693
+ )
694
+ })
695
+ ).output(import_zod2.z.object({ saved: import_zod2.z.number() })),
696
+ getClassAttendance: import_contract.oc.input(
697
+ import_zod2.z.object({ classId: uuidSchema, from: import_zod2.z.string(), to: import_zod2.z.string() })
698
+ ).output(
699
+ import_zod2.z.array(
700
+ import_zod2.z.object({
701
+ studentId: uuidSchema,
702
+ studentName: import_zod2.z.string(),
703
+ presentDays: import_zod2.z.number(),
704
+ absentDays: import_zod2.z.number(),
705
+ percentage: import_zod2.z.number()
706
+ })
707
+ )
708
+ )
709
+ }
710
+ };
711
+ var financeContract = {
712
+ feeItems: {
713
+ list: import_contract.oc.input(import_zod2.z.object({ branchId: uuidSchema })).output(import_zod2.z.array(feeItemSchema)),
714
+ create: import_contract.oc.input(
715
+ import_zod2.z.object({
716
+ name: import_zod2.z.string(),
717
+ category: import_zod2.z.any(),
718
+ defaultAmount: import_zod2.z.number(),
719
+ applicableGrades: import_zod2.z.array(gradeLevelEnum)
720
+ })
721
+ ).output(feeItemSchema)
722
+ },
723
+ invoices: {
724
+ listForStudent: import_contract.oc.input(import_zod2.z.object({ studentId: uuidSchema, termId: uuidSchema.optional() })).output(
725
+ import_zod2.z.array(
726
+ import_zod2.z.object({
727
+ id: uuidSchema,
728
+ termId: uuidSchema,
729
+ payerType: import_zod2.z.string(),
730
+ totalAmount: import_zod2.z.number(),
731
+ paidAmount: import_zod2.z.number(),
732
+ balance: import_zod2.z.number(),
733
+ status: invoiceStatusEnum,
734
+ dueDate: import_zod2.z.string().nullable()
735
+ })
736
+ )
737
+ ),
738
+ generate: import_contract.oc.input(
739
+ import_zod2.z.object({
740
+ branchId: uuidSchema,
741
+ termId: uuidSchema,
742
+ studentIds: import_zod2.z.array(uuidSchema).optional()
743
+ })
744
+ ).output(import_zod2.z.object({ generated: import_zod2.z.number() }))
745
+ },
746
+ payments: {
747
+ record: import_contract.oc.input(recordPaymentInputSchema).output(import_zod2.z.object({ id: uuidSchema, receipt: import_zod2.z.string() })),
748
+ listForStudent: import_contract.oc.input(import_zod2.z.object({ studentId: uuidSchema })).output(
749
+ import_zod2.z.array(
750
+ import_zod2.z.object({
751
+ id: uuidSchema,
752
+ amount: import_zod2.z.number(),
753
+ method: import_zod2.z.string(),
754
+ reference: import_zod2.z.string().nullable(),
755
+ paymentDate: import_zod2.z.string(),
756
+ createdAt: import_zod2.z.string()
757
+ })
758
+ )
759
+ )
760
+ },
761
+ blocks: {
762
+ list: import_contract.oc.input(
763
+ import_zod2.z.object({
764
+ branchId: uuidSchema,
765
+ termId: uuidSchema,
766
+ active: import_zod2.z.boolean().optional()
767
+ })
768
+ ).output(
769
+ import_zod2.z.array(
770
+ import_zod2.z.object({
771
+ id: uuidSchema,
772
+ studentId: uuidSchema,
773
+ studentName: import_zod2.z.string(),
774
+ blockType: import_zod2.z.string(),
775
+ isActive: import_zod2.z.boolean(),
776
+ balanceAtBlock: import_zod2.z.number()
777
+ })
778
+ )
779
+ ),
780
+ lift: import_contract.oc.input(import_zod2.z.object({ blockId: uuidSchema, reason: import_zod2.z.string() })).output(import_zod2.z.object({ success: import_zod2.z.boolean() }))
781
+ },
782
+ reports: {
783
+ termCollection: import_contract.oc.input(import_zod2.z.object({ branchId: uuidSchema, termId: uuidSchema })).output(
784
+ import_zod2.z.object({
785
+ totalExpected: import_zod2.z.number(),
786
+ totalCollected: import_zod2.z.number(),
787
+ totalOutstanding: import_zod2.z.number(),
788
+ collectionRate: import_zod2.z.number(),
789
+ byPaymentMethod: import_zod2.z.record(import_zod2.z.number())
790
+ })
791
+ )
792
+ }
793
+ };
794
+ var hrContract = {
795
+ staff: {
796
+ list: import_contract.oc.input(
797
+ paginationSchema.extend({
798
+ branchId: uuidSchema,
799
+ search: import_zod2.z.string().optional(),
800
+ departmentId: uuidSchema.optional()
801
+ })
802
+ ).output(import_zod2.z.object({ data: import_zod2.z.array(staffSchema), total: import_zod2.z.number() })),
803
+ get: import_contract.oc.input(import_zod2.z.object({ id: uuidSchema })).output(staffSchema),
804
+ create: import_contract.oc.input(
805
+ staffSchema.omit({ id: true }).partial({
806
+ contractEnd: true,
807
+ tscNumber: true,
808
+ kraPin: true,
809
+ nhifNo: true,
810
+ nssfNo: true,
811
+ bankName: true,
812
+ bankAccount: true,
813
+ departmentId: true
814
+ })
815
+ ).output(staffSchema)
816
+ },
817
+ leave: {
818
+ request: import_contract.oc.input(leaveRequestInputSchema).output(import_zod2.z.object({ id: uuidSchema })),
819
+ list: import_contract.oc.input(
820
+ import_zod2.z.object({
821
+ branchId: uuidSchema,
822
+ staffId: uuidSchema.optional(),
823
+ status: leaveStatusEnum.optional()
824
+ })
825
+ ).output(import_zod2.z.array(import_zod2.z.any())),
826
+ approve: import_contract.oc.input(
827
+ import_zod2.z.object({
828
+ id: uuidSchema,
829
+ approved: import_zod2.z.boolean(),
830
+ comment: import_zod2.z.string().optional()
831
+ })
832
+ ).output(import_zod2.z.object({ success: import_zod2.z.boolean() }))
833
+ },
834
+ attendance: {
835
+ mark: import_contract.oc.input(
836
+ import_zod2.z.object({
837
+ staffId: uuidSchema,
838
+ date: import_zod2.z.string(),
839
+ checkIn: import_zod2.z.string().optional(),
840
+ checkOut: import_zod2.z.string().optional(),
841
+ status: import_zod2.z.enum(["present", "absent", "late", "half_day"])
842
+ })
843
+ ).output(import_zod2.z.object({ success: import_zod2.z.boolean() })),
844
+ getSummary: import_contract.oc.input(
845
+ import_zod2.z.object({ staffId: uuidSchema, month: import_zod2.z.number(), year: import_zod2.z.number() })
846
+ ).output(
847
+ import_zod2.z.object({
848
+ presentDays: import_zod2.z.number(),
849
+ absentDays: import_zod2.z.number(),
850
+ lateDays: import_zod2.z.number()
851
+ })
852
+ )
853
+ }
854
+ };
855
+ var payrollContract = {
856
+ runs: {
857
+ list: import_contract.oc.input(import_zod2.z.object({ branchId: uuidSchema, year: import_zod2.z.number().optional() })).output(
858
+ import_zod2.z.array(
859
+ import_zod2.z.object({
860
+ id: uuidSchema,
861
+ month: import_zod2.z.number(),
862
+ year: import_zod2.z.number(),
863
+ status: payrollRunStatusEnum,
864
+ netTotal: import_zod2.z.number()
865
+ })
866
+ )
867
+ ),
868
+ initiate: import_contract.oc.input(
869
+ import_zod2.z.object({ branchId: uuidSchema, month: import_zod2.z.number(), year: import_zod2.z.number() })
870
+ ).output(import_zod2.z.object({ id: uuidSchema, preview: import_zod2.z.array(import_zod2.z.any()) })),
871
+ approve: import_contract.oc.input(import_zod2.z.object({ id: uuidSchema })).output(import_zod2.z.object({ success: import_zod2.z.boolean() })),
872
+ getPayslip: import_contract.oc.input(import_zod2.z.object({ payrollRunId: uuidSchema, staffId: uuidSchema })).output(import_zod2.z.object({ url: import_zod2.z.string() }))
873
+ }
874
+ };
875
+ var transportContract = {
876
+ vehicles: {
877
+ list: import_contract.oc.input(import_zod2.z.object({ branchId: uuidSchema })).output(
878
+ import_zod2.z.array(
879
+ import_zod2.z.object({
880
+ id: uuidSchema,
881
+ plateNo: import_zod2.z.string(),
882
+ type: import_zod2.z.string(),
883
+ status: import_zod2.z.string(),
884
+ currentTrip: import_zod2.z.any().nullable()
885
+ })
886
+ )
887
+ )
888
+ },
889
+ trips: {
890
+ start: import_contract.oc.input(tripLogInputSchema).output(import_zod2.z.object({ id: uuidSchema })),
891
+ recordBoardings: import_contract.oc.input(
892
+ import_zod2.z.object({
893
+ tripId: uuidSchema,
894
+ entries: import_zod2.z.array(busRegisterEntrySchema)
895
+ })
896
+ ).output(import_zod2.z.object({ saved: import_zod2.z.number() })),
897
+ complete: import_contract.oc.input(
898
+ import_zod2.z.object({ tripId: uuidSchema, arrivalTime: import_zod2.z.string().datetime() })
899
+ ).output(import_zod2.z.object({ success: import_zod2.z.boolean() })),
900
+ reportIncident: import_contract.oc.input(
901
+ import_zod2.z.object({
902
+ tripId: uuidSchema,
903
+ description: import_zod2.z.string(),
904
+ severity: incidentSeverityEnum,
905
+ location: import_zod2.z.string().optional()
906
+ })
907
+ ).output(import_zod2.z.object({ id: uuidSchema }))
908
+ },
909
+ maintenance: {
910
+ log: import_contract.oc.input(
911
+ import_zod2.z.object({
912
+ vehicleId: uuidSchema,
913
+ issue: import_zod2.z.string(),
914
+ severity: import_zod2.z.enum(["routine", "urgent", "critical"])
915
+ })
916
+ ).output(import_zod2.z.object({ id: uuidSchema })),
917
+ list: import_contract.oc.input(import_zod2.z.object({ vehicleId: uuidSchema })).output(import_zod2.z.array(import_zod2.z.any()))
918
+ }
919
+ };
920
+ var assetsContract = {
921
+ list: import_contract.oc.input(
922
+ paginationSchema.extend({
923
+ branchId: uuidSchema,
924
+ category: assetCategoryEnum.optional(),
925
+ search: import_zod2.z.string().optional()
926
+ })
927
+ ).output(import_zod2.z.object({ data: import_zod2.z.array(import_zod2.z.any()), total: import_zod2.z.number() })),
928
+ create: import_contract.oc.input(
929
+ import_zod2.z.object({
930
+ name: import_zod2.z.string(),
931
+ category: assetCategoryEnum,
932
+ serialNo: import_zod2.z.string().optional(),
933
+ purchaseDate: import_zod2.z.string(),
934
+ purchaseCost: import_zod2.z.number(),
935
+ supplier: import_zod2.z.string().optional(),
936
+ warrantyExpiry: import_zod2.z.string().optional(),
937
+ condition: assetConditionEnum,
938
+ depreciationRate: import_zod2.z.number().min(0).max(100)
939
+ })
940
+ ).output(import_zod2.z.object({ id: uuidSchema })),
941
+ assign: import_contract.oc.input(
942
+ import_zod2.z.object({
943
+ assetId: uuidSchema,
944
+ staffId: uuidSchema.optional(),
945
+ room: import_zod2.z.string().optional()
946
+ })
947
+ ).output(import_zod2.z.object({ success: import_zod2.z.boolean() })),
948
+ ticket: {
949
+ create: import_contract.oc.input(
950
+ import_zod2.z.object({
951
+ assetId: uuidSchema,
952
+ description: import_zod2.z.string(),
953
+ severity: import_zod2.z.string()
954
+ })
955
+ ).output(import_zod2.z.object({ id: uuidSchema })),
956
+ update: import_contract.oc.input(
957
+ import_zod2.z.object({
958
+ ticketId: uuidSchema,
959
+ status: maintenanceTicketStatusEnum,
960
+ notes: import_zod2.z.string().optional(),
961
+ cost: import_zod2.z.number().optional()
962
+ })
963
+ ).output(import_zod2.z.object({ success: import_zod2.z.boolean() }))
964
+ }
965
+ };
966
+ var libraryContract = {
967
+ books: {
968
+ list: import_contract.oc.input(
969
+ paginationSchema.extend({
970
+ branchId: uuidSchema,
971
+ search: import_zod2.z.string().optional(),
972
+ available: import_zod2.z.boolean().optional()
973
+ })
974
+ ).output(import_zod2.z.object({ data: import_zod2.z.array(import_zod2.z.any()), total: import_zod2.z.number() })),
975
+ create: import_contract.oc.input(
976
+ import_zod2.z.object({
977
+ isbn: import_zod2.z.string(),
978
+ title: import_zod2.z.string(),
979
+ author: import_zod2.z.string(),
980
+ publisher: import_zod2.z.string().optional(),
981
+ year: import_zod2.z.number().optional(),
982
+ subjectArea: import_zod2.z.string().optional(),
983
+ copiesTotal: import_zod2.z.number().min(1),
984
+ shelfLocation: import_zod2.z.string().optional()
985
+ })
986
+ ).output(import_zod2.z.object({ id: uuidSchema }))
987
+ },
988
+ borrowings: {
989
+ checkout: import_contract.oc.input(
990
+ import_zod2.z.object({
991
+ bookId: uuidSchema,
992
+ borrowerType: import_zod2.z.enum(["student", "staff"]),
993
+ borrowerId: uuidSchema,
994
+ dueDate: import_zod2.z.string()
995
+ })
996
+ ).output(import_zod2.z.object({ id: uuidSchema })),
997
+ return: import_contract.oc.input(
998
+ import_zod2.z.object({ borrowingId: uuidSchema, condition: import_zod2.z.string().optional() })
999
+ ).output(import_zod2.z.object({ fine: import_zod2.z.number() })),
1000
+ listOverdue: import_contract.oc.input(import_zod2.z.object({ branchId: uuidSchema })).output(import_zod2.z.array(import_zod2.z.any()))
1001
+ }
1002
+ };
1003
+ var disciplineContract = {
1004
+ incidents: {
1005
+ log: import_contract.oc.input(
1006
+ import_zod2.z.object({
1007
+ studentId: uuidSchema,
1008
+ incidentType: import_zod2.z.string(),
1009
+ description: import_zod2.z.string(),
1010
+ severity: incidentSeverityEnum,
1011
+ incidentDate: import_zod2.z.string(),
1012
+ requiresCounsellor: import_zod2.z.boolean().default(false)
1013
+ })
1014
+ ).output(import_zod2.z.object({ id: uuidSchema })),
1015
+ list: import_contract.oc.input(
1016
+ paginationSchema.extend({
1017
+ branchId: uuidSchema,
1018
+ studentId: uuidSchema.optional(),
1019
+ status: incidentStatusEnum.optional()
1020
+ })
1021
+ ).output(import_zod2.z.object({ data: import_zod2.z.array(import_zod2.z.any()), total: import_zod2.z.number() })),
1022
+ rule: import_contract.oc.input(
1023
+ import_zod2.z.object({
1024
+ incidentId: uuidSchema,
1025
+ ruling: disciplineRulingEnum,
1026
+ suspensionDays: import_zod2.z.number().optional(),
1027
+ notes: import_zod2.z.string()
1028
+ })
1029
+ ).output(import_zod2.z.object({ success: import_zod2.z.boolean() }))
1030
+ }
1031
+ };
1032
+ var commsContract = {
1033
+ notifications: {
1034
+ list: import_contract.oc.input(paginationSchema.extend({ unreadOnly: import_zod2.z.boolean().optional() })).output(import_zod2.z.object({ data: import_zod2.z.array(import_zod2.z.any()), unreadCount: import_zod2.z.number() })),
1035
+ markRead: import_contract.oc.input(import_zod2.z.object({ ids: import_zod2.z.array(uuidSchema) })).output(import_zod2.z.object({ updated: import_zod2.z.number() }))
1036
+ },
1037
+ messages: {
1038
+ list: import_contract.oc.input(paginationSchema).output(import_zod2.z.array(import_zod2.z.any())),
1039
+ send: import_contract.oc.input(
1040
+ import_zod2.z.object({
1041
+ recipientId: uuidSchema,
1042
+ subject: import_zod2.z.string(),
1043
+ body: import_zod2.z.string(),
1044
+ parentId: uuidSchema.optional()
1045
+ })
1046
+ ).output(import_zod2.z.object({ id: uuidSchema }))
1047
+ },
1048
+ sms: {
1049
+ send: import_contract.oc.input(sendBulkSmsInputSchema).output(import_zod2.z.object({ queued: import_zod2.z.number() }))
1050
+ },
1051
+ notices: {
1052
+ list: import_contract.oc.input(import_zod2.z.object({ branchId: uuidSchema, active: import_zod2.z.boolean().optional() })).output(import_zod2.z.array(import_zod2.z.any())),
1053
+ create: import_contract.oc.input(
1054
+ import_zod2.z.object({
1055
+ title: import_zod2.z.string(),
1056
+ body: import_zod2.z.string(),
1057
+ audienceType: import_zod2.z.string(),
1058
+ audienceIds: import_zod2.z.array(uuidSchema).optional(),
1059
+ publishAt: import_zod2.z.string().optional(),
1060
+ expiresAt: import_zod2.z.string().optional()
1061
+ })
1062
+ ).output(import_zod2.z.object({ id: uuidSchema }))
1063
+ }
1064
+ };
1065
+ var adminContract = {
1066
+ auditLogs: {
1067
+ list: import_contract.oc.input(
1068
+ paginationSchema.extend({
1069
+ branchId: uuidSchema.optional(),
1070
+ userId: uuidSchema.optional(),
1071
+ action: import_zod2.z.string().optional(),
1072
+ from: import_zod2.z.string().optional(),
1073
+ to: import_zod2.z.string().optional()
1074
+ })
1075
+ ).output(import_zod2.z.object({ data: import_zod2.z.array(import_zod2.z.any()), total: import_zod2.z.number() }))
1076
+ },
1077
+ users: {
1078
+ create: import_contract.oc.input(
1079
+ import_zod2.z.object({
1080
+ firstName: import_zod2.z.string(),
1081
+ middleName: import_zod2.z.string().optional(),
1082
+ lastName: import_zod2.z.string(),
1083
+ email: import_zod2.z.string().email(),
1084
+ phone: import_zod2.z.string().optional(),
1085
+ roleId: uuidSchema,
1086
+ branchId: uuidSchema,
1087
+ temporaryPassword: import_zod2.z.string().min(8)
1088
+ })
1089
+ ).output(import_zod2.z.object({ id: uuidSchema })),
1090
+ suspend: import_contract.oc.input(import_zod2.z.object({ userId: uuidSchema, reason: import_zod2.z.string() })).output(import_zod2.z.object({ success: import_zod2.z.boolean() }))
1091
+ },
1092
+ roles: {
1093
+ list: import_contract.oc.input(import_zod2.z.object({ branchId: uuidSchema })).output(
1094
+ import_zod2.z.array(
1095
+ import_zod2.z.object({
1096
+ id: uuidSchema,
1097
+ name: import_zod2.z.string(),
1098
+ isSystem: import_zod2.z.boolean(),
1099
+ permissionCount: import_zod2.z.number()
1100
+ })
1101
+ )
1102
+ ),
1103
+ create: import_contract.oc.input(
1104
+ import_zod2.z.object({
1105
+ name: import_zod2.z.string(),
1106
+ description: import_zod2.z.string().optional(),
1107
+ permissionIds: import_zod2.z.array(uuidSchema)
1108
+ })
1109
+ ).output(import_zod2.z.object({ id: uuidSchema }))
1110
+ }
1111
+ };
1112
+ var storageContract = {
1113
+ presignUpload: import_contract.oc.input(
1114
+ import_zod2.z.object({
1115
+ fileName: import_zod2.z.string(),
1116
+ mimeType: import_zod2.z.string(),
1117
+ category: import_zod2.z.enum([
1118
+ "student_photo",
1119
+ "staff_photo",
1120
+ "document",
1121
+ "payslip",
1122
+ "report_card",
1123
+ "asset_photo",
1124
+ "notice_attachment"
1125
+ ]),
1126
+ resourceId: uuidSchema.optional()
1127
+ })
1128
+ ).output(
1129
+ import_zod2.z.object({
1130
+ uploadUrl: import_zod2.z.string(),
1131
+ fileKey: import_zod2.z.string(),
1132
+ expiresIn: import_zod2.z.number()
1133
+ })
1134
+ ),
1135
+ confirmUpload: import_contract.oc.input(
1136
+ import_zod2.z.object({
1137
+ fileKey: import_zod2.z.string(),
1138
+ resourceId: uuidSchema,
1139
+ resourceType: import_zod2.z.string()
1140
+ })
1141
+ ).output(import_zod2.z.object({ publicUrl: import_zod2.z.string() }))
1142
+ };
1143
+ var appContract = {
1144
+ auth: authContract,
1145
+ branches: branchesContract,
1146
+ students: studentsContract,
1147
+ academics: academicsContract,
1148
+ finance: financeContract,
1149
+ hr: hrContract,
1150
+ payroll: payrollContract,
1151
+ transport: transportContract,
1152
+ assets: assetsContract,
1153
+ library: libraryContract,
1154
+ discipline: disciplineContract,
1155
+ comms: commsContract,
1156
+ admin: adminContract,
1157
+ storage: storageContract
1158
+ };
1159
+ // Annotate the CommonJS export names for ESM import in node:
1160
+ 0 && (module.exports = {
1161
+ academicsContract,
1162
+ adminContract,
1163
+ appContract,
1164
+ assessmentScoreInputSchema,
1165
+ assessmentTypeEnum,
1166
+ assetCategoryEnum,
1167
+ assetConditionEnum,
1168
+ assetsContract,
1169
+ authContract,
1170
+ borrowingStatusEnum,
1171
+ branchSchema,
1172
+ branchesContract,
1173
+ busRegisterEntrySchema,
1174
+ busRegisterStatusEnum,
1175
+ changePasswordInputSchema,
1176
+ commsContract,
1177
+ createBranchInputSchema,
1178
+ createStudentInputSchema,
1179
+ dateRangeSchema,
1180
+ disciplineContract,
1181
+ disciplineRulingEnum,
1182
+ employmentTypeEnum,
1183
+ feeItemCategoryEnum,
1184
+ feeItemSchema,
1185
+ financeContract,
1186
+ genderEnum,
1187
+ gradeLevelEnum,
1188
+ guardianSchema,
1189
+ hrContract,
1190
+ incidentSeverityEnum,
1191
+ incidentStatusEnum,
1192
+ invoiceStatusEnum,
1193
+ leaveRequestInputSchema,
1194
+ leaveStatusEnum,
1195
+ libraryContract,
1196
+ listStudentsInputSchema,
1197
+ loginInputSchema,
1198
+ loginOutputSchema,
1199
+ maintenanceTicketStatusEnum,
1200
+ mfaVerifyInputSchema,
1201
+ notificationTypeEnum,
1202
+ paginationSchema,
1203
+ paymentMethodEnum,
1204
+ payrollContract,
1205
+ payrollRunStatusEnum,
1206
+ recordPaymentInputSchema,
1207
+ refreshInputSchema,
1208
+ refreshTokenOutputSchema,
1209
+ reportCardStatusEnum,
1210
+ rubricBandEnum,
1211
+ sendBulkSmsInputSchema,
1212
+ sponsorSchema,
1213
+ sponsorTypeEnum,
1214
+ staffSchema,
1215
+ storageContract,
1216
+ studentSchema,
1217
+ studentStatusEnum,
1218
+ studentsContract,
1219
+ subjectSchema,
1220
+ systemRoleEnum,
1221
+ transportContract,
1222
+ tripLogInputSchema,
1223
+ userSchema,
1224
+ userStatusEnum,
1225
+ uuidSchema,
1226
+ vehicleOwnershipEnum,
1227
+ vehicleTypeEnum
1228
+ });
1229
+ //# sourceMappingURL=index.js.map