Commit Graph

42 Commits

Author SHA1 Message Date
sas.fajri
33fe960269 FHM08062601IBL - fix cashier print proxy url handling 2026-06-08 13:15:25 +07:00
sas.fajri
23c5c7c67c FHM08062601IBL - add fo patient print name 2026-06-08 12:05:16 +07:00
sas.fajri
bd0790b768 FHM08062601IBL - fix birt proxy params 2026-06-08 11:35:32 +07:00
sas.fajri
c2c9def40d FHM08062601IBL - fix proxy report token 2026-06-08 11:33:23 +07:00
sas.fajri
87c621a5fc FHM08062601IBL - secure fo print cache lifecycle 2026-06-08 11:30:35 +07:00
sas.fajri
6e0a706b34 FHM08062601IBL - add cashier report url endpoint 2026-06-08 10:33:14 +07:00
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
90c156e51a FHM31052601IBL - strip PII (patient_name/address/phone/email) dari order_log sebelum INSERT
Data pasien tidak perlu masuk log — identitas sudah terenkripsi di m_patient
dan bisa di-trace via T_OrderHeaderID → M_PatientID.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 16:52:58 +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
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
82640c3d3b FHM31052601IBL - Patient add_new/edit: tulis masked value ke kolom plaintext lama
Kolom lama (M_PatientName, HP, Email, dll) kini menyimpan nilai masked.
Data asli tetap aman di _enc. Konsisten dengan bulk masking script.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 14:49:09 +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
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
f2f1aed4b2 FHM29052601IBL - integrate merge gateway 2026-05-29 14:21:47 +07:00
sas.fajri
566f3f9b09 Reuse preregister form row 2026-05-25 22:43:13 +07:00
sas.fajri
900af581eb Search nolab by lab number OR patient name in search_v2
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 22:37:27 +07:00
sas.fajri
2d6c2b9fa2 Add status/name/nolab/company filters to search_v2
Previously search_v2 ignored all filters from the request.
Now status=''/any, name, nolab, company are applied dynamically.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 22:36:26 +07:00
sas.fajri
46c3138f3c Deactivate t_send_email when email delivery unchecked (chex=N)
When save_delivery_additional_other receives chex=N for an EMAIL
delivery, also set t_send_email.T_SendEmailIsActive='N' for rows
with status D/E/C — previously only t_orderdelivery was deactivated.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 22:20:13 +07:00
sas.fajri
67d4431361 Log cancel and send actions to one_lab_log.t_send_email_log via db_log
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 22:15:13 +07:00
sas.fajri
bc8b0dd0df Add cancel_email endpoint: only cancels when status is S
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 22:13:02 +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
b38d65f19d Add reports_url from qr_printout in search_v2 resultemailv7
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 21:06:19 +07:00
sas.fajri
e8d28bbc44 Add url_report from QR_PrintOutReportURLElectronic in getstatuspergroup
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 20:55:42 +07:00
sas.fajri
7490d76a41 Fix qr_printout isactive check from 'Y' to 1 (tinyint column)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 20:43:38 +07:00
sas.fajri
00e7991ded Use t_orderheader_group_result + qr_printout for getstatuspergroup resultemailv7
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 20:40:43 +07:00
sas.fajri
3bbe789361 Add get_print_transaction_fo_kk_ina endpoint
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 12:10:53 +07:00
sas.fajri
58e50dc498 Fix order location duplicates 2026-05-24 10:22:09 +07:00
sas.fajri
ebfb56d351 Fix latest patient signature 2026-05-24 10:08:08 +07:00
sas.fajri
20e8395df7 Add cashier patient sorting 2026-05-22 13:08:54 +07:00
sas.fajri
d1eaef185d Sync order group result mapping 2026-05-20 15:54:40 +07:00
sas.fajri
0138338948 Add print transaction endpoint and EN receipt 2026-05-20 11:14:57 +07:00
sas.fajri
da7d744788 fix(ibl-registration): clean mysqli connection sebelum query inform_consent di load()
Stored procedure meninggalkan connection dirty, query berikutnya gagal
silent. Tambah clean_mysqli_connection() sebelum get_inform_consent_by_order().

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 15:23:32 +07:00
sas.fajri
7e34e11689 feat(ibl-registration): tambah inform_consent di response order/load
Pakai get_inform_consent_by_order() yang sudah ada, null jika template
tidak ditemukan (title kosong).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 15:17:50 +07:00
sas.fajri
04fc1a2b72 feat(ibl-registration): tambah order_total di get_tests_by_order, '-' jika M_MouIsBill = 'Y'
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 14:18:48 +07:00
sas.fajri
5783a4d2ac perf(ibl-registration): ganti LEFT JOIN ke JOIN pada t_orderheader dan m_mou di get_tests_by_order
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 14:15:20 +07:00
sas.fajri
35159de96c fix(ibl-registration): get_tests_by_order join m_mou, harga '-' jika M_MouIsBill = 'Y'
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 14:13:46 +07:00
sas.fajri
e6d0f98fd3 fix(ibl-registration): filter get_tests_by_order hanya T_TestIsPrice = 'Y'
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 14:05:37 +07:00
sas.fajri
6712b18eec feat(ibl-registration): order save resilient terhadap kegagalan generate_location
- generate_location dipindah ke luar trans_begin/commit agar order tidak rollback
- _do_generate_location_for_stations() diextract, iterasi semua station tanpa abort
- deteksi NO_MAPPING (loc_id null) sebelum INSERT
- location_warning ditambahkan ke response sukses (opsional untuk FE)
- endpoint retry_location untuk generate ulang lokasi yang belum terbentuk
- tiap kegagalan station dicatat ke error_log_order

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 10:11:55 +07:00
sas.fajri
b659369d9b Fix consent mapping with company group type 2026-05-18 15:10:03 +07:00
sas.fajri
5edb543a03 Add consent template mapping by company type 2026-05-18 14:41:30 +07:00
sas.fajri
aea39e343c Fix per-test group result 2026-04-23 15:41:30 +07:00
sas.fajri
294c510513 Batch 6d: application controllers mockup fo 2026-04-15 15:24:34 +07:00