- RADRPT2 ;HISC/GJC Radiation dosage report utility two ;01 Aug 2017 1:54 PM
- ;;5.0;Radiology/Nuclear Medicine;**113,119**;Mar 16, 1998;Build 7
- ;
- EN ;entry point
- ;--- IAs ---
- ;Call/File Number Type
- ;------------------------------------------------
- ;$$GET1^DIQ 2056 S
- ;DIR 10026 S
- ;$$FMADD^XLFDT 10103 S
- ;$$FMTE^XLFDT 10103 S
- ;$$NOW^XLFDT 10103 S
- ;$$KSP^XUPARAM 2541 S
- ;EN^XUTMDEVQ 1519 S
- ;^DPT( 10035 S
- ;^DIC(4, 10060 S
- ;^VA(200, 10090 S
- ;where 'S'=Supported; 'C'=Controlled Subscription; 'P'=Private
- ;
- ;report specifications: sort levels
- ;1) Type of Report (Fluoro, CT Detailed or CT Summary)
- ;2) exam date range begin-end
- ;3) exam attribute: Patient, Pri. Interpreting Staff or Procedure (one/many/all)
- K DIR,DIRUT,DIROUT,DTOUT,DUOUT
- S DIR(0)="S^F:Fluoroscopy;D:CT Detailed;S:CT Summary"
- S DIR("A")="Enter a report format"
- S DIR("?",1)="Enter the format of the report: 'F' for a Fluoroscopy summary report"
- S DIR("?",2)="'D' for a detailed Cat Scan (CT) report or 'S' for a CT summary report."
- S DIR("?",3)=""
- S DIR("?")="Enter '^' to exit."
- D ^DIR
- I $D(DIRUT)#2 K DIR,DIRUT,DIROUT,DTOUT,DUOUT,X,Y Q
- S RARPTYPE=Y
- K DIR,DIRUT,DIROUT,DTOUT,DUOUT,X,Y
- ;
- ;enter a date range beginning/ending
- D DATE^RAUTL
- I '($D(BEGDATE)#2) D XIT Q ;ex: 3120112
- I '($D(ENDDATE)#2) D XIT Q ;ex: 3120113
- ;namespace, make sure we get all the data for this range
- S RABEGDT=$$FMADD^XLFDT(BEGDATE,0,0,-1,0) ;ex: 3120111.2359
- S RAENDDT=ENDDATE+.2359 ;ex: 3120113.2359
- S RANGE=$$FMTE^XLFDT(BEGDATE,"2DZ")_" - "_$$FMTE^XLFDT(ENDDATE,"2DZ")
- K BEGDATE,ENDDATE
- ;
- W @IOF K DIR,DIRUT,DIROUT,DTOUT,DUOUT
- S DIR(0)="S^C:CPT Code;P:Patient;R:Radiologist"
- S DIR("A")="Enter a filter parameter"
- S DIR("?",1)="Enter the final filter parameter for the report: 'C' for CPT Code"
- S DIR("?",2)="'P' for patient or 'R' for radiologist."
- S DIR("?",3)=""
- S DIR("?")="Enter '^' to exit."
- D ^DIR
- I $D(DIRUT)#2 D XIT Q
- S RAFILTR=Y
- K DIR,DIRUT,DIROUT,DTOUT,DUOUT,X,Y
- ;
- S RAQUIT=0
- D @$S(RAFILTR="C":"PROC",RAFILTR="P":"PAT",1:"STAFF")
- I RAQUIT D XIT Q
- ;
- K RAVAR D INIT ;get facility name, station # & VISN
- ;
- F RA="RABEGDT","RAENDDT","RANGE","RAVISN","RASTNUM","RAFAC","RAFILTR","RARPTYPE","RAQUIT" S RAVAR(RA)=""
- S RAX=$S(RAFILTR="R":"^TMP(""RA STFPHYSI"",$J,",RAFILTR="C":"^TMP(""RA PROCI"",$J,",1:"^TMP(""RA PATI"",$J,")
- S RAVAR(RAX)=""
- D EN^XUTMDEVQ("START^RADRPT2","Package: RA - Print the radiation dosage report",.RAVAR,"QM",1) ;T6
- I +$G(ZTSK)>0 W !!,"Task Number: "_ZTSK,!
- D XIT
- QUIT
- ;
- START ;start processing
- K ^TMP($J,"RA SORT")
- ;^RADPT("AR",2920610.095,2,7079389.9049)=""
- ;^RADPT("AR",2920610.1035,1,7079389.8964)=""
- S RADTE=RABEGDT,RARUNDT=$$FMTE^XLFDT($$NOW^XLFDT(),"2PM")
- S RAC=9999999.9999,(RAP,RAQUIT,RAPG)=0 K ^TMP($J,"RA SORT")
- F S RADTE=$O(^RAD("ARAD",RADTE)) Q:RADTE'>0!(RADTE>RAENDDT) D Q:RAQUIT
- .S RADFN=0 F S RADFN=$O(^RAD("ARAD",RADTE,RADFN)) Q:RADFN'>0 D Q:RAQUIT
- ..;
- ..S RACN=0,RADTI=(RAC-RADTE)
- ..S RAY2=$G(^RADPT(RADFN,"DT",RADTI,0))
- ..; check study i-type versus the user's input
- ..I $$ITYPCHK(+$P(RAY2,U,2))=0 QUIT
- ..F S RACN=$O(^RADPT(RADFN,"DT",RADTI,"P","B",RACN)) Q:RACN'>0 D Q:RAQUIT
- ...S RACNI=$O(^RADPT(RADFN,"DT",RADTI,"P","B",RACN,0))
- ...S RAY3=$G(^RADPT(RADFN,"DT",RADTI,"P",RACNI,0))
- ...S RADIEN=$P($G(^RADPT(RADFN,"DT",RADTI,"P",RACNI,1)),U,1) Q:RADIEN=""
- ...;
- ...; --------------------- sanity check: pointers to/from 70.3 & 70.03 -------------------
- ...I $O(^RAD("ARAD",RADTE,RADFN,RACN,0))'=RADIEN Q
- ...; -------------------------------------------------------------------------------------
- ...;
- ...; -------------------------------- patient sort ---------------------------------------
- ...I RAFILTR="P",($D(^TMP("RA PATI",$J,RADFN))\10) D
- ....S RASORT=$O(^TMP("RA PATI",$J,RADFN,"")) Q:RASORT=""
- ....D GETRDOSE K RASORT
- ....Q
- ...; -------------------------------------------------------------------------------------
- ...;
- ...; ----------------------------- procedure/CPT sort ------------------------------------
- ...I RAFILTR="C",($D(^TMP("RA PROCI",$J,+$P(RAY3,U,2)))\10) D
- ....S RASORT=$O(^TMP("RA PROCI",$J,+$P(RAY3,U,2),"")) Q:RASORT=""
- ....D GETRDOSE K RASORT
- ....Q
- ...; -------------------------------------------------------------------------------------
- ...;
- ...; ----------------------- primary interpreting staff sort -----------------------------
- ...I RAFILTR="R",($D(^TMP("RA STFPHYSI",$J,+$P(RAY3,U,15)))\10) D
- ....S RASORT=$O(^TMP("RA STFPHYSI",$J,+$P(RAY3,U,15),"")) Q:RASORT=""
- ....D GETRDOSE K RASORT
- ....Q
- ...; -------------------------------------------------------------------------------------
- ...Q
- ..Q
- .Q
- ;display the data. if no data print the negative report and quit
- D DISPLAY^RADRPT2A
- K ^TMP($J,"RA SORT"),^TMP("RA PATI"),^TMP("RA PROCI"),^TMP("RA STFPHYSI")
- D XIT
- QUIT
- ;
- PAT ;sort by patient
- K ^TMP($J,"RA PAT"),^TMP("RA PATI",$J)
- S RADIC="^RADPT(",RADIC(0)="QEAMZ",RAUTIL="RA PAT"
- S RADIC("A")="Select Rad/Nuc Med Patient: ",RADIC("B")="All"
- S RADIC("S")="I $D(^RADPT(""EDM"",+Y))"
- W !! D EN1^RASELCT(.RADIC,RAUTIL) K %W,%Y1,DIC,RADIC,RAUTIL,X,Y
- ;Did the user select radiology patients? If not, quit
- I $O(^TMP($J,"RA PAT",""))="" D
- .S RAQUIT=1 W !!?3,$C(7),"Radiology patient data was not selected."
- .Q
- ;set ^TMP($J,"RA PAT","I",IEN_#2)
- E D INT($NA(^TMP($J,"RA PAT")))
- Q
- ;
- PROC ;sort by procedure
- K ^TMP($J,"RA PROC"),^TMP("RA PROCI",$J)
- S RADIC="^RAMIS(71,",RADIC(0)="QEAMZ",RAUTIL="RA PROC"
- S RADIC("A")="Select Rad/Nuc Med Procedures: ",RADIC("B")="All"
- S RADIC("S")="I $$SCRPROC^RADRPT2(+Y)"
- W !! D EN1^RASELCT(.RADIC,RAUTIL) K %W,%Y1,DIC,RADIC,RAUTIL,X,Y
- ;Did the user select radiology procedures? If not, quit
- I $O(^TMP($J,"RA PROC",""))="" D
- .S RAQUIT=1 W !!?3,$C(7),"Radiology procedure data was not selected."
- .Q
- ;set ^TMP($J,"RA PROC","I",IEN_#71)
- E D INT($NA(^TMP($J,"RA PROC")))
- Q
- ;
- SCRPROC(DA) ;screen procedures by type and if inactive.
- N RA71 S RA71(0)=$G(^RAMIS(71,DA,0))
- ;S RA71("I")=$G(^RAMIS(71,DA,"I"))
- Q:"^B^P^"[("^"_$P(RA71(0),U,6)_"^") 0
- ;Q:$L(RA71("I"))&(RA71("I")'>DT) 0
- Q 1
- ;
- STAFF ;sort by primary interpreting staff (radiologist)
- K ^TMP($J,"RA STFPHYS"),^TMP("RA STFPHYSI",$J)
- S RADIC="^VA(200,",RADIC(0)="QEAMZ",RAUTIL="RA STFPHYS"
- S RADIC("A")="Select Radiologist: ",RADIC("B")="All"
- S RADIC("S")="I $D(^VA(200,""ARC"",""S"",+Y))\10"
- W !! D EN1^RASELCT(.RADIC,RAUTIL) K %W,%Y1,DIC,RADIC,RAUTIL,X,Y
- ;Did the user select staff radiologists? If not, quit
- I $O(^TMP($J,"RA STFPHYS",""))="" D
- .S RAQUIT=1 W !!?3,$C(7),"Staff Radiologist data was not selected."
- .Q
- ;set ^TMP($J,"RA STFPHYS","I",IEN_#200)
- E D INT($NA(^TMP($J,"RA STFPHYS")))
- Q
- ;
- INT(ROOT) ;store the internal value of the patient/procedure/radiologist record
- N X,Y S X=""
- F S X=$O(@ROOT@(X)) Q:X="" D
- .S Y=0 F S Y=$O(@ROOT@(X,Y)) Q:Y'>0 D
- ..S:RAFILTR="C" ^TMP("RA PROCI",$J,Y,X)=""
- ..S:RAFILTR="P" ^TMP("RA PATI",$J,Y,X)=""
- ..S:RAFILTR="R" ^TMP("RA STFPHYSI",$J,Y,X)=""
- ..Q
- .K @ROOT@(X)
- .Q
- Q
- ;
- INIT ;initialize some variables
- ;return facility name (RAFAC), station # (RASTNUM) & VISN # (RAVISN)
- K RAR,X S RAY=$$KSP^XUPARAM("INST")_","
- D GETS^DIQ(4,RAY,".01;14*;99","E","RAR")
- S RAFAC=RAR(4,RAY,.01,"E") ; Name of facility
- S RASTNUM=RAR(4,RAY,99,"E") ; Station Number
- K RAR,RAY,X
- Q
- ;
- GETRDOSE ;get Rad dosage data
- I RARPTYPE="F" D Q
- .S X=$G(^RAD(RADIEN,0))
- .S RAK=$P(X,U,5),RAKAP=$P(X,U,6)
- .S RAFLSEC=$P(X,U,7),RAFLMIN=$J((RAFLSEC/60),5,1)
- .;^("F") = air kerma ^ air kerma area product ^ total fluoro time (mins)
- .S ^TMP($J,"RA SORT",RADTE,RASORT,RADFN,RACNI,"F")=RAK_U_RAKAP_U_RAFLMIN
- .K RAFLMIN,RAFLSEC,RAK,RAKAP,X
- .Q
- ;check sub-file for CT data
- I $O(^RAD(RADIEN,"II",0)) D
- .K RADLP,RAII,I,X,Y S X="0^0"
- .; ^("S") = CTDIvol (total) ^ DLP (total)
- .S ^TMP($J,"RA SORT",RADTE,RASORT,RADFN,RACNI,"S")="0^0",RADLP=$C(32),I=0
- .;get "top five" total all CTDIvol & DLP values
- .;formula: CTDIvol=DLP/length of scan (mGy-cm)
- .F S RADLP=$O(^RAD(RADIEN,"II","DLP",RADLP),-1) Q:RADLP'>0 D Q:RAQUIT
- ..S Y=0 F S Y=$O(^RAD(RADIEN,"II","DLP",RADLP,Y)) Q:Y'>0 D Q:RAQUIT
- ...S RAII(0)=$G(^RAD(RADIEN,"II",Y,0)) Q:RAII(0)=""
- ...S I=I+1
- ...S:I'>5 ^TMP($J,"RA SORT",RADTE,RASORT,RADFN,RACNI,I)=$P(RAII(0),U,3,5)
- ...S $P(X,U,1)=$P(X,U,1)+$P(RAII(0),U,4) ;CTDIvol
- ...S $P(X,U,2)=$P(X,U,2)+$P(RAII(0),U,5) ;DLP
- ...Q
- ..Q
- .S ^TMP($J,"RA SORT",RADTE,RASORT,RADFN,RACNI,"S")=X
- .K RADLP,RAII,I,X,Y
- .Q
- Q
- ;
- ITYPCHK(Y) ;i-type check
- ;input: 'Y' = IEN imaging type of the study
- ;output: 0 - if the study is of a different i-type than
- ; the report type selected by the user (saved
- ; in RARPTYPE)
- ; 1 - if the study is the same i-type as the
- ; report type selected by the user
- ;
- ; 'RARPRTYPE' is a local variable of global scope. Values
- ; can be: 'F' for Fluoro (GEN RAD), 'D' for CT (detailed
- ; rpt) or 'S' for CT (summary rpt)
- ;
- ; 'RAY2' is the value if the zero node of 70.02. The
- ; second piece is a pointer field pointing to the
- ; IMAGING TYPE (#79.2) file.
- ;
- N X S X=$G(^RA(79.2,Y,0))
- S X(3)=$P(X,U,3) ;match against abbrv
- I RARPTYPE="F",(X(3)="RAD") Q 1
- I RARPTYPE="D",(X(3)="CT") Q 1
- I RARPTYPE="S",(X(3)="CT") Q 1
- Q 0
- ;
- XIT ;kill variables
- K %,DF,DIR,DIRUT,DIROUT,DTOUT,DUOUT,RA,RABEGDT,RAC,RACNI,RADFN,RADIEN,RADTE,RADTI,RAENDDT
- K RAFAC,RAFILTR,RAP,RAPG,RAPOP,RANGE,RAQUIT,RAR,RARPTYPE,RARUNDT,RASORT,RASTNUM,RAUTIL
- K RAVAR,RAX,RAY,RAY2,RAY3,X,Y,ZTDESC,ZTSAVE,ZTSK
- Q
- ;
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HRADRPT2 9894 printed Feb 19, 2025@00:01:09 Page 2
- RADRPT2 ;HISC/GJC Radiation dosage report utility two ;01 Aug 2017 1:54 PM
- +1 ;;5.0;Radiology/Nuclear Medicine;**113,119**;Mar 16, 1998;Build 7
- +2 ;
- EN ;entry point
- +1 ;--- IAs ---
- +2 ;Call/File Number Type
- +3 ;------------------------------------------------
- +4 ;$$GET1^DIQ 2056 S
- +5 ;DIR 10026 S
- +6 ;$$FMADD^XLFDT 10103 S
- +7 ;$$FMTE^XLFDT 10103 S
- +8 ;$$NOW^XLFDT 10103 S
- +9 ;$$KSP^XUPARAM 2541 S
- +10 ;EN^XUTMDEVQ 1519 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 ;
- +16 ;report specifications: sort levels
- +17 ;1) Type of Report (Fluoro, CT Detailed or CT Summary)
- +18 ;2) exam date range begin-end
- +19 ;3) exam attribute: Patient, Pri. Interpreting Staff or Procedure (one/many/all)
- +20 KILL DIR,DIRUT,DIROUT,DTOUT,DUOUT
- +21 SET DIR(0)="S^F:Fluoroscopy;D:CT Detailed;S:CT Summary"
- +22 SET DIR("A")="Enter a report format"
- +23 SET DIR("?",1)="Enter the format of the report: 'F' for a Fluoroscopy summary report"
- +24 SET DIR("?",2)="'D' for a detailed Cat Scan (CT) report or 'S' for a CT summary report."
- +25 SET DIR("?",3)=""
- +26 SET DIR("?")="Enter '^' to exit."
- +27 DO ^DIR
- +28 IF $DATA(DIRUT)#2
- KILL DIR,DIRUT,DIROUT,DTOUT,DUOUT,X,Y
- QUIT
- +29 SET RARPTYPE=Y
- +30 KILL DIR,DIRUT,DIROUT,DTOUT,DUOUT,X,Y
- +31 ;
- +32 ;enter a date range beginning/ending
- +33 DO DATE^RAUTL
- +34 ;ex: 3120112
- IF '($DATA(BEGDATE)#2)
- DO XIT
- QUIT
- +35 ;ex: 3120113
- IF '($DATA(ENDDATE)#2)
- DO XIT
- QUIT
- +36 ;namespace, make sure we get all the data for this range
- +37 ;ex: 3120111.2359
- SET RABEGDT=$$FMADD^XLFDT(BEGDATE,0,0,-1,0)
- +38 ;ex: 3120113.2359
- SET RAENDDT=ENDDATE+.2359
- +39 SET RANGE=$$FMTE^XLFDT(BEGDATE,"2DZ")_" - "_$$FMTE^XLFDT(ENDDATE,"2DZ")
- +40 KILL BEGDATE,ENDDATE
- +41 ;
- +42 WRITE @IOF
- KILL DIR,DIRUT,DIROUT,DTOUT,DUOUT
- +43 SET DIR(0)="S^C:CPT Code;P:Patient;R:Radiologist"
- +44 SET DIR("A")="Enter a filter parameter"
- +45 SET DIR("?",1)="Enter the final filter parameter for the report: 'C' for CPT Code"
- +46 SET DIR("?",2)="'P' for patient or 'R' for radiologist."
- +47 SET DIR("?",3)=""
- +48 SET DIR("?")="Enter '^' to exit."
- +49 DO ^DIR
- +50 IF $DATA(DIRUT)#2
- DO XIT
- QUIT
- +51 SET RAFILTR=Y
- +52 KILL DIR,DIRUT,DIROUT,DTOUT,DUOUT,X,Y
- +53 ;
- +54 SET RAQUIT=0
- +55 DO @$SELECT(RAFILTR="C":"PROC",RAFILTR="P":"PAT",1:"STAFF")
- +56 IF RAQUIT
- DO XIT
- QUIT
- +57 ;
- +58 ;get facility name, station # & VISN
- KILL RAVAR
- DO INIT
- +59 ;
- +60 FOR RA="RABEGDT","RAENDDT","RANGE","RAVISN","RASTNUM","RAFAC","RAFILTR","RARPTYPE","RAQUIT"
- SET RAVAR(RA)=""
- +61 SET RAX=$SELECT(RAFILTR="R":"^TMP(""RA STFPHYSI"",$J,",RAFILTR="C":"^TMP(""RA PROCI"",$J,",1:"^TMP(""RA PATI"",$J,")
- +62 SET RAVAR(RAX)=""
- +63 ;T6
- DO EN^XUTMDEVQ("START^RADRPT2","Package: RA - Print the radiation dosage report",.RAVAR,"QM",1)
- +64 IF +$GET(ZTSK)>0
- WRITE !!,"Task Number: "_ZTSK,!
- +65 DO XIT
- +66 QUIT
- +67 ;
- START ;start processing
- +1 KILL ^TMP($JOB,"RA SORT")
- +2 ;^RADPT("AR",2920610.095,2,7079389.9049)=""
- +3 ;^RADPT("AR",2920610.1035,1,7079389.8964)=""
- +4 SET RADTE=RABEGDT
- SET RARUNDT=$$FMTE^XLFDT($$NOW^XLFDT(),"2PM")
- +5 SET RAC=9999999.9999
- SET (RAP,RAQUIT,RAPG)=0
- KILL ^TMP($JOB,"RA SORT")
- +6 FOR
- SET RADTE=$ORDER(^RAD("ARAD",RADTE))
- if RADTE'>0!(RADTE>RAENDDT)
- QUIT
- Begin DoDot:1
- +7 SET RADFN=0
- FOR
- SET RADFN=$ORDER(^RAD("ARAD",RADTE,RADFN))
- if RADFN'>0
- QUIT
- Begin DoDot:2
- +8 ;
- +9 SET RACN=0
- SET RADTI=(RAC-RADTE)
- +10 SET RAY2=$GET(^RADPT(RADFN,"DT",RADTI,0))
- +11 ; check study i-type versus the user's input
- +12 IF $$ITYPCHK(+$PIECE(RAY2,U,2))=0
- QUIT
- +13 FOR
- SET RACN=$ORDER(^RADPT(RADFN,"DT",RADTI,"P","B",RACN))
- if RACN'>0
- QUIT
- Begin DoDot:3
- +14 SET RACNI=$ORDER(^RADPT(RADFN,"DT",RADTI,"P","B",RACN,0))
- +15 SET RAY3=$GET(^RADPT(RADFN,"DT",RADTI,"P",RACNI,0))
- +16 SET RADIEN=$PIECE($GET(^RADPT(RADFN,"DT",RADTI,"P",RACNI,1)),U,1)
- if RADIEN=""
- QUIT
- +17 ;
- +18 ; --------------------- sanity check: pointers to/from 70.3 & 70.03 -------------------
- +19 IF $ORDER(^RAD("ARAD",RADTE,RADFN,RACN,0))'=RADIEN
- QUIT
- +20 ; -------------------------------------------------------------------------------------
- +21 ;
- +22 ; -------------------------------- patient sort ---------------------------------------
- +23 IF RAFILTR="P"
- IF ($DATA(^TMP("RA PATI",$JOB,RADFN))\10)
- Begin DoDot:4
- +24 SET RASORT=$ORDER(^TMP("RA PATI",$JOB,RADFN,""))
- if RASORT=""
- QUIT
- +25 DO GETRDOSE
- KILL RASORT
- +26 QUIT
- End DoDot:4
- +27 ; -------------------------------------------------------------------------------------
- +28 ;
- +29 ; ----------------------------- procedure/CPT sort ------------------------------------
- +30 IF RAFILTR="C"
- IF ($DATA(^TMP("RA PROCI",$JOB,+$PIECE(RAY3,U,2)))\10)
- Begin DoDot:4
- +31 SET RASORT=$ORDER(^TMP("RA PROCI",$JOB,+$PIECE(RAY3,U,2),""))
- if RASORT=""
- QUIT
- +32 DO GETRDOSE
- KILL RASORT
- +33 QUIT
- End DoDot:4
- +34 ; -------------------------------------------------------------------------------------
- +35 ;
- +36 ; ----------------------- primary interpreting staff sort -----------------------------
- +37 IF RAFILTR="R"
- IF ($DATA(^TMP("RA STFPHYSI",$JOB,+$PIECE(RAY3,U,15)))\10)
- Begin DoDot:4
- +38 SET RASORT=$ORDER(^TMP("RA STFPHYSI",$JOB,+$PIECE(RAY3,U,15),""))
- if RASORT=""
- QUIT
- +39 DO GETRDOSE
- KILL RASORT
- +40 QUIT
- End DoDot:4
- +41 ; -------------------------------------------------------------------------------------
- +42 QUIT
- End DoDot:3
- if RAQUIT
- QUIT
- +43 QUIT
- End DoDot:2
- if RAQUIT
- QUIT
- +44 QUIT
- End DoDot:1
- if RAQUIT
- QUIT
- +45 ;display the data. if no data print the negative report and quit
- +46 DO DISPLAY^RADRPT2A
- +47 KILL ^TMP($JOB,"RA SORT"),^TMP("RA PATI"),^TMP("RA PROCI"),^TMP("RA STFPHYSI")
- +48 DO XIT
- +49 QUIT
- +50 ;
- PAT ;sort by patient
- +1 KILL ^TMP($JOB,"RA PAT"),^TMP("RA PATI",$JOB)
- +2 SET RADIC="^RADPT("
- SET RADIC(0)="QEAMZ"
- SET RAUTIL="RA PAT"
- +3 SET RADIC("A")="Select Rad/Nuc Med Patient: "
- SET RADIC("B")="All"
- +4 SET RADIC("S")="I $D(^RADPT(""EDM"",+Y))"
- +5 WRITE !!
- DO EN1^RASELCT(.RADIC,RAUTIL)
- KILL %W,%Y1,DIC,RADIC,RAUTIL,X,Y
- +6 ;Did the user select radiology patients? If not, quit
- +7 IF $ORDER(^TMP($JOB,"RA PAT",""))=""
- Begin DoDot:1
- +8 SET RAQUIT=1
- WRITE !!?3,$CHAR(7),"Radiology patient data was not selected."
- +9 QUIT
- End DoDot:1
- +10 ;set ^TMP($J,"RA PAT","I",IEN_#2)
- +11 IF '$TEST
- DO INT($NAME(^TMP($JOB,"RA PAT")))
- +12 QUIT
- +13 ;
- PROC ;sort by procedure
- +1 KILL ^TMP($JOB,"RA PROC"),^TMP("RA PROCI",$JOB)
- +2 SET RADIC="^RAMIS(71,"
- SET RADIC(0)="QEAMZ"
- SET RAUTIL="RA PROC"
- +3 SET RADIC("A")="Select Rad/Nuc Med Procedures: "
- SET RADIC("B")="All"
- +4 SET RADIC("S")="I $$SCRPROC^RADRPT2(+Y)"
- +5 WRITE !!
- DO EN1^RASELCT(.RADIC,RAUTIL)
- KILL %W,%Y1,DIC,RADIC,RAUTIL,X,Y
- +6 ;Did the user select radiology procedures? If not, quit
- +7 IF $ORDER(^TMP($JOB,"RA PROC",""))=""
- Begin DoDot:1
- +8 SET RAQUIT=1
- WRITE !!?3,$CHAR(7),"Radiology procedure data was not selected."
- +9 QUIT
- End DoDot:1
- +10 ;set ^TMP($J,"RA PROC","I",IEN_#71)
- +11 IF '$TEST
- DO INT($NAME(^TMP($JOB,"RA PROC")))
- +12 QUIT
- +13 ;
- SCRPROC(DA) ;screen procedures by type and if inactive.
- +1 NEW RA71
- SET RA71(0)=$GET(^RAMIS(71,DA,0))
- +2 ;S RA71("I")=$G(^RAMIS(71,DA,"I"))
- +3 if "^B^P^"[("^"_$PIECE(RA71(0),U,6)_"^")
- QUIT 0
- +4 ;Q:$L(RA71("I"))&(RA71("I")'>DT) 0
- +5 QUIT 1
- +6 ;
- STAFF ;sort by primary interpreting staff (radiologist)
- +1 KILL ^TMP($JOB,"RA STFPHYS"),^TMP("RA STFPHYSI",$JOB)
- +2 SET RADIC="^VA(200,"
- SET RADIC(0)="QEAMZ"
- SET RAUTIL="RA STFPHYS"
- +3 SET RADIC("A")="Select Radiologist: "
- SET RADIC("B")="All"
- +4 SET RADIC("S")="I $D(^VA(200,""ARC"",""S"",+Y))\10"
- +5 WRITE !!
- DO EN1^RASELCT(.RADIC,RAUTIL)
- KILL %W,%Y1,DIC,RADIC,RAUTIL,X,Y
- +6 ;Did the user select staff radiologists? If not, quit
- +7 IF $ORDER(^TMP($JOB,"RA STFPHYS",""))=""
- Begin DoDot:1
- +8 SET RAQUIT=1
- WRITE !!?3,$CHAR(7),"Staff Radiologist data was not selected."
- +9 QUIT
- End DoDot:1
- +10 ;set ^TMP($J,"RA STFPHYS","I",IEN_#200)
- +11 IF '$TEST
- DO INT($NAME(^TMP($JOB,"RA STFPHYS")))
- +12 QUIT
- +13 ;
- INT(ROOT) ;store the internal value of the patient/procedure/radiologist record
- +1 NEW X,Y
- SET X=""
- +2 FOR
- SET X=$ORDER(@ROOT@(X))
- if X=""
- QUIT
- Begin DoDot:1
- +3 SET Y=0
- FOR
- SET Y=$ORDER(@ROOT@(X,Y))
- if Y'>0
- QUIT
- Begin DoDot:2
- +4 if RAFILTR="C"
- SET ^TMP("RA PROCI",$JOB,Y,X)=""
- +5 if RAFILTR="P"
- SET ^TMP("RA PATI",$JOB,Y,X)=""
- +6 if RAFILTR="R"
- SET ^TMP("RA STFPHYSI",$JOB,Y,X)=""
- +7 QUIT
- End DoDot:2
- +8 KILL @ROOT@(X)
- +9 QUIT
- End DoDot:1
- +10 QUIT
- +11 ;
- INIT ;initialize some variables
- +1 ;return facility name (RAFAC), station # (RASTNUM) & VISN # (RAVISN)
- +2 KILL RAR,X
- SET RAY=$$KSP^XUPARAM("INST")_","
- +3 DO GETS^DIQ(4,RAY,".01;14*;99","E","RAR")
- +4 ; Name of facility
- SET RAFAC=RAR(4,RAY,.01,"E")
- +5 ; Station Number
- SET RASTNUM=RAR(4,RAY,99,"E")
- +6 KILL RAR,RAY,X
- +7 QUIT
- +8 ;
- GETRDOSE ;get Rad dosage data
- +1 IF RARPTYPE="F"
- Begin DoDot:1
- +2 SET X=$GET(^RAD(RADIEN,0))
- +3 SET RAK=$PIECE(X,U,5)
- SET RAKAP=$PIECE(X,U,6)
- +4 SET RAFLSEC=$PIECE(X,U,7)
- SET RAFLMIN=$JUSTIFY((RAFLSEC/60),5,1)
- +5 ;^("F") = air kerma ^ air kerma area product ^ total fluoro time (mins)
- +6 SET ^TMP($JOB,"RA SORT",RADTE,RASORT,RADFN,RACNI,"F")=RAK_U_RAKAP_U_RAFLMIN
- +7 KILL RAFLMIN,RAFLSEC,RAK,RAKAP,X
- +8 QUIT
- End DoDot:1
- QUIT
- +9 ;check sub-file for CT data
- +10 IF $ORDER(^RAD(RADIEN,"II",0))
- Begin DoDot:1
- +11 KILL RADLP,RAII,I,X,Y
- SET X="0^0"
- +12 ; ^("S") = CTDIvol (total) ^ DLP (total)
- +13 SET ^TMP($JOB,"RA SORT",RADTE,RASORT,RADFN,RACNI,"S")="0^0"
- SET RADLP=$CHAR(32)
- SET I=0
- +14 ;get "top five" total all CTDIvol & DLP values
- +15 ;formula: CTDIvol=DLP/length of scan (mGy-cm)
- +16 FOR
- SET RADLP=$ORDER(^RAD(RADIEN,"II","DLP",RADLP),-1)
- if RADLP'>0
- QUIT
- Begin DoDot:2
- +17 SET Y=0
- FOR
- SET Y=$ORDER(^RAD(RADIEN,"II","DLP",RADLP,Y))
- if Y'>0
- QUIT
- Begin DoDot:3
- +18 SET RAII(0)=$GET(^RAD(RADIEN,"II",Y,0))
- if RAII(0)=""
- QUIT
- +19 SET I=I+1
- +20 if I'>5
- SET ^TMP($JOB,"RA SORT",RADTE,RASORT,RADFN,RACNI,I)=$PIECE(RAII(0),U,3,5)
- +21 ;CTDIvol
- SET $PIECE(X,U,1)=$PIECE(X,U,1)+$PIECE(RAII(0),U,4)
- +22 ;DLP
- SET $PIECE(X,U,2)=$PIECE(X,U,2)+$PIECE(RAII(0),U,5)
- +23 QUIT
- End DoDot:3
- if RAQUIT
- QUIT
- +24 QUIT
- End DoDot:2
- if RAQUIT
- QUIT
- +25 SET ^TMP($JOB,"RA SORT",RADTE,RASORT,RADFN,RACNI,"S")=X
- +26 KILL RADLP,RAII,I,X,Y
- +27 QUIT
- End DoDot:1
- +28 QUIT
- +29 ;
- ITYPCHK(Y) ;i-type check
- +1 ;input: 'Y' = IEN imaging type of the study
- +2 ;output: 0 - if the study is of a different i-type than
- +3 ; the report type selected by the user (saved
- +4 ; in RARPTYPE)
- +5 ; 1 - if the study is the same i-type as the
- +6 ; report type selected by the user
- +7 ;
- +8 ; 'RARPRTYPE' is a local variable of global scope. Values
- +9 ; can be: 'F' for Fluoro (GEN RAD), 'D' for CT (detailed
- +10 ; rpt) or 'S' for CT (summary rpt)
- +11 ;
- +12 ; 'RAY2' is the value if the zero node of 70.02. The
- +13 ; second piece is a pointer field pointing to the
- +14 ; IMAGING TYPE (#79.2) file.
- +15 ;
- +16 NEW X
- SET X=$GET(^RA(79.2,Y,0))
- +17 ;match against abbrv
- SET X(3)=$PIECE(X,U,3)
- +18 IF RARPTYPE="F"
- IF (X(3)="RAD")
- QUIT 1
- +19 IF RARPTYPE="D"
- IF (X(3)="CT")
- QUIT 1
- +20 IF RARPTYPE="S"
- IF (X(3)="CT")
- QUIT 1
- +21 QUIT 0
- +22 ;
- XIT ;kill variables
- +1 KILL %,DF,DIR,DIRUT,DIROUT,DTOUT,DUOUT,RA,RABEGDT,RAC,RACNI,RADFN,RADIEN,RADTE,RADTI,RAENDDT
- +2 KILL RAFAC,RAFILTR,RAP,RAPG,RAPOP,RANGE,RAQUIT,RAR,RARPTYPE,RARUNDT,RASORT,RASTNUM,RAUTIL
- +3 KILL RAVAR,RAX,RAY,RAY2,RAY3,X,Y,ZTDESC,ZTSAVE,ZTSK
- +4 QUIT
- +5 ;