Lewati ke isi

T2-W01 Validation Matrix

Business rule FE validation BE validation DB / ORM constraint Test case
Academic year requires name + dates Academic year form required fields academic_year_save rejects missing OE required Date fields W01-AY-CREATE
Year end ≥ start Client date checks (where present) Explicit compare in academic_year_save W01-AY-INVALID-RANGE
Term end ≥ start; term inside year Academic year term UI Explicit checks in academic_year_save covered by AY create/invalid
Rombel requires in-scope year + course Study group form _require_school_unit_company + year/course company domain op.batch company_id W01-BATCH-CREATE, W01-BATCH-FOREIGN-COURSE
Homeroom faculty in school scope Teacher assignment UI _faculty_scope_domain on save W01-TEACHER-ASSIGN-*
Lesson hour end > start Schedule-slots form scola.lesson.hours overlap/range constraints model constraints W01-LH-INVALID-RANGE
Session requires batch/subject/faculty + datetimes Session form / generate wizard session_save required-field checks OE required M2O W01-SESSION-CREATE
Session end > start Form session_save compare validation path
Foreign-company relations rejected without leak _session_relation_in_scope generic denial company domains / record rules W01-SESSION-FOREIGN-*
Teacher/class overlap forbidden Generate UI warnings _find_conflicts + @api.constrains W01-SESSION-TEACHER-CLASS-CONFLICT
Failed conflict does not persist Toast error savepoint around create/write transaction rollback W01-SESSION-UPDATE-ATOMIC, conflict case
Concurrent overlap → one winner advisory xact lock + pre-check W01-SESSION-CONCURRENT
Double submit no duplicate debounce (UX) conflict engine W01-SESSION-IDEMPOTENT-DUP
Non-admin cannot mutate timetable Route capability _can_manage_academic ACL/record rules W01-SESSION-*-MUTATE-DENIED
Direct RPC cannot bypass ACL + capability middleware ir.model.access / rules W01-SESSION-RPC-BYPASS
lesson_hours_id accepted on Core save Schedule payload allowed_fields includes lesson_hours_id stored on op.session W01-SESSION-CREATE

FE ↔ BE authority

Critical rules have BE enforcement. FE validation is assistive only; direct API without FE still fail-closed.