319 lines
12 KiB
PHP
319 lines
12 KiB
PHP
<?php
|
|
class Servicerequest extends MY_Controller
|
|
{
|
|
var $db;
|
|
function __construct()
|
|
{
|
|
parent::__construct();
|
|
$this->load->library('Satusehat');
|
|
}
|
|
|
|
function index()
|
|
{
|
|
echo "Satu Sehat Service Request";
|
|
}
|
|
|
|
//fungsi translate hari
|
|
function translateDayToIndonesian($englishDay) {
|
|
$englishDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
|
|
$indonesianDays = ['Minggu', 'Senin', 'Selasa', 'Rabu', 'Kamis', 'Jumat', 'Sabtu'];
|
|
$index = array_search($englishDay, $englishDays);
|
|
if ($index !== false) {
|
|
return $indonesianDays[$index];
|
|
}
|
|
|
|
return 'Hari tidak valid';
|
|
}
|
|
|
|
//fungsi translate bulan
|
|
function translateMonthToIndonesian($englishMonth) {
|
|
$englishMonths = [
|
|
'January', 'February', 'March', 'April', 'May', 'June',
|
|
'July', 'August', 'September', 'October', 'November', 'December'
|
|
];
|
|
$indonesianMonths = [
|
|
'Januari', 'Februari', 'Maret', 'April', 'Mei', 'Juni',
|
|
'Juli', 'Agustus', 'September', 'Oktober', 'November', 'Desember'
|
|
];
|
|
|
|
$index = array_search($englishMonth, $englishMonths);
|
|
if ($index !== false) {
|
|
return $indonesianMonths[$index];
|
|
}
|
|
|
|
return 'Bulan tidak valid';
|
|
}
|
|
|
|
function getservicerequest()
|
|
{
|
|
|
|
$prm = $this->sys_input;
|
|
$orderheaderID = $prm['orderheaderID'];
|
|
|
|
// get organization
|
|
$sql = "SELECT organizationID
|
|
FROM one_health.organization
|
|
WHERE organizationIsActive = 'Y'";
|
|
|
|
$qry = $this->db->query($sql, []);
|
|
$last_qry = $this->db->last_query();
|
|
|
|
if (!$qry) {
|
|
$error = array(
|
|
"message" => $this->db->error()["message"],
|
|
"sql" => $last_qry
|
|
);
|
|
$this->sys_error_db($error);
|
|
exit;
|
|
}
|
|
|
|
$organizationID = $qry->result_array()[0]['organizationID'];
|
|
|
|
|
|
// get T_OrderDetail by T_OrderHeaderID
|
|
$T_OrderDetailID = "";
|
|
$sql_get_orderDetailID = "SELECT
|
|
T_OrderDetailID,
|
|
IFNULL(Nat_TestLoincCode,'') as Nat_TestLoincCode ,
|
|
IFNULL(Nat_TestLoincDisplay,'') as Nat_TestLoincDisplay,
|
|
T_OrderDetailT_TestName,
|
|
T_OrderHeaderM_PatientID ,
|
|
OHPatientMapIHSNumber,
|
|
EncounterUUID,
|
|
M_PatientName,
|
|
DAYNAME(T_OrderHeaderDate) as OrderHeaderDay,
|
|
DATE_FORMAT(DATE(T_OrderHeaderDate),'%d %M %Y') as OrderHeaderDate,
|
|
TIME(T_OrderHeaderDate) as OrderHeaderTime,
|
|
T_OrderHeaderDate,
|
|
OHDoctorMapIHSNumber,
|
|
M_DoctorName,
|
|
OHStaffMapIhsNumber,
|
|
M_StaffName
|
|
|
|
FROM t_orderheader
|
|
JOIN t_orderdetail
|
|
ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID
|
|
AND T_OrderHeaderID = ?
|
|
AND T_OrderDetailIsActive = 'Y'
|
|
AND T_OrderDetailT_TestIsPrice ='Y'
|
|
|
|
JOIN t_test
|
|
ON T_OrderDetailT_TestID = T_TestID
|
|
JOIN nat_test
|
|
ON T_TestNat_TestID = Nat_TestID
|
|
and Nat_TestIsActive = 'Y'
|
|
|
|
LEFT JOIN nat_test_loinc
|
|
ON Nat_TestLoincNat_TestID = Nat_TestID
|
|
|
|
Join m_doctor
|
|
ON M_DoctorID = T_OrderHeaderSenderM_DoctorID
|
|
AND M_DoctorIsActive ='Y'
|
|
|
|
JOIN m_patient
|
|
ON T_OrderHeaderM_PatientID = M_PatientID
|
|
AND T_OrderHeaderIsActive = 'Y'
|
|
AND M_PatientIsActive = 'Y'
|
|
|
|
JOIN order_log
|
|
ON OrderLogT_OrderHeaderID = T_OrderHeaderID
|
|
|
|
JOIN m_user
|
|
ON M_UserID = OrderLogUserID
|
|
AND M_UserIsActive = 'Y'
|
|
|
|
JOIN m_staff
|
|
ON M_StaffID = M_UserM_StaffID
|
|
AND M_StaffIsActive = 'Y'
|
|
|
|
LEFT JOIN one_health.oh_patient_map
|
|
ON T_OrderHeaderM_PatientID = OHPatientMapM_PatientID
|
|
AND OHPatientMapIsActive = 'Y'
|
|
|
|
LEFT JOIN one_health.encounter
|
|
ON EncounterT_orderHeaderID = T_orderHeaderID
|
|
AND EncounterIsActive= 'Y'
|
|
AND T_OrderDetailT_OrderHeaderID = EncounterT_orderHeaderID
|
|
|
|
LEFT JOIN one_health.oh_doctor_map
|
|
ON OHDoctorMapM_DoctorID = M_DoctorID
|
|
AND OHDoctorMapIsActive = 'Y'
|
|
|
|
LEFT JOIN one_health.oh_staff_map
|
|
ON OHStaffMapM_StaffNIK = M_StaffNIK
|
|
AND OHStaffMapIsActive = 'Y'";
|
|
|
|
$qry_orderDetailID = $this->db->query($sql_get_orderDetailID, $orderheaderID);
|
|
$last_qry = $this->db->last_query();
|
|
|
|
if (!$qry_orderDetailID) {
|
|
$error = array(
|
|
"message" => $this->db->error()["message"],
|
|
"sql" => $last_qry
|
|
);
|
|
$this->sys_error_db($error);
|
|
exit;
|
|
}
|
|
|
|
$orders = $qry_orderDetailID->result_array();
|
|
|
|
$results = array();
|
|
|
|
$sql = "SELECT *
|
|
FROM t_orderpromise
|
|
WHERE
|
|
T_OrderPromiseT_OrderHeaderID = ? AND T_OrderPromiseIsActive = 'Y'
|
|
ORDER BY T_OrderPromiseDateTime ASC";
|
|
$qry = $this->db->query($sql, $orderheaderID);
|
|
|
|
$last_qry = $this->db->last_query();
|
|
if (!$qry) {
|
|
$error = array(
|
|
"message" => $this->db->error()["message"],
|
|
"sql" => $last_qry
|
|
);
|
|
$this->sys_error_db($error);
|
|
exit;
|
|
}
|
|
$rst_promise = $qry->result_array();
|
|
$T_OrderPromiseDateTime = $rst_promise[0]['T_OrderPromiseDateTime'];
|
|
|
|
foreach ($orders as $key => $value) {
|
|
$T_OrderorderDetailID = $value['T_OrderDetailID'];
|
|
$sql = "SELECT COUNT(*) as xcount
|
|
FROM one_health.service_request
|
|
WHERE
|
|
ServiceRequestT_OrderDetailID = ? AND ServiceRequestIsActive = 'Y'";
|
|
$qry_cek = $this->db->query($sql, $T_OrderorderDetailID);
|
|
$last_qry = $this->db->last_query();
|
|
|
|
if (!$qry_cek) {
|
|
$error = array(
|
|
"message" => $this->db->error()["message"],
|
|
"sql" => $last_qry
|
|
);
|
|
$this->sys_error_db($error);
|
|
exit;
|
|
}
|
|
|
|
if ($qry_cek->row()->xcount == 0) {
|
|
//blm ada data di one_health maka diinsertkan
|
|
$servicerequest_uuid = $this->satusehat->gen_uuid();
|
|
//mengambil orderpromise yang paling awal
|
|
|
|
//mengubah hari dari inggris menjadi indonesia
|
|
$dayInIndonesian = $this->translateDayToIndonesian($value['OrderHeaderDay']);
|
|
|
|
//mengubah bulan dalam tanggal menjadi ke bahasa indonesia
|
|
$parts = explode(' ', $value['OrderHeaderDate']);
|
|
$indonesianMonth = $this->translateMonthToIndonesian($parts[1]);
|
|
$timeParts = explode(':', $value['OrderHeaderTime']);
|
|
$hourMinute = $timeParts[0] . ':' . $timeParts[1];
|
|
|
|
// mengubah Nama menjadi Huruf besar ditiap awal kata dan kecil selanjutnya
|
|
$formattedNamePatient = ucwords(strtolower($value['M_PatientName']));
|
|
$formattedNameDoctor = ucwords(strtolower($value['M_DoctorName']));
|
|
$formattedNamePerformer = ucwords(strtolower($value['M_StaffName']));
|
|
|
|
$serviceRequestJSON = [
|
|
"fullUrl" => "urn:uuid:{$servicerequest_uuid}",
|
|
"resource" => [
|
|
"resourceType"=> "ServiceRequest",
|
|
"identifier"=> [
|
|
[
|
|
"system"=> "http://sys-ids.kemkes.go.id/servicerequest/$organizationID",
|
|
"value"=> $value['T_OrderDetailID']
|
|
],
|
|
],
|
|
"status" => "active",
|
|
"intent" => "original-order",
|
|
"priority" => "routine",
|
|
"code" => [
|
|
"coding" => [
|
|
[
|
|
"system"=> "http://loinc.org",
|
|
"code"=> $value['Nat_TestLoincCode'],
|
|
"display"=> $value['Nat_TestLoincDisplay'],
|
|
],
|
|
],
|
|
"text" => $value['T_OrderDetailT_TestName'],
|
|
],
|
|
"subject" => [
|
|
"reference"=> "Patient/".$value['OHPatientMapIHSNumber'],
|
|
],
|
|
"encounter"=> [
|
|
"reference"=> "Encounter/".$value['EncounterUUID'],
|
|
"display"=> "Permintaan {$value['T_OrderDetailT_TestName']} {$formattedNamePatient} di hari {$dayInIndonesian}, {$parts[0]} $indonesianMonth {$parts[2]} pukul {$hourMinute} WIB"
|
|
],
|
|
"occurrenceDateTime"=> date('c', strtotime($T_OrderPromiseDateTime)),
|
|
"authoredOn"=> date('c', strtotime($value['T_OrderHeaderDate'])),
|
|
"requester"=>[
|
|
"reference"=> "Practitioner/{$value['OHDoctorMapIHSNumber']}",
|
|
"display"=> $formattedNameDoctor
|
|
|
|
],
|
|
"performer"=> [
|
|
[
|
|
"reference"=> "Practitioner/{$value['OHStaffMapIhsNumber']}",
|
|
"display"=> $formattedNamePerformer
|
|
]
|
|
],
|
|
"reasonCode"=> [
|
|
[
|
|
"text"=> ""
|
|
]
|
|
]
|
|
],
|
|
"request" => [
|
|
"method" => "POST",
|
|
"url" => "ServiceRequest"
|
|
]
|
|
];
|
|
|
|
$sql = "INSERT INTO one_health.service_request
|
|
(
|
|
ServiceRequestUUID,
|
|
ServiceRequestT_OrderHeaderID,
|
|
ServiceRequestT_OrderDetailID,
|
|
ServiceRequestJSON,
|
|
ServiceRequestCreated
|
|
)
|
|
VALUES
|
|
(
|
|
?,
|
|
?,
|
|
?,
|
|
?,
|
|
NOW()
|
|
)";
|
|
|
|
$qry = $this->db->query($sql, [
|
|
$servicerequest_uuid,
|
|
$orderheaderID,
|
|
$T_OrderorderDetailID,
|
|
json_encode($serviceRequestJSON)
|
|
]);
|
|
$last_qry = $this->db->last_query();
|
|
|
|
if (!$qry) {
|
|
$error = array(
|
|
"message" => $this->db->error()["message"],
|
|
"sql" => $last_qry
|
|
);
|
|
$this->sys_error_db($error);
|
|
exit;
|
|
}
|
|
|
|
$results[] = $serviceRequestJSON;
|
|
}
|
|
else {
|
|
//sudah ada data di one_health maka langsung di returnkan jsonya ;
|
|
echo "Data sudah diinsert";
|
|
}
|
|
}
|
|
|
|
echo json_encode($results);
|
|
|
|
}
|
|
}
|