PATCH IMPOR GAJI BULANAN - VERSI 4

Berkas:
- importabsen4.php       Halaman upload dan pratinjau responsif.
- importabsenproses4.php Endpoint penyimpanan database.

Pemasangan:
1. Cadangkan file importabsen4.php dan importabsenproses4.php yang sekarang di hosting.
2. Salin kedua file patch ke folder yang sama dengan file lama, gunakan nama persis di atas.
3. Pastikan folder tmp dapat ditulisi PHP dan folder vendor/autoload.php tersedia.
4. Pastikan koneksi.php menyediakan objek mysqli bernama $conn.
5. Uji dahulu dengan salinan database atau periode uji. Jangan mengimpor periode yang sama sebelum memastikan hasilnya.

Perubahan utama:
- Membaca Excel dalam mode data-only dan hanya kolom A sampai K.
- Memvalidasi header, tanggal, NIK, finger, nomor urut, dan nominal sebelum impor.
- Impor dibatalkan seluruhnya jika ada baris tidak valid atau NIK ganda di file, sehingga tidak menyimpan data sebagian.
- Memeriksa NIK periode melalui satu query, bukan query berulang per baris.
- Memakai prepared statement dan transaksi; error teknis disimpan di error log, pesan layar tidak membocorkan konfigurasi database.
- UI pratinjau dibuat ringan dan responsif untuk layar ponsel tanpa DataTables.
- Nilai nominal dibulatkan dua desimal sesuai kolom DECIMAL(10,2).

Performa tambahan opsional:
Indeks komposit dapat mempercepat pencarian NIK per periode. Periksa dahulu apakah indeks serupa sudah ada, lalu jalankan sekali:
ALTER TABLE gaji_karyawan4 ADD INDEX idx_gaji4_periode_nik (periode, nik_karyawan);

Catatan kompatibilitas:
ZIP proyek yang tersedia tidak berisi file importabsen4.php/importabsenproses4.php maupun folder vendor dan aset frontend. Patch ini ditujukan ke halaman versi 4 yang kodenya sudah diberikan. Kode tetap memakai mysqli karena mengganti seluruh aplikasi ke PDO tidak mempercepat query dengan sendirinya dan dapat memutus halaman lama yang memakai mysqli.
