Lewati ke isi

Pilot Traceability Matrix — W05 Daily Student Attendance

Matriks ini adalah gate fakta untuk materi dokumentasi pilot. Setiap baris adalah satu pernyataan atomik yang kelak dapat masuk ke workflow guide, quick guide, contextual help, field/action reference, troubleshooting, atau acceptance test. Baris berstatus belum final tidak boleh diubah menjadi janji produk.

Last verified: 2026-08-08

Mode: server development, static code audit only

Workspace root: /home/scola/odoo

Frontend HEAD: 0275f7061e6e892b1f860eeb825c6f6a21851888 (develop)

Backend HEAD: 44425cc81d8d281ec76e9336c30b3e109a7fc473

Runtime verification: belum dilakukan; tidak ada runtime write/test

Companion plan: pilot-attendance-plan.md

1. Aturan status

Hanya lima status berikut yang dipakai:

  • Confirmed from code: kontrak terlihat konsisten pada route, UI/service, dan backend current HEAD.
  • Confirmed by existing documentation: bukti utamanya dokumen existing; tetap perlu pengecekan code/runtime bila dijadikan langkah wajib.
  • Requires runtime verification: struktur code mendukung pernyataan, tetapi perilaku aktual, data, group efektif, mode, atau integrasinya belum diuji pada baseline tenant.
  • Requires business confirmation: code tidak dapat menentukan policy/ownership/semantik final.
  • Blocked by defect: pernyataan tidak aman atau tidak benar untuk diajarkan sampai defect diperbaiki dan diverifikasi.

Business confirmation menunjuk decision ID di pilot-attendance-plan.md. Tidak berarti tidak memerlukan keputusan bisnis tambahan, bukan berarti runtime sudah terbukti.

2. Teacher/homeroom entry dan session selection

ID Future documentation statement Route Component Service API endpoint Backend controller/model Business confirmation Confidence status Evidence
W05-T01 Entry point kanonis guru untuk presensi per sesi adalah menu Presensi Mapel menuju /faculty/attendance. /faculty/attendance Faculty/Attendance.vue studentAttendance.service.js /api/v1/attendance/faculty/today-sessions AttendanceFacultyAPI.faculty_today_sessions; _faculty_today_sessions Tidak Confirmed from code src/config/apps/appFragments/teacherPortalApp.js:123-131; src/router/teacherRouteFragments/attendance.js:25-34; src/views/AttendanceManagement/Faculty/Attendance.vue:291-297; ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_faculty_api.py:8-10
W05-T02 Sekolah early-years/PAUD tidak memakai workflow per-sesi ini; route guru mengalihkan ke /attendance/daily. /faculty/attendance/attendance/daily route guard; Faculty/Attendance.vue settings resolver /api/v1/attendance/student/settings attendance mode service ATT-D17 Confirmed from code src/router/teacherRouteFragments/attendance.js:6-13; src/views/AttendanceManagement/Faculty/Attendance.vue:269-289; src/services/attendance/studentAttendance.service.js:51-54
W05-T03 Daftar guru memuat sesi pada tanggal lokal hari ini, bukan date picker historis. /faculty/attendance Faculty/Attendance.vue getFacultyTodaySessions /api/v1/attendance/faculty/today-sessions _faculty_today_sessions ATT-D17 Confirmed from code src/views/AttendanceManagement/Faculty/Attendance.vue:291-297; src/services/attendance/studentAttendance.service.js:396-399; ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:4056-4158
W05-T04 Guru hanya menerima sesi yang faculty-nya cocok dengan profil faculty user. /faculty/attendance Faculty/Attendance.vue getFacultyTodaySessions /api/v1/attendance/faculty/today-sessions op.session; _faculty_today_sessions Tidak Confirmed from code ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:4056-4158; ownership diulang pada ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:4160-4194 dan ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:4196-4236
W05-T05 Wali kelas memakai jalur input yang sama ketika ia juga menjadi faculty sesi; status wali kelas sendiri tidak memberi akses ke sembarang rombel. /faculty/attendance Faculty/Attendance.vue faculty endpoints faculty endpoints _check_roles; op.faculty/op.session ownership ATT-D01 Requires business confirmation Role homeroom diterima di ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:4057, tetapi filter faculty tetap berlaku di ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:4056-4158; homeroom mewarisi capability teacher di ../custom_addons_scola/gcgscola/scola_core/services/auth_capabilities.py:484-485
W05-T06 Search pada daftar sesi menyaring nama mata pelajaran, kelas/batch, atau label sesi yang dimuat. /faculty/attendance Faculty/Attendance.vue tidak ada API tambahan data today-sessions tidak ada mutation Tidak Confirmed from code src/views/AttendanceManagement/Faculty/Attendance.vue:69-74,77-147,299-324
W05-T07 Label kartu sesi membedakan complete, partial, dan pending berdasarkan sheet/line yang diterima UI. /faculty/attendance Faculty/Attendance.vue getFacultyTodaySessions /api/v1/attendance/faculty/today-sessions _faculty_today_sessions serializer ATT-D03 Requires business confirmation src/views/AttendanceManagement/Faculty/Attendance.vue:105-108; semantik state final belum diputuskan karena save langsung done di ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:4334
W05-T08 Route sheet kanonis adalah /faculty/attendance/sheet/:id; /faculty/attendance/attendance-sheet/:id hanya redirect legacy ke component yang sama. /faculty/attendance/sheet/:id Faculty/AttendanceSheet.vue getFacultySessionAttendanceSheet /api/v1/attendance/faculty/session-sheet AttendanceFacultyAPI.faculty_session_sheet; _faculty_session_sheet Tidak Confirmed from code src/router/teacherRouteFragments/attendance.js:37-47; src/services/attendance/studentAttendance.service.js:424-433; ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_faculty_api.py:12-18
W05-T09 Membuka sheet tetap divalidasi backend terhadap role, faculty ownership, session, dan attendance mode; mengetahui URL tidak memberi akses tambahan. /faculty/attendance/sheet/:id Faculty/AttendanceSheet.vue getFacultySessionAttendanceSheet /api/v1/attendance/faculty/session-sheet _faculty_session_sheet Tidak Confirmed from code ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:4160-4194; route capability di src/router/teacherRouteFragments/attendance.js:37-42

3. Roster, field, status, dan proof

ID Future documentation statement Route Component Service API endpoint Backend controller/model Business confirmation Confidence status Evidence
W05-F01 Roster awal sheet dibangun dari siswa pada session.batch_id. /faculty/attendance/sheet/:id Faculty/AttendanceSheet.vue getFacultySessionAttendanceSheet /api/v1/attendance/faculty/session-sheet _serialize_batch_student; op.batch/op.student Tidak Confirmed from code ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:2034-2091,2093-2168; UI hydrate src/views/AttendanceManagement/Faculty/AttendanceSheet.vue:713-731
W05-F02 Pada sheet baru, serializer saat ini memberi default Hadir untuk seluruh roster. /faculty/attendance/sheet/:id Faculty/AttendanceSheet.vue session sheet fetch /api/v1/attendance/faculty/session-sheet _serialize_batch_student ATT-D02 Requires business confirmation Default flags/status di ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:2034-2091; bulk toggle UI di src/views/AttendanceManagement/Faculty/AttendanceSheet.vue:526-546. Policy default Hadir belum disahkan.
W05-F03 Status langsung yang tersedia di selector adalah Hadir, Izin, Alpa, dan Telat. /faculty/attendance/sheet/:id Faculty/AttendanceSheet.vue; attendanceStatus.js save faculty sheet /api/v1/attendance/faculty/session-sheet/save op.attendance.line booleans ATT-D06 Confirmed from code src/i18n/attendanceStatus.js:33-39; rendering selector src/views/AttendanceManagement/Faculty/AttendanceSheet.vue:104-177
W05-F04 Memilih Izin membuka modal dengan jenis Izin/Sakit/Dispensasi, keterangan, opsi tanpa bukti, dan file bukti. /faculty/attendance/sheet/:id Faculty/AttendanceSheet.vue; attendanceStatus.js save faculty sheet /api/v1/attendance/faculty/session-sheet/save op.attendance.line.remark/proof_file ATT-D06, ATT-D09 Confirmed from code Modal src/views/AttendanceManagement/Faculty/AttendanceSheet.vue:244-332; remark types src/i18n/attendanceStatus.js:46-54; status handler src/views/AttendanceManagement/Faculty/AttendanceSheet.vue:549-571
W05-F05 Izin siswa yang sudah approved dapat memprefill remark/evidence pada roster sheet. /faculty/attendance/sheet/:id Faculty/AttendanceSheet.vue session sheet fetch /api/v1/attendance/faculty/session-sheet permit lookup/bridge; _serialize_session_sheet ATT-D15 Requires runtime verification Approved leave merge terlihat di ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:1990-2032,2093-2168; runtime linkage permit-session belum dibuktikan end-to-end.
W05-F06 Combined-session sheet menggabungkan roster beberapa session dalam satu group dan disimpan atomik. /faculty/attendance/sheet/:id Faculty/AttendanceSheet.vue faculty session fetch/save faculty session-sheet endpoints _faculty_session_sheet_save; op.session combined group Tidak Requires runtime verification Combined branch dan validation ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:4238-4275; response ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:4276-4282; perlu seeded runtime group.
W05-F07 Tombol Tandai Semua Hadir mengubah seluruh baris pada UI sebelum disimpan. /faculty/attendance/sheet/:id Faculty/AttendanceSheet.vue tidak memanggil API saat toggle ATT-D02 Confirmed from code src/views/AttendanceManagement/Faculty/AttendanceSheet.vue:526-546
W05-F08 Search pada sheet menyaring siswa; filter batch muncul untuk roster gabungan. /faculty/attendance/sheet/:id Faculty/AttendanceSheet.vue tidak ada API tambahan data session sheet Tidak Confirmed from code src/views/AttendanceManagement/Faculty/AttendanceSheet.vue:87-102
W05-F09 File picker memberi hint browser image/PDF, tetapi batas itu bukan validasi server. /faculty/attendance/sheet/:id Faculty/AttendanceSheet.vue save faculty sheet /api/v1/attendance/faculty/session-sheet/save op.attendance.line.proof_file ATT-D09 Blocked by defect UI accept="image/*,.pdf" di src/views/AttendanceManagement/Faculty/AttendanceSheet.vue:314-319; FileReader tanpa size/type check src/views/AttendanceManagement/Faculty/AttendanceSheet.vue:592-603; backend menyimpan payload mentah ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:4323-4324.
W05-F10 Dokumentasi dapat menyatakan batas ukuran/tipe, scanning, dan retention proof hanya setelah server menegakkannya. /faculty/attendance/sheet/:id Faculty/AttendanceSheet.vue save faculty sheet /api/v1/attendance/faculty/session-sheet/save op.attendance.line.proof_file/proof_filename ATT-D09 Blocked by defect Tidak ada field validation sebelum FileReader src/views/AttendanceManagement/Faculty/AttendanceSheet.vue:592-603; tidak ada validation pada controller loop ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:4307-4334.
W05-F11 Sakit saat ini tidak boleh diajarkan sebagai status agregasi mandiri karena semua line excused dinormalisasi menjadi Izin. teacher, student, parent, admin shared status renderers daily/period/admin services faculty save + portal reports _line_status; op.attendance.line ATT-D06 Blocked by defect src/i18n/attendanceStatus.js:33-54; _line_status mengembalikan Izin untuk excused di ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:63-73; period aggregation memakai helper di ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:2855-2940.
W05-F12 Sistem harus menentukan apakah tepat satu flag status wajib true untuk setiap siswa. faculty/admin create pages Faculty/AttendanceSheet.vue; Admin/AttendanceSheetNew.vue faculty/admin save faculty save; admin sheet create op.attendance.line boolean flags ATT-D02, ATT-D06 Requires business confirmation Faculty maps label ke flags src/views/AttendanceManagement/Faculty/AttendanceSheet.vue:680-704; admin handler dapat membuat semua flag false src/views/AttendanceManagement/Admin/AttendanceSheetNew.vue:332-345; backend tidak enforce XOR di ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:4307-4334 dan ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:3398-3422.

4. Save, complete, correction, dan data integrity

ID Future documentation statement Route Component Service API endpoint Backend controller/model Business confirmation Confidence status Evidence
W05-M01 Tombol Simpan guru mengirim session ID, optional sheet ID, dan array siswa ke satu endpoint save. /faculty/attendance/sheet/:id Faculty/AttendanceSheet.vue saveFacultySessionAttendanceSheet /api/v1/attendance/faculty/session-sheet/save AttendanceFacultyAPI.faculty_session_sheet_save; _faculty_session_sheet_save Tidak Confirmed from code src/views/AttendanceManagement/Faculty/AttendanceSheet.vue:733-772; src/services/attendance/studentAttendance.service.js:435-445; ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_faculty_api.py:20-27
W05-M02 Penyimpanan saat ini langsung mengubah sheet menjadi done; tidak ada endpoint complete terpisah. /faculty/attendance/sheet/:id Faculty/AttendanceSheet.vue faculty save /api/v1/attendance/faculty/session-sheet/save _faculty_session_sheet_save; op.attendance.sheet.state ATT-D03 Requires business confirmation ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:4334; hanya satu service mutation di src/services/attendance/studentAttendance.service.js:435-445; UI action src/views/AttendanceManagement/Faculty/AttendanceSheet.vue:190-240.
W05-M03 Dokumentasi tidak boleh menyebut aksi submit, close, atau cancel terpisah untuk presensi per sesi current HEAD. /faculty/attendance/sheet/:id Faculty/AttendanceSheet.vue faculty save only faculty save only _faculty_session_sheet_save ATT-D03 Confirmed from code Action UI src/views/AttendanceManagement/Faculty/AttendanceSheet.vue:190-240; satu save service src/services/attendance/studentAttendance.service.js:435-445; direct done di ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:4334. Ini mengoreksi inferensi docs/recon/workflow-candidates.md:22.
W05-M04 Guru standar dapat membuat sheet baru beserta attendance line pada first save tanpa group legacy tambahan. /faculty/attendance/sheet/:id Faculty/AttendanceSheet.vue faculty save /api/v1/attendance/faculty/session-sheet/save _att_create_sheet; normal op.attendance.line.create Tidak Blocked by defect Sheet elevated di ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:4304-4307, line create normal di ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:4307-4332; teacher create=0 di ../custom_addons_scola/gcgscola/scola_attendance/security/ir.model.access.csv:4,8; attendance-user create=1 di ../custom_addons_scola/openeducat/openeducat_attendance/security/ir.model.access.csv:3-4; teacher only implies faculty at ../custom_addons_scola/gcgscola/scola_core/security/scola_security.xml:88-93.
W05-M05 Endpoint guru harus menolak student ID yang bukan anggota roster session/batch. /faculty/attendance/sheet/:id Faculty/AttendanceSheet.vue faculty save /api/v1/attendance/faculty/session-sheet/save _faculty_session_sheet_save; op.student/op.batch Tidak Blocked by defect Regular loop menerima setiap submitted ID tanpa roster comparison di ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:4307-4334; combined branch memiliki exact-roster validation di ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:4238-4275, menunjukkan gap path regular.
W05-M06 Complete harus menolak roster parsial/missing student agar absent submission tidak dianggap selesai. faculty/admin fill teacher/admin create components faculty/admin save faculty save; admin sheet create _faculty_session_sheet_save; _admin_sheet_create ATT-D02, ATT-D03 Blocked by defect Faculty loop menerima students or [] di ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:4309-4334; admin hanya memerlukan array nonempty pada UI src/views/AttendanceManagement/Admin/AttendanceSheetNew.vue:369-381, backend loops supplied items ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:3398-3422.
W05-M07 Complete harus menolak duplicate student IDs secara atomik. faculty/admin fill teacher/admin create components faculty/admin save faculty save; admin sheet create _faculty_session_sheet_save; _admin_sheet_create Tidak Blocked by defect Regular faculty/admin map+loop tidak memvalidasi duplicate di ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:3398-3422,4307-4334; combined path sudah memiliki duplicate check di ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:4238-4275.
W05-M08 Sheet yang sudah done saat ini dapat dibuka kembali dengan Edit dan disimpan ulang melalui endpoint yang sama. /faculty/attendance/sheet/:id Faculty/AttendanceSheet.vue faculty fetch/save faculty session endpoints _faculty_session_sheet_save; op.attendance.line.write ATT-D04, ATT-D05 Confirmed from code Edit mengubah state UI src/views/AttendanceManagement/Faculty/AttendanceSheet.vue:667-671; payload save src/views/AttendanceManagement/Faculty/AttendanceSheet.vue:733-772; line existing di-write dan sheet tetap done ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:4307-4334.
W05-M09 Hak koreksi, cutoff, alasan wajib, approver, dan audit event belum boleh dijanjikan. faculty/admin fill teacher/admin create components faculty/admin save faculty save; admin sheet create op.attendance.sheet/op.attendance.line ATT-D04, ATT-D05, ATT-D12 Requires business confirmation Payload UI/service tidak membawa correction reason/approval src/views/AttendanceManagement/Faculty/AttendanceSheet.vue:733-772; src/services/attendance/adminAttendance.service.js:119-132; backend direct create/write ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:3398-3422,4307-4334.
W05-M10 Klaim bahwa save guru berhasil dan perubahan terlihat lintas role harus lulus runtime test dengan satu record yang sama. teacher → admin/student/parent semua component pilot faculty save + admin/portal reads all pilot endpoints attendance controller/model Tidak Requires runtime verification Existing E2E hanya teacher save/edit di tests/e2e/critical/teacher_attendance_flow.spec.ts:29-109; parent flow terpisah di tests/e2e/critical/parent_attendance_flow.spec.ts:8-41; belum ada one-record cross-role propagation test.

5. Admin/operator monitoring dan correction

ID Future documentation statement Route Component Service API endpoint Backend controller/model Business confirmation Confidence status Evidence
W05-A01 Hub monitoring kanonis operator adalah /attendance/sheets. /attendance/sheets Admin/AttendanceSheetList.vue listAdminAttendanceSheets /api/v1/attendance/admin/sheets AttendanceAdminAPI.admin_sheets; _admin_sheets ATT-D01 Confirmed from code src/router/attendanceRoutes.js:123-137; src/services/attendance/adminAttendance.service.js:64-68; ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_admin_api.py:65-67
W05-A02 /attendance/home adalah entry dashboard yang berbeda; jangan diduplikasi sebagai halaman sheet list. /attendance/home AttendanceHome.vue attendance settings/dashboard dependencies mixed mixed Tidak Confirmed from code src/router/attendanceRoutes.js:42-50; sheet list terpisah di src/router/attendanceRoutes.js:123-137.
W05-A03 Sheet list memiliki search, date filter, pagination, dan filter attendance_scope=per_lesson. /attendance/sheets Admin/AttendanceSheetList.vue listAdminAttendanceSheets /api/v1/attendance/admin/sheets _admin_sheets Tidak Confirmed from code UI controls src/views/AttendanceManagement/Admin/AttendanceSheetList.vue:92-122; table columns src/views/AttendanceManagement/Admin/AttendanceSheetList.vue:194-199; client scope filter src/views/AttendanceManagement/Admin/AttendanceSheetList.vue:290-299.
W05-A04 Panel pending memuat sesi unit pada tanggal pilihan yang belum memiliki sheet done. /attendance/sheets Admin/AttendanceSheetList.vue listAdminPendingSessions /api/v1/attendance/admin/pending-sessions _admin_pending_sessions; op.session/op.attendance.sheet ATT-D03 Confirmed from code src/views/AttendanceManagement/Admin/AttendanceSheetList.vue:20-65,309-332; service src/services/attendance/adminAttendance.service.js:48-61; backend ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:3189-3280; route ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_admin_api.py:38-44.
W05-A05 Form operator memilih register, session, tanggal, lalu mengubah status/remark per siswa. /attendance/sheets/create Admin/AttendanceSheetNew.vue options/draft/create services /api/v1/attendance/admin/sheet/options; /draft; /create _admin_sheet_options; _admin_sheet_draft; _admin_sheet_create ATT-D01, ATT-D04 Confirmed from code Route src/router/attendanceRoutes.js:151-159; fields src/views/AttendanceManagement/Admin/AttendanceSheetNew.vue:14-64,103-141; load src/views/AttendanceManagement/Admin/AttendanceSheetNew.vue:258-330; submit src/views/AttendanceManagement/Admin/AttendanceSheetNew.vue:369-396; controller routes ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_admin_api.py:34-63.
W05-A06 Memilih session/tanggal yang sudah memiliki sheet memuat line existing, dan submit endpoint create memperbaruinya. /attendance/sheets/create Admin/AttendanceSheetNew.vue draft/create /api/v1/attendance/admin/sheet/draft; /api/v1/attendance/admin/sheet/create _admin_sheet_draft; _admin_sheet_create ATT-D04, ATT-D05 Confirmed from code Draft load src/views/AttendanceManagement/Admin/AttendanceSheetNew.vue:258-330; create service src/services/attendance/adminAttendance.service.js:119-132; existing sheet lookup/update di ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:3335-3423.
W05-A07 Backend mutation allowlist menerima canonical admin, admin_staff, school_admin, head_admin, legacy aliases admin staff, staff, administrator, super admin, dan groups admin terkait; allowlist implementasi ini bukan keputusan supported-role. admin fill routes admin components admin services admin mutation endpoints _admin_access_error ATT-D01, ATT-D04 Requires business confirmation Role/group allowlist ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:146-166; setiap admin mutation memanggilnya termasuk create ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:3335-3337. Policy owner belum disahkan.
W05-A08 Principal dan wakasek kesiswaan adalah reader sheet/detail, bukan operator koreksi. principal/VP attendance routes shared AttendanceSheetList.vue; AttendanceBySession.vue admin read services /admin/sheets; /admin/sheet-lines _student_attendance_read_access_error ATT-D10 Confirmed from code Routes src/router/principalRoutes.js:196-223; src/router/vicePrincipalRoutes.js:214-231; read allow ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:168-199; mutation excludes them ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:146-166.
W05-A09 UI principal/VP tidak boleh menampilkan Create/Pending/Fill bila backend mempertahankan read-only policy. principal/VP shared list AttendanceSheetList.vue admin services admin pending/create _admin_access_error ATT-D10 Blocked by defect Shared UI gates mutation hanya dengan students.attendance.edit at src/views/AttendanceManagement/Admin/AttendanceSheetList.vue:9-20,192; principal/VP share component at route refs above, sedangkan backend rejects at ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:146-166.
W05-A10 Detail sheet admin bersifat read-only dan menyediakan ekspor PDF/Excel dari data yang sudah dimuat. /attendance/session/:sheetId; principal/VP aliases Admin/AttendanceBySession.vue getAdminAttendanceSheetLines /api/v1/attendance/admin/sheet-lines _admin_sheet_lines; op.attendance.line ATT-D14 Confirmed from code Canonical route src/router/attendanceRoutes.js:31-40; aliases src/router/principalRoutes.js:216-223, src/router/vicePrincipalRoutes.js:225-231; export actions src/views/AttendanceManagement/Admin/AttendanceBySession.vue:46-88; fetch src/views/AttendanceManagement/Admin/AttendanceBySession.vue:133-158; service src/services/attendance/adminAttendance.service.js:83-88.
W05-A11 Status legend/export admin harus memakai glossary kanonis yang sama dengan teacher dan portal. admin detail aliases AttendanceBySession.vue admin detail /api/v1/attendance/admin/sheet-lines _line_status; serializer ATT-D06 Blocked by defect src/views/AttendanceManagement/Admin/AttendanceBySession.vue:124-129,217-224 memuat mapping/comment yang tidak konsisten; backend collapses excused at ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:63-73.
W05-A12 Endpoint admin harus menolak student ID out-of-roster dan cross-company walaupun controller memakai elevated line model. /attendance/sheets/create AttendanceSheetNew.vue create admin sheet /api/v1/attendance/admin/sheet/create _admin_sheet_create; _att_sudo_line_model Tidak Blocked by defect Elevated line model dan trusted submitted ID loop ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:3398-3422; global company record rules ada di ../custom_addons_scola/gcgscola/scola_attendance/security/attendance_security.xml:10-29, tetapi elevation tidak menggantikan explicit student/session scope validation.

6. Student dan parent visibility

ID Future documentation statement Route Component Service API endpoint Backend controller/model Business confirmation Confidence status Evidence
W05-P01 Siswa membuka attendance pribadi melalui /student/attendance. /student/attendance Student/Attendance.vue student daily/period services /api/v1/attendance/student/daily; /student/period-report AttendancePortalAPI.student_daily/student_period_report Tidak Confirmed from code src/router/studentRouteFragments/core.js:25-33; service src/services/attendance/studentAttendance.service.js:311-314,368-379; controller ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_portal_api.py:8-18.
W05-P02 Halaman siswa memuat detail tanggal dan ringkasan periode mingguan. /student/attendance Student/Attendance.vue getStudentDailyAttendance; getStudentAttendancePeriodReport student daily/period-report _student_daily; _student_period_report ATT-D06 Confirmed from code Fetch src/views/AttendanceManagement/Student/Attendance.vue:98-174; period controls src/views/AttendanceManagement/Student/Attendance.vue:213-239; session detail src/views/AttendanceManagement/Student/Attendance.vue:299-356.
W05-P03 Siswa hanya dapat membaca profil student yang terkait ke user aktif. /student/attendance Student/Attendance.vue student services student daily/period-report _student_from_user; role check Tidak Confirmed from code Identity/role resolution ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:2942-2970; endpoints delegate via ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_portal_api.py:8-18.
W05-P04 Orang tua membuka attendance melalui /parent/attendance, lalu memilih anak tertaut. /parent/attendance Parent/Attendance.vue parent children/daily/monthly/period services /api/v1/attendance/parent/children; parent report endpoints AttendancePortalAPI; parent-child resolver Tidak Confirmed from code src/router/parentRouteFragments/core.js:35-43; children service src/services/attendance/studentAttendance.service.js:316-327; component fetch src/views/AttendanceManagement/Parent/Attendance.vue:198-300; backend resolver ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:2835-2853,2971-3058.
W05-P05 Orang tua tidak boleh meminta student ID yang tidak ada dalam child list miliknya. /parent/attendance Parent/Attendance.vue parent daily/monthly/period parent endpoints _resolve_child_for_parent Tidak Confirmed from code Child resolver ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:2835-2853; parent endpoint access/identity ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:2971-3058.
W05-P06 Halaman orang tua menampilkan rekap bulanan/mingguan dan membuka detail hari/session dari tanggal yang dipilih. /parent/attendance Parent/Attendance.vue; AttendanceDayDetailPanel.vue parent monthly/period/daily parent endpoints parent serializers ATT-D06 Confirmed from code Fetch src/views/AttendanceManagement/Parent/Attendance.vue:238-300; controls src/views/AttendanceManagement/Parent/Attendance.vue:366-415; summary/day selection src/views/AttendanceManagement/Parent/Attendance.vue:498-522; per-lesson detail src/components/attendance/AttendanceDayDetailPanel.vue:305-358.
W05-P07 Detail per sesi untuk student/parent berisi mata pelajaran, waktu, kelas/batch, remark, dan status. student/parent attendance Student/Attendance.vue; AttendanceDayDetailPanel.vue daily services student/parent daily _serialize_student_daily ATT-D09, ATT-D14 Confirmed from code Student session list src/views/AttendanceManagement/Student/Attendance.vue:299-356; parent panel src/components/attendance/AttendanceDayDetailPanel.vue:305-358; serializer ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:2754-2814.
W05-P08 Perubahan per-sesi menjadi terlihat melalui fetch/refresh berikutnya; code tidak membuktikan push notification. student/parent attendance portal views daily/period services portal reads attendance line serializers ATT-D08 Confirmed from code Portal components fetch via service src/views/AttendanceManagement/Student/Attendance.vue:98-174, src/views/AttendanceManagement/Parent/Attendance.vue:238-300; faculty save path ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:4196-4335 tidak memanggil mail/bus/notification.
W05-P09 Dokumentasi tidak boleh menjanjikan notifikasi otomatis setelah guru menyimpan presensi per sesi. all pilot routes all pilot components no notification service in save faculty save _faculty_session_sheet_save ATT-D08 Requires business confirmation Tidak ada notification/mail/bus call di ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:4196-4335; PO harus memutuskan apakah no-notification adalah kontrak final atau feature gap.
W05-P10 Raw proof file tidak boleh ikut payload student/parent kecuali viewer, purpose, retention, dan data-minimization policy disetujui. student/parent attendance portal views daily services student/parent daily _serialize_student_daily; _serialize_student_daily_for_parent ATT-D09, ATT-D14 Blocked by defect Serializer memasukkan proof_file/proof_filename di ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:2795-2796; parent wrapper ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:2816-2833 hanya mematikan write flags arrival/departure dan tidak menghapus proof. Student UI bahkan merender raw proof di src/views/AttendanceManagement/Student/Attendance.vue:418-428.
W05-P11 Query period harus menolak range tanggal invalid dan menghitung hanya scope yang disepakati. student/parent attendance portal views period services student/parent period-report _attendance_period_report ATT-D06, ATT-D07 Requires runtime verification Request params src/services/attendance/studentAttendance.service.js:368-394; aggregator/validation ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:2855-2940; boundary tanggal/timezone perlu diuji pada tenant.

7. Downstream, exception, privacy, dan recovery

ID Future documentation statement Route Component Service API endpoint Backend controller/model Business confirmation Confidence status Evidence
W05-X01 Attendance line per-sesi menjadi sumber rekap attendance pada student report card. related report-card page report-card component di luar pilot report-card service report-card APIs scola_report_card.models.student_report; op.attendance.line ATT-D07 Confirmed from code ../custom_addons_scola/gcgscola/scola_report_card/models/student_report.py:188-228
W05-X02 Attendance line juga dipakai dalam kalkulasi persentase attendance untuk student promotion. related promotion page promotion component di luar pilot promotion service promotion APIs scola_report_card.models.student_promotion; op.attendance.line ATT-D07 Confirmed from code ../custom_addons_scola/gcgscola/scola_report_card/models/student_promotion.py:276-314
W05-X03 Dokumentasi tidak boleh menyebut satu line sama dengan satu hari sampai semantik agregasi per-sesi vs harian diputuskan. reports/portal report components report services report endpoints report-card/promotion models ATT-D07 Requires business confirmation Downstream menghitung attendance lines pada ../custom_addons_scola/gcgscola/scola_report_card/models/student_report.py:188-228 dan ../custom_addons_scola/gcgscola/scola_report_card/models/student_promotion.py:276-314; pilot mencatat per session, sehingga denominasi hari vs sesi bukan fakta yang dapat ditetapkan dari UI.
W05-X04 Approved permit/leave adalah dependency yang dapat mengubah atau memprefill attendance line; ownership approval tetap di workflow permit. teacher sheet; permit pages teacher sheet + permit components attendance + permit services attendance/permit endpoints scola_student_activity.models.student_permit; attendance serializer ATT-D15 Requires runtime verification Permit bridge/update di ../custom_addons_scola/gcgscola/scola_student_activity/models/student_permit.py:437-520; attendance approved-leave merge ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:1990-2032; E2E belum dibuktikan.
W05-X05 Bila sesi tidak muncul, troubleshooting harus memeriksa tanggal lokal, faculty ownership, jadwal/session, enrollment batch, mode, dan company/unit. /faculty/attendance Faculty/Attendance.vue today-sessions/settings faculty today-sessions; settings _faculty_today_sessions; mode service; op.session Tidak Confirmed from code Mode redirect src/views/AttendanceManagement/Faculty/Attendance.vue:269-289; load src/views/AttendanceManagement/Faculty/Attendance.vue:291-297; backend filters ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:4056-4158.
W05-X06 Bila first save menghasilkan AccessError, dokumentasi support harus mengeskalasi defect/group mismatch dan tidak menyuruh memberi group legacy manual. teacher sheet Faculty/AttendanceSheet.vue faculty save faculty save sheet elevation + line ACL Tidak Blocked by defect ACL/elevation evidence pada W05-M04; existing structural test hanya mengassert penggunaan _att_create_sheet di ../custom_addons_scola/gcgscola/scola_attendance/tests/test_attendance_structure_unit.py:376-387, bukan fresh-user line create.
W05-X07 Workflow per-sesi tidak memiliki offline outbox; pengguna harus mempertahankan halaman dan retry sesuai hasil save yang terlihat. teacher sheet Faculty/AttendanceSheet.vue direct save faculty save JSON controller ATT-D16 Requires business confirmation Save langsung src/views/AttendanceManagement/Faculty/AttendanceSheet.vue:733-772; tidak ditemukan queue/outbox pada component/service per-sesi. Recovery UX final perlu keputusan.
W05-X08 Tenant/company isolation harus diuji dengan user dan student lintas company sebelum artikel menyebut data aman terisolasi. all pilot routes all pilot components all pilot services all pilot endpoints record rules + explicit scope filters Tidak Requires runtime verification Global company rules ../custom_addons_scola/gcgscola/scola_attendance/security/attendance_security.xml:10-29; explicit session company gate ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:201-214; admin elevated arbitrary-student gap W05-A12 mencegah klaim final.
W05-X09 Export detail harus mengikuti policy data sensitif; jangan menyertakan proof atau identifier berlebih tanpa persetujuan. admin detail aliases AttendanceBySession.vue admin sheet-lines /api/v1/attendance/admin/sheet-lines _admin_sheet_lines ATT-D09, ATT-D14 Requires business confirmation Export UI src/views/AttendanceManagement/Admin/AttendanceBySession.vue:46-88; columns src/views/AttendanceManagement/Admin/AttendanceBySession.vue:217-224; viewer/export policy tidak ditentukan oleh code.
W05-X10 Semua correction yang berdampak ke portal, rapor, atau promotion harus memiliki owner dan audit/recovery policy. teacher/admin correction teacher/admin components faculty/admin save faculty save; admin create attendance line + downstream models ATT-D04, ATT-D05, ATT-D07, ATT-D12 Requires business confirmation Mutations ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:3398-3422,4307-4334; downstream ../custom_addons_scola/gcgscola/scola_report_card/models/student_report.py:188-228, ../custom_addons_scola/gcgscola/scola_report_card/models/student_promotion.py:276-314; tidak ada correction metadata pada payload.

8. Existing documentation reuse dan delta

ID Future documentation statement Route Component Service API endpoint Backend controller/model Business confirmation Confidence status Evidence
W05-D01 Existing teacher/homeroom/student/parent guides dapat dipakai sebagai source label dan orientasi role, bukan sebagai kontrak final. pilot routes pilot components pilot services pilot endpoints pilot controllers Tidak Confirmed by existing documentation docs/user-guide/quick-start/input-absensi-harian.md:7-45; docs/user-guide/per-role/teacher.md:21; docs/user-guide/per-role/homeroom.md:23; docs/user-guide/per-role/student.md:21; docs/user-guide/per-role/parent.md:19-29; seluruh klaim wajib tetap digate oleh baris code di matriks ini.
W05-D02 Langkah existing yang menyuruh guru memilih tanggal/kelas tidak boleh digunakan untuk per-sesi current HEAD. /faculty/attendance Faculty/Attendance.vue today-sessions faculty today-sessions _faculty_today_sessions ATT-D17 Blocked by defect Existing docs/user-guide/quick-start/input-absensi-harian.md:18-20,33 dan docs/user-guide/troubleshooting/absensi.md:23-24 memuat arahan lebih luas; current UI/backend today-only di src/views/AttendanceManagement/Faculty/Attendance.vue:291-297 dan ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:4056-4158.
W05-D03 Existing wording Sakit sebagai pilihan status langsung tidak boleh disalin ke pilot current HEAD. teacher sheet Faculty/AttendanceSheet.vue; attendanceStatus.js faculty save faculty save _line_status ATT-D06 Blocked by defect Existing docs/user-guide/quick-start/input-absensi-harian.md:18-20 dan docs/domains/absensi/IMPLEMENTATION_GUIDE.md:124-155; current direct options src/i18n/attendanceStatus.js:33-39, Sakit hanya remark subtype src/i18n/attendanceStatus.js:46-54, backend returns Izin ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:63-73.
W05-D04 Existing troubleshooting dapat dipakai sebagai symptom inventory setelah route/date/mode dan permission claims diperbarui. pilot routes pilot components pilot services pilot endpoints pilot controllers Tidak Confirmed by existing documentation docs/user-guide/troubleshooting/absensi.md:7-42; current corrections W05-T02/T03, W05-M04, W05-P09, dan W05-X07 wajib diterapkan sebelum reuse.
W05-D05 Domain mode matrix/navigation audit dapat dipakai untuk menjelaskan boundary per-lesson vs gate, bukan untuk memasukkan gate flow ke pilot. attendance entry routes route/menu guards settings attendance settings mode service ATT-D17 Confirmed by existing documentation docs/domains/absensi/README.md:45-95; docs/domains/absensi/attendance-modes-matrix.md:31-33,73-75,97-113; docs/domains/absensi/attendance-navigation-audit.md:11-28; code boundary src/router/teacherRouteFragments/attendance.js:6-13 dan src/views/AttendanceManagement/Faculty/Attendance.vue:269-289.

9. Documentation acceptance trace

ID Future documentation statement Route Component Service API endpoint Backend controller/model Business confirmation Confidence status Evidence
W05-Q01 Fresh Scola Teacher first-save berhasil tanpa group attendance legacy. teacher sheet Faculty/AttendanceSheet.vue faculty save faculty save ACL + attendance sheet/line models Tidak Blocked by defect W05-M04; test baru harus melengkapi ../custom_addons_scola/gcgscola/scola_attendance/tests/test_attendance_structure_unit.py:376-387.
W05-Q02 Satu save guru yang sama terbaca konsisten oleh admin, student, dan parent. all pilot routes all pilot components faculty save + all reads all pilot endpoints attendance line serializers Tidak Requires runtime verification Existing tests terpisah tests/e2e/critical/teacher_attendance_flow.spec.ts:29-109 dan tests/e2e/critical/parent_attendance_flow.spec.ts:8-41; belum ada cross-role record trace.
W05-Q03 Duplicate, missing, out-of-batch, dan cross-company student IDs ditolak atomik pada faculty dan admin mutation. faculty/admin fill teacher/admin components faculty/admin save faculty save; admin create _faculty_session_sheet_save; _admin_sheet_create Tidak Blocked by defect W05-M05–M07 dan W05-A12; regular loops ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:3398-3422,4307-4334.
W05-Q04 Principal/VP tidak melihat mutation CTA dan mutation API menolak mereka. principal/VP routes shared admin list admin services admin mutation endpoints _admin_access_error ATT-D10 Blocked by defect W05-A08/A09; UI src/views/AttendanceManagement/Admin/AttendanceSheetList.vue:9-20,192; backend ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:146-199.
W05-Q05 Status kanonis round-trip identik pada teacher, admin, student, parent, report card, dan promotion. all pilot/related routes all status renderers all attendance/report services attendance/report APIs _line_status + downstream models ATT-D06, ATT-D07 Blocked by defect W05-F11/A11/X01-X03.
W05-Q06 Correction mengikuti actor, cutoff, reason, approval, audit, dan recovery policy yang diputuskan. teacher/admin fill teacher/admin components faculty/admin save faculty save; admin create attendance sheet/line ATT-D04, ATT-D05, ATT-D12 Requires business confirmation W05-M08/M09/A06/A07/X10.
W05-Q07 Parent hanya melihat child tertaut dan payload proof sesuai data-minimization policy. /parent/attendance Parent/Attendance.vue parent services parent endpoints parent identity + serializers ATT-D09, ATT-D14 Blocked by defect Child boundary confirmed W05-P05; raw proof leak risk W05-P10.
W05-Q08 Boundary timezone menampilkan sesi pada hari sekolah yang benar di teacher dan portal. teacher/student/parent routes pilot views today/daily/period services faculty/portal endpoints timezone helpers + session domains ATT-D17 Requires runtime verification _local_today usage dalam faculty flow ../custom_addons_scola/gcgscola/scola_attendance/controllers/attendance_api_mixin.py:4056-4335; runtime tenant timezone belum diuji.

10. Coverage gate untuk penulisan

Status saat audit ini:

  • Klaim navigasi, route kanonis, field UI, service endpoint, role read, dan sumber downstream sudah memiliki trace code.
  • Klaim first-save, roster integrity, proof safety, principal/VP mutation parity, dan status glossary masih Blocked by defect.
  • Klaim policy wali kelas, completion/correction, notification, evidence, export/privacy, aggregation, dan recovery masih Requires business confirmation.
  • Klaim propagation lintas role, permit bridge, combined sessions, tenant isolation, timezone, dan clean-role provisioning masih Requires runtime verification.

Artikel final tidak boleh dimulai dengan menghapus label limitation. Definition of Ready tercapai hanya jika seluruh pernyataan yang menjadi langkah wajib berstatus Confirmed from code atau Confirmed by existing documentation dan bukti dokumen existing telah direkonsiliasi dengan current code/runtime.