| 1 | RAO7PC3 ;HISC/SWM&CRT-Procedure Call utilities. ;7/30/01  10:28
 | 
|---|
| 2 |  ;;5.0;Radiology/Nuclear Medicine;**16,26,27**;Mar 16, 1998
 | 
|---|
| 3 |  ;; api to return entire report (same as auto e-mail's)
 | 
|---|
| 4 | EN3(X) ; Return narrative text for exam(s)
 | 
|---|
| 5 |  ; Input:
 | 
|---|
| 6 |  ; X-> Exam id in one of two forms:
 | 
|---|
| 7 |  ;   1) Pat. DFN^inv. exam date^Case IEN
 | 
|---|
| 8 |  ;      Retrieves a single report for a single exam
 | 
|---|
| 9 |  ;   2) Pat. DFN^inv. exam date^
 | 
|---|
| 10 |  ;      Retrieves all reports for a set of exams ordered on one order
 | 
|---|
| 11 |  ;
 | 
|---|
| 12 |  ; Note:  Input delimiter can be any of the following: ^~\&;-
 | 
|---|
| 13 |  ;        a delimiter may be a single space i.e, " "
 | 
|---|
| 14 |  ;
 | 
|---|
| 15 |  ; Output:
 | 
|---|
| 16 |  ; ^TMP($J,"RAE3",Patient IEN,case IEN,procedure name)=report status^
 | 
|---|
| 17 |  ; abnormal alert^CPRS Order ien
 | 
|---|
| 18 |  ; ^TMP($J,"RAE3",Patient IEN,case IEN,procedure name,n)=line n of rpt
 | 
|---|
| 19 |  ; ^TMP($J,"RAE3",Patient IEN,"PRINT_SET")=null (IF this is a printset)
 | 
|---|
| 20 |  ; ^TMP($J,"RAE3",Patient IEN,"ORD")=name of ordered procedure for
 | 
|---|
| 21 |  ; examsets and printsets
 | 
|---|
| 22 |  ; ^TMP($J,"RAE3",Patient IEN,"ORD",case IEN)=name of ordered procedure
 | 
|---|
| 23 |  ; for that case; not part of an examset or printset
 | 
|---|
| 24 |  ;
 | 
|---|
| 25 |  ;
 | 
|---|
| 26 |  K ^TMP($J,"RAE3"),^TMP($J,"RA AUTOE")
 | 
|---|
| 27 |  K RAU S RAU=$$DEL^RAO7PC1(X) I RAU="" K RAU Q
 | 
|---|
| 28 |  Q:'$P(X,RAU)!('$P(X,RAU,2))  ; Quit if no Pat. DFN -or- no inv. exam DT
 | 
|---|
| 29 |  N RACIEN,RADFN,RAINVXDT,RAPSET,RAUTOE,Y S RAPSET=0
 | 
|---|
| 30 |  S RADFN=$P(X,RAU),RAINVXDT=$P(X,RAU,2),RACIEN=+$P(X,RAU,3)
 | 
|---|
| 31 |  K RAU Q:'($D(^RADPT(RADFN,"DT",RAINVXDT,0))#2)
 | 
|---|
| 32 |  I RACIEN D CASE(RACIEN) Q
 | 
|---|
| 33 |  S Y=0
 | 
|---|
| 34 |  F  S Y=$O(^RADPT(RADFN,"DT",RAINVXDT,"P",Y)) Q:Y'>0  D
 | 
|---|
| 35 |  . D CASE(Y) S RAPSET=0
 | 
|---|
| 36 |  . Q
 | 
|---|
| 37 |  Q
 | 
|---|
| 38 | EN30(RAOIFN) ; Return narrative text for exam(s).  
 | 
|---|
| 39 |  ; To be used with the EN3 entry point above.
 | 
|---|
| 40 |  ;
 | 
|---|
| 41 |  ; Input: RAOIFN -> the ien of Rad/Nuc Med Order
 | 
|---|
| 42 |  ;
 | 
|---|
| 43 |  Q:'RAOIFN  ; order passed in as 0 or null
 | 
|---|
| 44 |  Q:'$D(^RAO(75.1,RAOIFN,0))  ; no such order
 | 
|---|
| 45 |  Q:'$D(^RADPT("AO",RAOIFN))  ; no exam associated with this order
 | 
|---|
| 46 |  N RADFN,RADTI,RACNI,RAXSET
 | 
|---|
| 47 |  S RADFN=+$O(^RADPT("AO",RAOIFN,0)) Q:'RADFN
 | 
|---|
| 48 |  S RADTI=+$O(^RADPT("AO",RAOIFN,RADFN,0)) Q:'RADTI
 | 
|---|
| 49 |  S RAXSET=+$P($G(^RADPT(RADFN,"DT",RADTI,0)),"^",5) ; set if RAXSET=1
 | 
|---|
| 50 |  I RAXSET D EN3(RADFN_"^"_RADTI_"^") Q  ; exam set, hit EN3 code
 | 
|---|
| 51 |  ; the following code is executed for non-exam set examinations
 | 
|---|
| 52 |  S RACNI=+$O(^RADPT("AO",RAOIFN,RADFN,RADTI,0)) Q:'RACNI
 | 
|---|
| 53 |  D EN3(RADFN_"^"_RADTI_"^"_RACNI)
 | 
|---|
| 54 |  Q
 | 
|---|
| 55 | CASE(Y) ;
 | 
|---|
| 56 |  N N,RABNOR,RACASE,RACIEN,RADIAG,RAEXAM,RAINCLUD,RAOPRC,RAORD,BLANK
 | 
|---|
| 57 |  N RAMSG,RAPDIAG,RAPROC,RARDE,RARPT,RARPTST,RASPACE,SKIP,X,ZZRADFN,X0,X1,X2,RASIGVES
 | 
|---|
| 58 |  ;
 | 
|---|
| 59 |  S RACIEN=Y,$P(BLANK," ",80)=""
 | 
|---|
| 60 |  S RAEXAM(0)=$G(^RADPT(RADFN,"DT",RAINVXDT,"P",RACIEN,0)) Q:RAEXAM(0)']""
 | 
|---|
| 61 |  S RACASE=$P(RAEXAM(0),"^")
 | 
|---|
| 62 |  S:$P(RAEXAM(0),"^",25)=2 RAPSET=1
 | 
|---|
| 63 |  S:RAPSET=1 ^TMP($J,"RAE3",RADFN,"PRINT_SET")=""
 | 
|---|
| 64 |  S RAPROC(0)=$G(^RAMIS(71,+$P(RAEXAM(0),"^",2),0))
 | 
|---|
| 65 |  S RAPROC=$S($P(RAPROC(0),"^")]"":$P(RAPROC(0),"^"),1:"Unknown")
 | 
|---|
| 66 |  S RAORD(0)=$G(^RAO(75.1,+$P(RAEXAM(0),"^",11),0))
 | 
|---|
| 67 |  S RAORD(7)=$P(RAORD(0),"^",7)
 | 
|---|
| 68 |  S RAOPRC(0)=$G(^RAMIS(71,+$P(RAORD(0),"^",2),0))
 | 
|---|
| 69 |  S RAOPRC=$S($P(RAOPRC(0),"^")]"":$P(RAOPRC(0),"^"),1:"Unknown")
 | 
|---|
| 70 |  S RAPDIAG(0)=$G(^RA(78.3,+$P(RAEXAM(0),"^",13),0))
 | 
|---|
| 71 |  S RARPT=+$P(RAEXAM(0),"^",17)
 | 
|---|
| 72 |  S RARPT(0)=$G(^RARPT(RARPT,0)),RARPTST=$P(RARPT(0),"^",5)
 | 
|---|
| 73 |  S RASIGVES="" I RARPTST="V",$P(RARPT(0),U,10)]"",$P(RARPT(0),U,9)]"" S X2=RARPT,X1=$P(RARPT(0),U,9),X=$P(RARPT(0),U,10) D DE^XUSHSHP S:X]"" RASIGVES="/ES/"_X
 | 
|---|
| 74 |  S RARDE=$$GET1^DIQ(74,RARPT_",",8,"E")
 | 
|---|
| 75 |  ; View whole report if Rad User or status is R or V.
 | 
|---|
| 76 |  D CHKUSR^RAUTL2 S RAINCLUD=RAMSG
 | 
|---|
| 77 |  S RAINCLUD=$S(RAMSG:1,RARPTST="V":1,RARPTST="R":1,1:0)
 | 
|---|
| 78 |  S RABNOR=$$UP^XLFSTR($P(RAPDIAG(0),"^",4)) S:RABNOR'="Y" RABNOR=""
 | 
|---|
| 79 |  ;
 | 
|---|
| 80 |  I $P(RAEXAM(0),"^",25) S ^TMP($J,"RAE3",RADFN,"ORD")=RAOPRC
 | 
|---|
| 81 |  I '$P(RAEXAM(0),"^",25) S ^TMP($J,"RAE3",RADFN,"ORD",RACIEN)=RAOPRC
 | 
|---|
| 82 |  ;
 | 
|---|
| 83 |  I RAPSET'<0 D
 | 
|---|
| 84 |  .S ^TMP($J,"RAE3",RADFN,RACIEN,RAPROC)="^"_RABNOR_"^"_RAORD(7)
 | 
|---|
| 85 |  .S $P(^TMP($J,"RAE3",RADFN,RACIEN,RAPROC),"^")=$$RPTST
 | 
|---|
| 86 |  S:RAPSET<0 ^TMP($J,"RAE3",RADFN,RACIEN,RAPROC)=""
 | 
|---|
| 87 |  S:RAPSET=1 RAPSET=-1
 | 
|---|
| 88 |  ;
 | 
|---|
| 89 |  ; Setup variables then call ^RARTR to create Rad Report on ^TMP nodes
 | 
|---|
| 90 |  ; 2 stages: INIT^RARTR creates header info, PRT1^RARTR for the report
 | 
|---|
| 91 |  ; (save RADFN as RARTR kills it at the end)
 | 
|---|
| 92 |  ;
 | 
|---|
| 93 |  S RAUTOE=1,ZZRADFN=RADFN,RAACNT=0
 | 
|---|
| 94 |  S X="^"_RADFN_"^"_(9999999.9999-RAINVXDT)_"^"_RACASE_"^"_RARPTST
 | 
|---|
| 95 |  ;
 | 
|---|
| 96 |  D INIT^RARTR
 | 
|---|
| 97 |  S (RAFFLF,RAORIOF)=$G(IOF)
 | 
|---|
| 98 |  I RAY0<0!(RAY1<0)!(RAY2<0)!(RAY3<0) K RAFFLF Q
 | 
|---|
| 99 |  ;
 | 
|---|
| 100 |  S RAVERF=0
 | 
|---|
| 101 |  I $$RPTST="No Report" D
 | 
|---|
| 102 |  .S:'$D(RAMDIV) RAMDIV=+$P(^RADPT(RADFN,"DT",RAINVXDT,0),"^",3)
 | 
|---|
| 103 |  .S:'$D(RAMDV) RAMDV=$S($D(^RA(79,RAMDIV,.1)):^(.1),1:"")
 | 
|---|
| 104 |  D PRT1^RARTR
 | 
|---|
| 105 |  S RADFN=ZZRADFN
 | 
|---|
| 106 |  Q:'$D(^TMP($J,"RA AUTOE"))
 | 
|---|
| 107 |  ;
 | 
|---|
| 108 |  ; Now manipulate ^TMP($J,"RA AUTOE" and save as ^TMP($J,"RAE3"
 | 
|---|
| 109 |  ; Step 1: Change Case Number to Exam Date
 | 
|---|
| 110 |  ; Step 2: Remove Impression, Report & Diagnostic Codes if not
 | 
|---|
| 111 |  ;         Released or Verified
 | 
|---|
| 112 |  ;         Also remove "Att Phys" and "Pri Phys"
 | 
|---|
| 113 |  ; Step 3: Change Status to Report Status & add Reported Date
 | 
|---|
| 114 |  ; Step 4: If No Report then get Clin History from file #70.
 | 
|---|
| 115 |  ; ** WITH PATCH 27 - NO LONGER NEED TO DO STEP 4 **
 | 
|---|
| 116 |  ;
 | 
|---|
| 117 | STEP1 S ^TMP($J,"RAE3",RADFN,RACIEN,RAPROC,1)=$P(^TMP($J,"RA AUTOE",1),"Case: ")
 | 
|---|
| 118 |  S ^TMP($J,"RAE3",RADFN,RACIEN,RAPROC,1.5)="Exm Date: "_$$GET1^DIQ(70.02,RAINVXDT_","_RADFN_",",.01,"E")
 | 
|---|
| 119 |  ;
 | 
|---|
| 120 | STEP2 K SKIP S N=1 F  S N=$O(^TMP($J,"RA AUTOE",N)) Q:N=""  D
 | 
|---|
| 121 |  . S X0=^TMP($J,"RA AUTOE",N),X1=$E(X0,1,10)
 | 
|---|
| 122 |  . I (X1="Att Phys: ")!(X1="Pri Phys: ") D
 | 
|---|
| 123 |  .. S ^TMP($J,"RA AUTOE",N)=$E(BLANK,1,41)_$E(X0,42,$L(X0))
 | 
|---|
| 124 |  .. Q
 | 
|---|
| 125 |  .;I $$RPTST="No Report",($E(^TMP($J,"RA AUTOE",N),1,21)="    Clinical History:") D STEP4
 | 
|---|
| 126 |  .I $E(^TMP($J,"RA AUTOE",N),1,12)="    Report: " D STEP3 Q:$$RPTST="No Report"
 | 
|---|
| 127 |  .I 'RAINCLUD,$E(^TMP($J,"RA AUTOE",N),1,15)="    Impression:" D
 | 
|---|
| 128 |  ..S SKIP=1,^TMP($J,"RAE3",RADFN,RACIEN,RAPROC,N+0.1)=""
 | 
|---|
| 129 |  .I 'RAINCLUD,$E(^TMP($J,"RA AUTOE",N),1,28)="    Primary Diagnostic Code:" D
 | 
|---|
| 130 |  ..S SKIP=1 S ^TMP($J,"RA AUTOE",N)=$E(^TMP($J,"RA AUTOE",N),1,28)
 | 
|---|
| 131 |  .I 'RAINCLUD,$E(^TMP($J,"RA AUTOE",N),1,31)="    Secondary Diagnostic Codes:" D
 | 
|---|
| 132 |  ..S SKIP=1,^TMP($J,"RAE3",RADFN,RACIEN,RAPROC,N+0.1)=""
 | 
|---|
| 133 |  .I $E(^TMP($J,"RA AUTOE",N),1,27)="Primary Interpreting Staff:" K SKIP
 | 
|---|
| 134 |  .I $D(SKIP) S SKIP=SKIP+1
 | 
|---|
| 135 |  .I $G(SKIP)<3 S ^TMP($J,"RAE3",RADFN,RACIEN,RAPROC,N)=^TMP($J,"RA AUTOE",N)
 | 
|---|
| 136 |  .Q
 | 
|---|
| 137 |  ;
 | 
|---|
| 138 | XIT K ^TMP($J,"RA AUTOE")
 | 
|---|
| 139 |  Q
 | 
|---|
| 140 |  ;
 | 
|---|
| 141 | STEP3 S ^TMP($J,"RAE3",RADFN,RACIEN,RAPROC,N-0.4)="    Report Status: "_$$RPTST
 | 
|---|
| 142 |  I $$RPTST="No Report" S N="^" Q
 | 
|---|
| 143 |  S $P(RASPACE," ",46)=""
 | 
|---|
| 144 |  S ^TMP($J,"RAE3",RADFN,RACIEN,RAPROC,N-0.4)=^(N-0.4)_$E(RASPACE,1,46-$L(^(N-0.4)))_"Date Reported: "_RARDE
 | 
|---|
| 145 |  I RARPTST="V" D
 | 
|---|
| 146 |  . S ^TMP($J,"RAE3",RADFN,RACIEN,RAPROC,N-0.3)=RASPACE_" Date Verified: "_$P($$GET1^DIQ(74,+$P(RAEXAM(0),"^",17),7),"@")
 | 
|---|
| 147 |  . S ^TMP($J,"RAE3",RADFN,RACIEN,RAPROC,N-0.2)="    Verifier E-Sig:"_RASIGVES
 | 
|---|
| 148 |  . Q
 | 
|---|
| 149 |  S ^TMP($J,"RAE3",RADFN,RACIEN,RAPROC,N-0.1)=""
 | 
|---|
| 150 |  S ^TMP($J,"RA AUTOE",N)="    Report:"
 | 
|---|
| 151 |  I 'RAINCLUD S SKIP=1,^TMP($J,"RAE3",RADFN,RACIEN,RAPROC,N+0.1)=""
 | 
|---|
| 152 |  Q
 | 
|---|
| 153 |  ;
 | 
|---|
| 154 | STEP4 I +$O(^RADPT(RADFN,"DT",RAINVXDT,"P",RACIEN,"H",0)) D
 | 
|---|
| 155 |  .N RAI,RAIN,Z S (RAI,Z)=0,RAIN=N_".000"
 | 
|---|
| 156 |  .F  S Z=$O(^RADPT(RADFN,"DT",RAINVXDT,"P",RACIEN,"H",Z)) Q:Z'>0  D
 | 
|---|
| 157 |  ..S RAI=RAI+1
 | 
|---|
| 158 |  ..S RAIN=$E(RAIN,1,$L(RAIN)-$L(RAI))_RAI
 | 
|---|
| 159 |  ..S ^TMP($J,"RAE3",RADFN,RACIEN,RAPROC,RAIN)="      "_$G(^RADPT(RADFN,"DT",RAINVXDT,"P",RACIEN,"H",Z,0))
 | 
|---|
| 160 |  Q
 | 
|---|
| 161 |  ;
 | 
|---|
| 162 | RPTST() ; Return Full Report Status
 | 
|---|
| 163 |  Q $S(RARPTST="V":"Verified",RARPTST="R":"Released/Not Verified",RARPTST="D":"Draft",RARPTST="PD":"Problem Draft",1:"No Report")
 | 
|---|
| 164 |  ;
 | 
|---|