@aibrains/shared-types 0.1.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.
Files changed (158) hide show
  1. package/README.md +170 -0
  2. package/dist/index.d.ts +48 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +74 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/mappers/edfi/calendar.mapper.d.ts +158 -0
  7. package/dist/mappers/edfi/calendar.mapper.d.ts.map +1 -0
  8. package/dist/mappers/edfi/calendar.mapper.js +235 -0
  9. package/dist/mappers/edfi/calendar.mapper.js.map +1 -0
  10. package/dist/mappers/edfi/credential.mapper.d.ts +50 -0
  11. package/dist/mappers/edfi/credential.mapper.d.ts.map +1 -0
  12. package/dist/mappers/edfi/credential.mapper.js +123 -0
  13. package/dist/mappers/edfi/credential.mapper.js.map +1 -0
  14. package/dist/mappers/edfi/index.d.ts +10 -0
  15. package/dist/mappers/edfi/index.d.ts.map +1 -0
  16. package/dist/mappers/edfi/index.js +26 -0
  17. package/dist/mappers/edfi/index.js.map +1 -0
  18. package/dist/mappers/edfi/staff.mapper.d.ts +96 -0
  19. package/dist/mappers/edfi/staff.mapper.d.ts.map +1 -0
  20. package/dist/mappers/edfi/staff.mapper.js +138 -0
  21. package/dist/mappers/edfi/staff.mapper.js.map +1 -0
  22. package/dist/mappers/index.d.ts +7 -0
  23. package/dist/mappers/index.d.ts.map +1 -0
  24. package/dist/mappers/index.js +23 -0
  25. package/dist/mappers/index.js.map +1 -0
  26. package/dist/schemas/academics/assignment.schema.d.ts +1463 -0
  27. package/dist/schemas/academics/assignment.schema.d.ts.map +1 -0
  28. package/dist/schemas/academics/assignment.schema.js +195 -0
  29. package/dist/schemas/academics/assignment.schema.js.map +1 -0
  30. package/dist/schemas/academics/attendance.schema.d.ts +762 -0
  31. package/dist/schemas/academics/attendance.schema.d.ts.map +1 -0
  32. package/dist/schemas/academics/attendance.schema.js +250 -0
  33. package/dist/schemas/academics/attendance.schema.js.map +1 -0
  34. package/dist/schemas/academics/classroom.schema.d.ts +742 -0
  35. package/dist/schemas/academics/classroom.schema.d.ts.map +1 -0
  36. package/dist/schemas/academics/classroom.schema.js +164 -0
  37. package/dist/schemas/academics/classroom.schema.js.map +1 -0
  38. package/dist/schemas/academics/course-section.schema.d.ts +388 -0
  39. package/dist/schemas/academics/course-section.schema.d.ts.map +1 -0
  40. package/dist/schemas/academics/course-section.schema.js +128 -0
  41. package/dist/schemas/academics/course-section.schema.js.map +1 -0
  42. package/dist/schemas/academics/course.schema.d.ts +778 -0
  43. package/dist/schemas/academics/course.schema.d.ts.map +1 -0
  44. package/dist/schemas/academics/course.schema.js +207 -0
  45. package/dist/schemas/academics/course.schema.js.map +1 -0
  46. package/dist/schemas/academics/grade.schema.d.ts +848 -0
  47. package/dist/schemas/academics/grade.schema.d.ts.map +1 -0
  48. package/dist/schemas/academics/grade.schema.js +251 -0
  49. package/dist/schemas/academics/grade.schema.js.map +1 -0
  50. package/dist/schemas/academics/index.d.ts +13 -0
  51. package/dist/schemas/academics/index.d.ts.map +1 -0
  52. package/dist/schemas/academics/index.js +29 -0
  53. package/dist/schemas/academics/index.js.map +1 -0
  54. package/dist/schemas/academics/student.schema.d.ts +2891 -0
  55. package/dist/schemas/academics/student.schema.d.ts.map +1 -0
  56. package/dist/schemas/academics/student.schema.js +249 -0
  57. package/dist/schemas/academics/student.schema.js.map +1 -0
  58. package/dist/schemas/common.d.ts +183 -0
  59. package/dist/schemas/common.d.ts.map +1 -0
  60. package/dist/schemas/common.js +126 -0
  61. package/dist/schemas/common.js.map +1 -0
  62. package/dist/schemas/enrollment/enrollment.schema.d.ts +2799 -0
  63. package/dist/schemas/enrollment/enrollment.schema.d.ts.map +1 -0
  64. package/dist/schemas/enrollment/enrollment.schema.js +435 -0
  65. package/dist/schemas/enrollment/enrollment.schema.js.map +1 -0
  66. package/dist/schemas/enrollment/index.d.ts +7 -0
  67. package/dist/schemas/enrollment/index.d.ts.map +1 -0
  68. package/dist/schemas/enrollment/index.js +23 -0
  69. package/dist/schemas/enrollment/index.js.map +1 -0
  70. package/dist/schemas/identity/academic-year.schema.d.ts +546 -0
  71. package/dist/schemas/identity/academic-year.schema.d.ts.map +1 -0
  72. package/dist/schemas/identity/academic-year.schema.js +137 -0
  73. package/dist/schemas/identity/academic-year.schema.js.map +1 -0
  74. package/dist/schemas/identity/auth.schema.d.ts +670 -0
  75. package/dist/schemas/identity/auth.schema.d.ts.map +1 -0
  76. package/dist/schemas/identity/auth.schema.js +126 -0
  77. package/dist/schemas/identity/auth.schema.js.map +1 -0
  78. package/dist/schemas/identity/bell-schedule.schema.d.ts +630 -0
  79. package/dist/schemas/identity/bell-schedule.schema.d.ts.map +1 -0
  80. package/dist/schemas/identity/bell-schedule.schema.js +143 -0
  81. package/dist/schemas/identity/bell-schedule.schema.js.map +1 -0
  82. package/dist/schemas/identity/calendar-date.schema.d.ts +830 -0
  83. package/dist/schemas/identity/calendar-date.schema.d.ts.map +1 -0
  84. package/dist/schemas/identity/calendar-date.schema.js +208 -0
  85. package/dist/schemas/identity/calendar-date.schema.js.map +1 -0
  86. package/dist/schemas/identity/credential.schema.d.ts +472 -0
  87. package/dist/schemas/identity/credential.schema.d.ts.map +1 -0
  88. package/dist/schemas/identity/credential.schema.js +200 -0
  89. package/dist/schemas/identity/credential.schema.js.map +1 -0
  90. package/dist/schemas/identity/department.schema.d.ts +567 -0
  91. package/dist/schemas/identity/department.schema.d.ts.map +1 -0
  92. package/dist/schemas/identity/department.schema.js +113 -0
  93. package/dist/schemas/identity/department.schema.js.map +1 -0
  94. package/dist/schemas/identity/index.d.ts +21 -0
  95. package/dist/schemas/identity/index.d.ts.map +1 -0
  96. package/dist/schemas/identity/index.js +39 -0
  97. package/dist/schemas/identity/index.js.map +1 -0
  98. package/dist/schemas/identity/leave.schema.d.ts +725 -0
  99. package/dist/schemas/identity/leave.schema.d.ts.map +1 -0
  100. package/dist/schemas/identity/leave.schema.js +204 -0
  101. package/dist/schemas/identity/leave.schema.js.map +1 -0
  102. package/dist/schemas/identity/role.schema.d.ts +356 -0
  103. package/dist/schemas/identity/role.schema.d.ts.map +1 -0
  104. package/dist/schemas/identity/role.schema.js +124 -0
  105. package/dist/schemas/identity/role.schema.js.map +1 -0
  106. package/dist/schemas/identity/school-year.schema.d.ts +303 -0
  107. package/dist/schemas/identity/school-year.schema.d.ts.map +1 -0
  108. package/dist/schemas/identity/school-year.schema.js +59 -0
  109. package/dist/schemas/identity/school-year.schema.js.map +1 -0
  110. package/dist/schemas/identity/school.schema.d.ts +844 -0
  111. package/dist/schemas/identity/school.schema.d.ts.map +1 -0
  112. package/dist/schemas/identity/school.schema.js +139 -0
  113. package/dist/schemas/identity/school.schema.js.map +1 -0
  114. package/dist/schemas/identity/security.schema.d.ts +422 -0
  115. package/dist/schemas/identity/security.schema.d.ts.map +1 -0
  116. package/dist/schemas/identity/security.schema.js +151 -0
  117. package/dist/schemas/identity/security.schema.js.map +1 -0
  118. package/dist/schemas/identity/session.schema.d.ts +193 -0
  119. package/dist/schemas/identity/session.schema.d.ts.map +1 -0
  120. package/dist/schemas/identity/session.schema.js +59 -0
  121. package/dist/schemas/identity/session.schema.js.map +1 -0
  122. package/dist/schemas/identity/staff.schema.d.ts +1037 -0
  123. package/dist/schemas/identity/staff.schema.d.ts.map +1 -0
  124. package/dist/schemas/identity/staff.schema.js +251 -0
  125. package/dist/schemas/identity/staff.schema.js.map +1 -0
  126. package/dist/schemas/identity/tenant.schema.d.ts +313 -0
  127. package/dist/schemas/identity/tenant.schema.d.ts.map +1 -0
  128. package/dist/schemas/identity/tenant.schema.js +81 -0
  129. package/dist/schemas/identity/tenant.schema.js.map +1 -0
  130. package/dist/schemas/identity/user.schema.d.ts +921 -0
  131. package/dist/schemas/identity/user.schema.d.ts.map +1 -0
  132. package/dist/schemas/identity/user.schema.js +201 -0
  133. package/dist/schemas/identity/user.schema.js.map +1 -0
  134. package/dist/schemas/index.d.ts +10 -0
  135. package/dist/schemas/index.d.ts.map +1 -0
  136. package/dist/schemas/index.js +26 -0
  137. package/dist/schemas/index.js.map +1 -0
  138. package/dist/validators/academic-year.d.ts +90 -0
  139. package/dist/validators/academic-year.d.ts.map +1 -0
  140. package/dist/validators/academic-year.js +190 -0
  141. package/dist/validators/academic-year.js.map +1 -0
  142. package/dist/validators/date-range.d.ts +142 -0
  143. package/dist/validators/date-range.d.ts.map +1 -0
  144. package/dist/validators/date-range.js +170 -0
  145. package/dist/validators/date-range.js.map +1 -0
  146. package/dist/validators/grade-level.d.ts +80 -0
  147. package/dist/validators/grade-level.d.ts.map +1 -0
  148. package/dist/validators/grade-level.js +157 -0
  149. package/dist/validators/grade-level.js.map +1 -0
  150. package/dist/validators/index.d.ts +10 -0
  151. package/dist/validators/index.d.ts.map +1 -0
  152. package/dist/validators/index.js +26 -0
  153. package/dist/validators/index.js.map +1 -0
  154. package/dist/validators/password.d.ts +60 -0
  155. package/dist/validators/password.d.ts.map +1 -0
  156. package/dist/validators/password.js +81 -0
  157. package/dist/validators/password.js.map +1 -0
  158. package/package.json +50 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.schema.d.ts","sourceRoot":"","sources":["../../../src/schemas/identity/user.schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,201 @@
1
+ "use strict";
2
+ /**
3
+ * User Schemas - Identity Service
4
+ *
5
+ * Zod schemas for user management DTOs.
6
+ * Single source of truth for user data shapes used by both frontend and backend.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.currentUserProfileSchema = exports.userAssignmentsResponseSchema = exports.schoolAssignmentSchema = exports.schoolRoleSchema = exports.userPreferencesResponseSchema = exports.updatePreferencesSchema = exports.weekStartSchema = exports.timeFormatSchema = exports.themeSchema = exports.flatNotificationsSchema = exports.notificationPreferencesSchema = exports.notificationCategoriesSchema = exports.notificationChannelsSchema = exports.smsChannelSchema = exports.pushChannelSchema = exports.emailChannelSchema = exports.digestFrequencySchema = exports.userListResponseSchema = exports.userResponseSchema = exports.updateUserSchema = exports.createUserSchema = exports.userAddressSchema = exports.userStatusUpdateSchema = exports.userStatusSchema = exports.globalRoleSchema = void 0;
10
+ const zod_1 = require("zod");
11
+ const common_1 = require("../common");
12
+ const staff_schema_1 = require("./staff.schema");
13
+ // ============================================
14
+ // Enums
15
+ // ============================================
16
+ exports.globalRoleSchema = zod_1.z.enum(['TenantAdmin', 'TenantUser']);
17
+ exports.userStatusSchema = zod_1.z.enum(['active', 'inactive', 'pending', 'suspended', 'locked']);
18
+ exports.userStatusUpdateSchema = zod_1.z.enum(['active', 'inactive', 'suspended']);
19
+ // ============================================
20
+ // Address Schema
21
+ // ============================================
22
+ exports.userAddressSchema = zod_1.z.object({
23
+ street: zod_1.z.string().max(100).optional(),
24
+ street2: zod_1.z.string().max(100).optional(),
25
+ city: zod_1.z.string().max(50).optional(),
26
+ state: zod_1.z.string().max(50).optional(),
27
+ postalCode: zod_1.z.string().max(20).optional(),
28
+ country: zod_1.z.string().max(50).optional(),
29
+ });
30
+ // ============================================
31
+ // Create User Schema
32
+ // ============================================
33
+ exports.createUserSchema = zod_1.z.object({
34
+ email: common_1.emailSchema,
35
+ firstName: zod_1.z.string().min(2).max(50),
36
+ lastName: zod_1.z.string().min(2).max(50),
37
+ middleName: zod_1.z.string().max(50).optional(),
38
+ phone: zod_1.z.string().max(30).optional(),
39
+ globalRole: exports.globalRoleSchema.default('TenantUser').optional(),
40
+ temporaryPassword: zod_1.z.string().min(8).optional(),
41
+ // Staff bridge fields — when present, auto-creates a linked Staff record
42
+ schoolId: zod_1.z.string().uuid().optional(),
43
+ staffRole: staff_schema_1.staffRoleSchema.optional(),
44
+ department: zod_1.z.string().max(100).optional(),
45
+ });
46
+ // ============================================
47
+ // Update User Schema
48
+ // ============================================
49
+ exports.updateUserSchema = zod_1.z.object({
50
+ firstName: zod_1.z.string().min(2).max(50).optional(),
51
+ lastName: zod_1.z.string().min(2).max(50).optional(),
52
+ middleName: zod_1.z.string().max(50).optional(),
53
+ displayName: zod_1.z.string().max(100).optional(),
54
+ phone: zod_1.z.string().max(30).optional(),
55
+ avatarUrl: common_1.urlSchema.optional(),
56
+ address: exports.userAddressSchema.optional(),
57
+ status: exports.userStatusUpdateSchema.optional(),
58
+ });
59
+ // ============================================
60
+ // User Response Schema
61
+ // ============================================
62
+ exports.userResponseSchema = zod_1.z.object({
63
+ userId: zod_1.z.string(),
64
+ staffId: zod_1.z.string().uuid().optional(),
65
+ email: zod_1.z.string().email(),
66
+ firstName: zod_1.z.string(),
67
+ lastName: zod_1.z.string(),
68
+ middleName: zod_1.z.string().optional(),
69
+ displayName: zod_1.z.string().optional(),
70
+ phone: zod_1.z.string().optional(),
71
+ avatarUrl: zod_1.z.string().optional(),
72
+ address: exports.userAddressSchema.optional(),
73
+ globalRole: exports.globalRoleSchema,
74
+ status: exports.userStatusSchema,
75
+ lastLoginAt: common_1.isoDateSchema.optional(),
76
+ mfaEnabled: zod_1.z.boolean().optional(),
77
+ createdAt: common_1.isoDateSchema,
78
+ updatedAt: common_1.isoDateSchema,
79
+ });
80
+ // ============================================
81
+ // User List Response Schema
82
+ // ============================================
83
+ exports.userListResponseSchema = (0, common_1.createPaginatedResponseSchema)(exports.userResponseSchema);
84
+ // ============================================
85
+ // Notification Schemas
86
+ // ============================================
87
+ exports.digestFrequencySchema = zod_1.z.enum(['immediate', 'daily', 'weekly', 'never']);
88
+ exports.emailChannelSchema = zod_1.z.object({
89
+ enabled: zod_1.z.boolean().default(true).optional(),
90
+ digest: exports.digestFrequencySchema.default('immediate').optional(),
91
+ });
92
+ exports.pushChannelSchema = zod_1.z.object({
93
+ enabled: zod_1.z.boolean().default(true).optional(),
94
+ });
95
+ exports.smsChannelSchema = zod_1.z.object({
96
+ enabled: zod_1.z.boolean().default(false).optional(),
97
+ phone: zod_1.z.string().optional(),
98
+ });
99
+ exports.notificationChannelsSchema = zod_1.z.object({
100
+ email: exports.emailChannelSchema.optional(),
101
+ push: exports.pushChannelSchema.optional(),
102
+ sms: exports.smsChannelSchema.optional(),
103
+ });
104
+ exports.notificationCategoriesSchema = zod_1.z.object({
105
+ announcements: zod_1.z.boolean().default(true).optional(),
106
+ attendance: zod_1.z.boolean().default(true).optional(),
107
+ grades: zod_1.z.boolean().default(true).optional(),
108
+ messages: zod_1.z.boolean().default(true).optional(),
109
+ calendar: zod_1.z.boolean().default(true).optional(),
110
+ billing: zod_1.z.boolean().default(true).optional(),
111
+ security: zod_1.z.boolean().default(true).optional(), // Cannot be disabled
112
+ });
113
+ exports.notificationPreferencesSchema = zod_1.z.object({
114
+ channels: exports.notificationChannelsSchema.optional(),
115
+ categories: exports.notificationCategoriesSchema.optional(),
116
+ });
117
+ // Flat notification structure for updates (frontend-aligned)
118
+ exports.flatNotificationsSchema = zod_1.z.object({
119
+ email: zod_1.z.boolean().optional(),
120
+ push: zod_1.z.boolean().optional(),
121
+ sms: zod_1.z.boolean().optional(),
122
+ digest: exports.digestFrequencySchema.optional(),
123
+ });
124
+ // ============================================
125
+ // User Preferences Schemas
126
+ // ============================================
127
+ exports.themeSchema = zod_1.z.enum(['light', 'dark', 'system']);
128
+ exports.timeFormatSchema = zod_1.z.enum(['12h', '24h']);
129
+ exports.weekStartSchema = zod_1.z.enum(['sunday', 'monday']);
130
+ exports.updatePreferencesSchema = zod_1.z.object({
131
+ theme: exports.themeSchema.default('system').optional(),
132
+ language: zod_1.z.string().default('en-US').optional(),
133
+ timezone: zod_1.z.string().default('America/New_York').optional(),
134
+ dateFormat: zod_1.z.string().default('MM/DD/YYYY').optional(),
135
+ timeFormat: exports.timeFormatSchema.default('12h').optional(),
136
+ weekStartsOn: exports.weekStartSchema.default('sunday').optional(),
137
+ notifications: exports.flatNotificationsSchema.optional(),
138
+ defaultSchoolId: zod_1.z.string().optional(),
139
+ });
140
+ exports.userPreferencesResponseSchema = zod_1.z.object({
141
+ tenantId: zod_1.z.string(),
142
+ userId: zod_1.z.string(),
143
+ theme: exports.themeSchema,
144
+ language: zod_1.z.string(),
145
+ timezone: zod_1.z.string(),
146
+ dateFormat: zod_1.z.string(),
147
+ timeFormat: exports.timeFormatSchema,
148
+ weekStartsOn: exports.weekStartSchema,
149
+ notifications: exports.flatNotificationsSchema,
150
+ defaultSchoolId: zod_1.z.string().optional(),
151
+ createdAt: common_1.isoDateSchema,
152
+ updatedAt: common_1.isoDateSchema,
153
+ version: zod_1.z.number().int().min(0),
154
+ });
155
+ // ============================================
156
+ // School Assignment Schemas
157
+ // ============================================
158
+ exports.schoolRoleSchema = zod_1.z.enum([
159
+ 'Principal',
160
+ 'VicePrincipal',
161
+ 'Teacher',
162
+ 'Accountant',
163
+ 'Staff',
164
+ 'Counselor',
165
+ 'Nurse',
166
+ 'Student',
167
+ 'Parent',
168
+ ]);
169
+ exports.schoolAssignmentSchema = zod_1.z.object({
170
+ schoolId: zod_1.z.string(),
171
+ schoolName: zod_1.z.string(),
172
+ role: zod_1.z.string(), // Allow any string to support custom roles
173
+ });
174
+ exports.userAssignmentsResponseSchema = zod_1.z.object({
175
+ userId: zod_1.z.string(),
176
+ assignments: zod_1.z.array(exports.schoolAssignmentSchema),
177
+ });
178
+ // ============================================
179
+ // Current User Profile Schema (GET /users/me)
180
+ // ============================================
181
+ exports.currentUserProfileSchema = zod_1.z.object({
182
+ userId: zod_1.z.string(),
183
+ email: zod_1.z.string().email(),
184
+ firstName: zod_1.z.string(),
185
+ lastName: zod_1.z.string(),
186
+ middleName: zod_1.z.string().optional(),
187
+ displayName: zod_1.z.string().optional(),
188
+ phone: zod_1.z.string().optional(),
189
+ avatarUrl: zod_1.z.string().optional(),
190
+ address: exports.userAddressSchema.optional(),
191
+ globalRole: exports.globalRoleSchema,
192
+ status: exports.userStatusSchema,
193
+ tenantId: zod_1.z.string(),
194
+ tenantName: zod_1.z.string().optional(),
195
+ assignments: zod_1.z.array(exports.schoolAssignmentSchema),
196
+ lastLoginAt: common_1.isoDateSchema.optional(),
197
+ mfaEnabled: zod_1.z.boolean().optional(),
198
+ createdAt: common_1.isoDateSchema,
199
+ updatedAt: common_1.isoDateSchema,
200
+ });
201
+ //# sourceMappingURL=user.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.schema.js","sourceRoot":"","sources":["../../../src/schemas/identity/user.schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Schemas Index
3
+ *
4
+ * Re-exports all Zod schemas and their inferred types
5
+ */
6
+ export * from './common';
7
+ export * from './identity';
8
+ export * from './academics';
9
+ export * from './enrollment';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ /**
3
+ * Schemas Index
4
+ *
5
+ * Re-exports all Zod schemas and their inferred types
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
19
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ __exportStar(require("./common"), exports);
23
+ __exportStar(require("./identity"), exports);
24
+ __exportStar(require("./academics"), exports);
25
+ __exportStar(require("./enrollment"), exports);
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;AAEH,2CAAyB;AACzB,6CAA2B;AAC3B,8CAA4B;AAC5B,+CAA6B"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Academic Year Validators
3
+ *
4
+ * Status transitions and business rule validators for academic years.
5
+ */
6
+ import { z } from 'zod';
7
+ import { type AcademicYearStatus } from '../schemas/identity/academic-year.schema';
8
+ export { academicYearStatusSchema } from '../schemas/identity/academic-year.schema';
9
+ export declare const ACADEMIC_YEAR_STATUSES: readonly ["planning", "active", "completed", "archived"];
10
+ export type AcademicYearStatusType = AcademicYearStatus;
11
+ /**
12
+ * Status display names
13
+ */
14
+ export declare const ACADEMIC_YEAR_STATUS_NAMES: Record<AcademicYearStatusType, string>;
15
+ /**
16
+ * Status descriptions
17
+ */
18
+ export declare const ACADEMIC_YEAR_STATUS_DESCRIPTIONS: Record<AcademicYearStatusType, string>;
19
+ /**
20
+ * Check if a status transition is valid
21
+ */
22
+ export declare function isValidStatusTransition(from: AcademicYearStatusType, to: AcademicYearStatusType): boolean;
23
+ /**
24
+ * Get the list of valid next statuses from current status
25
+ */
26
+ export declare function getNextValidStatuses(current: AcademicYearStatusType): AcademicYearStatusType[];
27
+ /**
28
+ * Check if settings can be modified in the given status
29
+ */
30
+ export declare function canModifySettings(status: AcademicYearStatusType): boolean;
31
+ /**
32
+ * Check if the academic year is currently active (data is being recorded)
33
+ */
34
+ export declare function isYearActive(status: AcademicYearStatusType): boolean;
35
+ /**
36
+ * Check if the academic year is finalized (completed or archived)
37
+ */
38
+ export declare function isYearFinalized(status: AcademicYearStatusType): boolean;
39
+ /**
40
+ * Get the display name for a status
41
+ */
42
+ export declare function getStatusDisplayName(status: AcademicYearStatusType): string;
43
+ /**
44
+ * Get the description for a status
45
+ */
46
+ export declare function getStatusDescription(status: AcademicYearStatusType): string;
47
+ /**
48
+ * Settings that are locked when academic year is active or completed
49
+ */
50
+ export declare const LOCKED_SETTINGS_WHEN_ACTIVE: readonly ["startDate", "endDate", "gradingPeriods", "calendarType"];
51
+ /**
52
+ * Settings that are always modifiable (even when active)
53
+ */
54
+ export declare const ALWAYS_MODIFIABLE_SETTINGS: readonly ["name", "description", "holidays"];
55
+ export type LockedSetting = typeof LOCKED_SETTINGS_WHEN_ACTIVE[number];
56
+ export type ModifiableSetting = typeof ALWAYS_MODIFIABLE_SETTINGS[number];
57
+ /**
58
+ * Check if a specific setting can be modified given the current status
59
+ */
60
+ export declare function canModifySetting(setting: string, status: AcademicYearStatusType): boolean;
61
+ /**
62
+ * Generate a standard academic year name (e.g., "2024-2025")
63
+ */
64
+ export declare function generateAcademicYearName(startYear: number): string;
65
+ /**
66
+ * Parse an academic year name to get the start year
67
+ */
68
+ export declare function parseAcademicYearName(name: string): number | null;
69
+ /**
70
+ * Validate an academic year name format
71
+ */
72
+ export declare function isValidAcademicYearName(name: string): boolean;
73
+ export declare const statusTransitionSchema: z.ZodEffects<z.ZodObject<{
74
+ currentStatus: z.ZodEnum<["planning", "active", "completed", "archived"]>;
75
+ newStatus: z.ZodEnum<["planning", "active", "completed", "archived"]>;
76
+ }, "strip", z.ZodTypeAny, {
77
+ currentStatus: "active" | "archived" | "planning" | "completed";
78
+ newStatus: "active" | "archived" | "planning" | "completed";
79
+ }, {
80
+ currentStatus: "active" | "archived" | "planning" | "completed";
81
+ newStatus: "active" | "archived" | "planning" | "completed";
82
+ }>, {
83
+ currentStatus: "active" | "archived" | "planning" | "completed";
84
+ newStatus: "active" | "archived" | "planning" | "completed";
85
+ }, {
86
+ currentStatus: "active" | "archived" | "planning" | "completed";
87
+ newStatus: "active" | "archived" | "planning" | "completed";
88
+ }>;
89
+ export type StatusTransition = z.infer<typeof statusTransitionSchema>;
90
+ //# sourceMappingURL=academic-year.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"academic-year.d.ts","sourceRoot":"","sources":["../../src/validators/academic-year.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,0CAA0C,CAAC;AAGlD,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AAMpF,eAAO,MAAM,sBAAsB,0DAA2D,CAAC;AAC/F,MAAM,MAAM,sBAAsB,GAAG,kBAAkB,CAAC;AAiBxD;;GAEG;AACH,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,sBAAsB,EAAE,MAAM,CAK7E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iCAAiC,EAAE,MAAM,CAAC,sBAAsB,EAAE,MAAM,CAKpF,CAAC;AAMF;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,sBAAsB,EAC5B,EAAE,EAAE,sBAAsB,GACzB,OAAO,CAET;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,sBAAsB,GAAG,sBAAsB,EAAE,CAE9F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAEzE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAEpE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAEvE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAE3E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAE3E;AAMD;;GAEG;AACH,eAAO,MAAM,2BAA2B,qEAK9B,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,0BAA0B,8CAI7B,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,OAAO,2BAA2B,CAAC,MAAM,CAAC,CAAC;AACvE,MAAM,MAAM,iBAAiB,GAAG,OAAO,0BAA0B,CAAC,MAAM,CAAC,CAAC;AAE1E;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAuBT;AAMD;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAElE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMjE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQ7D;AAMD,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;EAQlC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -0,0 +1,190 @@
1
+ "use strict";
2
+ /**
3
+ * Academic Year Validators
4
+ *
5
+ * Status transitions and business rule validators for academic years.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.statusTransitionSchema = exports.ALWAYS_MODIFIABLE_SETTINGS = exports.LOCKED_SETTINGS_WHEN_ACTIVE = exports.ACADEMIC_YEAR_STATUS_DESCRIPTIONS = exports.ACADEMIC_YEAR_STATUS_NAMES = exports.ACADEMIC_YEAR_STATUSES = exports.academicYearStatusSchema = void 0;
9
+ exports.isValidStatusTransition = isValidStatusTransition;
10
+ exports.getNextValidStatuses = getNextValidStatuses;
11
+ exports.canModifySettings = canModifySettings;
12
+ exports.isYearActive = isYearActive;
13
+ exports.isYearFinalized = isYearFinalized;
14
+ exports.getStatusDisplayName = getStatusDisplayName;
15
+ exports.getStatusDescription = getStatusDescription;
16
+ exports.canModifySetting = canModifySetting;
17
+ exports.generateAcademicYearName = generateAcademicYearName;
18
+ exports.parseAcademicYearName = parseAcademicYearName;
19
+ exports.isValidAcademicYearName = isValidAcademicYearName;
20
+ const zod_1 = require("zod");
21
+ const academic_year_schema_1 = require("../schemas/identity/academic-year.schema");
22
+ // Re-export the canonical schema from identity for convenience
23
+ var academic_year_schema_2 = require("../schemas/identity/academic-year.schema");
24
+ Object.defineProperty(exports, "academicYearStatusSchema", { enumerable: true, get: function () { return academic_year_schema_2.academicYearStatusSchema; } });
25
+ // ============================================
26
+ // Academic Year Status
27
+ // ============================================
28
+ exports.ACADEMIC_YEAR_STATUSES = ['planning', 'active', 'completed', 'archived'];
29
+ // ============================================
30
+ // Status Transitions
31
+ // ============================================
32
+ /**
33
+ * Valid status transitions for academic years
34
+ * Key: current status, Value: array of valid next statuses
35
+ */
36
+ const VALID_STATUS_TRANSITIONS = {
37
+ planning: ['active'],
38
+ active: ['completed'],
39
+ completed: ['archived'],
40
+ archived: [],
41
+ };
42
+ /**
43
+ * Status display names
44
+ */
45
+ exports.ACADEMIC_YEAR_STATUS_NAMES = {
46
+ planning: 'Planning',
47
+ active: 'Active',
48
+ completed: 'Completed',
49
+ archived: 'Archived',
50
+ };
51
+ /**
52
+ * Status descriptions
53
+ */
54
+ exports.ACADEMIC_YEAR_STATUS_DESCRIPTIONS = {
55
+ planning: 'Academic year is being configured. Settings can be freely modified.',
56
+ active: 'Academic year is in progress. Some settings are locked.',
57
+ completed: 'Academic year has ended. Data is read-only.',
58
+ archived: 'Academic year is archived. May be hidden from default views.',
59
+ };
60
+ // ============================================
61
+ // Utility Functions
62
+ // ============================================
63
+ /**
64
+ * Check if a status transition is valid
65
+ */
66
+ function isValidStatusTransition(from, to) {
67
+ var _a, _b;
68
+ return (_b = (_a = VALID_STATUS_TRANSITIONS[from]) === null || _a === void 0 ? void 0 : _a.includes(to)) !== null && _b !== void 0 ? _b : false;
69
+ }
70
+ /**
71
+ * Get the list of valid next statuses from current status
72
+ */
73
+ function getNextValidStatuses(current) {
74
+ var _a;
75
+ return (_a = VALID_STATUS_TRANSITIONS[current]) !== null && _a !== void 0 ? _a : [];
76
+ }
77
+ /**
78
+ * Check if settings can be modified in the given status
79
+ */
80
+ function canModifySettings(status) {
81
+ return status === 'planning';
82
+ }
83
+ /**
84
+ * Check if the academic year is currently active (data is being recorded)
85
+ */
86
+ function isYearActive(status) {
87
+ return status === 'active';
88
+ }
89
+ /**
90
+ * Check if the academic year is finalized (completed or archived)
91
+ */
92
+ function isYearFinalized(status) {
93
+ return status === 'completed' || status === 'archived';
94
+ }
95
+ /**
96
+ * Get the display name for a status
97
+ */
98
+ function getStatusDisplayName(status) {
99
+ return exports.ACADEMIC_YEAR_STATUS_NAMES[status];
100
+ }
101
+ /**
102
+ * Get the description for a status
103
+ */
104
+ function getStatusDescription(status) {
105
+ return exports.ACADEMIC_YEAR_STATUS_DESCRIPTIONS[status];
106
+ }
107
+ // ============================================
108
+ // Temporal Lock Constraint
109
+ // ============================================
110
+ /**
111
+ * Settings that are locked when academic year is active or completed
112
+ */
113
+ exports.LOCKED_SETTINGS_WHEN_ACTIVE = [
114
+ 'startDate',
115
+ 'endDate',
116
+ 'gradingPeriods',
117
+ 'calendarType',
118
+ ];
119
+ /**
120
+ * Settings that are always modifiable (even when active)
121
+ */
122
+ exports.ALWAYS_MODIFIABLE_SETTINGS = [
123
+ 'name',
124
+ 'description',
125
+ 'holidays',
126
+ ];
127
+ /**
128
+ * Check if a specific setting can be modified given the current status
129
+ */
130
+ function canModifySetting(setting, status) {
131
+ // Archived years cannot be modified at all
132
+ if (status === 'archived') {
133
+ return false;
134
+ }
135
+ // Completed years are mostly read-only
136
+ if (status === 'completed') {
137
+ return false;
138
+ }
139
+ // Planning status allows all modifications
140
+ if (status === 'planning') {
141
+ return true;
142
+ }
143
+ // Active status - check if setting is always modifiable
144
+ if (exports.ALWAYS_MODIFIABLE_SETTINGS.includes(setting)) {
145
+ return true;
146
+ }
147
+ // Active status - check if setting is locked
148
+ return !exports.LOCKED_SETTINGS_WHEN_ACTIVE.includes(setting);
149
+ }
150
+ // ============================================
151
+ // Academic Year Naming
152
+ // ============================================
153
+ /**
154
+ * Generate a standard academic year name (e.g., "2024-2025")
155
+ */
156
+ function generateAcademicYearName(startYear) {
157
+ return `${startYear}-${startYear + 1}`;
158
+ }
159
+ /**
160
+ * Parse an academic year name to get the start year
161
+ */
162
+ function parseAcademicYearName(name) {
163
+ const match = name.match(/^(\d{4})-(\d{4})$/);
164
+ if (!match) {
165
+ return null;
166
+ }
167
+ return parseInt(match[1], 10);
168
+ }
169
+ /**
170
+ * Validate an academic year name format
171
+ */
172
+ function isValidAcademicYearName(name) {
173
+ const match = name.match(/^(\d{4})-(\d{4})$/);
174
+ if (!match) {
175
+ return false;
176
+ }
177
+ const startYear = parseInt(match[1], 10);
178
+ const endYear = parseInt(match[2], 10);
179
+ return endYear === startYear + 1;
180
+ }
181
+ // ============================================
182
+ // Zod Schema with Status Transition Validation
183
+ // ============================================
184
+ exports.statusTransitionSchema = zod_1.z.object({
185
+ currentStatus: academic_year_schema_1.academicYearStatusSchema,
186
+ newStatus: academic_year_schema_1.academicYearStatusSchema,
187
+ }).refine(data => isValidStatusTransition(data.currentStatus, data.newStatus), data => ({
188
+ message: `Invalid status transition from "${data.currentStatus}" to "${data.newStatus}". Valid transitions from "${data.currentStatus}": ${getNextValidStatuses(data.currentStatus).join(', ') || 'none'}`,
189
+ }));
190
+ //# sourceMappingURL=academic-year.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"academic-year.js","sourceRoot":"","sources":["../../src/validators/academic-year.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AA4DH,0DAKC;AAKD,oDAEC;AAKD,8CAEC;AAKD,oCAEC;AAKD,0CAEC;AAKD,oDAEC;AAKD,oDAEC;AA+BD,4CA0BC;AASD,4DAEC;AAKD,sDAMC;AAKD,0DAQC;AArMD,6BAAwB;AACxB,mFAGkD;AAElD,+DAA+D;AAC/D,iFAAoF;AAA3E,gIAAA,wBAAwB,OAAA;AAEjC,+CAA+C;AAC/C,uBAAuB;AACvB,+CAA+C;AAElC,QAAA,sBAAsB,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,CAAU,CAAC;AAG/F,+CAA+C;AAC/C,qBAAqB;AACrB,+CAA+C;AAE/C;;;GAGG;AACH,MAAM,wBAAwB,GAA6D;IACzF,QAAQ,EAAE,CAAC,QAAQ,CAAC;IACpB,MAAM,EAAE,CAAC,WAAW,CAAC;IACrB,SAAS,EAAE,CAAC,UAAU,CAAC;IACvB,QAAQ,EAAE,EAAE;CACb,CAAC;AAEF;;GAEG;AACU,QAAA,0BAA0B,GAA2C;IAChF,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;CACrB,CAAC;AAEF;;GAEG;AACU,QAAA,iCAAiC,GAA2C;IACvF,QAAQ,EAAE,qEAAqE;IAC/E,MAAM,EAAE,yDAAyD;IACjE,SAAS,EAAE,6CAA6C;IACxD,QAAQ,EAAE,8DAA8D;CACzE,CAAC;AAEF,+CAA+C;AAC/C,oBAAoB;AACpB,+CAA+C;AAE/C;;GAEG;AACH,SAAgB,uBAAuB,CACrC,IAA4B,EAC5B,EAA0B;;IAE1B,OAAO,MAAA,MAAA,wBAAwB,CAAC,IAAI,CAAC,0CAAE,QAAQ,CAAC,EAAE,CAAC,mCAAI,KAAK,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAAC,OAA+B;;IAClE,OAAO,MAAA,wBAAwB,CAAC,OAAO,CAAC,mCAAI,EAAE,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,MAA8B;IAC9D,OAAO,MAAM,KAAK,UAAU,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAC,MAA8B;IACzD,OAAO,MAAM,KAAK,QAAQ,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,MAA8B;IAC5D,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,UAAU,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAAC,MAA8B;IACjE,OAAO,kCAA0B,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAAC,MAA8B;IACjE,OAAO,yCAAiC,CAAC,MAAM,CAAC,CAAC;AACnD,CAAC;AAED,+CAA+C;AAC/C,2BAA2B;AAC3B,+CAA+C;AAE/C;;GAEG;AACU,QAAA,2BAA2B,GAAG;IACzC,WAAW;IACX,SAAS;IACT,gBAAgB;IAChB,cAAc;CACN,CAAC;AAEX;;GAEG;AACU,QAAA,0BAA0B,GAAG;IACxC,MAAM;IACN,aAAa;IACb,UAAU;CACF,CAAC;AAKX;;GAEG;AACH,SAAgB,gBAAgB,CAC9B,OAAe,EACf,MAA8B;IAE9B,2CAA2C;IAC3C,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,uCAAuC;IACvC,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,2CAA2C;IAC3C,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wDAAwD;IACxD,IAAI,kCAA0B,CAAC,QAAQ,CAAC,OAA4B,CAAC,EAAE,CAAC;QACtE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6CAA6C;IAC7C,OAAO,CAAC,mCAA2B,CAAC,QAAQ,CAAC,OAAwB,CAAC,CAAC;AACzE,CAAC;AAED,+CAA+C;AAC/C,uBAAuB;AACvB,+CAA+C;AAE/C;;GAEG;AACH,SAAgB,wBAAwB,CAAC,SAAiB;IACxD,OAAO,GAAG,SAAS,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CAAC,IAAY;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,SAAgB,uBAAuB,CAAC,IAAY;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACvC,OAAO,OAAO,KAAK,SAAS,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,+CAA+C;AAC/C,+CAA+C;AAC/C,+CAA+C;AAElC,QAAA,sBAAsB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC7C,aAAa,EAAE,+CAAwB;IACvC,SAAS,EAAE,+CAAwB;CACpC,CAAC,CAAC,MAAM,CACP,IAAI,CAAC,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,EACnE,IAAI,CAAC,EAAE,CAAC,CAAC;IACP,OAAO,EAAE,mCAAmC,IAAI,CAAC,aAAa,SAAS,IAAI,CAAC,SAAS,8BAA8B,IAAI,CAAC,aAAa,MAAM,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE;CAC3M,CAAC,CACH,CAAC"}