435 lines
16 KiB
PHP
435 lines
16 KiB
PHP
<?php
|
|
class Amr_limit extends MY_Controller
|
|
{
|
|
function __construct()
|
|
{
|
|
parent::__construct();
|
|
}
|
|
function corss()
|
|
{
|
|
global $_SERVER;
|
|
if (isset($_SERVER["HTTP_ORIGIN"])) {
|
|
header("Access-Control-Allow-Origin: " . $_SERVER["HTTP_ORIGIN"]);
|
|
} else {
|
|
header("Access-Control-Allow-Origin: */*");
|
|
}
|
|
header("Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS");
|
|
header(
|
|
"Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization"
|
|
);
|
|
if (
|
|
isset($_SERVER["REQUEST_METHOD"]) &&
|
|
$_SERVER["REQUEST_METHOD"] == "OPTIONS"
|
|
) {
|
|
http_response_code(200);
|
|
echo json_encode("OK");
|
|
exit();
|
|
}
|
|
}
|
|
function update()
|
|
{
|
|
$this->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)
|
|
);
|
|
*/
|
|
?>
|