﻿# Tasks

## 1. Kontrak dan dasar Reports

- [x] 1.1 Tambahkan DTO Reports dan ekspornya di packages/shared; verifikasi build shared dan typecheck tanpa tipe Prisma publik atau field keuangan.
- [x] 1.2 Tambahkan validator periode, filter per tab, cohort, pagination, dan batas rentang; verifikasi tes tanggal tidak valid, urutan terbalik, rentang 366 hari, timezone, dan filter tidak kompatibel.
- [x] 1.3 Implementasikan helper periode/status cutoff/durasi beserta unit test; verifikasi batas tengah malam, terminal state lintas periode, history fallback, durasi tidak valid, dan no-data.

## 2. API analisis maintenance

- [x] 2.1 Implementasikan agregasi WO dibuat, selesai, backlog, durasi, tren PM/CM, dan detail berdasarkan cohort; verifikasi fixture WO lintas periode dan agregat tidak terpotong pagination.
- [x] 2.2 Implementasikan corrective ranking per target Pilot Plant dan per SKU karantina; verifikasi dua kasus satu SKU, nama target sama dengan ID berbeda, cancelled, serta completed subset.
- [x] 2.3 Implementasikan kepatuhan PM dan detail keterlambatan; verifikasi on-time/late/unfinished/unknown, denominator nol, exact dueAt, null dueAt, dan projected occurrences tidak dihitung.
- [x] 2.4 Tambahkan controller/router/auth dan OpenAPI tiga endpoint maintenance; verifikasi contract test, akses anonim ditolak, filter konsisten, dan DamageReport existing tidak berubah.

## 3. API inventory dan ekspor

- [x] 3.1 Implementasikan rekap posted movement per SKU, transaction counts, distinct issued SKU, top10 frekuensi, dan koreksi; verifikasi pending/rejected, mixed units, archived part, return, quarantine/release, scrap, dan reversal lintas periode.
- [x] 3.2 Tambahkan endpoint inventory dan dokumentasinya; verifikasi filter kelompok/SKU, pagination stabil, dan tidak ada kolom biaya atau KPI stockout.
- [x] 3.3 Implementasikan export-data semua tab dalam satu snapshot dengan filter terpisah per tab dan batas gabungan 10000 detail rows; verifikasi seluruh hasil di atas satu halaman, empty export, boundary limit, dan penolakan tanpa truncation.
- [x] 3.4 Lengkapi OpenAPI export-data dan integration test read-only pada database disposable; verifikasi auth, metadata, konsistensi snapshot, serta jumlah data bisnis tidak berubah setelah request Reports.

## 4. Service dan halaman frontend

- [x] 4.1 Tambahkan services/reports.service.ts dan hooks/reports.queries.ts menggunakan shared DTO/client; verifikasi service tests mencakup serialization filter, signal, error, dan query key seluruh parameter.
- [x] 4.2 Hubungkan halaman dengan date range/preset, filter relevan, dan pagination; verifikasi pergantian filter mereset halaman, request usang tidak menimpa hasil, serta loading/error/stale/empty berbeda.
- [x] 4.3 Ubah tab Analisis Work Order dan Analisis Corrective sesuai proposal; verifikasi KPI/chart/tabel dari API, label cohort/durasi kalender jelas, tanpa teknisi/MTBF/downtime/kategori dummy.
- [x] 4.4 Ubah tab Pergerakan Inventory dan Kepatuhan PM; verifikasi SKU/satuan/koreksi, numerator/denominator, empty compliance, dan penghapusan biaya/stockout/Audit label.
- [x] 4.5 Tambahkan navigasi WO/compliance ke detail Maintenance serta SKU ke Stock Movement dengan memanfaatkan alur existing; verifikasi tujuan tepat dan parameter minimal tidak mengubah perilaku halaman tanpa parameter.
- [x] 4.6 Bersihkan penggunaan getReport/data simulasi setelah memeriksa seluruh pemakai; tambahkan metadata dan penjelasan keterbatasan historis; verifikasi pencarian source tidak menemukan dummy fallback aktif pada Reports.

## 5. Ekspor frontend

- [x] 5.1 Hubungkan Excel dengan export-data dan frozen filters; verifikasi empat sheet laporan/Data Grafik, seluruh baris, header eksplisit saat kosong, unit, metadata, dan teks user tidak menjadi formula.
- [x] 5.2 Hubungkan PDF dengan KPI/grafik/tabel seluruh tab; verifikasi kegagalan capture, async loading, filter tidak tercampur, dan tidak ada label simulasi. Alur browser print awal digantikan pada bagian 8.
- [x] 5.3 Tambahkan pengujian ekspor lintas tab dan penanganan kegagalan/limit; verifikasi 65 baris tidak menjadi 20, empty datasets tidak crash, tombol pending mencegah duplikasi, dan resource browser dibersihkan.

## 6. Verifikasi integrasi

- [x] 6.1 Jalankan build shared, typecheck API/app, tes Reports terkait, build API, dan test:docs; catat perintah/hasil nyata serta tes database yang tidak dapat dijalankan, tanpa build:vercel atau reseed.
- [x] 6.2 Verifikasi UI desktop/mobile: empat tab, filter, pagination, drill-through, kondisi kosong/gagal, Excel dan print; catat hasil browser yang benar-benar dilakukan dan keterbatasannya.
- [x] 6.3 Jalankan regresi relevan Dashboard, DamageReport, dan Inventory; tinjau diff agar perubahan terbatas scope, tanpa schema/migration/biaya, dan tandai checklist hanya setelah bukti verifikasi tersedia.


## 7. Grafik pada hasil ekspor (2026-10-20)

- [x] 7.1 Render grafik dari snapshot seluruh tab sebagai SVG untuk PDF dan PNG 2x untuk Excel; pertahankan sheet Data Grafik.
- [x] 7.2 Tangani dataset kosong, nilai nol, label aman, serta grafik panjang tanpa memotong daftar equipment.
- [x] 7.3 Verifikasi embedding Excel, PDF melalui Chrome, frozen filters, dan tabel seluruh baris; perbarui keterangan halaman dan spesifikasi.


## 8. Capture React/Recharts untuk ekspor (2026-10-20)

- [x] 8.1 Tambahkan react-to-pdf dan html2canvas, gunakan ExcelJS existing, dan sinkronkan lockfile.
- [x] 8.2 Ganti renderer SVG manual dengan capture Recharts dalam dokumen sementara yang kompatibel dengan html2canvas; pertahankan seluruh dataset dan skala grafik antarbagian.
- [x] 8.3 Ganti popup/print dengan unduhan PDF langsung, tangkap KPI/grafik/tabel per halaman terukur dan pertahankan snapshot seluruh tab.
- [x] 8.4 Pertahankan raw table cells/Data Grafik di Excel dan sisipkan gambar Base64 hasil html2canvas.
- [x] 8.5 Verifikasi unduhan PDF/Excel, cleanup ketika capture gagal, typecheck, tes frontend, serta browser dengan database disposable.
