Add inform consent template API

This commit is contained in:
sas.fajri
2026-05-18 13:37:55 +07:00
parent ae601aa3ca
commit 8c9ddf9755
2 changed files with 317 additions and 0 deletions

View File

@@ -0,0 +1,236 @@
<?php
class Template extends MY_Controller
{
var $db_onedev;
var $db_onedev_log;
public function index()
{
echo "INFORM CONSENT TEMPLATE API";
}
public function __construct()
{
parent::__construct();
$this->db_onedev = $this->load->database("onedev", true);
$this->db_onedev_log = $this->load->database("onedev_log", true);
}
public function types()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$sql = "SELECT
M_InformConsentType,
M_InformConsentTitle,
M_InformConsentID
FROM m_informconsent
WHERE M_InformConsentIsActive = 'Y'
ORDER BY M_InformConsentType ASC";
$rows = $this->db_onedev->query($sql)->result_array();
$result = array(
"total" => count($rows),
"records" => $rows
);
$this->sys_ok($result);
} catch (Exception $exc) {
$this->sys_error($exc->getMessage());
}
}
public function detail()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$type = isset($prm["type"]) ? trim($prm["type"]) : "";
if ($type === "") {
$this->sys_error("type harus diisi");
exit;
}
$sql = "SELECT
M_InformConsentID,
M_InformConsentType,
M_InformConsentTitle,
M_InformConsentContent,
M_InformConsentIsActive,
M_InformConsentCreated,
M_InformConsentLastUpdated
FROM m_informconsent
WHERE M_InformConsentType = ?
AND M_InformConsentIsActive = 'Y'
LIMIT 1";
$row = $this->db_onedev->query($sql, array($type))->row_array();
if (!$row) {
$this->sys_ok(array("total" => 0, "records" => array()));
exit;
}
$this->sys_ok(array("total" => 1, "records" => $row));
} catch (Exception $exc) {
$this->sys_error($exc->getMessage());
}
}
public function add()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$userID = intval($this->sys_user["M_UserID"]);
$type = isset($prm["type"]) ? trim($prm["type"]) : "";
$title = isset($prm["title"]) ? trim($prm["title"]) : "";
$content = isset($prm["content"]) ? trim($prm["content"]) : "";
if ($type === "" || $title === "" || $content === "") {
$this->sys_error("type, title, content wajib diisi");
exit;
}
$this->db_onedev->trans_begin();
$sql = "INSERT INTO m_informconsent (
M_InformConsentType,
M_InformConsentTitle,
M_InformConsentContent,
M_InformConsentIsActive,
M_InformConsentCreated,
M_InformConsentCreatedUserID,
M_InformConsentLastUpdated,
M_InformConsentLastUpdatedUserID
) VALUES (?, ?, ?, 'Y', NOW(), ?, NOW(), ?)";
$qry = $this->db_onedev->query($sql, array($type, $title, $content, $userID, $userID));
if (!$qry) {
$this->db_onedev->trans_rollback();
$this->sys_error_db("insert m_informconsent", $this->db_onedev);
exit;
}
$newID = intval($this->db_onedev->insert_id());
$after = array(
"M_InformConsentID" => $newID,
"M_InformConsentType" => $type,
"M_InformConsentTitle" => $title,
"M_InformConsentContent" => $content,
"M_InformConsentIsActive" => "Y"
);
$this->writeLog($newID, $type, array(), $after, $userID);
$this->db_onedev->trans_commit();
$this->sys_ok(array("total" => 1, "records" => array("M_InformConsentID" => $newID)));
} catch (Exception $exc) {
if ($this->db_onedev->trans_status() === false) {
$this->db_onedev->trans_rollback();
}
$this->sys_error($exc->getMessage());
}
}
public function save()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$userID = intval($this->sys_user["M_UserID"]);
$id = isset($prm["id"]) ? intval($prm["id"]) : 0;
$title = isset($prm["title"]) ? trim($prm["title"]) : "";
$content = isset($prm["content"]) ? trim($prm["content"]) : "";
if ($id <= 0 || $title === "" || $content === "") {
$this->sys_error("id, title, content wajib diisi");
exit;
}
$before = $this->db_onedev->query(
"SELECT * FROM m_informconsent WHERE M_InformConsentID = ? LIMIT 1",
array($id)
)->row_array();
if (!$before) {
$this->sys_error("Template tidak ditemukan");
exit;
}
$this->db_onedev->trans_begin();
$sql = "UPDATE m_informconsent
SET
M_InformConsentTitle = ?,
M_InformConsentContent = ?,
M_InformConsentLastUpdated = NOW(),
M_InformConsentLastUpdatedUserID = ?
WHERE M_InformConsentID = ?";
$qry = $this->db_onedev->query($sql, array($title, $content, $userID, $id));
if (!$qry) {
$this->db_onedev->trans_rollback();
$this->sys_error_db("update m_informconsent", $this->db_onedev);
exit;
}
$after = $this->db_onedev->query(
"SELECT * FROM m_informconsent WHERE M_InformConsentID = ? LIMIT 1",
array($id)
)->row_array();
$this->writeLog(
$id,
$before["M_InformConsentType"],
$before,
$after,
$userID
);
$this->db_onedev->trans_commit();
$this->sys_ok(array(
"total" => 1,
"affected_rows" => $this->db_onedev->affected_rows()
));
} catch (Exception $exc) {
if ($this->db_onedev->trans_status() === false) {
$this->db_onedev->trans_rollback();
}
$this->sys_error($exc->getMessage());
}
}
private function writeLog($informConsentID, $type, $before, $after, $userID)
{
$sql = "INSERT INTO log_m_informconsent (
Log_M_InformConsentM_InformConsentID,
Log_M_InformConsentType,
Log_M_InformConsentDate,
Log_M_InformConsentBeforeJSON,
Log_M_InformConsentAfterJSON,
Log_M_InformConsentUserID
) VALUES (?, ?, NOW(), ?, ?, ?)";
$this->db_onedev_log->query($sql, array(
intval($informConsentID),
strval($type),
json_encode($before),
json_encode($after),
intval($userID)
));
}
}

View File

@@ -0,0 +1,81 @@
-- Target DB: one_lab and one_lab_log (devone)
-- Purpose: create inform consent template master + log table and seed default templates
SET NAMES utf8mb4;
-- ========================================
-- DB: one_lab
-- ========================================
CREATE TABLE IF NOT EXISTS `m_informconsent` (
`M_InformConsentID` INT(11) NOT NULL AUTO_INCREMENT,
`M_InformConsentType` VARCHAR(30) NOT NULL,
`M_InformConsentTitle` VARCHAR(150) NOT NULL,
`M_InformConsentContent` LONGTEXT NOT NULL,
`M_InformConsentIsActive` CHAR(1) NOT NULL DEFAULT 'Y',
`M_InformConsentCreated` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
`M_InformConsentCreatedUserID` INT(11) NOT NULL DEFAULT 0,
`M_InformConsentLastUpdated` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
`M_InformConsentLastUpdatedUserID` INT(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`M_InformConsentID`),
UNIQUE KEY `M_InformConsentType` (`M_InformConsentType`),
KEY `M_InformConsentIsActive` (`M_InformConsentIsActive`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
SET @template_umum = '1. PERSETUJUAN UNTUK PEMERIKSAAN DAN PERAWATAN\n\n● Saya memberikan izin kepada dokter / tenaga kesehatan lainnya di Klinik IBL untuk melakukan evaluasi, tindakan medis, memberikan perawatan / tindakan / asuhan, pemeriksaan laboratorium dan/atau tindakan diagnostik lainnya sesuai prosedur.\n● Saya memahami bahwa sebagian atau seluruh prosedur yang dilaksanakan di laboratorium melibatkan pengambilan sampel tubuh (seperti darah, urin atau cairan lainnya) untuk analisis.\n● Saya menyetujui penggunaan hasil pemeriksaan saya untuk:\n - Keperluan diagnostik dan pengobatan\n - Evaluasi mutu internal laboratorium\n - Pelaporan wajib ke instansi resmi (misal Dinas Kesehatan) sesuai ketentuan hukum\n\n2. Kerahasiaan & Pelepasan Informasi\n\na. Saya memahami bahwa:\n● Semua data dan informasi medis saya dijaga kerahasiaannya\n● Informasi hanya dibagikan kepada:\n - Dokter pengirim/perusahaan penyalur tenaga kerja migran\n - Pihak berwenang yang diwajibkan oleh hukum\n - Atas izin tertulis saya atau wali saya\n\nb. Saya memberikan izin terbatas kepada Klinik untuk menggunakan data yang telah dianonimkan untuk kepentingan pelaporan statistik, pelatihan atau peningkatan mutu, tanpa menyebutkan identitas.\n\n3. Hak dan Kewajiban Pasien\n\nHak Pasien:\n1. Mendapatkan informasi mengenai kesehatan dirinya;\n2. Mendapatkan penjelasan yang memadai mengenai pelayanan kesehatan yang diterimanya;\n3. Mendapatkan pelayanan kesehatan sesuai dengan kebutuhan medis, standar profesi, dan pelayanan yang bermutu;\n4. Menolak atau menyetujui tindakan medis, kecuali tindakan medis yang diperlukan dalam rangka pencegahan penyakit menular dan penanggulangan KLB atau wabah;\n5. Mendapatkan akses terhadap informasi yang terdapat di dalam rekam medis;\n6. Meminta pendapat tenaga medis atau tenaga kesehatan lain; dan\n7. Mendapatkan hak lain sesuai dengan ketentuan peraturan perundang-undangan.\n\nKewajiban Pasien:\n1. Memberikan informasi yang lengkap dan jujur tentang masalah kesehatannya;\n2. Mematuhi nasihat dan petunjuk tenaga medis dan tenaga kesehatan;\n3. Mematuhi ketentuan yang berlaku pada fasilitas pelayanan kesehatan; dan\n4. Memberikan imbalan jasa atas pelayanan yang diterima.';
SET @template_cpmi = 'I. Dengan ini menyatakan:\n1. Saya setuju untuk menjalani pemeriksaan kesehatan yang meliputi: pemeriksaan fisik, pemeriksaan X-Ray, pemeriksaan urine, pemeriksaan kehamilan (khusus perempuan), pemeriksaan darah (Anti HIV, HBsAg, Anti HCV, VDRL, TPHA, Darah Rutin, Kimia Darah, dan / atau pemeriksaan lain sesuai dengan paket medical check-up negara tujuan).\n2. Saya setuju terhadap tindakan pemeriksaan tersebut dan memahami serta bersedia menanggung segala risiko yang mungkin timbul dari tindakan tersebut.\n3. Saya menyatakan setuju bahwa apabila saya tidak diperiksa, maka segala risiko, alternatif, atau konsekuensi yang mungkin timbul di kemudian hari menjadi tanggung jawab saya sepenuhnya.\n4. Saya setuju bahwa berkas lengkap catatan medik hasil pemeriksaan kesehatan saya akan disimpan dan diarsipkan oleh Klinik Utama Imam Bonjol Semarang.\n5. Saya setuju bahwa data pribadi saya dapat digunakan untuk keperluan diagnostik, pengobatan, dan evaluasi mutu internal Klinik IBL Semarang.\n\nII. PERSETUJUAN PELEPASAN INFORMASI\n1. Saya memahami bahwa informasi yang ada dalam diri pasien terkait dengan kondisi kesehatan pasien berdasarkan pemeriksaan yang akan dijalani di Klinik IBL akan terjamin kerahasiaannya.\n2. Saya setuju bahwa hasil pemeriksaan kesehatan beserta kesimpulannya akan dilaporkan secara langsung kepada pihak P3MI / LPK / Kementerian P2MI / pihak berwenang yang diwajibkan oleh hukum.\n\nIII. Hak dan Kewajiban Pasien\nSaya telah mendapat informasi tentang Hak dan Kewajiban Pasien di Klinik IBL melalui media informasi yang telah disediakan oleh petugas Klinik IBL.\n\nDemikian persetujuan ini telah saya baca dan saya pahami.\n* Untuk medical check up negara tujuan Taiwan bersedia diberikan vaksinasi Measles Rubella (MR).\n* Untuk medical check up negara tujuan Singapura bersedia diberikan vaksinasi Measles Mumps Rubella (MMR).';
INSERT INTO `m_informconsent` (
`M_InformConsentType`,
`M_InformConsentTitle`,
`M_InformConsentContent`,
`M_InformConsentIsActive`,
`M_InformConsentCreated`,
`M_InformConsentCreatedUserID`,
`M_InformConsentLastUpdated`,
`M_InformConsentLastUpdatedUserID`
) VALUES
(
'umum',
'Template Inform Consent Umum',
@template_umum,
'Y',
NOW(),
1,
NOW(),
1
),
(
'cpmi',
'Template Inform Consent CPMI',
@template_cpmi,
'Y',
NOW(),
1,
NOW(),
1
)
ON DUPLICATE KEY UPDATE
`M_InformConsentTitle` = VALUES(`M_InformConsentTitle`),
`M_InformConsentContent` = VALUES(`M_InformConsentContent`),
`M_InformConsentIsActive` = VALUES(`M_InformConsentIsActive`),
`M_InformConsentLastUpdated` = NOW(),
`M_InformConsentLastUpdatedUserID` = VALUES(`M_InformConsentLastUpdatedUserID`);
-- ========================================
-- DB: one_lab_log
-- ========================================
CREATE TABLE IF NOT EXISTS `log_m_informconsent` (
`Log_M_InformConsentID` INT(11) NOT NULL AUTO_INCREMENT,
`Log_M_InformConsentM_InformConsentID` INT(11) NOT NULL DEFAULT 0,
`Log_M_InformConsentType` VARCHAR(30) NOT NULL DEFAULT '',
`Log_M_InformConsentDate` DATETIME NOT NULL,
`Log_M_InformConsentBeforeJSON` TEXT CHARACTER SET utf8mb4 NOT NULL,
`Log_M_InformConsentAfterJSON` TEXT CHARACTER SET utf8mb4 NOT NULL,
`Log_M_InformConsentUserID` INT(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`Log_M_InformConsentID`),
KEY `Log_M_InformConsentM_InformConsentID` (`Log_M_InformConsentM_InformConsentID`),
KEY `Log_M_InformConsentType` (`Log_M_InformConsentType`),
KEY `Log_M_InformConsentDate` (`Log_M_InformConsentDate`),
KEY `Log_M_InformConsentUserID` (`Log_M_InformConsentUserID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;