diff --git a/application/controllers/klinik/screening/Screening.php b/application/controllers/klinik/screening/Screening.php index 72df11ae..825a81b2 100644 --- a/application/controllers/klinik/screening/Screening.php +++ b/application/controllers/klinik/screening/Screening.php @@ -28,6 +28,7 @@ class Screening extends MY_Controller orderIsCheck, orderAge as patient_age, DATE_FORMAT(orderDate,'%d-%m-%Y') as order_date, + orderM_ClinicUnitID, 'N' divider, M_PatientID, M_PatientNoReg, @@ -93,6 +94,65 @@ class Screening extends MY_Controller $info = $this->db_onedev->query("SELECT fn_fo_patient_visit(?) info", [$v['M_PatientID']])->row(); $rows[$k]['info'] = json_decode($info->info); + + // Screening template berdasarkan poli order + $cu_id = $v['orderM_ClinicUnitID'] ?? null; + $rows[$k]['screening_template'] = null; + $rows[$k]['screening_forms'] = null; + $rows[$k]['order_screening'] = null; + + if ($cu_id) { + $tpl = $this->db_oneklinik->query( + "SELECT st.M_ScreeningTemplateID, st.M_ScreeningTemplateCode, st.M_ScreeningTemplateName + FROM one_klinik.m_clinic_unit cu + JOIN one_klinik.m_screening_template st + ON st.M_ScreeningTemplateID = cu.M_ClinicUnitM_ScreeningTemplateID + WHERE cu.M_ClinicUnitID = ?", [$cu_id] + )->row_array(); + + $rows[$k]['screening_template'] = $tpl ?: null; + + if ($tpl && $tpl['M_ScreeningTemplateCode'] !== 'DEFAULT') { + // Template dinamis (VAKSINASI / KHITAN): ambil form + jawaban yang sudah ada + $forms = $this->db_oneklinik->query( + "SELECT sf.M_ScreeningFormID, + sf.M_ScreeningFormQuestion, + sf.M_ScreeningFormAnswerType, + sf.M_ScreeningFormOptions, + sf.M_ScreeningFormSortOrder, + sf.M_ScreeningFormIsRequired, + sa.T_ScreeningAnswerValue AS answer + FROM one_klinik.m_screening_form sf + LEFT JOIN one_klinik.t_screening_answer sa + ON sa.T_ScreeningAnswerM_ScreeningFormID = sf.M_ScreeningFormID + AND sa.T_ScreeningAnswerOrderID = ? + AND sa.T_ScreeningAnswerIsActive = 'Y' + WHERE sf.M_ScreeningFormM_ScreeningTemplateID = ? + AND sf.M_ScreeningFormIsActive = 'Y' + ORDER BY sf.M_ScreeningFormSortOrder", + [$v['orderID'], $tpl['M_ScreeningTemplateID']] + )->result_array(); + + foreach ($forms as &$f) { + $f['M_ScreeningFormOptions'] = $f['M_ScreeningFormOptions'] + ? json_decode($f['M_ScreeningFormOptions'], true) + : null; + $f['answer'] = $f['answer'] !== null + ? json_decode($f['answer'], true) + : null; + } + unset($f); + + $rows[$k]['screening_forms'] = $forms; + } else { + // DEFAULT: pakai order_screening lama + $rows[$k]['order_screening'] = $this->db_oneklinik->query( + "SELECT * FROM one_klinik.order_screening + WHERE orderScreeningOrderID = ? AND orderScreeningIsActive = 'Y'", + [$v['orderID']] + )->row_array() ?: null; + } + } } $this->sys_ok(["total" => count($rows), "records" => $rows]); diff --git a/sql/manual_changes/2026-06-11-create-t-screening-answer.sql b/sql/manual_changes/2026-06-11-create-t-screening-answer.sql new file mode 100644 index 00000000..49bbf591 --- /dev/null +++ b/sql/manual_changes/2026-06-11-create-t-screening-answer.sql @@ -0,0 +1,19 @@ +-- Tabel jawaban screening untuk template VAKSINASI dan KHITAN +-- Satu baris per pertanyaan per order +-- Template DEFAULT tetap pakai order_screening (lama) +CREATE TABLE IF NOT EXISTS one_klinik.t_screening_answer ( + T_ScreeningAnswerID INT(11) NOT NULL AUTO_INCREMENT, + T_ScreeningAnswerOrderID INT(11) NOT NULL, + T_ScreeningAnswerM_ScreeningFormID INT(11) NOT NULL, + T_ScreeningAnswerValue TEXT NULL DEFAULT NULL, + T_ScreeningAnswerIsActive CHAR(1) NOT NULL DEFAULT 'Y', + T_ScreeningAnswerUserID INT(11) NULL DEFAULT NULL, + T_ScreeningAnswerCreated DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + T_ScreeningAnswerLastUpdated DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (T_ScreeningAnswerID), + UNIQUE KEY uk_order_form (T_ScreeningAnswerOrderID, T_ScreeningAnswerM_ScreeningFormID), + KEY idx_T_ScreeningAnswerOrderID (T_ScreeningAnswerOrderID), + CONSTRAINT fk_sa_form FOREIGN KEY (T_ScreeningAnswerM_ScreeningFormID) + REFERENCES m_screening_form (M_ScreeningFormID) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 + COMMENT='Jawaban screening per pertanyaan untuk template VAKSINASI & KHITAN';