| 1 | RASTREQ ;HISC/CAH,GJC AISC/MJK-Status Requirements Check Routine ;6/3/98  09:56
 | 
|---|
| 2 |  ;;5.0;Radiology/Nuclear Medicine;**1,10,23,40**;Mar 16, 1998
 | 
|---|
| 3 |  ; Called by 
 | 
|---|
| 4 |  ; (1) Stat Track's [RA STATUS CHANGE]'s fld EXAM STATUS' input transform
 | 
|---|
| 5 |  ; (2) ASK+22^RASTED, if user "^" out of stat trk editing
 | 
|---|
| 6 |  ; (3) Cancel an Exam's [RA CANCEL]'s fld EXAM STATUS' input transform
 | 
|---|
| 7 |  ; (4) Enter Last Past Visit Before DHCP's [RA LAST PAST VISIT]'s ""
 | 
|---|
| 8 |  ;
 | 
|---|
| 9 |  ; Instead of using RAIMGTY, recalculate
 | 
|---|
| 10 |  ; the imaging type using the imaging type on the exam node because
 | 
|---|
| 11 |  ; status updating through report entry/edit, batch verify, and several
 | 
|---|
| 12 |  ; other options is NOT screened by sign-on imaging type, so does not
 | 
|---|
| 13 |  ; stay the same through a user's session.
 | 
|---|
| 14 |  ;
 | 
|---|
| 15 |  ; 'RAMES1' is used to display which Exam Status required fields are
 | 
|---|
| 16 |  ; not populated.  This only applies to the 'Status Tracking Of Exams'
 | 
|---|
| 17 |  ; option.
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 |  ; If tracking ^-out, this rtn would be called outside of edt tmpl,
 | 
|---|
| 20 |  ; and thus the DA vars would not be defined, so we need to set them here
 | 
|---|
| 21 |  ;
 | 
|---|
| 22 |  S:'$D(DA)#2 DA=RACNI S:'$D(DA(1))#2 DA(1)=RADTI S:'$D(DA(2))#2 DA(2)=RADFN
 | 
|---|
| 23 |  ; If Fileman enter/edit, we need to define RADFN, RADTI, RACNI so the
 | 
|---|
| 24 |  ; nuc med checks won't bomb
 | 
|---|
| 25 |  S:'$D(RACNI)#2 RACNI=DA S:'$D(RADTI)#2 RADTI=DA(1) S:'$D(RADFN)#2 RADFN=DA(2)
 | 
|---|
| 26 |  ;
 | 
|---|
| 27 |  S RAIMGTYI=+$P($G(^RADPT(DA(2),"DT",DA(1),0)),U,2),RAIMGTYJ=$P($G(^RA(79.2,+RAIMGTYI,0)),U,1),RASAVTYJ=RAIMGTYJ
 | 
|---|
| 28 |  S RAMES1="W:$G(K)=$P($G(^RA(72,+$G(RANXT72),0)),U,3)&('$D(ZTQUEUED)#2) !?3,""No '"",RAZ,""'"",?35,"" entered for this exam.""" ; display if at the ranext exm stat level
 | 
|---|
| 29 |  S RAXX=+$G(X)
 | 
|---|
| 30 |  I '$D(^RA(72,RAXX,0))!(RAIMGTYJ']"") D  Q
 | 
|---|
| 31 |  . K X W:'$D(ZTQUEUED)#2 !?3,"Error: cannot determine Imaging Type of exam.  Contact IRM."
 | 
|---|
| 32 |  . K RAMES1,RAXX
 | 
|---|
| 33 |  . Q
 | 
|---|
| 34 |  N RA,RASN,RASTI,RADES,RAOKAY,RA3
 | 
|---|
| 35 |  ; RADES = order seq. desired, RAOKAY= actual order seq. okay'd
 | 
|---|
| 36 |  S X1=$G(^RA(72,RAXX,0)),RADES=$P(X1,U,3)
 | 
|---|
| 37 |  I $$LKUP^XPDKEY(+$P(X1,"^",4))]"",'$D(^XUSEC($$LKUP^XPDKEY(+$P(X1,"^",4)),DUZ)) K X W:'$D(ZTQUEUED)#2 !?3,"You do not have the proper access privileges to ",!?3,"change this exam to this status" Q
 | 
|---|
| 38 |  S RAJ=^RADPT(DA(2),"DT",DA(1),"P",DA,0),RAOR=-1
 | 
|---|
| 39 |  S RABEFORE=$P($G(^RA(72,+$P(RAJ,U,3),0)),U,3) ; current order seq
 | 
|---|
| 40 |  ; Don't need to set RAORDIFN,RACS,RAPRIT,RAF5
 | 
|---|
| 41 |  I '$D(^RA(72,"AA",RAIMGTYJ,0,RAXX)) D LOOP^RASTREQ1 S RAIMGTYJ=RASAVTYJ
 | 
|---|
| 42 |  I $D(^RA(72,"AA",RAIMGTYJ,0,RAXX)) D CANCEL^RASTREQ1
 | 
|---|
| 43 |  S RAIMGTYJ=RASAVTYJ
 | 
|---|
| 44 |  ; Can't use X to determine if status change to next was successful
 | 
|---|
| 45 |  ; due to looping thru all status levels for this img type
 | 
|---|
| 46 |  ; chk if calculated order is at NEXT or higher level
 | 
|---|
| 47 |  ; RAAFTER is set in rastreq1; it has 2 meanings :
 | 
|---|
| 48 |  ;   upon return from rastreq1, RAAFTER means highest seq order qualified
 | 
|---|
| 49 |  ;   upon exit from this rtn,   RAAFTER means actual seq order used
 | 
|---|
| 50 |  I RABEFORE<RAAFTER D  G MSG
 | 
|---|
| 51 |  . I RADES<RAAFTER S RAOKAY=RADES
 | 
|---|
| 52 |  . E  S RAOKAY=RAAFTER
 | 
|---|
| 53 |  . Q
 | 
|---|
| 54 |  I RAAFTER<RABEFORE D  G MSG
 | 
|---|
| 55 |  . I RADES<RAAFTER S RAOKAY=RADES
 | 
|---|
| 56 |  . E  S RAOKAY=RAAFTER
 | 
|---|
| 57 |  . Q
 | 
|---|
| 58 |  ; at this point RAAFTER=RABEFORE
 | 
|---|
| 59 |  I RADES<RAAFTER S RAOKAY=RADES
 | 
|---|
| 60 |  E  S RAOKAY=RABEFORE
 | 
|---|
| 61 | MSG I RAOKAY=RABEFORE K X W:'$D(ZTQUEUED)#2 !?5," ...exam status not changed" G KOUT2
 | 
|---|
| 62 |  S X=$O(^RA(72,"AA",RAIMGTYJ,RAOKAY,0))
 | 
|---|
| 63 |  S:$D(RANEXT) RANEXT=^RA(72,+X,0) ;set existing RANEXT to ok'd status
 | 
|---|
| 64 |  I RAOKAY<RABEFORE W:'$D(ZTQUEUED)#2 !?5," ...exam status backed down to '",$P($G(^RA(72,+X,0)),U),"'" G KOUT2
 | 
|---|
| 65 |  I RAOKAY<RADES W:'$D(ZTQUEUED)#2 !!?5," ...though upgraded, new status level (",$P($G(^RA(72,+$O(^RA(72,"AA",RAIMGTYJ,RAOKAY,0)),0)),U),")",!?5,"is not as high as the desired level (",$P($G(^RA(72,+$O(^RA(72,"AA",RAIMGTYJ,RADES,0)),0)),U),")",!
 | 
|---|
| 66 | KOUT1 ; check for higher qualifying status(es)
 | 
|---|
| 67 |  G:RAOKAY'<RAAFTER!(RAOKAY=9) KOUT2 S RA3=RAOKAY
 | 
|---|
| 68 |  W !!,"This case also qualifies for higher status(es) :",!
 | 
|---|
| 69 |  F  S RA3=$O(^RA(72,"AA",RAIMGTYJ,RA3)) Q:RA3=""  Q:RA3>RAAFTER  W:'$D(ZTQUEUED)#2 ?$X+4,$P($G(^RA(72,$O(^(RA3,0)),0)),U)
 | 
|---|
| 70 |  W:'$D(ZTQUEUED)#2 !!,"Since Status Tracking can only upgrade one status at a time,",!,"please edit this exam again.",!
 | 
|---|
| 71 | KOUT2 S RAAFTER=RAOKAY ;return as actual seq order used, not nec. highest
 | 
|---|
| 72 |  K RAIMGTYI,RAIMGTYJ,RAMES1,RAZ,RAXX,RAJ,RAS,RAK,RAE,X1,RASAVTYJ
 | 
|---|
| 73 |  Q
 | 
|---|
| 74 |  ;
 | 
|---|
| 75 | 1 ;Technologist Check
 | 
|---|
| 76 |  S RA("TECH")="" I $O(^RADPT(DA(2),"DT",DA(1),"P",DA,"TC",0))>0,$D(^VA(200,+^($O(^(0)),0),0)) S RA("TECH")=$P(^(0),"^")
 | 
|---|
| 77 |  I RA("TECH")']"" K X S RAZ="technologist" X:$D(RAMES1) RAMES1
 | 
|---|
| 78 |  K RA("TECH") Q
 | 
|---|
| 79 |  ;
 | 
|---|
| 80 | 2 ;Interpreting Physician Check
 | 
|---|
| 81 |  I '$D(^VA(200,+$P(RAJ,"^",12),0)),'$D(^VA(200,+$P(RAJ,"^",15),0)) K X S RAZ="interpreting staff or resident" X:$D(RAMES1) RAMES1
 | 
|---|
| 82 |  Q
 | 
|---|
| 83 |  ;
 | 
|---|
| 84 | 3 ;Detailed Procedure Check
 | 
|---|
| 85 |  S RAZ="detailed procedure" I '$D(^RAMIS(71,+$P(RAJ,"^",2),0)) K X X:$D(RAMES1) RAMES1 Q
 | 
|---|
| 86 |  S RAJ1=$G(^RAMIS(71,+$P(RAJ,"^",2),0)) I "DS"'[$P(RAJ1,"^",6) K X X:$D(RAMES1) RAMES1 Q
 | 
|---|
| 87 |  S RAZ="detailed procedure (no CPT code)" I $P(RAJ1,"^",9)']"" K X X:$D(RAMES1) RAMES1 Q
 | 
|---|
| 88 |  Q
 | 
|---|
| 89 |  ;
 | 
|---|
| 90 | 4 ;Film Data Check
 | 
|---|
| 91 |  I '$O(^RADPT(DA(2),"DT",DA(1),"P",DA,"F",0)) K X S RAZ="film data" X:$D(RAMES1) RAMES1
 | 
|---|
| 92 |  Q
 | 
|---|
| 93 |  ;
 | 
|---|
| 94 | 5 ;Diagnostic Code Check
 | 
|---|
| 95 |  I '$D(^RA(78.3,+$P(RAJ,"^",13),0)) K X S RAZ="diagnostic code" X:$D(RAMES1) RAMES1
 | 
|---|
| 96 |  Q
 | 
|---|
| 97 |  ;
 | 
|---|
| 98 | 6 ;Camera/Equipment/Room Check
 | 
|---|
| 99 |  S RAE=$S($D(RAMDV):$P(RAMDV,"^",9),1:1) I RAE,'$D(^RA(78.6,+$P(RAJ,"^",18),0)) K X S RAZ="camera/equip/room" X:$D(RAMES1) RAMES1
 | 
|---|
| 100 |  Q
 | 
|---|
| 101 |  ;
 | 
|---|
| 102 | 11 ;Report Entered and not just a stub rec for Img/PACS Check
 | 
|---|
| 103 |  I '$D(^RARPT(+$P(RAJ,"^",17),0)) G NORPT
 | 
|---|
| 104 |  ; since there's a rpt ptr, must check if the rpt is just a stub rpt
 | 
|---|
| 105 |  N RA17,RA0 ; use logic from RAREG
 | 
|---|
| 106 |  S RA17=+$P(RAJ,"^",17)
 | 
|---|
| 107 |  I $$STUB^RAEDCN1(RA17) G NORPT ; rpt is an image stub
 | 
|---|
| 108 |  Q
 | 
|---|
| 109 | NORPT ; either no report yet, or report is stub
 | 
|---|
| 110 |  K X S RAZ="report" X:$D(RAMES1) RAMES1
 | 
|---|
| 111 |  Q
 | 
|---|
| 112 |  ;
 | 
|---|
| 113 | 12 ;Report Verified Check
 | 
|---|
| 114 |  D 11:$P(RAS,"^",11)'="Y" I $D(^RARPT(+$P(RAJ,"^",17),0)),$P(^(0),"^",5)'="V" K X S RAZ="report verification" X:$D(RAMES1) RAMES1
 | 
|---|
| 115 |  Q
 | 
|---|
| 116 |  ;
 | 
|---|
| 117 | 16 ;Impression Entry Check
 | 
|---|
| 118 |  I $O(^RARPT(+$P(RAJ,"^",17),"I",0))'>0 K X S RAZ="impression" X:$D(RAMES1) RAMES1
 | 
|---|
| 119 |  Q
 | 
|---|
| 120 | 13 ;Procedure Modifers Check
 | 
|---|
| 121 |  I '$O(^RADPT(DA(2),"DT",DA(1),"P",DA,"M",0)) K X S RAX="procedure modifier" X:$D(RAMES1) RAMES1
 | 
|---|
| 122 |  Q
 | 
|---|
| 123 | 14 ;CPT Modifiers Check
 | 
|---|
| 124 |  I '$O(^RADPT(DA(2),"DT",DA(1),"P",DA,"CMOD",0)) K X S RAZ="CPT modifiers" X:$D(RAMES1) RAMES1
 | 
|---|
| 125 |  Q
 | 
|---|
| 126 |  ;
 | 
|---|
| 127 | HELP ; Called from 'Help Text' node in DD(70.03,3,4).
 | 
|---|
| 128 |  N E,RA
 | 
|---|
| 129 |  S RAJ=$G(^RADPT(DA(2),"DT",DA(1),"P",DA,0))
 | 
|---|
| 130 |  S RAIMGTYI=+$P($G(^RADPT(DA(2),"DT",DA(1),0)),U,2),RAIMGTYJ=$P($G(^RA(79.2,+RAIMGTYI,0)),U,1)
 | 
|---|
| 131 |  I RAIMGTYJ']"" W !,"ERROR:  Cannot determine imaging type of exam!" K FL,K,N,RAIMGTYI,RAIMGTYJ,RAS,RAJ Q
 | 
|---|
| 132 |  W !,"This exam meets the requirements for the following statuses:"
 | 
|---|
| 133 |  F K=0:0 S K=$O(^RA(72,"AA",RAIMGTYJ,K)) Q:K'>0  D
 | 
|---|
| 134 |  . S X="",E=+$O(^RA(72,"AA",RAIMGTYJ,K,0)) Q:E'>0
 | 
|---|
| 135 |  . I $D(^RA(72,E,0)) D
 | 
|---|
| 136 |  .. S RA(0)=$G(^RA(72,E,0)),N=$P(RA(0),U),RAS=$G(^RA(72,E,.1))
 | 
|---|
| 137 |  .. I $L(RAS) D HELP1 D:$D(X)&($P(RAS,"^",3)'="Y")&($D(^RA(72,"AA",RAIMGTYJ,9,E))) 3 I $D(X) W !?10,N S FL=""
 | 
|---|
| 138 |  .. Q
 | 
|---|
| 139 |  . Q
 | 
|---|
| 140 |  W:'$D(FL) !?10,"Does not meet the requirements of any status."
 | 
|---|
| 141 |  W ! K RAS,RAJ,N,K,FL,RAIMGTYI,RAIMGTYJ
 | 
|---|
| 142 |  Q
 | 
|---|
| 143 | HELP1 ; Called from 'HELP' above and 'STUFF^RASTREQ1'
 | 
|---|
| 144 |  ; 'RAJ' -> 0 node of the examination
 | 
|---|
| 145 |  ; 'E'   -> ien of the examination status
 | 
|---|
| 146 |  ; Both 'RAJ' & 'E' set in 'HELP' & 'STUFF^RASTREQ1'
 | 
|---|
| 147 |  N RADIO,RADIOUZD S RADIO=$S($G(^RA(72,E,.5))]"":$G(^(.5)),1:"N")
 | 
|---|
| 148 |  S:$P($G(^RA(79.2,+RAIMGTYI,0)),"^",5)="Y" RADIOUZD=""
 | 
|---|
| 149 |  F RAK=1:1 Q:$P(RAS,"^",RAK,99)']""  D:$P(RAS,"^",RAK)="Y" @RAK
 | 
|---|
| 150 |  I $D(X),$P(RAS,"^",3)'="Y",$D(^RA(72,"AA",RAIMGTYJ,9,E)) D 3
 | 
|---|
| 151 |  I $D(X),$P(RAS,"^",16)'="Y",$D(^RA(72,"AA",RAIMGTYJ,9,E)),$D(^RA(79,+$P(^RADPT(DA(2),"DT",DA(1),0),"^",3),.1)),$P(^(.1),"^",16)="Y" D 16
 | 
|---|
| 152 |  I $D(RADIOUZD),($D(X)) D
 | 
|---|
| 153 |  . D EN1^RASTREQN(RADIO,RAJ)
 | 
|---|
| 154 |  . I $D(X),($$UP^XLFSTR($P($G(^RA(72,E,.6)),"^",11)="Y")) D EN1^RADOSTIK(RADFN,RADTI,RACNI)
 | 
|---|
| 155 |  . Q
 | 
|---|
| 156 |  Q
 | 
|---|