csrtechnew.ohctech.in/process_device_result_test.php
2025-04-14 13:28:09 +05:30

655 lines
31 KiB
PHP

<?php
// ini_set('MAX_EXECUTION_TIME', 3600);
include ('includes/config/config.php');
include ('includes/auth/auth.php');
include ('includes/functions.php');
include('log_entry.php');
include ('access.php');
error_reporting(E_ERROR | E_PARSE);
begin();
$response = array();
// Get the current time
$current_time = strtotime(date('H:i'));
$start_time = strtotime('08:00');
$end_time = strtotime('19:00');
// if ($current_time >= $start_time && $current_time <= $end_time) {
$query_initial_key_value = "insert into checkup_form_key_value set checkup_form_id=?, checkup_form_key=?,checkup_form_value=?";
$update_query_key_value = "update checkup_form_key_value set checkup_form_value=?";
$endquery_key_value = " where checkup_form_id = ? and checkup_form_key=? ";
$stmt_insert_query_key_value = $conn->prepare($query_initial_key_value);
$stmt_update_query_key_value = $conn->prepare($update_query_key_value . $endquery_key_value);
// taking unique checkup ids where data is not processed
$query = "select b.checkup_id from device_result a left join device_order b on a.accession_number = b.accession_number where a.is_processed = 'N' group by b.checkup_id";
error_log("query " . $query);
if ($result = mysqli_query($conn, $query)) {
while ($row = mysqli_fetch_assoc($result)) {
$checkup_id = $row['checkup_id'];
error_log("for checkup id " . $checkup_id);
$add_param_ids = getFieldFromTable('add_param_ids', 'checkup_form', 'checkup_id', $checkup_id);
error_log("additional param ids " . $add_param_ids);
$add_online_testcodes = getAdditionalOnlineTestCodes($add_param_ids);
$checkup_section_ids = getFieldFromTable('checkup_section_ids', 'checkup_form', 'checkup_id', $checkup_id);
$section_arr = explode(",", $checkup_section_ids);
error_log("checkup section ids " . print_r($section_arr, true));
$query_param = "select b.online_testcode,b.device_id,b.accession_number,b.device_name,a.test_result,b.checkup_id,d.checkup_parameter_id from device_result a left join device_order b on a.accession_number=b.accession_number and a.online_testcode=b.online_testcode left join device_param_map c on c.device_param_code=a.online_testcode and c.device_id=b.device_id left join checkup_parameter d on d.checkup_parameter_id=c.checkup_parameter_id where b.checkup_id='" . $checkup_id . "' and d.checkup_form_section_id in (" . implode(',', $section_arr) . ") ";
error_log("query to get code and result from device result " . $query_param);
$result_param = mysqli_query($conn, $query_param);
// while ($row_param = mysqli_fetch_assoc($result_param)) {
// $param_id = $row_param['checkup_parameter_id'];
// $actual_param_name = getTableFieldValue('checkup_parameter', 'column_name', 'checkup_parameter_id', $param_id);
// error_log("actual param name in our table " . $actual_param_name);
// // check if data exist in checkup form key value
// if ($actual_param_name != '') {
// $device_name = $row_param['device_name'];
// $test_result = trim($row_param['test_result']);
// $isExist = "select * from checkup_form_key_value where checkup_form_id='" . $checkup_id . "' and checkup_form_key = '" . $actual_param_name . "'";
// error_log("exist or not already " . $isExist);
// $resultExist = mysqli_query($conn, $isExist);
// $numRowsExist = mysqli_num_rows($resultExist);
// // update case it is
// if ($numRowsExist > 0) {
// if ($test_result != null && $test_result != '') {
// error_log('in update part');
// $stmt_update_query_key_value->bind_param("sss", $test_result, $checkup_id, $actual_param_name);
// $stmt_update_query_key_value->execute();
// if ($stmt_update_query_key_value->errno) {
// error_log("Some error while saving key value data: " . $stmt_update_query_key_value->error);
// rollback();
// }
// }
// }
// // insert case it is
// else {
// if ($test_result != null && $test_result != '') {
// error_log('in insert part');
// $stmt_insert_query_key_value->bind_param("sss", $checkup_id, $actual_param_name, $test_result);
// $stmt_insert_query_key_value->execute();
// if ($stmt_insert_query_key_value->errno) {
// error_log("Some error while saving key value data: " . $stmt_insert_query_key_value->error);
// rollback();
// }
// }
// $accession_number = $row_param['accession_number'];
// $online_testcode = $row_param['online_testcode'];
// $device_name = $row_param['device_name'];
// updateDeviceEntry($accession_number, $online_testcode, $device_name);
// }
// }
// }
// if (!empty($add_param_ids)) {
// updateAdditionalParamsData($add_param_ids, $checkup_id, $stmt_insert_query_key_value, $stmt_update_query_key_value);
// }
// insert calculative param start
$checkup_type_id=getFieldFromTable('checkup_type_id', 'checkup_form', 'checkup_id', $checkup_id);
$emp_id = getFieldFromTable('emp_id', 'checkup_form', 'checkup_id', $checkup_id);
$emp_data = getFieldFromTable("CONCAT('gender','+','dob')", 'view_patient_mastre', 'id', $emp_id);
$emp_data=explode('+',$emp_data);
$calculated_param= rule_gen($checkup_type_id,$emp_data[1],$emp_data[0],$checkup_id,$emp_id,'');
$calculated_param_result=$calculated_param['result'];
if(count($calculated_param_result)>0){
foreach($calculated_param_result as $actual_param_name=>$test_result){
error_log(' calculated paramente --' .$actual_param_name.'=> '.$test_result.' checkup id '.$checkup_id.'<br>');
insertCalCulatedParameter($checkup_id,$actual_param_name,$test_result );
}
}
//insert calculative param end
// $remaining_marked_complete = "update device_result set is_processed='Y' where date(insert_datetime) < date(curdate()-2)";
// if (!$result_marked_complete = mysqli_query($conn, $remaining_marked_complete)) {
// error_log("error in updating remaining extra results " . mysqli_error($conn));
// }
$response['success'] = true;
$response['message'] = "Processing completed successfully.";
}
}
// }
function insertCalCulatedParameter($checkup_id,$actual_param_name,$test_result ){
$conn=$GLOBALS['conn'];
$query_initial_key_value = "insert into checkup_form_key_value set checkup_form_id=?, checkup_form_key=?,checkup_form_value=?";
$update_query_key_value = "update checkup_form_key_value set checkup_form_value=?";
$endquery_key_value = " where checkup_form_id = ? and checkup_form_key=? ";
$stmt_insert_query_key_value = $conn->prepare($query_initial_key_value);
$stmt_update_query_key_value = $conn->prepare($update_query_key_value . $endquery_key_value);
$isExist = "select * from checkup_form_key_value where checkup_form_id='" . $checkup_id . "' and checkup_form_key = '" . $actual_param_name . "'";
error_log("exist or not already " . $isExist);
$resultExist = mysqli_query($conn, $isExist);
$numRowsExist = mysqli_num_rows($resultExist);
// update case it is
if ($numRowsExist > 0) {
if ($test_result != null && $test_result != '') {
error_log('in update part');
$stmt_update_query_key_value->bind_param("sss", $test_result, $checkup_id, $actual_param_name);
$stmt_update_query_key_value->execute();
if ($stmt_update_query_key_value->errno) {
error_log("Some error while saving key value data: " . $stmt_update_query_key_value->error);
rollback();
}
}
}
// insert case it is
else {
if ($test_result != null && $test_result != '') {
error_log('in insert part');
$stmt_insert_query_key_value->bind_param("sss", $checkup_id, $actual_param_name, $test_result);
$stmt_insert_query_key_value->execute();
if ($stmt_insert_query_key_value->errno) {
error_log("Some error while saving key value data: " . $stmt_insert_query_key_value->error);
rollback();
}
}
}
}
function updateAdditionalParamsData($add_param_ids, $checkup_id, $stmt_insert_query_key_value, $stmt_update_query_key_value)
{
$add_param_ids = explode(",", $add_param_ids);
foreach ($add_param_ids as $param_id) {
error_log("inside loop to update additional parameter data");
$actual_param_name = getTableFieldValue('checkup_parameter', 'column_name', 'checkup_parameter_id', $param_id);
error_log("actual param name in our table " . $actual_param_name);
$query_param = "select b.online_testcode,b.device_id,b.accession_number,b.device_name,a.test_result,b.checkup_id from device_result a left join device_order b on a.accession_number = b.accession_number and a.online_testcode = b.online_testcode where b.checkup_id='" . $checkup_id . "' and b.online_testcode in ( SELECT device_param_code FROM device_param_map WHERE checkup_parameter_id = '" . $param_id . "' )";
error_log("query to get code and result from device result " . $query_param);
$result_param = mysqli_query($GLOBALS['conn'], $query_param);
$row_param = mysqli_fetch_assoc($result_param);
if ($actual_param_name != '' && $row_param['online_testcode'] != '') {
$device_name = $row_param['device_name'];
$test_result = trim($row_param['test_result']);
$isExist = "select * from checkup_form_key_value where checkup_form_id='" . $checkup_id . "' and checkup_form_key = '" . $actual_param_name . "'";
error_log("exist or not already " . $isExist);
$resultExist = mysqli_query($GLOBALS['conn'], $isExist);
$numRowsExist = mysqli_num_rows($resultExist);
// update case it is
if ($numRowsExist > 0) {
if ($test_result != null && $test_result != '') {
$stmt_update_query_key_value->bind_param("sss", $test_result, $checkup_id, $actual_param_name);
$stmt_update_query_key_value->execute();
if ($stmt_update_query_key_value->errno) {
error_log("Some error while saving key value data: " . $stmt_update_query_key_value->error);
rollback();
}
}
}
// insert case it is
else {
if ($test_result != null && $test_result != '') {
$stmt_insert_query_key_value->bind_param("sss", $checkup_id, $actual_param_name, $test_result);
$stmt_insert_query_key_value->execute();
if ($stmt_insert_query_key_value->errno) {
error_log("Some error while saving key value data: " . $stmt_insert_query_key_value->error);
rollback();
}
}
}
$accession_number = $row_param['accession_number'];
$online_testcode = $row_param['online_testcode'];
updateDeviceEntry($accession_number, $online_testcode, $device_name);
error_log("loop end to update additional parameter data");
}
}
}
function getAdditionalOnlineTestCodes($add_param_ids)
{
$sql = "select group_concat(device_param_code) as code from device_param_map where checkup_parameter_id in ($add_param_ids)";
error_log("query to get additional device online testcode query " . $sql);
$result = mysqli_query($GLOBALS['conn'], $sql);
$row = mysqli_fetch_assoc($result);
return $row['code'];
}
function updateDeviceEntry($accession_number, $online_testcode, $device_name)
{
$query = "update device_result set is_processed='Y' where accession_number='" . $accession_number . "' and online_testcode='" . $online_testcode . "' and device_name='" . $device_name . "'";
error_log("device result update query " . $query);
if (!$result = mysqli_query($GLOBALS['conn'], $query)) {
$response['success'] = false;
$response['message'] = "Something went wrong while updating the device result.";
error_log("error " . mysqli_error($GLOBALS['conn']));
rollback();
}
}
function rule_gen($checkup_type_id,$pat_dob,$pat_gender,$checkup_id,$patient_id,$appointment_type){
error_log("into rele val");
$final_result = [];
$param_data = [];
$data = [];
$resultr='';
$today = date("Y-m-d");
error_log("pat_dob " . $pat_dob);
$age = ($today - $pat_dob);
error_log("age " . $age);
$conn=$GLOBALS['conn'];
if ($checkup_type_id != '' && $checkup_type_id != null && !empty($checkup_type_id)) {
$sql = "select * from checkup_type where checkup_type_id='" . $checkup_type_id . "'";
$result = mysqli_query($GLOBALS['conn'], $sql);
$row = mysqli_fetch_assoc($result);
$section_id = $row['checkup_form_section_ids'];
$section_id = explode(",", $section_id);
error_log("type of var " . gettype($section_id) . " values " . print_r($section_id, true));
// $section_ids = getCommaSeperatedValuesToInClause($section_id);
// now selecting rule equations using section ids from section table
for ($i = 0; $i < sizeof($section_id); $i++) {
error_log("section id is" . $section_id[$i]);
$sql_section = "select * from checkup_form_section where section_id ='" . $section_id[$i] . "' having rule_ids!= ''";
error_log("query for section " . $sql_section);
$result_section = mysqli_query($conn, $sql_section);
while ($row_section = mysqli_fetch_assoc($result_section)) {
$rule_eq = getCommaSeperatedValuesToInClause($row_section['rule_ids']);
$rule_sql = "select * from rule_equation where rule_eq_id in $rule_eq";
error_log("rule sql " . $rule_sql);
$result_rule = mysqli_query($conn, $rule_sql);
// now running loop for every selected rule equations
while ($row_rule = mysqli_fetch_assoc($result_rule)) {
$rule_age_start = $row_rule['rule_age_start'];
$rule_age_end = $row_rule['rule_age_end'];
$rule_gender = $row_rule['rule_gender'];
$result_id = $row_rule['result'];
error_log("it has the result field value of " . $result_id);
error_log("equation age gender data " . $rule_age_start . " " . $rule_age_end . " " . $rule_gender);
if (intval($rule_age_end) != 0) {
if (intval($rule_age_start) > intval($age)) {
error_log("got here and continue for age mismatch" . $rule_age_start . " " . $age);
continue;
} else if (intval($rule_age_end) < intval($age)) {
error_log("got here and continue for age mismatch" . $rule_age_end . " " . $age);
continue;
}
}
if (($rule_gender != "" || $rule_gender != null) && $rule_gender != $pat_gender) {
error_log("got here and continue for gender mismatch");
continue;
} else {
$equation = "";
$rule_save = "select * from rule_save where equation_rule_id='" . $row_rule['rule_eq_id'] . "'";
error_log("rule save " . $rule_save);
$result_rule_save = mysqli_query($conn, $rule_save);
//making the rule equation and running
while ($row_rule_save = mysqli_fetch_assoc($result_rule_save)) {
$key_name = getFieldFromTable('kay_param_name', 'key_health_reportable_parameter_master', 'key_param_id', $row_rule_save['checkup_parameter']);
$checkup_parameter = "";
// $checkup_parameter_sql = "select column_name from checkup_parameter where key_health_map_name='" . $row_rule_save['checkup_parameter'] . "' and checkup_form_section_id='".$row_section['section_id']."' and FIND_IN_SET('" . $checkup_type_id . "',checkup_type_ids)";
$checkup_parameter_sql = "select column_name from checkup_parameter where key_health_map_name='" . $row_rule_save['checkup_parameter'] . "' and checkup_form_section_id='" . $row_section['section_id'] . "'";
error_log("to get parameter id name " . $checkup_parameter_sql);
$result_param = mysqli_query($conn, $checkup_parameter_sql);
while ($row_param = mysqli_fetch_assoc($result_param)) {
$checkup_parameter = $row_param['column_name'];
}
error_log("checkup_parameter " . $checkup_parameter);
$condition = getTableFieldValue('rule_condition', 'condition_sy', 'rule_condition_id', $row_rule_save['condition_id']);
error_log("condition " . $condition);
$joiner = getTableFieldValue('rule_joiner', 'joiner_sy', 'rule_joiner_id', $row_rule_save['joiner_id']);
error_log("joiner " . $joiner);
$user_entered_param_value = getSavedValue($checkup_parameter,$checkup_id);
error_log("result_param: " . $result_id);
error_log("value " . $user_entered_param_value);
if ($result_id === "0" || $result_id === 0) {
if ($user_entered_param_value == "") {
// break;
} else {
$equation = $equation . $joiner . $row_rule_save['op_br'] . $user_entered_param_value . $condition . $row_rule_save['rule_s_val'] . $row_rule_save['cl_br'];
error_log("equation " . $equation);
}
} else {
if ($user_entered_param_value == "" && $row_rule_save['rule_s_val'] != '0') {
$equation = $equation . $joiner . $row_rule_save['op_br'] . $condition . $row_rule_save['rule_s_val'] . $row_rule_save['cl_br'];
error_log("got here equation is in else if " . $equation);
} else {
if ($row_rule_save['rule_s_val'] == '0') {
$equation = $equation . $joiner . $row_rule_save['op_br'] . $user_entered_param_value . $condition . $row_rule_save['cl_br'];
error_log("got here equation is in else in if " . $equation);
} else {
$equation = $equation . $joiner . $row_rule_save['op_br'] . $user_entered_param_value . $condition . $row_rule_save['rule_s_val'] . $row_rule_save['cl_br'];
error_log("got here equation is in else in else " . $equation);
}
error_log("equation " . $equation);
}
}
}
if ($equation != "" && ($result_id == "" || $result_id == 0 || $result_id == null)) {
eval("\$resultr = $equation;");
error_log("result " . $resultr);
if ($resultr == 1 || $resultr == true) {
$abnormality = getFieldFromTable('abnormality_name', 'abnormality', 'abnormality_id', $row_rule['abnormality']);
error_log("abnormalities " . $abnormality);
array_push($data, $abnormality);
error_log("abnormalities " . print_r($data, true));
}
} else if ($equation != "" && ($result_id != "" && $result_id != 0 && $result_id != null)) {
error_log("we got the equation " . $equation);
$final_cal_val = solveMathExpression($equation);
$checkup_parameter_id = getFieldFromTable('column_name', 'checkup_parameter', 'checkup_parameter_id', $result_id);
$param_data[$checkup_parameter_id] = $final_cal_val;
}
}
}
}
}
} else {
error_log("patient id " . $patient_id);
$pat_dob = getFieldFromTable('dob', 'patient_master', 'id', $patient_id);
$today = date("Y-m-d");
error_log("pat_dob " . $pat_dob);
$age = ($today - $pat_dob);
error_log("age " . $age);
$pat_gender = getFieldFromTable('gender', 'patient_master', 'id', $patient_id);
error_log("patient gender " . $pat_gender);
$sql_section = "";
if ($appointment_type == 'O') {
$sql_section = "select * from checkup_parameter where opd_param='1' having rule_ids!= ''";
} else if ($appointment_type == 'I') {
$sql_section = "select * from checkup_parameter where inj_param='1' having rule_ids!= ''";
}
error_log("query for rules " . $sql_section);
$result_section = mysqli_query($conn, $sql_section);
while ($row_section = mysqli_fetch_assoc($result_section)) {
$rule_eq = getCommaSeperatedValuesToInClause($row_section['rule_ids']);
$rule_sql = "select * from rule_equation where rule_eq_id in $rule_eq";
error_log("rule sql " . $rule_sql);
$result_rule = mysqli_query($conn, $rule_sql);
// now running loop for every selected rule equations
while ($row_rule = mysqli_fetch_assoc($result_rule)) {
$rule_age_start = $row_rule['rule_age_start'];
$rule_age_end = $row_rule['rule_age_end'];
$rule_gender = $row_rule['rule_gender'];
$result_id = $row_rule['result'];
error_log("it has the result field value of " . $result_id);
error_log("equation age gender data " . $rule_age_start . " " . $rule_age_end . " " . $rule_gender);
if (intval($rule_age_end) != 0) {
if (intval($rule_age_start) > intval($age)) {
error_log("got here and continue for age mismatch" . $rule_age_start . " " . $age);
continue;
} else if (intval($rule_age_end) < intval($age)) {
error_log("got here and continue for age mismatch" . $rule_age_end . " " . $age);
continue;
}
}
if (($rule_gender != "" || $rule_gender != null) && $rule_gender != $pat_gender) {
error_log("got here and continue for gender mismatch");
continue;
} else {
$equation = "";
$rule_save = "select * from rule_save where equation_rule_id='" . $row_rule['rule_eq_id'] . "'";
error_log("rule save " . $rule_save);
$result_rule_save = mysqli_query($conn, $rule_save);
//making the rule equation and running
while ($row_rule_save = mysqli_fetch_assoc($result_rule_save)) {
$key_name = getFieldFromTable('kay_param_name', 'key_health_reportable_parameter_master', 'key_param_id', $row_rule_save['checkup_parameter']);
$checkup_parameter = "";
if ($_REQUEST['appointment_type'] == 'O') {
$checkup_parameter_sql = "select column_name from checkup_parameter where key_health_map_name='" . $row_rule_save['checkup_parameter'] . "' and opd_param='1'";
} else if ($_REQUEST['appointment_type'] == 'I') {
$checkup_parameter_sql = "select column_name from checkup_parameter where key_health_map_name='" . $row_rule_save['checkup_parameter'] . "' and inj_param='1'";
}
error_log("to get parameter id name " . $checkup_parameter_sql);
$result_param = mysqli_query($conn, $checkup_parameter_sql);
while ($row_param = mysqli_fetch_assoc($result_param)) {
$checkup_parameter = $row_param['column_name'];
}
error_log("checkup_parameter " . $checkup_parameter);
$condition = getTableFieldValue('rule_condition', 'condition_sy', 'rule_condition_id', $row_rule_save['condition_id']);
error_log("condition " . $condition);
$joiner = getTableFieldValue('rule_joiner', 'joiner_sy', 'rule_joiner_id', $row_rule_save['joiner_id']);
error_log("joiner " . $joiner);
$user_entered_param_value = getSavedValue($checkup_parameter,$checkup_id);
error_log("result_param: " . $result_id);
error_log("value " . $user_entered_param_value);
if ($result_id === "0" || $result_id === 0) {
if ($user_entered_param_value == "") {
// break;
} else {
$equation = $equation . $joiner . $row_rule_save['op_br'] . $user_entered_param_value . $condition . $row_rule_save['rule_s_val'] . $row_rule_save['cl_br'];
error_log("equation " . $equation);
}
} else {
if ($user_entered_param_value == "" && $row_rule_save['rule_s_val'] != '0') {
$equation = $equation . $joiner . $row_rule_save['op_br'] . $condition . $row_rule_save['rule_s_val'] . $row_rule_save['cl_br'];
error_log("got here equation is in else if " . $equation);
} else {
if ($row_rule_save['rule_s_val'] == '0') {
$equation = $equation . $joiner . $row_rule_save['op_br'] . $user_entered_param_value . $condition . $row_rule_save['cl_br'];
error_log("got here equation is in else in if " . $equation);
} else {
$equation = $equation . $joiner . $row_rule_save['op_br'] . $user_entered_param_value . $condition . $row_rule_save['rule_s_val'] . $row_rule_save['cl_br'];
error_log("got here equation is in else in else " . $equation);
}
error_log("equation " . $equation);
}
}
}
if ($equation != "" && ($result_id == "" || $result_id == 0 || $result_id == null)) {
eval("\$resultr = $equation;");
error_log("result " . $resultr);
if ($resultr == 1 || $resultr == true) {
$abnormality = getFieldFromTable('abnormality_name', 'abnormality', 'abnormality_id', $row_rule['abnormality']);
error_log("abnormalities " . $abnormality);
array_push($data, $abnormality);
error_log("abnormalities " . print_r($data, true));
}
} else if ($equation != "" && ($result_id != "" && $result_id != 0 && $result_id != null)) {
error_log("we got the equation " . $equation);
$final_cal_val = solveMathExpression($equation);
$checkup_parameter_id = getFieldFromTable('column_name', 'checkup_parameter', 'checkup_parameter_id', $result_id);
$param_data[$checkup_parameter_id] = $final_cal_val;
}
}
}
}
}
$final_result = array(
'data' => $data,
'result' => $param_data
);
return $final_result;
}
function getSavedValue($checkup_parameter,$checkup_form_id){
$checkup_parameter_sql = "select checkup_form_value from checkup_form_key_value where checkup_form_key='" . $checkup_parameter . "' and checkup_form_id='".$checkup_form_id."' ";
error_log("get parameter saved value " . $checkup_parameter_sql);
$checkup_parameter='';
$result_param = mysqli_query($GLOBALS['conn'], $checkup_parameter_sql);
while ($row_param = mysqli_fetch_assoc($result_param)) {
$checkup_parameter = $row_param['checkup_form_value'];
}
return $checkup_parameter;
}
function solveMathExpression($expression)
{
// Define a regular expression pattern to match a valid math expression
// $pattern = "/^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?(\s*[-+*\/]\s*[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)*$/";
// Check if the math expression matches the pattern
// if (preg_match($pattern, $expression)) {
try {
return round(eval("return ($expression);"), 2);
} catch (ParseError $e) {
error_log("getting exception in this " . $e->getMessage());
}
// } else {
// error_log("equation is not valid");
// }
}
commit();
echo json_encode($response);