corss(); $userID = $this->sys_user["M_UserID"]; if (!($userID > 0)) { echo json_encode([ "status" => "ERR", "message" => "Invalid Token, please re-login", ]); exit(); } $cvID = $this->sys_input["criticalValueID"]; $reportedTo = $this->sys_input["reportedTo"]; $adviseNote = $this->sys_input["adviseNote"]; $sql = "select * from critical_value where criticalValueID=?"; $qry = $this->db->query($sql, [$cvID]); if (!$qry) { echo json_encode([ "status" => "ERR", "message" => $this->db->error()["message"], ]); exit(); } $rows = $qry->result_array(); if (count($rows) > 0 && $rows[0]["CriticalValueReportedTo"] != "") { // update advise $sql = "update critical_value set CriticalValueAdvisedNote =? , CriticalValueAdvicedM_UserID= ?, CriticalValueIsAdvised = 'Y', CriticalValueAdvisedDate = now() where CriticalValueID = ?"; $qry = $this->db->query($sql, [$adviseNote, $userID, $cvID]); if (!$qry) { echo json_encode([ "status" => "ERR", "message" => $this->db->error()["message"], ]); exit(); } } else { if ($reportedTo != "") { $sql = "update critical_value set CriticalValueReportedTo=? , CriticalValueReportedM_UserID= ?, CriticalValueIsReported = 'Y', CriticalValueReportedDate= now() where CriticalValueID = ?"; $qry = $this->db->query($sql, [$reportedTo, $userID, $cvID]); if (!$qry) { echo json_encode([ "status" => "ERR", "message" => $this->db->error()["message"], ]); exit(); } } } echo json_encode(["status" => "OK", "message" => "data updated"]); } function auto_get() { $sql = "select T_OrderHeaderID, T_OrderHeaderDate, T_OrderHeaderLabNumber, fn_get_patient_atribute(T_OrderHeaderM_PatientID) patient, T_TestName,critical_value.* from critical_value join t_orderdetail on CriticalValueIsActive='Y' and ( CriticalValueIsReported = 'N' or CriticalValueIsAdvised = 'N' ) and CriticalValueT_OrderDetailID = T_OrderDetailID and CriticalValueCreated + interval 10 day > now() join t_test on T_OrderDetailT_TestID = T_TestID join t_orderheader on CriticalValueT_OrderHeaderID = T_OrderHeaderID order by T_OrderDetailT_TestSasCode,CriticalValueCreated desc limit 0,10"; $qry = $this->db->query($sql); if (!$qry) { echo json_encode([ "status" => "ERR", "message" => $this->db->error()["message"] . "|\n" . $this->db->last_query(), ]); exit(); } $rows = $qry->result_array(); $result = []; foreach ($rows as $r) { $id = $r["T_OrderHeaderID"]; $j_pat = json_decode($r["patient"], true); $pat_name = $j_pat["patient_fullname"]; if ( $r["CriticalValueIsAdvised"] == "Y" && $r["CriticalValueIsReported"] == "Y" ) { continue; } if (!isset($result[$id])) { $result[$id] = [ "labNo" => $r["T_OrderHeaderLabNumber"], "date" => $r["T_OrderHeaderDate"], "patient" => $pat_name, "test" => [], ]; } $result[$id]["test"][] = [ "px" => $r["T_TestName"], "note" => $r["CriticalValueDescription"], "IsReported" => $r["CriticalValueIsReported"], "IsAdvised" => $r["CriticalValueIsAdvised"], ]; } $xresult = []; foreach ($result as $v) { $xresult[] = $v; } echo json_encode(["status" => "OK", "data" => $xresult]); } function auto_update() { $s_headerID = ""; $s_detailID = ""; foreach ($this->sys_input["cv"] as $r) { if ($s_headerID != "") { $s_headerID .= ","; } $s_headerID .= $r["headerID"]; foreach ($r["details"] as $d) { if ($s_detailID != "") { $s_detailID .= ","; } $s_detailID .= $d; } } if ($s_headerID == "" || $s_detailID == "") { echo json_encode(["status" => "OK", "haveUpdate" => "N"]); exit(); } $sql = "select T_OrderDetailID, T_TestName, min(NatMultiruleExtraLow) ExtraLow, max(NatMultiruleExtraHigh) ExtraHigh, T_OrderDetailResult, T_OrderDetailT_OrderHeaderID from t_orderdetail join t_test on T_OrderDetailID in ( $s_detailID ) and T_OrderDetailIsActive = 'Y' and T_OrderDetailT_TestID = T_TestID and T_TestIsResult = 'Y' and T_TestIsQuantitative='Y' and T_OrderDetailResult <> '' and T_OrderDetailID not in ( select CriticalValueT_OrderDetailID from critical_value where CriticalValueT_OrderHeaderID in ( $s_headerID ) ) join nat_multirule on T_TestNat_TestID = NatMultiruleNat_TestID group by T_OrderDetailID"; $this->corss(); $qry = $this->db->query($sql); if (!$qry) { echo json_encode([ "status" => "ERR", "message" => $this->db->error()["message"] . "|\n" . $this->db->last_query(), ]); exit(); } $rows = $qry->result_array(); foreach ($rows as $idx => $r) { $status = "X"; if ($r["T_OrderDetailResult"] == "") { $rows[$idx]["status"] = "X"; $rows[$idx]["note"] = "Result Empty"; continue; } if (!is_numeric($r["T_OrderDetailResult"])) { $rows[$idx]["status"] = "X"; $rows[$idx]["note"] = "Result Not Numeric"; continue; } if ( is_numeric($r["ExtraLow"]) && floatval($r["ExtraLow"]) > floatval($r["T_OrderDetailResult"]) ) { $rows[$idx]["status"] = "N"; $rows[$idx][ "note" ] = "Result {$r["T_OrderDetailResult"]} < Extra Low {$r["ExtraLow"]}"; continue; } if ( is_numeric($r["ExtraHigh"]) && floatval($r["ExtraHigh"]) < floatval($r["T_OrderDetailResult"]) ) { $rows[$idx]["status"] = "N"; $rows[$idx][ "note" ] = "Result {$r["T_OrderDetailResult"]} > Extra High {$r["ExtraHigh"]}"; continue; } $rows[$idx]["status"] = "Y"; $status = ""; if (is_numeric($r["ExtraLow"]) && is_numeric($r["ExtraHigh"])) { $rows[$idx][ "note" ] = "Result dalama range ExtraLow {$r["ExtraLow"]} - Extra High {$r["ExtraHigh"]}"; continue; } if (!is_numeric($r["ExtraLow"])) { $status .= $r["ExtraLow"] . " ExtraLow not numeric "; } if (!is_numeric($r["ExtraHigh"])) { $status .= $r["ExtraHigh"] . " ExtraHigh not numeric "; } $rows[$idx]["note"] = $status; } $result = array_filter($rows, function ($r) { return $r["status"] == "N"; }); $sql = "insert into critical_value(CriticalValueT_OrderHeaderID,CriticalValueT_OrderDetailID,CriticalValueDescription) values(?,?,?) on duplicate key update CriticalValueID = CriticalValueID "; $this->db->trans_begin(); $updateID = []; foreach ($result as $r) { $qry = $this->db->query($sql, [ $r["T_OrderDetailT_OrderHeaderID"], $r["T_OrderDetailID"], $r["note"], ]); if (!$qry) { echo json_encode([ "status" => "ERR", "message" => $this->db->error()["message"] . "|\n" . $this->db->last_query(), ]); $this->db->trans_rollback(); exit(); } $updateID[] = $this->db->insert_id(); } $this->db->trans_commit(); echo json_encode(["status" => "OK", "haveUpdate" => "Y"]); } function get($orderHeaderID) { $sql = "select T_OrderDetailID, T_TestName, min(NatMultiruleExtraLow) ExtraLow, max(NatMultiruleExtraHigh) ExtraHigh, T_OrderDetailResult from t_orderdetail join t_test on T_OrderDetailT_OrderHeaderID = ? and T_OrderDetailIsActive = 'Y' and T_OrderDetailT_TestID = T_TestID and T_TestIsResult = 'Y' and T_TestIsQuantitative='Y' and T_OrderDetailResult <> '' and T_OrderDetailID not in ( select CriticalValueT_OrderDetailID from critical_value where CriticalValueT_OrderHeaderID = ? ) join nat_multirule on T_TestNat_TestID = NatMultiruleNat_TestID group by T_OrderDetailID"; $this->corss(); $qry = $this->db->query($sql, [$orderHeaderID, $orderHeaderID]); if (!$qry) { echo json_encode([ "status" => "ERR", "message" => $this->db->error()["message"] . "|\n" . $this->db->last_query(), ]); exit(); } $rows = $qry->result_array(); foreach ($rows as $idx => $r) { $status = "X"; if ($r["T_OrderDetailResult"] == "") { $rows[$idx]["status"] = "X"; $rows[$idx]["note"] = "Result Empty"; continue; } if (!is_numeric($r["T_OrderDetailResult"])) { $rows[$idx]["status"] = "X"; $rows[$idx]["note"] = "Result Not Numeric"; continue; } if ( is_numeric($r["ExtraLow"]) && floatval($r["ExtraLow"]) > floatval($r["T_OrderDetailResult"]) ) { $rows[$idx]["status"] = "N"; $rows[$idx][ "note" ] = "Result {$r["T_OrderDetailResult"]} < Extra Low {$r["ExtraLow"]}"; continue; } if ( is_numeric($r["ExtraHigh"]) && floatval($r["ExtraHigh"]) < floatval($r["T_OrderDetailResult"]) ) { $rows[$idx]["status"] = "N"; $rows[$idx][ "note" ] = "Result {$r["T_OrderDetailResult"]} > Extra High {$r["ExtraHigh"]}"; continue; } $rows[$idx]["status"] = "Y"; $status = ""; if (is_numeric($r["ExtraLow"]) && is_numeric($r["ExtraHigh"])) { $rows[$idx][ "note" ] = "Result dalama range ExtraLow {$r["ExtraLow"]} - Extra High {$r["ExtraHigh"]}"; continue; } if (!is_numeric($r["ExtraLow"])) { $status .= $r["ExtraLow"] . " ExtraLow not numeric "; } if (!is_numeric($r["ExtraHigh"])) { $status .= $r["ExtraHigh"] . " ExtraHigh not numeric "; } $rows[$idx]["note"] = $status; } $result = array_filter($rows, function ($r) { return $r["status"] == "N"; }); $sql = "insert into critical_value(CriticalValueT_OrderHeaderID,CriticalValueT_OrderDetailID,CriticalValueDescription) values(?,?,?) on duplicate key update CriticalValueID = CriticalValueID "; $this->db->trans_begin(); foreach ($result as $r) { $qry = $this->db->query($sql, [ $orderHeaderID, $r["T_OrderDetailID"], $r["note"], ]); if (!$qry) { echo json_encode([ "status" => "ERR", "message" => $this->db->error()["message"] . "|\n" . $this->db->last_query(), ]); $this->db->trans_rollback(); exit(); } } $this->db->trans_commit(); $sql = "select T_TestName,critical_value.*, M_UserUserName ReportUserName from critical_value join t_orderdetail on CriticalValueT_OrderHeaderID =? and CriticalValueIsActive='Y' and CriticalValueT_OrderDetailID = T_OrderDetailID join t_test on T_OrderDetailT_TestID = T_TestID left join m_user on CriticalValueReportedM_UserID = M_UserID"; $qry = $this->db->query($sql, [$orderHeaderID]); if (!$qry) { echo json_encode([ "status" => "ERR", "message" => $this->db->error()["message"] . "|\n" . $this->db->last_query(), ]); exit(); } $rows = $qry->result_array(); echo json_encode(["status" => "OK", "data" => $rows]); } } /* drop table if exists critical_value; create table critical_value( CriticalValueID int not null auto_increment primary key, CriticalValueT_OrderHeaderID int, CriticalValueT_OrderDetailID int, CriticalValueDescription text, CriticalValueCreated datetime default current_timestamp(), CriticalValueIsReported varchar(1) default 'N', CriticalValueReportedM_UserID int, CriticalValueReportedDate datetime, CriticalValueReportedTo varchar(50), CriticalValueIsAdvised varchar(1) default 'N', CriticalValueAdvisedDate datetime, CriticalValueAdvisedBy varchar(50), CriticalValueAdvisedNote varchar(100), CriticalValueAdvicedM_UserID int, CriticalValueIsActive varchar(1) default 'Y', key (CriticalValueIsActive), key (CriticalValueT_OrderHeaderID), key (CriticalValueT_OrderDetailID), key (CriticalValueAdvicedM_UserID), key (CriticalValueReportedM_UserID), unique(CriticalValueT_OrderDetailID,CriticalValueIsActive) ); */ ?>