/** * @param $record * @param $debug */ public static function set_tx_data($record, $debug) { global $Proj, $project_id, $tx_prefixes, $dm_array, $tx_array, $endt_fields, $regimen_fields; $enable_kint = $debug && (isset($record) && $record != '') ? true : false; Kint::enabled($enable_kint); $baseline_event_id = $Proj->firstEventId; $fields = array_merge($dm_array, $tx_array, $endt_fields, array('trt_suppex_txstat')); $data = REDCap::getData('array', $record, $fields); $regimen_data = REDCap::getData('array', $record, $regimen_fields); foreach ($data AS $subject_id => $subject) { $start_stack = array(); $tx_start_date = null; $stop_date = null; $age_at_start = null; $end_values = array(); foreach ($subject AS $event_id => $event) { /** * build dm_rfstdtc array */ foreach ($tx_array AS $tx_start) { if ($event[$tx_start] != '') { $start_stack[] = $event[$tx_start]; } } /** * build entdtc array */ foreach ($endt_fields AS $endt_field) { if ($event[$endt_field] != '') { $end_values[$event_id][$endt_field] = $event[$endt_field]; } } } /** * SUBJECT LEVEL */ rsort($start_stack); $tx_start_date = get_end_of_array($start_stack); /** * dm_rfstdtc */ update_field_compare($subject_id, $project_id, $baseline_event_id, $tx_start_date, $subject[$baseline_event_id]['dm_rfstdtc'], 'dm_rfstdtc', $debug); /** * age is dependent on the dm_rfxstdtc, not the derived treatment start date used elsewhere */ $dm_rfxstdtc = $subject[$baseline_event_id]['dm_rfxstdtc']; if (isset($dm_rfxstdtc)) { /** * Age at start of treatment * age_suppvs_age */ if ($subject[$baseline_event_id]['dm_brthyr'] != '') { $birth_year = $subject[$baseline_event_id]['dm_brthyr']; } elseif ($subject[$baseline_event_id]['dm_brthdtc'] != '') { $birth_year = substr($subject[$baseline_event_id]['dm_brthdtc'], 0, 4); } else { $birth_year = ''; } if (isset($birth_year) && $birth_year != '') { $tx_start_year = substr($dm_rfxstdtc, 0, 4); $age_at_start = ($tx_start_year - $birth_year) > 0 ? $tx_start_year - $birth_year : null; } update_field_compare($subject_id, $project_id, $baseline_event_id, $age_at_start, $subject[$baseline_event_id]['age_suppvs_age'], 'age_suppvs_age', $debug); } /** * dependent on derived TX start */ if (isset($tx_start_date)) { /** * Date of last dose of HCV treatment or Treatment stop date * dis_suppfa_txendt */ $stack = array(); if (array_search_recursive('ONGOING', $end_values) === false) { foreach ($tx_prefixes AS $endt_prefix) { foreach ($end_values AS $event) { if ($event[$endt_prefix . '_exendtc'] != '' && ($event[$endt_prefix . '_suppex_extrtout'] == 'COMPLETE') || $event[$endt_prefix . '_suppex_extrtout'] == 'PREMATURELY_DISCONTINUED') { $stack[] = $event[$endt_prefix . '_exendtc']; d('PREFIX ' . $endt_prefix, $event); } } } } sort($start_stack); sort($stack); $last_date_in_start_stack = get_end_of_array($start_stack); $last_date_in_stack = get_end_of_array($stack); $stop_date = $last_date_in_stack < $last_date_in_start_stack ? null : $last_date_in_stack; d($end_values); d($start_stack); d($stack); d($last_date_in_start_stack); d($last_date_in_stack); d($stop_date); update_field_compare($subject_id, $project_id, $baseline_event_id, $stop_date, $subject[$baseline_event_id]['dis_suppfa_txendt'], 'dis_suppfa_txendt', $debug); /** * HCV Treatment duration */ if (isset($stop_date)) { $tx_start_date_obj = new DateTime($tx_start_date); $tx_stop_date_obj = new DateTime($stop_date); $tx_duration = $tx_start_date_obj->diff($tx_stop_date_obj); $dis_dsstdy = $tx_duration->format('%R%a') + 1; update_field_compare($subject_id, $project_id, $baseline_event_id, $dis_dsstdy, $subject[$baseline_event_id]['dis_dsstdy'], 'dis_dsstdy', $debug); } } /** * update treatment regimen */ $txstat = isset($tx_start_date) ? 'Y' : 'N'; $regimen = get_regimen($regimen_data[$subject_id], $subject[$baseline_event_id]['eot_dsterm'], $txstat); update_field_compare($subject_id, $project_id, $baseline_event_id, $regimen['actarm'], $subject[$baseline_event_id]['dm_actarm'], 'dm_actarm', $debug); update_field_compare($subject_id, $project_id, $baseline_event_id, $regimen['actarmcd'], $subject[$baseline_event_id]['dm_actarmcd'], 'dm_actarmcd', $debug); } }
$timer['start_fields'] = microtime(true); $dm_fields = array('dm_usubjid'); foreach ($fields AS $field_key => $field_name) { $dm_fields[] = $field_name; } $dm_fields = array_unique($dm_fields); $data = REDCap::getData('array', $subjects, $dm_fields, $first_event_id); $timer['have_data'] = microtime(true); foreach ($data AS $subject_id => $subject) { $usubjid = ''; $subjid = $subject_id; /** * treatment regimen (ARM) */ $regimen = get_regimen($regimen_data[$subject_id], $subject[$first_event_id][$fields['DSTERM']], $subject[$first_event_id][$fields['TXSTAT']]); /** * subject data */ foreach ($subject AS $event_id => $event) { $inner_vals = array(); if ($usubjid == '') { $usubjid = $event['dm_usubjid']; } /** * build values array */ foreach ($fields AS $key => $field) { if (!in_array($field, array($fields['USUBJID']))) { $inner_vals[$key] = $event[$field]; }