Files
BE_IBL/application/controllers/Diagnosticreport.php
2026-04-15 15:24:53 +07:00

375 lines
18 KiB
PHP

<?php
class Diagnosticreport extends MY_Controller{
var $db;
function __construct()
{
parent::__construct();
$this->load->library('Satusehat');
}
function index()
{
echo "Satu Sehat Diagnostic Report";
}
function getdiagnosticreport()
{
$prm = $this->sys_input;
$orderheaderID = $prm['orderheaderID'];
//cek db one_health diagnostic report sudah ada atau belum
// 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'];
$sql_data_diagnostic_report = "SELECT T_OrderHeaderID,T_OrderHeaderLabNumber,
IFNULL(OHPatientMapIHSNumber,'') as OHPatientMapIHSNumber,
IFNULL(OHDoctorMapIHSNumber,'') as doctor_ihsnumber,
EncounterUUID, T_TestName,
IFNULL(Nat_TestLoincCode,'') as code_loinc,
IFNULL(Nat_TestLoincDisplay,'') as code_display,
ServiceRequestUUID,
ServiceRequestID
FROM one_health.service_request
JOIN t_orderheader ON ServiceRequestT_OrderHeaderID = ? AND
ServiceRequestT_OrderHeaderID = T_OrderHeaderID
JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID
JOIN t_orderdetail ON ServiceRequestT_OrderDetailID = T_OrderDetailID
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 = T_TestNat_TestID
LEFT JOIN one_health.oh_patient_map ON OHPatientMapM_PatientID = M_PatientID
AND OHPatientMapIsActive = 'Y'
LEFT JOIN one_health.oh_doctor_map ON OHDoctorMapM_DoctorID = T_OrderHeaderPjM_DoctorID
LEFT JOIN one_health.encounter ON EncounterT_orderHeaderID = T_orderHeaderID
AND EncounterIsActive= 'Y'
WHERE
ServiceRequestIsActive = 'Y'";
$qry_data_diagnostic_report = $this->db->query($sql_data_diagnostic_report,[$orderheaderID]);
if (!$qry_data_diagnostic_report) {
$last_qry = $this->db->last_query();
$error = array(
"message" => $this->db->error()["message"],
"sql" => $last_qry
);
$this->sys_error_db($error);
exit;
}
$ddr = $qry_data_diagnostic_report->result_array();
$results = [];
foreach ($ddr as $k_sr => $rdr) {
$sql = "SELECT *
FROM one_health.diagnostic_report
WHERE DiagnosticReportT_orderHeaderID = ?
AND DiagnosticReportServiceRequestID = ?
AND DiagnosticReportIsActive = 'Y'";
$qry = $this->db->query($sql, [
$orderheaderID,
$rdr['ServiceRequestID']
]);
$last_qry = $this->db->last_query();
if (!$qry) {
$error = array(
"message" => $this->db->error()["message"],
"sql" => $last_qry
);
$this->sys_error_db($error);
exit;
}
$exist_data = $qry->result_array();
if(count($exist_data) == 0){
$diagnosticreport_uuid = $this->satusehat->gen_uuid();
$result["fullUrl"] = "urn:uuid:".$diagnosticreport_uuid;
$data_result['resourceType'] = "DiagnosticReport";
$data_result['identifier'] = array(
array(
"system" => "http://sys-ids.kemkes.go.id/observation/".$organizationID,
"value" => $rdr['T_OrderHeaderLabNumber']
)
);
$data_result['status'] = "final";
$data_result['category'] = array(
array(
"coding" => array(
array(
"system" => "http://terminology.hl7.org/CodeSystem/v2-0074",
"code" => "CH",
"display" => "Chemistry"
)
)
)
);
$sql = "SELECT T_OrderDetailValDate
FROM t_orderdetail
WHERE
T_OrderDetailT_OrderHeaderID = $orderheaderID AND
T_OrderDetailIsActive = 'Y' AND
T_OrderDetailT_TestIsResult = 'Y'
ORDER BY T_OrderDetailValDate ASC
LIMIT 1";
//echo $sql;
$query = $this->db->query($sql);
//echo $this->db->last_query();
if(!$query){
echo $this->db->last_query();
$this->sys_error("error get t_orderdetail");
exit;
}
$data_validdate = $query->row()->T_OrderDetailValDate;
$efectiveDate = $data_validdate;
$issuedDate = $data_validdate;
$coding[] = [
"system" => "http://loinc.org",
"code" => $rdr['code_loinc'],
"display" => $rdr['T_TestName']
];
$data_result['code'] = array(
"coding" => $coding
);
$data_result['subject'] = array(
"reference" => "Patient/".$rdr['OHPatientMapIHSNumber']
);
$data_result['encounter'] = array(
'reference' => "Encounter/".$rdr['EncounterUUID']
);
$data_result['effectiveDateTime'] = date('c', strtotime($efectiveDate));
$data_result['issued'] = date('c', strtotime($issuedDate));
$data_result['performer'] = array(
array(
'reference' => "Practitioner/".$rdr['doctor_ihsnumber']
),
array(
'reference' => "Organization/".$organizationID
)
);
$sql = "SELECT IFNULL(OHStaffMapIhsNumber,'') as staff_ihsnumber
FROM t_orderdetail
JOIN m_user ON T_OrderDetailValUserID = M_UserID
JOIN m_staff ON M_UserM_StaffID = M_StaffID
LEFT JOIN one_health.oh_staff_map ON OHStaffMapM_StaffNIK = M_StaffNIK
WHERE
T_OrderDetailT_OrderHeaderID = $orderheaderID AND
T_OrderDetailIsActive = 'Y' AND
T_OrderDetailT_TestIsResult = 'Y'
ORDER BY T_OrderDetailValDate DESC
LIMIT 1";
$query = $this->db->query($sql);
if(!$query){
// echo $this->db->last_query();
$this->sys_error("error get t_orderdetail");
exit;
}
$r_validator = $query->row_array();
$data_result['performer'] = array(
array(
'reference' => "Practitioner/".$r_validator['staff_ihsnumber']
),
array(
'reference' => "Organization/".$organizationID
)
);
$sql = "SELECT observationUUID
FROM t_orderdetail
JOIN one_health.observation ON observationT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND
observationT_TestID = T_OrderDetailT_TestID AND
observationIsActive = 'Y'
WHERE
T_OrderDetailT_OrderHeaderID = $orderheaderID AND
T_OrderDetailIsActive = 'Y' AND
T_OrderDetailT_TestIsResult = 'Y'";
$query = $this->db->query($sql);
if(!$query){
echo $this->db->last_query();
$this->sys_error("error get t_orderdetail observation");
exit;
}
$r_observations = $query->result_array();
$rst_result = [];
foreach ($r_observations as $idx => $val) {
$idnew = $idx+1;
$rst_result[] = array(
"id" => "{$idnew}",
"reference" => "Observation/".$val['observationUUID']
);
}
$data_result['result'] = $rst_result;
$sql = "SELECT SpecimenUUID
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
JOIN t_ordersample ON T_OrderSampleT_SampleTypeID = T_TestT_SampleTypeID AND
T_OrderSampleT_OrderHeaderID = {$prm['orderheaderID']} AND T_OrderSampleIsActive = 'Y'
JOIN one_health.specimen ON SpecimentT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND
SpecimentT_OrderSampleID = T_OrderSampleID AND
SpecimenIsActive = 'Y'
WHERE
T_OrderDetailT_OrderHeaderID = {$prm['orderheaderID']} AND
T_OrderDetailIsActive = 'Y' AND
T_OrderDetailT_TestIsResult = 'Y'
GROUP BY T_OrderSampleID";
$query = $this->db->query($sql);
if(!$query){
echo $this->db->last_query();
$this->sys_error("error get specimen uuid");
exit;
}
$r_specimens = $query->result_array();
$rst_specimen = [];
foreach ($r_specimens as $idxx => $vall) {
$idnew = $idxx+1;
$rst_specimen[] = array(
"id" => "{$idnew}",
"reference" => "Specimen/".$vall['SpecimenUUID']
);
}
$data_result['specimen'] = $rst_specimen;
$data_result['basedOn'] = array(
array(
"reference" => "urn:uuid:".$rdr['ServiceRequestUUID']
)
);
$data_result["conclusion"] = "";
$result["resource"] = $data_result;
$result["request"] = array("method" => "POST", "url" => "DiagnosticReport");
$sql = "INSERT INTO one_health.diagnostic_report
(
DiagnosticReportUUID,
DiagnosticReportT_orderHeaderID,
DiagnosticReportServiceRequestID,
DiagnosticReportJSON,
DiagnosticReportCreated
)
VALUES
(
?,
?,
?,
?,
NOW()
)";
$qry = $this->db->query($sql, [
$diagnosticreport_uuid,
$orderheaderID,
$rdr['ServiceRequestID'],
json_encode($result)
]);
$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[] = $result;
}else{
//echo "Y";
//print_r($exist_data);
$results[] = json_decode($exist_data[0]['DiagnosticReportJSON']);
}
}
echo json_encode($results);
}
function getcategorydiagnosticreport() {
$prm = $this->sys_input;
$orderheaderID = $prm['orderheaderID'];
$sql_category = "SELECT DiagnosticReportJSON
From one_health.diagnostic_report
WHERE DiagnosticReportT_orderHeaderID = ?
AND DiagnosticReportIsActive = 'Y'
";
$sql_category_report = $this->db->query($sql_category,[$orderheaderID]);
if (!$sql_category_report) {
$last_qry = $this->db->last_query();
$error = array(
"message" => $this->db->error()["message"],
"sql" => $last_qry
);
$this->sys_error_db($error);
exit;
}
$exist_datas = $sql_category_report->result_array();
// echo json_encode($exist_data);
$exist_data = json_decode($exist_datas, true);
// Loop through each object in the array
foreach ($exist_data as $data) {
// Extract the DiagnosticReportJSON string
$diagnosticReportJSON = $data['DiagnosticReportJSON'];
// Parse the DiagnosticReportJSON string
$diagnosticReport = json_decode($diagnosticReportJSON, true);
// Access properties within the DiagnosticReportJSON
$fullUrl = $diagnosticReport['fullUrl'];
$resourceType = $diagnosticReport['resource']['resourceType'];
// ... access other properties as needed
// Print or use the extracted data
echo "Full URL: $fullUrl, Resource Type: $resourceType <br>";
}
// for ($i=0; $i < count($exist_data); $i++) {
// $datas = json_decode(json_encode($exist_data[$i]['DiagnosticReportJSON']));
// $encode = $datas;
// $referenceValue = $datas['resource']['basedOn']['reference'];
// }
exit;
}
}
?>