| 1 | MAGGTRAI ;WOIFO/GEK - list images for Radiology report ; [ 11/08/2001 17:18 ] | 
|---|
| 2 | ;;3.0;IMAGING;**8**;Sep 15, 2004 | 
|---|
| 3 | ;; +---------------------------------------------------------------+ | 
|---|
| 4 | ;; | Property of the US Government.                                | | 
|---|
| 5 | ;; | No permission to copy or redistribute this software is given. | | 
|---|
| 6 | ;; | Use of unreleased versions of this software requires the user | | 
|---|
| 7 | ;; | to execute a written test agreement with the VistA Imaging    | | 
|---|
| 8 | ;; | Development Office of the Department of Veterans Affairs,     | | 
|---|
| 9 | ;; | telephone (301) 734-0100.                                     | | 
|---|
| 10 | ;; |                                                               | | 
|---|
| 11 | ;; | The Food and Drug Administration classifies this software as  | | 
|---|
| 12 | ;; | a medical device.  As such, it may not be changed in any way. | | 
|---|
| 13 | ;; | Modifications to this software may result in an adulterated   | | 
|---|
| 14 | ;; | medical device under 21CFR820, the use of which is considered | | 
|---|
| 15 | ;; | to be a violation of US Federal Statutes.                     | | 
|---|
| 16 | ;; +---------------------------------------------------------------+ | 
|---|
| 17 | ;; | 
|---|
| 18 | Q | 
|---|
| 19 | IMAGE(MAGZRY,DATA) ;RPC [MAGGRADIMAGE] | 
|---|
| 20 | ; Call from selected entry in Rad Exam list. | 
|---|
| 21 | ;  INPUT is DATA, which is just what we sent in the list of Rad | 
|---|
| 22 | ;     Exams for the patient. | 
|---|
| 23 | ;DATA is the Radiology values stored in ^TMP($J,"RAEX",x) | 
|---|
| 24 | ;  that the radiology procedure RAPTLU sets during the search | 
|---|
| 25 | ;  for patient exams.  (see routine RAPTLU ) | 
|---|
| 26 | ;      ^TMP($J,"RAEX",RACNT)= | 
|---|
| 27 | ;     RADFN_"^"_RADTI_"^"_RACNI_"^"_RANME_"^"_RASSN_"^" | 
|---|
| 28 | ;     _RADATE_"^"_RADTE_"^"_RACN_"^"_RAPRC_"^"_RARPT_"^"_RAST | 
|---|
| 29 | ; | 
|---|
| 30 | S MAGZRY=$NA(^TMP("MAGGTRAI",$J)) | 
|---|
| 31 | K @MAGZRY | 
|---|
| 32 | IF $$NEWERR^%ZTER N $ETRAP,$ESTACK S $ETRAP="D ERRA^MAGGTERR" | 
|---|
| 33 | E  S X="ERRA^MAGGTERR",@^%ZOSF("TRAP") | 
|---|
| 34 | N I,Y,CT,MAGIEN | 
|---|
| 35 | ; | 
|---|
| 36 | S DATA=$P(DATA,"^",7,99) | 
|---|
| 37 | S CT=0 | 
|---|
| 38 | F I="RADFN","RADTI","RACNI","RANME","RASSN","RADATE","RADTE","RACN","RAPRC","RARPT","RAST" S CT=CT+1,@I=$P(DATA,"^",CT) | 
|---|
| 39 | ; Patch 2.0.5 next few lines for Patient Safety | 
|---|
| 40 | I RARPT["PMRAD" S @MAGZRY@(0)="-2^Patient Mismatch. Radiology Files" Q | 
|---|
| 41 | I 'RARPT S @MAGZRY@(0)="0^No Report for selected exam." Q | 
|---|
| 42 | I '$O(^RARPT(RARPT,2005,0)) S @MAGZRY@(0)="0^No Images for selected exam." Q | 
|---|
| 43 | I $P($G(^RARPT(RARPT,0)),U,2)'=RADFN S @MAGZRY@(0)="-2^Patient Mismatch. Radiology Files" Q | 
|---|
| 44 | D GETLIST | 
|---|
| 45 | Q | 
|---|
| 46 | IMAGEC(MAGZRY,DATA) ;RPC [MAGG CPRS RAD EXAM] | 
|---|
| 47 | ; Call to list Images for a Rad Exam that was selected from CPRS | 
|---|
| 48 | ; and Imaging Window was notified via windows messaging | 
|---|
| 49 | ;   INPUT :  DATA is in format of Windows message received from CPRS | 
|---|
| 50 | ;    example   'RPT^CPRS^29027^RA^i79029185.9998-1' | 
|---|
| 51 | N DFN,RARPT,ENT,INVDTTM,INVDT,INVTM | 
|---|
| 52 | S X=$$RTRNFMT^XWBLIB("GLOBAL ARRAY",1) | 
|---|
| 53 | S MAGZRY=$NA(^TMP("MAGGTRAI",$J)) | 
|---|
| 54 | K @MAGZRY | 
|---|
| 55 | S DFN=$P(DATA,U,3) | 
|---|
| 56 | S ENT=$P($P(DATA,U,5),"-",2) | 
|---|
| 57 | S INVDTTM=$P($P(DATA,U,5),"-",1) | 
|---|
| 58 | S INVDT=$P(INVDTTM,".",1) | 
|---|
| 59 | S INVTM=$P(INVDTTM,".",2) | 
|---|
| 60 | F  Q:($L(INVDT)<8)  S INVDT=$E(INVDT,2,$L(INVDT)) | 
|---|
| 61 | S INVDTTM=INVDT_"."_INVTM | 
|---|
| 62 | I '$D(^RADPT(DFN,"DT",INVDTTM,"P",ENT,0)) S @MAGZRY@(0)="0^INVALID Data : Attempt to access Exam failed." Q | 
|---|
| 63 | ;   Get out the Naked reference . | 
|---|
| 64 | S RARPT=$P(^RADPT(DFN,"DT",INVDTTM,"P",ENT,0),U,17) | 
|---|
| 65 | ;S RARPT=$P(^(0),U,17) | 
|---|
| 66 | I 'RARPT S @MAGZRY@(0)="0^No Report for selected Exam" Q | 
|---|
| 67 | ; MAGQI 8/22/01 | 
|---|
| 68 | I $P($G(^RARPT(RARPT,0)),U,2)'=DFN S @MAGZRY@(0)="-2^Patient Mismatch. Radiology File" Q | 
|---|
| 69 | D GETLIST | 
|---|
| 70 | N XINFO | 
|---|
| 71 | S XINFO=$P(^RARPT(RARPT,0),U,1) | 
|---|
| 72 | S X=$P(^RADPT(DFN,"DT",INVDTTM,"P",ENT,0),U,2) | 
|---|
| 73 | S XINFO=XINFO_"  "_$P(^RAMIS(71,X,0),U) | 
|---|
| 74 | S X=$P(^RARPT(RARPT,0),U,3) | 
|---|
| 75 | S XINFO=XINFO_"  "_X | 
|---|
| 76 | S $P(@MAGZRY@(0),U,3)=RARPT | 
|---|
| 77 | S $P(@MAGZRY@(0),U,4)=XINFO | 
|---|
| 78 | Q | 
|---|
| 79 | GETLIST ; Private call. From other points in this routine, when RARPT is defined | 
|---|
| 80 | ; and returns a list in MAGZRY(1..n). | 
|---|
| 81 | ; We'll make a tmp list of just the image IEN's | 
|---|
| 82 | ;  splitting groups into individual image entries. | 
|---|
| 83 | ; If more than 1 Image group points to this report, we | 
|---|
| 84 | ;  will prefix the Image Description with (G1), (G2) etc | 
|---|
| 85 | ; We call GROUP^MAGGTIG to get the images for the group, this call | 
|---|
| 86 | ;  sorts the images in Dicom Series, Dicom Image number order. | 
|---|
| 87 | ; | 
|---|
| 88 | K ^TMP("MAGGX",$J) | 
|---|
| 89 | N OI,IGCT,MAGIEN1,ORDCT,GCT,MAGQI,MAGX | 
|---|
| 90 | S (ORDCT,GCT,SINGCT)=0 | 
|---|
| 91 | S IGCT=+$P($G(^RARPT(RARPT,2005,0)),U,4) | 
|---|
| 92 | ; Quit if no images for RARPT | 
|---|
| 93 | I IGCT=0 S @MAGZRY@(0)="0^0 Images for Radiology Report." Q | 
|---|
| 94 | ; | 
|---|
| 95 | ; Check all Image entries in RARPT 2005 NODE. for Patient match Pointer match, from both | 
|---|
| 96 | ;   RARPT end, and Imaging end. | 
|---|
| 97 | S MAGQI=1 | 
|---|
| 98 | S OI=0,CT=1 F  S OI=$O(^RARPT(RARPT,2005,OI)) Q:'OI  D  Q:(MAGQI<1) | 
|---|
| 99 | . S MAGIEN1=$P(^RARPT(RARPT,2005,OI,0),U) | 
|---|
| 100 | . ; Assure magdfn = rarpt dfn | 
|---|
| 101 | . I $P($G(^RARPT(RARPT,0)),U,2)'=$P($G(^MAG(2005,MAGIEN1,0)),U,7) S MAGQI="-2^Patient Mismatch. Radiology Report" Q | 
|---|
| 102 | . ; Assure magien1 is pointing to this rarpt | 
|---|
| 103 | . I $P($G(^MAG(2005,MAGIEN1,2)),U,7)'=RARPT S MAGQI="-2^Pointer Mismatch. Radiology Report" Q | 
|---|
| 104 | . ; Now run the Imaging integrity check | 
|---|
| 105 | . D CHK^MAGGSQI(.MAGX,MAGIEN1) I 'MAGX(0) S MAGQI="-2^"_$P(MAGX(0),U,2,99) Q | 
|---|
| 106 | ; | 
|---|
| 107 | I MAGQI<1 S @MAGZRY@(0)=MAGQI Q | 
|---|
| 108 | S CT=0 | 
|---|
| 109 | ; | 
|---|
| 110 | S OI=0,CT=1 F  S OI=$O(^RARPT(RARPT,2005,OI)) Q:'OI  D | 
|---|
| 111 | . S MAGIEN1=$P(^RARPT(RARPT,2005,OI,0),U) D ONELIST | 
|---|
| 112 | ; | 
|---|
| 113 | ; Now get the list from the TMP LIST and return it. | 
|---|
| 114 | I '$D(^TMP("MAGGX",$J)) S @MAGZRY@(0)="0^Report "_RARPT_": has INVALID Image Pointers" Q | 
|---|
| 115 | S CT=0 | 
|---|
| 116 | S MAGQUIET=1 | 
|---|
| 117 | S I="",J="",K="" | 
|---|
| 118 | F  S I=$O(^TMP("MAGGX",$J,I)) Q:I=""  D | 
|---|
| 119 | . S J="" | 
|---|
| 120 | . F  S J=$O(^TMP("MAGGX",$J,I,J)) Q:J=""  D | 
|---|
| 121 | . . S K="" | 
|---|
| 122 | . . F  S K=$O(^TMP("MAGGX",$J,I,J,K)) Q:K=""  D | 
|---|
| 123 | . . . S CT=CT+1 | 
|---|
| 124 | . . . S X="["_J_"]"_$P(^TMP("MAGGX",$J,I,J,K),U,8) | 
|---|
| 125 | . . . S $P(^TMP("MAGGX",$J,I,J,K),U,8)=X | 
|---|
| 126 | . . . S @MAGZRY@(CT)=^TMP("MAGGX",$J,I,J,K) | 
|---|
| 127 | K MAGQUIET | 
|---|
| 128 | S @MAGZRY@(0)=CT_"^Images for the selected Radiology Exam" | 
|---|
| 129 | ; Redesign needed for Multiple Image Groups pointing to an exam or note. | 
|---|
| 130 | ; we now put all images from all groups in one list. | 
|---|
| 131 | S $P(@MAGZRY@(0),U,5)=$G(MAGIEN1) ; this was last ien from multiple Image Groups. | 
|---|
| 132 | ; | 
|---|
| 133 | Q | 
|---|
| 134 | ONELIST ;        Private Call from other parts of this routine. | 
|---|
| 135 | N MAGTMP | 
|---|
| 136 | Q:'$D(^MAG(2005,MAGIEN1,0)) | 
|---|
| 137 | ; if a single image just get record for that IEN | 
|---|
| 138 | I '$O(^MAG(2005,MAGIEN1,1,0)) D  Q | 
|---|
| 139 | . S MAGXX=MAGIEN1 D INFO^MAGGTII | 
|---|
| 140 | . S ORDCT=ORDCT+1,SINGCT=SINGCT+1 | 
|---|
| 141 | . S ^TMP("MAGGX",$J,ORDCT,"S",SINGCT)="B2^"_MAGFILE | 
|---|
| 142 | D GROUP^MAGGTIG(.MAGTMP,MAGIEN1) I $P(@MAGTMP@(0),U,2)>0 D | 
|---|
| 143 | . S ORDCT=ORDCT+1,GCT=GCT+1,X="G"_GCT | 
|---|
| 144 | . K @MAGTMP@(0) | 
|---|
| 145 | . M ^TMP("MAGGX",$J,ORDCT,X)=@MAGTMP | 
|---|
| 146 | Q | 
|---|