Example #1
0
 public static function getTatDailyProgressionStats($lab_config, $test_type_id, $date_from, $date_to, $include_pending = false)
 {
     # Calculates weekly progression of TAT values for a given test type and time period
     global $DEFAULT_PENDING_TAT;
     # Default TAT value for pending tests (in days)
     $saved_db = DbUtil::switchToLabConfig($lab_config->id);
     $resultset = get_completed_tests_by_type($test_type_id, $date_from, $date_to);
     # {resultentry_ts, specimen_id, date_collected_ts}
     $progression_val = array();
     $progression_count = array();
     $percentile_tofind = 90;
     $percentile_count = array();
     $goal_val = array();
     # Return {day=>[avg tat, percentile tat, goal tat, [overdue specimen_ids], [pending specimen_ids]]}
     foreach ($resultset as $record) {
         $date_collected = $record['date_collected'];
         $date_ts = $record['ts'];
         $date_diff = $date_ts - $date_collected;
         $day_ts = $date_collected;
         $day_ts_datetime = date("Y-m-d H:i:s", $day_ts);
         if (!isset($progression_val[$day_ts])) {
             $progression_val[$day_ts] = array();
             $progression_val[$day_ts][0] = $date_diff;
             $percentile_count[$day_ts] = array();
             $percentile_count[$day_ts][] = $date_diff;
             $progression_count[$day_ts] = 1;
             $goal_tat[$day_ts] = $lab_config->getGoalTatValue($test_type_id, $day_ts_datetime);
             $progression_val[$day_ts][3] = array();
             $progression_val[$day_ts][4] = array();
         } else {
             $progression_val[$day_ts][0] += $date_diff;
             $percentile_count[$day_ts][] = $date_diff;
             $progression_count[$day_ts] += 1;
         }
         if ($date_diff / (60 * 60 * 24) > $goal_tat[$day_ts]) {
             # Add to list of TAT exceeded specimens
             $progression_val[$day_ts][3][] = $record['specimen_id'];
         }
     }
     if ($include_pending == true) {
         $pending_tat_value = $lab_config->getPendingTatValue();
         # in hours
         # Update the above list {day=>[avg tat, percentile tat, goal tat, [overdue specimen_ids], [pending specimen_ids]]}
         # For pending tests in this time duration
         $resultset_pending = get_pendingtat_tests_by_type($test_type_id, $date_from, $date_to);
         $num_pending = count($resultset_pending);
         foreach ($resultset_pending as $record) {
             $date_collected = $record['date_collected'];
             $date_ts = $record['ts'];
             $date_diff = $pending_tat_value * 60 * 60;
             $day_ts = $date_collected;
             $day_ts_datetime = date("Y-m-d H:i:s", $day_ts);
             if (!isset($progression_val[$day_ts])) {
                 $progression_val[$day_ts] = array();
                 $progression_val[$day_ts][0] = $date_diff;
                 $percentile_count[$day_ts] = array();
                 $percentile_count[$day_ts][] = $date_diff;
                 $progression_count[$day_ts] = 1;
                 $goal_tat[$day_ts] = $lab_config->getGoalTatValue($test_type_id, $day_ts_datetime);
                 $progression_val[$day_ts][3] = array();
                 $progression_val[$day_ts][4] = array();
             } else {
                 $progression_val[$day_ts][0] += $date_diff;
                 $percentile_count[$day_ts][] = $date_diff;
                 $progression_count[$day_ts] += 1;
             }
             # Add to list of TAT pending specimens
             $progression_val[$day_ts][4][] = $record['specimen_id'];
         }
     }
     foreach ($progression_val as $key => $value) {
         # Find average value
         $progression_val[$key][0] = $value[0] / $progression_count[$key];
         # Convert from sec timestamp to days
         $progression_val[$key][0] = $progression_val[$key][0] / (60 * 60 * 24);
         # Determine percentile value
         $progression_val[$key][1] = StatsLib::getPercentile($percentile_count[$key], $percentile_tofind);
         # Convert from sec timestamp to days
         $progression_val[$key][1] = $progression_val[$key][1] / (60 * 60 * 24);
         $progression_val[$key][2] = $goal_tat[$key];
     }
     DbUtil::switchRestore($saved_db);
     # Return {week=>[avg tat, percentile tat, goal tat, [overdue specimen_ids], [pending specimen_ids]]}
     return $progression_val;
 }
Example #2
0
function get_tat_data_per_test_per_lab_dir($test_type_id, $lab_config_id, $date_from, $date_to, $include_pending)
{
    global $DEFAULT_PENDING_TAT;
    # Default TAT value for pending tests (in days)
    $lab_config = LabConfig::getById($lab_config_id);
    date_default_timezone_set('UTC');
    $saved_db = DbUtil::switchToLabConfig($lab_config->id);
    $resultset = get_completed_tests_by_type($test_type_id, $date_from, $date_to);
    # {resultentry_ts, specimen_id, date_collected_ts}
    $progression_val = array();
    $progression_count = array();
    $cc = 1;
    //$percentile_tofind = 90;
    //$percentile_count = array();
    //$goal_val = array();
    # Return {week=>[avg tat, percentile tat, goal tat, [overdue specimen_ids], [pending specimen_ids]]}
    echo "!" . $date_to . "!";
    $from_e = explode('-', $date_from);
    $to_e = explode('-', $date_to);
    $start_ts = mktime(1, 1, 1, $from_e[1], $from_e[2], $from_e[0]);
    $end_ts = mktime(1, 1, 1, $to_e[1], $to_e[2], $to_e[0]);
    $week_start_ts = date("W", $start_ts);
    $year_start_ts = date("Y", $start_ts);
    $startingWeek = week_to_date2($week_start_ts, $year_start_ts);
    $week_end_ts = date("W", $end_ts);
    $year_end_ts = date("Y", $end_ts);
    $endingWeek = week_to_date2($week_end_ts, $year_end_ts);
    $weekDiff = mktime(1, 1, 1, 1, 1, 2000) - mktime(1, 1, 1, 1, 10, 2000);
    $wc = 0;
    $currentWeek = $startingWeek;
    $currentTS = $startingWeek;
    echo "sTS=" . $startingWeek;
    echo "cTS=" . $endingWeek;
    while ($currentWeek != $endingWeek) {
        $wc++;
        $currentTS = $currentTS + $weekDiff;
        $week_currentTS = date("W", $currentTS);
        $year_currentTS = date("Y", $currentTS);
        $currentWeek = week_to_date2($week_currentTS, $year_currentTS);
        $progression_count[$currentWeek] = 0;
        $progression_val[$currentWeek] = 0;
        $wc++;
    }
    echo "WC=" . $wc;
    foreach ($resultset as $record) {
        $date_collected = $record['date_collected'];
        $week_collected = date("W", $date_collected);
        $year_collected = date("Y", $date_collected);
        $week_ts = week_to_date2($week_collected, $year_collected);
        $week_ts_datetime = date("Y-m-d H:i:s", $week_ts);
        $date_ts = $record['ts'];
        $date_diff = $date_ts - $date_collected;
        if ($date_diff < 0) {
            $date_diff = 0;
        }
        //if(!isset($progression_val[$week_ts])) {
        if ($progression_val[$week_ts] == 0) {
            //$progression_val[$week_ts] = array();
            $progression_val[$week_ts] = $date_diff;
            //$percentile_count[$week_ts] = array();
            //$percentile_count[$week_ts][] = $date_diff;
            $progression_count[$week_ts] = 1;
            //$goal_tat[$week_ts] = $lab_config->getGoalTatValue($test_type_id, $week_ts_datetime);
            //$progression_val[$week_ts][3] = array();
            //$progression_val[$week_ts][4] = array();
        } else {
            $progression_val[$week_ts] += $date_diff;
            //$percentile_count[$week_ts][] = $date_diff;
            $progression_count[$week_ts] += 1;
            //$formattedValue = round($value[0],2);
            //$formattedDate = bcmul($key,1000);
            //ksort($stat_list);
        }
    }
    if ($include_pending === true) {
        $pending_tat_value = $lab_config->getPendingTatValue();
        # in hours
        # Update the above list {week=>[avg tat, percentile tat, goal tat, [overdue specimen_ids], [pending specimen_ids]]}
        # For pending tests in this time duration
        $resultset_pending = get_pendingtat_tests_by_type($test_type_id, $date_from, $date_to);
        $num_pending = count($resultset_pending);
        foreach ($resultset_pending as $record) {
            $date_collected = $record['date_collected'];
            $week_collected = date("W", $date_collected);
            $year_collected = date("Y", $date_collected);
            $week_ts = week_to_date2($week_collected, $year_collected);
            $week_ts_datetime = date("Y-m-d H:i:s", $week_ts);
            $date_ts = $record['ts'];
            $date_diff = $pending_tat_value * 60 * 60;
            if (!isset($progression_val[$week_ts])) {
                //$progression_val[$week_ts] = array();
                $progression_val[$week_ts] = $date_diff;
                //$percentile_count[$week_ts] = array();
                //$percentile_count[$week_ts][] = $date_diff;
                $progression_count[$week_ts] = 1;
                //$goal_tat[$week_ts] = $lab_config->getGoalTatValue($test_type_id, $week_ts_datetime);
                //$progression_val[$week_ts][3] = array();
                //$progression_val[$week_ts][4] = array();
            } else {
                if ($date_diff > 0) {
                    $progression_val[$week_ts] += $date_diff;
                }
                //$percentile_count[$week_ts][] = $date_diff;
                $progression_count[$week_ts] += 1;
            }
            # Add to list of TAT pending specimens
        }
    }
    $rstat = array();
    $wa = 7;
    $wc = 0;
    foreach ($progression_val as $key => $value) {
        # Find average value
        $progression_val[$key] = $value / $progression_count[$key];
        # Convert from sec timestamp to days
        $progression_val[$key] = $progression_val[$key] / (60 * 60 * 24);
        $rstat[$cc][1] = round($progression_val[$key], 2);
        $rstat[$cc][0] = date('d M Y', $key);
        //ksort($stat_list);
        $cc++;
        # Determine percentile value
        //$progression_val[$key][1] = getPercentile2($percentile_count[$key], $percentile_tofind);
        # Convert from sec timestamp to days
        //$progression_val[$key][1] = $progression_val[$key][1]/(60*60*24);
        //$progression_val[$key][2] = $goal_tat[$key];
    }
    DbUtil::switchRestore($saved_db);
    # Return {week=>[avg tat, percentile tat, goal tat, [overdue specimen_ids], [pending specimen_ids]]}
    //foreach($progression_val as )
    return $rstat;
}