package CathReport; require XML::DOM; use Date::Manip; use POSIX qw(ceil floor); use strict; sub new { my $self = {}; $self->{CASE_HEADER} = undef; $self->{PATIENT} = undef; $self->{STAFF} = undef; $self->{PROC} = undef; $self->{LAB} = undef; $self->{PROC} = undef; $self->{ALDRETE} = undef; $self->{MED} = undef; $self->{CONDITIONS} = undef; bless($self); # but see below return $self; } 1; ## ³ sub CamPatData { my $obj = shift; Date_Init("TZ=EST"); if (@_) { my $file = shift; my $parser = XML::DOM::Parser->new(); my $doc = $parser->parsefile($file); my (@patdemo, @header); my (%staff_set, %labs, %inv, %cond); my(%staff, %p1, %lab, %p2, %diag); my (%aldrete, %notes, %vital, %tools); my (%header); my ($cathno, $t_arrive, $t_end, $t_start, $t_event, $event_name); my %cathevents; my ($ln, $fn, $sex, $dob, $htu, $htn, $wtu, $wtn, $patnum, $patient, $dos, $stat, $proct, $endt); my ($s1, $s2, $s3, $workerbee); my ($chemical, $bc, $bu, $bv); my ($procname, $procsite, @sites, $amounts, $connum, $loc, $pin); my ($cdate, $ctime, $csite, $chr1, $chr2); foreach my $cde ($doc->getElementsByTagName('CathDefinedEvents')) { $event_name = $cde->getAttribute('DefinedEventText'); $t_event = $cde->getElementsByTagName('EventTime')->item(0)->getFirstChild->getNodeValue; $cathevents{$event_name} = $t_event; } #Get Patient Data foreach $patient($doc->getElementsByTagName('SA_PATIENT')) { $ln = $patient->getElementsByTagName('MY_LAST_NAME')->item(0)->getFirstChild->getNodeValue; $fn = $patient->getElementsByTagName('MY_FIRST_NAME')->item(0)->getFirstChild->getNodeValue; $dob = $patient->getElementsByTagName('MY_BIRTH_DATE')->item(0)->getFirstChild->getNodeValue; $sex = $patient->getElementsByTagName('MY_GENDER')->item(0)->getFirstChild->getNodeValue; $dob = $patient->getElementsByTagName('MY_BIRTH_DATE')->item(0)->getFirstChild->getNodeValue; } foreach $patient($doc->getElementsByTagName('CathStudy')) { $htn = $patient->getElementsByTagName('PatHeight')->item(0)->getFirstChild->getNodeValue; $htu = $patient->getElementsByTagName('PatHeight')->item(0)->getAttribute('Units'); $wtn = $patient->getElementsByTagName('PatWeight')->item(0)->getFirstChild->getNodeValue; $wtu = $patient->getElementsByTagName('PatWeight')->item(0)->getAttribute('Units'); $patnum = $patient->getElementsByTagName('StudyID')->item(0)->getFirstChild->getNodeValue; } #Rounding Off $wtn = ceil($wtn); $htn = ceil($htn); my $date = ParseDate($dob); $dob = UnixDate($date,"%m/%d/%Y"); @patdemo = ($ln, $fn, $dob, $sex, $htn, $htu, $wtn, $wtu, $patnum); foreach $workerbee($doc->getElementsByTagName('CathStaff')) { $s1 = $workerbee->getElementsByTagName('LastName')->item(0)->getFirstChild->getNodeValue; $s2 = $workerbee->getElementsByTagName('FirstName')->item(0)->getFirstChild->getNodeValue; $s3 = $workerbee->getAttribute('Role'); $staff_set{$s3} = "$s2 $s1"; } foreach my $chemical($doc->getElementsByTagName('BloodComposition')) { my $bc = $chemical->getAttribute('BCMeasurement'); my $bv = $chemical->getElementsByTagName('Value')->item(0)->getFirstChild->getNodeValue; #$bv = floor($bv); $bv = sprintf("%.2f", $bv); $lab{$bc} = "$bv"; } foreach $pin($doc->getElementsByTagName('CathProcedure')) { $procname = $pin->getAttribute('Procedure'); $connum = $pin->getAttribute('ProcNum'); #Check site $inv{$connum} = "$procname"; } foreach my $dictation($doc->getElementsByTagName('CathLogEvent')) { my $timestamp = $dictation->getElementsByTagName('EventTime')->item(0)->getFirstChild->getNodeValue; my $notetext = $dictation->getElementsByTagName('EventText')->item(0)->getFirstChild->getNodeValue; $timestamp =~s/T/ /g; my $date = ParseDate($timestamp); #$timestamp = UnixDate($date,"%m/%d/%Y"); $timestamp = UnixDate($date,"%R"); $notes{$timestamp} = $notetext; } foreach my $oa($doc->getElementsByTagName('CathOA')) { my $oatime = $oa->getElementsByTagName('OAtime')->item(0)->getFirstChild->getNodeValue; my $sysbp = $oa->getElementsByTagName('Systolic')->item(0)->getFirstChild->getNodeValue; my $diabp = $oa->getElementsByTagName('Diastolic')->item(0)->getFirstChild->getNodeValue; my $hrt = $oa->getElementsByTagName('HeartRate')->item(0)->getFirstChild->getNodeValue; my $sao2 = $oa->getElementsByTagName('SaO2')->item(0)->getFirstChild->getNodeValue; my $resp = $oa->getElementsByTagName('RespRate')->item(0)->getFirstChild->getNodeValue; #my $oacom = $oa->getElementsByTagName('OAText')->item(0)->getFirstChild->getNodeValue; my $oacom = ""; $oatime =~s/T/ /g; $oatime = UnixDate($oatime,"%R"); $vital{$oatime} = [$sysbp, $diabp, $hrt, $sao2, $resp,$oacom]; } ###Aldrete foreach my $ald ($doc->getElementsByTagName('CathAldrete')) { my $aldtype = $ald->getAttribute('AldreteType'); my $aldact = $ald->getElementsByTagName('Activity')->item(0)->getFirstChild->getNodeValue; my $aldresp = $ald->getElementsByTagName('Respiration')->item(0)->getFirstChild->getNodeValue; my $aldcirc = $ald->getElementsByTagName('Circulation')->item(0)->getFirstChild->getNodeValue; my $aldloc = $ald->getElementsByTagName('LOC')->item(0)->getFirstChild->getNodeValue; my $aldcolor = $ald->getElementsByTagName('Color')->item(0)->getFirstChild->getNodeValue; my $aldtot = $ald->getElementsByTagName('TotalScore')->item(0)->getFirstChild->getNodeValue; $aldrete{$aldtype} = [$aldact, $aldresp, $aldloc, $aldcolor, $aldtot, $aldcirc]; } #$obj->{CONDITIONS} = \%cond; $obj->{PATIENT} = \@patdemo; $obj->{STAFF} = \%staff_set; $obj->{LAB} = \%lab; $obj->{PROC} = \%inv; $obj->{NOTES} = \%notes; $obj->{ONASS} = \%vital; $obj->{ALDRETE} = \%aldrete; } return $obj; }