diff --git a/sql/manual_changes/2026-06-10-create-screening-template-and-form.sql b/sql/manual_changes/2026-06-10-create-screening-template-and-form.sql new file mode 100644 index 00000000..d2548f2e --- /dev/null +++ b/sql/manual_changes/2026-06-10-create-screening-template-and-form.sql @@ -0,0 +1,160 @@ +-- Buat m_screening_template: master template screening klinik +CREATE TABLE IF NOT EXISTS one_klinik.m_screening_template ( + M_ScreeningTemplateID INT(11) NOT NULL AUTO_INCREMENT, + M_ScreeningTemplateCode VARCHAR(30) NOT NULL DEFAULT '', + M_ScreeningTemplateName VARCHAR(100) NOT NULL DEFAULT '', + M_ScreeningTemplateDescription VARCHAR(255) NULL DEFAULT NULL, + M_ScreeningTemplateIsActive CHAR(1) NOT NULL DEFAULT 'Y', + M_ScreeningTemplateUserID INT(11) NULL DEFAULT NULL, + M_ScreeningTemplateCreated DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + M_ScreeningTemplateLastUpdated DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (M_ScreeningTemplateID), + UNIQUE KEY uk_M_ScreeningTemplateCode (M_ScreeningTemplateCode), + KEY idx_M_ScreeningTemplateIsActive (M_ScreeningTemplateIsActive) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Master template form screening klinik'; + +-- Buat m_screening_form: daftar pertanyaan per template +-- M_ScreeningFormOptions: JSON array pilihan jawaban, contoh: ["Ya","Tidak"] +-- M_ScreeningFormAnswerType: single=pilih satu, multi=pilih banyak, text=isian bebas +CREATE TABLE IF NOT EXISTS one_klinik.m_screening_form ( + M_ScreeningFormID INT(11) NOT NULL AUTO_INCREMENT, + M_ScreeningFormM_ScreeningTemplateID INT(11) NOT NULL, + M_ScreeningFormQuestion TEXT NOT NULL, + M_ScreeningFormAnswerType ENUM('single','multi','text') NOT NULL DEFAULT 'single', + M_ScreeningFormOptions TEXT NULL DEFAULT NULL, + M_ScreeningFormSortOrder TINYINT(3) UNSIGNED NOT NULL DEFAULT 0, + M_ScreeningFormIsRequired CHAR(1) NOT NULL DEFAULT 'Y', + M_ScreeningFormIsActive CHAR(1) NOT NULL DEFAULT 'Y', + M_ScreeningFormUserID INT(11) NULL DEFAULT NULL, + M_ScreeningFormCreated DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + M_ScreeningFormLastUpdated DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (M_ScreeningFormID), + KEY idx_M_ScreeningFormTemplateID (M_ScreeningFormM_ScreeningTemplateID), + KEY idx_M_ScreeningFormIsActive (M_ScreeningFormIsActive), + CONSTRAINT fk_sf_template + FOREIGN KEY (M_ScreeningFormM_ScreeningTemplateID) + REFERENCES m_screening_template (M_ScreeningTemplateID) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Pertanyaan form screening per template'; + +-- --------------------------------------------------------------------------- +-- Data master template +-- --------------------------------------------------------------------------- +INSERT INTO one_klinik.m_screening_template + (M_ScreeningTemplateCode, M_ScreeningTemplateName, M_ScreeningTemplateDescription, M_ScreeningTemplateIsActive) +VALUES + ('VAKSINASI', 'Screening Vaksinasi', + 'Form screening pra-vaksinasi untuk menilai kelayakan pemberian vaksin', 'Y'), + ('KHITAN', 'Screening Khitan', + 'Form screening pra-tindakan khitan untuk menilai kelayakan pasien', 'Y'); + +-- --------------------------------------------------------------------------- +-- Pertanyaan template VAKSINASI +-- --------------------------------------------------------------------------- +SET @vaksin_id = ( + SELECT M_ScreeningTemplateID + FROM one_klinik.m_screening_template + WHERE M_ScreeningTemplateCode = 'VAKSINASI' +); + +INSERT INTO one_klinik.m_screening_form + (M_ScreeningFormM_ScreeningTemplateID, M_ScreeningFormQuestion, + M_ScreeningFormAnswerType, M_ScreeningFormOptions, + M_ScreeningFormSortOrder, M_ScreeningFormIsRequired) +VALUES + (@vaksin_id, + 'Apakah saat ini sedang demam (suhu ≥ 38°C)?', + 'single', '["Ya","Tidak"]', 1, 'Y'), + + (@vaksin_id, + 'Apakah sedang dalam kondisi sakit akut?', + 'single', '["Ya","Tidak"]', 2, 'Y'), + + (@vaksin_id, + 'Apakah memiliki riwayat anafilaksis atau reaksi alergi berat?', + 'single', '["Ya","Tidak","Tidak Tahu"]', 3, 'Y'), + + (@vaksin_id, + 'Apakah pernah mengalami reaksi alergi terhadap vaksin sebelumnya?', + 'single', '["Ya","Tidak","Belum Pernah Divaksin"]', 4, 'Y'), + + (@vaksin_id, + 'Apakah sedang mengonsumsi obat imunosupresan atau menjalani kemoterapi?', + 'single', '["Ya","Tidak"]', 5, 'Y'), + + (@vaksin_id, + 'Apakah sedang hamil atau menyusui?', + 'single', '["Ya","Tidak","Tidak Berlaku"]', 6, 'Y'), + + (@vaksin_id, + 'Apakah memiliki riwayat penyakit kronis yang relevan? (sebutkan jika ada)', + 'text', NULL, 7, 'N'), + + (@vaksin_id, + 'Kesimpulan: kelayakan pemberian vaksin', + 'single', '["Layak","Tidak Layak","Tunda"]', 8, 'Y'), + + (@vaksin_id, + 'Catatan petugas screening', + 'text', NULL, 9, 'N'); + +-- --------------------------------------------------------------------------- +-- Pertanyaan template KHITAN +-- --------------------------------------------------------------------------- +SET @khitan_id = ( + SELECT M_ScreeningTemplateID + FROM one_klinik.m_screening_template + WHERE M_ScreeningTemplateCode = 'KHITAN' +); + +INSERT INTO one_klinik.m_screening_form + (M_ScreeningFormM_ScreeningTemplateID, M_ScreeningFormQuestion, + M_ScreeningFormAnswerType, M_ScreeningFormOptions, + M_ScreeningFormSortOrder, M_ScreeningFormIsRequired) +VALUES + (@khitan_id, + 'Apakah ada riwayat gangguan pembekuan darah atau hemofilia?', + 'single', '["Ya","Tidak","Tidak Tahu"]', 1, 'Y'), + + (@khitan_id, + 'Apakah ada riwayat alergi terhadap obat anestesi lokal (lidokain, prokain, dll)?', + 'single', '["Ya","Tidak","Tidak Tahu"]', 2, 'Y'), + + (@khitan_id, + 'Apakah menderita atau dicurigai Diabetes Mellitus?', + 'single', '["Ya","Tidak","Dicurigai"]', 3, 'Y'), + + (@khitan_id, + 'Apakah saat ini sedang sakit akut atau demam (suhu ≥ 38°C)?', + 'single', '["Ya","Tidak"]', 4, 'Y'), + + (@khitan_id, + 'Apakah sedang dalam pengobatan antikoagulan (pengencer darah)?', + 'single', '["Ya","Tidak"]', 5, 'Y'), + + (@khitan_id, + 'Apakah ada kelainan anatomi pada area genitalia?', + 'single', '["Ya","Tidak"]', 6, 'Y'), + + (@khitan_id, + 'Apakah pasien kooperatif untuk menjalani tindakan?', + 'single', '["Kooperatif","Cukup Kooperatif","Tidak Kooperatif"]', 7, 'Y'), + + (@khitan_id, + 'Berat badan pasien (kg)', + 'text', NULL, 8, 'Y'), + + (@khitan_id, + 'Tinggi badan pasien (cm)', + 'text', NULL, 9, 'Y'), + + (@khitan_id, + 'Apakah ada riwayat tindakan bedah sebelumnya pada area genitalia?', + 'single', '["Ya","Tidak"]', 10, 'N'), + + (@khitan_id, + 'Kesimpulan: kelayakan tindakan khitan', + 'single', '["Layak","Tidak Layak","Tunda"]', 11, 'Y'), + + (@khitan_id, + 'Catatan petugas screening', + 'text', NULL, 12, 'N');