- 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>
142 lines
8.3 KiB
SQL
142 lines
8.3 KiB
SQL
-- UU PDP: tambah kolom enkripsi PII pasien dan data medis hasil lab
|
|
-- Kolom lama TIDAK dihapus (backward compat selama masa transisi)
|
|
-- Enkripsi: AES-256-GCM, key dari .env
|
|
|
|
-- ============================================================
|
|
-- one_lab.m_patient: PII pasien (trigram bidx untuk search)
|
|
-- ============================================================
|
|
ALTER TABLE one_lab.m_patient
|
|
ADD COLUMN M_PatientName_enc TEXT NULL AFTER M_PatientName,
|
|
ADD COLUMN M_PatientName_bidx MEDIUMTEXT NULL AFTER M_PatientName_enc,
|
|
ADD COLUMN M_PatientHP_enc TEXT NULL AFTER M_PatientHP,
|
|
ADD COLUMN M_PatientHP_bidx MEDIUMTEXT NULL AFTER M_PatientHP_enc,
|
|
ADD COLUMN M_PatientDOB_enc TEXT NULL AFTER M_PatientDOB,
|
|
ADD COLUMN M_PatientDOB_bidx MEDIUMTEXT NULL AFTER M_PatientDOB_enc,
|
|
ADD COLUMN M_PatientEmail_enc TEXT NULL AFTER M_PatientEmail,
|
|
ADD COLUMN M_PatientPhone_enc TEXT NULL AFTER M_PatientPhone,
|
|
ADD COLUMN M_PatientPOB_enc TEXT NULL AFTER M_PatientPOB,
|
|
ADD COLUMN M_PatientIDNumber_enc TEXT NULL AFTER M_PatientIDNumber,
|
|
ADD COLUMN M_PatientNIK_enc TEXT NULL AFTER M_PatientNIK,
|
|
ADD COLUMN M_PatientNIP_enc TEXT NULL AFTER M_PatientNIP;
|
|
|
|
-- ============================================================
|
|
-- one_lab.m_patientaddress: alamat pasien
|
|
-- ============================================================
|
|
ALTER TABLE one_lab.m_patientaddress
|
|
ADD COLUMN M_PatientAddressDescription_enc TEXT NULL AFTER M_PatientAddressDescription,
|
|
ADD COLUMN M_PatientAddressDescription_bidx MEDIUMTEXT NULL AFTER M_PatientAddressDescription_enc,
|
|
ADD COLUMN M_PatientAddressEmail_enc TEXT NULL AFTER M_PatientAddressEmail,
|
|
ADD COLUMN M_PatientAddressPhone_enc TEXT NULL AFTER M_PatientAddressPhone;
|
|
|
|
-- ============================================================
|
|
-- one_lab.t_orderdetail: nilai hasil lab utama
|
|
-- ============================================================
|
|
ALTER TABLE one_lab.t_orderdetail
|
|
ADD COLUMN T_OrderDetailResult_enc TEXT NULL AFTER T_OrderDetailResult,
|
|
ADD COLUMN T_OrderDetailNote_enc TEXT NULL AFTER T_OrderDetailNote;
|
|
|
|
-- ============================================================
|
|
-- one_lab.t_orderheader: diagnosa dokter
|
|
-- ============================================================
|
|
ALTER TABLE one_lab.t_orderheader
|
|
ADD COLUMN T_OrderHeaderDiagnose_enc TEXT NULL AFTER T_OrderHeaderDiagnose;
|
|
|
|
-- ============================================================
|
|
-- one_lab.so_resultentrydetail: hasil lab standar
|
|
-- ============================================================
|
|
ALTER TABLE one_lab.so_resultentrydetail
|
|
ADD COLUMN So_ResultEntryDetailResult_enc TEXT NULL AFTER So_ResultEntryDetailResult;
|
|
|
|
-- ============================================================
|
|
-- one_lab.so_resultentrydetail_other: hasil lab nonstandar
|
|
-- ============================================================
|
|
ALTER TABLE one_lab.so_resultentrydetail_other
|
|
ADD COLUMN So_ResultEntryDetailOtherResult_enc TEXT NULL AFTER So_ResultEntryDetailOtherResult,
|
|
ADD COLUMN So_ResultEntryDetailOtherResultBefore_enc TEXT NULL AFTER So_ResultEntryDetailOtherResultBefore;
|
|
|
|
-- ============================================================
|
|
-- one_lab.so_resultentry_fisik_umum: JSON pemeriksaan fisik
|
|
-- ============================================================
|
|
ALTER TABLE one_lab.so_resultentry_fisik_umum
|
|
ADD COLUMN So_ResultEntryFisikUmumDetails_enc TEXT NULL AFTER So_ResultEntryFisikUmumDetails;
|
|
|
|
-- ============================================================
|
|
-- one_lab.so_resultentry_fisik_summary: ringkasan fisik
|
|
-- ============================================================
|
|
ALTER TABLE one_lab.so_resultentry_fisik_summary
|
|
ADD COLUMN So_ResultEntryFisikSummaryValue_enc TEXT NULL AFTER So_ResultEntryFisikSummaryValue,
|
|
ADD COLUMN So_ResultEntryFisikSummaryValue2_enc TEXT NULL AFTER So_ResultEntryFisikSummaryValue2;
|
|
|
|
-- ============================================================
|
|
-- one_lab.so_resultentry_other: catatan hasil
|
|
-- ============================================================
|
|
ALTER TABLE one_lab.so_resultentry_other
|
|
ADD COLUMN So_ResultEntryOtherNote_enc TEXT NULL AFTER So_ResultEntryOtherNote;
|
|
|
|
-- ============================================================
|
|
-- one_lab.so_resultentry_fisioterapi
|
|
-- ============================================================
|
|
ALTER TABLE one_lab.so_resultentry_fisioterapi
|
|
ADD COLUMN So_ResultEntdyFisioterapiDetails_enc TEXT NULL AFTER So_ResultEntdyFisioterapiDetails;
|
|
|
|
-- ============================================================
|
|
-- one_lab.so_resultentry_smwt: hasil 6MWT
|
|
-- ============================================================
|
|
ALTER TABLE one_lab.so_resultentry_smwt
|
|
ADD COLUMN So_ResultentrySmwtWeight_enc TEXT NULL AFTER So_ResultentrySmwtWeight,
|
|
ADD COLUMN So_ResultentrySmwtHeight_enc TEXT NULL AFTER So_ResultentrySmwtHeight,
|
|
ADD COLUMN So_ResultentrySmwtBMI_enc TEXT NULL AFTER So_ResultentrySmwtBMI,
|
|
ADD COLUMN So_ResultentrySmwtPreTensi_enc TEXT NULL AFTER So_ResultentrySmwtPreTensi,
|
|
ADD COLUMN So_ResultentrySmwtPreSPO2_enc TEXT NULL AFTER So_ResultentrySmwtPreSPO2,
|
|
ADD COLUMN So_ResultentrySmwtPreNadi_enc TEXT NULL AFTER So_ResultentrySmwtPreNadi,
|
|
ADD COLUMN So_ResultentrySmwtPostTensi_enc TEXT NULL AFTER So_ResultentrySmwtPostTensi,
|
|
ADD COLUMN So_ResultentrySmwtPostSPO2_enc TEXT NULL AFTER So_ResultentrySmwtPostSPO2,
|
|
ADD COLUMN So_ResultentrySmwtPostNadi_enc TEXT NULL AFTER So_ResultentrySmwtPostNadi,
|
|
ADD COLUMN So_ResultentrySmwtVOMax_enc TEXT NULL AFTER So_ResultentrySmwtVOMax,
|
|
ADD COLUMN So_ResultentrySmwtKategoriKebugaran_enc TEXT NULL AFTER So_ResultentrySmwtKategoriKebugaran;
|
|
|
|
-- ============================================================
|
|
-- one_lab.so_resultentry_srq29_conclusion: hasil SRQ-29
|
|
-- ============================================================
|
|
ALTER TABLE one_lab.so_resultentry_srq29_conclusion
|
|
ADD COLUMN So_ResultentrySrq29ConclusionResult_enc TEXT NULL AFTER So_ResultentrySrq29ConclusionResult;
|
|
|
|
-- ============================================================
|
|
-- one_lab.so_resultentrysdsinterpretation: interpretasi SDS
|
|
-- ============================================================
|
|
ALTER TABLE one_lab.so_resultentrysdsinterpretation
|
|
ADD COLUMN So_ResultEntrySDSInterpretationDisplay_enc TEXT NULL AFTER So_ResultEntrySDSInterpretationDisplay;
|
|
|
|
-- ============================================================
|
|
-- one_lab.member_eligible: data BPJS / asuransi
|
|
-- ============================================================
|
|
ALTER TABLE one_lab.member_eligible
|
|
ADD COLUMN Member_EligibleDescription_enc TEXT NULL AFTER Member_EligibleDescription;
|
|
|
|
-- ============================================================
|
|
-- one_lab_log.log_patient: audit log perubahan data pasien
|
|
-- Fix charset ke utf8mb4 (default latin1 tidak support JSON UTF-8 dari trigger)
|
|
-- ============================================================
|
|
ALTER TABLE one_lab_log.log_patient
|
|
ADD COLUMN Log_PatientJsonBefore_enc MEDIUMTEXT NULL AFTER Log_PatientJsonBefore,
|
|
ADD COLUMN Log_PatientJsonAfter_enc MEDIUMTEXT NULL AFTER Log_PatientJsonAfter;
|
|
|
|
ALTER TABLE one_lab_log.log_patient
|
|
MODIFY Log_PatientJsonBefore MEDIUMTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
|
|
MODIFY Log_PatientJsonAfter MEDIUMTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
|
|
MODIFY Log_PatientJsonBefore_enc MEDIUMTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
|
|
MODIFY Log_PatientJsonAfter_enc MEDIUMTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
|
|
|
|
-- ============================================================
|
|
-- one_lab_log.log_fo: audit log order FO
|
|
-- ============================================================
|
|
ALTER TABLE one_lab_log.log_fo
|
|
ADD COLUMN Log_FoJson_enc MEDIUMTEXT NULL AFTER Log_FoJson;
|
|
|
|
-- ============================================================
|
|
-- one_lab_log.log_resultentry: audit log hasil lab
|
|
-- ============================================================
|
|
ALTER TABLE one_lab_log.log_resultentry
|
|
ADD COLUMN Log_ResultEntryJSONBefore_enc MEDIUMTEXT NULL AFTER Log_ResultEntryJSONBefore,
|
|
ADD COLUMN Log_ResultEntryJSONAfter_enc MEDIUMTEXT NULL AFTER Log_ResultEntryJSONAfter;
|