ohctech_p8/ppbs_rule_equation.php
2024-10-16 19:18:52 +05:30

153 lines
4.7 KiB
PHP

<?php
include('includes/config/config.php');
include('includes/functions.php');
include('log_entry.php');
header('Content-Type: application/json');
$ohc_type = $_SESSION['current_ohcttype'];
function processData($conn, $checkupFormKey, $ruleResult, $ruleEquationLike)
{
$dataQuery = "
SELECT
cfkv.id,
cfkv.checkup_form_id,
cfkv.checkup_form_key,
cfkv.checkup_form_value,
ct.checkup_date,
ct.checkup_type_id,
ctype.checkup_type_name,
pm.dept_id,
d.dept_name
FROM
checkup_form_key_value cfkv
JOIN
checkup_form ct ON cfkv.checkup_form_id = ct.checkup_id
JOIN
checkup_type ctype ON ct.checkup_type_id = ctype.checkup_type_id
JOIN
patient_master pm ON ct.emp_id = pm.id
JOIN
department d ON pm.dept_id = d.dept_id
JOIN
checkup_parameter cp ON cfkv.checkup_form_key = cp.column_name
WHERE
ctype.checkup_type_name = 'Annual Medical Examination'
AND cp.key_health_map_name = (
SELECT key_param_id
FROM key_health_reportable_parameter_master
WHERE key_param_name = '$checkupFormKey'
)";
error_log('sql:' . $dataQuery);
$dataResult = $conn->query($dataQuery);
if (!$dataResult) {
error_log('Data Query Error: ' . $conn->error);
return ['error' => 'Data query failed.'];
}
$data = $dataResult->fetch_all(MYSQLI_ASSOC);
$rulesQuery = "
SELECT * FROM rule_equation
WHERE result IN ('$ruleResult')
AND rule_equation LIKE '%$ruleEquationLike%';
";
error_log('rule:' . $rulesQuery);
$rulesResult = $conn->query($rulesQuery);
$rules = $rulesResult->fetch_all(MYSQLI_ASSOC);
$abnormalityQuery = "SELECT abnormality_id, abnormality_name FROM abnormality";
$abnormalityResult = $conn->query($abnormalityQuery);
$abnormalityTypes = [];
while ($row = $abnormalityResult->fetch_assoc()) {
$abnormalityTypes[$row['abnormality_id']] = $row['abnormality_name'];
}
$abnormalityCounts = array_fill_keys(array_values($abnormalityTypes), 0);
$results = [];
foreach ($data as $row) {
$checkup_value = $row['checkup_form_value'];
error_log('Processing value: ' . $checkup_value);
$matched = false;
foreach ($rules as $rule) {
$rule_equation = str_replace($checkupFormKey, $checkup_value, $rule['rule_equation']);
error_log('Evaluating rule equation: ' . $rule_equation);
$isValid = false;
try {
$isValid = eval('return ' . $rule_equation . ';');
} catch (ParseError $e) {
error_log('ParseError in rule evaluation: ' . $e->getMessage());
}
if ($isValid) {
error_log('Is valid: true');
$matched = true;
$abnormality_id = $rule['abnormality'];
$abnormalityName = $abnormalityTypes[$abnormality_id] ?? 'Unknown';
if (isset($abnormalityCounts[$abnormalityName])) {
$abnormalityCounts[$abnormalityName]++;
}
$results[] = [
'checkup_form_id' => $row['checkup_form_id'],
'checkup_form_key' => $row['checkup_form_key'],
'checkup_form_value' => $row['checkup_form_value'],
'checkup_date' => $row['checkup_date'],
'abnormality_name' => $abnormalityName,
'dept_name' => $row['dept_name']
];
break;
} else {
error_log('Is valid: false');
}
}
if (!$matched) {
$abnormalityCounts['Normal']++;
$results[] = [
'checkup_form_id' => $row['checkup_form_id'],
'checkup_form_key' => $row['checkup_form_key'],
'checkup_form_value' => $row['checkup_form_value'],
'checkup_date' => $row['checkup_date'],
'abnormality_name' => 'Normal',
'dept_name' => $row['dept_name']
];
}
}
$filteredCounts = [
'Mild' => $abnormalityCounts['Mild'] ?? 0,
'Moderate' => $abnormalityCounts['Moderate'] ?? 0,
'Severe' => $abnormalityCounts['Severe'] ?? 0,
'Normal' => $abnormalityCounts['Normal'] ?? 0
];
return [
'abnormality_counts' => $filteredCounts
];
}
$ppbsResults =
processData($conn, 'ppbs', '397', 'ppbs');
$response = [
'PPBS' => $ppbsResults,
];
echo json_encode($response);
$conn->close();