Example #1
0
             $curr_cross_gender_total += $curr_total;
         } else {
             # Genderwise count required.
             # Create filter
             $disease_filter = new DiseaseSetFilter();
             $disease_filter->patientAgeRange = array(0, 200);
             $disease_filter->measureId = getLabMeasureIdFromGlobalName($measure->name, $labConfigId);
             $disease_filter->rangeType = $range_type;
             $disease_filter->rangeValues = $range_value;
             ## Count for males.
             $disease_filter->patientGender = 'M';
             $curr_total1 = StatsLib::getDiseaseFilterCount($disease_filter);
             $curr_male_total += $curr_total1;
             ## Count for females.
             $disease_filter->patientGender = 'F';
             $curr_total2 = StatsLib::getDiseaseFilterCount($disease_filter);
             $curr_female_total += $curr_total2;
         }
         # Build assoc list to track genderwise totals
         $male_total[$range_value_count] += $curr_male_total;
         $female_total[$range_value_count] += $curr_female_total;
         $cross_gender_total[$range_value_count] += $curr_male_total + $curr_female_total;
     }
 }
 if ($site_settings->groupByGender == 1) {
     for ($i = 1; $i <= count($range_values); $i++) {
         $this_male_total = $male_total[$i];
         $this_female_total = $female_total[$i];
         $this_cross_gender_total = $this_male_total + $this_female_total;
     }
 }
Example #2
0
                 }
             }
         }
     }
 }
 #
 # Disease Report related functions
 # Called from report_disease.php
 #
 public static function getDiseaseTotal($lab_config, $test_type, $date_from, $date_to)
 {
     # Returns the total number of tests performed during the given date range
     $query_string = "SELECT COUNT(*) AS val FROM test t, specimen sp " . "WHERE t.test_type_id={$test_type->testTypeId} " . "AND t.specimen_id=sp.specimen_id " . "AND t.result <> '' " . "AND (sp.date_collected BETWEEN '{$date_from}' AND '{$date_to}')";
     $saved_db = DbUtil::switchToLabConfig($lab_config->id);
     $resultset = query_associative_all($query_string, $row_count);
     DbUtil::switchRestore($saved_db);
     return $resultset[0]['val'];
 }
 public static function setDiseaseSetList($lab_config, $test_type, $date_from, $date_to, $multipleCount = 0)
 {
     # Initializes diseaseSetList for capturing params
     if ($multipleCount == 0) {
         StatsLib::$diseaseSetList = array();
     }
     $query_string = "SELECT t.result AS result_value, " . "p.sex AS patient_gender, " . "p.patient_id AS patient_id " . "FROM test t, specimen sp, patient p " . "WHERE t.specimen_id=sp.specimen_id " . "AND t.result <> '' " . "AND t.test_type_id={$test_type->testTypeId} " . "AND (sp.date_collected BETWEEN '{$date_from}' AND '{$date_to}') " . "AND sp.patient_id=p.patient_id";
     $saved_db = DbUtil::switchToLabConfig($lab_config->id);
     $resultset = query_associative_all($query_string, $row_count);
     $measure_list = $test_type->getMeasureIds();
     if (count($resultset) == 0 || $resultset == null) {
         DbUtil::switchRestore($saved_db);
         return;
     }
     foreach ($resultset as $record) {
         $patient_id = $record['patient_id'];
         $patient = Patient::getById($patient_id);
         $current_set = new DiseaseSet();
         $current_set->resultValues = array();
         $result_csv_parts = explode(",", $record['result_value']);
         # Build assoc list for result values
         ## Format: resultValues[measure_id] = result_value
         for ($i = 0; $i < count($measure_list); $i++) {
             $result_part = $result_csv_parts[$i];
             if (trim($result_part) == "") {
                 continue;
             }
             $curr_measure_id = $measure_list[$i];
             $current_set->resultValues[$curr_measure_id] = $result_part;
         }
Example #3
0
function get_cumul_stats($lab_config_id, $test_type_id, $date_from, $date_to)
{
    $lab_config = LabConfig::getById($lab_config_id);
    $test_type = TestType::getById($test_type_id);
    $measure_list = $test_type->getMeasures();
    $site_settings = DiseaseReport::getByKeys($lab_config->id, 0, 0);
    $age_group_list = $site_settings->getAgeGroupAsList();
    ?>
	<table class='pretty_print' style='border-collapse: collapse;'>
	<thead>
		<tr valign='top'>
			<th><?php 
    echo LangUtil::$generalTerms['TEST'];
    ?>
</th>
			<th ><?php 
    echo LangUtil::$generalTerms['RESULTS'];
    ?>
</th>
			<?php 
    if ($site_settings->groupByGender == 1) {
        echo "<th >" . LangUtil::$generalTerms['GENDER'] . "</th>";
    }
    if ($site_settings->groupByAge == 1) {
        echo "<th >" . LangUtil::$pageTerms['RANGE_AGE'] . "</th>";
        for ($i = 1; $i < count($age_group_list); $i++) {
            echo "<th >" . LangUtil::$pageTerms['RANGE_AGE'] . "</th>";
        }
    }
    if ($site_settings->groupByGender == 1) {
        echo "<th ></th>";
    }
    ?>
			<th ><?php 
    echo LangUtil::$pageTerms['TOTAL'];
    ?>
</th>
			<th ><?php 
    echo LangUtil::$pageTerms['TOTAL_TESTS'];
    ?>
</th>
		</tr>
		<tr>
			<th ></th>
			<th ></th>
			<?php 
    if ($site_settings->groupByGender == 1) {
        echo "<th ></th>";
    }
    if ($site_settings->groupByAge == 1) {
        foreach ($age_group_list as $age_slot) {
            echo "<th>{$age_slot['0']}";
            if (trim($age_slot[1]) == "+") {
                echo "+";
            } else {
                echo " - {$age_slot['1']}";
            }
            echo "</th>";
        }
    }
    if ($site_settings->groupByGender == 1) {
        echo "<th >" . LangUtil::$pageTerms['TOTAL_MF'] . "</th>";
    }
    echo "<th ></th>";
    echo "<th ></th>";
    ?>
		<tr>
	</thead>
	<tbody>
	<?php 
    StatsLib::setDiseaseSetList($lab_config, $test_type, $date_from, $date_to);
    $measures = $test_type->getMeasures();
    foreach ($measures as $measure) {
        $male_total = array();
        $female_total = array();
        $cross_gender_total = array();
        $curr_male_total = 0;
        $curr_female_total = 0;
        $curr_cross_gender_total = 0;
        $disease_report = DiseaseReport::getByKeys($lab_config->id, $test_type->testTypeId, $measure->measureId);
        if ($disease_report == null) {
            # TODO: Check for error control
            # Alphanumeric values. Hence entry not found.
            //continue;
        }
        $is_range_options = true;
        if (strpos($measure->range, "/") === false) {
            $is_range_options = false;
        }
        $range_values = array();
        if ($is_range_options) {
            # Alphanumeric options
            $range_values = explode("/", $measure->range);
        } else {
            # Numeric ranges: Fetch ranges configured for this test-type/measure from DB
            $range_values = $disease_report->getMeasureGroupAsList();
        }
        ?>
		<tr valign='top'>
			<td><?php 
        echo $measure->getName();
        ?>
</td>
			<td>
			<?php 
        foreach ($range_values as $range_value) {
            if ($is_range_options) {
                echo "{$range_value}<br>";
            } else {
                echo "{$range_value['0']}-{$range_value['1']}<br>";
            }
            if ($site_settings->groupByGender == 1) {
                echo "<br>";
            }
        }
        ?>
			</td>
			<?php 
        if ($site_settings->groupByGender == 1) {
            # Group by gender set to true
            echo "<td>";
            for ($i = 1; $i <= count($range_values); $i++) {
                echo "M<br>F<br>";
            }
        }
        if ($site_settings->groupByAge == 1) {
            # Group by age set to true: Fetch age slots from DB
            $age_slot_list = $site_settings->getAgeGroupAsList();
            foreach ($age_slot_list as $age_slot) {
                echo "<td>";
                $range_value_count = 0;
                foreach ($range_values as $range_value) {
                    $range_value_count++;
                    if (!isset($male_total[$range_value_count])) {
                        $male_total[$range_value_count] = 0;
                        $female_total[$range_value_count] = 0;
                        $cross_gender_total[$range_value_count] = 0;
                    }
                    $curr_male_total = 0;
                    $curr_female_total = 0;
                    $curr_cross_gender_total = 0;
                    $range_type = DiseaseSetFilter::$CONTINUOUS;
                    if ($is_range_options == true) {
                        $range_type = DiseaseSetFilter::$DISCRETE;
                    }
                    if ($site_settings->groupByGender == 0) {
                        # No genderwise count required.
                        # Create filter
                        $disease_filter = new DiseaseSetFilter();
                        $disease_filter->patientAgeRange = $age_slot;
                        $disease_filter->patientGender = null;
                        $disease_filter->measureId = $measure->measureId;
                        $disease_filter->rangeType = $range_type;
                        $disease_filter->rangeValues = $range_value;
                        $curr_total = StatsLib::getDiseaseFilterCount($disease_filter);
                        $curr_cross_gender_total += $curr_total;
                        echo "{$curr_total}<br>";
                    } else {
                        # Genderwise count required.
                        # Create filter
                        $disease_filter = new DiseaseSetFilter();
                        $disease_filter->patientAgeRange = $age_slot;
                        $disease_filter->measureId = $measure->measureId;
                        $disease_filter->rangeType = $range_type;
                        $disease_filter->rangeValues = $range_value;
                        ## Count for males.
                        $disease_filter->patientGender = 'M';
                        $curr_total1 = StatsLib::getDiseaseFilterCount($disease_filter);
                        $curr_male_total += $curr_total1;
                        ## Count for females.
                        $disease_filter->patientGender = 'F';
                        $curr_total2 = StatsLib::getDiseaseFilterCount($disease_filter);
                        $curr_female_total += $curr_total2;
                        echo "{$curr_total1}<br>{$curr_total2}<br>";
                    }
                    # Build assoc list to track genderwise totals
                    $male_total[$range_value_count] += $curr_male_total;
                    $female_total[$range_value_count] += $curr_female_total;
                    $cross_gender_total[$range_value_count] += $curr_cross_gender_total;
                }
                echo "</td>";
            }
        } else {
            # Age slots not configured: Show cumulative count for all age values
            $range_value_count = 0;
            foreach ($range_values as $range_value) {
                $range_value_count++;
                if (!isset($male_total[$range_value_count])) {
                    $male_total[$range_value_count] = 0;
                    $female_total[$range_value_count] = 0;
                    $cross_gender_total[$range_value_count] = 0;
                }
                $curr_male_total = 0;
                $curr_female_total = 0;
                $curr_cross_gender_total = 0;
                $range_type = DiseaseSetFilter::$CONTINUOUS;
                if ($is_range_options == true) {
                    $range_type = DiseaseSetFilter::$DISCRETE;
                }
                if ($site_settings->groupByGender == 0) {
                    # No genderwise count required.
                    # Create filter
                    $disease_filter = new DiseaseSetFilter();
                    $disease_filter->patientAgeRange = array(0, 200);
                    $disease_filter->patientGender = null;
                    $disease_filter->measureId = $measure->measureId;
                    $disease_filter->rangeType = $range_type;
                    $disease_filter->rangeValues = $range_value;
                    $curr_total = StatsLib::getDiseaseFilterCount($disease_filter);
                    $curr_cross_gender_total += $curr_total;
                } else {
                    # Genderwise count required.
                    # Create filter
                    $disease_filter = new DiseaseSetFilter();
                    $disease_filter->patientAgeRange = array(0, 200);
                    $disease_filter->measureId = $measure->measureId;
                    $disease_filter->rangeType = $range_type;
                    $disease_filter->rangeValues = $range_value;
                    ## Count for males.
                    $disease_filter->patientGender = 'M';
                    $curr_total1 = StatsLib::getDiseaseFilterCount($disease_filter);
                    $curr_male_total += $curr_total1;
                    ## Count for females.
                    $disease_filter->patientGender = 'F';
                    $curr_total2 = StatsLib::getDiseaseFilterCount($disease_filter);
                    $curr_female_total += $curr_total2;
                }
                # Build assoc list to track genderwise totals
                $male_total[$range_value_count] += $curr_male_total;
                $female_total[$range_value_count] += $curr_female_total;
                $cross_gender_total[$range_value_count] += $curr_cross_gender_total;
            }
        }
        if ($site_settings->groupByGender == 1) {
            echo "<td>";
            for ($i = 1; $i <= count($range_values); $i++) {
                $this_male_total = $male_total[$i];
                $this_female_total = $female_total[$i];
                echo "{$this_male_total}<br>{$this_female_total}<br>";
                $this_cross_gender_total = $this_male_total + $this_female_total;
            }
            echo "</td>";
        }
        echo "<td>";
        for ($i = 1; $i <= count($range_values); $i++) {
            if ($site_settings->groupByGender == 1) {
                echo $male_total[$i] + $female_total[$i];
                echo "<br><br>";
            } else {
                echo $cross_gender_total[$i];
                echo "<br>";
            }
        }
        echo "</td>";
        # Grand total:
        # TODO: Check the following function for off-by-one error
        //$disease_total = StatsLib::getDiseaseTotal($lab_config, $test, $date_from, $date_to);
        //echo "<td >$disease_total</td>";
        echo "<td>";
        if ($site_settings->groupByGender == 1) {
            echo array_sum($male_total) + array_sum($female_total);
        } else {
            echo array_sum($cross_gender_total);
        }
        echo "</td>";
        ?>
			</tr>
			<?php 
    }
    ?>
	</tbody>
	</table>
	<?php 
}