Lewati ke isi

T2-W01 Domain Map — Academic Master → Timetable

Item Nilai
Mode Server · /home/scola/odoo
Sumber kebenaran Runtime FE/BE (bukan docs lama)
Scope Core W01 only

Canonical graph

op.academic.year (+ op.academic.term)
        │
        ├── op.course                 # FE: grade levels / jenjang-kelas
        ├── op.subject
        ├── op.classroom              # OPTIONAL for Core session
        ├── scola.lesson.hour.profile ── scola.lesson.hours
        ├── op.batch                  # FE: rombel / study-group (SSOT class)
        │       └── faculty_id(s)     # Core homeroom / wali assignment
        └── op.session                # SSOT timetable entry
               faculty_id + subject_id + batch_id + lesson_hours_id?
               + start/end datetime (+ optional classroom_id)

Ownership classifications

Concept Canonical owner Classification Notes
Academic year op.academic.year CANONICAL API /api/v1/academic/academic-years/*
Term / semester op.academic.term CANONICAL Nested under year save; used when present
Grade / program op.course CANONICAL FE label “grade levels”
Subject op.subject CANONICAL
Rombel / class op.batch CANONICAL No parallel scola.class
Lesson slot scola.lesson.hours (+ profile) CANONICAL OpenEduCat op.timing = LEGACY
Timetable entry op.session CANONICAL FE “schedule”; package scola_timetable
Homeroom teacher op.batch.faculty_id / faculty_ids CANONICAL (Core)
Subject teaching assignment op.teaching.assignment OPTIONAL (LMS) Model lives in scola_lms; not installed on Golden Core; W01 uses op.session.faculty_id
Room op.classroom OPTIONAL for Core schedule Conflict only if classroom_id set
Generate / auto-generate /api/timetable/sessions/* COMPATIBILITY path Same op.session store

Capability / API (Core)

Surface Capability (registry) Mutation gate
Academic year academics.academic_year.* _can_manage_academic roles
Grade / subject / rombel mostly .view in registry _can_manage_academic in controller
Lesson hours schedule_slot.view/manage manage routes for save/delete
Sessions schedule.view/manage manage for save/delete
Teaching-assignments HTTP academics.lms.manage + LMS flag Out of Core W01 denominator

Explicit decisions

  1. Term: APPLICABLE (op.academic.term).
  2. Room: NOT required for Core W01 session create.
  3. Teaching assignment for Core: op.session.faculty_id + batch homeroom fields; LMS op.teaching.assignment not certified.
  4. Overlapping academic years: Product does not enforce unique active year in API — document as permitted unless later Product forbids; do not invent prohibition.
  5. Conflict engine: Scola _find_conflicts on op.session (batch / faculty / classroom) — fail closed via ValidationError.

Downstream reads (Core)

Actor Route / API Scope
Admin /schedule → sessions list company
Teacher /faculty/schedule own faculty sessions (when faculty linked)
Student / parent portal schedule derived; fixture may still lack student linkage (not W02)