# Proposal

## Why

Search pada top header belum berfungsi. Pengguna perlu menemukan equipment/item Pilot Plant, sparepart, atau WO tanpa berpindah halaman dan mengulang pencarian secara manual.

## What Changes

- Tambahkan pencarian global terautentikasi melalui `GET /api/v1/search?q=...`, dengan tiga kelompok hasil: Pilot Plant, Inventory, dan Work Orders; maksimal tiga hasil per kelompok.
- Cari nama/kode category, equipment dan item; nama/SKU (`Part.productId`)/part number sparepart; serta nomor/keterangan WO. Prioritaskan kecocokan identitas persis, awalan, kemudian sebagian teks.
- Aktifkan input header dengan React Query, jeda ketik 300 ms, minimum dua karakter, navigasi keyboard, serta loading/empty/error/retry states.
- Tambahkan navigasi langsung berbasis URL pada Inventory dan Pilot Plant sehingga memilih hasil membuka objek yang benar, termasuk setelah refresh atau back/forward. Maintenance memakai URL `?wo=` existing.
- Tambahkan endpoint baca `GET /api/v1/pilot-plant/categories/:id` yang belum tersedia, untuk memulihkan konteks category berdasarkan ID tanpa bergantung pada halaman daftar.
- Sembunyikan master yang diarsipkan beserta anak dari induk yang diarsipkan, WO soft delete, WO belum dirilis, dan jenis calibration legacy. WO selesai/dibatalkan yang tidak dihapus serta sparepart stok nol tetap dapat dicari.
- Hasil dibatasi dan diberi penanda jika masih ada hasil lainnya; pengguna diarahkan memperjelas kata pencarian. Tidak ada halaman hasil pencarian baru pada MVP.

## Capabilities

### New Capabilities

- `global-search`: pencarian lintas domain dari header dengan hasil terbatas, aturan visibilitas, ranking dan navigasi langsung ke data yang dipilih.

### Modified Capabilities

Tidak ada spec utama terdaftar (`openspec list --specs` kosong). Kontrak existing dan delta arsitektur menjadi acuan; proposal ini tidak mengganti kontrak mutasi fitur.

## Impact

- Backend: routes/controller/service/validator search, OpenAPI pendamping, registrasi router existing, dan DTO publik di `packages/shared/search.ts`.
- Frontend: `services/search.service.ts`, query hook, komponen pencarian header, integrasi `top-header.tsx`, serta dukungan URL di halaman Inventory/Pilot Plant. Perubahan halaman existing diperlukan agar hasil search membuka target, tanpa redesign atau perubahan aturan bisnis.
- Semua peran yang sudah boleh membaca ketiga domain tetap memakai hak akses existing. Search tidak membuka akses publik kiosk dan tidak mengubah stok, status WO, atau laporan.
- Gunakan schema dan indeks existing terlebih dahulu. Tidak ada migrasi, tabel pencarian, dependency baru, perhitungan biaya, pencarian user/notifikasi/transaksi, fuzzy search, atau penyimpanan riwayat pencarian. Jika indeks tambahan diperlukan berdasarkan hasil pengukuran, minta persetujuan sebelum mengubah database.
- Dokumen ini adalah usulan untuk review; belum mengotorisasi implementasi.
