Files
BE_CPONE/application/controllers/one-doctor/Uploader.php
2026-04-27 10:26:26 +07:00

3171 lines
117 KiB
PHP

<?php
class Uploader extends MY_Controller
{
var $db;
// var $APP_DOCTOR_API = "http://devbandungraya.aplikasi.web.id/one-api/app_doctor/Receiveruploadlog/";
var $max_limit = 20;
public function index()
{
echo "DOKTER API";
}
public function __construct()
{
parent::__construct();
// db wilayah contoh surabaya
// $this->db = $this->load->database("regional", true);
// string database
$this->db_str_doctor = 'one_doctor';
$this->startVt = chr(0x0b);
$this->stopFs = chr(0x1c);
$this->cr = chr(0x0d);
}
public function getRegionalIPAddress()
{
$sql_get = "SELECT S_SystemIPAddressRegional
FROM one.conf_systems
WHERE S_SystemsIsActive = 'Y'";
$qry = $this->db->query($sql_get);
if(!$qry){
$this->db->trans_rollback();
$this->sys_error_db("get ip regional failed", $this->db);
exit;
}
$data = $qry->result_array();
return $data[0]['S_SystemIPAddressRegional'];
}
// api
// get historical
function get_history($id)
{
// cek dulu T_OrderHeaderAddOnReadyPrint harus Y
$data = [];
// $sql_cek_validation_print = "select T_OrderHeaderAddOnValidationDone, T_OrderHeaderAddOnReadyPrint,
// T_OrderHeaderAddOnT_OrderHeaderID
// from t_orderheaderaddon
// where T_OrderHeaderAddOnT_OrderHeaderID = ?
// AND T_OrderHeaderAddOnReadyPrint = 'Y'";
$sql_cek_validation_print = "select
T_OrderHeaderAddOnT_OrderHeaderID as xid
from t_orderheaderaddon
where T_OrderHeaderAddOnT_OrderHeaderID = ?
AND
(
T_OrderHeaderAddOnValidationDone = 'Y'
OR T_OrderHeaderAddOnValidationDone = 'P'
)
UNION
select T_OrderHeaderID as xid
from t_orderheader
join t_orderdetail
ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
AND T_OrderDetailIsActive = 'Y'
AND T_OrderHeaderID = ?
AND T_OrderDetailValidation = 'Y'";
$query_validation_print = $this->db->query($sql_cek_validation_print, [
$id,
$id
]);
if(!$query_validation_print){
$this->db->trans_rollback();
$this->sys_error_db("get validation failed", $this->db);
exit;
}
$rows_validation = $query_validation_print->result_array();
if(count($rows_validation) == 0){
// $this->db->trans_rollback();
// $this->sys_error('Tidak ada data');
// exit;
return $data;
}
else
{
$sql_get_patient_doktor = "SELECT T_OrderHeaderM_PatientID,
T_OrderHeaderSenderM_DoctorID
FROM t_orderheader
WHERE T_OrderHeaderIsActive = 'Y'
AND T_OrderHeaderID = ?";
$query_patient_doktor = $this->db->query($sql_get_patient_doktor, [
$id
]);
if(!$query_patient_doktor){
$this->db->trans_rollback();
$this->sys_error_db("get t_order failed", $this->db);
exit;
}
$rows_patient_doktor = $query_patient_doktor->result_array();
if(count($rows_patient_doktor) == 0){
$this->db->trans_rollback();
$this->sys_error('Order Tidak Ketemu');
exit;
}
$sql_hist = "
select
IFNULL(T_OrderHeaderDate,'') as T_OrderHeaderDate,
IFNULL(T_OrderDetailT_TestID,'') as T_OrderDetailT_TestID,
IFNULL(T_OrderDetailResult,'') as T_OrderDetailResult
from t_orderheader
join t_orderdetail
ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
WHERE T_OrderHeaderIsActive = 'Y'
AND T_OrderHeaderM_PatientID = ?
AND T_OrderHeaderSenderM_DoctorID = ?
AND T_OrderHeaderID <= ?";
$query_hist = $this->db->query($sql_hist, [
$rows_patient_doktor[0]['T_OrderHeaderM_PatientID'],
$rows_patient_doktor[0]['T_OrderHeaderSenderM_DoctorID'],
$id
]);
if(!$query_hist){
$this->db->trans_rollback();
$this->sys_error_db("get t_order failed", $this->db);
exit;
}
$rows_chart = $query_hist->result_array();
if(count($rows_chart) == 0){
$this->db->trans_rollback();
$this->sys_error('History Tidak Ada');
exit;
}
foreach ($rows_chart as $elem)
{
if(!empty($elem['T_OrderDetailResult'])){
$data[$elem['T_OrderDetailT_TestID']][] =
[
"date" => $elem['T_OrderHeaderDate'] ,
"value" => $elem['T_OrderDetailResult']
];
}
}
// $data = array_values($data);
// print_r($data);
return $data;
// echo json_encode(
// array(
// "status"=>"OK",
// "data"=> $data,
// ),
// );
}
}
function get_historyv2($id)
{
// cek dulu T_OrderHeaderAddOnReadyPrint harus Y
$data = [];
// $sql_cek_validation_print = "select T_OrderHeaderAddOnValidationDone, T_OrderHeaderAddOnReadyPrint,
// T_OrderHeaderAddOnT_OrderHeaderID
// from t_orderheaderaddon
// where T_OrderHeaderAddOnT_OrderHeaderID = ?
// AND T_OrderHeaderAddOnReadyPrint = 'Y'";
$sql_cek_validation_print = "select
T_OrderHeaderAddOnT_OrderHeaderID as xid
from t_orderheaderaddon
where T_OrderHeaderAddOnT_OrderHeaderID = ?
AND
(
T_OrderHeaderAddOnValidationDone = 'Y'
OR T_OrderHeaderAddOnValidationDone = 'P'
)
UNION
select T_OrderHeaderID as xid
from t_orderheader
join t_orderdetail
ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
AND T_OrderDetailIsActive = 'Y'
AND T_OrderHeaderID = ?
AND T_OrderDetailValidation = 'Y'";
$query_validation_print = $this->db->query($sql_cek_validation_print, [
$id,
$id
]);
if(!$query_validation_print){
$this->db->trans_rollback();
$this->sys_error_db("get validation failed", $this->db);
exit;
}
$rows_validation = $query_validation_print->result_array();
if(count($rows_validation) == 0){
// $this->db->trans_rollback();
// $this->sys_error('Tidak ada data');
// exit;
return $data;
}
else
{
$sql_get_patient_doktor = "SELECT T_OrderHeaderM_PatientID,
T_OrderHeaderSenderM_DoctorID
FROM t_orderheader
WHERE T_OrderHeaderIsActive = 'Y'
AND T_OrderHeaderID = ?";
$query_patient_doktor = $this->db->query($sql_get_patient_doktor, [
$id
]);
if(!$query_patient_doktor){
$this->db->trans_rollback();
$this->sys_error_db("get t_order failed", $this->db);
exit;
}
$rows_patient_doktor = $query_patient_doktor->result_array();
if(count($rows_patient_doktor) == 0){
$this->db->trans_rollback();
$this->sys_error('Order Tidak Ketemu');
exit;
}
$sql_hist = "
select
IFNULL(T_OrderHeaderDate,'') as T_OrderHeaderDate,
IFNULL(T_OrderDetailT_TestID,'') as T_OrderDetailT_TestID,
IFNULL(T_OrderDetailResult,'') as T_OrderDetailResult,
T_TestNat_TestID
from t_orderheader
join t_orderdetail
ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
join t_test
ON T_OrderDetailT_TestID = T_TestID
WHERE T_OrderHeaderIsActive = 'Y'
AND T_OrderHeaderM_PatientID = ?
AND T_OrderHeaderSenderM_DoctorID = ?
AND T_OrderHeaderID <= ?";
$query_hist = $this->db->query($sql_hist, [
$rows_patient_doktor[0]['T_OrderHeaderM_PatientID'],
$rows_patient_doktor[0]['T_OrderHeaderSenderM_DoctorID'],
$id
]);
if(!$query_hist){
$this->db->trans_rollback();
$this->sys_error_db("get t_order failed", $this->db);
exit;
}
$rows_chart = $query_hist->result_array();
if(count($rows_chart) == 0){
$this->db->trans_rollback();
$this->sys_error('History Tidak Ada');
exit;
}
foreach ($rows_chart as $elem)
{
if(!empty($elem['T_OrderDetailResult'])){
$data[$elem['T_TestNat_TestID']][] =
[
"date" => $elem['T_OrderHeaderDate'] ,
"value" => $elem['T_OrderDetailResult']
];
}
}
// $data = array_values($data);
// print_r($data);
return $data;
// echo json_encode(
// array(
// "status"=>"OK",
// "data"=> $data,
// ),
// );
}
}
function get_historical_result_by_t_orderheader_id($id)
{
// if ( ! $this->isLogin ) {
// echo json_encode(
// array("status"=>"ERR", "message"=> "Invalid Token")
// );
// exit;
// }
// lama
// $sql_cek_validation_print = "select T_OrderHeaderAddOnValidationDone, T_OrderHeaderAddOnReadyPrint,
// T_OrderHeaderAddOnT_OrderHeaderID
// from t_orderheaderaddon
// where T_OrderHeaderAddOnT_OrderHeaderID = ?
// AND T_OrderHeaderAddOnReadyPrint = 'Y'";
$sql_cek_validation_print = "select
T_OrderHeaderAddOnT_OrderHeaderID as xid
from t_orderheaderaddon
where T_OrderHeaderAddOnT_OrderHeaderID = ?
AND
(
T_OrderHeaderAddOnValidationDone = 'Y'
OR T_OrderHeaderAddOnValidationDone = 'P'
)
UNION
select T_OrderHeaderID as xid
from t_orderheader
join t_orderdetail
ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
AND T_OrderDetailIsActive = 'Y'
AND T_OrderHeaderID = ?
AND T_OrderDetailValidation = 'Y'";
$query_validation_print = $this->db->query($sql_cek_validation_print, [
$id,
$id
]);
if(!$query_validation_print){
$this->db->trans_rollback();
$this->sys_error_db("get validation failed", $this->db);
exit;
}
$rows_validation = $query_validation_print->result_array();
if(count($rows_validation) == 0){
// $this->db->trans_rollback();
// $this->sys_error('Tidak ada data');
// exit;
// return $data;
echo json_encode(
array(
"status"=>"OK",
"message" => "Data belum bisa ditampilkan",
"data_header" => [],
"data"=> [],
));
}
else
{
$sql_get_t_order = "select
concat(M_TitleName, ' ',
ifnull(M_PatientPrefix,' '),
M_PatientName,
ifnull(M_PatientSuffix,'')
)
as PatientFullName,
IFNULL(T_OrderHeaderLabNumberExt,'') as T_OrderHeaderLabNumberExt,
IFNULL(DATE_FORMAT(T_OrderHeaderDate,'%d-%m-%Y %H:%i:%s'),'') as T_OrderHeaderDate,
IFNULL(T_OrderHeaderID,'') as T_OrderHeaderID,
IFNULL(T_OrderHeaderSenderM_DoctorID,'') as T_OrderHeaderSenderM_DoctorID,
'' as M_BranchID,
'' as M_BranchCode
from t_orderheader
join m_patient on T_OrderHeaderID = ?
and T_OrderHeaderM_PatientID = M_PatientID
join m_title on M_PatientM_TitleID = M_TitleID";
$query_t_order = $this->db->query($sql_get_t_order, [
$id
]);
if(!$query_t_order){
$this->db->trans_rollback();
$this->sys_error_db("get t_order failed", $this->db);
exit;
}
$rows = $query_t_order->result_array();
if(count($rows) == 0){
$this->db->trans_rollback();
$this->sys_error('Header Tidak Ketemu');
exit;
}
$r_header = $rows[0];
$sql_get_branch = "
select IFNULL(M_BranchID,'') as M_BranchID,
IFNULL(M_BranchCode,'') as M_BranchCode
from m_branch
WHERE M_BranchIsDefault='Y'
AND M_BranchIsActive ='Y'
";
$query_m_branch = $this->db->query($sql_get_branch, [
$id
]);
if(!$query_m_branch){
$this->db->trans_rollback();
$message = $this->db->error();
$this->sys_error($message);
exit;
}
$rows = $query_m_branch->result_array();
if(count($rows) == 0){
$this->db->trans_rollback();
$this->sys_error('Cabang Tidak Ketemu');
exit;
}
$branch_id = $rows[0]['M_BranchID'];
$branch_code = $rows[0]['M_BranchCode'];
$sql_detail_periksa = "select
IFNULL(T_TestSasCode,'') as T_TestSasCode,
IFNULL(Nat_SubGroupName,'') as Nat_SubGroupName,
IFNULL(Nat_SubSubGroupName,'') as Nat_SubSubGroupName,
IFNULL(T_TestName,'') as T_TestName,
IFNULL(T_OrderDetailT_TestName,'') as T_OrderDetailT_TestName,
IFNULL(T_OrderDetailResult,'') as T_OrderDetailResult,
IFNULL(T_OrderDetailNat_UnitName,'') as T_OrderDetailNat_UnitName,
IFNULL(T_OrderDetailNormalValueNote,'') as T_OrderDetailNormalValueNote,
IFNULL(T_OrderdetailNat_MethodeName,'') as T_OrderdetailNat_MethodeName,
T_OrderDetailT_TestID,
T_TestSasCode,
T_TestIsPrintResult,
T_TestIsResult,
T_OrderDetailValidation
from t_orderheader
join m_patient
on T_OrderHeaderID = ?
and T_OrderHeaderM_PatientID = M_PatientID
join m_title
on M_PatientM_TitleID = M_TitleID
join t_orderdetail
ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
AND T_OrderDetailIsActive = 'Y'
join t_test
ON T_OrderDetailT_TestID = T_TestID
AND T_TestIsActive = 'Y'
join nat_group
ON T_TestNat_GroupID = Nat_GroupID
AND Nat_GroupIsActive = 'Y'
join nat_subgroup
ON T_TestNat_SubgroupID = Nat_SubGroupID
AND Nat_SubGroupIsActive = 'Y'
join nat_subsubgroup
ON T_TestNat_SubSubGroupID = Nat_SubSubGroupID
AND Nat_SubSubGroupIsActive = 'Y'
where T_OrderHeaderIsActive = 'Y'
order by T_TestSasCode asc";
$query_detail_periksa = $this->db->query($sql_detail_periksa, [
$id
]);
if(!$query_detail_periksa){
$this->db->trans_rollback();
$message = $this->db->error();
$this->sys_error($message);
exit;
}
// $data_m_branch =
$rows = $query_detail_periksa->result_array();
// print_r($rows);
$prev_Nat_SubGroupName = "";
$prev_Nat_SubSubGroupName = "";
$data = [];
$rows_history = $this->get_history($id);
foreach($rows as $r){
$curr_Nat_SubSubGroupName = $r['Nat_SubSubGroupName'];
if($prev_Nat_SubSubGroupName !== $curr_Nat_SubSubGroupName){
$data[] = [
"Nat_SubGroupName" => $r['Nat_SubGroupName'],
"Nat_SubSubGroupName" => $r['Nat_SubSubGroupName'],
"details" => []
];
}
$testID = $r['T_OrderDetailT_TestID'];
$curr_idx = count($data) - 1;
$data[$curr_idx]['details'][] = [
'T_TestSasCode' => $r['T_TestSasCode'],
'T_TestIsPrintResult' => $r['T_TestIsPrintResult'],
'T_TestIsResult' => $r['T_TestIsResult'],
'T_TestName' => $r['T_TestName'],
'T_OrderDetailValidation' => $r['T_OrderDetailValidation'],
'T_OrderDetailResult' => $r['T_OrderDetailResult'],
'T_OrderDetailNat_UnitName' => $r['T_OrderDetailNat_UnitName'],
'T_OrderDetailNormalValueNote' => $r['T_OrderDetailNormalValueNote'],
'T_OrderdetailNat_MethodeName'=> $r['T_OrderdetailNat_MethodeName'],
'history' => []
];
if(in_array($testID,array_keys($rows_history))){
$idx_detail = count($data[$curr_idx]['details']) - 1;
$data[$curr_idx]['details'][$idx_detail]['history'] = $rows_history[$testID];
}
$prev_Nat_SubSubGroupName = $curr_Nat_SubSubGroupName;
}
echo json_encode(
array(
"status"=>"OK",
"data_header" => [
"PatientFullName" => $r_header['PatientFullName'],
"T_OrderHeaderLabNumberExt" => $r_header['T_OrderHeaderLabNumberExt'],
"T_OrderHeaderDate" => $r_header['T_OrderHeaderDate'],
"T_OrderHeaderID" => $r_header['T_OrderHeaderID'],
"T_OrderHeaderSenderM_DoctorID" => $r_header['T_OrderHeaderSenderM_DoctorID'],
"M_BranchID" => $branch_id,
"M_BranchCode" => $branch_code,
],
"data"=> $data,
));
}
}
function get_historical_result_by_t_orderheader_idv2($id)
{
// if ( ! $this->isLogin ) {
// echo json_encode(
// array("status"=>"ERR", "message"=> "Invalid Token")
// );
// exit;
// }
// lama
// $sql_cek_validation_print = "select T_OrderHeaderAddOnValidationDone, T_OrderHeaderAddOnReadyPrint,
// T_OrderHeaderAddOnT_OrderHeaderID
// from t_orderheaderaddon
// where T_OrderHeaderAddOnT_OrderHeaderID = ?
// AND T_OrderHeaderAddOnReadyPrint = 'Y'";
$sql_cek_validation_print = "select
T_OrderHeaderAddOnT_OrderHeaderID as xid
from t_orderheaderaddon
where T_OrderHeaderAddOnT_OrderHeaderID = ?
AND
(
T_OrderHeaderAddOnValidationDone = 'Y'
OR T_OrderHeaderAddOnValidationDone = 'P'
)
UNION
select T_OrderHeaderID as xid
from t_orderheader
join t_orderdetail
ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
AND T_OrderDetailIsActive = 'Y'
AND T_OrderHeaderID = ?
AND T_OrderDetailValidation = 'Y'";
$query_validation_print = $this->db->query($sql_cek_validation_print, [
$id,
$id
]);
if(!$query_validation_print){
$this->db->trans_rollback();
$this->sys_error_db("get validation failed", $this->db);
exit;
}
$rows_validation = $query_validation_print->result_array();
if(count($rows_validation) == 0){
// $this->db->trans_rollback();
// $this->sys_error('Tidak ada data');
// exit;
// return $data;
echo json_encode(
array(
"status"=>"OK",
"message" => "Data belum bisa ditampilkan",
"data_header" => [],
"data"=> [],
));
}
else
{
$sql_get_t_order = "select
concat(M_TitleName, ' ',
ifnull(M_PatientPrefix,' '),
M_PatientName,
ifnull(M_PatientSuffix,'')
)
as PatientFullName,
IFNULL(T_OrderHeaderLabNumberExt,'') as T_OrderHeaderLabNumberExt,
IFNULL(DATE_FORMAT(T_OrderHeaderDate,'%d-%m-%Y %H:%i:%s'),'') as T_OrderHeaderDate,
IFNULL(T_OrderHeaderID,'') as T_OrderHeaderID,
IFNULL(T_OrderHeaderSenderM_DoctorID,'') as T_OrderHeaderSenderM_DoctorID,
'' as M_BranchID,
'' as M_BranchCode
from t_orderheader
join m_patient on T_OrderHeaderID = ?
and T_OrderHeaderM_PatientID = M_PatientID
join m_title on M_PatientM_TitleID = M_TitleID";
$query_t_order = $this->db->query($sql_get_t_order, [
$id
]);
if(!$query_t_order){
$this->db->trans_rollback();
$this->sys_error_db("get t_order failed", $this->db);
exit;
}
$rows = $query_t_order->result_array();
if(count($rows) == 0){
$this->db->trans_rollback();
$this->sys_error('Header Tidak Ketemu');
exit;
}
$r_header = $rows[0];
$sql_get_branch = "
select IFNULL(M_BranchID,'') as M_BranchID,
IFNULL(M_BranchCode,'') as M_BranchCode
from m_branch
WHERE M_BranchIsDefault='Y'
AND M_BranchIsActive ='Y'
";
$query_m_branch = $this->db->query($sql_get_branch, [
$id
]);
if(!$query_m_branch){
$this->db->trans_rollback();
$message = $this->db->error();
$this->sys_error($message);
exit;
}
$rows = $query_m_branch->result_array();
if(count($rows) == 0){
$this->db->trans_rollback();
$this->sys_error('Cabang Tidak Ketemu');
exit;
}
$branch_id = $rows[0]['M_BranchID'];
$branch_code = $rows[0]['M_BranchCode'];
$sql_detail_periksa = "select
IFNULL(T_TestSasCode,'') as T_TestSasCode,
IFNULL(Nat_SubGroupName,'') as Nat_SubGroupName,
IFNULL(Nat_SubSubGroupName,'') as Nat_SubSubGroupName,
IFNULL(T_TestName,'') as T_TestName,
IFNULL(T_OrderDetailT_TestName,'') as T_OrderDetailT_TestName,
IFNULL(T_OrderDetailResult,'') as T_OrderDetailResult,
IFNULL(T_OrderDetailNat_UnitName,'') as T_OrderDetailNat_UnitName,
IFNULL(T_OrderDetailNormalValueNote,'') as T_OrderDetailNormalValueNote,
IFNULL(T_OrderdetailNat_MethodeName,'') as T_OrderdetailNat_MethodeName,
T_OrderDetailT_TestID,
T_TestSasCode,
T_TestIsPrintResult,
T_TestIsResult,
T_OrderDetailValidation,
T_TestNat_TestID
from t_orderheader
join m_patient
on T_OrderHeaderID = ?
and T_OrderHeaderM_PatientID = M_PatientID
join m_title
on M_PatientM_TitleID = M_TitleID
join t_orderdetail
ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
AND T_OrderDetailIsActive = 'Y'
join t_test
ON T_OrderDetailT_TestID = T_TestID
AND T_TestIsActive = 'Y'
join nat_group
ON T_TestNat_GroupID = Nat_GroupID
AND Nat_GroupIsActive = 'Y'
join nat_subgroup
ON T_TestNat_SubgroupID = Nat_SubGroupID
AND Nat_SubGroupIsActive = 'Y'
join nat_subsubgroup
ON T_TestNat_SubSubGroupID = Nat_SubSubGroupID
AND Nat_SubSubGroupIsActive = 'Y'
where T_OrderHeaderIsActive = 'Y'
order by T_TestSasCode asc";
$query_detail_periksa = $this->db->query($sql_detail_periksa, [
$id
]);
if(!$query_detail_periksa){
$this->db->trans_rollback();
$message = $this->db->error();
$this->sys_error($message);
exit;
}
// $data_m_branch =
$rows = $query_detail_periksa->result_array();
// print_r($rows);
$prev_Nat_SubGroupName = "";
$prev_Nat_SubSubGroupName = "";
$data = [];
$rows_history = $this->get_historyv2($id);
foreach($rows as $r){
$curr_Nat_SubSubGroupName = $r['Nat_SubSubGroupName'];
if($prev_Nat_SubSubGroupName !== $curr_Nat_SubSubGroupName){
$data[] = [
"Nat_SubGroupName" => $r['Nat_SubGroupName'],
"Nat_SubSubGroupName" => $r['Nat_SubSubGroupName'],
"details" => []
];
}
$testID = $r['T_OrderDetailT_TestID'];
$natTestID = $r['T_TestNat_TestID'];
$curr_idx = count($data) - 1;
$data[$curr_idx]['details'][] = [
'T_TestSasCode' => $r['T_TestSasCode'],
'T_TestIsPrintResult' => $r['T_TestIsPrintResult'],
'T_TestIsResult' => $r['T_TestIsResult'],
'T_TestName' => $r['T_TestName'],
'T_OrderDetailValidation' => $r['T_OrderDetailValidation'],
'T_OrderDetailResult' => $r['T_OrderDetailResult'],
'T_OrderDetailNat_UnitName' => $r['T_OrderDetailNat_UnitName'],
'T_OrderDetailNormalValueNote' => $r['T_OrderDetailNormalValueNote'],
'T_OrderdetailNat_MethodeName'=> $r['T_OrderdetailNat_MethodeName'],
'history' => []
];
if(in_array($natTestID,array_keys($rows_history))){
$idx_detail = count($data[$curr_idx]['details']) - 1;
$data[$curr_idx]['details'][$idx_detail]['history'] = $rows_history[$natTestID];
}
$prev_Nat_SubSubGroupName = $curr_Nat_SubSubGroupName;
}
echo json_encode(
array(
"status"=>"OK",
"data_header" => [
"PatientFullName" => $r_header['PatientFullName'],
"T_OrderHeaderLabNumberExt" => $r_header['T_OrderHeaderLabNumberExt'],
"T_OrderHeaderDate" => $r_header['T_OrderHeaderDate'],
"T_OrderHeaderID" => $r_header['T_OrderHeaderID'],
"T_OrderHeaderSenderM_DoctorID" => $r_header['T_OrderHeaderSenderM_DoctorID'],
"M_BranchID" => $branch_id,
"M_BranchCode" => $branch_code,
],
"data"=> $data,
));
}
}
// berdasarkan t_test
function get_result_by_t_orderheader_id($id)
{
// if ( ! $this->isLogin ) {
// echo json_encode(
// array("status"=>"ERR", "message"=> "Invalid Token")
// );
// exit;
// }
// lama
// $sql_cek_validation_print = "select T_OrderHeaderAddOnValidationDone, T_OrderHeaderAddOnReadyPrint,
// T_OrderHeaderAddOnT_OrderHeaderID
// from t_orderheaderaddon
// where T_OrderHeaderAddOnT_OrderHeaderID = ?
// AND T_OrderHeaderAddOnReadyPrint = 'Y'";
$sql_cek_validation_print = "select
T_OrderHeaderAddOnT_OrderHeaderID as xid
from t_orderheaderaddon
where T_OrderHeaderAddOnT_OrderHeaderID = ?
AND
(
T_OrderHeaderAddOnValidationDone = 'Y'
OR T_OrderHeaderAddOnValidationDone = 'P'
)
UNION
select T_OrderHeaderID as xid
from t_orderheader
join t_orderdetail
ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
AND T_OrderDetailIsActive = 'Y'
AND T_OrderHeaderID = ?
AND T_OrderDetailValidation = 'Y'";
$query_validation_print = $this->db->query($sql_cek_validation_print, [
$id,
$id
]);
if(!$query_validation_print){
$this->db->trans_rollback();
$this->sys_error_db("get validation failed", $this->db);
exit;
}
$rows_validation = $query_validation_print->result_array();
if(count($rows_validation) == 0){
// $this->db->trans_rollback();
// $this->sys_error('Tidak ada data');
// exit;
// return $data;
echo json_encode(
array(
"status"=>"OK",
"message" => "Data belum bisa ditampilkan",
"data_header" => [],
"data"=> [],
));
}
else
{
$sql_get_t_order = "select
concat(M_TitleName, ' ',
ifnull(M_PatientPrefix,' '),
M_PatientName,
ifnull(M_PatientSuffix,'')
)
as PatientFullName,
IFNULL(T_OrderHeaderLabNumberExt,'') as T_OrderHeaderLabNumberExt,
IFNULL(DATE_FORMAT(T_OrderHeaderDate,'%d-%m-%Y %H:%i:%s'),'') as T_OrderHeaderDate,
IFNULL(T_OrderHeaderID,'') as T_OrderHeaderID,
IFNULL(T_OrderHeaderSenderM_DoctorID,'') as T_OrderHeaderSenderM_DoctorID,
'' as M_BranchID,
'' as M_BranchCode
from t_orderheader
join m_patient on T_OrderHeaderID = ?
and T_OrderHeaderM_PatientID = M_PatientID
join m_title on M_PatientM_TitleID = M_TitleID";
$query_t_order = $this->db->query($sql_get_t_order, [
$id
]);
if(!$query_t_order){
$this->db->trans_rollback();
$this->sys_error_db("get t_order failed", $this->db);
exit;
}
$rows = $query_t_order->result_array();
if(count($rows) == 0){
$this->db->trans_rollback();
$this->sys_error('Header Tidak Ketemu');
exit;
}
$r_header = $rows[0];
$sql_get_branch = "
select IFNULL(M_BranchID,'') as M_BranchID,
IFNULL(M_BranchCode,'') as M_BranchCode
from m_branch
WHERE M_BranchIsDefault='Y'
AND M_BranchIsActive ='Y'
";
$query_m_branch = $this->db->query($sql_get_branch, [
$id
]);
if(!$query_m_branch){
$this->db->trans_rollback();
$message = $this->db->error();
$this->sys_error($message);
exit;
}
$rows = $query_m_branch->result_array();
if(count($rows) == 0){
$this->db->trans_rollback();
$this->sys_error('Cabang Tidak Ketemu');
exit;
}
$branch_id = $rows[0]['M_BranchID'];
$branch_code = $rows[0]['M_BranchCode'];
// if(fn_itf_isnumber(T_OrderDetailResult) = '0', T_OrderDetailResult , fn_rpt_format_number(T_OrderDetailResult) ) as T_OrderDetailResult,
// old
// $sql_detail_periksa = "select
// IFNULL(T_TestSasCode,'') as T_TestSasCode,
// IFNULL(Nat_SubGroupName,'') as Nat_SubGroupName,
// IFNULL(Nat_SubSubGroupName,'') as Nat_SubSubGroupName,
// IFNULL(T_TestName,'') as T_TestName,
// IFNULL(T_OrderDetailT_TestName,'') as T_OrderDetailT_TestName,
// IFNULL(T_OrderDetailResult,'') as T_OrderDetailResult,
// IFNULL(T_OrderDetailNat_UnitName,'') as T_OrderDetailNat_UnitName,
// IFNULL(T_OrderDetailNormalValueNote,'') as T_OrderDetailNormalValueNote,
// IFNULL(T_OrderdetailNat_MethodeName,'') as T_OrderdetailNat_MethodeName,
// T_OrderDetailT_TestID,
// IFNULL(T_TestIsPrintResult,'') as T_TestIsPrintResult,
// IFNULL(T_TestIsResult,'') as T_TestIsResult,
// IFNULL(T_OrderDetailValidation,'') as T_OrderDetailValidation,
// T_TestID
// from t_orderheader
// join m_patient
// on T_OrderHeaderID = ?
// and T_OrderHeaderM_PatientID = M_PatientID
// join m_title
// on M_PatientM_TitleID = M_TitleID
// join t_orderdetail
// ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
// AND T_OrderDetailIsActive = 'Y'
// join t_test
// ON T_OrderDetailT_TestID = T_TestID
// AND T_TestIsActive = 'Y'
// join nat_group
// ON T_TestNat_GroupID = Nat_GroupID
// AND Nat_GroupIsActive = 'Y'
// join nat_subgroup
// ON T_TestNat_SubgroupID = Nat_SubGroupID
// AND Nat_SubGroupIsActive = 'Y'
// join nat_subsubgroup
// ON T_TestNat_SubSubGroupID = Nat_SubSubGroupID
// AND Nat_SubSubGroupIsActive = 'Y'
// where T_OrderHeaderIsActive = 'Y'
// order by T_TestSasCode asc";
$sql_detail_periksa = "select
IFNULL(T_TestSasCode,'') as T_TestSasCode,
IFNULL(Nat_SubGroupName,'') as Nat_SubGroupName,
IFNULL(Nat_SubSubGroupName,'') as Nat_SubSubGroupName,
IFNULL(T_TestName,'') as T_TestName,
IFNULL(T_OrderDetailT_TestName,'') as T_OrderDetailT_TestName,
if(fn_itf_isnumber(T_OrderDetailResult) = '0', T_OrderDetailResult , fn_rpt_format_number(T_OrderDetailResult) ) as T_OrderDetailResult,
IFNULL(T_OrderDetailNat_UnitName,'') as T_OrderDetailNat_UnitName,
IFNULL(T_OrderDetailNormalValueNote,'') as T_OrderDetailNormalValueNote,
IFNULL(T_OrderdetailNat_MethodeName,'') as T_OrderdetailNat_MethodeName,
T_OrderDetailT_TestID,
IFNULL(T_TestIsPrintResult,'') as T_TestIsPrintResult,
IFNULL(T_TestIsResult,'') as T_TestIsResult,
IFNULL(T_OrderDetailValidation,'') as T_OrderDetailValidation,
T_TestID,
T_OrderDetailResultFlag
from t_orderheader
join m_patient
on T_OrderHeaderID = ?
and T_OrderHeaderM_PatientID = M_PatientID
join m_title
on M_PatientM_TitleID = M_TitleID
join t_orderdetail
ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
AND T_OrderDetailIsActive = 'Y'
join t_test
ON T_OrderDetailT_TestID = T_TestID
AND T_TestIsActive = 'Y'
join nat_test
ON T_TestNat_TestID = Nat_TestID
join nat_group
ON Nat_TestNat_GroupID = Nat_GroupID
AND Nat_GroupIsActive = 'Y'
join nat_subgroup
ON Nat_TestNat_SubgroupID = Nat_SubGroupID
AND Nat_SubGroupIsActive = 'Y'
join nat_subsubgroup
ON Nat_TestNat_SubSubGroupID = Nat_SubSubGroupID
AND Nat_SubSubGroupIsActive = 'Y'
JOIN $this->db_str_doctor.request_upload
ON T_OrderHeaderID = RequestUploadT_OrderHeaderID
AND RequestUploadIsUploaded = 'N'
AND RequestUploadIsActive = 'Y'
where T_OrderHeaderIsActive = 'Y'
order by T_TestSasCode asc";
$query_detail_periksa = $this->db->query($sql_detail_periksa, [
$id
]);
if(!$query_detail_periksa){
$this->db->trans_rollback();
$message = $this->db->error();
$this->sys_error($message);
exit;
}
// $data_m_branch =
$rows = $query_detail_periksa->result_array();
// print_r($rows);
$prev_Nat_SubGroupName = "";
$prev_Nat_SubSubGroupName = "";
$data = [];
$rows_history = $this->get_history($id);
foreach($rows as $r){
$curr_Nat_SubSubGroupName = $r['Nat_SubSubGroupName'];
if($prev_Nat_SubSubGroupName !== $curr_Nat_SubSubGroupName){
$data[] = [
"Nat_SubGroupName" => $r['Nat_SubGroupName'],
"Nat_SubSubGroupName" => $r['Nat_SubSubGroupName'],
"details" => []
];
}
$testID = $r['T_OrderDetailT_TestID'];
$curr_idx = count($data) - 1;
$data[$curr_idx]['details'][] = [
'T_TestSasCode' => $r['T_TestSasCode'],
'T_TestIsPrintResult' => $r['T_TestIsPrintResult'],
'T_TestIsResult' => $r['T_TestIsResult'],
'T_TestID' => $r['T_TestID'],
'T_TestName' => $r['T_TestName'],
// 'T_PriceAmount' => $r['T_PriceAmount'],
'T_OrderDetailValidation' => $r['T_OrderDetailValidation'],
'T_OrderDetailResult' => $r['T_OrderDetailResult'],
'T_OrderDetailNat_UnitName' => $r['T_OrderDetailNat_UnitName'],
'T_OrderDetailNormalValueNote' => $r['T_OrderDetailNormalValueNote'],
'T_OrderdetailNat_MethodeName'=> $r['T_OrderdetailNat_MethodeName'],
'T_OrderDetailResultFlag' => $r['T_OrderDetailResultFlag'],
'history' => []
];
if(in_array($testID,array_keys($rows_history))){
$idx_detail = count($data[$curr_idx]['details']) - 1;
$data[$curr_idx]['details'][$idx_detail]['history'] = $rows_history[$testID];
}
$prev_Nat_SubSubGroupName = $curr_Nat_SubSubGroupName;
}
// echo json_encode(
// array(
// "status"=>"OK",
// "data_header" => [
// "PatientFullName" => $r_header['PatientFullName'],
// "T_OrderHeaderLabNumberExt" => $r_header['T_OrderHeaderLabNumberExt'],
// "T_OrderHeaderDate" => $r_header['T_OrderHeaderDate'],
// "T_OrderHeaderID" => $r_header['T_OrderHeaderID'],
// "T_OrderHeaderSenderM_DoctorID" => $r_header['T_OrderHeaderSenderM_DoctorID'],
// "M_BranchID" => $branch_id,
// "M_BranchCode" => $branch_code,
// ],
// "data"=> $data,
// ));
return $data;
}
}
// berdasarkan nat_test
function get_result_by_t_orderheader_idv2($id)
{
// if ( ! $this->isLogin ) {
// echo json_encode(
// array("status"=>"ERR", "message"=> "Invalid Token")
// );
// exit;
// }
// lama
// $sql_cek_validation_print = "select T_OrderHeaderAddOnValidationDone, T_OrderHeaderAddOnReadyPrint,
// T_OrderHeaderAddOnT_OrderHeaderID
// from t_orderheaderaddon
// where T_OrderHeaderAddOnT_OrderHeaderID = ?
// AND T_OrderHeaderAddOnReadyPrint = 'Y'";
$sql_cek_validation_print = "select T_OrderHeaderAddOnT_OrderHeaderID as xid
from t_orderheaderaddon
JOIN $this->db_str_doctor.request_upload
ON T_OrderHeaderAddOnT_OrderHeaderID = RequestUploadT_OrderHeaderID
AND RequestUploadIsUploaded = 'N'
AND RequestUploadIsActive = 'Y'
where T_OrderHeaderAddOnT_OrderHeaderID = ?
AND
(
T_OrderHeaderAddOnValidationDone = 'Y'
OR T_OrderHeaderAddOnValidationDone = 'P'
)
UNION
select T_OrderHeaderID as xid
from t_orderheader
JOIN $this->db_str_doctor.request_upload
ON T_OrderHeaderID = RequestUploadT_OrderHeaderID
AND RequestUploadIsUploaded = 'N'
AND RequestUploadIsActive = 'Y'
join t_orderdetail
ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
AND T_OrderDetailIsActive = 'Y'
AND T_OrderHeaderID = ?
AND T_OrderDetailValidation = 'Y'
";
$query_validation_print = $this->db->query($sql_cek_validation_print, [
$id,
$id
]);
if(!$query_validation_print){
$this->db->trans_rollback();
$this->sys_error_db("get validation failed", $this->db);
exit;
}
$rows_validation = $query_validation_print->result_array();
if(count($rows_validation) == 0){
// $this->db->trans_rollback();
// $this->sys_error('Tidak ada data');
// exit;
// return $data;
// AGAR TIDAK DOUBLE STATUS JSON
// echo json_encode(
// array(
// "status"=>"OK",
// "message" => "Data belum bisa ditampilkan",
// "data_header" => [],
// "data"=> [],
// "func" => "get_result_by_t_orderheader_idv2"
// ));
}
else
{
$sql_get_t_order = "select
concat(M_TitleName, ' ',
ifnull(M_PatientPrefix,' '),
M_PatientName,
ifnull(M_PatientSuffix,'')
)
as PatientFullName,
IFNULL(T_OrderHeaderLabNumberExt,'') as T_OrderHeaderLabNumberExt,
IFNULL(DATE_FORMAT(T_OrderHeaderDate,'%d-%m-%Y %H:%i:%s'),'') as T_OrderHeaderDate,
IFNULL(T_OrderHeaderID,'') as T_OrderHeaderID,
IFNULL(T_OrderHeaderSenderM_DoctorID,'') as T_OrderHeaderSenderM_DoctorID,
'' as M_BranchID,
'' as M_BranchCode
from t_orderheader
join m_patient on T_OrderHeaderID = ?
and T_OrderHeaderM_PatientID = M_PatientID
join m_title on M_PatientM_TitleID = M_TitleID";
$query_t_order = $this->db->query($sql_get_t_order, [
$id
]);
if(!$query_t_order){
$this->db->trans_rollback();
$this->sys_error_db("get t_order failed", $this->db);
exit;
}
$rows = $query_t_order->result_array();
if(count($rows) == 0){
$this->db->trans_rollback();
$this->sys_error('Header Tidak Ketemu');
exit;
}
$r_header = $rows[0];
$sql_get_branch = "
select IFNULL(M_BranchID,'') as M_BranchID,
IFNULL(M_BranchCode,'') as M_BranchCode
from m_branch
WHERE M_BranchIsDefault='Y'
AND M_BranchIsActive ='Y'
";
$query_m_branch = $this->db->query($sql_get_branch, [
$id
]);
if(!$query_m_branch){
$this->db->trans_rollback();
$message = $this->db->error();
$this->sys_error($message);
exit;
}
$rows = $query_m_branch->result_array();
if(count($rows) == 0){
$this->db->trans_rollback();
$this->sys_error('Cabang Tidak Ketemu');
exit;
}
$branch_id = $rows[0]['M_BranchID'];
$branch_code = $rows[0]['M_BranchCode'];
// if(fn_itf_isnumber(T_OrderDetailResult) = '0', T_OrderDetailResult , fn_rpt_format_number(T_OrderDetailResult) ) as T_OrderDetailResult,
// old
// $sql_detail_periksa = "select
// IFNULL(T_TestSasCode,'') as T_TestSasCode,
// IFNULL(Nat_SubGroupName,'') as Nat_SubGroupName,
// IFNULL(Nat_SubSubGroupName,'') as Nat_SubSubGroupName,
// IFNULL(T_TestName,'') as T_TestName,
// IFNULL(T_OrderDetailT_TestName,'') as T_OrderDetailT_TestName,
// IFNULL(T_OrderDetailResult,'') as T_OrderDetailResult,
// IFNULL(T_OrderDetailNat_UnitName,'') as T_OrderDetailNat_UnitName,
// IFNULL(T_OrderDetailNormalValueNote,'') as T_OrderDetailNormalValueNote,
// IFNULL(T_OrderdetailNat_MethodeName,'') as T_OrderdetailNat_MethodeName,
// T_OrderDetailT_TestID,
// IFNULL(T_TestIsPrintResult,'') as T_TestIsPrintResult,
// IFNULL(T_TestIsResult,'') as T_TestIsResult,
// IFNULL(T_OrderDetailValidation,'') as T_OrderDetailValidation,
// T_TestID
// from t_orderheader
// join m_patient
// on T_OrderHeaderID = ?
// and T_OrderHeaderM_PatientID = M_PatientID
// join m_title
// on M_PatientM_TitleID = M_TitleID
// join t_orderdetail
// ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
// AND T_OrderDetailIsActive = 'Y'
// join t_test
// ON T_OrderDetailT_TestID = T_TestID
// AND T_TestIsActive = 'Y'
// join nat_group
// ON T_TestNat_GroupID = Nat_GroupID
// AND Nat_GroupIsActive = 'Y'
// join nat_subgroup
// ON T_TestNat_SubgroupID = Nat_SubGroupID
// AND Nat_SubGroupIsActive = 'Y'
// join nat_subsubgroup
// ON T_TestNat_SubSubGroupID = Nat_SubSubGroupID
// AND Nat_SubSubGroupIsActive = 'Y'
// where T_OrderHeaderIsActive = 'Y'
// order by T_TestSasCode asc";
$sql_detail_periksa = "select
IFNULL(T_TestSasCode,'') as T_TestSasCode,
IFNULL(Nat_SubGroupName,'') as Nat_SubGroupName,
IFNULL(Nat_SubSubGroupName,'') as Nat_SubSubGroupName,
IFNULL(T_TestName,'') as T_TestName,
IFNULL(T_OrderDetailT_TestName,'') as T_OrderDetailT_TestName,
if(fn_itf_isnumber(T_OrderDetailResult) = '0', T_OrderDetailResult , fn_rpt_format_number(T_OrderDetailResult) ) as T_OrderDetailResult,
IFNULL(T_OrderDetailNat_UnitName,'') as T_OrderDetailNat_UnitName,
IFNULL(T_OrderDetailNormalValueNote,'') as T_OrderDetailNormalValueNote,
IFNULL(T_OrderdetailNat_MethodeName,'') as T_OrderdetailNat_MethodeName,
T_OrderDetailT_TestID,
IFNULL(T_TestIsPrintResult,'') as T_TestIsPrintResult,
IFNULL(T_TestIsResult,'') as T_TestIsResult,
IFNULL(T_OrderDetailValidation,'') as T_OrderDetailValidation,
T_TestID,
T_OrderDetailResultFlag,
T_TestNat_TestID
from t_orderheader
join m_patient
on T_OrderHeaderID = ?
and T_OrderHeaderM_PatientID = M_PatientID
join m_title
on M_PatientM_TitleID = M_TitleID
join t_orderdetail
ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
AND T_OrderDetailIsActive = 'Y'
join t_test
ON T_OrderDetailT_TestID = T_TestID
AND T_TestIsActive = 'Y'
join nat_test
ON T_TestNat_TestID = Nat_TestID
join nat_group
ON Nat_TestNat_GroupID = Nat_GroupID
AND Nat_GroupIsActive = 'Y'
join nat_subgroup
ON Nat_TestNat_SubgroupID = Nat_SubGroupID
AND Nat_SubGroupIsActive = 'Y'
join nat_subsubgroup
ON Nat_TestNat_SubSubGroupID = Nat_SubSubGroupID
AND Nat_SubSubGroupIsActive = 'Y'
JOIN $this->db_str_doctor.request_upload
ON T_OrderHeaderID = RequestUploadT_OrderHeaderID
AND RequestUploadIsUploaded = 'N'
AND RequestUploadIsActive = 'Y'
where T_OrderHeaderIsActive = 'Y'
order by T_TestSasCode asc";
$query_detail_periksa = $this->db->query($sql_detail_periksa, [
$id
]);
if(!$query_detail_periksa){
$this->db->trans_rollback();
$message = $this->db->error();
$this->sys_error($message);
exit;
}
// $data_m_branch =
$rows = $query_detail_periksa->result_array();
// print_r($rows);
$prev_Nat_SubGroupName = "";
$prev_Nat_SubSubGroupName = "";
$data = [];
$rows_history = $this->get_historyv2($id);
foreach($rows as $r){
$curr_Nat_SubSubGroupName = $r['Nat_SubSubGroupName'];
if($prev_Nat_SubSubGroupName !== $curr_Nat_SubSubGroupName){
$data[] = [
"Nat_SubGroupName" => $r['Nat_SubGroupName'],
"Nat_SubSubGroupName" => $r['Nat_SubSubGroupName'],
"details" => []
];
}
$testID = $r['T_OrderDetailT_TestID'];
$natTestID = $r['T_TestNat_TestID'];
$curr_idx = count($data) - 1;
$data[$curr_idx]['details'][] = [
'T_TestSasCode' => $r['T_TestSasCode'],
'T_TestIsPrintResult' => $r['T_TestIsPrintResult'],
'T_TestIsResult' => $r['T_TestIsResult'],
'T_TestID' => $r['T_TestID'],
'T_TestName' => $r['T_TestName'],
// 'T_PriceAmount' => $r['T_PriceAmount'],
'T_OrderDetailValidation' => $r['T_OrderDetailValidation'],
'T_OrderDetailResult' => $r['T_OrderDetailResult'],
'T_OrderDetailNat_UnitName' => $r['T_OrderDetailNat_UnitName'],
'T_OrderDetailNormalValueNote' => $r['T_OrderDetailNormalValueNote'],
'T_OrderdetailNat_MethodeName'=> $r['T_OrderdetailNat_MethodeName'],
'T_OrderDetailResultFlag' => $r['T_OrderDetailResultFlag'],
'history' => []
];
if(in_array($natTestID,array_keys($rows_history))){
$idx_detail = count($data[$curr_idx]['details']) - 1;
$data[$curr_idx]['details'][$idx_detail]['history'] = $rows_history[$natTestID];
}
$prev_Nat_SubSubGroupName = $curr_Nat_SubSubGroupName;
}
// echo json_encode(
// array(
// "status"=>"OK",
// "data_header" => [
// "PatientFullName" => $r_header['PatientFullName'],
// "T_OrderHeaderLabNumberExt" => $r_header['T_OrderHeaderLabNumberExt'],
// "T_OrderHeaderDate" => $r_header['T_OrderHeaderDate'],
// "T_OrderHeaderID" => $r_header['T_OrderHeaderID'],
// "T_OrderHeaderSenderM_DoctorID" => $r_header['T_OrderHeaderSenderM_DoctorID'],
// "M_BranchID" => $branch_id,
// "M_BranchCode" => $branch_code,
// ],
// "data"=> $data,
// ));
return $data;
}
}
function get_result_patient($id,$debug="")
{
// $sql_patient = "SELECT M_PatientID, M_PatientNoReg,
// M_PatientName, M_PatientPOB, M_PatientDOB,
// M_PatientHP, M_PatientIDNumber, OrderFoOrderPatientID,
// M_PatientAddressDescription,
// concat(M_TitleName, ' ',
// ifnull(M_PatientPrefix,' '),
// M_PatientName,
// ifnull(M_PatientSuffix,'')
// ) as PatientFullName
// FROM $this->db_str_doctor.order_fo
// JOIN m_patient
// ON OrderFoM_PatientID = M_PatientID
// AND M_PatientIsActive = 'Y'
// join m_title
// on M_PatientM_TitleID = M_TitleID
// AND M_TitleIsActive = 'Y'
// join m_patientaddress
// ON M_PatientID = M_PatientAddressM_PatientID
// AND M_PatientIsActive = 'Y'
// WHERE OrderFoT_OrderHeaderID = ?
// AND OrderFoIsActive = 'Y'";
$sql_patient = "SELECT M_PatientID, M_PatientNoReg,
M_PatientName, M_PatientPOB, M_PatientDOB,
M_PatientHP, M_PatientIDNumber, OrderFoOrderPatientID,
M_PatientAddressDescription,
concat(M_TitleName, ' ',
ifnull(M_PatientPrefix,' '),
M_PatientName,
ifnull(M_PatientSuffix,'')
) as PatientFullName,
T_OrderHeaderM_PatientAge
FROM $this->db_str_doctor.order_fo
JOIN m_patient
ON OrderFoM_PatientID = M_PatientID
AND M_PatientIsActive = 'Y'
join m_title
on M_PatientM_TitleID = M_TitleID
AND M_TitleIsActive = 'Y'
join m_patientaddress
ON M_PatientID = M_PatientAddressM_PatientID
AND M_PatientIsActive = 'Y'
join t_orderheader
ON OrderFoT_OrderHeaderID = T_OrderHeaderID
AND T_OrderHeaderIsActive = 'Y'
JOIN $this->db_str_doctor.request_upload
ON T_OrderHeaderID = RequestUploadT_OrderHeaderID
AND RequestUploadIsUploaded = 'N'
AND RequestUploadIsActive = 'Y'
WHERE OrderFoT_OrderHeaderID = ?
AND OrderFoIsActive = 'Y'";
$query_patient = $this->db->query($sql_patient, [
$id
]);
if(!$query_patient){
$this->db->trans_rollback();
$this->sys_error_db("get patient failed", $this->db);
exit;
}
$rows_patient = $query_patient->result_array();
// print_r($rows_patient);
// berdasarkan nat_test
$rows_result = $this->get_result_by_t_orderheader_idv2($id);
// if($debug != ""){
// echo "fungsi get_result_patient";
// print_r($rows_result);
// exit;
// }
$sql_get_branch = "
select IFNULL(M_BranchID,'') as M_BranchID,
IFNULL(M_BranchCode,'') as M_BranchCode
from m_branch
WHERE M_BranchIsDefault='Y'
AND M_BranchIsActive ='Y'
";
$query_m_branch = $this->db->query($sql_get_branch, [
$id
]);
if(!$query_m_branch){
$this->db->trans_rollback();
$message = $this->db->error();
$this->sys_error($message);
exit;
}
$rows = $query_m_branch->result_array();
if(count($rows) == 0){
$this->db->trans_rollback();
$this->sys_error('Cabang Tidak Ketemu');
exit;
}
$branch_id = $rows[0]['M_BranchID'];
$branch_code = $rows[0]['M_BranchCode'];
// header
$sql_header = "select
concat(M_TitleName, ' ',
ifnull(M_PatientPrefix,' '),
M_PatientName,
ifnull(M_PatientSuffix,'')
)
as PatientFullName,
IFNULL(T_OrderHeaderLabNumberExt,'') as T_OrderHeaderLabNumberExt,
IFNULL(DATE_FORMAT(T_OrderHeaderDate,'%d-%m-%Y %H:%i:%s'),'') as T_OrderHeaderDate,
IFNULL(T_OrderHeaderID,'') as T_OrderHeaderID,
IFNULL(T_OrderHeaderSenderM_DoctorID,'') as T_OrderHeaderSenderM_DoctorID,
'' as M_BranchID,
'' as M_BranchCode
from t_orderheader
join m_patient on T_OrderHeaderID = ?
and T_OrderHeaderM_PatientID = M_PatientID
join m_title on M_PatientM_TitleID = M_TitleID";
$query_header = $this->db->query($sql_header, [
$id
]);
if(!$query_header){
$this->db->trans_rollback();
$this->sys_error_db("get header failed", $this->db);
exit;
}
$rows_header = $query_header->result_array();
if(count($rows_header) == 0){
$this->db->trans_rollback();
$this->sys_error('Header Tidak Ketemu');
exit;
}
$r_header = $rows_header[0];
// sample
// select T_OrderSampleT_OrderHeaderID,
// IFNULL(Nat_BahanName,'') as Nat_BahanName,
// IFNULL(DATE_FORMAT(T_OrderSampleSamplingDate,'%d-%m-%Y %H:%i:%s'),'')
// as T_OrderSampleSamplingDate,
// T_OrderSampleSamplingTime
// from t_ordersample
// join t_sampletype
// ON T_OrderSampleT_SampleTypeID = T_SampleTypeID
// AND T_SampleTypeIsActive = 'Y'
// join nat_bahan
// ON T_SampleTypeT_BahanID = Nat_BahanID
// AND Nat_BahanIsActive = 'Y'
// where T_OrderSampleIsActive = 'Y'
// AND T_OrderSampleT_OrderHeaderID = 131484
$sql_sample = "select T_OrderSampleT_OrderHeaderID,
IFNULL(Nat_BahanName,'') as Nat_BahanName,
IFNULL(DATE_FORMAT(T_OrderSampleSamplingDate,'%d-%m-%Y %H:%i:%s'),'')
as T_OrderSampleSamplingDate,
T_OrderSampleSamplingTime
from t_ordersample
join t_sampletype
ON T_OrderSampleT_SampleTypeID = T_SampleTypeID
AND T_SampleTypeIsActive = 'Y'
join nat_bahan
ON T_SampleTypeT_BahanID = Nat_BahanID
AND Nat_BahanIsActive = 'Y'
JOIN $this->db_str_doctor.request_upload
ON T_OrderSampleT_OrderHeaderID = RequestUploadT_OrderHeaderID
AND RequestUploadIsUploaded = 'N'
AND RequestUploadIsActive = 'Y'
where T_OrderSampleIsActive = 'Y'
AND T_OrderSampleT_OrderHeaderID = ?
group by T_OrderSampleT_OrderHeaderID, Nat_BahanName";
$query_sample = $this->db->query($sql_sample, [
$id
]);
if(!$query_sample){
$this->db->trans_rollback();
$this->sys_error_db("get sample failed", $this->db);
exit;
}
$rows_sample = $query_sample->result_array();
// if(count($rows_sample) == 0){
// $this->db->trans_rollback();
// $this->sys_error('sample Tidak Ketemu');
// exit;
// }
// $r_sample = $rows_sample[0];
if(count($rows_patient) == 0)
{
if($debug != ""){
echo json_encode(array(
"order_patient_id" => 0,
"patient" => [],
"result" => [],
"sample" => []
)
);
}
return
array(
"order_patient_id" => 0,
"patient" => [],
"result" => [],
"sample" => []
);
}
else
{
if($debug != ""){
echo json_encode(
array(
"order_patient_id" => $rows_patient[0]['OrderFoOrderPatientID'],
"M_BranchID" => $branch_id,
"M_BranchCode" => $branch_code,
"T_OrderHeaderLabNumberExt" => $r_header['T_OrderHeaderLabNumberExt'],
"T_OrderHeaderDate" => $r_header['T_OrderHeaderDate'],
"T_OrderHeaderID" => $r_header['T_OrderHeaderID'],
"T_OrderHeaderSenderM_DoctorID" => $r_header['T_OrderHeaderSenderM_DoctorID'],
"patient" => $rows_patient,
"result" => $rows_result,
"sample" => $rows_sample
)
);
}
return (
// array(
// "order_patient_id" => $rows_patient[0]['OrderFoOrderPatientID'],
// "M_BranchID" => $branch_id,
// "M_BranchCode" => $branch_code,
// "patient" => $rows_patient,
// "result" => $rows_result,
// )
// "T_OrderHeaderLabNumberExt" => $r_header['T_OrderHeaderLabNumberExt'],
// "T_OrderHeaderDate" => $r_header['T_OrderHeaderDate'],
// "T_OrderHeaderID" => $r_header['T_OrderHeaderID'],
// "T_OrderHeaderSenderM_DoctorID" => $r_header['T_OrderHeaderSenderM_DoctorID'],
array(
"order_patient_id" => $rows_patient[0]['OrderFoOrderPatientID'],
"M_BranchID" => $branch_id,
"M_BranchCode" => $branch_code,
"T_OrderHeaderLabNumberExt" => $r_header['T_OrderHeaderLabNumberExt'],
"T_OrderHeaderDate" => $r_header['T_OrderHeaderDate'],
"T_OrderHeaderID" => $r_header['T_OrderHeaderID'],
"T_OrderHeaderSenderM_DoctorID" => $r_header['T_OrderHeaderSenderM_DoctorID'],
"patient" => $rows_patient,
"result" => $rows_result,
"sample" => $rows_sample
)
);
}
}
function get_result()
{
$data = [];
// order_fo join t_orderheader yg print nya Y, validation Y atau P dan union
// table t_orderdetail
// $sql_ready_print_Y = "SELECT OrderFoT_OrderHeaderID
// FROM $this->db_str_doctor.order_fo
// JOIN t_orderheader
// ON OrderFoT_OrderHeaderID = T_OrderHeaderID
// AND OrderFoIsActive = 'Y'
// AND T_OrderHeaderIsActive = 'Y'
// JOIN t_orderheaderaddon
// ON T_OrderHeaderID = T_OrderHeaderAddOnT_OrderHeaderID
// AND
// (
// T_OrderHeaderAddOnValidationDone = 'Y'
// OR T_OrderHeaderAddOnValidationDone = 'P'
// )
// JOIN $this->db_str_doctor.request_upload
// ON T_OrderHeaderID = RequestUploadT_OrderHeaderID
// AND RequestUploadIsUploaded = 'N'
// limit 0,$this->max_limit";
$sql_ready_print_Y = "SELECT distinct OrderFoT_OrderHeaderID
FROM (
SELECT OrderFoT_OrderHeaderID
FROM one_doctor.order_fo
JOIN t_orderheader
ON OrderFoT_OrderHeaderID = T_OrderHeaderID
AND OrderFoIsActive = 'Y'
AND T_OrderHeaderIsActive = 'Y'
JOIN t_orderheaderaddon
ON T_OrderHeaderID = T_OrderHeaderAddOnT_OrderHeaderID
AND (T_OrderHeaderAddOnValidationDone = 'Y' OR T_OrderHeaderAddOnValidationDone = 'P')
JOIN one_doctor.request_upload
ON T_OrderHeaderID = RequestUploadT_OrderHeaderID
AND RequestUploadIsUploaded = 'N'
AND RequestUploadIsActive = 'Y'
UNION
SELECT OrderFoT_OrderHeaderID
FROM one_doctor.order_fo
JOIN t_orderheader
ON OrderFoT_OrderHeaderID = T_OrderHeaderID
AND OrderFoIsActive = 'Y'
AND T_OrderHeaderIsActive = 'Y'
JOIN t_orderheaderaddon
ON T_OrderHeaderID = T_OrderHeaderAddOnT_OrderHeaderID
JOIN one_doctor.request_upload
ON T_OrderHeaderID = RequestUploadT_OrderHeaderID
AND RequestUploadIsUploaded = 'N'
JOIN t_orderdetail
ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID
) AS hasilUnion
limit 0,$this->max_limit";
$query_ready_print_Y = $this->db->query($sql_ready_print_Y);
if(!$query_ready_print_Y){
$this->db->trans_rollback();
$this->sys_error_db("get ready print Y or request upload N failed", $this->db);
exit;
}
$rows_result_ready_print_Y = $query_ready_print_Y->result_array();
if(count($rows_result_ready_print_Y) > 0)
{
foreach($rows_result_ready_print_Y as $key => $val)
{
$data[] = $this->get_result_patient($val['OrderFoT_OrderHeaderID']);
}
return json_encode(
array(
'status' => 'OK',
'data' => $data
)
);
}
else
{
return json_encode (
array(
'status' => 'OK',
'message' => 'Data Tidak Ada',
'data' => $data
)
);
}
}
// curl
public function post($url, $data)
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Content-Type: application/text",
"Content-Length: " . strlen($data),
]);
$result = curl_exec($ch);
if (curl_error($ch) != "") {
echo json_encode([
"status" => "ERR",
"message" => "Http Error : " . curl_error($ch),
]);
curl_close($ch);
exit();
}
curl_close($ch);
return $result;
}
function log($msg)
{
// $dt = Date("Y-m-d H:i:s");
// echo "$dt $msg \n";
echo $msg;
}
function get_param_z()
{
$body_z = file_get_contents("php://input");
$body = gzuncompress($body_z);
return json_decode($body, true);
}
function reply($resp)
{
echo json_encode($resp);
}
function reply_gz($resp)
{
//echo json_encode($resp);
echo gzcompress(json_encode($resp));
}
function upload_log_gzcompress($debug = "")
{
$this->db->trans_begin();
$j_param = $this->get_result();
$result = json_decode($j_param,true);
// if($debug != ""){
// echo "fungsi get_result_patient";
// echo $j_param;
// exit;
// }
// print_r($j_param);
if(count($result['data']) > 0)
{
// check max retry
$sql_cek_max_retry = "select
uploadLogOrderPatientID, uploadLogJson
from $this->db_str_doctor.upload_log
where uploadLogIsSent = 'N'
and uploadLogRetry >= 10
limit 0,$this->max_limit";
$query_max_retry = $this->db->query($sql_cek_max_retry);
if(!$query_max_retry){
$this->db->trans_rollback();
$this->sys_error_db(["status" => "ERR", "message" => "select upload_log | " .
$this->db->error()["message"], "debug" => $this->db->last_query()]);
}
$data_json = [];
$rows_retry = $query_max_retry->result_array();
$data_order_patient_id_retry = [];
foreach($rows_retry as $key => $val)
{
$data_order_patient_id_retry[] = $val['uploadLogOrderPatientID'];
}
$upload_param = [];
// print_r(json_encode($result['data']));
// exit;
// if($debug != ""){
// print_r($data_order_patient_id_retry);
// exit;
// }
foreach($result['data'] as $key)
{
// print_r(json_encode($result['data']));
// buka proteksi upload lebih dari 1x
if(in_array($key['order_patient_id'], $data_order_patient_id_retry)){
continue;
}
$result_nonlab = $this->nonlab_by_nolab($key['T_OrderHeaderID']);
if($debug != ""){
print_r($result_nonlab);
exit;
}
// if()
// $json_string = json_encode($result_nonlab);
// $err_result_nonlab = json_decode($json_string);
// print_r($err_result_nonlab['status']);
// print_r($result_nonlab);
// exit;
$data_json =
[
"order_patient_id" => $key['order_patient_id'],
"T_OrderHeaderLabNumberExt" => $key['T_OrderHeaderLabNumberExt'],
"T_OrderHeaderDate" => $key['T_OrderHeaderDate'],
"T_OrderHeaderID" => $key['T_OrderHeaderID'],
"T_OrderHeaderSenderM_DoctorID" => $key['T_OrderHeaderSenderM_DoctorID'],
"M_BranchID" => $key['M_BranchID'],
"M_BranchCode" => $key['M_BranchCode'],
"patient" => $key['patient'],
"result" => $key['result'],
"result_nonlab" => $result_nonlab,
"sample" => $key['sample']
];
$upload_param[] = $data_json;
// print_r(json_encode($data_json));
// exit;
$this->insert_upload_log($key['order_patient_id'],
$data_json,
$debug
);
}
// send regional for update data
if(count($upload_param) == 0){
$this->db->trans_commit();
// $this->db->trans_rollback();
$this->reply([
"status" => "ERR",
'message' => "Data Tidak ada"
]);
exit;
}
$j_param = json_encode(array(
'data' => $upload_param
));
$size = round(strlen($j_param) / 1024, 2);
$z_param = gzcompress($j_param, 9);
$size_z = round(strlen($z_param) / 1024, 2);
$getIPRegionalAddress = $this->getRegionalIPAddress();
$url = "http://$getIPRegionalAddress/one-api/app_doctor/Receiveruploadlog/r_upload_log";
// $this->log("Post to $url | size : $size k | comprezzed $size_z k");
$resp = $this->post($url, $z_param);
$j_resp = json_decode($resp,true);
// $j_resp_x = $this->get_param_z();
// print_r($j_resp);
// print_r($resp);
// print_r($j_resp_x);
if ($j_resp["status"] == "OK") {
// update
$order_patient_id_str = implode(",",$j_resp['order_patient_id']);
if($order_patient_id_str == ""){
$order_patient_id_str = "0";
}
$sql_update = "UPDATE $this->db_str_doctor.upload_log
set uploadLogIsSent = 'Y'
WHERE uploadLogIsSent = 'N'
AND uploadLogOrderPatientID IN ($order_patient_id_str)";
$query_update = $this->db->query($sql_update);
// echo $this->db->last_query();
if(!$query_update)
{
$this->db->trans_rollback();
$this->sys_error_db(["status" => "ERR", "message" => "update upload_log | " .
$this->db->error()["message"], "debug" => $this->db->last_query()]);
}
// update request_log from N to Y
$sql_update_request_upload = "UPDATE $this->db_str_doctor.request_upload
set RequestUploadIsUploaded = 'Y'
WHERE RequestUploadOrderPatientID IN ($order_patient_id_str)
";
$query_update_request_upload = $this->db->query($sql_update_request_upload);
if(!$query_update_request_upload)
{
$this->db->trans_rollback();
$this->sys_error_db(["status" => "ERR", "message" => "update request_log | " .
$this->db->error()["message"], "debug" => $this->db->last_query()]);
exit;
}
$this->db->trans_commit();
// $this->db->trans_rollback();
$this->reply(["status" => "OK",'message'=>'Proses upload sudah berhasil']);
}
else
{
$this->db->trans_rollback();
// print_r($j_resp['status']);
$this->reply([
"status" => "ERR",
'message' => "Gagal update",
'debug' => print_r($resp, true)
]);
}
}
else
{
$this->db->trans_rollback();
// print_r($j_resp['status']);
$this->reply([
"status" => "OK",
'message' => "Tidak Ada Data",
'debug' => print_r($resp, true)
]);
}
}
function insert_upload_log($order_patient_id, $json_result, $debug = "")
{
$sql_check = "select *
from $this->db_str_doctor.upload_log
where uploadLogOrderPatientID = ?
AND uploadLogIsSent = 'N'";
$qry_check = $this->db->query($sql_check,[
$order_patient_id
]);
if (!$qry_check) {
// print_r($this->db->last_query());
$this->db->trans_rollback();
$this->sys_error_db(["status" => "ERR", "message" => "insert upload log | " .
$this->db->error()["message"], "debug" => $this->db->last_query()]);
exit;
}
$rows_check = $qry_check->result_array();
// if($debug != ""){
// print_r($rows_check);
// exit;
// }
if(count($rows_check) == 0){
// insert table upload_log
$sql_insert_upload_log = "INSERT INTO $this->db_str_doctor.upload_log(
uploadLogOrderPatientID,
uploadLogJson,
uploadLogRetry
) VALUES (?, ?, 0)";
$query_insert = $this->db->query($sql_insert_upload_log, [
intval($order_patient_id),
json_encode($json_result)
]);
// if($debug != ""){
// print_r($rows_check);
// echo json_last_error_msg();
// exit;
// }
// echo $this->db->last_query();
if (!$query_insert) {
// print_r($this->db->last_query());
$this->db->trans_rollback();
$this->sys_error_db(["status" => "ERR", "message" => "insert upload log | " .
$this->db->error()["message"], "debug" => $this->db->last_query()]);
exit;
}
}else{
// update tabel update_log
$sql_update_log = "UPDATE $this->db_str_doctor.upload_log
SET
uploadLogRetry = uploadLogRetry + 1
WHERE uploadLogID = ?";
$query_update = $this->db->query($sql_update_log, [
$rows_check[0]['uploadLogID']
]);
// echo $this->db->last_query();
if (!$query_update) {
// print_r($this->db->last_query());
$this->db->trans_rollback();
$this->sys_error_db(["status" => "ERR", "message" => "update upload log | " .
$this->db->error()["message"], "debug" => $this->db->last_query()]);
exit;
}
}
}
// fungsi dibawah ini adalah fungsi hasil non lab
function nonlab_by_nolab($T_OrderHeaderID, $debug = "")
{
$sql = "select T_OrderHeaderID,T_OrderHeaderM_PatientID,
T_OrderHeaderPjM_DoctorID, T_OrderHeaderSenderM_DoctorID,
T_OrderHeaderDate, T_OrderHeaderLabNumberExt,
min(concat(T_OrderSampleHandlingDate,' ', T_OrderSampleHandlingTime)) xtime ,
T_OrderHeaderAddOnReadyPrintDate,
max(T_OrderDetailValDate) valDate,
group_concat(distinct T_TestNat_GroupID) Nat_GroupID
, '' M_CompanyNatCode
from t_orderheader
join t_orderheaderaddon on T_OrderHeaderID = T_OrderHeaderAddOnT_OrderHeaderID
and T_OrderHeaderID = ?
join m_company on T_OrderHeaderM_CompanyID = M_CompanyID
left join t_ordersample on T_OrderHeaderID = T_OrderSampleT_OrderheaderID and T_OrderSampleIsActive = 'Y'
join t_orderdetail on T_OrderDetailT_OrderHeaderID = T_OrderHeaderID
and T_OrderDetailIsActive = 'Y'
join t_test on T_OrderDetailT_TestID = T_TestID
and T_TestNat_GroupID > 1
group by T_OrderHeaderID";
if ($debug != "") {
$sql = "select T_OrderHeaderID,T_OrderHeaderM_PatientID,
T_OrderHeaderPjM_DoctorID, T_OrderHeaderSenderM_DoctorID,
T_OrderHeaderDate, T_OrderHeaderLabNumberExt,
min(concat(T_OrderSampleHandlingDate,' ', T_OrderSampleHandlingTime)) xtime ,
T_OrderHeaderAddOnReadyPrintDate,
max(T_OrderDetailValDate) valDate,
group_concat(distinct T_TestNat_GroupID) Nat_GroupID
, '' M_CompanyNatCode
from t_orderheader
join t_orderheaderaddon on T_OrderHeaderID = T_OrderHeaderAddOnT_OrderHeaderID
and T_OrderHeaderID = ?
join m_company on T_OrderHeaderM_CompanyID = M_CompanyID
left join t_ordersample on T_OrderHeaderID = T_OrderSampleT_OrderheaderID and T_OrderSampleIsActive = 'Y'
join t_orderdetail on T_OrderDetailT_OrderHeaderID = T_OrderHeaderID
and T_OrderDetailIsActive = 'Y'
join t_test on T_OrderDetailT_TestID = T_TestID
and T_TestNat_GroupID > 1
group by T_OrderHeaderID";
}
$qry = $this->db->query($sql, [$T_OrderHeaderID]);
if (!$qry) {
$this->reply_err(
$this->db->error()["message"] . "|" . $this->db->last_query()
);
}
$rows = $qry->result_array();
// print_r($this->db->last_query());
// exit;
if (count($rows) == 0) {
// $this->reply_err("Nolab $T_OrderHeaderID not found.");
$newResult = [];
return $newResult;
}
$headerID = $rows[0]["T_OrderHeaderID"];
$labNoExt = $rows[0]["T_OrderHeaderLabNumberExt"];
$patientID = $rows[0]["T_OrderHeaderM_PatientID"];
//$companyNatCode = "--"; //$rows[0]["M_CompanyNatCode"];
$companyNatCode = $rows[0]["M_CompanyNatCode"];
$senderID = $rows[0]["T_OrderHeaderSenderM_DoctorID"];
$pjID = $rows[0]["T_OrderHeaderPjM_DoctorID"];
$readyPrintDate = $rows[0]["T_OrderHeaderAddOnReadyPrintDate"];
if ($readyPrintDate == "") {
$readyPrintDate = $rows[0]["valDate"];
}
//$this->is_uploaded("NON-LAB", $headerID);
list($xstat, $nik) = $this->get_nik($patientID);
if (!$xstat) {
$this->reply_err("Nolab $T_OrderHeaderID | " . $nik);
exit;
}
$arrGroup = explode(",", $rows[0]["Nat_GroupID"]);
$param = [
"headerID" => $headerID,
"T_OrderHeaderID" => $T_OrderHeaderID,
"companyNatCode" => $companyNatCode,
"labNoExt" => $labNoExt,
"patientID" => $patientID,
"senderID" => $senderID,
"nik" => $nik,
"pjID" => $pjID,
"observationDate" => date("YmdHis", strtotime($rows[0]["xtime"])),
"readyPrintDate" => date("YmdHis", strtotime($readyPrintDate)),
"orderDate" => date(
"YmdHis",
strtotime($rows[0]["T_OrderHeaderDate"])
),
];
$result = [];
foreach ($arrGroup as $groupID) {
// echo $groupID;
// echo "\n";
$result[] = [
"data" => $this->get_nonlab_result($param, $groupID, $debug),
"groupid" => $groupID
];
// print_r($result);
}
$newResult = [];
$prev_judul = "";
// print_r($result);
foreach($result as $r)
{
// print_r($r);
$grupid = $r['groupid'];
foreach($r['data'] as $rr){
$curr_judul = $rr['T_TestName'];
if($prev_judul !== $curr_judul){
$newResult[] = [
"judul" => $rr['judul'],
"T_TestName" => $rr['T_TestName'],
"detailsNonLab" => []
];
}
$curr_idx = count($newResult) - 1;
$newResult[$curr_idx]['detailsNonLab'][] = [
"grupid" => $grupid,
"judul" => $rr['judul'],
"T_TestName" => $rr['T_TestName'],
"So_TemplateDetailName" => $rr['So_TemplateDetailName'],
"So_ResultEntryDetailResult" => $rr['So_ResultEntryDetailResult']
];
$prev_judul = $curr_judul;
}
}
// print_r($newResult);
return $newResult;
}
function get_nik($patientID)
{
$sql = "select M_PatientIDNumber
from m_patient
where M_PatientM_IdTypeID = 1 and M_PatientID = ? ";
$qry = $this->db->query($sql, [$patientID]);
if (!$qry) {
return [false, "Error :" . $this->db->error()["message"]];
}
$rows = $qry->result_array();
if (count($rows) == 0) {
return [false, "Error : No NIK | " . $this->db->last_query()];
}
// if (strlen(trim($rows[0]["M_PatientIDNumber"])) != 16) {
if (strlen(trim($rows[0]["M_PatientIDNumber"])) < 16) {
return [
false,
"Error: Invalid NIK " . $rows[0]["M_PatientIDNumber"],
];
}
return [true, $rows[0]["M_PatientIDNumber"]];
}
function get_nonlab_result($param, $groupID, $debug = "")
{
$sql = "select Nat_TestCode,Nat_TestName, So_ResultEntrySo_TemplateName,
So_ResultEntryID
from t_orderdetail
join t_test on T_OrderDetailT_OrderHeaderID=?
and T_OrderDetailT_TestID = T_TestID
and T_OrderDetailIsActive = 'Y'
join so_resultentry on T_OrderDetailID = So_ResultEntryT_OrderDetailID
and So_ResultEntryIsActive = 'Y'
join nat_test on Nat_TestID = T_TestNat_TestID
and Nat_TestIsResult = 'Y'
and Nat_TestNat_GroupID=?";
$qry = $this->db->query($sql, [$param["headerID"], $groupID]);
if (!$qry) {
$this->reply_err(
$this->db->error()["message"] . "|" . $this->db->last_query()
);
}
$rows = $qry->result_array();
if (count($rows) == 0) {
return [];
}
$result = [];
// if ($debug != "") {
// echo "groupID : $groupID\n";
// //print_r($rows);
// }
foreach ($rows as $r) {
// if ($groupID != 4) {
// $result[] = [
// "code" => $r["Nat_TestCode"],
// "name" => $r["Nat_TestName"],
// "groupID" => $groupID,
// "result" => "",
// "unit" => "",
// "range" => "",
// "flag" => "",
// ];
// $idx = count($result) - 1;
// }
if ($groupID == 2) {
if ($debug != "") {
echo $r["Nat_TestCode"] . "\n";
}
if (
substr($r["Nat_TestCode"], 0, 4) == "2012" || substr($r["Nat_TestCode"], 0, 4) == "2013" ||
(substr($r["Nat_TestCode"], 0, 4) == "2014")
|| (substr($r["Nat_TestCode"], 0, 4) == "2011")
) {
$sql = "call sp_rpt_t_hasil_so_elmd(?,1,'admin')";
$resp = $this->get_sp($sql, [$r["So_ResultEntryID"]]);
if ($resp["status"] == -1) {
$this->reply_err($resp["message"]);
}
if ($debug != "") {
echo "GRUP ID $groupID ResultEntryID : " . $r["So_ResultEntryID"] . "\n";
// print_r($resp['data']);
}
$result = array_merge($result, $resp['data']);
// print_r($result);
// $result[] = $resp['data'];
// print_r($result);
// if (
// count($resp["data"]) > 0
// ) {
// $result_as = "";
// $result_ad = "";
// // foreach ($resp["data"] as $ecg_d) {
// // if (trim($ecg_d["So_TemplateDetailName"]) == "Kesan" || trim($ecg_d["So_TemplateDetailName"]) == "Interpretasi") {
// // $result[$idx]["result"] = $ecg_d["So_ResultEntryDetailResult"];
// // $result[$idx]["templateName"] = $ecg_d["So_TemplateDetailName"];
// // }
// // if (trim($ecg_d["So_TemplateDetailName"]) == "AS") {
// // $result_as = $ecg_d["So_ResultEntryDetailResult"];
// // }
// // if (trim($ecg_d["So_TemplateDetailName"]) == "AD") {
// // $result_ad = $ecg_d["So_ResultEntryDetailResult"];
// // }
// // }
// // if ($debug != "") {
// // echo "AS : $result_as | AD : $result_ad \n";
// // }
// // if ($result_as != "") {
// // $result[] = [
// // "code" => $r["Nat_TestCode"] . "-AS",
// // "name" => $r["Nat_TestName"],
// // "templateName" => $ecg_d["So_TemplateDetailName"],
// // "groupID" => $groupID,
// // "result" => $result_as,
// // "unit" => "",
// // "range" => "",
// // "flag" => "",
// // ];
// // $idx = count($result) - 1;
// // }
// // if ($result_ad != "") {
// // $result[] = [
// // "code" => $r["Nat_TestCode"] . "-AD",
// // "name" => $r["Nat_TestName"],
// // "templateName" => $ecg_d["So_TemplateDetailName"],
// // "groupID" => $groupID,
// // "result" => $result_ad,
// // "unit" => "",
// // "range" => "",
// // "flag" => "",
// // ];
// // $idx = count($result) - 1;
// // }
// }
}
}
if ($groupID == 3) {
//thorax
// echo $r["Nat_TestCode"];
if (
substr($r["Nat_TestCode"], 0, 4) == "3015" ||
substr($r["Nat_TestCode"], 0, 4) == "3021" ||
substr($r["Nat_TestCode"], 0, 4) == "3012"
) {
// $sql = "call sp_rpt_t_hasil_so_xray(?,1,'admin')";
$sql = "call sp_rpt_t_hasil_so_xray_meshbio(?,?,1,'admin')";
$resp = $this->get_sp($sql, [$param["headerID"], $r["So_ResultEntryID"]]);
if ($resp["status"] == -1) {
$this->reply_err($resp["message"]);
}
// $xray_result = "";
// foreach ($resp["data"] as $d) {
// if ($d["So_TemplateDetailName"] != "Kesan") continue;
// $xray_result .=
// $d["So_TemplateDetailName"] .
// " : " .
// str_ireplace(
// "\n",
// "~",
// trim($d["So_ResultEntryDetailResult"])
// ) .
// " ";
// }
// $result[$idx]["result"] = $xray_result;
// $result = $resp['data'];
$result = array_merge($result, $resp['data']);
} elseif (substr($r["Nat_TestCode"], 0, 4) == "3061") {
$sql = "call sp_rpt_t_hasil_so_usg(?,1,'admin')";
$resp = $this->get_sp($sql, [$r["So_ResultEntryID"]]);
if ($resp["status"] == -1) {
$this->reply_err($resp["message"]);
}
$xray_result = "";
// foreach ($resp["data"] as $d) {
// if ($d["So_TemplateDetailName"] != "Kesan") continue;
// $xray_result .=
// $d["So_TemplateDetailName"] .
// " : " .
// str_ireplace(
// "\n",
// "~",
// trim($d["So_ResultEntryDetailResult"])
// ) .
// " ";
// }
// $result[$idx]["result"] = $xray_result;
// $result = $resp['data'];
$result = array_merge($result, $resp['data']);
} else {
}
}
if ($groupID == 4 && $r["Nat_TestCode"] == "40210100") {
//Harvard
if (true || tdebug != "") {
$sql = "call sp_rpt_t_hasil_so_layanan(?, '1', 'admin')";
$resp = $this->get_sp($sql, [$r["So_ResultEntryID"]]);
if ($resp["status"] == -1) {
$this->reply_err($resp["message"]);
}
$hardvard_result = "";
// foreach ($resp["data"] as $d) {
// if (trim($d["So_TemplateDetailName"]) == "VO2 Max") {
// $hardvard_code = "-0A";
// } else {
// $hardvard_code = "-0B";
// }
// $hardvard_result =
// $d["So_TemplateDetailName"] .
// " : " .
// str_ireplace(
// "\n",
// "~",
// trim($d["So_ResultEntryDetailResult"])
// );
// $result[] = [
// "code" => $r["Nat_TestCode"] . $hardvard_code,
// "name" => $r["Nat_TestName"],
// "groupID" => $groupID,
// "templateName" => $d["So_TemplateDetailName"],
// "result" => $hardvard_result,
// "unit" => "",
// "range" => "",
// "flag" => "",
// ];
// }
// $result = $resp['data'];
$result = array_merge($result, $resp['data']);
} else {
// $result[] = [
// "code" => $r["Nat_TestCode"],
// "name" => $r["Nat_TestName"],
// "groupID" => $groupID,
// "templateName" => $d["So_TemplateDetailName"],
// "result" => "",
// "unit" => "",
// "range" => "",
// "flag" => "",
// ];
// $idx = count($result) - 1;
// $sql = "call sp_rpt_t_hasil_so_layanan(?, '1', 'admin')";
// $resp = $this->get_sp($sql, [$r["So_ResultEntryID"]]);
// if ($resp["status"] == -1) {
// $this->reply_err($resp["message"]);
// }
// $hardvard_result = "";
// foreach ($resp["data"] as $d) {
// $hardvard_result .=
// $d["So_TemplateDetailName"] .
// " : " .
// str_ireplace(
// "\n",
// "~",
// trim($d["So_ResultEntryDetailResult"])
// ) .
// " ";
// }
// $result[$idx]["result"] = $hardvard_result;
// $result = $resp['data'];
$result = array_merge($result, $resp['data']);
}
} else if ($groupID == 4) {
$arr_fisik_result = $this->get_fisik_result(
$rows[0]["So_ResultEntryID"],
$debug
);
if ($debug != "") {
print_r($arr_fisik_result);
}
// foreach ($arr_fisik_result as $fr) {
// $fr_code = $fr["code"];
// if (in_array($fr_code, ["0601", "0600"])) {
// if (strpos($fr["result"], "-OD") !== false) {
// $fr_code = $fr_code . "-OD";
// }
// if (strpos($fr["result"], "-OS") !== false) {
// $fr_code = $fr_code . "-OS";
// }
// }
// $fr_parent = $fr["parent"];
// if ($fr_parent == "visus" && strtolower($fr["name"]) == "tidak diperiksa") {
// $fr_code = "0602";
// $result[] = [
// "code" => $r["Nat_TestCode"] . "-" . $fr_code . "-OD",
// "name" => $r["Nat_TestName"],
// "sub_name" => "Visus",
// "groupID" => $groupID,
// "templateName" => $fr["So_TemplateDetailName"],
// "result" => "Tidak diperiksa",
// "unit" => "",
// "range" => "",
// "flag" => "",
// ];
// $result[] = [
// "code" => $r["Nat_TestCode"] . "-" . $fr_code . "-OS",
// "name" => $r["Nat_TestName"],
// "sub_name" => "Visus",
// "groupID" => $groupID,
// "templateName" => $fr["So_TemplateDetailName"],
// "result" => "Tidak diperiksa",
// "unit" => "",
// "range" => "",
// "flag" => "",
// ];
// } else if ($fr_code == "0203") { // BMI
// $result[] = [
// "code" => $r["Nat_TestCode"] . "-" . $fr_code,
// "name" => $r["Nat_TestName"],
// "sub_name" => $fr["name"],
// "groupID" => $groupID,
// "templateName" => $fr["So_TemplateDetailName"],
// "result" => trim($fr["result"]),
// "unit" => "kg/m2",
// "range" => "",
// "flag" => "",
// ];
// } else {
// $result[] = [
// "code" => $r["Nat_TestCode"] . "-" . $fr_code,
// "name" => $r["Nat_TestName"],
// "sub_name" => $fr["name"],
// "groupID" => $groupID,
// "templateName" => $fr["So_TemplateDetailName"],
// "result" => $fr["result"],
// "unit" => "",
// "range" => "",
// "flag" => "",
// ];
// }
// }
// $result = $arr_fisik_result;
$result = array_merge($result, $arr_fisik_result);
}
$sql = "call sp_rpt_result_category_value(?,'admin')";
$resp = $this->get_sp($sql, [$r["So_ResultEntryID"]]);
if ($resp["status"] == -1) {
$this->reply_err($resp["message"]);
}
// if (count($resp["data"]) > 0) {
// $xcat = "";
// if ($debug != "") {
// // print_r($resp);
// }
// foreach ($resp["data"] as $xc) {
// if ($xcat != "") $xcat .= ",";
// $xcat .= $xc["Mcu_StatusResultValueName"];
// }
// $r_kes = [
// "code" => $r["Nat_TestCode"] . "-cat",
// "name" => $r["Nat_TestName"],
// "groupID" => $groupID,
// "result" => $xcat,
// "unit" => "",
// "range" => "",
// "flag" => "",
// ];
// $result[] = $r_kes;
// }
// $result = $resp['data'];
}
// // $split_result_code = [
// // "0100", "0101", "0102", "0103", "0104", "0105",
// // "0200", "0201", "0202", "0203", "0204", "0205"
// // ];
// foreach ($result as $xidx => $xr) {
// $tmp_code = trim($xr["code"]);
// $arr_tmp = explode("-", $tmp_code);
// $fr_code = "x123x123";
// if (count($arr_tmp) > 1) {
// $fr_code = $arr_tmp[1];
// }
// if (in_array($fr_code, $split_result_code)) {
// $tmp_result = trim($xr["result"]);
// $tmp_arr = preg_split('/\s+/', $tmp_result);
// if ($debug != "") {
// echo "$fr_code : $tmp_result => $tmp_arr[0] | $tmp_arr[1] \n\n";
// }
// if (count($tmp_arr) > 1) {
// $result[$xidx]["result"] = trim($tmp_arr[0]);
// $result[$xidx]["unit"] = trim($tmp_arr[1]);
// }
// }
// $result_org = $result[$xidx]["result"];
// if (strpos($result_org, "\n") > 0) {
// $result[$xidx]["result"] = str_ireplace("\n", "~", $result_org);
// }
// }
return $result;
// print_r($result);
}
function nonlab($param, $lang = "id")
{
list($branchID, $branchCode) = $this->get_branch();
$msh = $this->msh($branchCode, $param["orderHeaderID"]);
list($senderCode, $senderName) = $this->get_doctor_name(
$param["senderID"]
);
list($pjCode, $pjName) = $this->get_doctor_name($param["pjID"]);
list($noreg, $name, $dob, $sex) = $this->get_patient(
$param["patientID"]
);
//patientID patientName dob sex
$pid = $this->pid(
$param["nik"],
$name,
$dob,
$sex,
$param["companyNatCode"]
);
//assignPatientLocation = "LAB" drPj drSender
$drPj = substr("$pjCode^$pjName", 0, 60);
$drSender = substr("$senderCode^$senderName", 0, 60);
$pv1 = $this->pv1($branchID, $drPj, $drSender, $param["labNoExt"]);
$orderDateTime = $param["orderDate"];
$resultDatetime = $param["readyPrintDate"];
$observationDateTime = $param["observationDate"];
//noLab orderdatetime resultDatetime drSender
$orc = $this->orc(
$param["labNoExt"],
$orderDateTime,
$resultDatetime,
$drSender
);
//nolab observationDateTime resultDateTime
$obr = $this->obr(
$param["labNoExt"],
$observationDateTime,
$resultDatetime
);
// arry of code name isQuantitative result unit range flag
$obx = "";
$obx_start_counter = 1;
foreach ($param["result"] as $r) {
if ($obx != "") {
$obx .= $this->cr;
}
foreach ($r as $idx => $rr) {
$r[$idx]["result"] = $lang . "^" . $rr["result"];
}
$obx .= $this->obx($r, $obx_start_counter);
}
$message =
$this->startVt .
$msh .
$this->cr .
$pid .
$this->cr .
$pv1 .
$this->cr .
$orc .
$this->cr .
$obr .
$this->cr .
$obx .
$this->cr .
$this->stopFs;
return $message;
}
function get_sp($sql, $param = false)
{
$resp = $this->get_rows($sql, $param);
// echo $this->db->last_query();
$this->clean_mysqli_connection($this->db->conn_id);
return $resp;
}
function get_rows($sql, $param = false)
{
if ($param) {
$qry = $this->db->query($sql, $param);
} else {
$qry = $this->db->query($sql);
}
if (!$qry) {
return [
"status" => -1,
"message" =>
$this->db->last_query() .
"|" .
$this->db->error()["message"],
];
}
return ["status" => 0, "data" => $qry->result_array()];
}
function get_fisik_result($resultEntryID, $debug = "")
{
//Ambil kesimpulan saja
$arr_sub_url = [
// "pribadi",
// "keluhan_saat_ini_new",
// "riwayat_phobia",
// "riwayat_obat",
// "riwayat_penyakit",
// "riwayat_hidup",
// "riwayat_keluarga",
"tanda_vital",
"status_gizi",
"keadaan_umum",
"mulut",
"gigi",
"visus",
"kepala_wajah",
"mata",
"telinga",
"thorax",
"paru",
"jantung",
"integumen",
"sistem",
"anggota",
"genitourinaria",
"perut",
"leher",
"hidung",
"persepsi_warna",
];
$code_result = [];
foreach ($arr_sub_url as $sub_url) {
$result = $this->get_fisik($sub_url, $resultEntryID, "fisik");
switch ($sub_url) {
case "tanda_vital":
foreach ($result as $rr) {
$nonlab_code = $this->meshbio_nonlab_code(
$sub_url,
$rr["aa1"]
);
$code_result[] = [
"parent" => $sub_url,
"code" => $nonlab_code,
"name" => $rr["aa1"],
"result" => $rr["aa2"] . " " . $rr["aa3"],
];
}
break;
case "status_gizi":
foreach ($result as $rr) {
$nonlab_code = $this->meshbio_nonlab_code(
$sub_url,
$rr["qq1"]
);
$code_result[] = [
"parent" => $sub_url,
"code" => $nonlab_code,
"name" => $rr["qq1"],
"result" => $rr["qq2"] . " " . $rr["qq3"],
];
}
break;
case "keadaan_umum":
$sub_code = 0;
foreach ($result as $rr) {
$nonlab_code = $this->meshbio_nonlab_code(
$sub_url,
$rr["rr1"]
);
$code_result[] = [
"parent" => $sub_url,
"code" => $nonlab_code,
"name" => $rr["rr1"],
"result" => $rr["rr2"] . " " . $rr["rr3"],
];
$sub_code++;
}
break;
case "mulut":
$sub_code = 0;
foreach ($result as $rr) {
$nonlab_code = $this->meshbio_nonlab_code(
$sub_url,
$rr["hh1"]
);
$code_result[] = [
"parent" => $sub_url,
"code" => $nonlab_code,
"name" => $rr["hh1"],
"result" => $rr["hh2"] . " " . $rr["hh3"],
];
$sub_code++;
}
break;
case "gigi": // tidak ada
if ($debug != "") {
echo "GIGI: $sub_url | $resultEntryID \n";
print_r($result);
}
if (true || $debug != "") {
$is_normal = false;
foreach ($result as $rr) {
if (isset($rr["header"]) && $rr["header"] == "N") {
$is_normal = true;
}
if (isset($rr["gg3"]) && $rr["gg3"] != "") {
$is_normal = false;
$nonlab_code = $this->meshbio_nonlab_code(
$sub_url,
$this->gigi_code($rr["gg3"])
);
$code_result[] = [
"parent" => $sub_url,
"code" => $nonlab_code,
"name" => "Gigi",
"result" => $this->gigi_code($rr["gg3"]) . ": " . $rr["gg1"],
];
}
// print_r($rr);
// echo "$nonlab_code \n";
// print_r($code_result);
}
if ($is_normal) {
$nonlab_code = $this->meshbio_nonlab_code(
$sub_url,
"Normal"
);
$code_result[] = [
"parent" => $sub_url,
"code" => $nonlab_code,
"name" => "Gigi",
"result" => "Normal",
];
}
//print_r($result);
}
break;
case "visus":
$sub_code = 0;
foreach ($result as $rr) {
$nonlab_code = $this->meshbio_nonlab_code(
$sub_url,
$rr["xx1"]
);
$code_result[] = [
"parent" => $sub_url,
"code" => $nonlab_code,
"name" => $rr["xx1"],
"result" => $rr["xx2"] . " " . $rr["xx3"],
];
$sub_code++;
}
break;
case "kepala_wajah":
$sub_code = 0;
foreach ($result as $rr) {
$nonlab_code = $this->meshbio_nonlab_code(
$sub_url,
"kepala_wajah"
);
$code_result[] = [
"parent" => $sub_url,
"code" => $nonlab_code,
"name" => "kepala_wajah",
"result" => $rr["bb1"] . " " . $rr["bb2"],
];
$sub_code++;
}
break;
case "mata":
$sub_code = 0;
foreach ($result as $rr) {
$nonlab_code = $this->meshbio_nonlab_code(
$sub_url,
"mata"
);
$code_result[] = [
"parent" => $sub_url,
"code" => $nonlab_code,
"name" => "mata",
"result" => $rr["cc1"] . " " . $rr["cc2"],
];
$sub_code++;
}
break;
case "telinga":
$sub_code = 0;
foreach ($result as $rr) {
$nonlab_code = $this->meshbio_nonlab_code(
$sub_url,
"telinga"
);
$code_result[] = [
"parent" => $sub_url,
"code" => $nonlab_code,
"name" => "telinga",
"result" => $rr["ee1"] . " " . $rr["ee2"],
];
$sub_code++;
}
break;
case "thorax":
$sub_code = 0;
foreach ($result as $rr) {
$nonlab_code = $this->meshbio_nonlab_code(
$sub_url,
"thorax"
);
$code_result[] = [
"parent" => $sub_url,
"code" => $nonlab_code,
"name" => "thorax",
"result" => $rr["jj1"] . " " . $rr["jj2"],
];
$sub_code++;
}
break;
case "paru":
$sub_code = 0;
foreach ($result as $rr) {
$nonlab_code = $this->meshbio_nonlab_code(
$sub_url,
"paru"
);
$code_result[] = [
"parent" => $sub_url,
"code" => $nonlab_code,
"name" => "paru",
"result" => $rr["kk1"] . " " . $rr["kk2"],
];
$sub_code++;
}
break;
case "jantung":
$sub_code = 0;
foreach ($result as $rr) {
$nonlab_code = $this->meshbio_nonlab_code(
$sub_url,
$rr["ll1"]
);
$code_result[] = [
"parent" => $sub_url,
"code" => $nonlab_code,
"name" => $rr["ll1"],
"result" => $rr["ll2"] . " " . $rr["ll3"],
];
$sub_code++;
}
break;
case "integumen":
$sub_code = 0;
foreach ($result as $rr) {
$nonlab_code = $this->meshbio_nonlab_code(
$sub_url,
$rr["pp1"]
);
$code_result[] = [
"parent" => $sub_url,
"code" => $nonlab_code,
"name" => $rr["pp1"],
"result" => $rr["pp2"] . " " . $rr["pp3"],
];
$sub_code++;
}
break;
case "sistem":
$sub_code = 0;
foreach ($result as $rr) {
$nonlab_code = $this->meshbio_nonlab_code(
$sub_url,
$rr["pp1"]
);
$code_result[] = [
"parent" => $sub_url,
"code" => $nonlab_code,
"name" => $rr["pp1"],
"result" => $rr["pp2"] . " " . $rr["pp3"],
];
$sub_code++;
}
break;
case "anggota":
$sub_code = 0;
foreach ($result as $rr) {
$nonlab_code = $this->meshbio_nonlab_code(
$sub_url,
$rr["oo1"]
);
$code_result[] = [
"parent" => $sub_url,
"code" => $nonlab_code,
"name" => $rr["oo1"],
"result" => $rr["oo2"] . " " . $rr["oo3"],
];
$sub_code++;
}
break;
case "genitourinaria":
$sub_code = 0;
foreach ($result as $rr) {
$nonlab_code = $this->meshbio_nonlab_code(
$sub_url,
"genitourinaria"
);
$code_result[] = [
"parent" => $sub_url,
"code" => $nonlab_code,
"name" => "genitourinaria",
"result" => $rr["nn1"] . " " . $rr["nn2"],
];
$sub_code++;
}
break;
case "perut":
$sub_code = 0;
foreach ($result as $rr) {
$nonlab_code = $this->meshbio_nonlab_code(
$sub_url,
$rr["mm1"]
);
$code_result[] = [
"parent" => $sub_url,
"code" => $nonlab_code,
"name" => $rr["mm1"],
"result" => $rr["mm2"] . " " . $rr["mm3"],
];
$sub_code++;
}
break;
case "leher":
$sub_code = 0;
foreach ($result as $rr) {
$nonlab_code = $this->meshbio_nonlab_code(
$sub_url,
"leher"
);
$code_result[] = [
"parent" => $sub_url,
"code" => $nonlab_code,
"name" => "leher",
"result" => $rr["ii1"] . " " . $rr["ii2"],
];
$sub_code++;
}
break;
case "hidung":
$sub_code = 0;
foreach ($result as $rr) {
$nonlab_code = $this->meshbio_nonlab_code(
$sub_url,
"hidung"
);
$code_result[] = [
"parent" => $sub_url,
"code" => $nonlab_code,
"name" => "hidung",
"result" => $rr["ff1"] . " " . $rr["ff2"],
];
$sub_code++;
}
break;
case "persepsi_warna":
$sub_code = 0;
foreach ($result as $rr) {
$nonlab_code = $this->meshbio_nonlab_code(
$sub_url,
"persepsi_warna"
);
$code_result[] = [
"parent" => $sub_url,
"code" => $nonlab_code,
"name" => "persepsi_warna",
"result" => $rr["dd1"] . " " . $rr["dd2"],
];
$sub_code++;
}
break;
}
}
return $code_result;
}
function meshbio_nonlab_code($parent, $name)
{
$map = [
"TANDA_VITAL^DENYUT NADI" => "0100",
"TANDA_VITAL^RITME DENYUT NADI" => "0101",
"TANDA_VITAL^LAJU PERNAFASAN" => "0102",
"TANDA_VITAL^POLA NAFAS" => "0103",
"TANDA_VITAL^TEKANAN DARAH" => "0104",
"TANDA_VITAL^SUHU" => "0105",
"STATUS_GIZI^BERAT BADAN" => "0200",
"STATUS_GIZI^TINGGI BADAN" => "0201",
"STATUS_GIZI^LINGKAR PERUT" => "0202",
"STATUS_GIZI^BMI" => "0203",
"STATUS_GIZI^LINGKAR PINGGANG / PANGGUL" => "0204",
"STATUS_GIZI^KLASIFIKASI" => "0205",
"KEADAAN_UMUM^KESADARAN" => "0300",
"KEADAAN_UMUM^SIKAP & TINGKAH LAKU" => "0301",
"KEADAAN_UMUM^KONTAK PSIKIS / PERHATIAN" => "0302",
"MULUT^MUKOSA RONGGA MULUT" => "0400",
"MULUT^TENGGOROKAN" => "0401",
"VISUS^TANPA KACAMATA" => "0600",
"VISUS^DENGAN KACAMATA" => "0601",
"KEPALA_WAJAH^KEPALA_WAJAH" => "0700",
"MATA^MATA" => "0800",
"TELINGA^TELINGA" => "0900",
"THORAX^THORAX" => "1000",
"PARU^PARU" => "1100",
"JANTUNG^JVP" => "1200",
"JANTUNG^APEX" => "1201",
"JANTUNG^SUARA JANTUNG" => "1202",
"JANTUNG^BISING JANTUNG / MURMUR" => "1203",
"INTEGUMEN^KULIT" => "1300",
"INTEGUMEN^KUKU" => "1301",
"INTEGUMEN^RAMBUT" => "1302",
"SISTEM^REFLEKS FISIOLOGIS" => "1400",
"SISTEM^REFLEKS PATHOLOGIS" => "1401",
"SISTEM^KESEIMBANGAN & KOORDINASI" => "1402",
"SISTEM^REFLEKS NEUROLOGIS LAINNYA" => "1403",
"ANGGOTA^EKSTRIMITAS ATAS" => "1500",
"ANGGOTA^EKSTRIMITAS BAWAH" => "1501",
"ANGGOTA^TONUS / OTOT" => "1502",
"GENITOURINARIA^GENITOURINARIA" => "1600",
"PERUT^ABDOMEN" => "1700",
"PERUT^BISING USUS" => "1701",
"PERUT^HATI" => "1702",
"PERUT^LIMPA" => "1703",
"PERUT^HERNIA" => "1704",
"PERUT^HEMORROID" => "1705",
"LEHER^LEHER" => "1800",
"HIDUNG^HIDUNG" => "1900",
"PERSEPSI_WARNA^PERSEPSI_WARNA" => "2000",
"GIGI^TAMBALAN" => "3000",
"GIGI^BERLUBANG" => "3001",
"GIGI^TANGGAL" => "3002",
"GIGI^SISA AKAR" => "3003",
"GIGI^GIGI PALSU" => "3004",
"GIGI^KARANG GIGI" => "3005",
"GIGI^BERLUBANG" => "3006",
"GIGI^NORMAL" => "3007",
];
$idx = strtoupper($parent . "^" . $name);
if (in_array($idx, array_keys($map))) {
return $map[$idx];
}
return "XXXX";
}
function get($url, $timeout = 60, $c_timeout = 5)
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $c_timeout);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
$err_msg = curl_error($ch);
if ($err_msg != "") {
return json_encode(["status" => "ERR", "message" => $err_msg]);
}
return $result;
}
function reply_err($message)
{
echo json_encode(["status" => "ERR", "data" => $message]);
exit();
}
}