Cpone-BUG-00024 - fix sinkronisasi status aktif & total peserta project #1

Merged
fajri merged 8 commits from cpone-bug-00024 into main 2026-08-28 16:22:00 +07:00
Owner

Masalah

Project UD Roda (mcu_id 1589) menampilkan "17 peserta" di halaman Projects, padahal
menu Arrival hanya menampilkan 5 peserta aktif. Investigasi menunjukkan 12 dari 17
baris di cpone.mcu_preregister_patients adalah duplikat registrasi lama yang sudah
IsActive='N', tapi sp_generate_dashboard_data tidak pernah menonaktifkan baris yang
sudah ter-sync sebelumnya di mcu_patient, sehingga status aktif menyangkut permanen.

Perubahan (db/migrations/018_fix_patient_active_sync.sql)

  1. Restore sinkron mcu_project (Mcu_ProjectTotalParticipant, dst) yang sempat hilang
    sejak migration 014.
  2. Hapus filter IsActive='Y' pada sync mcu_patient dan tambahkan
    Mcu_PatientIsActive ke ON DUPLICATE KEY UPDATE, supaya status aktif selalu
    mengikuti kondisi sumber terkini.
  3. Perbaiki sumber Mcu_PatientPemeriksaan: p.Mcu_PreregisterPatientsPemeriksaan
    (kolom tidak ada di skema cpone) -> p.Mcu_PreregisterPatientsOrders.
  4. Perbaiki nama kolom PK mcu_checkinout: Mcu_CheckinoutCheckinoutID -> Mcu_CheckinoutID.
  5. Mcu_ProjectTotalParticipant dihitung dari COUNT baris aktif di
    cpone.mcu_preregister_patients per project, bukan lagi ikut field target manual
    Mgm_McuTotalParticipant dari source (yang bisa 0/belum diisi).

Verifikasi

Sudah diterapkan & dites langsung di devcpone (server dev, bukan production):

  • CALL sp_generate_dashboard_data(1589) jalan tanpa error.
  • mcu_project.Mcu_ProjectTotalParticipant: 17 -> 5.
  • mcu_patient untuk mcu_id 1589: 5 aktif / 12 nonaktif (sesuai kondisi source).
  • mcu_patient_schedule & mcu_checkinout ikut tersinkron benar untuk 5 peserta tsb.

🤖 Generated with Claude Code

## Masalah Project UD Roda (mcu_id 1589) menampilkan "17 peserta" di halaman Projects, padahal menu Arrival hanya menampilkan 5 peserta aktif. Investigasi menunjukkan 12 dari 17 baris di cpone.mcu_preregister_patients adalah duplikat registrasi lama yang sudah IsActive='N', tapi sp_generate_dashboard_data tidak pernah menonaktifkan baris yang sudah ter-sync sebelumnya di mcu_patient, sehingga status aktif menyangkut permanen. ## Perubahan (db/migrations/018_fix_patient_active_sync.sql) 1. Restore sinkron mcu_project (Mcu_ProjectTotalParticipant, dst) yang sempat hilang sejak migration 014. 2. Hapus filter IsActive='Y' pada sync mcu_patient dan tambahkan Mcu_PatientIsActive ke ON DUPLICATE KEY UPDATE, supaya status aktif selalu mengikuti kondisi sumber terkini. 3. Perbaiki sumber Mcu_PatientPemeriksaan: p.Mcu_PreregisterPatientsPemeriksaan (kolom tidak ada di skema cpone) -> p.Mcu_PreregisterPatientsOrders. 4. Perbaiki nama kolom PK mcu_checkinout: Mcu_CheckinoutCheckinoutID -> Mcu_CheckinoutID. 5. Mcu_ProjectTotalParticipant dihitung dari COUNT baris aktif di cpone.mcu_preregister_patients per project, bukan lagi ikut field target manual Mgm_McuTotalParticipant dari source (yang bisa 0/belum diisi). ## Verifikasi Sudah diterapkan & dites langsung di devcpone (server dev, bukan production): - CALL sp_generate_dashboard_data(1589) jalan tanpa error. - mcu_project.Mcu_ProjectTotalParticipant: 17 -> 5. - mcu_patient untuk mcu_id 1589: 5 aktif / 12 nonaktif (sesuai kondisi source). - mcu_patient_schedule & mcu_checkinout ikut tersinkron benar untuk 5 peserta tsb. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
fajri added 6 commits 2026-08-28 14:16:30 +07:00
Restore blok sinkron mcu_project yang hilang sejak migration 014, dan
hapus filter IsActive='Y' pada sync mcu_patient supaya baris yang jadi
inactive di sumber (mcu_preregister_patients) ikut ter-update statusnya,
bukan nyangkut permanen sebagai 'Y'.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Ditemukan saat verifikasi di devcpone: p.Mcu_PreregisterPatientsPemeriksaan
tidak ada di skema cpone (diganti p.Mcu_PreregisterPatientsOrders), dan
PK mcu_checkinout salah nama (Mcu_CheckinoutCheckinoutID -> Mcu_CheckinoutID).
Setelah ini SP jalan penuh tanpa error dan hasil sync sudah tervalidasi
di server dev (mcu_patient 5 aktif/12 nonaktif sesuai kondisi source).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Sebelumnya ikut m.Mgm_McuTotalParticipant (field target manual di source
yang bisa 0/belum diisi admin MGM), sekarang dihitung dari COUNT baris
aktif di cpone.mcu_preregister_patients per project supaya selalu sesuai
jumlah peserta yang benar-benar terdaftar. Sudah diverifikasi di devcpone:
mcu_id 1589 sekarang menampilkan 5 (sebelumnya 0/17).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
fajri added 2 commits 2026-08-28 16:21:15 +07:00
sp_generate_dashboard_data menebak Mcu_CheckinoutOutTime dari MAX() timestamp
event lab (sample receive/sampling done), bukan dari checkout fisik pasien,
sehingga pasien yang belum checkout bisa tampil "Checked Out" walau stationnya
belum selesai. Ganti sumbernya ke cpone.preregister_checkin_checkout (log
checkin/checkout asli) dan hentikan pemaksaan Mcu_CheckinoutID = order_id yang
bentrok untuk project multi-hari.

KPI "Checked Out" di GetKPI juga diselaraskan dengan detail pasien: sekarang
hitung dari GetAllPatients dan mensyaratkan semua station wajib sudah selesai,
bukan cuma checkout fisik saja, supaya angka KPI dan modal detail selalu sinkron.
sp_generate_dashboard_data step 2 (mcu_patient) tidak menyertakan
Mcu_PatientNIP, Gender, DOB, Department, Divisi, dan Posisi di ON DUPLICATE
KEY UPDATE, sehingga sekali preregister ID ke-sync, field2 itu beku
selamanya walau dikoreksi di source (cpone.mcu_preregister_patients).
Terverifikasi: NIP Rina Hidayat di dashboard tetap salah walau sumbernya
sudah dibetulkan, sampai kolom ini ditambahkan ke UPDATE clause.
fajri merged commit dd542c5868 into main 2026-08-28 16:22:00 +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/cpone_dashboard#1