RADRPT2A ;HISC/GJC Radiation dosage report utility two ;01 Aug 2017 1:28 PM
;;5.0;Radiology/Nuclear Medicine;**113,119**;Mar 16, 1998;Build 7
;
;--- IAs ---
;Call Number Type
;------------------------------------------------
;$$SS^%ZTLOAD 10063 S
;$$GET1^DIQ 2056 S
;GETS^DIQ 2056 S
;$$FMTE^XLFDT 10103 S
;$$CJ^XLFSTR 10104 S
;^DPT( 10035 S
;^DIC(4, 10060 S
;^VA(200, 10090 S
;where 'S'=Supported; 'C'=Controlled Subscription; 'P'=Private
;
DISPLAY ; display data
;
; Where the data for the report is stored:
; ----------------------------------------------------------------------------
; ^TMP($J,"RA SORT",RADTE,RASORT,RADFN,RACNI,"F") = Air Kerma ^ Air kerma Area Product ^ Total Fluoro time (min)
;
; ^TMP($J,"RA SORT",RADTE,RASORT,RADFN,RACNI,"S") = CTDIvol (total) ^ DLP (total)
;
; ^TMP($J,"RA SORT",RADTE,RASORT,RADFN,RACNI,n) = Phantom ptr (#2005.6362) ^ CTDIvol ^ DLP
; ----------------------------------------------------------------------------
;
;RARPTYPE=F:Fluoroscopy;D:Detailed;S:Summary
;RAFILTR=C:CPT Code;P:Patient;R:Radiologist
;
S $P(RABORDER,"=",(IOM+1))=""
S RAHDRBY=$S(RAFILTR="C":"CPT Code",RAFILTR="P":"Patient",1:"Radiologist")
S:RARPTYPE="S" RAHDRTY="CT Totals (ONLY) Radiation Dose Summary Report by "_RAHDRBY
S:RARPTYPE="D" RAHDRTY="CT by Series Radiation Dose Summary Report by "_RAHDRBY
S:RARPTYPE="F" RAHDRTY="Fluoro Radiation Dose Summary Report by "_RAHDRBY
S $P(RALINE,"-",(IOM+1))=""
S RAC=9999999.9999,(RAPG,RAQUIT,RAZTSTOP)=0
;
I ($D(^TMP($J,"RA SORT"))\10)=0 D D XIT Q
.D HDR S X="There are no Radiology exam records of file for the selected filter criteria."
.W !,$$CJ^XLFSTR(X,(IOM+1))
.Q
;
K ^TMP($J,"RA DISCLAIMER") D DISCLAIM
;
S RADTE("X")=$O(^TMP($J,"RA SORT",$C(32)),-1) ;last date/time subscript value
S RADTE=0 D HDR
F S RADTE=$O(^TMP($J,"RA SORT",RADTE)) Q:RADTE'>0 D Q:RAQUIT
.;RAXY("X") is the last ascending second level subscript value
.S RAXY="",RAXY("X")=$O(^TMP($J,"RA SORT",RADTE,$C(126)),-1)
.F S RAXY=$O(^TMP($J,"RA SORT",RADTE,RAXY)) Q:RAXY="" D Q:RAQUIT
..S RADFN=0,RADFN("X")=$O(^TMP($J,"RA SORT",RADTE,RAXY,$C(32)),-1)
..F S RADFN=$O(^TMP($J,"RA SORT",RADTE,RAXY,RADFN)) Q:RADFN'>0 D Q:RAQUIT
...;get patient demographics name & SSN
...D GETDEM S RACNI=0
...S RACNI("X")=$O(^TMP($J,"RA SORT",RADTE,RAXY,RADFN,$C(32)),-1)
...F S RACNI=$O(^TMP($J,"RA SORT",RADTE,RAXY,RADFN,RACNI)) Q:RACNI'>0 D Q:RAQUIT
....S RADTI=(RAC-RADTE),RAY2=$G(^RADPT(RADFN,"DT",RADTI,0))
....S RAY3=$G(^RADPT(RADFN,"DT",RADTI,"P",RACNI,0))
....;get exam/study based data
....D GETXAM
....;print by Fluoroscopy
....D:RARPTYPE="F" PRTFL Q:RAQUIT
....;print by CT summary
....D:RARPTYPE="S" CTDATA Q:RAQUIT
....;print by CT detail
....D:RARPTYPE="D" CTDATA Q:RAQUIT
....I $Y>(IOSL-4),(RACNI'=RACNI("X")) D EOS
....Q
...Q:RAQUIT I $Y>(IOSL-4),(RADFN'=RADFN("X")) D EOS
...Q
..Q:RAQUIT I $Y>(IOSL-4),(RAXY'=RAXY("X")) D EOS
..Q
.; RAP used as timing mechanism to check if the job was stopped
.Q:RAQUIT S RAZTSTOP=RAZTSTOP+1
.I $D(ZTQUEUED) S:RAZTSTOP#500=0 (RAQUIT,ZTSTOP)=$$S^%ZTLOAD()
.I $Y>(IOSL-4),(RADTE'=RADTE("X")) D EOS
.Q
;
I RAQUIT D XIT Q
S RADISCLM=""
D:$Y>(IOSL-4) EOS Q:RAQUIT
W ! F RAI=1:1:5 D Q:RAQUIT
.I RARPTYPE="F" Q:RAI=3!(RAI=4)
.I RARPTYPE="S" Q:RAI=3!(RAI=5)
.I RARPTYPE="D" Q:RAI=5
.S RAY=0
.F S RAY=$O(^TMP($J,"RA DISCLAIMER",RAI,RAY)) Q:RAY'>0 D Q:RAQUIT
..D:$Y>(IOSL-4) EOS Q:RAQUIT
..W !,$G(^TMP($J,"RA DISCLAIMER",RAI,RAY))
..Q
.Q:RAQUIT W ! ;break between disclaimers
.Q
D XIT
Q
;
XIT ;kill variables and exit...
K ^TMP($J,"RA DISCLAIMER"),RA71,RABORDER,RAC,RACN,RACNI,RACPT,RACTDI,RADATE
K RADFN,RADIEN,RADISCLM,RADLP,RADTE,RADTI,RAF,RAFAC,RAFILTR,RAFLMIN,RAFLSEC
K RAHDRBY,RAHDRTY,RAHDS,RAI,RAK,RAKAP,RAL,RALINE,RANAME,RANGE,RAPG,RAPHNTOM
K RAPRC,RAQUIT,RAR,RARPTYPE,RARUNDT,RASSN,RASTF,RASTNUM,RATMP,RAXY,RAY,RAY2
K RAY3,RAZTSTOP,X,Y S:$D(ZTQUEUED) ZTREQ="@"
Q
;
CTDATA ;print CT detailed series data or print summary totals
;
; ^TMP($J,"RA SORT",RADTE,RASORT,RADFN,RACNI,"S") = CTDIvol (total) ^ DLP (total)
;
; ^TMP($J,"RA SORT",RADTE,RASORT,RADFN,RACNI,RAI) = Phantom ptr (#2005.6362) ^ CTDIvol ^ DLP
;
N RACTDI,RADLP,RAF,RAHDS,RAI,RAPHNTOM,X
I RARPTYPE="D" D Q:RAQUIT
.S RAHDS=0 ;print the 'high 5'
.F S RAHDS=$O(^TMP($J,"RA SORT",RADTE,RAXY,RADFN,RACNI,RAHDS)) Q:RAHDS'>0 D Q:RAQUIT
..S RAF=$G(^TMP($J,"RA SORT",RADTE,RAXY,RADFN,RACNI,RAHDS))
..S RAPHNTOM=$$GET1^DIQ(2005.6362,+$P(RAF,U,1)_",",2)
..S RACTDI=$P(RAF,U,2),RADLP=$P(RAF,U,3)
..D PRTCTD I $Y>(IOSL-4) D EOS Q:RAQUIT
..Q
.;print totals for the detailed report
.Q:RAQUIT
.S X=$G(^TMP($J,"RA SORT",RADTE,RAXY,RADFN,RACNI,"S"))
.S RAHDS="Total",RACTDI=$P(X,U,1),RADLP=$P(X,U,2)
.S RAPHNTOM="" D PRTCTD
.Q
I RARPTYPE="S" D Q:RAQUIT
.S X=$G(^TMP($J,"RA SORT",RADTE,RAXY,RADFN,RACNI,"S"))
.S RACTDI=$P(X,U,1),RADLP=$P(X,U,2)
.D PRTCTS I $Y>(IOSL-4) D EOS Q:RAQUIT
.Q
Q
;
GETDEM ;get patient demographics name & SSN
K RATMP,X D GETS^DIQ(2,RADFN_",",".01;.09","E","RATMP")
S RANAME=RATMP(2,RADFN_",",".01","E")
S (RASSN("PID"),X)=RATMP(2,RADFN_",",".09","E")
S RASSN("BID")=$E(X,($L(X)-3),$L(X)) K RATMP,X
Q
;
GETXAM ;get exam/study based data
S RASTF=$$GET1^DIQ(200,+$P(RAY3,U,15)_",",.01)
S RA71(0)=$G(^RAMIS(71,+$P(RAY3,U,2),0))
S RAPRC=$P(RA71(0),U,1),RA71(9)=+$P(RA71(0),U,9)
;Example: 73000^X-RAY EXAM OF COLLAR BONE
S RACPT=$P($$NAMCODE^RACPTMSC(RA71(9),RADTE),U,1)
S RADATE=$$FMTE^XLFDT(RADTE,"2DZ")
Q
;
PRTCTS ;print CT summary data
W !,$E(RANAME,1,27),?29,RASSN("BID"),?35,RADATE,?45,RACPT,?52,$E(RAPRC,1,27),?81,$E(RASTF,1,27)
W ?110,$J(RACTDI,9,2),?121,$J(RADLP,9,2)
Q
;
PRTCTD ;print CT series/detailed data
W !,$E(RANAME,1,23),?25,RASSN("BID"),?31,RADATE,?41,RACPT,?48,$E(RAPRC,1,23),?73,$E(RASTF,1,23)
W ?98,RAHDS,?107,$J(RACTDI,9,2),?118,$J(RADLP,9,2)
Q
;
PRTFL ;print fluoroscopy data
S X=$G(^TMP($J,"RA SORT",RADTE,RAXY,RADFN,RACNI,"F"))
S RAK=$P(X,U,1),RAKAP=$P(X,U,2),RAFLMIN=$P(X,U,3)
W !,$E(RANAME,1,18),?25,RASSN("BID"),?31,RADATE,?41,RACPT,?48,$E(RAPRC,1,25),?75,$E(RASTF,1,23)
W ?99,$J(RAK,10,2),?112,$J(RAKAP,9,2),?125,RAFLMIN K X
Q
;
EOS ;end of screen - Note: EOS falls through to HDR!
I $E(IOST,1,2)="C-" D Q:RAQUIT
.W !,"Press RETURN to continue or '^' to exit: " R X:DTIME
.S RAQUIT='$T!(X["^") K X
.Q
HDR ;header
S RAPG=RAPG+1
W @IOF,!,"Facility",?20,": ",RAFAC,?120,"Page: ",RAPG
W !,"Station",?20,": ",RASTNUM
W !,"Report Date Range",?20,": ",RANGE
W !,"Report Run Date/Time",?20,": ",RARUNDT
W !,RABORDER D:('$D(RADISCLM)#2) @$S(RARPTYPE="F":"HDRFL",RARPTYPE="D":"HDRCTD",1:"HDRCTS")
Q
;
HDRCTD ;header for CT detailed
W !,RAHDRTY ;note: RAHDRTY is set at top of the routine
W !!?98,"Highest",!?98,"Dose",?107,"CTDIvol",?118,"DLP"
W !,"Patient",?25,"SSN",?31,"Date",?41,"CPT",?48,"Procedure Name",?73,"Radiologist",?98,"Series",?107,"mGy",?118,"mGy-cm"
W !,RALINE
Q
;
HDRCTS ;header for CT summary
W !,RAHDRTY
W !!?110,"Sum of",?121,"Sum of",!,?110,"all CDTI",?121,"all DLP"
W !,"Patient",?29,"SSN",?35,"Date",?45,"CPT",?52,"Procedure Name",?81,"Radiologist",?110,"vol mGy",?121,"mGy-cm"
W !,RALINE
Q
;
HDRFL ;header for fluoroscopy
W !,RAHDRTY
W !?100,"Air",?112,"Air Kerma",?125,"Fluoro",!?100,"Kerma",?112,"Area Product",?125,"Time"
W !,"Patient",?25,"SSN",?31,"Date",?41,"CPT",?48,"Procedure Name",?75,"Radiologist",?100,"mGy",?112,"Gy-cm2",?125,"min"
W !,RALINE
Q
;
DISCLAIM ;set up the disclaimer statements in an array
S ^TMP($J,"RA DISCLAIMER",1,1)="1. The purpose of this report is to facilitate tracking of procedure doses to"
S ^TMP($J,"RA DISCLAIMER",1,2)=" identify opportunities for improvement. It is not intended to provide a"
S ^TMP($J,"RA DISCLAIMER",1,3)=" complete record of patient dose. Doses resulting from plain films and"
S ^TMP($J,"RA DISCLAIMER",1,4)=" radiopharmaceuticals are not supported."
;(1,5)=""
S ^TMP($J,"RA DISCLAIMER",2,1)="2. Only procedures for which dose data has been received are listed. Data may"
S ^TMP($J,"RA DISCLAIMER",2,2)=" be missing if the modality does not support DICOM structured dose reporting,"
S ^TMP($J,"RA DISCLAIMER",2,3)=" if the dose report was not sent to VistA Imaging, if the radiology report was"
S ^TMP($J,"RA DISCLAIMER",2,4)=" was not verified, or if the procedure was performed/imported before patches"
S ^TMP($J,"RA DISCLAIMER",2,5)=" MAG*3*137 and RA*5*113 were installed."
;(2,6)=""
S ^TMP($J,"RA DISCLAIMER",3,1)="3. Only the five highest dose CT series are listed. The total dose refers"
S ^TMP($J,"RA DISCLAIMER",3,2)=" to the sum of all series and so may be larger than the sum of the five"
S ^TMP($J,"RA DISCLAIMER",3,3)=" displayed doses. This report may include CT localizer radiograph(s)"
S ^TMP($J,"RA DISCLAIMER",3,4)=" values as a series and/or included in the total depending on the CT"
S ^TMP($J,"RA DISCLAIMER",3,5)=" manufacturer."
;(3,6)=""
S ^TMP($J,"RA DISCLAIMER",4,1)="4. Radiology set workflow may show the total rad dose for a patient care event"
S ^TMP($J,"RA DISCLAIMER",4,2)=" under one CPT. If separate exposure instances during a CT examination were"
S ^TMP($J,"RA DISCLAIMER",4,3)=" of different body parts, the total CTDIvol stated here may exceed the actual"
S ^TMP($J,"RA DISCLAIMER",4,4)=" CTDIvol for any body part. More detailed dose information is available on the"
S ^TMP($J,"RA DISCLAIMER",4,5)=" modality (until it is deleted) or in the DICOM Radiation Dose Structured"
S ^TMP($J,"RA DISCLAIMER",4,6)=" Report (RDSR) file stored in VistA Imaging. Viewing the RDSR file is not yet"
S ^TMP($J,"RA DISCLAIMER",4,7)=" supported."
;(4,8)=""
S ^TMP($J,"RA DISCLAIMER",5,1)="5. Radiology set workflow may show the total rad dose for a patient care event"
S ^TMP($J,"RA DISCLAIMER",5,2)=" under one CPT. Air Kerma Area Product is also called the Dose Area Product."
S ^TMP($J,"RA DISCLAIMER",5,3)=" If fluoroscopy was performed using more than one projection, the total air"
S ^TMP($J,"RA DISCLAIMER",5,4)=" kerma stated here may exceed the air kerma to any single projection. More"
S ^TMP($J,"RA DISCLAIMER",5,5)=" detailed dose information is available on the modality (until it is deleted)"
S ^TMP($J,"RA DISCLAIMER",5,6)=" or in the DICOM Radiation Dose Structured Report (RDSR) file stored in VistA"
S ^TMP($J,"RA DISCLAIMER",5,7)=" Imaging. Viewing the RDSR file is not yet supported."
Q
;
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HRADRPT2A 10849 printed Oct 16, 2024@18:35:29 Page 2
RADRPT2A ;HISC/GJC Radiation dosage report utility two ;01 Aug 2017 1:28 PM
+1 ;;5.0;Radiology/Nuclear Medicine;**113,119**;Mar 16, 1998;Build 7
+2 ;
+3 ;--- IAs ---
+4 ;Call Number Type
+5 ;------------------------------------------------
+6 ;$$SS^%ZTLOAD 10063 S
+7 ;$$GET1^DIQ 2056 S
+8 ;GETS^DIQ 2056 S
+9 ;$$FMTE^XLFDT 10103 S
+10 ;$$CJ^XLFSTR 10104 S
+11 ;^DPT( 10035 S
+12 ;^DIC(4, 10060 S
+13 ;^VA(200, 10090 S
+14 ;where 'S'=Supported; 'C'=Controlled Subscription; 'P'=Private
+15 ;
DISPLAY ; display data
+1 ;
+2 ; Where the data for the report is stored:
+3 ; ----------------------------------------------------------------------------
+4 ; ^TMP($J,"RA SORT",RADTE,RASORT,RADFN,RACNI,"F") = Air Kerma ^ Air kerma Area Product ^ Total Fluoro time (min)
+5 ;
+6 ; ^TMP($J,"RA SORT",RADTE,RASORT,RADFN,RACNI,"S") = CTDIvol (total) ^ DLP (total)
+7 ;
+8 ; ^TMP($J,"RA SORT",RADTE,RASORT,RADFN,RACNI,n) = Phantom ptr (#2005.6362) ^ CTDIvol ^ DLP
+9 ; ----------------------------------------------------------------------------
+10 ;
+11 ;RARPTYPE=F:Fluoroscopy;D:Detailed;S:Summary
+12 ;RAFILTR=C:CPT Code;P:Patient;R:Radiologist
+13 ;
+14 SET $PIECE(RABORDER,"=",(IOM+1))=""
+15 SET RAHDRBY=$SELECT(RAFILTR="C":"CPT Code",RAFILTR="P":"Patient",1:"Radiologist")
+16 if RARPTYPE="S"
SET RAHDRTY="CT Totals (ONLY) Radiation Dose Summary Report by "_RAHDRBY
+17 if RARPTYPE="D"
SET RAHDRTY="CT by Series Radiation Dose Summary Report by "_RAHDRBY
+18 if RARPTYPE="F"
SET RAHDRTY="Fluoro Radiation Dose Summary Report by "_RAHDRBY
+19 SET $PIECE(RALINE,"-",(IOM+1))=""
+20 SET RAC=9999999.9999
SET (RAPG,RAQUIT,RAZTSTOP)=0
+21 ;
+22 IF ($DATA(^TMP($JOB,"RA SORT"))\10)=0
Begin DoDot:1
+23 DO HDR
SET X="There are no Radiology exam records of file for the selected filter criteria."
+24 WRITE !,$$CJ^XLFSTR(X,(IOM+1))
+25 QUIT
End DoDot:1
DO XIT
QUIT
+26 ;
+27 KILL ^TMP($JOB,"RA DISCLAIMER")
DO DISCLAIM
+28 ;
+29 ;last date/time subscript value
SET RADTE("X")=$ORDER(^TMP($JOB,"RA SORT",$CHAR(32)),-1)
+30 SET RADTE=0
DO HDR
+31 FOR
SET RADTE=$ORDER(^TMP($JOB,"RA SORT",RADTE))
if RADTE'>0
QUIT
Begin DoDot:1
+32 ;RAXY("X") is the last ascending second level subscript value
+33 SET RAXY=""
SET RAXY("X")=$ORDER(^TMP($JOB,"RA SORT",RADTE,$CHAR(126)),-1)
+34 FOR
SET RAXY=$ORDER(^TMP($JOB,"RA SORT",RADTE,RAXY))
if RAXY=""
QUIT
Begin DoDot:2
+35 SET RADFN=0
SET RADFN("X")=$ORDER(^TMP($JOB,"RA SORT",RADTE,RAXY,$CHAR(32)),-1)
+36 FOR
SET RADFN=$ORDER(^TMP($JOB,"RA SORT",RADTE,RAXY,RADFN))
if RADFN'>0
QUIT
Begin DoDot:3
+37 ;get patient demographics name & SSN
+38 DO GETDEM
SET RACNI=0
+39 SET RACNI("X")=$ORDER(^TMP($JOB,"RA SORT",RADTE,RAXY,RADFN,$CHAR(32)),-1)
+40 FOR
SET RACNI=$ORDER(^TMP($JOB,"RA SORT",RADTE,RAXY,RADFN,RACNI))
if RACNI'>0
QUIT
Begin DoDot:4
+41 SET RADTI=(RAC-RADTE)
SET RAY2=$GET(^RADPT(RADFN,"DT",RADTI,0))
+42 SET RAY3=$GET(^RADPT(RADFN,"DT",RADTI,"P",RACNI,0))
+43 ;get exam/study based data
+44 DO GETXAM
+45 ;print by Fluoroscopy
+46 if RARPTYPE="F"
DO PRTFL
if RAQUIT
QUIT
+47 ;print by CT summary
+48 if RARPTYPE="S"
DO CTDATA
if RAQUIT
QUIT
+49 ;print by CT detail
+50 if RARPTYPE="D"
DO CTDATA
if RAQUIT
QUIT
+51 IF $Y>(IOSL-4)
IF (RACNI'=RACNI("X"))
DO EOS
+52 QUIT
End DoDot:4
if RAQUIT
QUIT
+53 if RAQUIT
QUIT
IF $Y>(IOSL-4)
IF (RADFN'=RADFN("X"))
DO EOS
+54 QUIT
End DoDot:3
if RAQUIT
QUIT
+55 if RAQUIT
QUIT
IF $Y>(IOSL-4)
IF (RAXY'=RAXY("X"))
DO EOS
+56 QUIT
End DoDot:2
if RAQUIT
QUIT
+57 ; RAP used as timing mechanism to check if the job was stopped
+58 if RAQUIT
QUIT
SET RAZTSTOP=RAZTSTOP+1
+59 IF $DATA(ZTQUEUED)
if RAZTSTOP#500=0
SET (RAQUIT,ZTSTOP)=$$S^%ZTLOAD()
+60 IF $Y>(IOSL-4)
IF (RADTE'=RADTE("X"))
DO EOS
+61 QUIT
End DoDot:1
if RAQUIT
QUIT
+62 ;
+63 IF RAQUIT
DO XIT
QUIT
+64 SET RADISCLM=""
+65 if $Y>(IOSL-4)
DO EOS
if RAQUIT
QUIT
+66 WRITE !
FOR RAI=1:1:5
Begin DoDot:1
+67 IF RARPTYPE="F"
if RAI=3!(RAI=4)
QUIT
+68 IF RARPTYPE="S"
if RAI=3!(RAI=5)
QUIT
+69 IF RARPTYPE="D"
if RAI=5
QUIT
+70 SET RAY=0
+71 FOR
SET RAY=$ORDER(^TMP($JOB,"RA DISCLAIMER",RAI,RAY))
if RAY'>0
QUIT
Begin DoDot:2
+72 if $Y>(IOSL-4)
DO EOS
if RAQUIT
QUIT
+73 WRITE !,$GET(^TMP($JOB,"RA DISCLAIMER",RAI,RAY))
+74 QUIT
End DoDot:2
if RAQUIT
QUIT
+75 ;break between disclaimers
if RAQUIT
QUIT
WRITE !
+76 QUIT
End DoDot:1
if RAQUIT
QUIT
+77 DO XIT
+78 QUIT
+79 ;
XIT ;kill variables and exit...
+1 KILL ^TMP($JOB,"RA DISCLAIMER"),RA71,RABORDER,RAC,RACN,RACNI,RACPT,RACTDI,RADATE
+2 KILL RADFN,RADIEN,RADISCLM,RADLP,RADTE,RADTI,RAF,RAFAC,RAFILTR,RAFLMIN,RAFLSEC
+3 KILL RAHDRBY,RAHDRTY,RAHDS,RAI,RAK,RAKAP,RAL,RALINE,RANAME,RANGE,RAPG,RAPHNTOM
+4 KILL RAPRC,RAQUIT,RAR,RARPTYPE,RARUNDT,RASSN,RASTF,RASTNUM,RATMP,RAXY,RAY,RAY2
+5 KILL RAY3,RAZTSTOP,X,Y
if $DATA(ZTQUEUED)
SET ZTREQ="@"
+6 QUIT
+7 ;
CTDATA ;print CT detailed series data or print summary totals
+1 ;
+2 ; ^TMP($J,"RA SORT",RADTE,RASORT,RADFN,RACNI,"S") = CTDIvol (total) ^ DLP (total)
+3 ;
+4 ; ^TMP($J,"RA SORT",RADTE,RASORT,RADFN,RACNI,RAI) = Phantom ptr (#2005.6362) ^ CTDIvol ^ DLP
+5 ;
+6 NEW RACTDI,RADLP,RAF,RAHDS,RAI,RAPHNTOM,X
+7 IF RARPTYPE="D"
Begin DoDot:1
+8 ;print the 'high 5'
SET RAHDS=0
+9 FOR
SET RAHDS=$ORDER(^TMP($JOB,"RA SORT",RADTE,RAXY,RADFN,RACNI,RAHDS))
if RAHDS'>0
QUIT
Begin DoDot:2
+10 SET RAF=$GET(^TMP($JOB,"RA SORT",RADTE,RAXY,RADFN,RACNI,RAHDS))
+11 SET RAPHNTOM=$$GET1^DIQ(2005.6362,+$PIECE(RAF,U,1)_",",2)
+12 SET RACTDI=$PIECE(RAF,U,2)
SET RADLP=$PIECE(RAF,U,3)
+13 DO PRTCTD
IF $Y>(IOSL-4)
DO EOS
if RAQUIT
QUIT
+14 QUIT
End DoDot:2
if RAQUIT
QUIT
+15 ;print totals for the detailed report
+16 if RAQUIT
QUIT
+17 SET X=$GET(^TMP($JOB,"RA SORT",RADTE,RAXY,RADFN,RACNI,"S"))
+18 SET RAHDS="Total"
SET RACTDI=$PIECE(X,U,1)
SET RADLP=$PIECE(X,U,2)
+19 SET RAPHNTOM=""
DO PRTCTD
+20 QUIT
End DoDot:1
if RAQUIT
QUIT
+21 IF RARPTYPE="S"
Begin DoDot:1
+22 SET X=$GET(^TMP($JOB,"RA SORT",RADTE,RAXY,RADFN,RACNI,"S"))
+23 SET RACTDI=$PIECE(X,U,1)
SET RADLP=$PIECE(X,U,2)
+24 DO PRTCTS
IF $Y>(IOSL-4)
DO EOS
if RAQUIT
QUIT
+25 QUIT
End DoDot:1
if RAQUIT
QUIT
+26 QUIT
+27 ;
GETDEM ;get patient demographics name & SSN
+1 KILL RATMP,X
DO GETS^DIQ(2,RADFN_",",".01;.09","E","RATMP")
+2 SET RANAME=RATMP(2,RADFN_",",".01","E")
+3 SET (RASSN("PID"),X)=RATMP(2,RADFN_",",".09","E")
+4 SET RASSN("BID")=$EXTRACT(X,($LENGTH(X)-3),$LENGTH(X))
KILL RATMP,X
+5 QUIT
+6 ;
GETXAM ;get exam/study based data
+1 SET RASTF=$$GET1^DIQ(200,+$PIECE(RAY3,U,15)_",",.01)
+2 SET RA71(0)=$GET(^RAMIS(71,+$PIECE(RAY3,U,2),0))
+3 SET RAPRC=$PIECE(RA71(0),U,1)
SET RA71(9)=+$PIECE(RA71(0),U,9)
+4 ;Example: 73000^X-RAY EXAM OF COLLAR BONE
+5 SET RACPT=$PIECE($$NAMCODE^RACPTMSC(RA71(9),RADTE),U,1)
+6 SET RADATE=$$FMTE^XLFDT(RADTE,"2DZ")
+7 QUIT
+8 ;
PRTCTS ;print CT summary data
+1 WRITE !,$EXTRACT(RANAME,1,27),?29,RASSN("BID"),?35,RADATE,?45,RACPT,?52,$EXTRACT(RAPRC,1,27),?81,$EXTRACT(RASTF,1,27)
+2 WRITE ?110,$JUSTIFY(RACTDI,9,2),?121,$JUSTIFY(RADLP,9,2)
+3 QUIT
+4 ;
PRTCTD ;print CT series/detailed data
+1 WRITE !,$EXTRACT(RANAME,1,23),?25,RASSN("BID"),?31,RADATE,?41,RACPT,?48,$EXTRACT(RAPRC,1,23),?73,$EXTRACT(RASTF,1,23)
+2 WRITE ?98,RAHDS,?107,$JUSTIFY(RACTDI,9,2),?118,$JUSTIFY(RADLP,9,2)
+3 QUIT
+4 ;
PRTFL ;print fluoroscopy data
+1 SET X=$GET(^TMP($JOB,"RA SORT",RADTE,RAXY,RADFN,RACNI,"F"))
+2 SET RAK=$PIECE(X,U,1)
SET RAKAP=$PIECE(X,U,2)
SET RAFLMIN=$PIECE(X,U,3)
+3 WRITE !,$EXTRACT(RANAME,1,18),?25,RASSN("BID"),?31,RADATE,?41,RACPT,?48,$EXTRACT(RAPRC,1,25),?75,$EXTRACT(RASTF,1,23)
+4 WRITE ?99,$JUSTIFY(RAK,10,2),?112,$JUSTIFY(RAKAP,9,2),?125,RAFLMIN
KILL X
+5 QUIT
+6 ;
EOS ;end of screen - Note: EOS falls through to HDR!
+1 IF $EXTRACT(IOST,1,2)="C-"
Begin DoDot:1
+2 WRITE !,"Press RETURN to continue or '^' to exit: "
READ X:DTIME
+3 SET RAQUIT='$TEST!(X["^")
KILL X
+4 QUIT
End DoDot:1
if RAQUIT
QUIT
HDR ;header
+1 SET RAPG=RAPG+1
+2 WRITE @IOF,!,"Facility",?20,": ",RAFAC,?120,"Page: ",RAPG
+3 WRITE !,"Station",?20,": ",RASTNUM
+4 WRITE !,"Report Date Range",?20,": ",RANGE
+5 WRITE !,"Report Run Date/Time",?20,": ",RARUNDT
+6 WRITE !,RABORDER
if ('$DATA(RADISCLM)#2)
DO @$SELECT(RARPTYPE="F":"HDRFL",RARPTYPE="D":"HDRCTD",1:"HDRCTS")
+7 QUIT
+8 ;
HDRCTD ;header for CT detailed
+1 ;note: RAHDRTY is set at top of the routine
WRITE !,RAHDRTY
+2 WRITE !!?98,"Highest",!?98,"Dose",?107,"CTDIvol",?118,"DLP"
+3 WRITE !,"Patient",?25,"SSN",?31,"Date",?41,"CPT",?48,"Procedure Name",?73,"Radiologist",?98,"Series",?107,"mGy",?118,"mGy-cm"
+4 WRITE !,RALINE
+5 QUIT
+6 ;
HDRCTS ;header for CT summary
+1 WRITE !,RAHDRTY
+2 WRITE !!?110,"Sum of",?121,"Sum of",!,?110,"all CDTI",?121,"all DLP"
+3 WRITE !,"Patient",?29,"SSN",?35,"Date",?45,"CPT",?52,"Procedure Name",?81,"Radiologist",?110,"vol mGy",?121,"mGy-cm"
+4 WRITE !,RALINE
+5 QUIT
+6 ;
HDRFL ;header for fluoroscopy
+1 WRITE !,RAHDRTY
+2 WRITE !?100,"Air",?112,"Air Kerma",?125,"Fluoro",!?100,"Kerma",?112,"Area Product",?125,"Time"
+3 WRITE !,"Patient",?25,"SSN",?31,"Date",?41,"CPT",?48,"Procedure Name",?75,"Radiologist",?100,"mGy",?112,"Gy-cm2",?125,"min"
+4 WRITE !,RALINE
+5 QUIT
+6 ;
DISCLAIM ;set up the disclaimer statements in an array
+1 SET ^TMP($JOB,"RA DISCLAIMER",1,1)="1. The purpose of this report is to facilitate tracking of procedure doses to"
+2 SET ^TMP($JOB,"RA DISCLAIMER",1,2)=" identify opportunities for improvement. It is not intended to provide a"
+3 SET ^TMP($JOB,"RA DISCLAIMER",1,3)=" complete record of patient dose. Doses resulting from plain films and"
+4 SET ^TMP($JOB,"RA DISCLAIMER",1,4)=" radiopharmaceuticals are not supported."
+5 ;(1,5)=""
+6 SET ^TMP($JOB,"RA DISCLAIMER",2,1)="2. Only procedures for which dose data has been received are listed. Data may"
+7 SET ^TMP($JOB,"RA DISCLAIMER",2,2)=" be missing if the modality does not support DICOM structured dose reporting,"
+8 SET ^TMP($JOB,"RA DISCLAIMER",2,3)=" if the dose report was not sent to VistA Imaging, if the radiology report was"
+9 SET ^TMP($JOB,"RA DISCLAIMER",2,4)=" was not verified, or if the procedure was performed/imported before patches"
+10 SET ^TMP($JOB,"RA DISCLAIMER",2,5)=" MAG*3*137 and RA*5*113 were installed."
+11 ;(2,6)=""
+12 SET ^TMP($JOB,"RA DISCLAIMER",3,1)="3. Only the five highest dose CT series are listed. The total dose refers"
+13 SET ^TMP($JOB,"RA DISCLAIMER",3,2)=" to the sum of all series and so may be larger than the sum of the five"
+14 SET ^TMP($JOB,"RA DISCLAIMER",3,3)=" displayed doses. This report may include CT localizer radiograph(s)"
+15 SET ^TMP($JOB,"RA DISCLAIMER",3,4)=" values as a series and/or included in the total depending on the CT"
+16 SET ^TMP($JOB,"RA DISCLAIMER",3,5)=" manufacturer."
+17 ;(3,6)=""
+18 SET ^TMP($JOB,"RA DISCLAIMER",4,1)="4. Radiology set workflow may show the total rad dose for a patient care event"
+19 SET ^TMP($JOB,"RA DISCLAIMER",4,2)=" under one CPT. If separate exposure instances during a CT examination were"
+20 SET ^TMP($JOB,"RA DISCLAIMER",4,3)=" of different body parts, the total CTDIvol stated here may exceed the actual"
+21 SET ^TMP($JOB,"RA DISCLAIMER",4,4)=" CTDIvol for any body part. More detailed dose information is available on the"
+22 SET ^TMP($JOB,"RA DISCLAIMER",4,5)=" modality (until it is deleted) or in the DICOM Radiation Dose Structured"
+23 SET ^TMP($JOB,"RA DISCLAIMER",4,6)=" Report (RDSR) file stored in VistA Imaging. Viewing the RDSR file is not yet"
+24 SET ^TMP($JOB,"RA DISCLAIMER",4,7)=" supported."
+25 ;(4,8)=""
+26 SET ^TMP($JOB,"RA DISCLAIMER",5,1)="5. Radiology set workflow may show the total rad dose for a patient care event"
+27 SET ^TMP($JOB,"RA DISCLAIMER",5,2)=" under one CPT. Air Kerma Area Product is also called the Dose Area Product."
+28 SET ^TMP($JOB,"RA DISCLAIMER",5,3)=" If fluoroscopy was performed using more than one projection, the total air"
+29 SET ^TMP($JOB,"RA DISCLAIMER",5,4)=" kerma stated here may exceed the air kerma to any single projection. More"
+30 SET ^TMP($JOB,"RA DISCLAIMER",5,5)=" detailed dose information is available on the modality (until it is deleted)"
+31 SET ^TMP($JOB,"RA DISCLAIMER",5,6)=" or in the DICOM Radiation Dose Structured Report (RDSR) file stored in VistA"
+32 SET ^TMP($JOB,"RA DISCLAIMER",5,7)=" Imaging. Viewing the RDSR file is not yet supported."
+33 QUIT
+34 ;