393 lines
17 KiB
PHP
393 lines
17 KiB
PHP
<?php
|
|
class Specimen extends MY_Controller
|
|
{
|
|
var $db;
|
|
function __construct()
|
|
{
|
|
parent::__construct();
|
|
$this->load->library('Satusehat');
|
|
}
|
|
|
|
function index()
|
|
{
|
|
echo "Satu Sehat Spesimen";
|
|
}
|
|
|
|
function getspecimen()
|
|
{
|
|
try {
|
|
$prm = $this->sys_input;
|
|
$orderheaderID = $prm['orderheaderID'];
|
|
|
|
//cek db one_healt spesimen sudah ada atau belum
|
|
$sql = "SELECT *
|
|
FROM one_health.specimen
|
|
WHERE SpecimentT_OrderHeaderID = ?
|
|
AND SpecimenIsActive = '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_cek = $qry->result_array();
|
|
|
|
//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_OrderSampleID by T_OrderHeaderID
|
|
$T_OrderSampleID = "";
|
|
$sql_get_sampleID = "SELECT T_OrderSampleID
|
|
FROM t_ordersample
|
|
WHERE
|
|
T_OrderSampleIsActive = 'Y'
|
|
AND T_OrderSampleT_OrderHeaderID = $orderheaderID";
|
|
|
|
$qry_sampleID = $this->db->query($sql_get_sampleID, []);
|
|
$last_qry = $this->db->last_query();
|
|
|
|
if (!$qry_sampleID) {
|
|
$error = array(
|
|
"message" => $this->db->error()["message"],
|
|
"sql" => $last_qry
|
|
);
|
|
$this->sys_error_db($error);
|
|
exit;
|
|
}
|
|
|
|
$T_OrderSampleID = $qry_sampleID->result_array()[0]['T_OrderSampleID'];
|
|
|
|
if (count($result_cek) == 0) {
|
|
//blm ada data di one_helath makan diinsertkan
|
|
|
|
// $spesimenJSON = [];
|
|
|
|
// get data for looping
|
|
$sql_data_spesimen = "SELECT M_PatientName,
|
|
T_OrderSampleID,
|
|
T_OrderHeaderID,
|
|
T_OrderSampleReceiveDate,
|
|
T_OrderSampleReceiveTime,
|
|
CONCAT(T_OrderSampleReceiveDate,' ',T_OrderSampleReceiveTime) as collectedDateTime,
|
|
CONCAT(T_OrderSampleReceiveDate,' ',T_OrderSampleReceiveTime) as collectedDateTimeFormat,
|
|
T_OrderDetailID,
|
|
T_OrderSampleSamplingDate,
|
|
T_OrderSampleSamplingTime,
|
|
CONCAT(T_OrderSampleSamplingDate,' ',T_OrderSampleSamplingTime) as receivedTime,
|
|
DATE_FORMAT(CONCAT(T_OrderSampleSamplingDate,' ',T_OrderSampleSamplingTime), '%Y-%m-%dT%H:%i:%s+00:00') as receivedTimeFormat,
|
|
OHPatientMapIHSNumber,
|
|
OHSPecimenMapTypeSystem,
|
|
OHSPecimenMapTypeCode,
|
|
OHSPecimenMapTypeDisplay,
|
|
OHSPecimenMapCollectionMethodeSystem,
|
|
OHSPecimenMapCollectionMethodeCode,
|
|
OHSPecimenMapCollectionMethodeDisplay,
|
|
T_OrderDetailT_TestSasCode as sas_code
|
|
from t_orderheader
|
|
join t_orderdetail
|
|
ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
|
|
AND T_OrderDetailIsActive = 'Y'
|
|
AND T_OrderHeaderID = $orderheaderID
|
|
join t_test
|
|
ON T_OrderDetailT_TestID = T_TestID
|
|
AND T_TestIsActive = 'Y'
|
|
AND T_TestIsResult = 'Y'
|
|
join t_ordersample
|
|
on T_OrderHeaderID = T_OrderSampleT_OrderHeaderID
|
|
AND T_OrderSampleIsActive = 'Y'
|
|
join t_sampletype
|
|
ON T_OrderSampleT_SampleTypeID = T_SampleTypeID
|
|
AND T_SampleTypeIsActive = 'Y'
|
|
join m_patient
|
|
on T_OrderHeaderM_PatientID = M_PatientID
|
|
AND T_OrderHeaderIsActive = 'Y'
|
|
AND M_PatientIsActive = 'Y'
|
|
LEFT JOIN one_health.oh_patient_map
|
|
ON T_OrderHeaderM_PatientID = OHPatientMapM_PatientID
|
|
AND OHPatientMapIsActive = 'Y'
|
|
LEFT JOIN one_health.oh_specimen_map
|
|
ON T_SampleTypeID = OHSPecimenMapT_SampleTypeID
|
|
AND OHSPecimenMapIsActive = 'Y'
|
|
GROUP BY T_OrderSampleID";
|
|
|
|
$qry_data_spesimen = $this->db->query($sql_data_spesimen);
|
|
|
|
$last_qry = $this->db->last_query();
|
|
|
|
if (!$qry_data_spesimen) {
|
|
$error = array(
|
|
"message" => $this->db->error()["message"],
|
|
"sql" => $last_qry
|
|
);
|
|
$this->sys_error_db($error);
|
|
exit;
|
|
}
|
|
|
|
$result_data_spesimen = $qry_data_spesimen->result_array();
|
|
|
|
// ServiceUUID
|
|
// Berdasarkan t_sampletype dari T_OrderDetailID atau anakannya
|
|
|
|
// foreach ($result_data_spesimen as $key => $vx) {
|
|
// $spesimenJSON[] = [
|
|
// "fullUrl" => "urn:uuid:{$this->satusehat->gen_uuid()}",
|
|
// "resource" => [
|
|
// "resourceType" => "Specimen",
|
|
// "identifier" => [
|
|
// "system" => "http://sys-ids.kemkes.go.id/specimen/$organizationID",
|
|
// "value" => $vx['T_OrderSampleID'],
|
|
// "assigner" => [
|
|
// "reference" => "Organization/$organizationID"
|
|
// ]
|
|
// ],
|
|
// "status" => "available",
|
|
// "type" => [
|
|
// "coding" => [
|
|
// "system" => $vx['OHSPecimenMapTypeSystem'],
|
|
// "code" => $vx['OHSPecimenMapTypeCode'],
|
|
// "display" => $vx['OHSPecimenMapTypeDisplay']
|
|
// ]
|
|
// ],
|
|
// "collection" => [
|
|
// "method" => [
|
|
// "coding" => [
|
|
// "system" => $vx['OHSPecimenMapCollectionMethodeSystem'],
|
|
// "code" => $vx['OHSPecimenMapCollectionMethodeCode'],
|
|
// "display" => $vx['OHSPecimenMapCollectionMethodeDisplay']
|
|
// ]
|
|
// ],
|
|
// "collectedDateTime" => $vx['collectedDateTimeFormat']
|
|
// ],
|
|
// "subject" => [
|
|
// "reference" => "Patient/{$vx['OHPatientMapIHSNumber']}",
|
|
// "display" => $vx['M_PatientName']
|
|
// ],
|
|
// "request" => [
|
|
// "reference" => $vx['ServiceRequestUUID']
|
|
// ],
|
|
// "receivedTime" => $vx['receivedTimeFormat']
|
|
// ],
|
|
// "request" => [
|
|
// "method" => "POST",
|
|
// "url" => "Specimen"
|
|
// ],
|
|
// ];
|
|
// }
|
|
|
|
// // insert json looping
|
|
// $sql = "INSERT INTO one_health.specimen
|
|
// (
|
|
// SpecimenUUID,
|
|
// SpecimentT_OrderHeaderID,
|
|
// SpecimentT_OrderSampleID,
|
|
// SpecimenJSON,
|
|
// SpecimenCreated
|
|
// )
|
|
// VALUES
|
|
// (
|
|
// ?,
|
|
// ?,
|
|
// ?,
|
|
// ?,
|
|
// NOW()
|
|
// )";
|
|
// $qry = $this->db->query($sql, [
|
|
// $this->satusehat->gen_uuid(),
|
|
// $orderheaderID,
|
|
// $T_OrderSampleID,
|
|
// json_encode($spesimenJSON)
|
|
// ]);
|
|
// $last_qry = $this->db->last_query();
|
|
|
|
// if (!$qry) {
|
|
// $error = array(
|
|
// "message" => $this->db->error()["message"],
|
|
// "sql" => $last_qry
|
|
// );
|
|
// $this->sys_error_db($error);
|
|
// exit;
|
|
// }
|
|
|
|
$spesimenJSON = [];
|
|
|
|
$receivedTime = "";
|
|
|
|
$fullUrl = [];
|
|
$identifier = [];
|
|
$typeCoding = [];
|
|
$collectionMethodCoding = [];
|
|
$collectedDateTime = "";
|
|
$resourceSubject = [];
|
|
$responseRequest = [];
|
|
//echo count($result_data_spesimen);
|
|
$results = [];
|
|
foreach ($result_data_spesimen as $key => $vx) {
|
|
$sql = "SELECT IFNULL(ServiceRequestUUID,'') as ServiceRequestUUID
|
|
FROM t_orderdetail
|
|
LEFT JOIN one_health.service_request ON ServiceRequestT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND
|
|
ServiceRequestT_OrderDetailID = T_OrderDetailID
|
|
WHERE
|
|
T_OrderDetailT_OrderHeaderID = ? AND
|
|
T_OrderDetailIsActive = 'Y' AND
|
|
T_OrderDetailT_TestSasCode = LEFT(?,8)
|
|
LIMIT 1";
|
|
$qry_data_service_request = $this->db->query($sql,[$orderheaderID,$vx['sas_code']]);
|
|
|
|
//echo $this->db->last_query();
|
|
if (!$qry_data_service_request) {
|
|
$last_qry = $this->db->last_query();
|
|
$error = array(
|
|
"message" => $this->db->error()["message"],
|
|
"sql" => $last_qry
|
|
);
|
|
$this->sys_error_db($error);
|
|
exit;
|
|
}
|
|
|
|
$data_service_request = $qry_data_service_request->row_array();
|
|
|
|
$spesimenJSON = [
|
|
"fullUrl" => "urn:uuid:{$this->satusehat->gen_uuid()}",
|
|
"resource" => [
|
|
"resourceType" => "Specimen",
|
|
"identifier" => [
|
|
[
|
|
"system" => "http://sys-ids.kemkes.go.id/specimen/$organizationID",
|
|
"value" => $vx['T_OrderSampleID'],
|
|
"assigner" => [
|
|
"reference" => "Organization/$organizationID"
|
|
],
|
|
]
|
|
],
|
|
"status" => "available",
|
|
"type" => [
|
|
"coding" => [
|
|
[
|
|
"system" => $vx['OHSPecimenMapTypeSystem'],
|
|
"code" => $vx['OHSPecimenMapTypeCode'],
|
|
"display" => $vx['OHSPecimenMapTypeDisplay']
|
|
]
|
|
]
|
|
],
|
|
"collection" => [
|
|
"method" => [
|
|
"coding" => [
|
|
[
|
|
"system" => $vx['OHSPecimenMapCollectionMethodeSystem'],
|
|
"code" => $vx['OHSPecimenMapCollectionMethodeCode'],
|
|
"display" => $vx['OHSPecimenMapCollectionMethodeDisplay']
|
|
]
|
|
]
|
|
],
|
|
"collectedDateTime" => date('c', strtotime($vx['collectedDateTime']))
|
|
],
|
|
"subject" => [
|
|
"reference" => "Patient/{$vx['OHPatientMapIHSNumber']}",
|
|
"display" => $vx['M_PatientName']
|
|
],
|
|
"request" => [
|
|
[
|
|
"reference" => $data_service_request['ServiceRequestUUID']
|
|
]
|
|
],
|
|
"receivedTime" => date('c', strtotime($vx['receivedTime']))
|
|
],
|
|
"request" => [
|
|
"method" => "POST",
|
|
"url" => "Specimen"
|
|
],
|
|
];
|
|
|
|
$results[] = $spesimenJSON;
|
|
|
|
$sql = "INSERT INTO one_health.specimen
|
|
(
|
|
SpecimenUUID,
|
|
SpecimentT_OrderHeaderID,
|
|
SpecimentT_OrderSampleID,
|
|
SpecimenJSON,
|
|
SpecimenCreated
|
|
)
|
|
VALUES
|
|
(
|
|
?,
|
|
?,
|
|
?,
|
|
?,
|
|
NOW()
|
|
)";
|
|
$qry = $this->db->query($sql, [
|
|
$this->satusehat->gen_uuid(),
|
|
$orderheaderID,
|
|
$vx['T_OrderSampleID'],
|
|
json_encode($spesimenJSON)
|
|
]);
|
|
$last_qry = $this->db->last_query();
|
|
|
|
if (!$qry) {
|
|
$error = array(
|
|
"message" => $this->db->error()["message"],
|
|
"sql" => $last_qry
|
|
);
|
|
$this->sys_error_db($error);
|
|
exit;
|
|
}
|
|
|
|
}
|
|
|
|
// $spesimenJSON['fullUrl'] = $fullUrl;
|
|
// $spesimenJSON['resource']['resourceType'] = "Specimen";
|
|
// $spesimenJSON['resource']['identifier'] = $identifier;
|
|
// $spesimenJSON['resource']['status'] = "available";
|
|
// $spesimenJSON['resource']['type']['coding'] = $typeCoding;
|
|
// $spesimenJSON['resource']['collection']['method']['coding'] = $collectionMethodCoding;
|
|
// $spesimenJSON['resource']['collection']['method']['collectedDateTime'] = $collectedDateTime;
|
|
// $spesimenJSON['resource']['subject'] = $resourceSubject;
|
|
// $spesimenJSON['resource']['request'] = $responseRequest;
|
|
// $spesimenJSON['resource']['receivedTime'] = $receivedTime;
|
|
// $spesimenJSON['request'] = [
|
|
// "method" => "POST",
|
|
// "url" => "Specimen"
|
|
// ];
|
|
|
|
// insert json looping
|
|
|
|
echo json_encode($results);
|
|
|
|
// echo $sql_data_spesimen;
|
|
} else {
|
|
//sudah ada data di one_helath makan langsung di returnkan jsonya ;
|
|
echo $result_cek[0]['SpecimenJSON'];
|
|
}
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
}
|