05 — Screen Inventory (Results Module)
Every screen maps 1:1 to a real endpoint or DTO. No screen is invented; five screens cover the module.
(forward-looking)= client screens against the implemented API.
| # | Screen | Route (client) | Primary endpoint | Source |
|---|---|---|---|---|
| S1 | Marks Entry Grid (per exam-subject) | /examinations/:examId/subjects/:examSubjectId/marks | GET /api/v1/results/exam-subject/:examSubjectId + POST …/marks | result.controller.ts:21-31 |
| S2 | Exam-Subject Detail | /examinations/:examId/subjects/:examSubjectId | GET /api/v1/examinations/:id/subjects (+ entry counts via S1) | examination.controller.ts:51-53, examination-subject.schema.ts:8-31 |
| S3 | Student Results List | /students/:studentId/results | GET /api/v1/results/student/:studentId | result.controller.ts:16-20 |
| S4 | Report Card View | /students/:studentId/results/:examId | GET /api/v1/results/report-card/:studentId/:examId | result.controller.ts:32-37 |
| S5 | Grade Summary (per exam, per class — completion overview) | /examinations/:examId/grades | Derived: GET /api/v1/examinations/:id/subjects → per-subject results | examination.controller.ts:51-53, result.controller.ts:21-25 |
Screen purposes
S1 — Marks Entry Grid
- Data: all
ExaminationResultrows for one exam-subject (examination-result.repository.ts:20-24), one editable row per student:marksObtained,grade(client-supplied string),remarks(optional). - Writes: per-row
POST /api/v1/results/exam-subject/:examSubjectId/marks(idempotent upsert,examination.service.ts:147-175). - Context header: subject
date,startTime/endTime,maximumMarks,passingMarks(examination-subject.schema.ts:18-31).
S2 — Exam-Subject Detail
- Data: one
ExaminationSubjectrow; entry coverage (entered/total students — computed client-side from S1 data). - Actions: navigate to S1; shows subject schedule info.
S3 — Student Results List
- Data: all
ExaminationResultrows for a student (examination-result.repository.ts:26-28) — flat rows, not grouped by exam (no grouping endpoint exists; client groups byexaminationSubjectIdor via exam lookup). - Action: open S4 for any exam with a report card.
S4 — Report Card View
- Data:
ReportCardobject (result.service.ts:8-26): subject rows, totals,percentage,overallGrade,generatedAt. - Read-only. Errors: 404 when exam has no subjects (
result.service.ts:51-52).
S5 — Grade Summary (completion & distribution overview)
- Data: subjects of exam (S2 endpoint) + results per subject (S1 endpoint).
- Shows per-class/per-subject: entries entered vs students, marks distribution; publish readiness.
- No dedicated backend endpoint —
(proposed)for a server-side aggregation (blueprintGET /api/v1/results/analytics,Results.md:28); today client-side aggregation only.
Gaps vs. screens
| Gap | Impact | Status |
|---|---|---|
| No bulk marks POST (one request per student) | S1 must serialize N upserts | (planned) — marks-import IMPLEMENTATION_PLAN.md:219 |
| No per-exam grouping endpoint for student rows | S3 groups client-side | (planned) |
| No rank | S4 cannot show rank | (planned) — Results.md:54 |
| No publish-lock | S1 stays editable after publish | (planned) |
| No analytics | S5 is client-aggregated | (proposed) |
| No PDF report card | S4 share/export is web-only | (planned) — Results.md:57 |