IUNHI0 - fix duplicate listing preregister app MCU offline #7

Merged
fajri merged 2 commits from staging into master 2026-06-30 14:22:26 +07:00
Owner

Latar Belakang Masalah

Endpoint listing preregister MCU offline bisa mengembalikan 2 row untuk 1 pasien karena LEFT JOIN langsung ke form_riwayat_pasien tanpa batasan 1 row per preregister. Jika ada >1 row aktif untuk PreregisterID yang sama, hasil listing menjadi dobel (terbukti pada Mcu_PreregisterPatientsID = 146464).

Perubahan

  • Ganti direct LEFT JOIN ke form_riwayat_pasien dengan subquery yang memilih hanya 1 row aktif terbaru (MAX FormRiwayatPasienID) per FormRiwayatPasienPreregisterID
  • Patch diterapkan konsisten di v5 dan v8

File yang Diubah

File Fungsi/Bagian Keterangan
application/controllers/mockup/mcuoffline/Preregisterappcponev5.php search_patient_listing() Ganti JOIN langsung dengan subquery MAX per preregister
application/controllers/mockup/mcuoffline/Preregisterappcponev8.php search_patient_listing() Ganti JOIN langsung dengan subquery MAX per preregister

Test yang Harus Dilakukan QA

  • Skenario normal: listing preregister MCU offline tampil 1 row per pasien
  • Skenario edge case: patient dengan >1 row aktif di form_riwayat_pasien (contoh: Mcu_PreregisterPatientsID = 146464) hanya muncul 1 kali
  • Skenario negatif: patient tanpa data form_riwayat_pasien tetap muncul di listing (LEFT JOIN tetap aman)
  • Regression: field code_form dan uuid_form tetap terisi dengan benar dari row terbaru
## Latar Belakang Masalah Endpoint listing preregister MCU offline bisa mengembalikan 2 row untuk 1 pasien karena LEFT JOIN langsung ke `form_riwayat_pasien` tanpa batasan 1 row per preregister. Jika ada >1 row aktif untuk PreregisterID yang sama, hasil listing menjadi dobel (terbukti pada Mcu_PreregisterPatientsID = 146464). ## Perubahan - Ganti direct LEFT JOIN ke `form_riwayat_pasien` dengan subquery yang memilih hanya 1 row aktif terbaru (MAX FormRiwayatPasienID) per FormRiwayatPasienPreregisterID - Patch diterapkan konsisten di v5 dan v8 ## File yang Diubah | File | Fungsi/Bagian | Keterangan | |---|---|---| | `application/controllers/mockup/mcuoffline/Preregisterappcponev5.php` | `search_patient_listing()` | Ganti JOIN langsung dengan subquery MAX per preregister | | `application/controllers/mockup/mcuoffline/Preregisterappcponev8.php` | `search_patient_listing()` | Ganti JOIN langsung dengan subquery MAX per preregister | ## Test yang Harus Dilakukan QA - [ ] Skenario normal: listing preregister MCU offline tampil 1 row per pasien - [ ] Skenario edge case: patient dengan >1 row aktif di `form_riwayat_pasien` (contoh: Mcu_PreregisterPatientsID = 146464) hanya muncul 1 kali - [ ] Skenario negatif: patient tanpa data `form_riwayat_pasien` tetap muncul di listing (LEFT JOIN tetap aman) - [ ] Regression: field `code_form` dan `uuid_form` tetap terisi dengan benar dari row terbaru
fajri added 2 commits 2026-06-30 14:21:33 +07:00
fajri merged commit b8b4c11f73 into master 2026-06-30 14:22:26 +07:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: fajri/BE_CPONE#7