1 | RA84PRE ;Hines OI/GJC - Pre-init Driver, patch 84 ;01/05/06 06:32
|
---|
2 | ;;5.0;Radiology/Nuclear Medicine;**84**;Mar 16, 1998;Build 13
|
---|
3 | ;
|
---|
4 | EN ; entry point for the pre-install logic
|
---|
5 | ;
|
---|
6 | ;Integration Agreements
|
---|
7 | ;----------------------
|
---|
8 | ;CREIXN^DDMOD(2916); DELIX^DDMOD(2916); $$FIND1^DIC(2051); UPDATE^DIE(2053); ^DIK(10013)
|
---|
9 | ;$$GET1^DIQ(2056); GETS^DIQ(2056); $$FMADD^XLFDT(10103); XMD(10070); BMES^XPDUTL(10141)
|
---|
10 | ;$$KSP^XUPARAM(2541); $$CREATE^XUSAP(4677)
|
---|
11 | ;
|
---|
12 | ;check to see if the following condition: RA*5.0*56 is not installed & BEFORE DELETION REPORT
|
---|
13 | ;STATUS (DD:74.01; Fld: 4) exists is true. If so, delete the BEFORE DELETION REPORT STATUS
|
---|
14 | ;field from the ACTIVITY LOG sub-file (exported accidentally; no data to be concerned with)
|
---|
15 | I '($$PATCH^XPDUTL("RA*5.0*56")),($D(^DD(74.01,4,0)))#2 D
|
---|
16 | .N %,DA,DIC,DIK,X,Y
|
---|
17 | .S DIK="^DD(74.01,",DA(1)=74.01,DA=4
|
---|
18 | .D ^DIK Q
|
---|
19 | ;
|
---|
20 | N DIERR,RAAPU,RAERR,RAFAC,RAFDA,RAFLD,RAFLG,RAFMC,RAIEN,RAOPT,RARY,RATXT,RAX,RAY,RAZ
|
---|
21 | S RAAPU="RADIOLOGY,OUTSIDE SERVICE",RAFMC="",RAOPT="RA OVERALL"
|
---|
22 | ;
|
---|
23 | ;I RAY>0 then the APU record was created; RAY will be the IEN of the new record.
|
---|
24 | ;I RAY=0 then the proxy user record existed prior to calling $$CREATE^XUSAP.
|
---|
25 | ;I RAY=-1 then the function failed to create the proxy user record.
|
---|
26 | S RAY=+$$CREATE^XUSAP(RAAPU,RAFMC,RAOPT)
|
---|
27 | ;
|
---|
28 | I RAY>0 S RAIEN=RAY,RATXT(1)="'"_RAAPU_"' has been created as an Application Proxy User."
|
---|
29 | ;
|
---|
30 | ;RAY=-1: The function failed to create the proxy user record; abort the install.
|
---|
31 | I RAY=-1 S XPDABORT=1 D
|
---|
32 | .S RATXT(1)="Error: '"_RAAPU_"' has not been created as an Application"
|
---|
33 | .S RATXT(2)="Proxy User. '"_RAAPU_"' must be unique"
|
---|
34 | .S RATXT(3)="and used within the scope of the VistA Radiology teleradiology"
|
---|
35 | .S RATXT(4)="initiative. Installation of RA*5.0*84 has been aborted until this"
|
---|
36 | .S RATXT(5)="Application Proxy User record can be created."
|
---|
37 | .Q
|
---|
38 | ;
|
---|
39 | ;RAY=0: The proxy user record existed prior to the function call. Is the proxy record
|
---|
40 | ;secure? If the proxy record is not secure abort the install.
|
---|
41 | I RAY=0 D
|
---|
42 | .;determine the IEN of 'RADIOLOGY,OUTSIDE SERVICE' in file 200...
|
---|
43 | .S RAIEN=$$FIND1^DIC(200,"","X","RADIOLOGY,OUTSIDE SERVICE","B") Q:RAIEN=0
|
---|
44 | .D GETS^DIQ(200,RAIEN_",","2;3;11;201","I","RARY") S RAFLD=""
|
---|
45 | .;Are there any NEW PERSON fields defined that jeopardize the security of this record?
|
---|
46 | .F S RAFLD=$O(RARY(200,RAIEN,RAFLD)) Q:RAFLD="" I $L($G(RARY(200,RAIEN,RAFLD,"I"))) S XPDABORT=1 Q
|
---|
47 | .I $G(XPDABORT)=1 D
|
---|
48 | ..S RATXT(1)="Error: '"_RAAPU_"' is not a secure application proxy user"
|
---|
49 | ..S RATXT(2)="record. Please revisit the definition of this type of user record."
|
---|
50 | ..S RATXT(3)=""
|
---|
51 | ..S RATXT(4)="Installation of RA*5.0*84 has been aborted until this Application Proxy"
|
---|
52 | ..S RATXT(5)="User record can be created."
|
---|
53 | ..Q
|
---|
54 | .Q
|
---|
55 | D BMES^XPDUTL(.RATXT)
|
---|
56 | Q:$G(XPDABORT)=1 K RATXT
|
---|
57 | ;
|
---|
58 | ;Add 'S' as a RAD/NUC MED CLASSIFICATION to the 'RADIOLOGY,OUTSIDE SERVICE' NEW PERSON file
|
---|
59 | ;record. Assign 'RADIOLOGY,OUTSIDE SERVICE' a PERSON CLASS.
|
---|
60 | ;permitted by IA 5077
|
---|
61 | I RAY'<0,(RAIEN>0) D
|
---|
62 | .K RARY S RAZ=RAIEN
|
---|
63 | .D GETS^DIQ(200,RAIEN_",","72*","I","RARY")
|
---|
64 | .I ($D(RARY)\10)=0 D ;'S' not added in the past; add now (missing "B" xref makes this tricky)
|
---|
65 | ..K DIERR,RAERR,RAFDA,RARY
|
---|
66 | ..S RAIEN="?+1,"_RAIEN_","
|
---|
67 | ..S RAFDA(200.072,RAIEN,.01)="S"
|
---|
68 | ..D UPDATE^DIE("","RAFDA","","RAERR")
|
---|
69 | ..;
|
---|
70 | ..;if error inform the user, proceed with filing PERSON CLASS
|
---|
71 | ..I ($D(RAERR("DIERR"))#2) S RAX="RAD/NUC MED CLASSIFICATION" D ERR
|
---|
72 | ..Q
|
---|
73 | .;
|
---|
74 | .;find the DIAGNOSTIC RADIOLOGY record in the PERSON CLASS (#8932.1) file.
|
---|
75 | .K DIERR,RAERR,RAFDA
|
---|
76 | .S RAPCLASS=$$PCLKUP() ;note workload encounter errors if the lookup fails
|
---|
77 | .I +RAPCLASS'>0 D Q
|
---|
78 | ..;cannot find desired record; inform the user & do not execute the PERSON CLASS update
|
---|
79 | ..S:+RAPCLASS=0 RATXT(1)="PERSON CLASS value DIAGNOSTIC RADIOLOGY' not found."
|
---|
80 | ..S:+RAPCLASS=-1 RATXT(1)="PERSON CLASS lookup error: "_$P(RAPCLASS,U,2)
|
---|
81 | ..S RATXT(2)="Encounter based workload calculations will fail until a PERSON CLASS is assigned."
|
---|
82 | ..D BMES^XPDUTL(.RATXT) K RATXT
|
---|
83 | ..Q
|
---|
84 | .;
|
---|
85 | .;file the PERSON CLASS value into PERSON CLASS sub-file: 200.05 IA 5077
|
---|
86 | .K DIERR,RAERR,RAFDA,RAY S RAIEN=RAZ
|
---|
87 | .S RAIEN="?+1,"_RAIEN_","
|
---|
88 | .S RAFDA(200.05,RAIEN,.01)=RAPCLASS
|
---|
89 | .S RAFDA(200.05,RAIEN,2)=$$FMADD^XLFDT(DT,-1,0,0,0) ;T-1 to make sure we work today!
|
---|
90 | .D UPDATE^DIE("","RAFDA","","RAERR")
|
---|
91 | .;
|
---|
92 | .;if error inform the user, proceed with install
|
---|
93 | .I ($D(RAERR("DIERR"))#2) S RAX="PERSON CLASS" D ERR
|
---|
94 | .Q
|
---|
95 | K DIERR,RAERR,RAFDA,RAY
|
---|
96 | ;
|
---|
97 | ;check to see if the facility has records within the 999-1003 IEN range within the
|
---|
98 | ;DIAGNOSTIC CODES (#78.3) file. If there are records with these IENs proceed with
|
---|
99 | ;the install but:
|
---|
100 | ;1) DO NOT alter (change pointers) the data in the DIAGNOSTIC CODES file at the facility
|
---|
101 | ;2) Send an email to an Outlook mail group identifying the facility where the
|
---|
102 | ; conflict occur.
|
---|
103 | ;If the IENs in this range are record free add them to the facilities' local DIAGNOSTIC CODES
|
---|
104 | ;file. RAFLG=1 when there is an existing record in the the IEN range of 999-1003
|
---|
105 | S RAFLG=0 F RAIEN=999:1:1003 I ($D(^RA(78.3,RAIEN,0))#2) S RAFLG=1 Q
|
---|
106 | ;
|
---|
107 | ;if RAFLG=1 send the email to the Outlook mail group
|
---|
108 | I RAFLG=1 D
|
---|
109 | .S RAFAC=$$GET1^DIQ(4,+$$KSP^XUPARAM("INST"),.01)
|
---|
110 | .N XMDUN,XMDUZ,XMSUB,XMTEXT,XMY,XMZ S XMDUZ=.5
|
---|
111 | .S RATXT(1)=RAFAC_" has a conflict with national teleradiology codes"
|
---|
112 | .S RATXT(2)="diagnostic codes occupying IENS: 999-1003 in file 78.3."
|
---|
113 | .S XMSUB="DIAGNOSTIC CODES file IEN issue @ "_RAFAC,XMTEXT="RATXT("
|
---|
114 | .S XMY("VAOITVHITRadiologyFacilityLevelApplicationIssues@va.gov")=""
|
---|
115 | .NEW DIFROM
|
---|
116 | .D ^XMD,BMES^XPDUTL(.RATXT)
|
---|
117 | .Q
|
---|
118 | ;If no IEN conflict, add the nationally defined teleradiology diagnostic codes...
|
---|
119 | E D ;do-if RAFLG=0
|
---|
120 | .K RARY S RARY(999)="TELERADIOLOGY, NOT YET DICTATED^^N^n"
|
---|
121 | .S RARY(1000)="NO ALERT REQUIRED^^N^n"
|
---|
122 | .S RARY(1001)="SIGNIFICANT ABNORMALITY, ATTN NEEDED^^Y^y"
|
---|
123 | .S RARY(1002)="CRITICAL ABNORMALITY^^Y^y"
|
---|
124 | .S RARY(1003)="POSSIBLE MALIGNANCY^^Y^y",RAIEN=""
|
---|
125 | .F S RAIEN=$O(RARY(RAIEN)) Q:RAIEN="" D
|
---|
126 | ..S RAFDA(78.3,"+1,",.01)=$P(RARY(RAIEN),U,1)
|
---|
127 | ..S RAFDA(78.3,"+1,",3)=$P(RARY(RAIEN),U,3)
|
---|
128 | ..S RAFDA(78.3,"+1,",4)=$P(RARY(RAIEN),U,4)
|
---|
129 | ..S RAIEN(1)=RAIEN D UPDATE^DIE("","RAFDA","RAIEN","RAERR")
|
---|
130 | ..I $D(RAERR)#2 D
|
---|
131 | ...S RATXT(1)="",RATXT(2)="Error adding "_$P(RARY(RAIEN),U,1)_" to the"
|
---|
132 | ...S RATXT(3)="local DIAGNOSTIC CODES file #78.3." D BMES^XPDUTL(.RATXT)
|
---|
133 | ...Q
|
---|
134 | ..Q
|
---|
135 | .Q
|
---|
136 | ;
|
---|
137 | D XREF
|
---|
138 | Q
|
---|
139 | ;
|
---|
140 | XREF ;REGARDLESS OF WHETHER FILE 78.3 HAS BEEN UPDATED, delete the traditional cross-reference
|
---|
141 | ;definition on the PRIMARY DIAGNOSTIC CODE (70.03,13) field. Params: sub-DD, field #,
|
---|
142 | ;cross-reference number, flag ('K' kills "AD"), array containing information about recompiled
|
---|
143 | ;templates &/or xrefs, error array dialog (if any)
|
---|
144 | ;
|
---|
145 | ;First check if the 'New Style' cross-reference is in place. If it is, quit this function now!
|
---|
146 | ;If in error, make sure the error is documented and proceed with the install of RA*5.0*84.
|
---|
147 | ;
|
---|
148 | N RAERR,RAVALUE,RAY S RAVALUE(1)=70,RAVALUE(2)="AD"
|
---|
149 | ;Note: "BB" (5th subscript) is the FILE & NAME cross-reference index in the INDEX (#.11) file.
|
---|
150 | S RAY=$$FIND1^DIC(.11,"","O",.RAVALUE,"BB","","RAERR")
|
---|
151 | I ($D(RAERR("DIERR")))#2 K RATXT D Q
|
---|
152 | .S RATXT(1)=$G(RAERR("DIERR",1,"TEXT",1),"Error finding the 'New Style' ""AD"" cross-reference.")
|
---|
153 | .D BMES^XPDUTL(.RATXT) K RATXT Q
|
---|
154 | ;
|
---|
155 | I RAY K RATXT D Q
|
---|
156 | .S RATXT(1)="The 'New Style' PRIMARY DIAGNOSTIC CODE (70.03, #13) ""AD"" cross-reference"
|
---|
157 | .S RATXT(2)="is currently in existence." D BMES^XPDUTL(.RATXT) K RATXT Q
|
---|
158 | ;
|
---|
159 | K DIERR,RAERR,RAFDA,RAIEN,RATXT
|
---|
160 | N I,RAI,RAMOWIC,RAX S RAY=0
|
---|
161 | ;find the old cross-reference to delete; set RAY to the record number of the cross-reference
|
---|
162 | F S RAY=$O(^DD(70.03,13,1,RAY)) Q:'RAY Q:$G(^DD(70.03,13,1,RAY,0))="70^AD^MUMPS"
|
---|
163 | ;RAY="" if there is no traditional "AD" cross-reference to delete, BUT make sure the
|
---|
164 | ;new style "AD" cross-reference is created ('D NS').
|
---|
165 | I RAY="" D NS Q
|
---|
166 | D DELIX^DDMOD(70.03,13,RAY,"K","RAMOWIC","RAERR")
|
---|
167 | S I=0 F RAX="DDAUD","DIEZ","DIKZ" D
|
---|
168 | .I ($D(RAMOWIC(RAX)))#2 D
|
---|
169 | ..S I=I+1,RATXT(I)=""
|
---|
170 | ..S:RAX="DDAUD" RATXT(I)="DD AUDIT (#.6) updated"
|
---|
171 | ..S:RAX="DIKZ" RATXT(I)="Cross-references re-compiled in namespace: "_$G(RAMOWIC(RAX)) QUIT
|
---|
172 | ..I RAX="DIEZ" S RAI=0 F S RAI=$O(RAMOWIC(RAX,RAI)) Q:'RAI D
|
---|
173 | ...S I=I+1,RATXT(I)="Input Template re-compiled: "_$G(RAMOWIC(RAX,RAI))
|
---|
174 | ...Q
|
---|
175 | ..Q
|
---|
176 | .Q
|
---|
177 | ;
|
---|
178 | ;Note: RAERR("DIERR") will only be defined if an error occurred...
|
---|
179 | I ($D(RAERR("DIERR")))#2 D S XPDABORT=1
|
---|
180 | .S I=I+1,RATXT(I)="",I=I+1
|
---|
181 | .S RATXT(I)="Error deleting the PRIMARY DIAGNOSTIC CODE (70.03,13) cross-reference."
|
---|
182 | .S I=I+1,RATXT(I)="Contact the national VistA Radiology development team."
|
---|
183 | .Q
|
---|
184 | D:$O(RATXT(0)) BMES^XPDUTL(.RATXT)
|
---|
185 | ;
|
---|
186 | ;if there is an error in deleting the old cross-reference stop the install of the patch.
|
---|
187 | Q:$G(XPDABORT)=1
|
---|
188 | ;
|
---|
189 | NS ;Create the new-style cross-reference on the PRIMARY DIAGNOSTIC CODE (70.03,13) field.
|
---|
190 | ;This cross-reference will be named the same as the prior cross-reference, "AD", but
|
---|
191 | ;the SET & KILL logic will change. This new style cross-reference will be stored in the
|
---|
192 | ;INDEX (#.11) file.
|
---|
193 | N I,J,RAMOWIC,RARSLT,RAXREF K DIERR,RAERR,RATXT
|
---|
194 | S RAXREF("FILE")=70,RAXREF("TYPE")="MU",RAXREF("NAME")="AD"
|
---|
195 | S RAXREF("EXECUTION")="F",RAXREF("ROOT FILE")=70.03,RAXREF("USE")="S"
|
---|
196 | S RAXREF("ACTIVITY")="IR"
|
---|
197 | S RAXREF("SHORT DESCR")="The 'AD' is used to mark cases eligible for the Abnormal Report option."
|
---|
198 | S RAXREF("DESCR",1)="If the diagnostic code record in the radiology DIAGNOSTIC CODES (#78.3)"
|
---|
199 | S RAXREF("DESCR",2)="has the data attribute for field: PRINT ON ABNORMAL REPORT (#3) set to"
|
---|
200 | S RAXREF("DESCR",3)="'Y' (yes) then the ""AD"" cross-reference will be set for this exam record"
|
---|
201 | S RAXREF("DESCR",4)="to indicate that this case should be identified on the Abnormal Report."
|
---|
202 | S RAXREF("DESCR",5)=""
|
---|
203 | S RAXREF("DESCR",6)="NOTE: When this field is edited the DIAGNOSTIC PRINT DATE (#20) field is"
|
---|
204 | S RAXREF("DESCR",7)="deleted!",RAXREF("VAL",1)=13
|
---|
205 | S RAXREF("KILL CONDITION")="S:X1(1)'="""" X=1"
|
---|
206 | S RAXREF("KILL")="D:($D(X1(1))#2) PRIDXIXK^RADD2(.DA,X1(1))"
|
---|
207 | S RAXREF("SET CONDITION")="S:X2(1)'="""" X=1"
|
---|
208 | S RAXREF("SET")="S:$P($G(^RA(78.3,X2(1),0)),U,3)=""Y"" ^RADPT(""AD"",X2(1),DA(2),DA(1),DA)="""""
|
---|
209 | S RAXREF("WHOLE KILL")="K ^RADPT(""AD"")"
|
---|
210 | ;
|
---|
211 | D CREIXN^DDMOD(.RAXREF,"",.RARSLT,"RAMOWIC","RAERR") S I=1,RATXT(I)="",I=I+1
|
---|
212 | ;
|
---|
213 | S RATXT(I)="The '"_$P(RARSLT,U,2)_"' cross-reference was"_$S(RARSLT="":" not",1:"")_" successfully created."
|
---|
214 | ;
|
---|
215 | F J="DIEZ","DIKZ" D
|
---|
216 | .I J="DIEZ",($O(RAMOWIC("DIEZ",0))) D
|
---|
217 | ..N J1 S J1=0
|
---|
218 | ..F S J1=$O(RAMOWIC("DIEZ",J1)) Q:'J1 D
|
---|
219 | ...S I=I+1,RATXT(I)="Input template: "_$P($G(RAMOWIC("DIEZ",J1)),U)_" was re-compiled."
|
---|
220 | ...Q
|
---|
221 | ..Q
|
---|
222 | .;
|
---|
223 | .I J="DIKZ",$G(RAMOWIC("DIKZ"))'="" D
|
---|
224 | ..S I=I+1,RATXT(I)="Cross-reference re-compiled in namespace: "_$G(RAMOWIC("DIKZ"))
|
---|
225 | ..Q
|
---|
226 | .Q
|
---|
227 | ;
|
---|
228 | I ($D(RAERR("DIERR")))#2 D S XPDABORT=1
|
---|
229 | .S I=I+1,RATXT(I)="",I=I+1
|
---|
230 | .S RATXT(I)="Error deleting the PRIMARY DIAGNOSTIC CODE (70.03,13) cross-reference."
|
---|
231 | .S I=I+1,RATXT(I)="Contact the national VistA Radiology development team."
|
---|
232 | .Q
|
---|
233 | D:$O(RATXT(0)) BMES^XPDUTL(.RATXT)
|
---|
234 | Q
|
---|
235 | ;
|
---|
236 | PCLKUP() ;PERSON CLASS lookup screened by INACTIVATED field on file 8932.1
|
---|
237 | ;If successful return the IEN.
|
---|
238 | ;If the lookup fails (without error) the function returns 0
|
---|
239 | ;If the lookup fails (with error) the function returns null w/error dialog
|
---|
240 | ; Ex: RAERR("DIERR","1","TEXT",1)="The input value contains control characters."
|
---|
241 | ; If error I'll return: -1^error dialog
|
---|
242 | N RAXEC S RAXEC="N RADT S RADT=$P(^(0),U,5) I $S('RADT:1,RADT>DT:1,1:0)"
|
---|
243 | S RASULT=$$FIND1^DIC(8932.1,"","X","V183002","F","X RAXEC","RAERR") ;"V183002"
|
---|
244 | Q $S(($D(RAERR("DIERR"))#2):"-1^"_$G(RAERR("DIERR","1","TEXT",1)),1:RASULT)
|
---|
245 | ;
|
---|
246 | ERR ;display the error text associated with our failed event
|
---|
247 | ;input: RAX exists globally the attribute that was not filed Ex: RAD/NUC MED CLASSIFICATION
|
---|
248 | ; RAERR("DIERR") exists globally
|
---|
249 | K RATXT N RACNT,RAI,RAJ S RATXT(1)="APU record error when filing "_RAX_" data"
|
---|
250 | S RAI=0,RACNT=1
|
---|
251 | F S RAI=$O(RAERR("DIERR",RAI)) Q:RAI'>0 S RACNT=RACNT+1,RATXT(RACNT)="" D
|
---|
252 | .S RAJ=0 F S RAJ=$O(RAERR("DIERR",RAI,"TEXT",RAJ)) Q:RAJ'>0 D
|
---|
253 | ..Q:$G(RAERR("DIERR",RAI,"TEXT",RAJ))=""
|
---|
254 | ..S RACNT=RACNT+1,RATXT(RACNT)=$G(RAERR("DIERR",RAI,"TEXT",RAJ))
|
---|
255 | ..Q
|
---|
256 | .Q
|
---|
257 | D BMES^XPDUTL(.RATXT) K RATXT
|
---|
258 | Q
|
---|
259 | ;
|
---|