1 | MAGDIR9A ;WOIFO/PMK - Read a DICOM image file ; 09 Feb 2006 7:38 AM
|
---|
2 | ;;3.0;IMAGING;**11,30,51,46**;16-February-2007;;Build 1023
|
---|
3 | ;; Per VHA Directive 2004-038, this routine should not be modified.
|
---|
4 | ;; +---------------------------------------------------------------+
|
---|
5 | ;; | Property of the US Government. |
|
---|
6 | ;; | No permission to copy or redistribute this software is given. |
|
---|
7 | ;; | Use of unreleased versions of this software requires the user |
|
---|
8 | ;; | to execute a written test agreement with the VistA Imaging |
|
---|
9 | ;; | Development Office of the Department of Veterans Affairs, |
|
---|
10 | ;; | telephone (301) 734-0100. |
|
---|
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 | ;
|
---|
19 | ; M2MB server
|
---|
20 | ;
|
---|
21 | ; This routine creates a ^mag(2005) group entry and links it to the
|
---|
22 | ; associated radiology report
|
---|
23 | ;
|
---|
24 | ; XXXXXX XX XXXXXX
|
---|
25 | ; XX XX XXXX XX XX
|
---|
26 | ; XX XX XX XX XX XX
|
---|
27 | ; XXXXX XX XX XX XX
|
---|
28 | ; XX XX XXXXXX XX XX
|
---|
29 | ; XX XX XX XX XX XX
|
---|
30 | ; XXX XX XX XX XXXXXX
|
---|
31 | ;
|
---|
32 | GROUP() ; entry point from ^MAGDIR81
|
---|
33 | N ACQDEVP ;-- pointer to acquisition device file (#2006.04)
|
---|
34 | N DA ;------ fileman variable
|
---|
35 | N ERRCODE ;- error trap code
|
---|
36 | N GROUP ;--- array to pass group data to ^MAGGTIA
|
---|
37 | N GROUPDFN ; DFN value from image group entry for double checking
|
---|
38 | N P ;-------- scratch variable (pointer to ACQUISITION DEVICE file)
|
---|
39 | N RACNE ;--- external "3rd level" subscript in ^RADPT
|
---|
40 | N RACNI ;--- internal "3rd level" subscript in ^RADPT
|
---|
41 | N RADFN ;--- radiology package's DFN
|
---|
42 | N RADTE ;--- external "2nd level" subscript in ^RADPT
|
---|
43 | N RADTI ;--- internal "2nd level" subscript in ^RADPT
|
---|
44 | N RARPT ;--- 1st level node in ^RARPT for report (ie, the ien)
|
---|
45 | N RARPT3 ;-- 3rd level node for 2005 multiple under ^RARPT's report
|
---|
46 | N RARPTDFN ; DFN value from ^RARPT for double checking
|
---|
47 | N SOPCLASP ; pointer to SOP Class file (#2006.532)
|
---|
48 | N HIT,ISPECIDX,X,Y ; scratch variables
|
---|
49 | ;
|
---|
50 | S ERRCODE=""
|
---|
51 | ;
|
---|
52 | S (RADFN,DA(2))=DFN ; patient DFN variables
|
---|
53 | S RADTI=RADATA("RADPT2") ; case subscript
|
---|
54 | I RADTI="" D Q ERRCODE
|
---|
55 | . K MSG
|
---|
56 | . S MSG(1)="No radiology case number specified for patient "_DFN
|
---|
57 | . D ERROR^MAGDIRVE($T(+0),"DICOM IMAGE PROCESSING ERROR",.MSG)
|
---|
58 | . S ERRCODE=-301
|
---|
59 | . Q
|
---|
60 | ;
|
---|
61 | S RADTE=$TR(RADATA("RADPT2"),"0123456789","9876543210")
|
---|
62 | S RACNI=RADATA("RADPT3")
|
---|
63 | S RACNE=$S(CASENUMB["-":$P(CASENUMB,"-",2),1:CASENUMB) ; short case #
|
---|
64 | ;
|
---|
65 | ; check for the existence of the entry in ^RADPT (redundant)
|
---|
66 | I '$D(^RADPT(RADFN,"DT",RADTI,0)) D Q ERRCODE ; can't process further
|
---|
67 | . K MSG
|
---|
68 | . S MSG(1)="Radiology case "_RADTI_" is not in ^RADPT("_RADFN_")"
|
---|
69 | . D ERROR^MAGDIRVE($T(+0),"DICOM IMAGE PROCESSING ERROR",.MSG)
|
---|
70 | . S ERRCODE=-302
|
---|
71 | . Q
|
---|
72 | ;
|
---|
73 | ; check for the existence of the report pointer
|
---|
74 | S RARPT=$P($G(^RADPT(RADFN,"DT",RADTI,"P",RACNI,0)),"^",17)
|
---|
75 | ; if the report does not yet exist, create it
|
---|
76 | D:RARPT=""
|
---|
77 | . N RACN
|
---|
78 | . S RACN=RACNE D CREATE^RARIC ; create the report
|
---|
79 | . Q
|
---|
80 | ;
|
---|
81 | ; If RARPT is no longer defined at this point, this means
|
---|
82 | ; that we're dealing with an old study, and the report has
|
---|
83 | ; been archived and purged.
|
---|
84 | ;
|
---|
85 | I '$G(RARPT) D Q ERRCODE
|
---|
86 | . K MSG
|
---|
87 | . S MSG(1)="IMAGE GROUP CREATION ERROR:"
|
---|
88 | . S MSG(2)="Radiology Report has been archived and purged."
|
---|
89 | . S MSG(3)="Patient "_$G(RADFN)_", Date "_$G(RADTI)_", Case "_$G(RACNI)
|
---|
90 | . D ERROR^MAGDIRVE($T(+0),"DICOM IMAGE PROCESSING ERROR",.MSG)
|
---|
91 | . S ERRCODE=-303
|
---|
92 | . Q
|
---|
93 | ;
|
---|
94 | ; double check the DFN value from ^RARPT to make sure its right
|
---|
95 | S RARPTDFN=$P($G(^RARPT(RARPT,0)),"^",2)
|
---|
96 | I RARPTDFN'=DFN D Q ERRCODE ; fatal error
|
---|
97 | . D RADMISS^MAGDIRVE($T(+0),DFN,RARPT,RARPTDFN)
|
---|
98 | . S ERRCODE=-304
|
---|
99 | . Q
|
---|
100 | ;
|
---|
101 | ; initialize FILEDATA for GROUP and IMAGE
|
---|
102 | ; get the acquisition device pointer (file 2005, field 107)
|
---|
103 | S ACQDEVP=$$ACQDEV^MAGDFCNV(MFGR,MODEL,INSTLOC)
|
---|
104 | S FILEDATA("ACQUISITION DEVICE")=ACQDEVP
|
---|
105 | ; get the SOP Class pointer (file 2005, field 251)
|
---|
106 | S SOPCLASP=$O(^MAG(2006.532,"B",SOPCLASS,""))
|
---|
107 | S FILEDATA("SOP CLASS POINTER")=SOPCLASP
|
---|
108 | ;
|
---|
109 | S FILEDATA("MODALITY")=MODALITY
|
---|
110 | S FILEDATA("PARENT FILE")=74
|
---|
111 | S FILEDATA("PARENT IEN")=RARPT
|
---|
112 | S FILEDATA("RAD REPORT")=RARPT
|
---|
113 | S FILEDATA("RAD PROC PTR")=RADATA("PROCIEN")
|
---|
114 | S FILEDATA("PACKAGE")="RAD"
|
---|
115 | S X=$S(MODALITY="NM":"NUCLEAR MEDICINE",1:"RADIOLOGY")
|
---|
116 | S ISPECIDX=$O(^MAG(2005.84,"B",X,""))
|
---|
117 | S X=$$FIELD43^MAGXMA(MODALITY,ISPECIDX,.Y)
|
---|
118 | S FILEDATA("PROC/EVENT")=$S(X=0:Y,1:"")
|
---|
119 | S FILEDATA("SPEC/SUBSPEC")=ISPECIDX
|
---|
120 | ;
|
---|
121 | ; find the corresponding image group node under the report
|
---|
122 | S (HIT,RARPT3)=0
|
---|
123 | F S RARPT3=$O(^RARPT(RARPT,2005,RARPT3)) Q:'RARPT3 D Q:HIT Q:ERRCODE
|
---|
124 | . S MAGGP=+$G(^RARPT(RARPT,2005,RARPT3,0)) ; get imaging group pointer
|
---|
125 | . S GROUPDFN=$P($G(^MAG(2005,MAGGP,0)),"^",7) ; check image DFN value
|
---|
126 | . I GROUPDFN'=DFN D ; fatal error
|
---|
127 | . . D MISMATCH^MAGDIRVE($T(+0),DFN,MAGGP)
|
---|
128 | . . S ERRCODE=-305
|
---|
129 | . . Q
|
---|
130 | . E I $P($G(^MAG(2005,MAGGP,0)),"^",6)=11 D
|
---|
131 | . . ; check to see that this group is for the same SOP Class
|
---|
132 | . . S P=$P($G(^MAG(2005,MAGGP,"SOP")),"^",1)
|
---|
133 | . . S HIT=$$EQUIVGRP^MAGDFCNV(P,SOPCLASP) ; equivalent groups?
|
---|
134 | . . Q
|
---|
135 | . Q
|
---|
136 | ;
|
---|
137 | I ERRCODE Q ERRCODE ; fatal image DFN problem
|
---|
138 | ;
|
---|
139 | I 'HIT D Q:ERRCODE ERRCODE ; the 2005 node does not yet exist
|
---|
140 | . ; create the radiology imaging group
|
---|
141 | . N PROCEDUR,RADRPT,RADPTR
|
---|
142 | . S PROCEDUR="RAD "_FILEDATA("MODALITY")
|
---|
143 | . S RADRPT=FILEDATA("RAD REPORT")
|
---|
144 | . S RADPTR=FILEDATA("RAD PROC PTR")
|
---|
145 | . D NEWGROUP(PROCEDUR,RADRPT,RADPTR) Q:ERRCODE
|
---|
146 | . ;
|
---|
147 | . ; store the cross-reference for the report
|
---|
148 | . D PTR^RARIC
|
---|
149 | . Q
|
---|
150 | ;
|
---|
151 | I 'MAGGP D Q ERRCODE ; fatal error
|
---|
152 | . K MSG
|
---|
153 | . S MSG(1)="IMAGE GROUP LOOKUP ERROR:"
|
---|
154 | . S MSG(2)="Looking for 2005 cross reference in ^RARPT("_RARPT_")"
|
---|
155 | . D ERROR^MAGDIRVE($T(+0),"DICOM IMAGE PROCESSING ERROR",.MSG)
|
---|
156 | . S ERRCODE=-308
|
---|
157 | . Q
|
---|
158 | Q 0
|
---|
159 | ;
|
---|
160 | NEWGROUP(PROCEDUR,RADRPT,RADPTR) ; create an imaging group (called by ^MAGDIR9E)
|
---|
161 | K GROUP
|
---|
162 | S GROUP(1)=".01^"_PNAMEVAH_" "_DCMPID_" "_PROCDESC
|
---|
163 | S GROUP(2)="3^11" ; Object Type -- XRAY Group
|
---|
164 | S GROUP(3)="5^"_DFN
|
---|
165 | S GROUP(4)="6^"_PROCEDUR
|
---|
166 | S GROUP(5)="2005.04^0"
|
---|
167 | S GROUP(6)="10^"_PROCDESC
|
---|
168 | S GROUP(7)="15^"_DATETIME
|
---|
169 | S GROUP(8)="16^"_FILEDATA("PARENT FILE")
|
---|
170 | S GROUP(9)="17^"_FILEDATA("PARENT IEN")
|
---|
171 | S GROUP(10)="60^"_STUDYUID
|
---|
172 | ;
|
---|
173 | ; the following two fields are only for radiology
|
---|
174 | I $D(RADRPT) S GROUP(11)="61^"_RADRPT
|
---|
175 | I $D(RADPTR) S GROUP(12)="62^"_RADPTR
|
---|
176 | ;
|
---|
177 | S GROUP(13)=".05^"_INSTLOC
|
---|
178 | S GROUP(14)="40^"_FILEDATA("PACKAGE")
|
---|
179 | S GROUP(15)="41^"_$O(^MAG(2005.82,"B","CLIN",""))
|
---|
180 | S GROUP(16)="42^"_FILEDATA("TYPE")
|
---|
181 | S GROUP(17)="43^"_FILEDATA("PROC/EVENT")
|
---|
182 | S GROUP(18)="44^"_FILEDATA("SPEC/SUBSPEC")
|
---|
183 | S GROUP(19)="107^"_FILEDATA("ACQUISITION DEVICE")
|
---|
184 | S GROUP(20)="251^"_FILEDATA("SOP CLASS POINTER")
|
---|
185 | D ADD^MAGGTIA(.RETURN,.GROUP)
|
---|
186 | S MAGGP=+RETURN
|
---|
187 | I 'MAGGP D Q ; fatal error
|
---|
188 | . K MSG
|
---|
189 | . S MSG(1)="IMAGE GROUP CREATION ERROR:"
|
---|
190 | . S MSG(2)=$P(RETURN,"^",2,999)
|
---|
191 | . D BADERROR^MAGDIRVE($T(+0),"DICOM IMAGE PROCESSING ERROR",.MSG)
|
---|
192 | . S ERRCODE=-306
|
---|
193 | . Q
|
---|
194 | ;
|
---|
195 | I MAGGP<LASTIMG D Q ; fatal last image pointer error
|
---|
196 | . D GROUPPTR^MAGDIRVE($T(+0),MAGGP,LASTIMG)
|
---|
197 | . S ERRCODE=-307
|
---|
198 | . Q
|
---|
199 | Q
|
---|
200 | ;
|
---|