@studious-lms/server 1.22.0 → 1.24.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 (298) hide show
  1. package/.env.example +0 -1
  2. package/data/curriculum/nepal-cdc-g4-g5/README.md +90 -0
  3. package/data/curriculum/nepal-cdc-g4-g5/manifest.json +97 -0
  4. package/data/curriculum/nepal-cdc-g4-g5/proficiency-scale.json +76 -0
  5. package/data/curriculum/nepal-cdc-g4-g5/subjects/english.json +6936 -0
  6. package/data/curriculum/nepal-cdc-g4-g5/subjects/health-physical-creative-arts.json +3401 -0
  7. package/data/curriculum/nepal-cdc-g4-g5/subjects/mathematics.json +1511 -0
  8. package/data/curriculum/nepal-cdc-g4-g5/subjects/nepali.json +7928 -0
  9. package/data/curriculum/nepal-cdc-g4-g5/subjects/science-technology.json +2420 -0
  10. package/data/curriculum/nepal-cdc-g4-g5/subjects/social-studies.json +2177 -0
  11. package/dist/lib/assignmentTypeDefaults.d.ts +41 -0
  12. package/dist/lib/assignmentTypeDefaults.d.ts.map +1 -0
  13. package/dist/lib/assignmentTypeDefaults.js +167 -0
  14. package/dist/lib/assignmentTypeDefaults.js.map +1 -0
  15. package/dist/lib/config/env.d.ts +0 -8
  16. package/dist/lib/config/env.d.ts.map +1 -1
  17. package/dist/lib/config/env.js +2 -5
  18. package/dist/lib/config/env.js.map +1 -1
  19. package/dist/lib/feePdf.d.ts +19 -0
  20. package/dist/lib/feePdf.d.ts.map +1 -0
  21. package/dist/lib/feePdf.js +167 -0
  22. package/dist/lib/feePdf.js.map +1 -0
  23. package/dist/lib/feePdfFormat.d.ts +4 -0
  24. package/dist/lib/feePdfFormat.d.ts.map +1 -0
  25. package/dist/lib/feePdfFormat.js +16 -0
  26. package/dist/lib/feePdfFormat.js.map +1 -0
  27. package/dist/lib/idCardPdf.d.ts +26 -0
  28. package/dist/lib/idCardPdf.d.ts.map +1 -0
  29. package/dist/lib/idCardPdf.js +272 -0
  30. package/dist/lib/idCardPdf.js.map +1 -0
  31. package/dist/lib/pdfLetterhead.d.ts +41 -0
  32. package/dist/lib/pdfLetterhead.d.ts.map +1 -0
  33. package/dist/lib/pdfLetterhead.js +86 -0
  34. package/dist/lib/pdfLetterhead.js.map +1 -0
  35. package/dist/lib/transcriptPdf.d.ts +55 -0
  36. package/dist/lib/transcriptPdf.d.ts.map +1 -0
  37. package/dist/lib/transcriptPdf.js +303 -0
  38. package/dist/lib/transcriptPdf.js.map +1 -0
  39. package/dist/models/academicCalendar.d.ts +198 -0
  40. package/dist/models/academicCalendar.d.ts.map +1 -0
  41. package/dist/models/academicCalendar.js +106 -0
  42. package/dist/models/academicCalendar.js.map +1 -0
  43. package/dist/models/agenda.d.ts +8 -0
  44. package/dist/models/agenda.d.ts.map +1 -1
  45. package/dist/models/announcement.d.ts +2 -0
  46. package/dist/models/announcement.d.ts.map +1 -1
  47. package/dist/models/assignment.d.ts +66 -0
  48. package/dist/models/assignment.d.ts.map +1 -1
  49. package/dist/models/attendance.d.ts +659 -21
  50. package/dist/models/attendance.d.ts.map +1 -1
  51. package/dist/models/attendance.js +544 -75
  52. package/dist/models/attendance.js.map +1 -1
  53. package/dist/models/auth.d.ts +2 -0
  54. package/dist/models/auth.d.ts.map +1 -1
  55. package/dist/models/class.d.ts +12 -0
  56. package/dist/models/class.d.ts.map +1 -1
  57. package/dist/models/class.js +3 -2
  58. package/dist/models/class.js.map +1 -1
  59. package/dist/models/event.d.ts +16 -0
  60. package/dist/models/event.d.ts.map +1 -1
  61. package/dist/models/fees.d.ts +554 -0
  62. package/dist/models/fees.d.ts.map +1 -0
  63. package/dist/models/fees.js +278 -0
  64. package/dist/models/fees.js.map +1 -0
  65. package/dist/models/file.d.ts +29 -0
  66. package/dist/models/file.d.ts.map +1 -1
  67. package/dist/models/folder.d.ts +2 -0
  68. package/dist/models/folder.d.ts.map +1 -1
  69. package/dist/models/labChat.d.ts +2 -0
  70. package/dist/models/labChat.d.ts.map +1 -1
  71. package/dist/models/marketplace.d.ts +178 -0
  72. package/dist/models/marketplace.d.ts.map +1 -0
  73. package/dist/models/marketplace.js +115 -0
  74. package/dist/models/marketplace.js.map +1 -0
  75. package/dist/models/moduleItem.d.ts +304 -0
  76. package/dist/models/moduleItem.d.ts.map +1 -0
  77. package/dist/models/moduleItem.js +78 -0
  78. package/dist/models/moduleItem.js.map +1 -0
  79. package/dist/models/newtonChat.d.ts +1 -0
  80. package/dist/models/newtonChat.d.ts.map +1 -1
  81. package/dist/models/school.d.ts +193 -0
  82. package/dist/models/school.d.ts.map +1 -1
  83. package/dist/models/school.js +80 -2
  84. package/dist/models/school.js.map +1 -1
  85. package/dist/models/section.d.ts +4 -0
  86. package/dist/models/section.d.ts.map +1 -1
  87. package/dist/models/worksheet.d.ts +19 -0
  88. package/dist/models/worksheet.d.ts.map +1 -1
  89. package/dist/models/worksheet.js +2 -2
  90. package/dist/models/worksheet.js.map +1 -1
  91. package/dist/routers/_app.d.ts +11605 -7133
  92. package/dist/routers/_app.d.ts.map +1 -1
  93. package/dist/routers/_app.js +12 -2
  94. package/dist/routers/_app.js.map +1 -1
  95. package/dist/routers/academicCalendar.d.ts +229 -0
  96. package/dist/routers/academicCalendar.d.ts.map +1 -0
  97. package/dist/routers/academicCalendar.js +75 -0
  98. package/dist/routers/academicCalendar.js.map +1 -0
  99. package/dist/routers/admin.d.ts +2 -0
  100. package/dist/routers/admin.d.ts.map +1 -1
  101. package/dist/routers/agenda.d.ts +8 -0
  102. package/dist/routers/agenda.d.ts.map +1 -1
  103. package/dist/routers/assignment.d.ts +75 -0
  104. package/dist/routers/assignment.d.ts.map +1 -1
  105. package/dist/routers/assignment.js +10 -2
  106. package/dist/routers/assignment.js.map +1 -1
  107. package/dist/routers/attendance.d.ts +103 -0
  108. package/dist/routers/attendance.d.ts.map +1 -1
  109. package/dist/routers/attendance.js +8 -5
  110. package/dist/routers/attendance.js.map +1 -1
  111. package/dist/routers/class.d.ts +27 -0
  112. package/dist/routers/class.d.ts.map +1 -1
  113. package/dist/routers/class.js +6 -2
  114. package/dist/routers/class.js.map +1 -1
  115. package/dist/routers/event.d.ts +8 -0
  116. package/dist/routers/event.d.ts.map +1 -1
  117. package/dist/routers/fees.d.ts +513 -0
  118. package/dist/routers/fees.d.ts.map +1 -0
  119. package/dist/routers/fees.js +88 -0
  120. package/dist/routers/fees.js.map +1 -0
  121. package/dist/routers/file.d.ts +2 -0
  122. package/dist/routers/file.d.ts.map +1 -1
  123. package/dist/routers/gradebook.d.ts +4 -1
  124. package/dist/routers/gradebook.d.ts.map +1 -1
  125. package/dist/routers/marketplace.d.ts +371 -0
  126. package/dist/routers/marketplace.d.ts.map +1 -0
  127. package/dist/routers/marketplace.js +87 -0
  128. package/dist/routers/marketplace.js.map +1 -0
  129. package/dist/routers/moduleItem.d.ts +263 -0
  130. package/dist/routers/moduleItem.d.ts.map +1 -0
  131. package/dist/routers/moduleItem.js +60 -0
  132. package/dist/routers/moduleItem.js.map +1 -0
  133. package/dist/routers/parent.d.ts +169 -0
  134. package/dist/routers/parent.d.ts.map +1 -0
  135. package/dist/routers/parent.js +49 -0
  136. package/dist/routers/parent.js.map +1 -0
  137. package/dist/routers/school.d.ts +476 -6
  138. package/dist/routers/school.d.ts.map +1 -1
  139. package/dist/routers/school.js +130 -4
  140. package/dist/routers/school.js.map +1 -1
  141. package/dist/routers/worksheet.d.ts +27 -0
  142. package/dist/routers/worksheet.d.ts.map +1 -1
  143. package/dist/routers/worksheet.js +10 -3
  144. package/dist/routers/worksheet.js.map +1 -1
  145. package/dist/services/academicCalendar.d.ts +173 -0
  146. package/dist/services/academicCalendar.d.ts.map +1 -0
  147. package/dist/services/academicCalendar.js +214 -0
  148. package/dist/services/academicCalendar.js.map +1 -0
  149. package/dist/services/adminInstitution.d.ts +2 -0
  150. package/dist/services/adminInstitution.d.ts.map +1 -1
  151. package/dist/services/agenda.d.ts +8 -0
  152. package/dist/services/agenda.d.ts.map +1 -1
  153. package/dist/services/assignment.d.ts +75 -0
  154. package/dist/services/assignment.d.ts.map +1 -1
  155. package/dist/services/assignment.js +91 -12
  156. package/dist/services/assignment.js.map +1 -1
  157. package/dist/services/attendance.d.ts +323 -10
  158. package/dist/services/attendance.d.ts.map +1 -1
  159. package/dist/services/attendance.js +385 -25
  160. package/dist/services/attendance.js.map +1 -1
  161. package/dist/services/attendanceMerge.d.ts +53 -0
  162. package/dist/services/attendanceMerge.d.ts.map +1 -0
  163. package/dist/services/attendanceMerge.js +87 -0
  164. package/dist/services/attendanceMerge.js.map +1 -0
  165. package/dist/services/attendanceRate.d.ts +24 -0
  166. package/dist/services/attendanceRate.d.ts.map +1 -0
  167. package/dist/services/attendanceRate.js +31 -0
  168. package/dist/services/attendanceRate.js.map +1 -0
  169. package/dist/services/attendanceStats.d.ts +22 -0
  170. package/dist/services/attendanceStats.d.ts.map +1 -0
  171. package/dist/services/attendanceStats.js +45 -0
  172. package/dist/services/attendanceStats.js.map +1 -0
  173. package/dist/services/class.d.ts +27 -0
  174. package/dist/services/class.d.ts.map +1 -1
  175. package/dist/services/class.js +26 -3
  176. package/dist/services/class.js.map +1 -1
  177. package/dist/services/event.d.ts +8 -0
  178. package/dist/services/event.d.ts.map +1 -1
  179. package/dist/services/fees.d.ts +422 -0
  180. package/dist/services/fees.d.ts.map +1 -0
  181. package/dist/services/fees.js +310 -0
  182. package/dist/services/fees.js.map +1 -0
  183. package/dist/services/feesAuthz.d.ts +49 -0
  184. package/dist/services/feesAuthz.d.ts.map +1 -0
  185. package/dist/services/feesAuthz.js +52 -0
  186. package/dist/services/feesAuthz.js.map +1 -0
  187. package/dist/services/file.d.ts +4 -0
  188. package/dist/services/file.d.ts.map +1 -1
  189. package/dist/services/gradebook.d.ts +18 -1
  190. package/dist/services/gradebook.d.ts.map +1 -1
  191. package/dist/services/gradebook.js +57 -2
  192. package/dist/services/gradebook.js.map +1 -1
  193. package/dist/services/idCard.d.ts +11 -0
  194. package/dist/services/idCard.d.ts.map +1 -0
  195. package/dist/services/idCard.js +122 -0
  196. package/dist/services/idCard.js.map +1 -0
  197. package/dist/services/marketplace.d.ts +301 -0
  198. package/dist/services/marketplace.d.ts.map +1 -0
  199. package/dist/services/marketplace.js +628 -0
  200. package/dist/services/marketplace.js.map +1 -0
  201. package/dist/services/moduleItem.d.ts +196 -0
  202. package/dist/services/moduleItem.d.ts.map +1 -0
  203. package/dist/services/moduleItem.js +188 -0
  204. package/dist/services/moduleItem.js.map +1 -0
  205. package/dist/services/notification.d.ts +58 -0
  206. package/dist/services/notification.d.ts.map +1 -1
  207. package/dist/services/notification.js +30 -2
  208. package/dist/services/notification.js.map +1 -1
  209. package/dist/services/parentPortal.d.ts +133 -0
  210. package/dist/services/parentPortal.d.ts.map +1 -0
  211. package/dist/services/parentPortal.js +328 -0
  212. package/dist/services/parentPortal.js.map +1 -0
  213. package/dist/services/school.d.ts +122 -3
  214. package/dist/services/school.d.ts.map +1 -1
  215. package/dist/services/school.js +179 -47
  216. package/dist/services/school.js.map +1 -1
  217. package/dist/services/studentImport.d.ts +34 -0
  218. package/dist/services/studentImport.d.ts.map +1 -0
  219. package/dist/services/studentImport.js +236 -0
  220. package/dist/services/studentImport.js.map +1 -0
  221. package/dist/services/transcript.d.ts +61 -0
  222. package/dist/services/transcript.d.ts.map +1 -0
  223. package/dist/services/transcript.js +243 -0
  224. package/dist/services/transcript.js.map +1 -0
  225. package/dist/services/worksheet.d.ts +22 -0
  226. package/dist/services/worksheet.d.ts.map +1 -1
  227. package/dist/services/worksheet.js +94 -2
  228. package/dist/services/worksheet.js.map +1 -1
  229. package/dist/trpc.d.ts +1 -1
  230. package/dist/trpc.d.ts.map +1 -1
  231. package/dist/trpc.js +5 -5
  232. package/dist/trpc.js.map +1 -1
  233. package/dist/utils/adminPanelAccess.d.ts +4 -5
  234. package/dist/utils/adminPanelAccess.d.ts.map +1 -1
  235. package/dist/utils/adminPanelAccess.js +12 -34
  236. package/dist/utils/adminPanelAccess.js.map +1 -1
  237. package/package.json +2 -1
  238. package/prisma/migrations/20260804120000_add_attendance_records_and_excusals/migration.sql +114 -0
  239. package/prisma/migrations/20260804120100_add_fee_plans_invoices_payments/migration.sql +101 -0
  240. package/prisma/migrations/20260804120200_add_marketplace_listings/migration.sql +54 -0
  241. package/prisma/migrations/20260804120300_content_platform_b3_b9/migration.sql +63 -0
  242. package/prisma/migrations/20260804120400_c_academic_ops/migration.sql +77 -0
  243. package/prisma/schema.prisma +371 -11
  244. package/scripts/import-nepal-cdc-curriculum.ts +379 -0
  245. package/src/lib/assignmentTypeDefaults.ts +222 -0
  246. package/src/lib/config/env.ts +0 -3
  247. package/src/lib/feePdf.ts +199 -0
  248. package/src/lib/feePdfFormat.ts +14 -0
  249. package/src/lib/idCardPdf.ts +336 -0
  250. package/src/lib/pdfLetterhead.ts +124 -0
  251. package/src/lib/transcriptPdf.ts +502 -0
  252. package/src/models/academicCalendar.ts +139 -0
  253. package/src/models/attendance.ts +704 -73
  254. package/src/models/class.ts +1 -0
  255. package/src/models/fees.ts +349 -0
  256. package/src/models/marketplace.ts +158 -0
  257. package/src/models/moduleItem.ts +107 -0
  258. package/src/models/school.ts +95 -0
  259. package/src/models/worksheet.ts +2 -0
  260. package/src/routers/_app.ts +10 -0
  261. package/src/routers/academicCalendar.ts +103 -0
  262. package/src/routers/assignment.ts +8 -0
  263. package/src/routers/attendance.ts +7 -3
  264. package/src/routers/class.ts +4 -0
  265. package/src/routers/fees.ts +126 -0
  266. package/src/routers/marketplace.ts +134 -0
  267. package/src/routers/moduleItem.ts +89 -0
  268. package/src/routers/parent.ts +68 -0
  269. package/src/routers/school.ts +184 -1
  270. package/src/routers/worksheet.ts +11 -0
  271. package/src/services/academicCalendar.ts +299 -0
  272. package/src/services/assignment.ts +122 -12
  273. package/src/services/attendance.ts +548 -26
  274. package/src/services/attendanceMerge.ts +139 -0
  275. package/src/services/attendanceRate.ts +41 -0
  276. package/src/services/attendanceStats.ts +63 -0
  277. package/src/services/class.ts +25 -1
  278. package/src/services/fees.ts +424 -0
  279. package/src/services/feesAuthz.ts +77 -0
  280. package/src/services/gradebook.ts +70 -0
  281. package/src/services/idCard.ts +147 -0
  282. package/src/services/marketplace.ts +785 -0
  283. package/src/services/moduleItem.ts +274 -0
  284. package/src/services/notification.ts +43 -0
  285. package/src/services/parentPortal.ts +380 -0
  286. package/src/services/school.ts +243 -45
  287. package/src/services/studentImport.ts +273 -0
  288. package/src/services/transcript.ts +313 -0
  289. package/src/services/worksheet.ts +111 -0
  290. package/src/trpc.ts +3 -3
  291. package/src/utils/adminPanelAccess.ts +12 -35
  292. package/tests/unit/assignmentTypeDefaults.test.ts +52 -0
  293. package/tests/unit/lib/feePdf.test.ts +15 -0
  294. package/tests/unit/lib/idCardPdf.test.ts +40 -0
  295. package/tests/unit/lib/transcriptPdf.test.ts +111 -0
  296. package/tests/unit/services/attendanceMerge.test.ts +90 -0
  297. package/tests/unit/services/attendanceRate.test.ts +38 -0
  298. package/tests/unit/services/attendanceStats.test.ts +54 -0
@@ -29,6 +29,9 @@ export declare const schoolRouter: import("@trpc/server").TRPCBuiltRouter<{
29
29
  logoId: string | null;
30
30
  logoPath: string | null;
31
31
  logoType: string | null;
32
+ letterheadFileId: string | null;
33
+ letterheadPath: string | null;
34
+ letterheadType: string | null;
32
35
  } | null;
33
36
  activeRole: import(".prisma/client").$Enums.SchoolMembershipRole | null;
34
37
  memberships: ({
@@ -39,12 +42,19 @@ export declare const schoolRouter: import("@trpc/server").TRPCBuiltRouter<{
39
42
  name: string;
40
43
  description: string | null;
41
44
  logoId: string | null;
45
+ letterheadFileId: string | null;
42
46
  subdomain: string | null;
43
47
  logo: {
44
48
  path: string;
45
49
  type: string;
46
50
  id: string;
47
51
  } | null;
52
+ letterhead: {
53
+ path: string;
54
+ type: string;
55
+ id: string;
56
+ name: string;
57
+ } | null;
48
58
  };
49
59
  } & {
50
60
  status: import(".prisma/client").$Enums.SchoolMembershipStatus;
@@ -83,6 +93,7 @@ export declare const schoolRouter: import("@trpc/server").TRPCBuiltRouter<{
83
93
  name: string;
84
94
  description: string | null;
85
95
  logoId: string | null;
96
+ letterheadFileId: string | null;
86
97
  subdomain: string | null;
87
98
  };
88
99
  };
@@ -94,6 +105,7 @@ export declare const schoolRouter: import("@trpc/server").TRPCBuiltRouter<{
94
105
  name?: string | undefined;
95
106
  description?: string | null | undefined;
96
107
  logoId?: string | null | undefined;
108
+ letterheadFileId?: string | null | undefined;
97
109
  subdomain?: string | null | undefined;
98
110
  };
99
111
  output: {
@@ -102,6 +114,7 @@ export declare const schoolRouter: import("@trpc/server").TRPCBuiltRouter<{
102
114
  name: string;
103
115
  description: string | null;
104
116
  logoId: string | null;
117
+ letterheadFileId: string | null;
105
118
  subdomain: string | null;
106
119
  };
107
120
  };
@@ -112,7 +125,7 @@ export declare const schoolRouter: import("@trpc/server").TRPCBuiltRouter<{
112
125
  query: string;
113
126
  schoolId: string;
114
127
  limit?: number | undefined;
115
- role?: "ADMIN" | "TEACHER" | "STUDENT" | undefined;
128
+ role?: "ADMIN" | "TEACHER" | "STUDENT" | "ACCOUNTANT" | "PARENT" | undefined;
116
129
  };
117
130
  output: {
118
131
  id: string;
@@ -209,13 +222,17 @@ export declare const schoolRouter: import("@trpc/server").TRPCBuiltRouter<{
209
222
  }[];
210
223
  attendance: {
211
224
  id: string;
225
+ recordId: string;
212
226
  date: Date;
213
227
  class: {
214
228
  id: string;
215
229
  name: string;
216
230
  color: string | null;
217
231
  };
218
- status: "PRESENT" | "LATE" | "ABSENT";
232
+ status: import(".prisma/client").$Enums.AttendanceStatus;
233
+ note: string | null;
234
+ lockedFromExcusal: boolean;
235
+ reason: string | null;
219
236
  }[];
220
237
  };
221
238
  meta: object;
@@ -276,13 +293,17 @@ export declare const schoolRouter: import("@trpc/server").TRPCBuiltRouter<{
276
293
  }[];
277
294
  attendance: {
278
295
  id: string;
296
+ recordId: string;
279
297
  date: Date;
280
298
  class: {
281
299
  id: string;
282
300
  name: string;
283
301
  color: string | null;
284
302
  };
285
- status: "PRESENT" | "LATE" | "ABSENT";
303
+ status: import(".prisma/client").$Enums.AttendanceStatus;
304
+ note: string | null;
305
+ lockedFromExcusal: boolean;
306
+ reason: string | null;
286
307
  }[];
287
308
  classes?: undefined;
288
309
  } | {
@@ -335,6 +356,8 @@ export declare const schoolRouter: import("@trpc/server").TRPCBuiltRouter<{
335
356
  ADMIN: number;
336
357
  TEACHER: number;
337
358
  STUDENT: number;
359
+ ACCOUNTANT: number;
360
+ PARENT: number;
338
361
  classes: number;
339
362
  members: number;
340
363
  pendingInvites: number;
@@ -357,10 +380,272 @@ export declare const schoolRouter: import("@trpc/server").TRPCBuiltRouter<{
357
380
  expiresAt: Date;
358
381
  role: import(".prisma/client").$Enums.SchoolMembershipRole;
359
382
  }[];
383
+ recentMembers: {
384
+ status: import(".prisma/client").$Enums.SchoolMembershipStatus;
385
+ user: {
386
+ id: string;
387
+ username: string;
388
+ email: string;
389
+ profile: {
390
+ profilePicture: string | null;
391
+ displayName: string | null;
392
+ profilePictureThumbnail: string | null;
393
+ } | null;
394
+ };
395
+ id: string;
396
+ createdAt: Date;
397
+ updatedAt: Date;
398
+ role: import(".prisma/client").$Enums.SchoolMembershipRole;
399
+ }[];
360
400
  };
361
401
  };
362
402
  meta: object;
363
403
  }>;
404
+ /** School-admin: today's attendance rollup across classes. */
405
+ listTodayAttendanceSummary: import("@trpc/server").TRPCQueryProcedure<{
406
+ input: {
407
+ schoolId: string;
408
+ };
409
+ output: {
410
+ date: Date;
411
+ totalStudents: number;
412
+ totals: import("../services/attendanceStats.js").AttendanceStatusCount;
413
+ percentage: number | null;
414
+ sessions: {
415
+ attendanceId: string;
416
+ classId: string;
417
+ className: string;
418
+ section: string;
419
+ subject: string;
420
+ eventId: string | null;
421
+ eventName: string | null;
422
+ date: Date;
423
+ present: number;
424
+ late: number;
425
+ absent: number;
426
+ excused: number;
427
+ unmarked: number;
428
+ classStudentCount: number;
429
+ }[];
430
+ };
431
+ meta: object;
432
+ }>;
433
+ /** School-admin: per-student attendance counts + % (excused excluded from %). */
434
+ listStudentAttendanceStats: import("@trpc/server").TRPCQueryProcedure<{
435
+ input: {
436
+ schoolId: string;
437
+ studentId?: string | undefined;
438
+ from?: Date | undefined;
439
+ to?: Date | undefined;
440
+ };
441
+ output: {
442
+ studentId: string;
443
+ username: string;
444
+ displayName: string | null;
445
+ profilePicture: string | null;
446
+ profilePictureThumbnail: string | null;
447
+ classes: {
448
+ section: string;
449
+ id: string;
450
+ name: string;
451
+ subject: string;
452
+ }[];
453
+ present: number;
454
+ late: number;
455
+ absent: number;
456
+ excused: number;
457
+ attendancePercentage: number | null;
458
+ }[];
459
+ meta: object;
460
+ }>;
461
+ listExcusals: import("@trpc/server").TRPCQueryProcedure<{
462
+ input: {
463
+ schoolId: string;
464
+ studentId?: string | undefined;
465
+ includeRevoked?: boolean | undefined;
466
+ };
467
+ output: {
468
+ id: string;
469
+ schoolId: string;
470
+ startDate: Date;
471
+ endDate: Date;
472
+ reason: string;
473
+ note: string | null;
474
+ revokedAt: Date | null;
475
+ createdAt: Date;
476
+ updatedAt: Date;
477
+ status: "ACTIVE" | "REVOKED" | "UPCOMING";
478
+ studentIds: string[];
479
+ students: {
480
+ id: string;
481
+ username: string;
482
+ displayName: string | null;
483
+ profilePicture: string | null;
484
+ profilePictureThumbnail: string | null;
485
+ }[];
486
+ createdBy: {
487
+ id: string;
488
+ username: string;
489
+ displayName: string | null;
490
+ };
491
+ revokedBy: {
492
+ id: string;
493
+ username: string;
494
+ displayName: string | null;
495
+ } | null;
496
+ }[];
497
+ meta: object;
498
+ }>;
499
+ createExcusal: import("@trpc/server").TRPCMutationProcedure<{
500
+ input: {
501
+ schoolId: string;
502
+ reason: string;
503
+ startDate: Date;
504
+ endDate: Date;
505
+ studentIds: string[];
506
+ note?: string | null | undefined;
507
+ };
508
+ output: {
509
+ students: {
510
+ student: {
511
+ id: string;
512
+ username: string;
513
+ profile: {
514
+ profilePicture: string | null;
515
+ displayName: string | null;
516
+ profilePictureThumbnail: string | null;
517
+ } | null;
518
+ };
519
+ studentId: string;
520
+ }[];
521
+ createdBy: {
522
+ id: string;
523
+ username: string;
524
+ profile: {
525
+ displayName: string | null;
526
+ } | null;
527
+ };
528
+ revokedBy: {
529
+ id: string;
530
+ username: string;
531
+ profile: {
532
+ displayName: string | null;
533
+ } | null;
534
+ } | null;
535
+ } & {
536
+ id: string;
537
+ createdAt: Date;
538
+ updatedAt: Date;
539
+ schoolId: string;
540
+ reason: string;
541
+ startDate: Date;
542
+ endDate: Date;
543
+ createdById: string;
544
+ revokedAt: Date | null;
545
+ note: string | null;
546
+ revokedById: string | null;
547
+ };
548
+ meta: object;
549
+ }>;
550
+ updateExcusal: import("@trpc/server").TRPCMutationProcedure<{
551
+ input: {
552
+ schoolId: string;
553
+ excusalId: string;
554
+ reason?: string | undefined;
555
+ startDate?: Date | undefined;
556
+ endDate?: Date | undefined;
557
+ studentIds?: string[] | undefined;
558
+ note?: string | null | undefined;
559
+ };
560
+ output: {
561
+ students: {
562
+ student: {
563
+ id: string;
564
+ username: string;
565
+ profile: {
566
+ profilePicture: string | null;
567
+ displayName: string | null;
568
+ profilePictureThumbnail: string | null;
569
+ } | null;
570
+ };
571
+ studentId: string;
572
+ }[];
573
+ createdBy: {
574
+ id: string;
575
+ username: string;
576
+ profile: {
577
+ displayName: string | null;
578
+ } | null;
579
+ };
580
+ revokedBy: {
581
+ id: string;
582
+ username: string;
583
+ profile: {
584
+ displayName: string | null;
585
+ } | null;
586
+ } | null;
587
+ } & {
588
+ id: string;
589
+ createdAt: Date;
590
+ updatedAt: Date;
591
+ schoolId: string;
592
+ reason: string;
593
+ startDate: Date;
594
+ endDate: Date;
595
+ createdById: string;
596
+ revokedAt: Date | null;
597
+ note: string | null;
598
+ revokedById: string | null;
599
+ };
600
+ meta: object;
601
+ }>;
602
+ revokeExcusal: import("@trpc/server").TRPCMutationProcedure<{
603
+ input: {
604
+ schoolId: string;
605
+ excusalId: string;
606
+ };
607
+ output: {
608
+ students: {
609
+ student: {
610
+ id: string;
611
+ username: string;
612
+ profile: {
613
+ profilePicture: string | null;
614
+ displayName: string | null;
615
+ profilePictureThumbnail: string | null;
616
+ } | null;
617
+ };
618
+ studentId: string;
619
+ }[];
620
+ createdBy: {
621
+ id: string;
622
+ username: string;
623
+ profile: {
624
+ displayName: string | null;
625
+ } | null;
626
+ };
627
+ revokedBy: {
628
+ id: string;
629
+ username: string;
630
+ profile: {
631
+ displayName: string | null;
632
+ } | null;
633
+ } | null;
634
+ } & {
635
+ id: string;
636
+ createdAt: Date;
637
+ updatedAt: Date;
638
+ schoolId: string;
639
+ reason: string;
640
+ startDate: Date;
641
+ endDate: Date;
642
+ createdById: string;
643
+ revokedAt: Date | null;
644
+ note: string | null;
645
+ revokedById: string | null;
646
+ };
647
+ meta: object;
648
+ }>;
364
649
  getAiUsage: import("@trpc/server").TRPCQueryProcedure<{
365
650
  input: {
366
651
  schoolId: string;
@@ -427,6 +712,7 @@ export declare const schoolRouter: import("@trpc/server").TRPCBuiltRouter<{
427
712
  discussionsEnabled: boolean;
428
713
  studentsCanCreateDiscussions: boolean;
429
714
  studentsCanReply: boolean;
715
+ sidebarFeatures: import("@prisma/client/runtime/library.js").JsonValue | null;
430
716
  treatMissingAsZero: boolean;
431
717
  gradeRoundingMode: import(".prisma/client").$Enums.GradeRoundingMode;
432
718
  })[];
@@ -480,12 +766,45 @@ export declare const schoolRouter: import("@trpc/server").TRPCBuiltRouter<{
480
766
  discussionsEnabled: boolean;
481
767
  studentsCanCreateDiscussions: boolean;
482
768
  studentsCanReply: boolean;
769
+ sidebarFeatures: import("@prisma/client/runtime/library.js").JsonValue | null;
483
770
  treatMissingAsZero: boolean;
484
771
  gradeRoundingMode: import(".prisma/client").$Enums.GradeRoundingMode;
485
772
  };
486
773
  };
487
774
  meta: object;
488
775
  }>;
776
+ deleteClass: import("@trpc/server").TRPCMutationProcedure<{
777
+ input: {
778
+ schoolId: string;
779
+ classId: string;
780
+ };
781
+ output: {
782
+ deletedClass: {
783
+ id: string;
784
+ };
785
+ };
786
+ meta: object;
787
+ }>;
788
+ updateClassMembers: import("@trpc/server").TRPCMutationProcedure<{
789
+ input: {
790
+ schoolId: string;
791
+ classId: string;
792
+ addTeacherIds?: string[] | undefined;
793
+ removeTeacherIds?: string[] | undefined;
794
+ addStudentIds?: string[] | undefined;
795
+ removeStudentIds?: string[] | undefined;
796
+ };
797
+ output: {
798
+ class: {
799
+ id: string;
800
+ _count: {
801
+ teachers: number;
802
+ students: number;
803
+ };
804
+ };
805
+ };
806
+ meta: object;
807
+ }>;
489
808
  listMembers: import("@trpc/server").TRPCQueryProcedure<{
490
809
  input: {
491
810
  schoolId: string;
@@ -514,7 +833,7 @@ export declare const schoolRouter: import("@trpc/server").TRPCBuiltRouter<{
514
833
  addMember: import("@trpc/server").TRPCMutationProcedure<{
515
834
  input: {
516
835
  schoolId: string;
517
- role: "ADMIN" | "TEACHER" | "STUDENT";
836
+ role: "ADMIN" | "TEACHER" | "STUDENT" | "ACCOUNTANT" | "PARENT";
518
837
  memberUserId: string;
519
838
  };
520
839
  output: {
@@ -533,7 +852,7 @@ export declare const schoolRouter: import("@trpc/server").TRPCBuiltRouter<{
533
852
  updateMemberRole: import("@trpc/server").TRPCMutationProcedure<{
534
853
  input: {
535
854
  schoolId: string;
536
- role: "ADMIN" | "TEACHER" | "STUDENT";
855
+ role: "ADMIN" | "TEACHER" | "STUDENT" | "ACCOUNTANT" | "PARENT";
537
856
  memberUserId: string;
538
857
  };
539
858
  output: {
@@ -559,6 +878,141 @@ export declare const schoolRouter: import("@trpc/server").TRPCBuiltRouter<{
559
878
  };
560
879
  meta: object;
561
880
  }>;
881
+ getMemberDetail: import("@trpc/server").TRPCQueryProcedure<{
882
+ input: {
883
+ schoolId: string;
884
+ memberUserId: string;
885
+ };
886
+ output: {
887
+ membership: {
888
+ status: import(".prisma/client").$Enums.SchoolMembershipStatus;
889
+ user: {
890
+ id: string;
891
+ username: string;
892
+ email: string;
893
+ profile: {
894
+ profilePicture: string | null;
895
+ displayName: string | null;
896
+ profilePictureThumbnail: string | null;
897
+ } | null;
898
+ };
899
+ id: string;
900
+ createdAt: Date;
901
+ updatedAt: Date;
902
+ role: import(".prisma/client").$Enums.SchoolMembershipRole;
903
+ };
904
+ teachingClasses: {
905
+ id: string;
906
+ name: string;
907
+ section: string;
908
+ subject: string;
909
+ color: string | null;
910
+ teacherCount: number;
911
+ studentCount: number;
912
+ }[];
913
+ enrolledClasses: {
914
+ id: string;
915
+ name: string;
916
+ section: string;
917
+ subject: string;
918
+ color: string | null;
919
+ teacherCount: number;
920
+ studentCount: number;
921
+ }[];
922
+ };
923
+ meta: object;
924
+ }>;
925
+ /**
926
+ * Generate a branded transcript / progress-report PDF for one student.
927
+ * School admin only. Uses gradebook + attendance (present/late/absent).
928
+ * No AcademicTerm yet — pass schoolYear and/or from/to (C1 dependency).
929
+ */
930
+ generateTranscript: import("@trpc/server").TRPCMutationProcedure<{
931
+ input: {
932
+ schoolId: string;
933
+ studentId: string;
934
+ from?: Date | undefined;
935
+ to?: Date | undefined;
936
+ schoolYear?: string | undefined;
937
+ };
938
+ output: {
939
+ pdfBase64: string;
940
+ fileName: string;
941
+ variant: import("../lib/transcriptPdf.js").TranscriptReportVariant;
942
+ studentId: string;
943
+ studentName: string;
944
+ academicTermSupported: false;
945
+ attendance: import("../services/attendanceRate.js").AttendanceRateSummary;
946
+ classCount: number;
947
+ };
948
+ meta: object;
949
+ }>;
950
+ /**
951
+ * Bulk generate transcripts for multiple students (max 50).
952
+ * Returns per-student PDFs plus any per-student errors.
953
+ */
954
+ generateTranscripts: import("@trpc/server").TRPCMutationProcedure<{
955
+ input: {
956
+ schoolId: string;
957
+ studentIds: string[];
958
+ from?: Date | undefined;
959
+ to?: Date | undefined;
960
+ schoolYear?: string | undefined;
961
+ };
962
+ output: {
963
+ transcripts: {
964
+ pdfBase64: string;
965
+ fileName: string;
966
+ variant: import("../lib/transcriptPdf.js").TranscriptReportVariant;
967
+ studentId: string;
968
+ studentName: string;
969
+ academicTermSupported: false;
970
+ attendance: import("../services/attendanceRate.js").AttendanceRateSummary;
971
+ classCount: number;
972
+ }[];
973
+ errors: {
974
+ studentId: string;
975
+ message: string;
976
+ }[];
977
+ };
978
+ meta: object;
979
+ }>;
980
+ bulkUpdateMemberRoles: import("@trpc/server").TRPCMutationProcedure<{
981
+ input: {
982
+ schoolId: string;
983
+ role: "ADMIN" | "TEACHER" | "STUDENT" | "ACCOUNTANT" | "PARENT";
984
+ memberUserIds: string[];
985
+ };
986
+ output: {
987
+ updatedCount: number;
988
+ };
989
+ meta: object;
990
+ }>;
991
+ bulkRemoveMembers: import("@trpc/server").TRPCMutationProcedure<{
992
+ input: {
993
+ schoolId: string;
994
+ memberUserIds: string[];
995
+ };
996
+ output: {
997
+ removedCount: number;
998
+ };
999
+ meta: object;
1000
+ }>;
1001
+ /** Generate a bulk PDF of front-side student ID cards for selected members. */
1002
+ generateIdCards: import("@trpc/server").TRPCMutationProcedure<{
1003
+ input: {
1004
+ schoolId: string;
1005
+ studentUserIds: string[];
1006
+ };
1007
+ output: {
1008
+ pdfBase64: string;
1009
+ fileName: string;
1010
+ mimeType: "application/pdf";
1011
+ studentCount: number;
1012
+ skippedCount: number;
1013
+ };
1014
+ meta: object;
1015
+ }>;
562
1016
  listInvites: import("@trpc/server").TRPCQueryProcedure<{
563
1017
  input: {
564
1018
  schoolId: string;
@@ -588,7 +1042,7 @@ export declare const schoolRouter: import("@trpc/server").TRPCBuiltRouter<{
588
1042
  input: {
589
1043
  email: string;
590
1044
  schoolId: string;
591
- role: "ADMIN" | "TEACHER" | "STUDENT";
1045
+ role: "ADMIN" | "TEACHER" | "STUDENT" | "ACCOUNTANT" | "PARENT";
592
1046
  displayName?: string | undefined;
593
1047
  username?: string | undefined;
594
1048
  };
@@ -678,5 +1132,21 @@ export declare const schoolRouter: import("@trpc/server").TRPCBuiltRouter<{
678
1132
  };
679
1133
  meta: object;
680
1134
  }>;
1135
+ /** C3: Bulk student CSV onboarding (username/password generated when omitted). */
1136
+ importStudentsCsv: import("@trpc/server").TRPCMutationProcedure<{
1137
+ input: {
1138
+ schoolId: string;
1139
+ csvText: string;
1140
+ dryRun?: boolean | undefined;
1141
+ };
1142
+ output: {
1143
+ dryRun: boolean;
1144
+ created: number;
1145
+ failed: number;
1146
+ total: number;
1147
+ results: import("../services/studentImport.js").StudentCsvRowResult[];
1148
+ };
1149
+ meta: object;
1150
+ }>;
681
1151
  }>>;
682
1152
  //# sourceMappingURL=school.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"school.d.ts","sourceRoot":"/","sources":["routers/school.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAqCxB,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqMvB,CAAC"}
1
+ {"version":3,"file":"school.d.ts","sourceRoot":"/","sources":["routers/school.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAuExB,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA6GvB,8DAA8D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAO9D,iFAAiF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAqIjF;;;;OAIG;;;;;;;;;;;;;;;;;;;;;IASH;;;OAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA4BH,+EAA+E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2C/E,kFAAkF;;;;;;;;;;;;;;;;GAUlF,CAAC"}