467 lines
22 KiB
PHP
467 lines
22 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 gettestnamediagnosticreport() {
|
|
$prm = $this->sys_input;
|
|
try {
|
|
$orderheaderID = $prm['orderheaderID'];
|
|
|
|
$sql_uuid = "SELECT DiagnosticReportJSON
|
|
From one_health.diagnostic_report
|
|
WHERE DiagnosticReportT_orderHeaderID = ?
|
|
AND DiagnosticReportIsActive = 'Y'
|
|
";
|
|
|
|
$sql_uuid_report = $this->db->query($sql_uuid,[$orderheaderID]);
|
|
if (!$sql_uuid_report) {
|
|
$last_qry = $this->db->last_query();
|
|
$error = array(
|
|
"message" => $this->db->error()["message"],
|
|
"sql" => $last_qry
|
|
);
|
|
$this->sys_error_db($error);
|
|
exit;
|
|
}
|
|
$exist_data = $sql_uuid_report->result_array();
|
|
|
|
$result_arr = [];
|
|
for ($i=0; $i < count($exist_data); $i++) {
|
|
$datas = json_decode(json_encode($exist_data[$i]['DiagnosticReportJSON']));
|
|
$data = json_decode($datas, true);
|
|
$ref = $data['resource']['basedOn'][0]['reference'];
|
|
// $result_arr[$i] = $ref;
|
|
|
|
$sql_test_name = "SELECT T_OrderDetailT_TestName as TestName
|
|
From one_health.service_request
|
|
JOIN one_aditya.t_orderdetail
|
|
ON ServiceRequestT_OrderDetailID = T_OrderDetailID
|
|
AND T_OrderDetailIsActive = 'Y'
|
|
WHERE ServiceRequestUUID = ?
|
|
AND ServiceRequestIsActive= 'Y'
|
|
";
|
|
$uuid = substr($ref, strlen("urn:uuid:"));
|
|
$sql_test_name_report = $this->db->query($sql_test_name,[$uuid]);
|
|
|
|
// Periksa apakah hasil query tidak kosong sebelum mencoba mengakses indeks 0
|
|
if ($sql_test_name_report->num_rows() > 0) {
|
|
$exist_name = $sql_test_name_report->result_array();
|
|
$result_arr[$i] = $exist_name[0];
|
|
} else {
|
|
echo "Data tidak ditemukan";
|
|
}
|
|
}
|
|
print_r(json_encode($result_arr)) ;
|
|
}
|
|
catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
|
|
function updatediagnosticreport()
|
|
{
|
|
try {
|
|
$prm = $this->sys_input;
|
|
$labNumber = $prm['lab_number'];//diambil dari identifier[0]->value
|
|
$sql = "SELECT *
|
|
FROM t_orderheader
|
|
WHERE
|
|
T_OrderHeaderLabNumber = ?";
|
|
$qry = $this->db->query($sql, [$labNumber]);
|
|
$last_qry = $this->db->last_query();
|
|
|
|
if (!$qry) {
|
|
$error = array(
|
|
"message" => $this->db->error()["message"],
|
|
"sql" => $last_qry
|
|
);
|
|
$this->sys_error_db($error);
|
|
exit;
|
|
}
|
|
$row_order = $qry->row_array();
|
|
$orderheaderID = $row_order['T_OrderHeaderID'];
|
|
$uuid_servicerequest = $prm['service_request_uuid'];//diambil dari base_on[0]->reference
|
|
$json_data = json_encode($prm['json_data']);
|
|
$status = $prm['status'];
|
|
$sql = "SELECT *
|
|
FROM one_health.service_request
|
|
WHERE
|
|
ServiceRequestUUID = ?";
|
|
$qry = $this->db->query($sql, [$uuid_servicerequest]);
|
|
$last_qry = $this->db->last_query();
|
|
|
|
if (!$qry) {
|
|
$error = array(
|
|
"message" => $this->db->error()["message"],
|
|
"sql" => $last_qry
|
|
);
|
|
$this->sys_error_db($error);
|
|
exit;
|
|
}
|
|
|
|
$row_service_request = $qry->row_array();
|
|
|
|
$sql = "UPDATE one_health.diagnostic_report SET
|
|
DiagnosticReportJSON = ?,
|
|
DiagnosticReportStatus = ?
|
|
WHERE
|
|
DiagnosticReportT_orderHeaderID = ? AND
|
|
DiagnosticReportServiceRequestID = ? AND
|
|
DiagnosticReportIsActive = 'Y'";
|
|
$qry = $this->db->query($sql, [$json_data, $status, $orderheaderID,$row_service_request['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;
|
|
}
|
|
|
|
$sql = "SELECT * FROM one_health.diagnostic_report
|
|
WHERE DiagnosticReportT_orderHeaderID = ?
|
|
AND DiagnosticReportIsActive = 'Y'";
|
|
$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;
|
|
}
|
|
$result = $qry->row_array();
|
|
echo json_encode($result['DiagnosticReportJSON']);
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
}
|
|
?>
|