27 Commits

Author SHA1 Message Date
sas.fajri
065e3ebb34 FHM31052601IBL - pdp masking & enkripsi patient di controller dan SP mcu
- mask_name nama satu kata: tampil 2 char + bintang sisanya
- masking + enkripsi insert/update m_patient di Registrationv3, ibl_registration/Patient, Patientv4, setupmcuoffline-ibl/Preregister, mcuoffline/Preregisterapp
- masking insert ke mcu_preregister_patients (PatientName, KTP, NIK, Email, Hp)
- search patient pakai bidx, decrypt setelah query di mcuoffline/Preregisterapp
- matching existing patient ganti LIKE ke bidx search
- SP sp_upsert_mcu_patient_by_preregister_id & sp_upsert_mcu_patient_by_mgm_mcuid JOIN m_patient ambil _enc, simpan ke one_lab_dashboard.mcu_patient
- ALTER mcu_patient.Mcu_PatientName dan Mcu_PatientDOB ke TEXT

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 20:10:15 +07:00
sas.fajri
d4ecd7f06d FHM31052601IBL - populate decrypt cache sebelum semua BIRT/PDF fetch
- Ibl_patient_decrypt: tambah fetch_birt_pdf() + pre_cache_and_get_url()
- Reporturl.php: auto pre-cache sebelum return URL atau fetch PDF
- Rv_patient.php: pre_cache sebelum return URL ke frontend
- tgram/Hasil.php: fetch_birt_pdf() via dl_report()
- Qr_report_uploader.php: populate/delete cache wrapping download_file()
- Ibl_merge_report_gateway.php: populate/delete cache wrapping Go merge service call
- send_email.php: populate_birt_cache() + delete_birt_cache() untuk email attachment

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 18:04:36 +07:00
sas.fajri
09c5f70284 FHM31052601IBL - fix mask_patient_plaintext: cursor-based pagination, pisahkan masking nama
Nama ditangani remask_patient_name.php (decrypt dari _enc).
Script ini handle HP/email/alamat/NIK/POB dengan cursor-based
agar tidak infinite loop pada nama pendek satu kata.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 16:53:17 +07:00
sas.fajri
f667050200 FHM31052601IBL - update format masking nama: kata pertama penuh + inisial kata berikutnya
"FAJRI HARDHITA" → "FAJRI H*******" lebih readable untuk operasional.
Script remask_patient_name.php untuk re-apply ke data yang sudah dimasking.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 15:23:19 +07:00
sas.fajri
ab7ed1c667 FHM31052601IBL - script migrasi NIK bidx dan address enc terpisah
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 15:19:55 +07:00
sas.fajri
a2d69d1618 FHM31052601IBL - search patient by nama/HP/DOB/NIK, hapus address bidx, tambah NIK bidx
- Search sekarang: nama, HP, DOB, NIK (alamat dihapus - boros disk)
- Tambah M_PatientNIK_bidx untuk search by NIK
- Migration script: NIK bidx + hapus address bidx dari m_patientaddress

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 15:15:33 +07:00
sas.fajri
e990609523 FHM31052601IBL - script masking kolom plaintext PII m_patient & m_patientaddress
Semua 300+ controller otomatis tampilkan data termasking tanpa perlu
diupdate satu-satu. Data asli tetap aman di kolom _enc.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 14:47:29 +07:00
sas.fajri
6c0394aea3 FHM31052601IBL - migration script enkripsi t_orderdelivery destination
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 14:32:54 +07:00
sas.fajri
17a788baac FHM31052601IBL - update FO registration controllers: decrypt PII sebelum return response
- Payment, History, Delivery: load ibl_encryptor, decrypt Name/Email/HP
- Order, Order copy: decrypt patient_name di get_header & get_order_header
- Order: pre-fetch decrypt email/HP sebelum UNION delivery query
- Order: enkripsi T_OrderDeliveryDestination saat INSERT, decrypt saat SELECT
- SQL: tambah kolom T_OrderDeliveryDestination_enc
- migrate_encrypt_results: tambah migrasi t_orderdelivery

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 14:31:54 +07:00
sas.fajri
2d7151b154 FHM31052601IBL - fix syntax migrate_encrypt_results.php compat PHP 7.2
Ganti arrow function fn() ke closure biasa karena server pakai PHP 7.2

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 14:12:58 +07:00
sas.fajri
c410d7bbd9 FHM31052601IBL - implementasi enkripsi PII pasien dan data medis (UU PDP)
- Tambah .env loader di index.php untuk IBL_ENCRYPT_KEY dan IBL_ENCRYPT_SEARCH_KEY
- Library Ibl_encryptor: AES-256-GCM encrypt/decrypt + trigram blind index untuk partial search
- SQL migration: tambah kolom _enc dan _bidx di 16 tabel (m_patient, m_patientaddress, hasil lab, log)
- Script backup_pdp_tables.sh: backup tabel terdampak sebelum migrasi
- Script migrate_encrypt_patient.php: enkripsi batch 178K data PII pasien
- Script migrate_encrypt_results.php: enkripsi data medis hasil lab dan log
- Patient.php: search via trigram blind index, add_new/edit enkripsi sebelum save

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 14:07:42 +07:00
sas.fajri
fd9511171b FHM29052601IBL - implement ibl_merge_report_service Go service
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 15:39:51 +07:00
sas.fajri
6dec35217f Align status flow: D=Draft S=Sending P=Process R=Received E=Error C=Cancel
Script picks S, locks to P, sets R on success.
On failure: back to S for retry; after max retry (3) sets E and logs to one_lab_log.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 22:07:51 +07:00
sas.fajri
409c156310 Set status P (processing) before send, revert to S on failure
Prevents UI re-trigger while email is in flight. Status flow:
S (scheduled) → P (processing) → D (delivered) / S (failed, retryable)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 22:04:06 +07:00
sas.fajri
d83f0f303b Insert send log to one_lab_log.t_send_email_log with correct schema
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 21:59:42 +07:00
sas.fajri
1c588f1d7d Build T_SendEmailReports from qr_printout with id/url/result format
Done.php send_email_v2: query qr_printout to build structured reports
array [{"id","url","result"}] using QR_PrintOutGroup_ResultName instead
of relying on client-supplied reports param.

send_email.php: parse both old (URL string) and new (object) formats;
use result field as PDF attachment filename.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 21:52:31 +07:00
sas.fajri
69772125b5 Insert delivery record to t_send_email_log on successful send
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 21:48:06 +07:00
sas.fajri
81b699db01 Add PDF validation in email script; add Nat_SubSubGroupSequence column
- Skip attachment if downloaded content is not a valid PDF (HTML error response)
- Add Nat_SubSubGroupSequence to nat_subsubgroup table (missing column
  referenced by sp_rpt_hasil_lab in SELECT and ORDER BY)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 21:37:50 +07:00
sas.fajri
1be2531f82 Fix PHP 7.4 compatibility: remove union return types
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 21:29:09 +07:00
sas.fajri
96a245322d Add PHP email queue processor script
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 21:28:01 +07:00
sas.fajri
f0c0bfc4f3 Fix dashboard search and IBL upload 2026-05-24 08:14:16 +07:00
sas.fajri
a88a5c9892 Add repo tooling updates 2026-04-24 15:41:34 +07:00
sas.fajri
394cc95b71 Prevent devone delete sync 2026-04-23 13:53:46 +07:00
sas.fajri
cca7c2287c Make sync hook portable on macOS 2026-04-15 15:42:03 +07:00
sas.fajri
03c8360dfc Fix sync hook for new files 2026-04-15 15:38:33 +07:00
sas.fajri
e090b55a55 Add main branch sync automation 2026-04-15 15:36:54 +07:00
sas.fajri
e224e7f31a Batch 1: base project files 2026-04-15 15:12:37 +07:00