1 | PXRMEXIC ; SLC/PKR/PJH - Routines to install repository entry components. ;09/21/2004
|
---|
2 | ;;2.0;CLINICAL REMINDERS;;Feb 04, 2005
|
---|
3 | ;=================================================
|
---|
4 | FILE(PXRMRIEN,EXISTS,IND120,JND120,ACTION,ATTR,NAMECHG) ;Read and process a
|
---|
5 | ;file entry in repository entry PXRMRIEN. IND120 and JND120 are the
|
---|
6 | ;indexes for the component list. ACTION is one of the possible actions.
|
---|
7 | I ACTION="S" Q
|
---|
8 | N DATA,FDA,FDAEND,FDASTART,FIELD,FILENUM
|
---|
9 | N IEN,IENS,IENREND,IENROOT,IENRSTR,IND,INDICES
|
---|
10 | N LINE,MSG,NEW01,PXNAT,PXRMEDOK,PXRMEXCH
|
---|
11 | N SITEIEN,SRCIEN,TEMP,TFDA,TNAME,TOPFNUM,VERSN
|
---|
12 | N WPLCNT,WPTMP
|
---|
13 | ;Set PXRMEDOK so files pointing to sponsors can be installed.
|
---|
14 | ;Set PXRMEXCH so national entries can be installed and prevent
|
---|
15 | ;execution of the input transform for custom logic fields.
|
---|
16 | ;Set PXNAT to allow installation of national (those starting with VA-)
|
---|
17 | ;PCE items.
|
---|
18 | S (PXNAT,PXRMEDOK,PXRMEXCH)=1
|
---|
19 | S TEMP=^PXD(811.8,PXRMRIEN,120,IND120,1,JND120,0)
|
---|
20 | S FDASTART=+$P(TEMP,U,2)
|
---|
21 | S FDAEND=+$P(TEMP,U,3)
|
---|
22 | S IENRSTR=+$P(TEMP,U,4)
|
---|
23 | S IENREND=+$P(TEMP,U,5)
|
---|
24 | F IND=FDASTART:1:FDAEND D
|
---|
25 | . S LINE=^PXD(811.8,PXRMRIEN,100,IND,0)
|
---|
26 | . S INDICES=$P(LINE,"~",1)
|
---|
27 | . S DATA=$P(LINE,"~",2)
|
---|
28 | . S FILENUM=$P(INDICES,";",1)
|
---|
29 | . S IENS=$P(INDICES,";",2)
|
---|
30 | . I IND=START S SRCIEN=+IENS
|
---|
31 | . S FIELD=$P(INDICES,";",3)
|
---|
32 | . I LINE["WP-start" D
|
---|
33 | .. S DATA="WPTMP("_IND_","_+FIELD_")"
|
---|
34 | .. S WPLCNT=$P(LINE,"~",3)
|
---|
35 | .. D WORDPROC(PXRMRIEN,.WPTMP,IND,+FIELD,.IND,WPLCNT)
|
---|
36 | . I (IND=START)&((FIELD=.01)!(FIELD=.001)) D
|
---|
37 | ..;Save the top level file number.
|
---|
38 | .. S TOPFNUM=FILENUM
|
---|
39 | ..;If the action is copy let FileMan determine where to put it.
|
---|
40 | .. I ACTION="C" S IENROOT(SRCIEN)=$S($G(PXRMLOWX)=1:$$LOIEN^PXRMEXU5(FILENUM),1:"")
|
---|
41 | ..;
|
---|
42 | ..;If the action is install try to install at the source ien. If
|
---|
43 | ..;an entry already exists at the source ien let FileMan determine
|
---|
44 | ..;where to put it.
|
---|
45 | .. I ACTION="I" D
|
---|
46 | ... S SITEIEN=+$$FIND1^DIC(FILENUM,"","Q","`"_SRCIEN)
|
---|
47 | ... I SITEIEN>0 S IENROOT(SRCIEN)=""
|
---|
48 | ... E S IENROOT(SRCIEN)=$S($G(PXRMLOWX)=1:$$LOIEN^PXRMEXU5(FILENUM),1:SRCIEN)
|
---|
49 | ..;
|
---|
50 | ..;If the action is merge or overwrite get the existing ien.
|
---|
51 | .. I (ACTION="M")!(ACTION="O") D
|
---|
52 | ... S SITEIEN=$$EXISTS^PXRMEXIU(FILENUM,DATA)
|
---|
53 | ... S IENROOT(SRCIEN)=""
|
---|
54 | .;
|
---|
55 | . S FDA(FILENUM,IENS,FIELD)=DATA
|
---|
56 | ;
|
---|
57 | ;Initialize the edit history.
|
---|
58 | D INIEH(TOPFNUM,IENS,.FDA,.WPTMP)
|
---|
59 | ;Build the IENROOT
|
---|
60 | F IND=IENRSTR:1:IENREND D
|
---|
61 | . I IND=0 Q
|
---|
62 | . S TEMP=^PXD(811.8,PXRMRIEN,100,IND,0)
|
---|
63 | . S IENROOT($P(TEMP,U,1))=$P(TEMP,U,2)
|
---|
64 | ;Check for name changes, i.e., the copy action.
|
---|
65 | D NAMECHG(.FDA,.NAMECHG,TOPFNUM)
|
---|
66 | ;Special handling for file 801.41
|
---|
67 | I TOPFNUM=801.41 D Q:PXRMDONE
|
---|
68 | . I ACTION="M" D MERGE^PXRMEXU5(801.41,EXISTS,"15;18*",.FDA,.IENROOT)
|
---|
69 | . D DLG^PXRMEXU4(.FDA,.NAMECHG)
|
---|
70 | ;
|
---|
71 | ;Special handling for file 810.9
|
---|
72 | I TOPFNUM=810.9 D LOC^PXRMEXU0(.FDA)
|
---|
73 | ;
|
---|
74 | ;If the file number is 811.4 the user must have programmer
|
---|
75 | ;access to install it.
|
---|
76 | I (TOPFNUM=811.4)&(DUZ(0)'="@") D Q
|
---|
77 | . W !,"Only programmers can install Reminder Computed Findings."
|
---|
78 | ;
|
---|
79 | ;Special handling for file 811.5.
|
---|
80 | I TOPFNUM=811.5 D Q:'$D(FDA)
|
---|
81 | .;If the site has any findings already mapped merge them in.
|
---|
82 | . I ACTION="M" D MERGE^PXRMEXU5(811.5,EXISTS,"20*",.FDA,.IENROOT)
|
---|
83 | . D TERM^PXRMEXIU(.FDA,.NAMECHG)
|
---|
84 | ;
|
---|
85 | ;Special handling for file 811.9.
|
---|
86 | I TOPFNUM=811.9 D
|
---|
87 | .;Don't execute the input transform for custom logic fields.
|
---|
88 | . S PXRMEXCH=1
|
---|
89 | . D DEF^PXRMEXIU(.FDA,.NAMECHG)
|
---|
90 | ;If FDA is not defined at this point the user has opted to abort
|
---|
91 | ;the install.
|
---|
92 | I '$D(FDA) Q
|
---|
93 | ;
|
---|
94 | ;Special handling for file 9999999.64.
|
---|
95 | I TOPFNUM=9999999.64 D
|
---|
96 | . D HF^PXRMEXIU(.FDA,.NAMECHG)
|
---|
97 | ;
|
---|
98 | ;If the action is merge oroverwrite do a test install before deleting
|
---|
99 | ;the original entry.
|
---|
100 | I (ACTION="M")!(ACTION="O") D
|
---|
101 | .;Make the .01 unique for the test install.
|
---|
102 | . S IENS=$O(FDA(TOPFNUM,""))
|
---|
103 | .;Get the length of the .01 field
|
---|
104 | . D FIELD^DID(TOPFNUM,.01,"","FIELD LENGTH","ATTR")
|
---|
105 | . S TNAME="tmp"_$E(FDA(TOPFNUM,IENS,.01),1,ATTR("FIELD LENGTH")-3)
|
---|
106 | .;Make sure the test entry does not already exist.
|
---|
107 | . D DELALL^PXRMEXFI(TOPFNUM,TNAME)
|
---|
108 | . K ^TMP($J,"TFDA") M ^TMP($J,"TFDA")=FDA K FDA
|
---|
109 | . K TFDA M TFDA=^TMP($J,"TFDA")
|
---|
110 | . S TFDA(TOPFNUM,IENS,.01)=TNAME
|
---|
111 | . D UPDATE^DIE("E","TFDA","IENROOT","MSG")
|
---|
112 | . I $D(MSG) D
|
---|
113 | .. W !,"The update failed, UPDATE^DIE returned the following error message:"
|
---|
114 | .. D AWRITE^PXRMUTIL("MSG")
|
---|
115 | .. W !!,ATTR("FILE NAME")," entry ",$G(ATTR("PT01"))," did not get installed!"
|
---|
116 | .. W !,"Examine the above error message for the reason.",!
|
---|
117 | .. H 2
|
---|
118 | . I '$D(MSG) K TFDA M FDA=^TMP($J,"TFDA")
|
---|
119 | . K ^TMP($J,"TFDA")
|
---|
120 | .;Delete the test entry.
|
---|
121 | . D DELALL^PXRMEXFI(TOPFNUM,TNAME)
|
---|
122 | .;If the original update worked put the entry at its original ien.
|
---|
123 | ;Install the FDA.
|
---|
124 | I '$D(MSG) D
|
---|
125 | .;Delete the existing entry.
|
---|
126 | . I (ACTION="M")!(ACTION="O") D
|
---|
127 | .. D DELETE^PXRMEXFI(TOPFNUM,SITEIEN)
|
---|
128 | .. S IENROOT(SRCIEN)=SITEIEN
|
---|
129 | . I $D(PXRMCLAS) D SCLASS^PXRMEXU5(TOPFNUM,PXRMCLAS,.FDA)
|
---|
130 | . D UPDATE^DIE("E","FDA","IENROOT","MSG")
|
---|
131 | . I $D(MSG) D
|
---|
132 | .. W !,"The update failed, UPDATE^DIE returned the following error message:"
|
---|
133 | .. D AWRITE^PXRMUTIL("MSG")
|
---|
134 | .. W !!,ATTR("FILE NAME")," entry ",$G(ATTR("PT01"))," did not get installed!"
|
---|
135 | .. W !,"Examine the above error message for the reason.",!
|
---|
136 | .. H 2
|
---|
137 | S VERSN=$$GETTAGV^PXRMEXU3(^PXD(811.8,PXRMRIEN,100,3,0),"<PACKAGE_VERSION>")
|
---|
138 | I TOPFNUM=811.9,VERSN=1.5 D
|
---|
139 | . N IEN,PXRMEXCH,X
|
---|
140 | . S IEN=IENROOT(SRCIEN)
|
---|
141 | .;For reminder definitions build the found/not found text counts.
|
---|
142 | . D SFNFTC^PXRMEXU0(IEN)
|
---|
143 | .;Build the internal logic and finding strings.
|
---|
144 | . S X=$G(^PXD(811.9,IEN,30))
|
---|
145 | . I X'="" D CPPCLS^PXRMLOGX(IEN,X)
|
---|
146 | . S X=$G(^PXD(811.9,IEN,34))
|
---|
147 | . I X'="" D CPRESLS^PXRMLOGX(IEN,X)
|
---|
148 | . D BLDALL^PXRMLOGX(IEN,"","")
|
---|
149 | Q
|
---|
150 | ;
|
---|
151 | ;=================================================
|
---|
152 | INIEH(FILENUM,IENS,FDA,WPTMP) ;If the file is a clinical reminder file and
|
---|
153 | ;it has an edit history initialize the history.
|
---|
154 | I (FILENUM<800)!(FILENUM>811.9) Q
|
---|
155 | ;
|
---|
156 | N IENS,SFN,TARGET,WP
|
---|
157 | D FIELD^DID(FILENUM,"EDIT HISTORY","","SPECIFIER","TARGET")
|
---|
158 | S SFN=+$G(TARGET("SPECIFIER"))
|
---|
159 | I SFN=0 Q
|
---|
160 | S IENS=$O(FDA(SFN,""))
|
---|
161 | I IENS="" Q
|
---|
162 | S FDA(SFN,IENS,.01)=$$FMTE^XLFDT($$NOW^XLFDT,"5Z")
|
---|
163 | S FDA(SFN,IENS,1)=$$GET1^DIQ(200,DUZ,.01)
|
---|
164 | ;The word-processing field is set when the packing is done.
|
---|
165 | S WP=FDA(SFN,IENS,2)
|
---|
166 | K @WP
|
---|
167 | S @WP@(1)="Exchange Install"
|
---|
168 | Q
|
---|
169 | ;
|
---|
170 | ;=================================================
|
---|
171 | NAMECHG(FDA,NAMECHG,FILENUM) ;If this component has been copied to a new
|
---|
172 | ;name make the change.
|
---|
173 | N CLASS,IENS,PT01
|
---|
174 | S IENS=$O(FDA(FILENUM,""))
|
---|
175 | S PT01=FDA(FILENUM,IENS,.01)
|
---|
176 | I $D(NAMECHG(FILENUM,PT01)) D
|
---|
177 | . S FDA(FILENUM,IENS,.01)=NAMECHG(FILENUM,PT01)
|
---|
178 | . I (FILENUM<801.41)!(FILENUM>811.9) Q
|
---|
179 | .;Once a component has been copied CLASS can no longer be national.
|
---|
180 | . S CLASS=$G(FDA(FILENUM,IENS,100))
|
---|
181 | . I CLASS["N" S FDA(FILENUM,IENS,100)="LOCAL"
|
---|
182 | .;The Sponsor is also removed.
|
---|
183 | . K FDA(FILENUM,IENS,101)
|
---|
184 | Q
|
---|
185 | ;
|
---|
186 | ;=================================================
|
---|
187 | RTNLD(PXRMRIEN,START,END,ATTR,RTN) ;Load a routine from the repository into
|
---|
188 | ;the array RTN.
|
---|
189 | N IND,LINE,LN,ROUTINE
|
---|
190 | S LINE=^PXD(811.8,PXRMRIEN,100,START,0)
|
---|
191 | S ROUTINE=$P(LINE,";",1)
|
---|
192 | S ROUTINE=$TR(ROUTINE," ","")
|
---|
193 | S ATTR("FILE NUMBER")=0
|
---|
194 | S ATTR("NAME")=$P(LINE,";",1)
|
---|
195 | S ATTR("NAME")=$TR(ATTR("NAME")," ","")
|
---|
196 | S ATTR("MIN FIELD LENGTH")=3
|
---|
197 | S ATTR("FIELD LENGTH")=8
|
---|
198 | S LN=0
|
---|
199 | F IND=START:1:END D
|
---|
200 | . S LN=LN+1
|
---|
201 | . S LINE=^PXD(811.8,PXRMRIEN,100,IND,0)
|
---|
202 | . S RTN(LN,0)=LINE
|
---|
203 | Q
|
---|
204 | ;
|
---|
205 | ;=================================================
|
---|
206 | RTNSAVE(RTN,NAME) ;Save the routine loaded in RTN to the name
|
---|
207 | ;found in NAMECHG.
|
---|
208 | N DIE,XCN
|
---|
209 | ;%ZOSF("SAVE") requires a global.
|
---|
210 | K ^TMP($J,"PXRMRTN")
|
---|
211 | S DIE="^TMP($J,""PXRMRTN"","
|
---|
212 | M ^TMP($J,"PXRMRTN")=RTN
|
---|
213 | S XCN=0
|
---|
214 | S X=NAME
|
---|
215 | X ^%ZOSF("SAVE")
|
---|
216 | K ^TMP($J,"PXRMRTN")
|
---|
217 | Q
|
---|
218 | ;
|
---|
219 | ;=================================================
|
---|
220 | WORDPROC(PXRMRIEN,WPTMP,I1,I2,IND,WPLCNT) ;Load WPTMP with the word
|
---|
221 | ;processing field.
|
---|
222 | N I3
|
---|
223 | F I3=1:1:WPLCNT D
|
---|
224 | . S IND=IND+1
|
---|
225 | . S WPTMP(I1,I2,I3)=$G(^PXD(811.8,PXRMRIEN,100,IND,0))
|
---|
226 | Q
|
---|
227 | ;
|
---|