Ejemplo n.º 1
0
	/**
	 * @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);
		}
	}
Ejemplo n.º 2
0
$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];
			}