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

RADRPT1A.m

Go to the documentation of this file.
  1. RADRPT1A ;HISC/GJC Radiation dosage report utility one A ;01 Aug 2017 1:26 PM
  1. ;;5.0;Radiology/Nuclear Medicine;**113,119**;Mar 16, 1998;Build 7
  1. ;
  1. ;--- IAs ---
  1. ;Call/File Number Type
  1. ;------------------------------------------------
  1. ;$$SS^%ZTLOAD 10063 S
  1. ;$$GET1^DIQ 2056 S
  1. ;GETS^DIQ 2056 S
  1. ;$$FMTE^XLFDT 10103 S
  1. ;$$NOW^XLFDT 10103 S
  1. ;$$CJ^XLFSTR 10104 S
  1. ;^DPT( 10035 S
  1. ;^VA(200, 10060 S
  1. ;where 'S'=Supported; 'C'=Controlled Subscription; 'P'=Private
  1. ;
  1. EN ;entry point
  1. ; variables saved
  1. ;----------------
  1. ; ^TMP($J,"RAEX",n)=IEN 70.3 ^ RADFN ^ Exam Date ^ inv. Exam Date (IEN 70.02)
  1. ; ^ Case Number ^ IEN EXAMINATIONS (70.03) ^ Report (if none null)
  1. S (RAI,RAP,RAQUIT)=0
  1. S RANODT=$$FMTE^XLFDT($$NOW^XLFDT(),"1M")
  1. S RATITLE=$$CJ^XLFSTR("Patient Profile With Radiation Dose Data",IOM)
  1. ;RAX = field numbers returned 70.03 level
  1. S RAX=".01:4;6:8;9;9.5;12:16;19;125*" ;*** see DD map of 70.03 ***
  1. S $P(RABORDR,"=",(IOM+1))="",$P(RALINE,"-",(IOM+1))=""
  1. S RATAB(1)=2,RATAB(2)=14,RATAB(3)=38,RATAB(4)=49
  1. S RATAB(5)=16,RATAB(6)=38,RATAB(7)=51
  1. ;
  1. K RAZDFN D GETS^DIQ(2,RADFN_",",".01;.09","E","RAZDFN")
  1. S RA("NAME")=$E(RAZDFN(2,RADFN_",",".01","E"),1,30)
  1. S X=RAZDFN(2,RADFN_",",".09","E"),RA("PID")=X
  1. ;RA("PID") is the full SSN just like VA("PID")
  1. S X1=$E(X,($L(X)-3),$L(X))
  1. ;RA("BID") is the last four of the SSN just like VA("BID")
  1. S RA("BID")=X1 K RAZDFN,X,X1
  1. ;
  1. K ^TMP($J,"RA DISCLAIMER") D DISCLAIM^RADRPT2A
  1. ;
  1. F S RAI=$O(^TMP($J,"RAEX",RAI)) Q:'RAI D Q:RAQUIT
  1. .S Y=$G(^TMP($J,"RAEX",RAI))
  1. .F I=1:1:7 S @$P("RARAD^RADFN^RADTE^RADTI^RACN^RACNI^RARPT","^",I)=$P(Y,"^",I)
  1. .;RARAD = IEN file 70.3; RARPT = IEN of the report for this study
  1. .S RAY2=$G(^RADPT(RADFN,"DT",RADTI,0)) Q:RAY2=""
  1. .S RAY3=$G(^RADPT(RADFN,"DT",RADTI,"P",RACNI,0)) Q:RAY3=""
  1. .S RAORD(0)=$G(^RAO(75.1,+$P(RAY3,U,11),0))
  1. .;fluoro data on 0 node
  1. .S RARAD(0)=$G(^RAD(RARAD,0)) Q:RARAD(0)=""
  1. .S RAIEN=RADTI_","_RADFN_"," K RAY2A,RAY3A
  1. .D GETS^DIQ(70.02,RAIEN,".01:4","E","RAY2A")
  1. .S RAIENS=RACNI_","_RADTI_","_RADFN_","
  1. .D GETS^DIQ(70.03,RAIENS,RAX,"E","RAY3A")
  1. .S RA("RACN")=$$CN() ; case # accession #
  1. .;
  1. .;--- header for first page only ---
  1. .S RAPG=1 W @IOF,!,RATITLE
  1. .W !,"Date: ",RANODT,?69,"Page: ",RAPG
  1. .W !,RABORDR
  1. .;
  1. .;--- name and SSN (last four) ---
  1. .W !?RATAB(1),"Name",?RATAB(2),": ",RA("NAME")," ",RA("BID")
  1. .;
  1. .W !?RATAB(1),"Division",?RATAB(2),": ",$E(RAY2A(70.02,RAIEN,"3","E"),1,21)
  1. .W ?RATAB(3),"Category",?RATAB(4),": ",$E(RAY3A(70.03,RAIENS,"4","E"),1,27)
  1. .W !?RATAB(1),"Location",?RATAB(2),": ",$E(RAY2A(70.02,RAIEN,"4","E"),1,21)
  1. .W ?RATAB(3),"Ward",?RATAB(4),": ",$E(RAY3A(70.03,RAIENS,"6","E"),1,27)
  1. .W !?RATAB(1),"Exam Date",?RATAB(2),": ",$E(RAY2A(70.02,RAIEN,".01","E"),1,21)
  1. .W ?RATAB(3),"Service",?RATAB(4),": ",$E(RAY3A(70.03,RAIENS,"7","E"),1,27)
  1. .W !?RATAB(1),"Case No.",?RATAB(2),": ",$$CN() ;16 digits max
  1. .W ?RATAB(3),"Bedsection",?RATAB(4),": ",$E(RAY3A(70.03,RAIENS,"19","E"),1,27)
  1. .W !?RATAB(3),"Clinic",?RATAB(4),": ",$E(RAY3A(70.03,RAIENS,"8","E"),1,27)
  1. .W:$E(RAY3A(70.03,RAIENS,"4","E"),1)="C" !?RATAB(3),"Contract",?RATAB(4),": ",$E(RAY3A(70.03,RAIENS,"9","E"),1,27)
  1. .W:$E(RAY3A(70.03,RAIENS,"4","E"),1)="S" !?RATAB(3),"Sharing",?RATAB(4),": ",$E(RAY3A(70.03,RAIENS,"9","E"),1,27)
  1. .W:$E(RAY3A(70.03,RAIENS,"4","E"),1)="R" !?RATAB(3),"Research",?RATAB(4),": ",$E(RAY3A(70.03,RAIENS,"9.5","E"),1,27)
  1. .W !,RALINE ;spacer
  1. .S RAOPRC=$$GET1^DIQ(71,+$P(RAORD(0),U,2)_",",.01) ;name of ordered proc.
  1. .S RAPRC=$$GET1^DIQ(71,+$P(RAY3,U,2)_",",.01) ;name of registered proc.
  1. .W !?RATAB(1),"Registered",?RATAB(2),": ",$E(RAPRC,1,30),?RATAB(4),$$PRC(+$P(RAY3,U,2))
  1. .W:RAPRC'=RAOPRC !?RATAB(1),"Requested",?RATAB(2),": ",$E(RAOPRC,1,60)
  1. .S RA("PHYS")=$$GET1^DIQ(200,+$P(RAY3,U,14)_",",.01) ;name of requesting physician
  1. .S RA("EXS")=$P($G(^RA(72,+$P(RAY3,U,3),0)),U) ;exam status
  1. .S RA("PIR")=$$GET1^DIQ(200,+$P(RAY3,U,12)_",",.01) ;name of primary interpreting resident
  1. .I $P(RAY3,U,17)>0 D
  1. ..S RA("RPT")=$$GET1^DIQ(74,+$P(RAY3,U,17)_",",5)
  1. ..S RA("RPT")=$S($G(RA("RPT"))'="":RA("RPT"),1:"No Report")
  1. ..S RA("PREVFIER")=+$P($G(^RARPT(+$P(RAY3,U,17),0)),U,13) ;13th piece fld #15
  1. ..S RA("PREVFIER")=$$GET1^DIQ(200,+RA("PREVFIER")_",",.01) ;name of requesting physician
  1. ..S RA("PREVFIED")=$S(RA("PREVFIER")'="":RA("PREVFIER"),1:"No") K RA("PREVFIER")
  1. ..Q
  1. .S RA("CAM")=$S(+$P(RAY3,U,18)>0:$P($G(^RA(78.6,+$P(RAY3,U,18),0)),U),1:"") ;cam/eq/rm
  1. .S RA("PIS")=$$GET1^DIQ(200,+$P(RAY3,U,15)_",",.01) ;name of primary interpreting staff
  1. .S RA("DX")=$S(+$P(RAY3,U,13)>0:$P($G(^RA(78.3,+$P(RAY3,U,13),0)),U),1:"")
  1. .S RA("TECH")=$O(^RADPT(RADFN,"DT",RADTI,"P",RACNI,"TC",0))
  1. .I RA("TECH") D
  1. ..S RA("T")=+$P($G(^RADPT(RADFN,"DT",RADTI,"P",RACNI,"TC",RA("TECH"),0)),U)
  1. ..S RA("TECH")=$$GET1^DIQ(200,RA("T")_",",.01) ;name of technologist
  1. ..K RA("T")
  1. ..QUIT
  1. .S RA("CMP")=$E(RAY3A(70.03,RAIENS,"16","E"),1,27)
  1. .W !?RATAB(1),"Requesting Phy",?RATAB(5),": ",$E(RA("PHYS"),1,18)
  1. .W ?RATAB(6),"Exam Status",?RATAB(7),": ",$E(RA("EXS"),1,27)
  1. .W !?RATAB(1),"Int'g Resident",?RATAB(5),": ",$E(RA("PIR"),1,18)
  1. .W ?RATAB(6),"Report Status",?RATAB(7),": ",$E($G(RA("RPT")),1,27)
  1. .W !?RATAB(1),"Pre-Verified",?RATAB(5),": ",$E($G(RA("PREVFIED")),1,18)
  1. .W ?RATAB(6),"Cam/Equip/Rm",?RATAB(7),": ",$E(RA("CAM"),1,27)
  1. .W !?RATAB(1),"Int'g Staff",?RATAB(5),": ",$E(RA("PIS"),1,18)
  1. .W ?RATAB(6),"Diagnosis",?RATAB(7),": ",$E(RA("DX"),1,27)
  1. .W !?RATAB(1),"Technologist",?RATAB(5),": ",$E($G(RA("TECH")),1,18)
  1. .W ?RATAB(6),"Complication",?RATAB(7),": ",$E(RA("CMP"),1,27)
  1. .I $P(RAORD(0),U,13)'="" W !?RATAB(1),"Pregnant at time of order entry: "_$$GET1^DIQ(75.1,+$P(RAY3,U,11)_",",13)
  1. .;
  1. .;--------- get procedure modifiers/CPT Modifiers ---------------
  1. .S RALBL="Modifiers",RAHDR=$$CJ^XLFSTR(RALBL,IOM,"-")
  1. .W !,RAHDR,!?RATAB(1),RALBL,?RATAB(5),": "
  1. .I $O(^RADPT(RADFN,"DT",RADTI,"P",RACNI,"M",0)) D K RAL,RAS
  1. ..S RAL=$O(RAY3A("70.1",$C(126)),-1)
  1. ..S RAS="" F S RAS=$O(RAY3A("70.1",RAS)) Q:RAS="" D Q:RAQUIT
  1. ...I $Y>(IOSL-4) D HDR Q:RAQUIT
  1. ...W ?18,$E($G(RAY3A("70.1",RAS,.01,"E")),1,30)
  1. ...W:RAL'=RAS ! ;more data
  1. ...Q
  1. ..Q
  1. .E W "None"
  1. .Q:RAQUIT
  1. .S RALBL="CPT Modifiers" W !?RATAB(1),RALBL,?RATAB(5),": "
  1. .I $O(^RADPT(RADFN,"DT",RADTI,"P",RACNI,"CMOD",0)) D K RACPT,RAL,RALBL,RAS,RAX99,Y
  1. ..;EX: - RACPT("70.3135","1,1,6889176.8884,76,",".01","I")=4
  1. ..D GETS^DIQ(70.03,RAIENS,"135*","I","RACPT")
  1. ..S RAL=$O(RACPT("70.3135",$C(126)),-1)
  1. ..S RAS="" F S RAS=$O(RACPT("70.3135",RAS)) Q:RAS="" D Q:RAQUIT
  1. ...I $Y>(IOSL-4) D HDR Q:RAQUIT
  1. ...;EX - RAX99="4^23^UNUSUAL ANESTHESIA^09923^C^2930101^1^^2930101^"
  1. ...S Y=$G(RACPT("70.3135",RAS,.01,"I")),RAX99=""
  1. ...S:Y RAX99=$$BASICMOD^RACPTMSC(Y,RADTE)
  1. ...W ?18,$P(RAX99,U,2)," ",$P(RAX99,U,3)
  1. ...W:RAL'=RAS !
  1. ...Q
  1. ..Q
  1. .E W "None"
  1. .Q:RAQUIT
  1. .;
  1. .;-------------------- get Contrast Media --------------------------
  1. .I $O(^RADPT(RADFN,"DT",RADTI,"P",RACNI,"CM",0)) D K RACM,RAL,RALBL,RAS
  1. ..S RALBL="Contrast Media",RAHDR=$$CJ^XLFSTR(RALBL,IOM,"-")
  1. ..W !,RAHDR,!?RATAB(1),RALBL,?RATAB(5),": "
  1. ..D GETS^DIQ(70.03,RAIENS,"225*","E","RACM")
  1. ..S RAL=$O(RACM("70.3225",$C(126)),-1)
  1. ..S RAS="" F S RAS=$O(RACM("70.3225",RAS)) Q:RAS="" D Q:RAQUIT
  1. ...I $Y>(IOSL-4) D HDR Q:RAQUIT
  1. ...W ?18,$E($G(RACM("70.3225",RAS,.01,"E")),1,30)
  1. ...W:RAL'=RAS ! ;more data
  1. ...Q
  1. ..Q
  1. .Q:RAQUIT
  1. .;
  1. .;----------------------- get Medications ------------------------------
  1. .I $O(^RADPT(RADFN,"DT",RADTI,"P",RACNI,"RX",0)) D K RAS,RAMED
  1. ..S RAHDR=$$CJ^XLFSTR("Medications",IOM,"-") W !,RAHDR
  1. ..K RAMED D GETS^DIQ(70.03,RAIENS,"200*","E","RAMED")
  1. ..S RAL=$O(RAMED("70.15",$C(126)),-1)
  1. ..S RAS="" F S RAS=$O(RAMED("70.15",RAS)) Q:RAS="" D Q:RAQUIT
  1. ...I $Y>(IOSL-4) D HDR Q:RAQUIT
  1. ...W !?RATAB(1),"Med: ",$E($G(RAMED("70.15",RAS,.01,"E")),1,28)
  1. ...W ?RATAB(3),"Dose Adm'd: ",$E($G(RAMED("70.15",RAS,2,"E")),1,25)
  1. ...W !?RATAB(1),"Adm'd by: ",$E($G(RAMED("70.15",RAS,3,"E")),1,24)
  1. ...W ?RATAB(3),"Date Adm'd: ",$E($G(RAMED("70.15",RAS,4,"E")),1,20)
  1. ...W:RAS'=RAL ! ;more data
  1. ...Q
  1. ..Q
  1. .Q:RAQUIT
  1. .;
  1. .;----------------------- get Radiopharms ------------------------------
  1. .I $P(RAY3,U,28)>0 D K RADA,RADIO,RAS,RAU
  1. ..;#500 NUCLEAR MED DATA
  1. ..S RADA=$P(RAY3,U,28)_",",RAHDR=$$CJ^XLFSTR("Radiopharmaceuticals",IOM,"-")
  1. ..W !,RAHDR K RADIO S RAS=""
  1. ..D GETS^DIQ(70.2,RADA_",","100*","E","RADIO")
  1. ..S RAL=$O(RADIO("70.21",$C(126)),-1)
  1. ..F S RAS=$O(RADIO("70.21",RAS)) Q:RAS="" D Q:RAQUIT
  1. ...I $Y>(IOSL-4) D HDR Q:RAQUIT
  1. ...S RAU=0 F S RAU=$O(RADIO("70.21",RAS,RAU)) Q:RAU'>0 D Q:RAQUIT
  1. ....I $Y>(IOSL-4) D HDR Q:RAQUIT
  1. ....S RAU(0)=$$TRN1^RAPROD2(RAU)_$G(RADIO("70.21",RAS,RAU,"E"))
  1. ....S RAU(0)=RAU(0)_$S(RAU=2:" mCi",RAU=4:" mCi",RAU=7:" mCi",1:"")
  1. ....W !?RATAB(1),$E(RAU(0),1,28)
  1. ....S RAU=$O(RADIO("70.21",RAS,RAU))
  1. ....S:RAU'>0 RAU=$C(32) Q:RAU=$C(32)
  1. ....S RAU(1)=$$TRN1^RAPROD2(RAU)_$G(RADIO("70.21",RAS,RAU,"E"))
  1. ....S RAU(1)=RAU(1)_$S(RAU=2:" mCi",RAU=4:" mCi",RAU=7:" mCi",1:"")
  1. ....W ?RATAB(4),$E(RAU(1),1,27)
  1. ....Q
  1. ...W:RAS'=RAL ! ;more data
  1. ...Q
  1. ..Q
  1. .Q:RAQUIT
  1. .;
  1. .;----------------------- get Rad Dose (fluoro) --------------------
  1. .I $P(RARAD(0),U,5)'=""!($P(RARAD(0),U,6)'="") D ;air kerma OR air kerma area product
  1. ..S RAHDR=$$CJ^XLFSTR("Rad Dose",IOM,"-"),RAZFL=""
  1. ..S RACOL(1)="Air Kerma (mGy)"
  1. ..S RACOL(2)="Air Kerma Area Product (Gy-cm2)"
  1. ..S RACOL(3)="Fluoro Time (min)" ;note: data is in seconds
  1. ..W !,RAHDR
  1. ..I $Y>(IOSL-4) D HDR Q:RAQUIT
  1. ..W !?RATAB(1),RACOL(1),?24,RACOL(2),?60,RACOL(3)
  1. ..S $P(XRA,"-",($L(RACOL(1))+1))="" W !?RATAB(1),XRA
  1. ..K XRA S $P(XRA,"-",($L(RACOL(2))+1))="" W ?24,XRA
  1. ..K XRA S $P(XRA,"-",($L(RACOL(3))+1))="" W ?60,XRA
  1. ..W !?RATAB(1),$J($P(RARAD(0),U,5),8,2),?24,$J(+$P(RARAD(0),U,6),8,2)
  1. ..W ?60,$J(($P(RARAD(0),U,7))/60,1,1) ;to mins to tenths
  1. ..K RACOL,XRA
  1. ..Q
  1. .Q:RAQUIT
  1. .;
  1. .;----------------------- get Rad Dose (CT SCAN) -------------------
  1. .I $O(^RAD(RARAD,"II",0)) S RAZCT="" D CT^RADRPT1 ;if CT Scan data
  1. .Q:RAQUIT
  1. .S RAP=RAP+1
  1. .I $D(ZTQUEUED) S:RAP#500=0 (RAQUIT,ZTSTOP)=$$S^%ZTLOAD()
  1. .; --- disclaimer ---
  1. .K RALBL D HDR Q:RAQUIT
  1. .F RAII=1:1:5 D Q:RAQUIT
  1. ..I ($D(RAZFL)#2)=1,(($D(RAZCT)#2)=0) Q:RAII=3!(RAII=4)
  1. ..I ($D(RAZFL)#2)=0,(($D(RAZCT)#2)=1) Q:RAII=5
  1. ..S RAYY=0
  1. ..F S RAYY=$O(^TMP($J,"RA DISCLAIMER",RAII,RAYY)) Q:RAYY'>0 D Q:RAQUIT
  1. ...I $Y>(IOSL-4) D HDR Q:RAQUIT
  1. ...W !,$G(^TMP($J,"RA DISCLAIMER",RAII,RAYY))
  1. ...Q
  1. ..Q
  1. .S DX=0,DY=IOSL X ^%ZOSF("XY")
  1. .K DX,DY,RAIEN,RAIENS,RAII,RAY2A,RAY3A,RAYY,RAZCT,RAZFL,RTFL,Y,Z
  1. .Q
  1. D XIT
  1. Q
  1. ;
  1. CN() ;return case # in the form of the accession # (SSAN aware)
  1. N X S X=$P(RAY3,U,31) ;SITE ACCESSION NUMBER (SSAN)
  1. S:X="" X=$E(RADTE,4,5)_$E(RADTE,6,7)_$E(RADTE,2,3)_"-"_$P(RAY3,U)
  1. Q X
  1. ;
  1. HDR ;header/end of screen logic
  1. ;RAHDR: is dynamic; its value is based on the section
  1. ;HDR^RADRPT1A is called from.
  1. I $E(IOST,1,2)="C-" D Q:RAQUIT
  1. .W !,"Press RETURN to continue or '^' to exit: " R X:DTIME
  1. .S RAQUIT='$T!(X["^") K X
  1. .Q
  1. S RAPG=RAPG+1 W @IOF,!,RATITLE
  1. W !,"Date: ",RANODT,?69,"Page: ",RAPG
  1. W !,RABORDR
  1. W !?RATAB(1),"Name: ",$E(RA("NAME"),1,27)_" "_RA("BID")
  1. W ?RATAB(4),"Exam Date: ",$E(RAY2A(70.02,RAIEN,".01","E"),1,21)
  1. W !?RATAB(1),"Procedure: ",$E(RAPRC,1,30)
  1. W ?RATAB(4),"Case Number: ",RA("RACN")
  1. W !,RAHDR W:$D(RALBL)#2 !?RATAB(1),RALBL,": "
  1. Q
  1. ;
  1. XIT ;kill variables set ZTREQ then exit
  1. K %,%H,%I,N,RA,RABORDR,RACN,RACNI,RADA,RADFN,RADTE,RADPT,RADTI,RAHDR
  1. K RAI,RAIEN,RAIENS,RAL,RALBL,RALINE,RAM,RAMED,RANODT,RAOPRC,RAORD,RAP,RAPG
  1. K RAPRC,RAQUIT,RARAD,RARPT,RARX,RAS,RATAB,RATITLE,RAU,RAX,RAY,RAY2,RAY2A
  1. K RAY3,RAY3A,RAZCT,RAZFL
  1. K ^TMP($J,"RAEX"),^TMP($J,"RA DISCLAIMER")
  1. S:$D(ZTQUEUED) ZTREQ="@"
  1. Q
  1. ;
  1. PRC(Y) ;print procedure data (file #71)
  1. ;Input: Y = IEN file 71
  1. ;Output: imaging type abbreviation - procdure type or inactive - CPT code
  1. ; (if not a Parent or Broad procedure)
  1. ;ex: (NM Parent)
  1. ; (MAM Inactive) Note: may be broad or parent type
  1. ; (CT Inactive) CPT:76361
  1. ; (VAS Detailed) CPT:93619
  1. N X
  1. S X(0)=$G(^RAMIS(71,Y,0)),X("I")=$G(^RAMIS(71,Y,"I"))
  1. S X("IN")=$S(X("I")="":0,DT'>X("I"):0,1:1)
  1. S X=$P(X(0),U,6),X("CPT")=""
  1. S X("PT")=$S(X="B":"Broad",X="D":"Detailed",X="P":"Parent",X="S":"Series",1:"Unknown")
  1. S X=+$P(X(0),U,12) S X("IT")=$S(X=0:"Unknown",1:$P(^RA(79.2,X,0),U,3)) ;required identifier
  1. I $E(X("PT"),1)'="B",$E(X("PT"),1)'="P" S X("CPT")="CPT:"_$P($$NAMCODE^RACPTMSC(+$P(X(0),U,9),DT),U)
  1. S X="("_X("IT")_" "_$S(X("IN"):"Inactive",1:X("PT"))_") "_X("CPT")
  1. Q X
  1. ;