Assessment and eRaport Backlog Execution Plan¶
Last verified: 2026-04-19
1. Doc compliance¶
- Mode kerja:
server - Workspace root:
/home/scola/odoo - Frontend repo:
scola-fe-v2 - Backend repo:
custom_addons_scola/gcgscola - Dokumen acuan:
scola-fe-v2/docs/ai-guidelines/development-guide.mdscola-fe-v2/docs/ai-guidelines/workspace-governance.mdscola-fe-v2/docs/ai-guidelines/architecture-api.mdscola-fe-v2/docs/domains/academic/README.md- Scope audit:
- kebijakan bobot nilai
- alur input nilai guru dari LMS/CBT/manual sampai eRaport
- coverage halaman ReportCardManagement lintas role
- redundansi route, page, dan service
Dokumen ini adalah backlog eksekusi yang menurunkan hasil audit assessment dan eRaport menjadi work items yang bisa langsung dipecah menjadi issue FE, BE, dan QA.
2. Executive summary¶
Assessment dan eRaport di repo ini sudah mencakup hampir seluruh surface operasional sekolah:
- setup kurikulum, komponen, grade scale, KKTP
- teacher grading via LMS/CBT/manual
- homeroom orchestration
- admin workflow dan Dapodik sync
- student dan parent consumption
Namun sistemnya belum punya SSOT tunggal untuk kebijakan nilai dan masih memiliki overlap implementasi yang signifikan.
Masalah tertinggi:
- kebijakan bobot nilai hidup di lebih dari satu tempat
- ACL batch input nilai masih berlubang
- kalkulasi final score memperlakukan
0seperti nilai kosong - subject line report tidak terikat kuat ke batch report
- admin dan homeroom pages terlalu overlap
- output student/parent belum memanfaatkan seluruh artefak rapor yang sudah tersedia di backend
3. Scope ownership¶
3.1 Backend modules dalam scope¶
| Module | Peran |
|---|---|
scola_report_card |
owner workflow rapor, setup kurikulum rapor, komponen, serializer, ranking, publish |
scola_assessment_bridge |
owner SSOT nilai agregat per siswa-mapel-komponen |
scola_lms |
owner gradebook guru, publish nilai LMS ke bridge |
scola_cbt |
owner publish nilai ujian CBT ke bridge |
scola_dapodik_report_card_bridge |
owner validasi dan sinkronisasi rapor ke Dapodik |
3.2 Frontend pages dalam scope¶
| Role | Pages |
|---|---|
| Admin | AdminReportList, AdminReportDetail, CurriculumList, AssessmentComponentTree, GradeScaleList, KKTPConfig, ExamList, DapodikRaporSync |
| Faculty | TeacherReportLineList, BatchScoreInput, HomeroomReportList, HomeroomReportDetail |
| Student | StudentReportList, StudentReportDetail |
| Parent | raportList |
| Leadership | CurriculumQualityGate |
4. Current-state decisions¶
4.1 Canonical policy decisions yang perlu diambil¶
assessment_component.effective_weightharus menjadi SSOT final contribution ke eRaport.- LMS weight profile dan mapping template harus menjadi alat bantu input, bukan sumber kebenaran final yang terpisah.
academic.gradeharus menjadi satu-satunya bridge nilai lintas LMS, CBT, dan manual.- Final publish harus dibaca sebagai snapshot resmi, bukan view dinamis yang masih mudah berubah setelah publish.
4.2 Canonical routes yang disarankan¶
| Role | Route kanonik | Catatan |
|---|---|---|
| Guru | /faculty/assessment-hub |
pertahankan /faculty/report-card sebagai redirect sementara |
| Wali kelas | /faculty/homeroom/report-card |
pertahankan /faculty/homeroom/orchestrator sebagai redirect sementara |
| Admin | /admin/report-card |
route setup tetap di namespace ini |
| Parent | /parent/report-cards |
pertahankan alias lama sebagai redirect sementara |
5. Module backlog¶
5.1 scola_report_card¶
Status: owner utama, tetapi terlalu menanggung policy, workflow, serializer, dan sebagian orchestration yang belum ketat.
| ID | Priority | Problem | Refactor / change | Acceptance criteria | Depends on |
|---|---|---|---|---|---|
| RC-01 | P0 | batch_score_save bypass akses line-level dan draft guard |
Samakan policy mutasi batch dengan save per-line; wajib cek ownership line, role, dan state | user tanpa otorisasi tidak bisa update komponen via batch endpoint; teacher hanya bisa ubah line miliknya; line non-draft ditolak | none |
| RC-02 | P0 | final_score salah untuk skor 0 dan komponen kosong |
Tambah status eksplisit komponen (missing, filled, exempt) dan hitung score tanpa redistribusi bobot implisit |
skor 0 tetap dihitung; komponen kosong tidak menaikkan bobot komponen lain; total contribution selalu sesuai effective_weight |
RC-04 |
| RC-03 | P0 | report tidak terikat kuat ke batch | Ubah generator subject line agar hanya membaca teaching assignment / subject dari batch report aktif | report siswa pada batch A tidak menarik mapel dari batch B; tidak ada subject bleed lintas rombel | none |
| RC-04 | P0 | unique report key terlalu lemah | Revisi constraint report menjadi minimal student + batch + term atau model ekuivalen |
satu siswa bisa punya report per batch-term tanpa collision; migrasi existing data aman | none |
| RC-05 | P1 | submit/publish belum mewajibkan kelengkapan | Tambah workflow gate untuk komponen wajib, attendance, deskripsi, P5, catatan, dan freeze snapshot | report tidak bisa submit/publish jika mandatory fields belum lengkap; pesan error menjelaskan blocker | RC-02, RC-03 |
| RC-06 | P1 | artefak rapor belum lengkap di serializer | Tambah field API untuk QR, signature, notes, publish metadata, achievement description, remedial summary | FE student/parent/admin dapat membaca field yang sama dari serializer domain | RC-05 |
| RC-07 | P1 | reject flow belum konsisten menampung alasan | Wajibkan reason pada reject dan simpan audit trail yang bisa dibaca kembali di detail report | semua reject punya reason; reason tampil di audit/log workflow | none |
| RC-08 | P1 | auto-fill dari bridge belum selesai | Implement action_auto_fill_from_exams() atau ganti dengan service refresh tunggal dari academic.grade |
homeroom/admin bisa refresh report tanpa TODO path; source nilai yang dipakai jelas | AB-01 |
| RC-09 | P2 | attendance izin belum lengkap | Lengkapi permission_days dari sumber attendance yang benar dan pastikan serializer mengirim ringkasan lengkap |
report attendance tidak lagi hardcoded 0 untuk izin |
none |
5.2 scola_assessment_bridge¶
Status: fondasi SSOT nilai sudah benar arahnya, tetapi contract koreksi dan audit trail belum cukup kuat.
| ID | Priority | Problem | Refactor / change | Acceptance criteria | Depends on |
|---|---|---|---|---|---|
| AB-01 | P0 | kontrak bridge belum formal sebagai SSOT tunggal | Dokumentasikan dan enforce academic.grade sebagai owner final aggregated component score |
semua publisher nilai lintas sumber menulis ke model yang sama dengan key yang konsisten | none |
| AB-02 | P0 | idempotency check memblokir republish koreksi | Ubah urutan logic: bandingkan payload dan allow overwrite flow yang terotorisasi sebelum duplicate short-circuit | republish skor berbeda dengan source sama tidak macet; audit trail menyimpan old/new value | AB-01 |
| AB-03 | P1 | override manual belum cukup terstruktur | Wajibkan source_type, overwrite_reason, dan metadata source saat nilai diganti |
setiap grade event punya alasan dan asal perubahan yang dapat diaudit | AB-02 |
| AB-04 | P1 | notifikasi publish disenyapkan | Ganti bare except dengan logging terstruktur dan failure telemetry |
kegagalan notifikasi tercatat tanpa merusak transaksi utama | none |
| AB-05 | P2 | taxonomy komponen belum divisualkan sebagai policy contract | Tambah helper read-model untuk daftar canonical component type dan alias | FE admin dapat menampilkan komponen canonical tanpa hardcode ganda | none |
5.3 scola_lms¶
Status: grading workspace sudah kaya fitur, tetapi masih berisiko drift dari formula rapor.
| ID | Priority | Problem | Refactor / change | Acceptance criteria | Depends on |
|---|---|---|---|---|---|
| LMS-01 | P0 | weight profile LMS bisa berbeda dari formula eRaport | Tambah policy synchronization layer antara active curriculum component weights dan active LMS profile | admin bisa melihat mismatch policy; LMS tidak diam-diam berjalan dengan formula lain | RC-02, AB-01 |
| LMS-02 | P0 | idempotency_key frontend terlalu stabil per student-component |
Ubah key dan contract publish agar koreksi skor dapat diproses tanpa duplicate dead-end | publish ulang setelah koreksi assignment berhasil masuk ke bridge | AB-02 |
| LMS-03 | P1 | publish API belum kirim metadata source selengkap CBT | Sertakan source_exam_id, source_attempt_id, item identity, dan konteks bucket saat publish |
trace dari report component ke item sumber LMS bisa dilakukan | AB-03 |
| LMS-04 | P1 | teacher UI berisiko salah paham bobot final | Expose effective_weight dan policy summary di gradebook/component options API |
FE dapat menampilkan kontribusi final dan bukan hanya bucket-local weight | RC-02 |
| LMS-05 | P2 | mapping template dan weight profile terpisah dari policy governance | Tambah admin screen/read-model policy yang memperlihatkan active mapping, active profile, dan effective report formula | satu layar cukup untuk audit konfigurasi penilaian | LMS-01 |
5.4 scola_cbt¶
Status: CBT publish path lebih rapi dari LMS, tetapi masih perlu diselaraskan dengan policy final rapor.
| ID | Priority | Problem | Refactor / change | Acceptance criteria | Depends on |
|---|---|---|---|---|---|
| CBT-01 | P1 | publish CBT belum tervisualkan sebagai bagian dari policy yang sama | Selaraskan payload publish CBT dengan contract academic.grade terbaru |
CBT publish tetap sukses setelah contract bridge diperketat | AB-02 |
| CBT-02 | P2 | auto publish behavior belum jelas sebagai contract operasional | Tegaskan trigger auto-publish, manual publish, dan observability event-nya | admin/guru tahu kapan nilai CBT otomatis masuk bridge | AB-01 |
5.5 scola_dapodik_report_card_bridge¶
Status: integrasi ada, tetapi status sinkronisasi belum jujur secara operasional.
| ID | Priority | Problem | Refactor / change | Acceptance criteria | Depends on |
|---|---|---|---|---|---|
| DP-01 | P0 | sync bisa success=True walau kirim gagal |
Ubah outcome menjadi synced, queued, failed, export_only |
UI dan API tidak lagi menyatakan sukses saat endpoint Dapodik gagal | none |
| DP-02 | P1 | retry dan audit masih tipis | Tambah retry policy, error summary, dan last-attempt metadata | operator bisa tahu payload mana yang gagal dan kapan retry perlu dijalankan | DP-01 |
| DP-03 | P1 | validasi source report belum memanfaatkan completeness gate baru | Sinkronkan validasi Dapodik dengan freeze snapshot publish | hanya report yang valid dan final yang bisa disinkronkan | RC-05 |
6. Frontend page backlog¶
6.1 Admin pages¶
| Page | Route | Current role | Backlog action | Acceptance criteria | Sequence |
|---|---|---|---|---|---|
AdminReportList.vue |
/admin/report-card |
orchestration list | Ekstrak shared list shell dengan homeroom; sisakan admin-only actions via action config | list admin dan homeroom memakai shell yang sama; admin masih punya generate, ranking, publish, Dapodik entry points | Wave 3 |
AdminReportDetail.vue |
/admin/report-card/:reportId |
orchestration detail | Ekstrak shared report detail layout dengan homeroom; action bar driven by role/state | detail admin dan homeroom tidak duplikasi layout tabel/info card; action berbeda hanya via config | Wave 3 |
CurriculumList.vue |
/admin/report-card/curriculum |
policy setup | Tambah link ke grading policy overview dan effective formula summary | admin bisa melihat kurikulum aktif dan masuk ke layar policy tanpa hunting manual | Wave 2 |
AssessmentComponentTree.vue |
/admin/report-card/curriculum/:curriculumId/components |
component setup | Tampilkan effective_weight dan warning jika mismatch dengan LMS profile |
user melihat bobot final per node; mismatch policy ditandai | Wave 2 |
GradeScaleList.vue |
/admin/report-card/grade-scale |
grade scale | Pastikan relasinya jelas ke report final grade dan detail report | admin paham grade scale mana yang aktif dan dipakai | Wave 4 |
KKTPConfig.vue |
/admin/report-card/kktp |
ketuntasan policy | Tambah status completeness per subject dan visibility di report preview | subject tanpa KKTP terlihat sebagai blocker publish jika diwajibkan | Wave 4 |
ExamList.vue |
/admin/report-card/exams |
referensi exam | Kaitkan exam sources dengan bridge/report refresh policy | admin dapat tahu exam mana yang menjadi source nilai rapor | Wave 4 |
DapodikRaporSync.vue |
/admin/report-card/dapodik-sync |
sync ops | Tampilkan status baru synced/queued/failed/export_only dan retry affordance |
operator bisa membedakan sukses lokal vs sukses kirim | Wave 5 |
GenerateReportWizard.vue |
modal | report generation | Pastikan preview batch/subject memakai scoping batch yang benar | preview generate tidak menampilkan mapel dari batch lain | Wave 2 |
ComputeRankingWizard.vue |
modal | ranking | Sinkronkan warning dengan completeness gate baru | ranking tidak jalan pada report batch yang belum valid bila policy mengharuskan | Wave 4 |
ReportLineEditModal.vue |
shared modal | line edit | Tampilkan effective_weight, source grade, overwrite reason, dan status component |
guru/admin tahu kontribusi final dan source tiap komponen | Wave 2 |
ReportLineDetailModal.vue |
shared modal | read-only line detail | Tambah achievement description, remedial, source metadata | detail line setara dengan kebutuhan audit akademik | Wave 4 |
6.2 Faculty pages¶
| Page | Route | Current role | Backlog action | Acceptance criteria | Sequence |
|---|---|---|---|---|---|
TeacherReportLineList.vue |
/faculty/assessment-hub and alias |
teacher line inbox | Jadikan route ini kanonik; tampilkan policy summary, completeness, dan source visibility | guru melihat line miliknya, kontribusi final, status lengkap/belum lengkap | Wave 2 |
BatchScoreInput.vue |
/faculty/report-card/batch-input |
mass input | Perkuat guard, tampilkan effective_weight, dan jelaskan source of truth manual override |
teacher hanya bisa save line berwenang; kolom bobot tidak menyesatkan | Wave 1 |
HomeroomReportList.vue |
/faculty/homeroom/report-card and alias |
homeroom orchestration list | Gabungkan shell dengan admin list | layout dan checklist memakai komponen shared; homeroom-only action tetap tersedia | Wave 3 |
HomeroomReportDetail.vue |
/faculty/homeroom/report-card/:reportId |
homeroom orchestration detail | Gabungkan layout dengan admin detail | homeroom detail dan admin detail berbagi layout dasar; role action bar terpisah | Wave 3 |
6.3 Student and parent pages¶
| Page | Route | Current role | Backlog action | Acceptance criteria | Sequence |
|---|---|---|---|---|---|
StudentReportList.vue |
/student/report-card |
list published report | Tambah publish metadata ringkas dan status validasi | siswa bisa membedakan report final yang terbaru | Wave 4 |
StudentReportDetail.vue |
/student/report-card/:reportId |
detail published report | Tambah QR, signature, notes, achievement description, remedial summary | detail siswa memuat artefak rapor resmi yang relevan | Wave 4 |
raportList.vue |
/parent/report-cards |
list + PDF | Tambah parent detail viewer atau preview drawer yang memakai serializer domain yang sama dengan student | orang tua tidak hanya bergantung pada PDF untuk membaca detail rapor | Wave 4 |
6.4 Leadership page¶
| Page | Route | Current role | Backlog action | Acceptance criteria | Sequence |
|---|---|---|---|---|---|
CurriculumQualityGate.vue |
leadership monitoring route | observability | Tampilkan mismatch policy, ACL anomaly, stuck workflow, dan Dapodik failed queue | wakasek dapat memantau readiness rapor dari satu dashboard | Wave 5 |
7. Shared FE service backlog¶
| Service | Problem | Refactor / change | Acceptance criteria | Sequence |
|---|---|---|---|---|
reportCard.service.js |
terlalu banyak menanggung domain dan orchestration campur UI concern | Pisahkan read-model API, mutation API, dan workflow helpers | pemanggilan service lebih jelas; shared pages tidak perlu duplicate shaping logic | Wave 1 |
assessmentWorkflow.service.js |
wrapper tipis, sebagian overlap dengan reportCard.service |
Jadikan workflow audit/telemetry helper murni, bukan salinan API layer | tidak ada duplikasi method domain; observability tetap hidup | Wave 3 |
parentReportCard.service.js |
shaping payload parent terpisah dari serializer domain utama | Reuse serializer domain dan buat adapter tipis khusus PDF | parent viewer dan PDF membaca sumber data yang konsisten | Wave 4 |
reportCardSetup.service.js |
belum mengkonsolidasikan policy overview | Tambah method untuk policy summary dan mismatch status | halaman setup dapat menampilkan formula final dan mismatch LMS | Wave 2 |
gradebook.service.js |
publish flow dan aggregation terlalu besar | Pecah publish policy helper, component aggregation helper, dan source metadata helper | republish lebih mudah diuji; logic kebijakan tidak tercampur dengan UI transform | Wave 2 |
8. Recommended execution order¶
Wave 1 - Security and correctness foundation¶
Target:
- tutup celah ACL
- betulkan hasil hitung
- kunci scoping report per batch
Items:
RC-01RC-03RC-04AB-01AB-02LMS-02- frontend items berlabel
Wave 1
Release gate:
- batch save unauthorized request ditolak
- score
0masuk kalkulasi - satu report tidak bisa tercampur batch lain
Wave 2 - Policy SSOT and teacher-facing clarity¶
Target:
- satu formula resmi terlihat jelas
- teacher/admin melihat kontribusi final yang benar
Items:
RC-02LMS-01LMS-03LMS-04AB-03- frontend items berlabel
Wave 2
Release gate:
- effective formula tampil di setup dan edit modal
- mismatch LMS vs eRaport terlihat eksplisit
- republish nilai LMS menyertakan source metadata yang memadai
Wave 3 - Workflow and UI consolidation¶
Target:
- kurangi duplikasi admin vs homeroom
- rapikan orchestration layer FE
Items:
RC-05RC-07- frontend items berlabel
Wave 3
Release gate:
- admin/homeroom shared shell aktif
- publish blocker tampil sebelum workflow action
- reject reason wajib dan terbaca
Wave 4 - Student and parent output completeness¶
Target:
- rapor final tampil lengkap ke semua consumer
Items:
RC-06RC-08RC-09- frontend items berlabel
Wave 4
Release gate:
- student dan parent membaca artefak rapor resmi yang sama
- refresh report dari bridge selesai tanpa path TODO
- attendance summary lengkap
Wave 5 - Dapodik integrity and leadership monitoring¶
Target:
- sync status operasional jujur
- leadership monitoring jadi berguna untuk release readiness
Items:
DP-01DP-02DP-03CBT-01CBT-02- frontend items berlabel
Wave 5
Release gate:
- operator bisa membedakan queue, fail, dan success real
- leadership dashboard menampilkan blocker utama rapor
9. Suggested issue breakdown¶
9.1 Backend issue packs¶
| Issue pack | Modules | Suggested owner |
|---|---|---|
| Pack A - ACL and report scoping | scola_report_card |
Agent Odoo |
| Pack B - Assessment bridge overwrite contract | scola_assessment_bridge, scola_lms, scola_cbt |
Agent Odoo |
| Pack C - Publish completeness and serializer enrichment | scola_report_card |
Agent Odoo |
| Pack D - Dapodik truthful status | scola_dapodik_report_card_bridge |
Agent Odoo |
9.2 Frontend issue packs¶
| Issue pack | Pages / services | Suggested owner |
|---|---|---|
| Pack E - Teacher grading clarity | TeacherReportLineList, BatchScoreInput, ReportLineEditModal, gradebook.service |
Agent FE |
| Pack F - Admin/homeroom consolidation | AdminReportList, HomeroomReportList, AdminReportDetail, HomeroomReportDetail, workflow services |
Agent FE |
| Pack G - Student/parent report completeness | StudentReportDetail, StudentReportList, raportList, parent/report services |
Agent FE |
| Pack H - Policy overview and Dapodik UI | setup pages, DapodikRaporSync, leadership quality gate |
Agent FE |
9.3 QA issue packs¶
| Issue pack | Verification focus |
|---|---|
| Pack Q1 | unauthorized batch save, role ownership, draft-only mutation |
| Pack Q2 | final score with 0, missing component, exempt component |
| Pack Q3 | multi-batch student report generation and subject scoping |
| Pack Q4 | LMS republish after correction |
| Pack Q5 | student/parent display completeness and Dapodik truthful status |
10. Definition of done¶
Sebuah wave dianggap selesai jika:
- acceptance criteria tiap item terpenuhi
- tidak ada route alias baru yang menambah kebingungan
- policy final contribution terlihat konsisten di setup, teacher input, report detail, dan publish output
- workflow role boundary dibuktikan oleh test atau manual verification yang terdokumentasi
- FE dan BE tidak lagi memiliki kontradiksi antara bobot LMS dan bobot eRaport
11. Notes for implementation¶
- Jangan mulai dari refactor UI besar sebelum
RC-01,RC-03,RC-04,AB-02, danLMS-02selesai. Jika boundary data masih longgar, shared shell hanya akan memoles masalah lama. - Jangan expose bobot baru di FE sebelum contract
effective_weightfinal benar-benar stabil. - Untuk migrasi report key dan batch scoping, siapkan skrip migrasi dan rollback plan terpisah.
- Untuk perubahan student/parent serializer, pertahankan backward compatibility selama satu release cycle jika PDF generator atau consumer lain masih membaca payload lama.
12. References¶
- Domain SSOT:
docs/domains/academic/README.md - Existing implementation artifacts:
docs/implementation/Academic/ADMIN_AKADEMIK_PHASE4_RUNBOOK_DAN_ROLLBACK_2026-02-26.mddocs/implementation/Academic/GURU_PENILAIAN_PHASE5_RUNBOOK_DAN_ROLLBACK_2026-02-27.md- Relevant code owners:
custom_addons_scola/gcgscola/scola_report_cardcustom_addons_scola/gcgscola/scola_assessment_bridgecustom_addons_scola/gcgscola/scola_lmscustom_addons_scola/gcgscola/scola_cbtcustom_addons_scola/gcgscola/scola_dapodik_report_card_bridgescola-fe-v2/src/views/ReportCardManagementscola-fe-v2/src/services/reportCardscola-fe-v2/src/services/lms/gradebook.service.js