Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: RADRPT2

RADRPT2.m

Go to the documentation of this file.
  1. 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
  1. ;
  1. EN ;entry point
  1. ;--- IAs ---
  1. ;Call/File Number Type
  1. ;------------------------------------------------
  1. ;$$GET1^DIQ 2056 S
  1. ;DIR 10026 S
  1. ;$$FMADD^XLFDT 10103 S
  1. ;$$FMTE^XLFDT 10103 S
  1. ;$$NOW^XLFDT 10103 S
  1. ;$$KSP^XUPARAM 2541 S
  1. ;EN^XUTMDEVQ 1519 S
  1. ;^DPT( 10035 S
  1. ;^DIC(4, 10060 S
  1. ;^VA(200, 10090 S
  1. ;where 'S'=Supported; 'C'=Controlled Subscription; 'P'=Private
  1. ;
  1. ;report specifications: sort levels
  1. ;1) Type of Report (Fluoro, CT Detailed or CT Summary)
  1. ;2) exam date range begin-end
  1. ;3) exam attribute: Patient, Pri. Interpreting Staff or Procedure (one/many/all)
  1. K DIR,DIRUT,DIROUT,DTOUT,DUOUT
  1. S DIR(0)="S^F:Fluoroscopy;D:CT Detailed;S:CT Summary"
  1. S DIR("A")="Enter a report format"
  1. S DIR("?",1)="Enter the format of the report: 'F' for a Fluoroscopy summary report"
  1. S DIR("?",2)="'D' for a detailed Cat Scan (CT) report or 'S' for a CT summary report."
  1. S DIR("?",3)=""
  1. S DIR("?")="Enter '^' to exit."
  1. D ^DIR
  1. I $D(DIRUT)#2 K DIR,DIRUT,DIROUT,DTOUT,DUOUT,X,Y Q
  1. S RARPTYPE=Y
  1. K DIR,DIRUT,DIROUT,DTOUT,DUOUT,X,Y
  1. ;
  1. ;enter a date range beginning/ending
  1. D DATE^RAUTL
  1. I '($D(BEGDATE)#2) D XIT Q ;ex: 3120112
  1. I '($D(ENDDATE)#2) D XIT Q ;ex: 3120113
  1. ;namespace, make sure we get all the data for this range
  1. S RABEGDT=$$FMADD^XLFDT(BEGDATE,0,0,-1,0) ;ex: 3120111.2359
  1. S RAENDDT=ENDDATE+.2359 ;ex: 3120113.2359
  1. S RANGE=$$FMTE^XLFDT(BEGDATE,"2DZ")_" - "_$$FMTE^XLFDT(ENDDATE,"2DZ")
  1. K BEGDATE,ENDDATE
  1. ;
  1. W @IOF K DIR,DIRUT,DIROUT,DTOUT,DUOUT
  1. S DIR(0)="S^C:CPT Code;P:Patient;R:Radiologist"
  1. S DIR("A")="Enter a filter parameter"
  1. S DIR("?",1)="Enter the final filter parameter for the report: 'C' for CPT Code"
  1. S DIR("?",2)="'P' for patient or 'R' for radiologist."
  1. S DIR("?",3)=""
  1. S DIR("?")="Enter '^' to exit."
  1. D ^DIR
  1. I $D(DIRUT)#2 D XIT Q
  1. S RAFILTR=Y
  1. K DIR,DIRUT,DIROUT,DTOUT,DUOUT,X,Y
  1. ;
  1. S RAQUIT=0
  1. D @$S(RAFILTR="C":"PROC",RAFILTR="P":"PAT",1:"STAFF")
  1. I RAQUIT D XIT Q
  1. ;
  1. K RAVAR D INIT ;get facility name, station # & VISN
  1. ;
  1. F RA="RABEGDT","RAENDDT","RANGE","RAVISN","RASTNUM","RAFAC","RAFILTR","RARPTYPE","RAQUIT" S RAVAR(RA)=""
  1. S RAX=$S(RAFILTR="R":"^TMP(""RA STFPHYSI"",$J,",RAFILTR="C":"^TMP(""RA PROCI"",$J,",1:"^TMP(""RA PATI"",$J,")
  1. S RAVAR(RAX)=""
  1. D EN^XUTMDEVQ("START^RADRPT2","Package: RA - Print the radiation dosage report",.RAVAR,"QM",1) ;T6
  1. I +$G(ZTSK)>0 W !!,"Task Number: "_ZTSK,!
  1. D XIT
  1. QUIT
  1. ;
  1. START ;start processing
  1. K ^TMP($J,"RA SORT")
  1. ;^RADPT("AR",2920610.095,2,7079389.9049)=""
  1. ;^RADPT("AR",2920610.1035,1,7079389.8964)=""
  1. S RADTE=RABEGDT,RARUNDT=$$FMTE^XLFDT($$NOW^XLFDT(),"2PM")
  1. S RAC=9999999.9999,(RAP,RAQUIT,RAPG)=0 K ^TMP($J,"RA SORT")
  1. F S RADTE=$O(^RAD("ARAD",RADTE)) Q:RADTE'>0!(RADTE>RAENDDT) D Q:RAQUIT
  1. .S RADFN=0 F S RADFN=$O(^RAD("ARAD",RADTE,RADFN)) Q:RADFN'>0 D Q:RAQUIT
  1. ..;
  1. ..S RACN=0,RADTI=(RAC-RADTE)
  1. ..S RAY2=$G(^RADPT(RADFN,"DT",RADTI,0))
  1. ..; check study i-type versus the user's input
  1. ..I $$ITYPCHK(+$P(RAY2,U,2))=0 QUIT
  1. ..F S RACN=$O(^RADPT(RADFN,"DT",RADTI,"P","B",RACN)) Q:RACN'>0 D Q:RAQUIT
  1. ...S RACNI=$O(^RADPT(RADFN,"DT",RADTI,"P","B",RACN,0))
  1. ...S RAY3=$G(^RADPT(RADFN,"DT",RADTI,"P",RACNI,0))
  1. ...S RADIEN=$P($G(^RADPT(RADFN,"DT",RADTI,"P",RACNI,1)),U,1) Q:RADIEN=""
  1. ...;
  1. ...; --------------------- sanity check: pointers to/from 70.3 & 70.03 -------------------
  1. ...I $O(^RAD("ARAD",RADTE,RADFN,RACN,0))'=RADIEN Q
  1. ...; -------------------------------------------------------------------------------------
  1. ...;
  1. ...; -------------------------------- patient sort ---------------------------------------
  1. ...I RAFILTR="P",($D(^TMP("RA PATI",$J,RADFN))\10) D
  1. ....S RASORT=$O(^TMP("RA PATI",$J,RADFN,"")) Q:RASORT=""
  1. ....D GETRDOSE K RASORT
  1. ....Q
  1. ...; -------------------------------------------------------------------------------------
  1. ...;
  1. ...; ----------------------------- procedure/CPT sort ------------------------------------
  1. ...I RAFILTR="C",($D(^TMP("RA PROCI",$J,+$P(RAY3,U,2)))\10) D
  1. ....S RASORT=$O(^TMP("RA PROCI",$J,+$P(RAY3,U,2),"")) Q:RASORT=""
  1. ....D GETRDOSE K RASORT
  1. ....Q
  1. ...; -------------------------------------------------------------------------------------
  1. ...;
  1. ...; ----------------------- primary interpreting staff sort -----------------------------
  1. ...I RAFILTR="R",($D(^TMP("RA STFPHYSI",$J,+$P(RAY3,U,15)))\10) D
  1. ....S RASORT=$O(^TMP("RA STFPHYSI",$J,+$P(RAY3,U,15),"")) Q:RASORT=""
  1. ....D GETRDOSE K RASORT
  1. ....Q
  1. ...; -------------------------------------------------------------------------------------
  1. ...Q
  1. ..Q
  1. .Q
  1. ;display the data. if no data print the negative report and quit
  1. D DISPLAY^RADRPT2A
  1. K ^TMP($J,"RA SORT"),^TMP("RA PATI"),^TMP("RA PROCI"),^TMP("RA STFPHYSI")
  1. D XIT
  1. QUIT
  1. ;
  1. PAT ;sort by patient
  1. K ^TMP($J,"RA PAT"),^TMP("RA PATI",$J)
  1. S RADIC="^RADPT(",RADIC(0)="QEAMZ",RAUTIL="RA PAT"
  1. S RADIC("A")="Select Rad/Nuc Med Patient: ",RADIC("B")="All"
  1. S RADIC("S")="I $D(^RADPT(""EDM"",+Y))"
  1. W !! D EN1^RASELCT(.RADIC,RAUTIL) K %W,%Y1,DIC,RADIC,RAUTIL,X,Y
  1. ;Did the user select radiology patients? If not, quit
  1. I $O(^TMP($J,"RA PAT",""))="" D
  1. .S RAQUIT=1 W !!?3,$C(7),"Radiology patient data was not selected."
  1. .Q
  1. ;set ^TMP($J,"RA PAT","I",IEN_#2)
  1. E D INT($NA(^TMP($J,"RA PAT")))
  1. Q
  1. ;
  1. PROC ;sort by procedure
  1. K ^TMP($J,"RA PROC"),^TMP("RA PROCI",$J)
  1. S RADIC="^RAMIS(71,",RADIC(0)="QEAMZ",RAUTIL="RA PROC"
  1. S RADIC("A")="Select Rad/Nuc Med Procedures: ",RADIC("B")="All"
  1. S RADIC("S")="I $$SCRPROC^RADRPT2(+Y)"
  1. W !! D EN1^RASELCT(.RADIC,RAUTIL) K %W,%Y1,DIC,RADIC,RAUTIL,X,Y
  1. ;Did the user select radiology procedures? If not, quit
  1. I $O(^TMP($J,"RA PROC",""))="" D
  1. .S RAQUIT=1 W !!?3,$C(7),"Radiology procedure data was not selected."
  1. .Q
  1. ;set ^TMP($J,"RA PROC","I",IEN_#71)
  1. E D INT($NA(^TMP($J,"RA PROC")))
  1. Q
  1. ;
  1. SCRPROC(DA) ;screen procedures by type and if inactive.
  1. N RA71 S RA71(0)=$G(^RAMIS(71,DA,0))
  1. ;S RA71("I")=$G(^RAMIS(71,DA,"I"))
  1. Q:"^B^P^"[("^"_$P(RA71(0),U,6)_"^") 0
  1. ;Q:$L(RA71("I"))&(RA71("I")'>DT) 0
  1. Q 1
  1. ;
  1. STAFF ;sort by primary interpreting staff (radiologist)
  1. K ^TMP($J,"RA STFPHYS"),^TMP("RA STFPHYSI",$J)
  1. S RADIC="^VA(200,",RADIC(0)="QEAMZ",RAUTIL="RA STFPHYS"
  1. S RADIC("A")="Select Radiologist: ",RADIC("B")="All"
  1. S RADIC("S")="I $D(^VA(200,""ARC"",""S"",+Y))\10"
  1. W !! D EN1^RASELCT(.RADIC,RAUTIL) K %W,%Y1,DIC,RADIC,RAUTIL,X,Y
  1. ;Did the user select staff radiologists? If not, quit
  1. I $O(^TMP($J,"RA STFPHYS",""))="" D
  1. .S RAQUIT=1 W !!?3,$C(7),"Staff Radiologist data was not selected."
  1. .Q
  1. ;set ^TMP($J,"RA STFPHYS","I",IEN_#200)
  1. E D INT($NA(^TMP($J,"RA STFPHYS")))
  1. Q
  1. ;
  1. INT(ROOT) ;store the internal value of the patient/procedure/radiologist record
  1. N X,Y S X=""
  1. F S X=$O(@ROOT@(X)) Q:X="" D
  1. .S Y=0 F S Y=$O(@ROOT@(X,Y)) Q:Y'>0 D
  1. ..S:RAFILTR="C" ^TMP("RA PROCI",$J,Y,X)=""
  1. ..S:RAFILTR="P" ^TMP("RA PATI",$J,Y,X)=""
  1. ..S:RAFILTR="R" ^TMP("RA STFPHYSI",$J,Y,X)=""
  1. ..Q
  1. .K @ROOT@(X)
  1. .Q
  1. Q
  1. ;
  1. INIT ;initialize some variables
  1. ;return facility name (RAFAC), station # (RASTNUM) & VISN # (RAVISN)
  1. K RAR,X S RAY=$$KSP^XUPARAM("INST")_","
  1. D GETS^DIQ(4,RAY,".01;14*;99","E","RAR")
  1. S RAFAC=RAR(4,RAY,.01,"E") ; Name of facility
  1. S RASTNUM=RAR(4,RAY,99,"E") ; Station Number
  1. K RAR,RAY,X
  1. Q
  1. ;
  1. GETRDOSE ;get Rad dosage data
  1. I RARPTYPE="F" D Q
  1. .S X=$G(^RAD(RADIEN,0))
  1. .S RAK=$P(X,U,5),RAKAP=$P(X,U,6)
  1. .S RAFLSEC=$P(X,U,7),RAFLMIN=$J((RAFLSEC/60),5,1)
  1. .;^("F") = air kerma ^ air kerma area product ^ total fluoro time (mins)
  1. .S ^TMP($J,"RA SORT",RADTE,RASORT,RADFN,RACNI,"F")=RAK_U_RAKAP_U_RAFLMIN
  1. .K RAFLMIN,RAFLSEC,RAK,RAKAP,X
  1. .Q
  1. ;check sub-file for CT data
  1. I $O(^RAD(RADIEN,"II",0)) D
  1. .K RADLP,RAII,I,X,Y S X="0^0"
  1. .; ^("S") = CTDIvol (total) ^ DLP (total)
  1. .S ^TMP($J,"RA SORT",RADTE,RASORT,RADFN,RACNI,"S")="0^0",RADLP=$C(32),I=0
  1. .;get "top five" total all CTDIvol & DLP values
  1. .;formula: CTDIvol=DLP/length of scan (mGy-cm)
  1. .F S RADLP=$O(^RAD(RADIEN,"II","DLP",RADLP),-1) Q:RADLP'>0 D Q:RAQUIT
  1. ..S Y=0 F S Y=$O(^RAD(RADIEN,"II","DLP",RADLP,Y)) Q:Y'>0 D Q:RAQUIT
  1. ...S RAII(0)=$G(^RAD(RADIEN,"II",Y,0)) Q:RAII(0)=""
  1. ...S I=I+1
  1. ...S:I'>5 ^TMP($J,"RA SORT",RADTE,RASORT,RADFN,RACNI,I)=$P(RAII(0),U,3,5)
  1. ...S $P(X,U,1)=$P(X,U,1)+$P(RAII(0),U,4) ;CTDIvol
  1. ...S $P(X,U,2)=$P(X,U,2)+$P(RAII(0),U,5) ;DLP
  1. ...Q
  1. ..Q
  1. .S ^TMP($J,"RA SORT",RADTE,RASORT,RADFN,RACNI,"S")=X
  1. .K RADLP,RAII,I,X,Y
  1. .Q
  1. Q
  1. ;
  1. ITYPCHK(Y) ;i-type check
  1. ;input: 'Y' = IEN imaging type of the study
  1. ;output: 0 - if the study is of a different i-type than
  1. ; the report type selected by the user (saved
  1. ; in RARPTYPE)
  1. ; 1 - if the study is the same i-type as the
  1. ; report type selected by the user
  1. ;
  1. ; 'RARPRTYPE' is a local variable of global scope. Values
  1. ; can be: 'F' for Fluoro (GEN RAD), 'D' for CT (detailed
  1. ; rpt) or 'S' for CT (summary rpt)
  1. ;
  1. ; 'RAY2' is the value if the zero node of 70.02. The
  1. ; second piece is a pointer field pointing to the
  1. ; IMAGING TYPE (#79.2) file.
  1. ;
  1. N X S X=$G(^RA(79.2,Y,0))
  1. S X(3)=$P(X,U,3) ;match against abbrv
  1. I RARPTYPE="F",(X(3)="RAD") Q 1
  1. I RARPTYPE="D",(X(3)="CT") Q 1
  1. I RARPTYPE="S",(X(3)="CT") Q 1
  1. Q 0
  1. ;
  1. XIT ;kill variables
  1. K %,DF,DIR,DIRUT,DIROUT,DTOUT,DUOUT,RA,RABEGDT,RAC,RACNI,RADFN,RADIEN,RADTE,RADTI,RAENDDT
  1. K RAFAC,RAFILTR,RAP,RAPG,RAPOP,RANGE,RAQUIT,RAR,RARPTYPE,RARUNDT,RASORT,RASTNUM,RAUTIL
  1. K RAVAR,RAX,RAY,RAY2,RAY3,X,Y,ZTDESC,ZTSAVE,ZTSK
  1. Q
  1. ;