feat(exam): add mark scheme editor

This commit is contained in:
2026-06-07 00:34:56 +01:00
parent adc7a2a05b
commit 1ab8aab43c
7 changed files with 629 additions and 4 deletions
+66 -2
View File
@@ -31,6 +31,42 @@ export interface CreateTemplatePayload {
institute_id?: string;
}
export type MarkSchemeType = 'points' | 'levels' | 'parts' | 'checklist' | 'free';
export interface MarkSchemePoint {
mark: number;
text: string;
}
export interface MarkSchemeLevel {
level: string;
min: number;
max: number;
descriptor: string;
}
export interface MarkSchemePart {
label: string;
marks: number;
guidance: string;
}
export interface MarkSchemeChecklistItem {
text: string;
marks: number;
}
export interface MarkScheme {
type?: MarkSchemeType;
points?: MarkSchemePoint[];
levels?: MarkSchemeLevel[];
parts?: MarkSchemePart[];
checklist?: MarkSchemeChecklistItem[];
text?: string;
notes?: string;
[key: string]: unknown;
}
/** Canvas children (used from S4-9 onward; defined here so the seam is complete). */
export interface ExamQuestion {
id: string;
@@ -41,9 +77,11 @@ export interface ExamQuestion {
max_marks: number;
answer_type: string | null;
mcq_options: unknown | null;
mark_scheme: Record<string, unknown>;
mark_scheme: MarkScheme;
is_container: boolean;
spec_ref: string | null;
bounds?: Record<string, number> | null;
page?: number | null;
}
export interface ExamResponseArea {
@@ -52,8 +90,9 @@ export interface ExamResponseArea {
template_id: string;
page: number;
bounds: Record<string, number>;
kind: 'response' | 'context';
kind: 'response' | 'context' | 'question_number' | 'mark_area' | 'reference' | 'furniture';
response_form: string | null;
context_type?: string | null;
source: 'manual' | 'ai';
confirmed: boolean;
confidence: number | null;
@@ -76,3 +115,28 @@ export interface ExamTemplateDetail extends ExamTemplate {
response_areas: ExamResponseArea[];
boundaries: ExamBoundary[];
}
export interface PatchQuestionPayload {
label?: string;
order?: number;
max_marks?: number;
answer_type?: 'written' | 'mcq' | 'short' | 'diagram' | null;
mcq_options?: unknown;
mark_scheme?: MarkScheme;
is_container?: boolean;
spec_ref?: string | null;
}
export interface SpecPoint {
uid?: string;
uuid_string?: string;
ref: string;
description: string;
spec_code: string;
exam_board_code?: string;
}
export interface Neo4jSyncResult {
status: string;
projection?: Record<string, unknown>;
}