1 | TMGNDF3C ;TMG/kst/FDA Import: Create DRUG entries ;03/25/06
|
---|
2 | ;;1.0;TMG-LIB;**1**;11/21/06
|
---|
3 |
|
---|
4 | ;" FDA - NATIONAL DRUG FILES COMPILING FUNCTIONS
|
---|
5 | ;" Creation of records in file 50 (DRUG file)
|
---|
6 | ;"Kevin Toppenberg MD
|
---|
7 | ;"GNU General Public License (GPL) applies
|
---|
8 | ;"11-21-2006
|
---|
9 |
|
---|
10 | ;"=======================================================================
|
---|
11 | ;" API -- Public Functions.
|
---|
12 | ;"=======================================================================
|
---|
13 | ;"Menu
|
---|
14 |
|
---|
15 | ;"Refresh1(IEN22706d9,Option) -- Refresh one drug from 22706.9
|
---|
16 | ;"RefreshBatch(IENArray,Option) -- Refres batch entries in 22706.9
|
---|
17 |
|
---|
18 | ;"=======================================================================
|
---|
19 | ;" Private Functions.
|
---|
20 | ;"=======================================================================
|
---|
21 | ;"RefreshNonSkips -- Refresh all non-skipped records in 22706.9
|
---|
22 | ;"GetAddList(List): get list of entries in VA PRODUCT (50.68) not having corresponding entry in DRUG file (50)
|
---|
23 | ;"EnsureFromList(List) -- Add to DRUG file (50) from TMG FDA IMPORT COMPILED
|
---|
24 | ;"Update50(IEN50,DrugInfo,Option) -- refresh info in DRUG (50) file, or add if it doesn't exist (or delete if needed)
|
---|
25 | ;"GetTMGDrugInfo(fdaIEN,DrugInfo) -- Create a very abbreviated version of the DrugInfo array
|
---|
26 | ;"Stuff50(IEN50,DrugInfo,Option) -- synch record(s) in the DRUG file, based on entry from VA PRODUCT file
|
---|
27 | ;"SetupFDA(DrugInfo,IENS,TMGFDA) -- setup FDA for data for record in DRUG file
|
---|
28 | ;"AddMsg(IEN50,Msg) -- Add a message in the Activity log field
|
---|
29 |
|
---|
30 | ;"=======================================================================
|
---|
31 | ;"=======================================================================
|
---|
32 | ;"NOTE: Data mapping:
|
---|
33 | ;" File 50, .01 field (name) is filled with data from file 22706.9, from on
|
---|
34 | ;" of two possible fields:
|
---|
35 | ;" If entry in 50 represents a GENERICNAME drug, then .01 <--- .076
|
---|
36 | ;" If entry in 50 represents a TRADENAME drug, then .01 <--- .056
|
---|
37 | ;"=======================================================================
|
---|
38 | ;"=======================================================================
|
---|
39 | ;"Q: Where is BatchTo50 (i.e. 50.68-->50)??
|
---|
40 | ;"A: There are many entries in 50.68 that I don't want put into 50, so I need
|
---|
41 | ;" to do this: 22706.9 --> 50.68
|
---|
42 | ;" 22706.9 --> 50
|
---|
43 | ;" instead of this: 22706.9 --> 50.68 --> 50
|
---|
44 | ;"=======================================================================
|
---|
45 | Menu
|
---|
46 | ;"Purpose: Provide menu to entry points of main routines
|
---|
47 |
|
---|
48 | new Menu,UsrSlct
|
---|
49 | set Menu(0)="Pick Option for Synchronizing Imports Data to file 50 (3C)"
|
---|
50 | set Menu(1)="Synchronize DRUG file with import data"_$char(9)_"RefreshNonSkips"
|
---|
51 | set Menu(2)="Verify Synchronization"_$char(9)_"VerifySync"
|
---|
52 | set Menu("P")="Prev Stage"_$char(9)_"Prev"
|
---|
53 | set Menu("N")="Next Stage"_$char(9)_"Next"
|
---|
54 |
|
---|
55 | MC1 write #
|
---|
56 | set UsrSlct=$$Menu^TMGUSRIF(.Menu,"^")
|
---|
57 | if UsrSlct="^" goto MCDone
|
---|
58 | if UsrSlct=0 set UsrSlct=""
|
---|
59 |
|
---|
60 | if UsrSlct="RefreshNonSkips" do RefreshNonSkips goto MC1
|
---|
61 | if UsrSlct="VerifySync" do VerifySync goto MC1
|
---|
62 | if UsrSlct="Prev" goto Menu^TMGNDF3A ;"quit can occur from there...
|
---|
63 | if UsrSlct="Next" goto Menu^TMGNDF3D ;"quit can occur from there...
|
---|
64 | goto MC1
|
---|
65 |
|
---|
66 | MCDone
|
---|
67 | quit
|
---|
68 |
|
---|
69 |
|
---|
70 | RefreshNonSkips
|
---|
71 | ;"Purpose: To work on ALL records in 22706.9 that are not marked to be
|
---|
72 | ;" skipped, and ensure that all is refreshed appropriately
|
---|
73 |
|
---|
74 | new tempList
|
---|
75 |
|
---|
76 | new AddCt,OKCt
|
---|
77 | set AddCt=0,OKCt=0
|
---|
78 | new Itr,IEN
|
---|
79 | new abort set abort=0
|
---|
80 | write !,"Gathering list of imports to use (those not marked to be skipped)...",!
|
---|
81 | set IEN22706d9=$$ItrInit^TMGITR(22706.9,.Itr)
|
---|
82 | do PrepProgress^TMGITR(.Itr,20,0,"IEN22706d9")
|
---|
83 | if IEN22706d9'="" for do quit:($$ItrNext^TMGITR(.Itr,.IEN22706d9)'>0)!abort
|
---|
84 | . if $$UserAborted^TMGUSRIF set abort=1 quit
|
---|
85 | . if +$piece($get(^TMG(22706.9,IEN22706d9,1)),"^",4)=1 quit ;"1=SKIP
|
---|
86 | . new tIEN50 set tIEN50=+$piece($get(^TMG(22706.9,IEN22706d9,7)),"^",1)
|
---|
87 | . new gIEN50 set gIEN50=+$piece($get(^TMG(22706.9,IEN22706d9,7)),"^",2)
|
---|
88 | . set tempList(IEN22706d9)=""
|
---|
89 | . if (tIEN50>0)&(gIEN50>0) set OKCt=OKCt+1
|
---|
90 | . else set AddCt=AddCt+1
|
---|
91 | do ProgressDone^TMGITR(.Itr)
|
---|
92 |
|
---|
93 | write !,AddCt," items may be added to DRUG file (if appropriate).",!
|
---|
94 | write OKCt," items will be refreshed in DRUG file.",!
|
---|
95 |
|
---|
96 | new % set %=1
|
---|
97 | write "Proceed" do YN^DICN write !
|
---|
98 | if %'=1 goto RNSDone
|
---|
99 |
|
---|
100 | do EnsureFromList(.tempList)
|
---|
101 |
|
---|
102 | RNSDone
|
---|
103 | quit
|
---|
104 |
|
---|
105 | RefreshBatch(IENArray,Option)
|
---|
106 | ;"Purpose: To take entries in 22706.9 and refresh them
|
---|
107 | ;"Input: IENArray -- PASS BY REFERENCE. Array of IENs from 22706.9
|
---|
108 | ;" IENArray(IEN22706d9)=""
|
---|
109 | ;" IENArray(IEN22706d9)=""
|
---|
110 | ;" Option -- OPTIONAL. Format:
|
---|
111 | ;" Option("FIX CHAIN")=1 <--- changes will be propigate forward
|
---|
112 | ;" to file 50, POI, OI, OQV etc.
|
---|
113 | ;" Option("QUIET")=1
|
---|
114 |
|
---|
115 | ;"Results: none
|
---|
116 |
|
---|
117 | new IEN22706d9,Itr
|
---|
118 | new abort set abort=0
|
---|
119 | set IEN22706d9=$$ItrAInit^TMGITR("IENArray",.Itr)
|
---|
120 | do PrepProgress^TMGITR(.Itr,1,1,"IEN22706d9")
|
---|
121 | if IEN22706d9'="" for do quit:($$ItrANext^TMGITR(.Itr,.IEN22706d9)="")!abort
|
---|
122 | . ;"write !,"Refreshing compiled entry #",IEN227606d9,!
|
---|
123 | . do Refresh1(IEN22706d9,.Option)
|
---|
124 | quit
|
---|
125 |
|
---|
126 |
|
---|
127 | Refresh1(IEN22706d9,Option)
|
---|
128 | ;"Purpose: To take one entry in 22706.9 and refresh it
|
---|
129 | ;"Input: IEN22706d9 -- IEN from 22706.9
|
---|
130 | ;" Option -- OPTIONAL. Format:
|
---|
131 | ;" Option("FIX CHAIN")=1 <--- changes will be propigate forward
|
---|
132 | ;" to file 50, POI, OI, OQV etc.
|
---|
133 | ;"Results: none
|
---|
134 |
|
---|
135 | new gIEN50,tIEN50
|
---|
136 | new skip
|
---|
137 | set skip=($piece($get(^TMG(22706.9,IEN22706d9,1)),"^",4)=1)
|
---|
138 |
|
---|
139 | if $get(Option("FIX CHAIN"))=1 do
|
---|
140 | . new temp
|
---|
141 | . set tIEN50=+$piece($get(^TMG(22706.9,IEN22706d9,7)),"^",1)
|
---|
142 | . set Option("IEN50","TRADE")=tIEN50
|
---|
143 | . set gIEN50=+$piece($get(^TMG(22706.9,IEN22706d9,7)),"^",2)
|
---|
144 | . set Option("IEN50","GENERIC")=gIEN50
|
---|
145 | . set Option("FIX CHAIN","IEN22706d9")=IEN22706d9
|
---|
146 |
|
---|
147 | new List
|
---|
148 | if skip set List(IEN22706d9)="S"
|
---|
149 | else set List(IEN22706d9)=""
|
---|
150 |
|
---|
151 | do EnsureFromList(.List,.Option)
|
---|
152 |
|
---|
153 | if $get(Option("FIX CHAIN"))=1 do
|
---|
154 | . if tIEN50>0 set temp=$$Fix1Drug^TMGNDF3D(tIEN50,IEN22706d9)
|
---|
155 | . if gIEN50>0 set temp=$$Fix1Drug^TMGNDF3D(gIEN50,IEN22706d9)
|
---|
156 |
|
---|
157 | quit
|
---|
158 |
|
---|
159 |
|
---|
160 | EnsureFromList(List,Option)
|
---|
161 | ;"Purpose: to add entries to, or refresh fields in, DRUG file (50) based on
|
---|
162 | ;" data from TMG FDA IMPORT COMPILED (22706.9),
|
---|
163 | ;" OR to ensure that the linked records are properly refreshed.
|
---|
164 | ;" OR ensure that records liked from a skipped record are deleted
|
---|
165 | ;"Input: List -- PASS BY REFERENCE, format:
|
---|
166 | ;" List(IEN22706d9)=""
|
---|
167 | ;" List(IEN22706d9)=""
|
---|
168 | ;" List(IEN22706d9)="S" <-- record now skipped, so ensure linked records are removed
|
---|
169 | ;" Option -- OPTIONAL. Format:
|
---|
170 | ;" Option("FIX CHAIN")=1 <--- changes will be propigate forward
|
---|
171 | ;" to file 50, POI, OI, OQV etc.
|
---|
172 | ;" OPTION("FIX CHAIN","IEN22706d9")=Source IEN
|
---|
173 | ;" Option("QUIET")=1 <-- supress text output
|
---|
174 | ;"Results: none
|
---|
175 |
|
---|
176 | new IEN22706d9,Itr
|
---|
177 | new error set error=0
|
---|
178 | new abort set abort=0
|
---|
179 | new ChangeCt set ChangeCt=0
|
---|
180 | new quiet set quiet=($get(Option("QUIET"))=1)
|
---|
181 | do Unlock50^TMGNDFUT
|
---|
182 |
|
---|
183 | if 'quiet write "Scanning import file, to ensure all records in DRUG file are updated...",!
|
---|
184 | set IEN22706d9=$$ItrAInit^TMGITR("List",.Itr)
|
---|
185 | if 'quiet do PrepProgress^TMGITR(.Itr,20,0,"IEN22706d9")
|
---|
186 | if IEN22706d9>0 for do quit:($$ItrANext^TMGITR(.Itr,.IEN22706d9)'>0)!abort
|
---|
187 | . new DrugInfo,ndcIEN,tempS,error,temp,vapIEN,temp
|
---|
188 | . new skip set skip=($get(List(IEN22706d9))="S")
|
---|
189 | . set error=0,temp=0,tempS=""
|
---|
190 | . if $$UserAborted^TMGUSRIF set abort=1 quit
|
---|
191 | . set vapIEN=+$piece($get(^TMG(22706.9,IEN22706d9,6)),"^",2)
|
---|
192 | . if skip=0,vapIEN>0,$data(^PSNDF(50.68,vapIEN))=0 do
|
---|
193 | . . if 'quiet write "Pointer to VA PRODUCT from File 22709.9, IEN# ",IEN22706d9," is invalid. Will delete.",!
|
---|
194 | . . set vapIEN=0
|
---|
195 | . . new TMGMSG,TMGFDA
|
---|
196 | . . set TMGFDA(22706.9,fdaIEN_",",5.5)="@"
|
---|
197 | . . do FILE^DIE("K","TMGFDA","TMGMSG")
|
---|
198 | . . do ShowIfDIERR^TMGDEBUG(.TMGMSG) ;"show errors, even if quiet
|
---|
199 | . if skip=0,vapIEN'>0 set error=1 quit
|
---|
200 | . set temp=$$GetTMGDrugInfo(IEN22706d9,.DrugInfo)
|
---|
201 | . if skip=0,temp=0 set error=1 quit
|
---|
202 | . if skip=1 set Option("DELETING")=1
|
---|
203 | . ;"--- work on Trade Name link ---
|
---|
204 | . if ($get(DrugInfo("NAME","TRADE"))=$get(DrugInfo("NAME","GENERIC"))) set DrugInfo("NAME","TRADE")=""
|
---|
205 | . new tIEN50 set tIEN50=+$piece($get(^TMG(22706.9,IEN22706d9,7)),"^",1) ;"DRUG TRADENAME LINK
|
---|
206 | . set Option("CUR MODE")="TRADE"
|
---|
207 | . set temp=$$Update50(tIEN50,.DrugInfo,.Option) ;"may chain forward
|
---|
208 | . if temp=1 set ChangeCt=ChangeCt+1
|
---|
209 | . else if temp=-1 set error=1 ;"quit
|
---|
210 | . ;"--- work on Generic Name link ---
|
---|
211 | . new gIEN50 set gIEN50=+$piece($get(^TMG(22706.9,IEN22706d9,7)),"^",2) ;"DRUG GENERIC LINK
|
---|
212 | . if gIEN50=tIEN50 set gIEN50=0
|
---|
213 | . set Option("CUR MODE")="GENERIC"
|
---|
214 | . set temp=$$Update50(gIEN50,.DrugInfo,.Option) ;"may chain forward
|
---|
215 | . if temp=1 set ChangeCt=ChangeCt+1
|
---|
216 | . else if temp=-1 set error=1 ;"quit
|
---|
217 | if error write "Error with import : IEN22706d9=",IEN22706d9,!
|
---|
218 |
|
---|
219 | if 'quiet do
|
---|
220 | . write ChangeCt," Records Modified.",!
|
---|
221 | . do PressToCont^TMGUSRIF
|
---|
222 |
|
---|
223 | do Unlock50^TMGNDFUT
|
---|
224 | quit
|
---|
225 |
|
---|
226 |
|
---|
227 | GetTMGDrugInfo(IEN22706d9,DrugInfo)
|
---|
228 | ;"Purpose: Create a very abbreviated version of the DrugInfo array
|
---|
229 | ;" This is because calling GetDrugInfo^TMGNDF1A is unneccesarily SLOW
|
---|
230 | ;" Also, it makes one dependant on FDA primary files.
|
---|
231 | ;"Input: IEN22706d9 -- IEN in file 22706.9
|
---|
232 | ;" DrugInfo -- PASS BY REFERENCE. Format:
|
---|
233 | ;" DrugInfo("NDC")
|
---|
234 | ;"Output: DrugInfo("NAME","TRADE")=.056 field
|
---|
235 | ;" DrugInfo("NAME","GENERIC")=.076 field
|
---|
236 | ;" DrugInfo("SOURCE IEN")=source IEN in 22706.9
|
---|
237 | ;" DrugInfo("IEN 50.68")=field 5.5, a pointer to 50.68 (VA PRODUCT)
|
---|
238 | ;"Results: 1=OK to continue, 0=error
|
---|
239 | ;"NOTE: 11/5/07 Modifying to make use of fields .055 and .075, where name is
|
---|
240 | ;" prepaired and stored in a previous step.
|
---|
241 | ;"NOTE: 11/10/07 Modifying to make use of fields .056 and .076, where name is
|
---|
242 | ;" prepaired and stored in a previous step.
|
---|
243 |
|
---|
244 | kill DrugInfo
|
---|
245 | new result set result=1
|
---|
246 | set DrugInfo("NDC")=$piece($get(^TMG(22706.9,IEN22706d9,1)),"^",1)
|
---|
247 | if DrugInfo("NDC")="" set result=0
|
---|
248 |
|
---|
249 | set DrugInfo("SOURCE IEN")=IEN22706d9
|
---|
250 | set DrugInfo("IEN 50.68")=+$piece($get(^TMG(22706.9,IEN22706d9,6)),"^",2)
|
---|
251 |
|
---|
252 | new tempS set tempS=$piece($get(^TMG(22706.9,IEN22706d9,8)),"^",1) ;".056 TRADENAME FORM DOSE UNIT - 40
|
---|
253 | if tempS'="" set DrugInfo("NAME","TRADE")=tempS
|
---|
254 |
|
---|
255 | new tempS set tempS=$piece($get(^TMG(22706.9,IEN22706d9,8)),"^",2) ;".076 GENERICNAME FORM DOSE UNT - 40
|
---|
256 | if tempS'="" set DrugInfo("NAME","GENERIC")=tempS
|
---|
257 |
|
---|
258 | GDIDone
|
---|
259 | quit result
|
---|
260 |
|
---|
261 |
|
---|
262 | Update50(IEN50,DrugInfo,Option)
|
---|
263 | ;"Purpose: to refresh info in DRUG file, or add if it doesn't exist (or delete if needed)
|
---|
264 | ;"Input: IEN50: Target IEN to refresh, or 0 if needs to be added
|
---|
265 | ;" DrugInfo -- PASS BY REFERENCE. Format:
|
---|
266 | ;" DrugInfo("NDC")
|
---|
267 | ;" DrugInfo("NAME","TRADE")=.056 field
|
---|
268 | ;" DrugInfo("NAME","GENERIC")=.076 field
|
---|
269 | ;" DrugInfo("SOURCE IEN")=source IEN in 22706.9
|
---|
270 | ;" DrugInfo("IEN 50.68")=field 5.5, a pointer to 50.68 (VA PRODUCT)
|
---|
271 | ;" Option -- NON-OPTIONAL part. Format:
|
---|
272 | ;" Option("CUR MODE")="TRADE"
|
---|
273 | ;" Option -- OPTIONAL part. Format:
|
---|
274 | ;" Option("FIX CHAIN")=1 <--- changes will be propigate forward
|
---|
275 | ;" to file 50, POI, OI, OQV etc.
|
---|
276 | ;" OPTION("FIX CHAIN","IEN22706d9")=Source IEN
|
---|
277 | ;" Option("QUIET")=1 <-- supress text output
|
---|
278 | ;" Option("DELETING")=1 <-- deleting chain (not IEN22706d9)
|
---|
279 | ;"Result: -1 = error, 0=info refreshed, 1=record added.
|
---|
280 |
|
---|
281 | new result set result=0
|
---|
282 | new quiet set quiet=$get(Option("QUIET"))=1
|
---|
283 | new IEN22706d9 set IEN22706d9=+$get(DrugInfo("SOURCE IEN"))
|
---|
284 | new mode set mode=$get(Option("CUR MODE"))
|
---|
285 | if (mode'="TRADE")&(mode'="GENERIC") set result=-1 goto UDDone
|
---|
286 |
|
---|
287 | new StoreField,node,pce
|
---|
288 | if mode="TRADE" set StoreField=5.6,node=7,pce=1
|
---|
289 | else set StoreField=5.7,node=7,pce=2
|
---|
290 |
|
---|
291 | new drugName set drugName=$get(DrugInfo("NAME",mode))
|
---|
292 | set DrugInfo("NAME",mode)=drugName
|
---|
293 | if (drugName="")!(drugName="<DUPLICATE>")!($get(Option("DELETING"))=1) do goto UDDone
|
---|
294 | . do Kill50^TMGNDFUT(IEN50,IEN22706d9,mode,quiet) ;"is OK if IEN50=0
|
---|
295 | . set result=-1
|
---|
296 |
|
---|
297 | if (IEN50>0),$data(^PSDRUG(IEN50))=0 do
|
---|
298 | . set IEN50=0 ;"I found case of dangling pointer
|
---|
299 |
|
---|
300 | if IEN50=0 do ;"Create stub entry with drug name in .01 field
|
---|
301 | . new PSSZ set PSSZ=1 ;"allows code to add entries into DRUG file.
|
---|
302 | . new TMGFDA,TMGMSG,TMGIEN,IENS
|
---|
303 | . set TMGFDA(50,"+1,",.01)=drugName
|
---|
304 | . do UPDATE^DIE("S","TMGFDA","TMGIEN","TMGMSG")
|
---|
305 | . do ShowDIERR^TMGDEBUG(.TMGMSG)
|
---|
306 | . set IEN50=+$get(TMGIEN(1)) if IEN50=0 quit
|
---|
307 | . do AddMsg(IEN50,"TMG AUTOADDED FROM FDA")
|
---|
308 | . set Option("IEN50",mode)=IEN50
|
---|
309 | . set Option("IEN50",mode,"NAME")=drugName
|
---|
310 |
|
---|
311 | set DrugInfo("CUR MODE")=mode
|
---|
312 | set temp=$$Stuff50(IEN50,.DrugInfo,.Option) ;"no chain forward
|
---|
313 | if temp=0 set result=-1
|
---|
314 | if temp=2 set result=1
|
---|
315 |
|
---|
316 | ;"Ensure pointer to DRUG (50) is stored in 22706.9
|
---|
317 | if $piece($get(^TMG(22706.9,IEN22706d9,node)),"^",pce)'=IEN50 do
|
---|
318 | . new TMGFDA,TMGMSG
|
---|
319 | . set TMGFDA(22706.9,IEN22706d9_",",StoreField)=IEN50
|
---|
320 | . do FILE^DIE("K","TMGFDA","TMGMSG")
|
---|
321 | . do ShowIfDIERR^TMGDEBUG(.TMGMSG)
|
---|
322 | . set Option("IEN50",mode)=IEN50
|
---|
323 |
|
---|
324 | if $get(Option("FIX CHAIN"))=1 do
|
---|
325 | . new temp set temp=$$POIFromTMG^TMGNDF4A(IEN22706d9,.Option) ;" --> more chain from here
|
---|
326 | . ;"if $get(Option("DELETING"))=1 do
|
---|
327 | . ;". do Kill50^TMGNDFUT(IEN50,IEN22706d9,mode,quiet) ;"is OK if IEN50=0
|
---|
328 |
|
---|
329 | UDDone
|
---|
330 | quit result
|
---|
331 |
|
---|
332 |
|
---|
333 | Stuff50(IEN50,DrugInfo,Option)
|
---|
334 | ;"Purpose: To synch record(s) in the DRUG file
|
---|
335 | ;"Input: IEN50 -- IEN of record in file 50 to update
|
---|
336 | ;" DrugInfo -- PASS BY REFERENCE -- Drug info array. Format:
|
---|
337 | ;" DrugInfo("NAME","GENERIC")=e.g. NAME: DILTIAZEM 240MG
|
---|
338 | ;" DrugInfo("NAME","TRADE")=e.g. NAME: CARDIZEM CD 240MG
|
---|
339 | ;" DrugInfo("NDC")
|
---|
340 | ;" DrugInfo("SOURCE IEN")=source IEN in 22706.9
|
---|
341 | ;" DrugInfo("IEN 50.68")=field 5.5, a pointer to 50.68 (VA PRODUCT)
|
---|
342 | ;" Option -- NON-OPTIONAL part. Format:
|
---|
343 | ;" Option("CUR MODE")="TRADE"
|
---|
344 | ;" Option -- OPTIONAL. Format:
|
---|
345 | ;" Option("FIX CHAIN")=1 <--- changes will be propigate forward
|
---|
346 | ;" to file 50, POI, OI, OQV etc.
|
---|
347 | ;" OPTION("FIX CHAIN","IEN22706d9")=Source IEN
|
---|
348 | ;" Option("QUIET")=1 <-- supress text output
|
---|
349 | ;"Output: A record will be added to file DRUG (50)
|
---|
350 | ;"Result: 1=OK to continue, 2=change made, 0 if error
|
---|
351 |
|
---|
352 | ;"Note: must set PSSZ=1 to be allowed to enter entries into DRUG file.
|
---|
353 |
|
---|
354 | new result set result=1 ;"default to success -- don't change.
|
---|
355 | new PSSZ set PSSZ=1 ;"allows code to add entries into DRUG file.
|
---|
356 |
|
---|
357 | ;"Remove any synonyms
|
---|
358 | RF1 new numSyns
|
---|
359 | for do quit:(numSyns'>0)
|
---|
360 | . set numSyns=+$piece($get(^PSDRUG(IEN50,1,0)),"^",4) ;"number of records
|
---|
361 | . if numSyns=0 quit
|
---|
362 | RF2 . set subIEN=$order(^PSDRUG(IEN50,1,0))
|
---|
363 | . if (subIEN'>0) set numSyns=0 quit
|
---|
364 | . new TMGFDA,TMGMSG
|
---|
365 | . set TMGFDA(50.1,subIEN_","_IEN50_",",.01)="@"
|
---|
366 | . do FILE^DIE("K","TMGFDA","TMGMSG")
|
---|
367 | . do ShowIfDIERR^TMGDEBUG(.TMGMSG)
|
---|
368 | . set result=2
|
---|
369 |
|
---|
370 | new TMGFDA,TMGMSG,TMGIEN
|
---|
371 |
|
---|
372 | set result=$$SetupFDA(.DrugInfo,IEN50_",",.TMGFDA)
|
---|
373 | if result=0 goto RFDone
|
---|
374 | new temp set temp=$$TrimFDA^TMGDBAPI(.TMGFDA)
|
---|
375 | if $data(TMGFDA)=0 goto RFDone
|
---|
376 |
|
---|
377 | do FILE^DIE("KS","TMGFDA","TMGMSG")
|
---|
378 | if $data(TMGMSG("DIERR")) do goto RFDone
|
---|
379 | . set result=0
|
---|
380 | . if $get(Quiet)=1 quit
|
---|
381 | . write !,"Error editing record in file 50",!
|
---|
382 | . new PriorErrorFound
|
---|
383 | . do ShowDIERR^TMGDEBUG(.TMGMSG,.PriorErrorFound)
|
---|
384 |
|
---|
385 | do AddMsg(IEN50,"TMG AUTO UPDATED FROM FDA")
|
---|
386 | set result=2 ;"update made.
|
---|
387 |
|
---|
388 | RFDone quit result
|
---|
389 |
|
---|
390 |
|
---|
391 | AddMsg(IEN50,Msg)
|
---|
392 | ;"Purpose: to Add a message in the Activity log field
|
---|
393 | ;"Input: IEN50 -- the IEN in DRUG file
|
---|
394 | ;" Msg -- the Message to add (a string)
|
---|
395 | ;"results: none.
|
---|
396 |
|
---|
397 | ;"Check that record was added, then then add subfile entries:
|
---|
398 | set IENS="+1,"_IEN50_","
|
---|
399 | kill TMGFDA,TMGMSG,TMGIEN
|
---|
400 | ;" 214 ACTIVITY LOG <-Mult [50.0214DA]
|
---|
401 | ;" .01 -ACTIVITY LOG [D]
|
---|
402 | ;" 1 -REASON [S]
|
---|
403 | ;" 2 -INITIATOR OF ACTIVITY <-Pntr [P200']
|
---|
404 | ;" 3 -FIELD EDITED [F]
|
---|
405 | ;" 4 -NEW VALUE [F]
|
---|
406 | ;" 5 -NDF UPDATE [F]
|
---|
407 | set TMGFDA(50.0214,IENS,.01)="NOW"
|
---|
408 | set TMGFDA(50.0214,IENS,1)="E"
|
---|
409 | set TMGFDA(50.0214,IENS,2)="`"_DUZ
|
---|
410 | set TMGFDA(50.0214,IENS,3)="ALL FIELDS"
|
---|
411 | set TMGFDA(50.0214,IENS,4)=Msg
|
---|
412 |
|
---|
413 | do UPDATE^DIE("ES","TMGFDA","TMGIEN","TMGMSG")
|
---|
414 | if $get(Quiet)'=1 do ShowIfDIERR^TMGDEBUG(.TMGMSG)
|
---|
415 |
|
---|
416 | quit
|
---|
417 |
|
---|
418 |
|
---|
419 | SetupFDA(DrugInfo,IENS,TMGFDA)
|
---|
420 | ;"Purpose: To set up the FDA (Filman data array) for the data that will go into
|
---|
421 | ;" a record to the DRUG file, based on entry from VA PRODUCT file
|
---|
422 | ;"Input: DrugInfo -- PASS BY REFERENCE -- Drug info from array GetTMGDrugInfo, and
|
---|
423 | ;" as modified by Add2VAProd^TMGNDF3A
|
---|
424 | ;" Fields used are:
|
---|
425 | ;" DrugInfo("CUR MODE")="GENERIC" or "TRADE"
|
---|
426 | ;" DrugInfo("NAME","GENERIC")=e.g. NAME: DILTIAZEM 240MG
|
---|
427 | ;" DrugInfo("NAME","TRADE")=e.g. NAME: CARDIZEM CD 240MG
|
---|
428 | ;" DrugInfo("NDC")
|
---|
429 | ;" DrugInfo("SOURCE IEN")=source IEN in 22706.9
|
---|
430 | ;" DrugInfo("IEN 50.68")=field 5.5, a pointer to 50.68 (VA PRODUCT)
|
---|
431 | ;" IENS -- a standard fileman IENS for this FDA to be created with
|
---|
432 | ;" TMGFDA -- PASS BY REFERENCE -- an OUT PARAMETER. This will be a standard
|
---|
433 | ;" fileman FDA
|
---|
434 | ;"Output: TMGFDA will be filled
|
---|
435 | ;"Result: 1=OK to continue, 0 if error
|
---|
436 |
|
---|
437 | ;"NOTE: The FDA that this function contains will contain INTERNAL values
|
---|
438 |
|
---|
439 | new result set result=1 ;"default to success -- don't change.
|
---|
440 | new mode set mode=$get(DrugInfo("CUR MODE"))
|
---|
441 | if (mode'="TRADE")&(mode'="GENERIC") set result=0 goto SUFDone
|
---|
442 |
|
---|
443 | new TMGMSG,TMGIEN
|
---|
444 | new tempS,tempIEN
|
---|
445 | new IEN22706d9 set IEN22706d9=+$get(DrugInfo("SOURCE IEN"))
|
---|
446 |
|
---|
447 | ;"Example Entry. (Edited for fields I care about)
|
---|
448 | ;"#50 .01 GENERIC NAME: DILTIAZEM CD 120MG CAP
|
---|
449 | ;"#50.68 .01 NAME [RFa]
|
---|
450 | ;"#50.68 e.g. NAME: DILTIAZEM (CARDIZEM CD) 240MG SA CAP
|
---|
451 | set tempS=$get(DrugInfo("NAME",mode))
|
---|
452 | set tempS=$translate(tempS,";",":") ;" for some reason ';' is not allowed in .01 field
|
---|
453 | if $length(tempS)>40 set tempS=$extract(tempS,1,37)_"..."
|
---|
454 | set TMGFDA(50,IENS,.01)=tempS
|
---|
455 |
|
---|
456 | ;"#50 22 PSNDF VA PRODUCT NAME ENTRY: DILTIAZEM (CARDIZEM CD) 120MG SA CAP
|
---|
457 | ;"#50.68 .01 NAME [RFa]
|
---|
458 | ;"#50.68 e.g. NAME: DILTIAZEM (CARDIZEM CD) 240MG SA CAP
|
---|
459 | new vapIEN set vapIEN=+$get(DrugInfo("IEN 50.68"))
|
---|
460 | if +vapIEN>0 DO
|
---|
461 | . set TMGFDA(50,IENS,22)=vapIEN
|
---|
462 | . new vapName
|
---|
463 | . set vapName=$$GET1^DIQ(50.68,vapIEN,.01)
|
---|
464 | . ;"#50 21 VA PRODUCT NAME: DILTIAZEM (CARDIZEM CD) 120MG SA CAP
|
---|
465 | . ;"#50.68 .01 NAME [RFa]
|
---|
466 | . ;"#50.68 e.g. NAME: DILTIAZEM (CARDIZEM CD) 240MG SA CAP
|
---|
467 | . set TMGFDA(50,IENS,21)=vapName
|
---|
468 | . ;"set TMGFDA(50,IENS,21)=tempS
|
---|
469 |
|
---|
470 | ;"#50 5 STANDARD SIG: T1 CAP QD
|
---|
471 | ;" plan "USE AS DIRECTED"
|
---|
472 | set TMGFDA(50,IENS,5)="USE AS DIRECTED"
|
---|
473 |
|
---|
474 | ;"#50 20 NATIONAL DRUG FILE ENTRY: DILTIAZEM <-Pntr [P50.6, VA GENERIC]
|
---|
475 | set tempIEN=+$piece($get(^TMG(22706.9,IEN22706d9,1)),"^",3) ;"1;3 = field .08 VA GENERIC
|
---|
476 | if tempIEN>0 set TMGFDA(50,IENS,20)=tempIEN
|
---|
477 |
|
---|
478 | ;"#50 25 NATIONAL DRUG CLASS <-Pntr [P50.605']
|
---|
479 | ;"#50 2 VA CLASSIFICATION [FX]
|
---|
480 | set tempIEN=+$piece($get(^TMG(22706.9,IEN22706d9,1)),"^",5) ;"1;5 = field .09 VA DRUG CLASS
|
---|
481 | set TMGFDA(50,IENS,25)=tempIEN
|
---|
482 | set tempClass=$$GET1^DIQ(50.605,tempIEN_",",.01)
|
---|
483 | if tempClass'="" set TMGFDA(50,IENS,2)=tempClass
|
---|
484 |
|
---|
485 | ;"#50 29 NATIONAL FORMULARY INDICATOR: NO
|
---|
486 | set TMGFDA(50,IENS,29)=0 ;"0=NO, 1=YES
|
---|
487 |
|
---|
488 | ;"#50 31 NDC: 0088-1795-30
|
---|
489 | new NDC set NDC=$piece($get(^TMG(22706.9,IEN22706d9,1)),"^",1)
|
---|
490 | set NDC=$extract(NDC,2,20) ;"should be in 5-4-2 format, but must be 11 digits, 1st is not significant
|
---|
491 | if NDC'="" set TMGFDA(50,IENS,31)=NDC
|
---|
492 |
|
---|
493 | ;"#50 901 STRENGTH: 120
|
---|
494 | new tempStr set tempStr=$piece($get(^TMG(22706.9,IEN22706d9,0)),"^",2) ;"0;2=field 1 STRENGTH
|
---|
495 | if tempStr'="" set TMGFDA(50,IENS,901)=tempStr
|
---|
496 |
|
---|
497 | ;"#50 902 UNIT: MG
|
---|
498 | ;"#50.68 3 UNITS <-Pntr [P50.607'a]
|
---|
499 | ;"#50.68 e.g. UNITS: MG
|
---|
500 | new tempUnit set tempUnit=$$GET1^DIQ(50.68,vapIEN,3,"I")
|
---|
501 | if tempUnit'="" set TMGFDA(50,IENS,902)=tempUnit
|
---|
502 |
|
---|
503 | ;"#50 62.02 UNIT DOSE MED ROUTE <-Pntr [*P51.2']
|
---|
504 | ;"#22706.9 3.1 VA ROUTE <-Pntr [P51.2']
|
---|
505 | set tempIEN=+$piece($get(^TMG(22706.9,IEN22706d9,7)),"^",7) ;"7;7 3.1 VA ROUTE
|
---|
506 | if tempIEN>0 set TMGFDA(50,IENS,62.02)=tempIEN
|
---|
507 |
|
---|
508 | SUFDone
|
---|
509 | quit result
|
---|
510 |
|
---|
511 |
|
---|
512 | VerifySync
|
---|
513 | ;"To verify the synchronization, i.e. looking for dangling pointers etc.
|
---|
514 |
|
---|
515 | new ChangeCt set ChangeCt=0
|
---|
516 | new Itr,IEN22706d9
|
---|
517 | new abort set abort=0
|
---|
518 | write !,"Checking Synchronization",!
|
---|
519 | set IEN22706d9=$$ItrInit^TMGITR(22706.9,.Itr)
|
---|
520 | do PrepProgress^TMGITR(.Itr,20,0,"IEN22706d9")
|
---|
521 | if IEN22706d9'="" for do quit:($$ItrNext^TMGITR(.Itr,.IEN22706d9)'>0)!abort
|
---|
522 | . if $$UserAborted^TMGUSRIF set abort=1 quit
|
---|
523 | . ;"if +$piece($get(^TMG(22706.9,IEN22706d9,1)),"^",4)=1 quit ;"1=SKIP
|
---|
524 | . new tIEN50 set tIEN50=$piece($get(^TMG(22706.9,IEN22706d9,7)),"^",1)
|
---|
525 | . set ChangeCt=ChangeCt+$$Verify1(IEN22706d9,tIEN50,"TRADE")
|
---|
526 | . new gIEN50 set gIEN50=$piece($get(^TMG(22706.9,IEN22706d9,7)),"^",2)
|
---|
527 | . set ChangeCt=ChangeCt+$$Verify1(IEN22706d9,gIEN50,"GENERIC")
|
---|
528 | do ProgressDone^TMGITR(.Itr)
|
---|
529 |
|
---|
530 | do PressToCont^TMGUSRIF
|
---|
531 |
|
---|
532 | quit
|
---|
533 |
|
---|
534 | Verify1(IEN22706d9,IEN50,mode)
|
---|
535 | ;"To Verify one
|
---|
536 | ;"Input: IEN22706d9
|
---|
537 | ;" IEN50 -- link to DRUG file (either for Generic Drug, or Trade Drug)
|
---|
538 | ;" mode - "GENERIC" or "TRADE"
|
---|
539 | ;"Result: 0 -- no change, 1= change made
|
---|
540 |
|
---|
541 | new result set result=0
|
---|
542 | new field50 set field50=""
|
---|
543 | new fieldName set fieldName=""
|
---|
544 | new node,pce set (node,pce)=""
|
---|
545 | if mode="GENERIC" do
|
---|
546 | . set field50=5.7
|
---|
547 | . set fieldName=.076
|
---|
548 | . set node=8,pce=2
|
---|
549 | else if mode="TRADE" do
|
---|
550 | . set field50=5.6
|
---|
551 | . set fieldName=.056
|
---|
552 | . set node=8,pce=1
|
---|
553 | if (field50="") goto V1Done
|
---|
554 | if (IEN50="") goto V1Done
|
---|
555 |
|
---|
556 | new drugName set drugName=$piece($get(^PSDRUG(IEN50,0)),"^",1)
|
---|
557 | new TMGName set TMGName=$piece($get(^TMG(22706.9,IEN22706d9,node)),"^",pce)
|
---|
558 | set TMGName=$translate(TMGName,";",":")
|
---|
559 |
|
---|
560 | if $data(^PSDRUG(+$get(IEN50)))=0 do
|
---|
561 | . write "Bad pointer: ",IEN50
|
---|
562 | . set IEN50=0
|
---|
563 |
|
---|
564 | if drugName'=TMGName do
|
---|
565 | . write IEN22706d9," (",$extract(mode,1),"): Name mismatch: ",drugName," vs ",TMGName,!
|
---|
566 | . if TMGName="" set IEN50=0
|
---|
567 |
|
---|
568 | if $get(IEN50)=0 do goto V1Done
|
---|
569 | . new TMGFDA,TMGMSG
|
---|
570 | . set TMGFDA(22706.9,IEN22706d9_",",field50)="@"
|
---|
571 | . do UPDATE^DIE("","TMGFDA","TMGMSG")
|
---|
572 | . do ShowIfDIERR^TMGDEBUG(.TMGMSG)
|
---|
573 | . write " ... fixed.",!
|
---|
574 | . set result=1
|
---|
575 |
|
---|
576 |
|
---|
577 | V1Done
|
---|
578 | quit result
|
---|