1 | TMGNDF3A ;TMG/kst/FDA Import: Drug class stuff ;03/25/06
|
---|
2 | ;;1.0;TMG-LIB;**1**;11/21/06
|
---|
3 |
|
---|
4 | ;" FDA - NATIONAL DRUG FILES COMPILING FUNCTIONS
|
---|
5 | ;" Further processing, after functions in TMGNDF2C
|
---|
6 | ;" Primarily working VA DRUG CLASS stuff.
|
---|
7 | ;"Kevin Toppenberg MD
|
---|
8 | ;"GNU General Public License (GPL) applies
|
---|
9 | ;"11-21-2006
|
---|
10 |
|
---|
11 | ;"=======================================================================
|
---|
12 | ;" API -- Public Functions.
|
---|
13 | ;"=======================================================================
|
---|
14 | ;"Menu
|
---|
15 | ;"=======================================================================
|
---|
16 | ;"FillFromVADrugClass -- ensure that all the entries in TMG FDA IMPORT COMPILED
|
---|
17 | ;" have a value for field VA DRUG CLASS
|
---|
18 | ;"HandleEmptyClasses -- allow classification of all unclassified drugs (ones
|
---|
19 | ;" with no potential match found in VistA database as a
|
---|
20 | ;" starting point)
|
---|
21 |
|
---|
22 | ;"=======================================================================
|
---|
23 | ;" Private Functions.
|
---|
24 | ;"=======================================================================
|
---|
25 | ;"ShowClasses -- Display all the drug classes, in a heirarchy.
|
---|
26 | ;"GetClasses(Array) -- Purpose: To get an array back the shows the heirarchy of all VA DRUG classes
|
---|
27 | ;"KillIntro(Array) One of the drug classes is AA000, INTRODUCTION. This will kill entry from the Array
|
---|
28 | ;"GetClHeirarchy(ClassIEN,Array) -- get an array back the shows the heirarchy of one VA DRUG class
|
---|
29 | ;"FixClasses -- fix VA DRUG CLASS records which are not properly linked into the heirarchy.
|
---|
30 | ;"Fix1Class(IEN) -- fix the parent entry of one erroneous class, in the VA DRUG CLASS heirarchy.
|
---|
31 | ;"GetInfo(IEN,Array) -- fill record from VA DRUG CLASS file into a usable array
|
---|
32 | ;"TestSelectClass
|
---|
33 | ;"$$SelectClass(Array,AskSub) -- Allow user to browse Array and select drug class
|
---|
34 | ;"Search4Class() -- use Fileman to search for a drug class
|
---|
35 | ;"$$SelectFrom(pRef) -- Allow user to browse Array and select drug class
|
---|
36 | ;"SrchItems(input,Items) -- Search through Items array for input, and return index number if found
|
---|
37 | ;"TestGather
|
---|
38 | ;"GatherClasses(Array)
|
---|
39 | ;"GetPossClass(IEN,Array) -- gather, from a list of possible drug matches, a list of possible VA DRUG CLASSESS
|
---|
40 | ;"VerifyClasses(Array) -- allow user to accept or reject proposed drug class for new drugs.
|
---|
41 | ;"ShowInstructions()
|
---|
42 | ;"LookupHelp()
|
---|
43 | ;"FindHelp()
|
---|
44 | ;"SimHelp()
|
---|
45 | ;"ShowList(Array,Answers,CompactMode,ShowBoth) -- To display the list generated by GatherClasses, by class orginization
|
---|
46 | ;"DoSetClass(Array,Answers,List) -- add ClassIEN to field .09 (VA DRUG CLASS) in file TMG FDA IMPORT COMPILED
|
---|
47 | ;"ShowInfo(Array,Answers,Num) -- show more about the specified drug
|
---|
48 | ;"DoRemove(Array,Answers,List,ByTradeName,FromECode,Cancelled) -- remove entries from Array and Answers
|
---|
49 | ;"DoLookup(Array,Answers,Classes,List,Cancelled) -- Manually lookup class for entries
|
---|
50 | ;"WriteClass(ClassIEN,Array,Answers,List) -- do the actual setting of the class
|
---|
51 | ;"ClrAnswers(Array,Answers,List,FromECode,UndoArray) -- remove entries from Array and Answers array.
|
---|
52 | ;"VerifyWrite(ClassName,Answers,List) -- display list of entries and ask user if class set is desired
|
---|
53 | ;"Disp2List(Answers,List,ByTradeName,ShowBoth) -- interfact to DisplayList function, to allow easier input.
|
---|
54 | ;"DisplayList(Answers,List,Piece,AlsoPiece) -- display list of entries
|
---|
55 | ;"SimilarPick(Array,Answers,List,Cancelled) -- allow user to specify that a set of numbers should use the same class as
|
---|
56 | ;"FindPick(Array,Answers,List,FromECode,Cancelled) -- allow user to look up a drug already in the VistA database, and use the
|
---|
57 |
|
---|
58 | ;"GatherEmpties(Array) -- scan through all records in TMG FDA IMPORT COMPILED, and create an array of
|
---|
59 | ;"ShowEList(Array,Answers,CompactMode,ByTradeName,ShowBoth) -- display the list of 'Empty' classes generated by GatherEmpties
|
---|
60 | ;"ClassEClasses(Array) -- allow user to classify drugs with empty (none) VA Drug Class
|
---|
61 | ;"DoGuess(Array,Answers,EntryList,Cancelled,Classes) -- a wrapper for DoEGuess
|
---|
62 | ;"DoEGuess(Array,Answers,List,ByTradeName,ShowBoth,Cancelled,FormECode,Classes) - guess as classification for entries.
|
---|
63 | ;"GGuessList(Array,Answers,List,Results) -- gather a guessing list of possible classes for each entry in List
|
---|
64 | ;"AutoEClassification(Array) -- attempt to automatically classiffy drugs that have not potential match
|
---|
65 | ;"Guess1(Array,Answers,List) -- return a guessed class, IF there is only one possible guess.
|
---|
66 | ;"DoSetTools(Array,Answers,List,EntryS,ByTradeName,ShowBoth) -- tools for managing SETS to be worked on (List)
|
---|
67 | ;"MkSrchList(Answers,List,ByTradeName,ShowBoth) -- search through Answers for string
|
---|
68 |
|
---|
69 | ;"=======================================================================
|
---|
70 | ;"=======================================================================
|
---|
71 |
|
---|
72 | ;"This block of code will deal with establishing the VA DRUG CLASS
|
---|
73 |
|
---|
74 | Menu
|
---|
75 | ;"Purpose: Provide menu to entry points of main routines
|
---|
76 |
|
---|
77 | new Menu,UsrSlct
|
---|
78 | set Menu(0)="Pick Option for Filling Import Drug Class (3A)"
|
---|
79 | set Menu(1)="Set class by Linked VA PRODUCT entry if Possible"_$char(9)_"FillByLink"
|
---|
80 | set Menu(2)="Fill DRUG class for IMPORT entries from best guess."_$char(9)_"FillFromVADrugClass"
|
---|
81 | set Menu(3)="Fill DRUG class for IMPORT entries with no guess."_$char(9)_"HandleEmptyClasses"
|
---|
82 | set Menu(4)="Use SELECTOR to browse and edit IMPORT classes"_$char(9)_"SelEdClasses"
|
---|
83 | set Menu(5)="Pick just 1 import and edit drug Class"_$char(9)_"Edit1"
|
---|
84 | set Menu(6)="Pick imports to SKIP based on their drug CLASS"_$char(9)_"PickSkips"
|
---|
85 | set Menu("P")="Prev Stage"_$char(9)_"Prev"
|
---|
86 | set Menu("N")="Next Stage"_$char(9)_"Next"
|
---|
87 |
|
---|
88 | MC1
|
---|
89 | write #
|
---|
90 | set UsrSlct=$$Menu^TMGUSRIF(.Menu,"^")
|
---|
91 | if UsrSlct="^" goto MCDone
|
---|
92 | if UsrSlct=0 set UsrSlct=""
|
---|
93 |
|
---|
94 | if UsrSlct="FillFromVADrugClass" do FillFromVADrugClass goto MC1
|
---|
95 | if UsrSlct="HandleEmptyClasses" do HandleEmptyClasses goto MC1
|
---|
96 | if UsrSlct="FillByLink" do FillByLink goto MC1
|
---|
97 | if UsrSlct="SelEdClasses" do SelEdClasses goto MC1
|
---|
98 | if UsrSlct="Edit1" do Ed1Classes goto MC1
|
---|
99 |
|
---|
100 | if UsrSlct="PickSkips" do PickSkips^TMGNDF3B goto MC1
|
---|
101 |
|
---|
102 | if UsrSlct="Prev" goto Menu^TMGNDF2H ;"quit can occur from there...
|
---|
103 | if UsrSlct="Next" goto Menu^TMGNDF3C ;"quit can occur from there...
|
---|
104 |
|
---|
105 | goto MC1
|
---|
106 | MCDone
|
---|
107 | quit
|
---|
108 |
|
---|
109 |
|
---|
110 |
|
---|
111 | FillFromVADrugClass
|
---|
112 | ;"Purpose: to provide a high-level entry point for ensuring that all the entries
|
---|
113 | ;" in TMG FDA IMPORT COMPILED have a value for field VA DRUG CLASS
|
---|
114 |
|
---|
115 | write #
|
---|
116 | write "======================================================",!
|
---|
117 | write "Link FDA import entries to proper VA DRUG CLASS",!
|
---|
118 | write "======================================================",!,!
|
---|
119 |
|
---|
120 | ;"do FillByLink ;"see if any easy links are all ready to go...
|
---|
121 | new list
|
---|
122 | new % set %=2
|
---|
123 | if $data(^TMG("TMP","DRUGS NEEDING CLASS"))>0 do
|
---|
124 | . write !,"Infomation from a prior run found.",!
|
---|
125 | . write "Use older info (recommended only during the same import cycle)"
|
---|
126 | . set %=1 do YN^DICN write !
|
---|
127 | . if %=1 do
|
---|
128 | . . write "Loading... "
|
---|
129 | . . merge list=^TMG("TMP","DRUGS NEEDING CLASS")
|
---|
130 | . . write "Done.",!
|
---|
131 | if (%=-1) goto FDCDone
|
---|
132 | if (%=2) do
|
---|
133 | . write "Scanning drug file...",!
|
---|
134 | . do GatherClasses(.list)
|
---|
135 | . do AutoEClassification(.list)
|
---|
136 | do VerifyClasses(.list)
|
---|
137 |
|
---|
138 | set %=1
|
---|
139 | write "Save information for future use"
|
---|
140 | do YN^DICN write !
|
---|
141 | if %=1 do SaveList(.list)
|
---|
142 |
|
---|
143 | FDCDone write "Done.",!
|
---|
144 | quit
|
---|
145 |
|
---|
146 |
|
---|
147 | SaveList(List)
|
---|
148 | ;"Purpse: save list
|
---|
149 | kill ^TMG("TMP","DRUGS NEEDING CLASS")
|
---|
150 | merge ^TMG("TMP","DRUGS NEEDING CLASS")=list
|
---|
151 |
|
---|
152 | quit
|
---|
153 |
|
---|
154 |
|
---|
155 | FillByLink
|
---|
156 | ;"Purpose: Fill Drug class for any drug that has an empty class, but points to
|
---|
157 | ;" an entry in 50.68
|
---|
158 |
|
---|
159 | write "Setting DRUG CLASS of imports from VA PRODUCT link, if possible.",!
|
---|
160 | new count set count=0
|
---|
161 | new Itr,IEN
|
---|
162 | set IEN=$$ItrInit^TMGITR(22706.9,.Itr)
|
---|
163 | do PrepProgress^TMGITR(.Itr,20,0,"IEN")
|
---|
164 | if IEN'="" for do quit:($$ItrNext^TMGITR(.Itr,.IEN)'>0)
|
---|
165 | . if $piece($get(^TMG(22706.9,IEN,1)),"^",4)=1 quit ;"1=SKIP
|
---|
166 | . new CurClass,newClass
|
---|
167 | . set CurClass=+$piece($get(^TMG(22706.9,IEN,1)),"^",5)
|
---|
168 | . if CurClass=0 do
|
---|
169 | . . new vapIEN set vapIEN=+$piece($get(^TMG(22706.9,IEN,2,1,0)),"^",1)
|
---|
170 | . . if vapIEN=0 quit
|
---|
171 | . . set newClass=+$piece($get(^PSDNF(50.68,vapIEN,3)),"^",1)
|
---|
172 | . . if newClass'=0 do
|
---|
173 | . . . ;"write IEN," can be loaded with class: ",newClass,!
|
---|
174 | . . . new TMGFDA,TMGMSG
|
---|
175 | . . . set TMGFDA(22706.9,IEN_",",.09)=newClass
|
---|
176 | . . . ;"set $piece(^TMG(22706.9,IEN,1),"^",5)=newClass
|
---|
177 | . . . do FILE^DIE("K","TMGFDA","TMGMSG")
|
---|
178 | . . . do ShowIfDIERR^TMGDEBUG(.TMGMSG)
|
---|
179 | . . . set count=count+1
|
---|
180 | do ProgressDone^TMGITR(.Itr)
|
---|
181 |
|
---|
182 | write count," entries modified.",!
|
---|
183 | do PressToCont^TMGUSRIF
|
---|
184 | quit
|
---|
185 |
|
---|
186 |
|
---|
187 | ShowClasses
|
---|
188 | ;"Purpose: to display all the drug classes, in a heirarchy.
|
---|
189 |
|
---|
190 | new Array
|
---|
191 | do GetClasses(.Array)
|
---|
192 | do ArrayDump^TMGDEBUG("Array")
|
---|
193 | quit
|
---|
194 |
|
---|
195 |
|
---|
196 | GetClasses(Array)
|
---|
197 | ;"Purpose: To get an array back the shows the heirarchy of all VA DRUG classes
|
---|
198 | ;" Array -- PASS BY REFERENCE, and OUT PARAMETER
|
---|
199 | ;"Output: Array will be filled as follows:
|
---|
200 | ;" Array(GGF-IEN)=e.g. ""AD000^ANTIDOTES,DETERRENTS AND POISON CONTROL"
|
---|
201 | ;" Array(GGF-IEN,GF-IEN)=e.g. "AD100^ALCOHOL DETERRENTS"
|
---|
202 | ;" Array(GGF-IEN,GF-IEN,F-IEN)=e.g. "AD150^ALCOHOL DETERRENTS -- GENERAL TYPE 1"
|
---|
203 | ;" Array(GGF-IEN,GF-IEN,F-IEN,IEN)=e.g. "AD152^ALCOHOL DETERRENTS -- GENERAL TYPE 1b"
|
---|
204 | ;" Note: prior entries in Array are NOT killed.
|
---|
205 | ;"Results: none
|
---|
206 |
|
---|
207 | new IEN
|
---|
208 | set IEN=$order(^PS(50.605,0))
|
---|
209 | if +IEN>0 for do quit:(+IEN'>0)
|
---|
210 | . do GetClHeirarchy(IEN,.Array)
|
---|
211 | . set IEN=$order(^PS(50.605,IEN))
|
---|
212 |
|
---|
213 | quit
|
---|
214 |
|
---|
215 | KillIntro(Array)
|
---|
216 | ;"Purpose: One of the drug classes is AA000, INTRODUCTION. This will kill this
|
---|
217 | ;" entry from the Array
|
---|
218 | ;"Input: Array -- Array, as created by GetClasses
|
---|
219 |
|
---|
220 | new IEN
|
---|
221 | set IEN=$order(Array(""))
|
---|
222 | if IEN'="" for do quit:(IEN="")
|
---|
223 | . new temp set temp=IEN
|
---|
224 | . set IEN=$order(Array(IEN))
|
---|
225 | . if $piece(Array(temp),"^",1)="AA000" kill Array(temp)
|
---|
226 |
|
---|
227 | quit
|
---|
228 |
|
---|
229 |
|
---|
230 | GetClHeirarchy(ClassIEN,Array)
|
---|
231 | ;"Purpose: To get an array back the shows the heirarchy of one VA DRUG class
|
---|
232 | ;"Input: ClassIEN -- the IEN in file VA DRUG CLASS (50.605)
|
---|
233 | ;" Array -- PASS BY REFERENCE, and OUT PARAMETER
|
---|
234 | ;"Output: Array will be filled as follows:
|
---|
235 | ;" Array(GGF-IEN)=e.g. ""AD000^ANTIDOTES,DETERRENTS AND POISON CONTROL"
|
---|
236 | ;" Array(GGF-IEN,GF-IEN)=e.g. "AD100^ALCOHOL DETERRENTS"
|
---|
237 | ;" Array(GGF-IEN,GF-IEN,F-IEN)=e.g. "AD150^ALCOHOL DETERRENTS -- GENERAL TYPE 1"
|
---|
238 | ;" Array(GGF-IEN,GF-IEN,F-IEN,IEN)=e.g. "AD152^ALCOHOL DETERRENTS -- GENERAL TYPE 1b"
|
---|
239 | ;" Note: prior entries in Array are NOT killed.
|
---|
240 | ;"Results: none
|
---|
241 |
|
---|
242 | new ParentClass,indent
|
---|
243 | new ResultArray
|
---|
244 |
|
---|
245 | if (+ClassIEN'=0) for do quit:(+ClassIEN=0)
|
---|
246 | . new tempArray
|
---|
247 | . if $data(ResultArray) do
|
---|
248 | . . new temp merge temp=ResultArray
|
---|
249 | . . kill ResultArray
|
---|
250 | . . merge ResultArray(ClassIEN)=temp
|
---|
251 | . new Curnode,Code,Name,CodeNum
|
---|
252 | . set Curnode=$get(^PS(50.605,ClassIEN,0))
|
---|
253 | . set Code=$piece(Curnode,"^",1)
|
---|
254 | . set CodeNum=+$extract(Code,3,5)
|
---|
255 | . set Name=$piece(Curnode,"^",2)
|
---|
256 | . set tempArray(ClassIEN)=Code_"^"_Name
|
---|
257 | . set ParentClass=$piece(Curnode,"^",3)
|
---|
258 | . if ParentClass=ClassIEN set ParentClass=0 ;"I found at least one circular ref.
|
---|
259 | . if (ParentClass=0)&(CodeNum'=0) do
|
---|
260 | . . write IEN,": ",Name," appears broken: ",Code," Will fix...",!
|
---|
261 | . . do Fix1Class(IEN)
|
---|
262 | . set ClassIEN=ParentClass
|
---|
263 | . merge ResultArray=tempArray
|
---|
264 |
|
---|
265 | merge Array=ResultArray
|
---|
266 |
|
---|
267 | quit
|
---|
268 |
|
---|
269 |
|
---|
270 | FixClasses
|
---|
271 | ;"Purpose: I have found a few instances in the VA DRUG CLASS file where records are
|
---|
272 | ;" not properly linked into the heirarchy. They either give themselves as
|
---|
273 | ;" their own parents, or list no parent, though one should be present.
|
---|
274 | ;" If any such entries exist, this function will fix them.
|
---|
275 |
|
---|
276 | new IEN
|
---|
277 | set IEN=$order(^PS(50.605,0))
|
---|
278 | if +IEN>0 for do quit:(+IEN'>0)
|
---|
279 | . new Curnode,Code,CodeNum,Name
|
---|
280 | . set Curnode=$get(^PS(50.605,IEN,0))
|
---|
281 | . set Code=$piece(Curnode,"^",1)
|
---|
282 | . set CodeNum=+$extract(Code,3,5)
|
---|
283 | . set Name=$piece(Curnode,"^",2)
|
---|
284 | . set ParentClass=+$piece(Curnode,"^",3)
|
---|
285 | . if ParentClass=IEN set ParentClass=0
|
---|
286 | . if (ParentClass=0)&(CodeNum'=0) do
|
---|
287 | . . write IEN,": ",Name," appears broken: ",Code," Will fix...",!
|
---|
288 | . . do Fix1Class(IEN)
|
---|
289 | . set IEN=$order(^PS(50.605,IEN))
|
---|
290 |
|
---|
291 | quit
|
---|
292 |
|
---|
293 |
|
---|
294 | Fix1Class(IEN)
|
---|
295 | ;"Purpose: To fix the parent entry of one erroneous class, in the VA DRUG CLASS heirarchy.
|
---|
296 | ;"Input: IEN -- the record number in VA DRUG CLASS to fix
|
---|
297 | ;"Output: the database will be changed
|
---|
298 | ;"Results: none.
|
---|
299 |
|
---|
300 | new Curnode,Code,CodeNum,ParentCode
|
---|
301 | new ParentClass,NewParentClass
|
---|
302 |
|
---|
303 | set Curnode=$get(^PS(50.605,IEN,0))
|
---|
304 | set Code=$piece(Curnode,"^",1)
|
---|
305 | set ParentClass=+$piece(Curnode,"^",3)
|
---|
306 |
|
---|
307 | set ParentCode=$extract(Code,1,2)_"000"
|
---|
308 | set NewParentClass=+$order(^PS(50.605,"B",ParentCode,""))
|
---|
309 |
|
---|
310 | if NewParentClass'=0 do
|
---|
311 | . set $piece(^PS(50.605,IEN,0),"^",3)=NewParentClass
|
---|
312 |
|
---|
313 | quit
|
---|
314 |
|
---|
315 |
|
---|
316 | GetInfo(IEN,Array)
|
---|
317 | ;"Purpose: to fill record from VA DRUG CLASS file into a usable array
|
---|
318 | ;"Input: IEN -- the IEN from VA DRUG CLASS file to get info for
|
---|
319 | ;" Array -- PASS BY REFERENCE, to be filled in with data. Old data is KILLED.
|
---|
320 | ;"Output: Array is filled with data:
|
---|
321 | ;" Array("NAME")=name
|
---|
322 | ;" Array("CODE")=code
|
---|
323 | ;" Array("PARENT IEN")=parent IEN
|
---|
324 | ;"Result: none
|
---|
325 |
|
---|
326 | new Curnode
|
---|
327 | kill Array
|
---|
328 |
|
---|
329 | set Curnode=$get(^PS(50.605,IEN,0))
|
---|
330 | set Array("CODE")=$piece(Curnode,"^",1)
|
---|
331 | set Array("NAME")=$piece(Curnode,"^",2)
|
---|
332 | set Array("PARENT IEN")=+$piece(Curnode,"^",3)
|
---|
333 |
|
---|
334 | quit
|
---|
335 |
|
---|
336 | ;"----------------------
|
---|
337 | TestSelectClass
|
---|
338 |
|
---|
339 | new Array,IEN
|
---|
340 |
|
---|
341 | do GetClasses(.Array)
|
---|
342 | do KillIntro(.Array)
|
---|
343 | set IEN=$$SelectClass(.Array,1)
|
---|
344 |
|
---|
345 | write "IEN=",IEN,!
|
---|
346 |
|
---|
347 | quit
|
---|
348 |
|
---|
349 |
|
---|
350 | SelectClass(Array,AskSub)
|
---|
351 | ;"Purpose: Allow user to browse Array and select drug class
|
---|
352 | ;"Input: Array -- An Array containing Drug Class info, as created by GetClasses()
|
---|
353 | ;" AskSub -- OPTIONAL. If 1, user is asked if they want to browse sub-class (auto otherwise)
|
---|
354 | ;"Results: Returns IEN of selected class, or 0 if not selected
|
---|
355 |
|
---|
356 | new IEN,done
|
---|
357 | set done=0
|
---|
358 | set AskSub=$get(AskSub,0) ;"default=automatic browse of subclasses
|
---|
359 | new pRef set pRef=$name(Array)
|
---|
360 |
|
---|
361 | for do quit:(done=1)
|
---|
362 | . set IEN=$$SelectFrom(pRef)
|
---|
363 | . if IEN=0 do quit
|
---|
364 | . . if $qlength(pRef)>0 do
|
---|
365 | . . . set pRef=$name(@pRef,$qlength(pRef)-1)
|
---|
366 | . . else set done=1
|
---|
367 | . new skipSub set skipSub=0
|
---|
368 | . if (AskSub=1)&($data(Array(IEN))>1) do
|
---|
369 | . . new %
|
---|
370 | . . write "Browse sub-categories"
|
---|
371 | . . set %=1 do YN^DICN write !
|
---|
372 | . . if %'=1 set skipSub=1
|
---|
373 | . if ($data(Array(IEN))>1)&(skipSub=0) set pRef=$name(@pRef@(IEN))
|
---|
374 | . else do
|
---|
375 | . . new info,%
|
---|
376 | . . do GetInfo(IEN,.info)
|
---|
377 | . . write "Select: ",info("NAME")
|
---|
378 | . . set %=1 do YN^DICN write !
|
---|
379 | . . if %=1 set done=1
|
---|
380 |
|
---|
381 | quit IEN
|
---|
382 |
|
---|
383 |
|
---|
384 | Search4Class()
|
---|
385 | ;"Purpose: to use Fileman to search for a drug class
|
---|
386 | ;"Results: Returns IEN of selected class, or 0 if not selected
|
---|
387 |
|
---|
388 | new DIC,X,Y
|
---|
389 | set DIC=50.605
|
---|
390 | set DIC(0)="AEQM"
|
---|
391 | set DIC("A")="Enter a DRUG CLASS to search for // "
|
---|
392 | do ^DIC write !
|
---|
393 | new result set result=0
|
---|
394 | if +Y>0 set result=+Y
|
---|
395 | quit result
|
---|
396 |
|
---|
397 |
|
---|
398 | SelectFrom(pRef)
|
---|
399 | ;"Purpose: Allow user to browse Array and select drug class
|
---|
400 | ;"Input: pRef -- NAME OF part of array to browse, containing Drug Class info
|
---|
401 | ;"Results: Returns IEN of selected class, or 0 if not selected
|
---|
402 |
|
---|
403 | new tempList,Items,Answers,name
|
---|
404 | new i,count
|
---|
405 | new result set result=0
|
---|
406 |
|
---|
407 | set i=""
|
---|
408 | for set i=$order(@pRef@(i)) quit:(+i'>0) do
|
---|
409 | . set name=$piece($get(@pRef@(i)),"^",2) quit:(name="")
|
---|
410 | . new class set class=$piece($get(@pRef@(i)),"^",1) quit:(class="")
|
---|
411 | . set tempList(name)=i
|
---|
412 | . set tempList(name,class)=""
|
---|
413 |
|
---|
414 | set count=1
|
---|
415 | set name=$order(tempList(""))
|
---|
416 | if name'="" for do quit:(name="")
|
---|
417 | . set Items(count)=name
|
---|
418 | . set Items(count,"CLASS")=$order(tempList(name,""))
|
---|
419 | . set Answers(count)=$get(tempList(name))
|
---|
420 | . set count=count+1
|
---|
421 | . set name=$order(tempList(name))
|
---|
422 |
|
---|
423 | new done set done=0
|
---|
424 | for do quit:(done=1)
|
---|
425 | . new name set name=$piece($get(@pRef),"^",2)
|
---|
426 | . if name="" set name="Major Drug Classes"
|
---|
427 | . write !,"Select from one of these ",name,!
|
---|
428 | . set i=$order(Items(0))
|
---|
429 | . if +i>0 for do quit:(+i'>0)
|
---|
430 | . . write i,". "
|
---|
431 | . . new class set class=$get(Items(i,"CLASS"))
|
---|
432 | . . if class'="" write class,": "
|
---|
433 | . . write Items(i),!
|
---|
434 | . . set i=$order(Items(i))
|
---|
435 | . write !,"Enter # of Drug Class to Pick (^ to Backup, S to Search): ^// "
|
---|
436 | . new input
|
---|
437 | . read input:$get(DTIME,3600),!
|
---|
438 | . set input=$$UP^XLFSTR(input)
|
---|
439 | . if input="" set input="^"
|
---|
440 | . if input="S" do quit:(done=1)
|
---|
441 | . . new UsrIEN set UsrIEN=$$Search4Class
|
---|
442 | . . if UsrIEN>0 set result=UsrIEN,done=1
|
---|
443 | . if input="?" do quit
|
---|
444 | . . do LookupHelp()
|
---|
445 | . . new temp read "-- Press ENTER to continue --",temp:$get(DTIME,3600),!
|
---|
446 | . if input="" set input="^"
|
---|
447 | . if input="^" set done=1 quit
|
---|
448 | . if +input=input do
|
---|
449 | . . set result=Answers(input)
|
---|
450 | . . set done=1
|
---|
451 | . else do
|
---|
452 | . . new temp set temp=$$SrchItems(input,.Items)
|
---|
453 | . . if +temp>0 set result=Answers(temp),done=1
|
---|
454 | . . else write "Invalid input. Please try again.",!
|
---|
455 |
|
---|
456 | quit result
|
---|
457 |
|
---|
458 |
|
---|
459 | SrchItems(input,Items)
|
---|
460 | ;"Purpose: to Search through Items array for input, and return index number if found
|
---|
461 | ;"Input: input -- the user input -- may be a partial match for the name.
|
---|
462 | ;" Items -- PASS BY REFERENCE -- Input array, as created in SelectFrom()
|
---|
463 | ;" Items(1)=value
|
---|
464 | ;" Items(2)=value
|
---|
465 | ;" Items(3)=value
|
---|
466 | ;"
|
---|
467 | ;"Result: returns index of the FIRST match
|
---|
468 |
|
---|
469 | new result set result=""
|
---|
470 | new done set done=0
|
---|
471 | new value
|
---|
472 | set input=$$UP^XLFSTR($get(input))
|
---|
473 | new i set i=$order(Items(""))
|
---|
474 | if i'="" for do quit:(i="")!(done=1)
|
---|
475 | . set value=$get(Items(i))
|
---|
476 | . set value=$extract(value,1,$length(input))
|
---|
477 | . if input=value set result=i,done=1
|
---|
478 | . set i=$order(Items(i))
|
---|
479 |
|
---|
480 | quit result
|
---|
481 |
|
---|
482 |
|
---|
483 | ;"=============================================
|
---|
484 | GatherClasses(Array)
|
---|
485 | ;"Purpose: To scan through all records in TMG FDA IMPORT COMPILED, and create an array of
|
---|
486 | ;" possible entries for VA DRUG CLASS
|
---|
487 | ;"Input: Array -- PASS BY REFERENCE, and OUT PARAMETER
|
---|
488 | ;"Output: Array will be filled as follows:
|
---|
489 | ;" Array("POSS MATCH",ClassName,TMGTradename,DrugIEN)=ClassIEN^ClassCode
|
---|
490 | ;" Array("POSS MATCH",ClassName,TMGTradename,DrugIEN)=ClassIEN^ClassCode
|
---|
491 | ;" Array(DrugIEN,"?")=""
|
---|
492 | ;" Array("?",DrugIEN)=""
|
---|
493 | ;"Results: none
|
---|
494 | ;"Note: if SKIP THIS RECORD field is set, then record will be skipped.
|
---|
495 | ;" Also, if there is already an antry for the VA DRUG CLASS field, then will be skipped.
|
---|
496 |
|
---|
497 | write "Gathering information about entries with no current DRUG CLASS",!
|
---|
498 | new Itr,IEN
|
---|
499 | set IEN=$$ItrInit^TMGITR(22706.9,.Itr)
|
---|
500 | do PrepProgress^TMGITR(.Itr,20,0,"IEN")
|
---|
501 | if IEN'="" for do quit:($$ItrNext^TMGITR(.Itr,.IEN)'>0)
|
---|
502 | . if $piece($get(^TMG(22706.9,IEN,1)),"^",4)=1 quit ;"1=SKIP
|
---|
503 | . new PriorClass set PriorClass=+$piece($get(^TMG(22706.9,IEN,1)),"^",5)
|
---|
504 | . if PriorClass>0 quit
|
---|
505 | . new numRecs set numRecs=+$piece($get(^TMG(22706.9,IEN,3,0)),"^",4) ;"VA PRODUCT POSS MATCH
|
---|
506 | . if numRecs=0 quit
|
---|
507 | . do GetPossClass(IEN,.Array)
|
---|
508 | do ProgressDone^TMGITR(.Itr)
|
---|
509 |
|
---|
510 | quit
|
---|
511 |
|
---|
512 |
|
---|
513 | GetPossClass(IEN,Array)
|
---|
514 | ;"Purpose: To gather, from a list of possible drug matches, a list of possible VA DRUG CLASSESS
|
---|
515 | ;"Input: IEN -- IEN from TMG FDA IMPORT COMPILED (22706.9) file, to check.
|
---|
516 | ;" Array -- PASS BY REFERENCE. An OUT PARAMETER
|
---|
517 | ;"Output: Array filled as follows:
|
---|
518 | ;" Array("POSS MATCH",ClassName,TMGTradename,DrugIEN)=ClassIEN^ClassCode^DrugDose
|
---|
519 | ;" Array("POSS MATCH",ClassName,TMGTradename,DrugIEN)=ClassIEN^ClassCode^DrugDose
|
---|
520 | ;" Array(DrugIEN,"?")=""
|
---|
521 | ;" Array("?",DrugIEN)=""
|
---|
522 |
|
---|
523 | new subIEN
|
---|
524 | new TMGTradename set TMGTradename=$piece($get(^TMG(22706.9,IEN,0)),"^",4)
|
---|
525 | set subIEN=$order(^TMG(22706.9,IEN,3,0))
|
---|
526 | new Dose set Dose=$piece($get(^TMG(22706.9,IEN,0)),"^",2)
|
---|
527 | new Units set Units=$piece($get(^TMG(22706.9,IEN,0)),"^",3)
|
---|
528 |
|
---|
529 | if +subIEN>0 for do quit:(+subIEN'>0)
|
---|
530 | . new DrugIEN set DrugIEN=+$get(^TMG(22706.9,IEN,3,subIEN,0))
|
---|
531 | . set subIEN=$order(^TMG(22706.9,IEN,3,subIEN))
|
---|
532 | . if DrugIEN=0 set Array(IEN,"?")="" quit
|
---|
533 | . new ClassIEN set ClassIEN=+$get(^PSNDF(50.68,DrugIEN,3))
|
---|
534 | . if ClassIEN=0 set Array(IEN,"??")="" quit
|
---|
535 | . new Info
|
---|
536 | . do GetInfo(ClassIEN,.Info)
|
---|
537 | . set Array("POSS MATCH",$get(Info("NAME")),TMGTradename,IEN)=ClassIEN_"^"_$get(Info("CODE"))_"^"_Dose_" "_Units
|
---|
538 | else do
|
---|
539 | . set Array(IEN,"?")=""
|
---|
540 | . set Array("?",IEN)=""
|
---|
541 |
|
---|
542 | quit
|
---|
543 |
|
---|
544 |
|
---|
545 |
|
---|
546 | VerifyClasses(Array)
|
---|
547 | ;"Purpose: To allow user to accept or reject proposed drug class for new drugs.
|
---|
548 | ;"Input: Array -- PASS BY REFERENCE the array generated by GatherClasses
|
---|
549 | ;"Output: Database is changed, by adding data to field .09 (VA DRUG CLASS)
|
---|
550 | ;"Results: none
|
---|
551 |
|
---|
552 | new done set done=0
|
---|
553 | new input set input="R"
|
---|
554 | new Answers
|
---|
555 | new CompactMode set CompactMode=1 ;" (list display mode: 1=compact, 0=verb
|
---|
556 | new ShowBoth set ShowBoth=1
|
---|
557 | new ByIngred set ByIngred=0
|
---|
558 | new EntryList,EntryS,Fn,Cancelled
|
---|
559 | set Cancelled=0
|
---|
560 |
|
---|
561 | new Classes
|
---|
562 | do GetClasses(.Classes)
|
---|
563 | do KillIntro(.Classes)
|
---|
564 |
|
---|
565 | for do quit:(done=1)
|
---|
566 | . if input="R" do
|
---|
567 | . . write !!
|
---|
568 | . . write "--------------------------------------------------",!
|
---|
569 | . . write "Specify which drugs are in the correct DRUG CLASS",!
|
---|
570 | . . write "--------------------------------------------------",!
|
---|
571 | . . do ShowList(.Array,.Answers,CompactMode,ShowBoth,ByIngred)
|
---|
572 | . . do SaveList(.Array) ;"1/31/07 I got tired of loosing work after crashes, so will save each time...
|
---|
573 | . . write "--------------------------------------------------",!
|
---|
574 | . . write "Specify which drugs are in the correct DRUG CLASS",!
|
---|
575 | . . write "--------------------------------------------------",!
|
---|
576 | . . write " R to refresh, L lookup, ? for instructions, U to undo, V saVe",!
|
---|
577 | . . write " X remove from list, N iNfo, S similar, F find",!
|
---|
578 | . . write " C turn compact display ",$select((CompactMode=1):"OFF",1:"ON"),", B turn show Both names ",$select((ShowBoth=1):"OFF",1:"ON"),!
|
---|
579 | . . write " I turn sort by Ingredients ",$select((ByIngred=1):"OFF",1:"ON")," G Guess class",!
|
---|
580 | . . if $get(EntryS)'="" write " Current SET #'s: ",EntryS,", D to delete SET",!
|
---|
581 | . . write " # or #-# or #,#-#,# etc., ^ done, ",!
|
---|
582 | . write "Enter number(s) to ACCEPT drug class (or codes listed above): ^//"
|
---|
583 | . read input:$get(DTIME,3600),!
|
---|
584 | . if input="" set input="^"
|
---|
585 | . set input=$$UP^XLFSTR(input)
|
---|
586 | . if input="^" set done=1 quit
|
---|
587 | . else if (input="?") do
|
---|
588 | . . do ShowInstructions()
|
---|
589 | . . set input="R"
|
---|
590 | . else if input="N" do quit
|
---|
591 | . . read "Enter number of drug to get info about: ^//",input,!
|
---|
592 | . . do ShowInfo(.Array,.Answers,+input)
|
---|
593 | . . set input="R"
|
---|
594 | . else if input="C" do quit
|
---|
595 | . . set CompactMode='CompactMode
|
---|
596 | . . set input="R"
|
---|
597 | . else if input="D" do quit;"---- delete set
|
---|
598 | . . kill EntryList,EntryS
|
---|
599 | . . set input="R"
|
---|
600 | . else if input="U" do quit
|
---|
601 | . . do Undo(.Array)
|
---|
602 | . . set input="R"
|
---|
603 | . else if input="V" do quit
|
---|
604 | . . do SaveList(.Array)
|
---|
605 | . . write "List Saved.",!
|
---|
606 | . else if input="I" do quit
|
---|
607 | . . set ByIngred='ByIngred
|
---|
608 | . . set input="R"
|
---|
609 | . else if input="B" do quit
|
---|
610 | . . set ShowBoth='ShowBoth
|
---|
611 | . . set input="R"
|
---|
612 | . else if input="L" do quit;"<----- Lookup manually
|
---|
613 | . . set Fn="do DoLookup(.Array,.Answers,.Classes,.EntryList,0,.Cancelled)"
|
---|
614 | . . do XMenuOption("lookup manually",Fn,"LookupHelp",.EntryList,.EntryS)
|
---|
615 | . else if input="G" do quit;" ---- guess drugs
|
---|
616 | . . set Fn="do DoGuess(.Array,.Answers,.EntryList,.Cancelled,.Classes)"
|
---|
617 | . . do XMenuOption("Guess Class",Fn,"LookupHelp",.EntryList,.EntryS)
|
---|
618 | . else if input="S" do quit
|
---|
619 | . . set Fn="do SimilarPick(.Array,.Answers,.EntryList,.Cancelled)"
|
---|
620 | . . do XMenuOption("classify by SIMILARITY","do SimilarPick(.Array,.Answers,.EntryList)","LookupHelp",.EntryList,.EntryS)
|
---|
621 | . else if input="X" do quit
|
---|
622 | . . set Fn="do DoRemove(.Array,.Answers,.EntryList,0,0,.Cancelled)"
|
---|
623 | . . do XMenuOption("REMOVE from list",Fn,"SimHelp",.EntryList,.EntryS)
|
---|
624 | . else if input="F" do quit
|
---|
625 | . . set Fn="do FindPick(.Array,.Answers,.EntryList,0,.Cancelled)"
|
---|
626 | . . do XMenuOption("classify by FINDING a similar drug",Fn,"FindHelp",.EntryList,.EntryS)
|
---|
627 | . else do ;"default is ACCEPT
|
---|
628 | . . set Cancelled=0
|
---|
629 | . . set Fn="do DoSetClass(.Array,.Answers,.EntryList)"
|
---|
630 | . . do XMenuOption("",Fn,"",.EntryList,.EntryS)
|
---|
631 | quit
|
---|
632 |
|
---|
633 | XMenuOption(Prompt,FnStr,HlpFn,EntryList,EntryS)
|
---|
634 | ;"Purpose: To carry out the various menu functions
|
---|
635 | ;"Input: Prompt: the message to use to prompt user to enter numbers etc.
|
---|
636 | ;" "Enter the Number(s) to" will be automatically provided
|
---|
637 | ;" and ": (? help) ^// " will be added at end
|
---|
638 | ;" FnStr: -- code to execute, e.g. "do DoLookup(.Array,.Answers,.Classes,.EntryList)"
|
---|
639 | ;" HlpFn: e.g. FindHelp, SimHelp, LookupHelp, etc Don't add () to name
|
---|
640 | ;" EntryList -- PASS BY REFERENCE
|
---|
641 | ;" EntryS -- PASS BY REFERENCE. a string showing current set as a string
|
---|
642 | ;"Note: makes use of global scope of 'input', and 'CompactMode', 'Cancelled'
|
---|
643 | ;"Result: none.
|
---|
644 |
|
---|
645 | if $get(EntryS)="" do quit:(valid=0)
|
---|
646 | . if Prompt'="" do
|
---|
647 | XMO1 . . write "Enter the Number(s) to ",Prompt,": (? help) ^// "
|
---|
648 | . . read input,!
|
---|
649 | . . if input="?" do goto XMO1
|
---|
650 | . . . new Code set Code="do "_HlpFn_"()"
|
---|
651 | . . . Xecute code
|
---|
652 | . set valid=$$MkMultList^TMGMISC(input,.EntryList)
|
---|
653 | . if valid set EntryS=input
|
---|
654 | Xecute FnStr
|
---|
655 | if CompactMode=1 set input="R"
|
---|
656 | if Cancelled=0 kill EntryList,EntryS
|
---|
657 |
|
---|
658 | quit
|
---|
659 |
|
---|
660 | ShowInstructions()
|
---|
661 | ;"Purpose: to explain the matching proces
|
---|
662 |
|
---|
663 | new temp
|
---|
664 | write !,"Instruction:",!!
|
---|
665 | write "Each drug that is to be added to the VistA database should have a drug CLASS.",!
|
---|
666 | write "This class is used by VistA for drug interaction and drug allergy screening.",!
|
---|
667 | write "As drugs are imported from the FDA database, the program attempts to determine",!
|
---|
668 | write "the class automatically by comparing the drug to other drugs that have already",!
|
---|
669 | write "been classified. This process is far from perfect and often produces incorrect",!
|
---|
670 | write "matches. A knowledgable user (you) must review each of these potential ",!
|
---|
671 | write "classifications and either accept them if accurate, or manually correct them.",!!
|
---|
672 | write "If a match is correct, it may be accepted by simply entering the number of the entry.",!
|
---|
673 | write "Multiple correct entries may be accepted at once by entering a range of numbers,",!
|
---|
674 | write "e.g. 3-18. A list may also be entered, e.g. 3,7,9,15. A combination of these may",!
|
---|
675 | write "also be entered, e.g. 1-20,32-45,50,75-100 etc.",!
|
---|
676 | write !
|
---|
677 | write "The list of drugs to be reviewed can be quite long (i.e. tens of thousands of ",!
|
---|
678 | write "drugs long), so a 'compact' mode is provided. When compact mode is ON, only",!
|
---|
679 | write "the last classifaction grouping is shown. This mode may be turned on or off by",!
|
---|
680 | write "entering 'C'",!
|
---|
681 | write !
|
---|
682 | read " --- Press ENTER to continue --",temp:$get(DTIME,3600),!
|
---|
683 | write #
|
---|
684 | write !,"Instruction (continued):",!!
|
---|
685 | write "Because many drug names may be unfamiliar, one may need to review the details of the",!
|
---|
686 | write "drug entry before being able to classify it. This may be done by typing 'I'. This",!
|
---|
687 | write "makes use of a standard Fileman record inquiry tool. Accept the default answers to",!
|
---|
688 | write "the questions 'STANDARD CAPTIONED OUTPUT?' and 'Include COMPUTED fields?'. The",!
|
---|
689 | write "entry in the file TMG FDA IMPORT COMPILED (a temporary file) will be displayed.",!
|
---|
690 | write "After displaying the info, it will ask to select another entry to display.",!
|
---|
691 | write "Just press enter exit and return to the matching process.",!
|
---|
692 | write !
|
---|
693 | write "A faster way to review the ingredients of drug entries is to turn on the ingredient-",!
|
---|
694 | write "display mode with 'G'. This will display the ingredient list after each drug in",!
|
---|
695 | write "the display.",!
|
---|
696 | write !
|
---|
697 | write "Once one is ready to correct a classification, a variety of tools are provided.",!
|
---|
698 | write "Each tool will first ask for the drug entry or entries that are to be classified.",!
|
---|
699 | write !
|
---|
700 | read " --- Press ENTER to continue --",temp:$get(DTIME,3600),!
|
---|
701 | write #
|
---|
702 | write !,"Instruction (continued):",!!
|
---|
703 | write "The first classification tool is the 'F' (find) command."
|
---|
704 | do FindHelp()
|
---|
705 | read " --- Press ENTER to continue --",temp:$get(DTIME,3600),!
|
---|
706 | write #
|
---|
707 | write !,"Instruction (continued):",!!
|
---|
708 | write "The next classification tool is the 'L' (lookup) command.",!
|
---|
709 | do LookupHelp()
|
---|
710 |
|
---|
711 | read " --- Press ENTER to continue --",temp:$get(DTIME,3600),!
|
---|
712 | write #
|
---|
713 | write !,"Instruction (continued):",!!
|
---|
714 | write "The next tool is the 'S' (similarity) command."
|
---|
715 | do SimHelp()
|
---|
716 |
|
---|
717 | read " --- Press ENTER to continue --",temp:$get(DTIME,3600),!
|
---|
718 | write #
|
---|
719 | write !,"Instruction (continued):",!!
|
---|
720 | write "And lastly entries may simply be removed from the list with the 'X' command.",!
|
---|
721 | write "They may be removed perminantly from consideration for addition to the Vista",!
|
---|
722 | write "database. This is appropriate for a drug that will never be used at your",!
|
---|
723 | write "location. Or, the drug may be just removed from the current work list.",!
|
---|
724 | write "This will leave the drugs unclassified and may cause DANGEROUS drug interactions",!
|
---|
725 | write "or drug allergies to be UNDETECTED when this drug is prescribed for a patient",!
|
---|
726 | write "later",!
|
---|
727 | write !
|
---|
728 | read " --- Press ENTER to continue --",temp:$get(DTIME,3600),!
|
---|
729 |
|
---|
730 | quit
|
---|
731 |
|
---|
732 |
|
---|
733 | LookupHelp()
|
---|
734 | ;"Purpose: Show help for the Lookup functionality
|
---|
735 |
|
---|
736 | write "A list of drug classifications is shown to pick from. The VA DRUG CLASS system",!
|
---|
737 | write "arranges drug classes into a heirarchy. And initially only the highest level",!
|
---|
738 | write "classes are shown. Enter the number of a class to select it. If that class has",!
|
---|
739 | write "subclasses, then these will be shown. Select the subclass, and then verify it.",!
|
---|
740 | write "To backup, press ENTER or ^.",!
|
---|
741 | write !
|
---|
742 | quit
|
---|
743 |
|
---|
744 |
|
---|
745 | FindHelp()
|
---|
746 | ;"Purpose: to show help for the FIND functionality
|
---|
747 |
|
---|
748 | write !
|
---|
749 | write "This command allows one to find a drug already in the VistA database, and use",!
|
---|
750 | write "it's classification for the new drug in question.",!
|
---|
751 | write "For example, if one is asked to classify POTASSIUM GLUCONATE ELIXIR 20 MEQ,",!
|
---|
752 | write "there is a high likelihood that a similar drug already exists, and the matching",!
|
---|
753 | write "process failed to find it. So search for the drug as follows:",!
|
---|
754 | write "Enter drug name with desired DRUG CLASS// potassium gluc <--partial name entered",!
|
---|
755 | write " 1 POTASSIUM GLUCONATE 2.2MEQ TAB",!
|
---|
756 | write " 2 POTASSIUM GLUCONATE 2.6MEQ TAB",!
|
---|
757 | write " 3 POTASSIUM GLUCONATE 20MEQ/15ML (SF) ELIXIR",!
|
---|
758 | write " 4 POTASSIUM GLUCONATE 20MEQ/15ML ELIXIR",!
|
---|
759 | write " 5 POTASSIUM GLUCONATE 20MEQ/15ML LIQUID",!
|
---|
760 | write " Press <RETURN> to see more, '^' to exit this list, OR",!
|
---|
761 | write " CHOOSE 1-5: 4 POTASSIUM GLUCONATE 20MEQ/15ML ELIXIR <-- 4 entered",!
|
---|
762 | write !
|
---|
763 | write " DRUG CLASS: POTASSIUM",!
|
---|
764 | write " Use this for drug(s) below?:",!
|
---|
765 | write " entry: POTASSIUM GLUCONATE ELIXIR",!
|
---|
766 | write " --------------------------------------",!
|
---|
767 | write " Use DRUG CLASS [POTASSIUM] for drug(s) above? Yes// (Yes)",!!
|
---|
768 | quit
|
---|
769 |
|
---|
770 | SimHelp()
|
---|
771 | ;"Purpose: To show help for the Find Similar functionality
|
---|
772 |
|
---|
773 | write !
|
---|
774 | write "This command allows one to set the drug class of the drug in question to be",!
|
---|
775 | write "the same as another drug shown in the display. For example:",!
|
---|
776 | write !
|
---|
777 | write "CLASS: CEPHALOSPORIN 3RD GENERATION",!
|
---|
778 | write "6068. TAZICEF FOR INJECTION 1 GM/VIAL",!
|
---|
779 | write !
|
---|
780 | write "CLASS: DENTIFRICES",!
|
---|
781 | write "7113. ALBION D PASTE DESENSITIZING DENTAL PROPHYLACTIC PASTE 8 %",!
|
---|
782 | write "7114. PLUS + WHITE DESENTIZING FLUORIDE TOOTHPASTE",!
|
---|
783 | write "7115. TAZICEF FOR INJECTION 1 GM",!
|
---|
784 | write !
|
---|
785 | write "Here it would be useful to specify that entry 7115 is SIMILAR to 6068.",!
|
---|
786 | write "This would set the class of 7155 to be CEPHALOSPORIN 3RD GENERATION.",!!
|
---|
787 | quit
|
---|
788 |
|
---|
789 |
|
---|
790 | Undo(Array)
|
---|
791 | ;"Purpose: To allow user to undo an action that was done in error
|
---|
792 | ;"Input: Array -- PASS BY REFERENCE the array containing the data, AND UNDO info
|
---|
793 | ;" Array("UNDO","COUNT")=number of undo steps avail
|
---|
794 | ;" Array("UNDO",Event#,part#)=code to be eXecuted to reverse step.
|
---|
795 |
|
---|
796 | ;"Note: Later, I may allow user to choose which items to undo, but for now, will
|
---|
797 | ;" just undo the very LAST action
|
---|
798 |
|
---|
799 | new UndoCt set UndoCt=$get(Array("UNDO","COUNT"))
|
---|
800 | new i set i=$order(Array("UNDO",UndoCt,""))
|
---|
801 | if i'="" for do quit:(i="")
|
---|
802 | . new code set code=$get(Array("UNDO",UndoCt,i))
|
---|
803 | . do
|
---|
804 | . . new $etrap set $etrap="w ""??Progress function -- error trapped??"",!"
|
---|
805 | . . write code,!!
|
---|
806 | . . xecute code
|
---|
807 | . new oldI set oldI=i
|
---|
808 | . set i=$order(Array("UNDO",UndoCt,i))
|
---|
809 | . kill Array("UNDO",UndoCt,oldI)
|
---|
810 | . set Array("UNDO","COUNT")=UndoCt-1
|
---|
811 |
|
---|
812 | quit
|
---|
813 |
|
---|
814 |
|
---|
815 | ShowList(Array,Answers,CompactMode,ShowBoth,ByIngred)
|
---|
816 | ;"Purpose: To display the list generated by GatherClasses, by class orginization
|
---|
817 | ;"Input: Array -- the array containing the data
|
---|
818 | ;" Array("POSS MATCH",ClassName,TMGTradename,DrugIEN)=ClassIEN^ClassCode^DrugDose
|
---|
819 | ;" Array("POSS MATCH",ClassName,TMGTradename,DrugIEN)=ClassIEN^ClassCode^DrugDose
|
---|
820 | ;" Array("POSS MATCH",ClassName,TMGTradename,DrugIEN,"INGRED")=Ingredients <--- optional
|
---|
821 | ;" Answers -- PASS BY REFERENCE. An array that will like display numbers with IENs
|
---|
822 | ;" Answer(count)=DrugIEN^DrugName^ClassIEN^ClassName
|
---|
823 | ;" Answer(count)=DrugIEN^DrugName^ClassIEN^ClassName
|
---|
824 | ;" CompactMode -- OPTIONAL, if value=1, then only the LAST drug class will be
|
---|
825 | ;" expanded (a potientially long list). Others will just show heading.
|
---|
826 | ;" ShowBoth -- OPTIONAL, if value=1, then VA GENERIC field & Tradename will be shown for each entry
|
---|
827 | ;" ByIngred -- OPTIONAL, if value=1, then list is shown sorted by Generic Name
|
---|
828 | ;"Output: List is shown, and the Answers array is established and passed back.
|
---|
829 | ;" Sometimes array is modified such that ingredient node is added
|
---|
830 | ;" Array("POSS MATCH",ClassName,TMGTradename,DrugIEN,"INGRED")=Ingredients <--- optional
|
---|
831 | ;"Results: none.
|
---|
832 |
|
---|
833 | new someShown set someShown=0
|
---|
834 | new count,ClassName,LastClass
|
---|
835 | set count=1
|
---|
836 | kill Answers
|
---|
837 | set CompactMode=$get(CompactMode,0)
|
---|
838 | set ShowBoth=$get(ShowBoth,0)
|
---|
839 | set ByIngred=$get(ByIngred,0)
|
---|
840 |
|
---|
841 | if ByIngred=0 goto SL1 ;"Rather than try to merge the two processes, I just duplicated and modified
|
---|
842 |
|
---|
843 | ;"Display sorted by ingredients
|
---|
844 |
|
---|
845 | ;"First, resort array, by ingredients
|
---|
846 | ;" IngredArray format:
|
---|
847 | ;" IngredArray(ClassName,Ingred,IEN)=ClassIEN^ClassCode^DrugDose^TradeName
|
---|
848 | ;" IngredArray(ClassName,Ingred,IEN)=ClassIEN^ClassCode^DrugDose^TradeName
|
---|
849 | new IngredArray
|
---|
850 | set LastClass=$order(Array("POSS MATCH",""),-1)
|
---|
851 | set ClassName=$order(Array("POSS MATCH",""))
|
---|
852 | if ClassName'="" for do quit:(ClassName="")
|
---|
853 | . write !,"CLASS: ",ClassName,!
|
---|
854 | . new TMGTradeName
|
---|
855 | . new tempCount set tempCount=0
|
---|
856 | . set TMGTradeName=$order(Array("POSS MATCH",ClassName,""))
|
---|
857 | . if (CompactMode=1)&(ClassName'=LastClass) set TMGTradeName=""
|
---|
858 | . if TMGTradeName'="" for do quit:(TMGTradeName="")
|
---|
859 | . . new IEN,ClassIEN
|
---|
860 | . . set IEN=$order(Array("POSS MATCH",ClassName,TMGTradeName,""))
|
---|
861 | . . if IEN>0 for do quit:(IEN'>0)
|
---|
862 | . . . new Ingred,value,dose
|
---|
863 | . . . set value=$get(Array("POSS MATCH",ClassName,TMGTradeName,IEN))
|
---|
864 | . . . set Ingred=$get(Array("POSS MATCH",ClassName,TMGTradeName,IEN,"INGRED"))
|
---|
865 | . . . if Ingred="" do
|
---|
866 | . . . . set Ingred=$$GET1^DIQ(22706.9,IEN,.08)
|
---|
867 | . . . . set Array("POSS MATCH",ClassName,TMGTradeName,IEN,"INGRED")=Ingred
|
---|
868 | . . . if Ingred="" do
|
---|
869 | . . . . write "Couldn't find an ingredient name for file 22706.9, IEN=",IEN,!
|
---|
870 | . . . . set Ingred="?"
|
---|
871 | . . . if Ingred'="" do
|
---|
872 | . . . . set IngredArray(ClassName,Ingred,IEN)=value
|
---|
873 | . . . . set $piece(IngredArray(ClassName,Ingred,IEN),"^",4)=TMGTradeName
|
---|
874 | . . . set IEN=$order(Array("POSS MATCH",ClassName,TMGTradeName,IEN))
|
---|
875 | . . set TMGTradeName=$order(Array("POSS MATCH",ClassName,TMGTradeName))
|
---|
876 | . set ClassName=$order(Array("POSS MATCH",ClassName))
|
---|
877 |
|
---|
878 |
|
---|
879 | ;"Now display IngredArray
|
---|
880 | ;" IngredArray format:
|
---|
881 | ;" IngredArray(ClassName,Ingred,IEN)=ClassIEN^ClassCode^DrugDose^TradeName
|
---|
882 | ;" IngredArray(ClassName,Ingred,IEN)=ClassIEN^ClassCode^DrugDose^TradeName
|
---|
883 | set LastClass=$order(IngredArray(""),-1)
|
---|
884 | set ClassName=$order(IngredArray(""))
|
---|
885 | if ClassName'="" for do quit:(ClassName="")
|
---|
886 | . write !,"CLASS: ",ClassName,!
|
---|
887 | . new IngredName
|
---|
888 | . new tempCount set tempCount=0
|
---|
889 | . set IngredName=$order(IngredArray(ClassName,""))
|
---|
890 | . if (CompactMode=1)&(ClassName'=LastClass) set IngredName=""
|
---|
891 | . if IngredName'="" for do quit:(IngredName="")
|
---|
892 | . . new IEN,ClassIEN
|
---|
893 | . . set IEN=$order(IngredArray(ClassName,IngredName,""))
|
---|
894 | . . if IEN>0 for do quit:(IEN'>0)
|
---|
895 | . . . new value,dose,TMGTradeName
|
---|
896 | . . . set value=$get(IngredArray(ClassName,IngredName,IEN))
|
---|
897 | . . . set ClassIEN=$piece(value,"^",1)
|
---|
898 | . . . set dose=$piece(value,"^",3)
|
---|
899 | . . . set TMGTradeName=$piece(value,"^",4)
|
---|
900 | . . . write count,". ",IngredName," ",dose
|
---|
901 | . . . if ShowBoth write " (#",IEN,")"
|
---|
902 | . . . write !
|
---|
903 | . . . set tempCount=tempCount+1
|
---|
904 | . . . if (ShowBoth)&(TMGTradeName'="") write " (",TMGTradeName,")",!
|
---|
905 | . . . set Answers(count)=IEN_"^"_TMGTradeName_"^"_ClassIEN_"^"_ClassName
|
---|
906 | . . . set count=count+1
|
---|
907 | . . . set someShown=1
|
---|
908 | . . . set IEN=$order(IngredArray(ClassName,IngredName,IEN))
|
---|
909 | . . set IngredName=$order(IngredArrayArray(ClassName,IngredName))
|
---|
910 | . if tempCount>20 do
|
---|
911 | . . write "END CLASS: ",ClassName,!
|
---|
912 | . . set tempCount=0
|
---|
913 | . set ClassName=$order(IngredArray(ClassName))
|
---|
914 |
|
---|
915 | goto SL2
|
---|
916 |
|
---|
917 | SL1 ;"Display sorted by tradename
|
---|
918 | set LastClass=$order(Array("POSS MATCH",""),-1)
|
---|
919 | set ClassName=$order(Array("POSS MATCH",""))
|
---|
920 | if ClassName'="" for do quit:(ClassName="")
|
---|
921 | . write !,"CLASS: ",ClassName,!
|
---|
922 | . new TMGTradeName
|
---|
923 | . new tempCount set tempCount=0
|
---|
924 | . set TMGTradeName=$order(Array("POSS MATCH",ClassName,""))
|
---|
925 | . if (CompactMode=1)&(ClassName'=LastClass) set TMGTradeName=""
|
---|
926 | . if TMGTradeName'="" for do quit:(TMGTradeName="")
|
---|
927 | . . new IEN,ClassIEN
|
---|
928 | . . set IEN=$order(Array("POSS MATCH",ClassName,TMGTradeName,""))
|
---|
929 | . . if IEN>0 for do quit:(IEN'>0)
|
---|
930 | . . . new value set value=$get(Array("POSS MATCH",ClassName,TMGTradeName,IEN))
|
---|
931 | . . . set ClassIEN=$piece(value,"^",1)
|
---|
932 | . . . new dose set dose=$piece(value,"^",3)
|
---|
933 | . . . ;"write count,". (",IEN,") ",TMGTradeName," ",dose,!
|
---|
934 | . . . write count,". ",TMGTradeName," ",dose
|
---|
935 | . . . if ShowBoth write " (#",IEN,")"
|
---|
936 | . . . write !
|
---|
937 | . . . set tempCount=tempCount+1
|
---|
938 | . . . if ShowBoth do
|
---|
939 | . . . . new Ingred
|
---|
940 | . . . . set Ingred=$get(Array("POSS MATCH",ClassName,TMGTradeName,IEN,"INGRED"))
|
---|
941 | . . . . if Ingred="" do
|
---|
942 | . . . . . set Ingred=$$GET1^DIQ(22706.9,IEN,.08)
|
---|
943 | . . . . . set Array("POSS MATCH",ClassName,TMGTradeName,IEN,"INGRED")=Ingred
|
---|
944 | . . . . if Ingred'="" write " (Same class as: ",Ingred,")",!
|
---|
945 | . . . set Answers(count)=IEN_"^"_TMGTradeName_"^"_ClassIEN_"^"_ClassName
|
---|
946 | . . . set count=count+1
|
---|
947 | . . . set someShown=1
|
---|
948 | . . . set IEN=$order(Array("POSS MATCH",ClassName,TMGTradeName,IEN))
|
---|
949 | . . set TMGTradeName=$order(Array("POSS MATCH",ClassName,TMGTradeName))
|
---|
950 | . if tempCount>20 do
|
---|
951 | . . write "END CLASS: ",ClassName,!
|
---|
952 | . . set tempCount=0
|
---|
953 | . set ClassName=$order(Array("POSS MATCH",ClassName))
|
---|
954 |
|
---|
955 | SL2 if 'someShown write " --- (List is Empty) ---",!
|
---|
956 |
|
---|
957 | SLDone quit
|
---|
958 |
|
---|
959 |
|
---|
960 | DoSetClass(Array,Answers,List)
|
---|
961 | ;"Purpose: To add ClassIEN to field .09 (VA DRUG CLASS) in file TMG FDA IMPORT COMPILED
|
---|
962 | ;"Input: Array -- PASS BY REFERENCE, array holding data, As created by Gather Classes
|
---|
963 | ;" Array("POSS MATCH",ClassName,TMGTradename,DrugIEN)=ClassIEN^ClassCode^DrugDose
|
---|
964 | ;" Array("POSS MATCH",ClassName,TMGTradename,DrugIEN)=ClassIEN^ClassCode^DrugDose
|
---|
965 | ;" Array(DrugIEN,"?")=""
|
---|
966 | ;" Array("?",DrugIEN)=""
|
---|
967 | ;" Answers -- PASS BY REFERENCE, an array linking display number to IENS.
|
---|
968 | ;" Array should be the one created by ShowList
|
---|
969 | ;" Answer(num)=DrugIEN^DrugName^ClassIEN^ClassName
|
---|
970 | ;" Answer(num)=DrugIEN^DrugName^ClassIEN^ClassName
|
---|
971 | ;" List -- PASS BY REFERENCE -- an array of entries (user input values) to process.
|
---|
972 | ;" Format as follows.
|
---|
973 | ;" List(Entry number)=""
|
---|
974 | ;" List(Entry number)=""
|
---|
975 | ;"Results: none
|
---|
976 |
|
---|
977 | new DrugIEN,DrugName,ClassIEN,ClassName
|
---|
978 |
|
---|
979 | new i
|
---|
980 | set i=$order(List(""))
|
---|
981 | if i'="" for do quit:(i="")
|
---|
982 | . set DrugIEN=+$piece($get(Answers(i)),"^",1)
|
---|
983 | . set DrugName=$piece($get(Answers(i)),"^",2)
|
---|
984 | . set ClassIEN=+$piece($get(Answers(i)),"^",3)
|
---|
985 | . set ClassName=$piece($get(Answers(i)),"^",4)
|
---|
986 | . if (DrugIEN'=0)&(ClassIEN'=0) do
|
---|
987 | . . new UndoCt set UndoCt=+$get(Array("UNDO","COUNT"))+1
|
---|
988 | . . new OldValue set OldValue=$piece($get(^TMG(22706.9,DrugIEN,1)),"^",5)
|
---|
989 | . . if OldValue="" set OldValue=""""""
|
---|
990 | . . if +OldValue'=OldValue set OldValue=""""_OldValue_""""
|
---|
991 | . . set Array("UNDO",UndoCt,1)="set $piece(^TMG(22706.9,"_DrugIEN_",1),""^"",5)="_OldValue
|
---|
992 | . . set $piece(^TMG(22706.9,DrugIEN,1),"^",5)=ClassIEN ;"I own file, and there are no XREF, so OK to direct set.
|
---|
993 | . . kill Answers(i)
|
---|
994 | . . set OldValue=$get(Array("POSS MATCH",ClassName,DrugName,DrugIEN))
|
---|
995 | . . if OldValue="" set OldValue=""""""
|
---|
996 | . . if +OldValue'=OldValue set OldValue=""""_OldValue_""""
|
---|
997 | . . set Array("UNDO",UndoCt,2)="set Array(""POSS MATCH"","""_ClassName_""","""_DrugName_""","_DrugIEN_")="_OldValue
|
---|
998 | . . set Array("UNDO","COUNT")=UndoCt
|
---|
999 | . . kill Array("POSS MATCH",ClassName,DrugName,DrugIEN)
|
---|
1000 | . set i=$order(List(i))
|
---|
1001 |
|
---|
1002 | quit
|
---|
1003 |
|
---|
1004 |
|
---|
1005 | ShowInfo(Array,Answers,Num)
|
---|
1006 | ;"Purpose: to show more about the specified drug
|
---|
1007 | ;"Input: Array -- PASS BY REFERENCE, array holding data, As created by Gather Classes
|
---|
1008 | ;" Answers -- PASS BY REFERENCE, an array linking display number to IENS.
|
---|
1009 | ;" Array should be the one created by ShowList
|
---|
1010 | ;" Num -- entry number to show
|
---|
1011 |
|
---|
1012 | new DrugIEN set DrugIEN=+$piece($get(Answers(Num)),"^",1)
|
---|
1013 | if DrugIEN=0 quit
|
---|
1014 | do DumpRec^TMGDEBUG(22706.9,DrugIEN)
|
---|
1015 | quit
|
---|
1016 |
|
---|
1017 |
|
---|
1018 | DoRemove(Array,Answers,List,ByTradeName,FromECode,Cancelled)
|
---|
1019 | ;"Purpose: To remove entries from Empty-class Array
|
---|
1020 | ;"Input: Array -- PASS BY REFERENCE, array holding data, As created by Gather Classes
|
---|
1021 | ;" Array("GENERIC NAME",VA GENERIC Name,DrugIEN)=""
|
---|
1022 | ;" Array("TRADE NAME",TradeName,DrugIEN)=""
|
---|
1023 | ;" Array("LINK GENERIC TO TRADE",TMGGeneric)=TradeName
|
---|
1024 | ;" Array("LINK TRADE TO GENERIC",TradeName)=TMGGeneric
|
---|
1025 | ;" Answers -- PASS BY REFERENCE, an array linking display number to IENS.
|
---|
1026 | ;" Array should be the one created by ShowEList
|
---|
1027 | ;" Answer(count)=DrugIEN^GenericDrugName^TradeName
|
---|
1028 | ;" Answer(count)=DrugIEN^GenericDrugName^TradeName
|
---|
1029 | ;" List -- PASS BY REFERENCE -- an array of entries (user input values) to process.
|
---|
1030 | ;" Format as follows.
|
---|
1031 | ;" List(Entry number)=""
|
---|
1032 | ;" List(Entry number)=""
|
---|
1033 | ;" ByTradeName -- OPTIONAL, if value=1, then values are shown by TradeName
|
---|
1034 | ;" FromECode -- OPTIONAL, if value=1, then code is handled as if called from the 'empty'
|
---|
1035 | ;" code modules (ie HandleEmptyClasses)
|
---|
1036 | ;" Cancelled -- OPTIONAL, PASS BY REFERENCE, will be set to 1 if user cancelled.
|
---|
1037 | ;"Results: none
|
---|
1038 |
|
---|
1039 | set ByTradeName=$get(ByTradeName,0)
|
---|
1040 | set Cancelled=1 ;"default is cancellation
|
---|
1041 |
|
---|
1042 | write !,"Remove these drugs perminantly (i.e. don't add to VistA database)?",!
|
---|
1043 | do Disp2List(.Answers,.List,.ByTradeName)
|
---|
1044 |
|
---|
1045 | write "Remove these drugs perminantly (i.e. don't add to VistA database)"
|
---|
1046 | new % set %=1 do YN^DICN write !
|
---|
1047 | new SetSkipFlag set SetSkipFlag=(%=1)
|
---|
1048 |
|
---|
1049 | if %=2 do
|
---|
1050 | . write "Temporarily remove drugs from category listing"
|
---|
1051 | . do YN^DICN write !
|
---|
1052 | if %=2 goto DERMDone
|
---|
1053 |
|
---|
1054 | new UndoArray
|
---|
1055 | new DrugIEN,DrugName,TradeName
|
---|
1056 | new i set i=$order(List(""))
|
---|
1057 | if i'="" for do quit:(i="")
|
---|
1058 | . set DrugIEN=+$piece($get(Answers(i)),"^",1)
|
---|
1059 | . new UndoCt set UndoCt=$order(UndoArray(i,""),-1)+1
|
---|
1060 | . if (DrugIEN>0)&(SetSkipFlag) do
|
---|
1061 | . . new OldValue set OldValue=$piece(^TMG(22706.9,DrugIEN,1),"^",4)
|
---|
1062 | . . if OldValue="" set OldValue=""""""
|
---|
1063 | . . if +OldValue'=OldValue set OldValue=""""_OldValue_""""
|
---|
1064 | . . set UndoArray(i,UndoCt)="set $piece(^TMG(22706.9,"_DrugIEN_",1),""^"",4)="_OldValue
|
---|
1065 | . . set $piece(^TMG(22706.9,DrugIEN,1),"^",4)=1 ;"I own file, and there are no XREF, so OK to direct set.
|
---|
1066 | . if (SetSkipFlag=0)&(FromECode=0) do
|
---|
1067 | . . set UndoArray(i,UndoCt)="kill Array("_DrugIEN_",""?"")"
|
---|
1068 | . . set UndoArray(i,UndoCt+1)="kill Array(""?"","_DrugIEN_")"
|
---|
1069 | . . set Array(DrugIEN,"?")=""
|
---|
1070 | . . set Array("?",DrugIEN)=""
|
---|
1071 | . set i=$order(List(i))
|
---|
1072 |
|
---|
1073 | do ClrAnswers(.Array,.Answers,.List,.FromECode,.UndoArray)
|
---|
1074 |
|
---|
1075 | new UndoCt set UndoCt=$get(Array("UNDO","COUNT"))
|
---|
1076 | set i=""
|
---|
1077 | for set i=$order(UndoArray(i)) quit:(i="") do
|
---|
1078 | . merge Array("UNDO",UndoCt)=UndoArray(i)
|
---|
1079 | . set UndoCt=UndoCt+1
|
---|
1080 | set Array("UNDO","COUNT")=UndoCt
|
---|
1081 |
|
---|
1082 | set Cancelled=0 ;"set success here
|
---|
1083 |
|
---|
1084 | DERMDone
|
---|
1085 | quit
|
---|
1086 |
|
---|
1087 |
|
---|
1088 | DoLookup(Array,Answers,Classes,List,FromECode,Cancelled)
|
---|
1089 | ;"Purpose: To Manually lookup class for entries
|
---|
1090 | ;"Input: Array -- PASS BY REFERENCE, array holding data, As created by Gather Classes
|
---|
1091 | ;" Array("POSS MATCH",ClassName,TMGTradename,DrugIEN)=ClassIEN^ClassCode^DrugDose
|
---|
1092 | ;" Array("POSS MATCH",ClassName,TMGTradename,DrugIEN)=ClassIEN^ClassCode^DrugDose
|
---|
1093 | ;" Array(DrugIEN,"?")=""
|
---|
1094 | ;" Array("?",DrugIEN)=""
|
---|
1095 | ;" Answers -- PASS BY REFERENCE, an array linking display number to IENS.
|
---|
1096 | ;" Array should be the one created by ShowList
|
---|
1097 | ;" Answer(num)=DrugIEN^DrugName^ClassIEN^ClassName
|
---|
1098 | ;" Answer(num)=DrugIEN^DrugName^ClassIEN^ClassName
|
---|
1099 | ;" Classes -- PASS BY REFERENCE, an array containing classes
|
---|
1100 | ;" List -- PASS BY REFERENCE -- an array of entries (user input values) to process.
|
---|
1101 | ;" Format as follows.
|
---|
1102 | ;" List(Entry number)=""
|
---|
1103 | ;" List(Entry number)=""
|
---|
1104 | ;" FromECode -- OPTIONAL, if value=1, then code is handled as if called from the 'empty'
|
---|
1105 | ;" code modules (ie HandleEmptyClasses)
|
---|
1106 | ;" Cancelled -- OPTIONAL, PASS BY REFERENCE, will be set to 1 if user cancelled.
|
---|
1107 | ;"Results: none
|
---|
1108 |
|
---|
1109 | set Cancelled=1 ;"default to cancellation
|
---|
1110 |
|
---|
1111 | new UsrClassIEN
|
---|
1112 | set UsrClassIEN=$$SelectClass(.Classes)
|
---|
1113 | if UsrClassIEN=0 goto DLUDone
|
---|
1114 |
|
---|
1115 | new ClassName set ClassName=$$GET1^DIQ(50.605,UsrClassIEN,1)
|
---|
1116 |
|
---|
1117 | if $$VerifyWrite(ClassName,.Answers,.List)=0 goto DLUDone
|
---|
1118 |
|
---|
1119 | do WriteClass(UsrClassIEN,.Array,.Answers,.List,.FromECode)
|
---|
1120 | set Cancelled=0 ;"set success here
|
---|
1121 |
|
---|
1122 | DLUDone
|
---|
1123 | quit
|
---|
1124 |
|
---|
1125 |
|
---|
1126 | WriteClass(ClassIEN,Array,Answers,List,FromECode)
|
---|
1127 | ;"Purpose: To do the actual setting of the class
|
---|
1128 | ;"Input: ClassIEN -- the IEN of the class to set.
|
---|
1129 | ;" Array -- PASS BY REFERENCE, array holding data, As created by Gather Classes
|
---|
1130 | ;" Array("POSS MATCH",ClassName,TMGTradename,DrugIEN)=ClassIEN^ClassCode^DrugDose
|
---|
1131 | ;" Array("POSS MATCH",ClassName,TMGTradename,DrugIEN)=ClassIEN^ClassCode^DrugDose
|
---|
1132 | ;" Array(DrugIEN,"?")=""
|
---|
1133 | ;" Array("?",DrugIEN)=""
|
---|
1134 | ;" Note: Only needed to clear out entries that are no longer needed.
|
---|
1135 | ;" OR, if FromECode=1, then this Array format is used:
|
---|
1136 | ;" Array("GENERIC NAME",VA GENERIC Name,DrugIEN)=""
|
---|
1137 | ;" Array("TRADE NAME",TradeName,DrugIEN)=""
|
---|
1138 | ;" Array("LINK GENERIC TO TRADE",TMGGeneric)=TradeName
|
---|
1139 | ;" Array("LINK TRADE TO GENERIC",TradeName)=TMGGeneric
|
---|
1140 | ;" Answers -- PASS BY REFERENCE, an array linking display number to IENS.
|
---|
1141 | ;" Array should be the one created by ShowList
|
---|
1142 | ;" Answer(num)=DrugIEN^DrugName^ClassIEN^ClassName
|
---|
1143 | ;" Answer(num)=DrugIEN^DrugName^ClassIEN^ClassName
|
---|
1144 | ;" OR, if FromECode=1, then this format is used:
|
---|
1145 | ;" Answer(count)=DrugIEN^GenericDrugName^TradeName
|
---|
1146 | ;" Answer(count)=DrugIEN^GenericDrugName^TradeName
|
---|
1147 | ;" List -- PASS BY REFERENCE -- an array of entries (user input values) to process.
|
---|
1148 | ;" Format as follows.
|
---|
1149 | ;" List(Entry number)=""
|
---|
1150 | ;" List(Entry number)=""
|
---|
1151 | ;" FromECode -- OPTIONAL, if value=1, then code is handled as if called from the 'empty'
|
---|
1152 | ;" code modules (ie HandleEmptyClasses)
|
---|
1153 | ;"Output: Data will be altered in file 22706.9
|
---|
1154 | ;" Array will be modified: Undo information will be added:
|
---|
1155 | ;" Array("UNDO","COUNT")=number of undo steps avail
|
---|
1156 | ;" Array("UNDO",Event#,part#)=code to be eXecuted to reverse step.
|
---|
1157 | ;"Results: none
|
---|
1158 |
|
---|
1159 | new DrugIEN,DrugName,ClassName
|
---|
1160 | new UndoArray set UndoArray("")=""
|
---|
1161 | new i set i=$order(List(""))
|
---|
1162 | if i'="" for do quit:(i="")
|
---|
1163 | . set DrugIEN=+$piece($get(Answers(i)),"^",1)
|
---|
1164 | . if DrugIEN=0 goto WC1
|
---|
1165 | . new UndoCt set UndoCt=$order(UndoArray(i,""))+1
|
---|
1166 | . new OldValue set OldValue=$piece(^TMG(22706.9,DrugIEN,1),"^",5)
|
---|
1167 | . if OldValue="" set OldValue=""""""
|
---|
1168 | . if +OldValue'=OldValue set OldValue=""""_OldValue_""""
|
---|
1169 | . set UndoArray(i,UndoCt)="set $piece(^TMG(22706.9,"_DrugIEN_",1),""^"",5)="_OldValue
|
---|
1170 | . set $piece(^TMG(22706.9,DrugIEN,1),"^",5)=ClassIEN ;"I own file, and there are no XREF, so OK to direct set.
|
---|
1171 | WC1 . set i=$order(List(i))
|
---|
1172 |
|
---|
1173 | do ClrAnswers(.Array,.Answers,.List,.FromECode,.UndoArray)
|
---|
1174 |
|
---|
1175 | set i=$order(UndoArray(""))
|
---|
1176 | new UndoCt set UndoCt=$get(Array("UNDO","COUNT"))
|
---|
1177 | if i'="" for do quit:(i="")
|
---|
1178 | . merge Array("UNDO",UndoCt)=UndoArray(i)
|
---|
1179 | . set UndoCt=UndoCt+1
|
---|
1180 | . set i=$order(UndoArray(i))
|
---|
1181 | set Array("UNDO","COUNT")=UndoCt
|
---|
1182 |
|
---|
1183 | WCDone
|
---|
1184 | quit
|
---|
1185 |
|
---|
1186 |
|
---|
1187 | ClrAnswers(Array,Answers,List,FromECode,UndoArray)
|
---|
1188 | ;"Purpose: To remove entries from Array and Answers array.
|
---|
1189 | ;"Input: Array -- PASS BY REFERENCE, array holding data, As created by Gather Classes
|
---|
1190 | ;" Array("POSS MATCH",ClassName,TMGTradename,DrugIEN)=ClassIEN^ClassCode^DrugDose
|
---|
1191 | ;" Array("POSS MATCH",ClassName,TMGTradename,DrugIEN)=ClassIEN^ClassCode^DrugDose
|
---|
1192 | ;" Array(DrugIEN,"?")=""
|
---|
1193 | ;" Array("?",DrugIEN)=""
|
---|
1194 | ;" Note: Only needed to clear out entries that are no longer needed.
|
---|
1195 | ;" OR, if FromECode=1, then this Array format is used:
|
---|
1196 | ;" Array("GENERIC NAME",VA GENERIC Name,DrugIEN)=""
|
---|
1197 | ;" Array("TRADE NAME",TradeName,DrugIEN)=""
|
---|
1198 | ;" Array("LINK GENERIC TO TRADE",TMGGeneric)=TradeName
|
---|
1199 | ;" Array("LINK TRADE TO GENERIC",TradeName)=TMGGeneric
|
---|
1200 | ;" Answers -- PASS BY REFERENCE, an array linking display number to IENS.
|
---|
1201 | ;" Array should be the one created by ShowList
|
---|
1202 | ;" Answer(num)=DrugIEN^DrugName^ClassIEN^ClassName
|
---|
1203 | ;" Answer(num)=DrugIEN^DrugName^ClassIEN^ClassName
|
---|
1204 | ;" OR, if FromECode=1, then this format is used:
|
---|
1205 | ;" Answer(count)=DrugIEN^GenericDrugName^TradeName
|
---|
1206 | ;" Answer(count)=DrugIEN^GenericDrugName^TradeName
|
---|
1207 | ;" List -- PASS BY REFERENCE -- an array of entries (user input values) to process.
|
---|
1208 | ;" Format as follows.
|
---|
1209 | ;" List(Entry number)=""
|
---|
1210 | ;" List(Entry number)=""
|
---|
1211 | ;" FromECode -- OPTIONAL, if value=1, then code is handled as if called from the 'empty'
|
---|
1212 | ;" code modules (ie HandleEmptyClasses)
|
---|
1213 | ;" UndoArray -- PASS BY REFERENCE -- an array to be filled with undo info
|
---|
1214 | ;" format as follows:
|
---|
1215 | ;" Array(list#,step#)=CodeToBeExecuted
|
---|
1216 | ;" Array(list#,step#)=CodeToBeExecuted
|
---|
1217 | ;"Output: Entries will be removed from list.
|
---|
1218 |
|
---|
1219 | ;"Results: none
|
---|
1220 |
|
---|
1221 | new DrugIEN,DrugName,ClassName
|
---|
1222 | new i
|
---|
1223 | set i=$order(List(""))
|
---|
1224 | if i'="" for do quit:(i="")
|
---|
1225 | . set DrugIEN=+$piece($get(Answers(i)),"^",1)
|
---|
1226 | . if DrugIEN=0 goto CA1
|
---|
1227 | . new UndoCt set UndoCt=$order(UndoArray(i,""))+1
|
---|
1228 | . if $get(FromECode)=1 do
|
---|
1229 | . . new GenericName,TradeName
|
---|
1230 | . . set GenericName=$piece($get(Answers(i)),"^",2)
|
---|
1231 | . . set TradeName=$piece($get(Answers(i)),"^",3)
|
---|
1232 | . . ;"save info for possible undo in the future
|
---|
1233 | . . new OldValue set OldValue=$get(Array("GENERIC NAME",GenericName,DrugIEN))
|
---|
1234 | . . if OldValue="" set OldValue=""""""
|
---|
1235 | . . if +OldValue'=OldValue set OldValue=""""_OldValue_""""
|
---|
1236 | . . set UndoArray(i,UndoCt)="set Array(""GENERIC NAME"","_GenericName_","_DrugIEN_")="_OldValue
|
---|
1237 | . . set UndoCt=UndoCt+1
|
---|
1238 | . . new OldValue set OldValue=$get(Array("TRADE NAME",TradeName,DrugIEN))
|
---|
1239 | . . if OldValue="" set OldValue=""""""
|
---|
1240 | . . if +OldValue'=OldValue set OldValue=""""_OldValue_""""
|
---|
1241 | . . set UndoArray(i,UndoCt)="set Array(""TRADE NAME"","_TradeName_","_DrugIEN_")="_OldValue
|
---|
1242 | . . ;"Now do real removal
|
---|
1243 | . . kill Array("GENERIC NAME",GenericName,DrugIEN)
|
---|
1244 | . . kill Array("TRADE NAME",TradeName,DrugIEN)
|
---|
1245 | . else do
|
---|
1246 | . . set DrugName=$piece($get(Answers(i)),"^",2)
|
---|
1247 | . . set ClassName=$piece($get(Answers(i)),"^",4)
|
---|
1248 | . . new OldValue set OldValue=$get(Array("POSS MATCH",ClassName,DrugName,DrugIEN))
|
---|
1249 | . . if OldValue="" set OldValue=""""""
|
---|
1250 | . . if +OldValue'=OldValue set OldValue=""""_OldValue_""""
|
---|
1251 | . . set UndoArray(i,UndoCt)="set Array(""POSS MATCH"","_ClassName_","_DrugName_","_DrugIEN_")="_OldValue
|
---|
1252 | . . kill Array("POSS MATCH",ClassName,DrugName,DrugIEN)
|
---|
1253 | . kill Answers(i) ;"I'm not sure how to undo this part. I think it's regenerated with each display of list
|
---|
1254 | CA1 . set i=$order(List(i))
|
---|
1255 |
|
---|
1256 | quit
|
---|
1257 |
|
---|
1258 |
|
---|
1259 | VerifyWrite(ClassName,Answers,List,ByTradeName,ShowBoth)
|
---|
1260 | ;"Purpose: To display list of entries and ask user if class set is desired
|
---|
1261 | ;"Input: ClassName -- the name of the VA DRUG CLASS
|
---|
1262 | ;" Answers -- PASS BY REFERENCE, an array linking display number to IENS.
|
---|
1263 | ;" Array should be the one created by ShowList
|
---|
1264 | ;" Answer(num)=DrugIEN^DrugName^ClassIEN^ClassName
|
---|
1265 | ;" Answer(num)=DrugIEN^DrugName^ClassIEN^ClassName
|
---|
1266 | ;" List -- PASS BY REFERENCE -- an array of entries (user input values) to process.
|
---|
1267 | ;" Format as follows.
|
---|
1268 | ;" List(Entry number)=""
|
---|
1269 | ;" List(Entry number)=""
|
---|
1270 | ;" ByTradeName -- OPTIONAL, if value=1, then values are shown by TradeName
|
---|
1271 | ;" ShowBoth -- OPTIONAL, if value=1 then trade name and generic names both shown.
|
---|
1272 | ;"Result: 1 if writing is OK, other 0
|
---|
1273 |
|
---|
1274 | write !,"DRUG CLASS: ",ClassName,!
|
---|
1275 | write "Use this for drug(s) below?: ",!
|
---|
1276 | do Disp2List(.Answers,.List,.ByTradeName,.ShowBoth)
|
---|
1277 | write "Use DRUG CLASS [",ClassName,"] for drug(s) above"
|
---|
1278 | new % set %=1 do YN^DICN write !
|
---|
1279 |
|
---|
1280 | quit (%=1)
|
---|
1281 |
|
---|
1282 |
|
---|
1283 | Disp2List(Answers,List,ByTradeName,ShowBoth)
|
---|
1284 | ;"Purpose: An interfact to DisplayList function, to allow easier input.
|
---|
1285 | ;"Input: Answers -- PASS BY REFERENCE, an array linking display number to IENS. See DisplayList
|
---|
1286 | ;" List -- PASS BY REFERENCE -- an array of entries (user input values) to process. See DisplayList
|
---|
1287 | ;" ByTradeName -- OPTIONAL, if value=1, then values are shown by TradeName
|
---|
1288 | ;" ShowBoth -- OPTIONAL, if value=1 then trade name and generic names both shown.
|
---|
1289 |
|
---|
1290 | set ByTradeName=$get(ByTradeName,0)
|
---|
1291 | set ShowBoth=$get(ShowBoth,0)
|
---|
1292 | new part,alsoPart
|
---|
1293 | set alsoPart=0
|
---|
1294 |
|
---|
1295 | if ByTradeName=1 do
|
---|
1296 | . set part=3 ;"i.e. show TradeName
|
---|
1297 | . if ShowBoth set alsoPart=2
|
---|
1298 | else do
|
---|
1299 | . set part=2 ;"i.e. show GenericName
|
---|
1300 | . if ShowBoth set alsoPart=3
|
---|
1301 |
|
---|
1302 | do DisplayList(.Answers,.List,part,alsoPart)
|
---|
1303 |
|
---|
1304 | quit
|
---|
1305 |
|
---|
1306 | DisplayList(Answers,List,Piece,AlsoPiece)
|
---|
1307 | ;"Purpose: To display list of entries
|
---|
1308 | ;"Input: Answers -- PASS BY REFERENCE, an array linking display number to IENS.
|
---|
1309 | ;" Array should be the one created by ShowList
|
---|
1310 | ;" Answer(num)=DrugIEN^DrugName^ClassIEN^ClassName
|
---|
1311 | ;" Answer(num)=DrugIEN^DrugName^ClassIEN^ClassName
|
---|
1312 | ;" OR, Array as created by ShowEList
|
---|
1313 | ;" Answer(count)=DrugIEN^GenericDrugName^TradeName
|
---|
1314 | ;" Answer(count)=DrugIEN^GenericDrugName^TradeName
|
---|
1315 |
|
---|
1316 | ;" List -- PASS BY REFERENCE -- an array of entries (user input values) to process.
|
---|
1317 | ;" Format as follows.
|
---|
1318 | ;" List(Entry number)=""
|
---|
1319 | ;" List(Entry number)=""
|
---|
1320 | ;" Piece -- OPTIONAL, default=2. The piece number of Answer value to show.
|
---|
1321 | ;" AlsoPiece -- OPTIONAL, default="", If specified, then this piece of the Answer
|
---|
1322 | ;" will also be shown in paretheses under the original answer.
|
---|
1323 | ;"Result: none
|
---|
1324 |
|
---|
1325 | new someShown set someShown=0
|
---|
1326 | set Piece=$get(Piece,2)
|
---|
1327 | new i
|
---|
1328 | set i=$order(List(""))
|
---|
1329 | if i'="" for do quit:(i="")
|
---|
1330 | . write " ",i,". ",$piece($get(Answers(i)),"^",Piece),!
|
---|
1331 | . set someShown=1
|
---|
1332 | . if +$get(AlsoPiece)>0 do
|
---|
1333 | . . write " (",$piece($get(Answers(i)),"^",AlsoPiece),")",!
|
---|
1334 | . set i=$order(List(i))
|
---|
1335 |
|
---|
1336 | if someShown=0 write " -- List is EMPTY -- ",!
|
---|
1337 | write "--------------------------------------",!
|
---|
1338 | quit
|
---|
1339 |
|
---|
1340 |
|
---|
1341 | SimilarPick(Array,Answers,List,FromECode,Cancelled)
|
---|
1342 | ;"Purpose: To allow user to specify that a set of numbers should use the same class as
|
---|
1343 | ;" another entry.
|
---|
1344 | ;"Input: Array -- PASS BY REFERENCE, array holding data, As created by Gather Classes
|
---|
1345 | ;" Array("POSS MATCH",ClassName,TMGTradename,DrugIEN)=ClassIEN^ClassCode^DrugDose
|
---|
1346 | ;" Array("POSS MATCH",ClassName,TMGTradename,DrugIEN)=ClassIEN^ClassCode^DrugDose
|
---|
1347 | ;" Array(DrugIEN,"?")=""
|
---|
1348 | ;" Array("?",DrugIEN)=""
|
---|
1349 | ;" Answers -- PASS BY REFERENCE, an array linking display number to IENS.
|
---|
1350 | ;" Array should be the one created by ShowList
|
---|
1351 | ;" Answer(num)=DrugIEN^DrugName^ClassIEN^ClassName
|
---|
1352 | ;" Answer(num)=DrugIEN^DrugName^ClassIEN^ClassName
|
---|
1353 | ;" List -- PASS BY REFERENCE -- an array of entries (user input values) to process.
|
---|
1354 | ;" Format as follows.
|
---|
1355 | ;" List(Entry number)=""
|
---|
1356 | ;" List(Entry number)=""
|
---|
1357 | ;" FromECode -- OPTIONAL, if value=1, then code is handled as if called from the 'empty'
|
---|
1358 | ;" code modules (ie HandleEmptyClasses)
|
---|
1359 | ;"Results: none
|
---|
1360 |
|
---|
1361 | set Cancelled=1 ;"default to cancellation
|
---|
1362 |
|
---|
1363 | new input
|
---|
1364 | read "Which entry has the CORRECT CLASS? ",input:$get(DTIME,3600),!
|
---|
1365 | if +input'=input goto SPDone
|
---|
1366 |
|
---|
1367 | new SimClName set SimClName=$piece($get(Answers(input)),"^",4)
|
---|
1368 | new SimClIEN set SimClIEN=+$piece($get(Answers(input)),"^",3)
|
---|
1369 |
|
---|
1370 | if $$VerifyWrite(SimClName,.Answers,.List)=1 goto SPDone
|
---|
1371 | do WriteClass(SimClIEN,.Array,.Answers,.List,.FromECode)
|
---|
1372 | set Cancelled=0 ;"signal success
|
---|
1373 |
|
---|
1374 | SPDone
|
---|
1375 | quit
|
---|
1376 |
|
---|
1377 |
|
---|
1378 |
|
---|
1379 | FindPick(Array,Answers,List,FromECode,Cancelled)
|
---|
1380 | ;"Purpose: To allow user to look up a drug already in the VistA database, and use the
|
---|
1381 | ;" VA DRUG CLASS assigned to that drug.
|
---|
1382 | ;" another entry.
|
---|
1383 | ;"Input: Array -- PASS BY REFERENCE, array holding data, As created by Gather Classes
|
---|
1384 | ;" Array("POSS MATCH",ClassName,TMGTradename,DrugIEN)=ClassIEN^ClassCode^DrugDose
|
---|
1385 | ;" Array("POSS MATCH",ClassName,TMGTradename,DrugIEN)=ClassIEN^ClassCode^DrugDose
|
---|
1386 | ;" Array(DrugIEN,"?")=""
|
---|
1387 | ;" Array("?",DrugIEN)=""
|
---|
1388 | ;" Answers -- PASS BY REFERENCE, an array linking display number to IENS.
|
---|
1389 | ;" Array should be the one created by ShowList
|
---|
1390 | ;" Answer(num)=DrugIEN^DrugName^ClassIEN^ClassName
|
---|
1391 | ;" Answer(num)=DrugIEN^DrugName^ClassIEN^ClassName
|
---|
1392 | ;" List -- PASS BY REFERENCE -- an array of entries (user input values) to process.
|
---|
1393 | ;" Format as follows.
|
---|
1394 | ;" List(Entry number)=""
|
---|
1395 | ;" List(Entry number)=""
|
---|
1396 | ;" FromECode -- OPTIONAL, if value=1, then code is handled as if called from the 'empty'
|
---|
1397 | ;" code modules (ie HandleEmptyClasses)
|
---|
1398 | ;" Cancelled -- OPTIONAL, PASS BY REFERENCE, will be set to 1 if user cancelled.
|
---|
1399 | ;"Results: none
|
---|
1400 |
|
---|
1401 | set Cancelled=1 ;"default is cancellation
|
---|
1402 | write "Classify drug by finding ANOTHER drug in the SAME CLASS",!
|
---|
1403 | FPLoop
|
---|
1404 | new DIC,X,Y
|
---|
1405 | set DIC=50.68
|
---|
1406 | set DIC(0)="AEQM"
|
---|
1407 | set DIC("A")="Enter DRUG NAME OF EXAMPLE with desired CLASS// "
|
---|
1408 | do ^DIC write !
|
---|
1409 | if +Y'>0 do goto FPDone
|
---|
1410 | . write "No usable value found.",!
|
---|
1411 | . do PressToCont^TMGUSRIF
|
---|
1412 |
|
---|
1413 | new SimClName,SimClIEN
|
---|
1414 | set SimClIEN=$$GET1^DIQ(50.68,+Y,15,"I") ;"50.68=VA PRODUCT file
|
---|
1415 | if SimClIEN'>0 do goto FPDone
|
---|
1416 | . write "No usable value found.",!
|
---|
1417 | . do PressToCont^TMGUSRIF
|
---|
1418 | set SimClName=$$GET1^DIQ(50.605,SimClIEN,1) ;"50.605 is VA DRUG CLASS
|
---|
1419 |
|
---|
1420 | new IsOK set IsOK=$$VerifyWrite(SimClName,.Answers,.List)
|
---|
1421 | new TryAgain set TryAgain=0
|
---|
1422 | if IsOK=1 do
|
---|
1423 | . do WriteClass(SimClIEN,.Array,.Answers,.List,.FromECode)
|
---|
1424 | . set Cancelled=0 ;"set success here
|
---|
1425 | else do
|
---|
1426 | . write "Pick another DRUG CLASS"
|
---|
1427 | . new % set %=1 do YN^DICN write !
|
---|
1428 | . set TryAgain=(%=1)
|
---|
1429 | if TryAgain=1 goto FPLoop
|
---|
1430 |
|
---|
1431 | FPDone
|
---|
1432 | quit
|
---|
1433 |
|
---|
1434 | ;"=======================================================================
|
---|
1435 | ;"=======================================================================
|
---|
1436 |
|
---|
1437 | HandleEmptyClasses
|
---|
1438 | ;"Purpose: To allow classification of all unclassified drugs (ones with not potential
|
---|
1439 | ;" match found in VistA database as a starting point)
|
---|
1440 |
|
---|
1441 | new array
|
---|
1442 | write "Gathering information...",!
|
---|
1443 | do GatherEmpties(.array)
|
---|
1444 | do ClassEClasses(.array)
|
---|
1445 |
|
---|
1446 | quit
|
---|
1447 |
|
---|
1448 |
|
---|
1449 |
|
---|
1450 | GatherEmpties(Array)
|
---|
1451 | ;"Purpose: To scan through all records in TMG FDA IMPORT COMPILED, and create an array of
|
---|
1452 | ;" possible entries for VA DRUG CLASS, from ones that have NO possible VA PRODUCT MATCH
|
---|
1453 | ;"Input: Array -- PASS BY REFERENCE, and OUT PARAMETER
|
---|
1454 | ;"Output: Array will be filled as follows:
|
---|
1455 | ;" Array("GENERIC NAME",VA GENERIC Name,DrugIEN)=""
|
---|
1456 | ;" Array("TRADE NAME",TradeName,DrugIEN)=""
|
---|
1457 | ;" Array("LINK GENERIC TO TRADE",TMGGeneric)=TradeName
|
---|
1458 | ;" Array("LINK TRADE TO GENERIC",TradeName)=TMGGeneric
|
---|
1459 | ;"Results: none
|
---|
1460 | ;"Note: if SKIP THIS RECORD field is set, then record will be skipped.
|
---|
1461 | ;" Also, if there is already an antry for the VA DRUG CLASS field, then will be skipped.
|
---|
1462 |
|
---|
1463 | new Itr,IEN
|
---|
1464 | set IEN=$$ItrInit^TMGITR(22706.9,.Itr)
|
---|
1465 | do PrepProgress^TMGITR(.Itr,20,0,"IEN")
|
---|
1466 | if IEN'="" for do quit:($$ItrNext^TMGITR(.Itr,.IEN)'>0)
|
---|
1467 | . new tempIEN set IEN=IEN
|
---|
1468 | . new skipFlag set skipFlag=+$piece($get(^TMG(22706.9,IEN,1)),"^",4)
|
---|
1469 | . new PriorClass set PriorClass=+$piece($get(^TMG(22706.9,IEN,1)),"^",5)
|
---|
1470 | . ;"write IEN," --> ",PriorClass,!
|
---|
1471 | . if skipFlag=1 quit
|
---|
1472 | . if PriorClass>0 quit
|
---|
1473 | . new TMGGeneric set TMGGeneric=$piece($get(^TMG(22706.9,IEN,0)),"^",6) ;"GENERIC NAME
|
---|
1474 | . new TradeName set TradeName=$piece($get(^TMG(22706.9,IEN,0)),"^",4) ;"TRADENAME
|
---|
1475 | . if TMGGeneric'="" set Array("GENERIC NAME",TMGGeneric,IEN)=""
|
---|
1476 | . if TradeName'="" set Array("TRADE NAME",TradeName,IEN)=""
|
---|
1477 | . if (TMGGeneric'="")&(TradeName'="") do
|
---|
1478 | . . set Array("LINK GENERIC TO TRADE",TMGGeneric)=TradeName
|
---|
1479 | . . set Array("LINK TRADE TO GENERIC",TradeName)=TMGGeneric
|
---|
1480 | do ProgressDone^TMGITR(.Itr)
|
---|
1481 |
|
---|
1482 | quit
|
---|
1483 |
|
---|
1484 | ShowEList(Array,Answers,CompactMode,ByTradeName,ShowBoth)
|
---|
1485 | ;"Purpose: To display the list of 'Empty' classes generated by GatherEmpties
|
---|
1486 | ;"Input: Array -- the array containing the data
|
---|
1487 | ;" Array("GENERIC NAME",VA GENERIC Name,DrugIEN)=""
|
---|
1488 | ;" Array("TRADE NAME",TradeName,DrugIEN)=""
|
---|
1489 | ;" Array("LINK GENERIC TO TRADE",TMGGeneric)=TradeName
|
---|
1490 | ;" Array("LINK TRADE TO GENERIC",TradeName)=TMGGeneric
|
---|
1491 | ;" Answers -- PASS BY REFERENCE. An OUT PARAMATER.
|
---|
1492 | ;" Array will receive display numbers with IENs
|
---|
1493 | ;" Answer(count)=DrugIEN^GenericDrugName^TradeName
|
---|
1494 | ;" Answer(count)=DrugIEN^GenericDrugName^TradeName
|
---|
1495 | ;" CompactMode -- OPTIONAL, if value=1, then only the LAST drug class will be
|
---|
1496 | ;" expanded (a potientially long list). Others will just show heading.
|
---|
1497 | ;" ByTradeName -- OPTIONAL, if value=1, then values are shown by TradeName
|
---|
1498 | ;" ShowBoth -- OPTIONAL, if value=1 then both Generic and TradeName shown.
|
---|
1499 | ;"Output: List is shown, and the Answers array is established and passed back.
|
---|
1500 | ;"Results: none.
|
---|
1501 |
|
---|
1502 | new someShown set someShown=0
|
---|
1503 | new count set count=1
|
---|
1504 | kill Answers
|
---|
1505 | set CompactMode=$get(CompactMode,0)
|
---|
1506 | set ByTradeName=$get(ByTradeName,0)
|
---|
1507 | set ShowBoth=$get(ShowBoth,0)
|
---|
1508 | new IEN
|
---|
1509 | new GenericName,TradeName,DrugName
|
---|
1510 | new CountLimit set CountLimit=99999
|
---|
1511 | if CompactMode=1 do
|
---|
1512 | . if ShowBoth=1 set CountLimit=8
|
---|
1513 | . else set CountLimit=10
|
---|
1514 | new Label set Label="GENERIC NAME"
|
---|
1515 | if ByTradeName=1 set Label="TRADE NAME"
|
---|
1516 |
|
---|
1517 | set DrugName=$order(Array(Label,""))
|
---|
1518 | if DrugName'="" for do quit:(DrugName="")!(count>CountLimit)
|
---|
1519 | . set IEN=$order(Array(Label,DrugName,""))
|
---|
1520 | . if IEN'="" for do quit:(IEN="")!(count>CountLimit)
|
---|
1521 | . . write count,". ",DrugName,!
|
---|
1522 | . . new OtherName
|
---|
1523 | . . if ByTradeName=0 do
|
---|
1524 | . . . set GenericName=DrugName
|
---|
1525 | . . . set TradeName=$get(Array("LINK GENERIC TO TRADE",GenericName))
|
---|
1526 | . . . set OtherName=TradeName
|
---|
1527 | . . else do
|
---|
1528 | . . . set TradeName=DrugName
|
---|
1529 | . . . set GenericName=$get(Array("LINK TRADE TO GENERIC",TradeName))
|
---|
1530 | . . . set OtherName=GenericName
|
---|
1531 | . . if ShowBoth=1 write " (",OtherName,")",!
|
---|
1532 | . . set Answers(count)=IEN_"^"_GenericName_"^"_TradeName
|
---|
1533 | . . set count=count+1
|
---|
1534 | . . set IEN=$order(Array(Label,DrugName,IEN))
|
---|
1535 | . set DrugName=$order(Array(Label,DrugName))
|
---|
1536 | . set someShown=1
|
---|
1537 |
|
---|
1538 | if 'someShown write " --- (List is Empty) ---",!
|
---|
1539 | quit
|
---|
1540 |
|
---|
1541 |
|
---|
1542 |
|
---|
1543 | ClassEClasses(Array)
|
---|
1544 | ;"Purpose: To allow user to classify drugs with empty (none) VA Drug Class
|
---|
1545 | ;"Input: Array -- PASS BY REFERENCE the array generated by GatherEmpties
|
---|
1546 | ;" Array("GENERIC NAME",VA GENERIC Name,DrugIEN)=""
|
---|
1547 | ;" Array("TRADE NAME",TradeName,DrugIEN)=""
|
---|
1548 | ;"Output: Database is changed, by adding data to field .09 (VA DRUG CLASS)
|
---|
1549 | ;"Results: none
|
---|
1550 |
|
---|
1551 | new done set done=0
|
---|
1552 | new input set input="R"
|
---|
1553 | new Answers
|
---|
1554 | new CompactMode set CompactMode=1 ;" (list display mode: 1=compact, 0=verb
|
---|
1555 | new ShowBoth set ShowBoth=0
|
---|
1556 | new ByTrade set ByTrade=1
|
---|
1557 | new EntryList,EntryS
|
---|
1558 |
|
---|
1559 | new Classes
|
---|
1560 | do GetClasses(.Classes)
|
---|
1561 | do KillIntro(.Classes)
|
---|
1562 |
|
---|
1563 | for do quit:(done=1)
|
---|
1564 | . if input="R" do
|
---|
1565 | . . write !!
|
---|
1566 | . . write "--------------------------------------------------",!
|
---|
1567 | . . write "Pick drug(s) to specify a DRUG CLASS",!
|
---|
1568 | . . write "--------------------------------------------------",!
|
---|
1569 | . . do ShowEList(.Array,.Answers,CompactMode,ByTrade,ShowBoth)
|
---|
1570 | . . write "--------------------------------------------------",!
|
---|
1571 | . . write "Pick drug(s) to specify a DRUG CLASS",!
|
---|
1572 | . write "--------------------------------------------------",!
|
---|
1573 | . write " R=refresh, ?=instructions, X=remove from list, I=info, F=find",!
|
---|
1574 | . write " G=Guess, L Lookup",!
|
---|
1575 | . write " C=set Compact ",$select((CompactMode=1):"OFF",1:"ON"),", "
|
---|
1576 | . write "T=set TradeName ",$select((ByTrade=1):"OFF",1:"ON"),", B=set Both names ",$select((ShowBoth=1):"OFF",1:"ON")
|
---|
1577 | . write ", ",!
|
---|
1578 | . write " # or #-# or #,#-#,# etc., S=SET tools, ^ done, ",!
|
---|
1579 | . if $get(EntryS)'="" write " Current SET #'s: ",EntryS,", D to delete SET",!
|
---|
1580 | . write "Enter number(s) to LOOKUP drug class (or codes listed above): R//"
|
---|
1581 | . read input:$get(DTIME,3600),!
|
---|
1582 | . if input="" set input="R"
|
---|
1583 | . set input=$$UP^XLFSTR(input)
|
---|
1584 | . if input="^" set done=1 quit
|
---|
1585 | . else if (input="?") do ;"---- instructions
|
---|
1586 | . . ;"do ShowInstructions()
|
---|
1587 | . . set input="R"
|
---|
1588 | . else if input="I" do ;" ---- drug info
|
---|
1589 | . . read "...Enter number of drug to get info about: ^//",input,!
|
---|
1590 | . . do ShowInfo(.Array,.Answers,+input)
|
---|
1591 | . . set input="R"
|
---|
1592 | . else if input="C" do ;"--- toggle compact mode
|
---|
1593 | . . set CompactMode='CompactMode
|
---|
1594 | . . set input="R"
|
---|
1595 | . else if input="T" do ;"---- toggle display by tradename
|
---|
1596 | . . set ByTrade='ByTrade
|
---|
1597 | . . set input="R"
|
---|
1598 | . else if input="B" do ;" ---- toggle display of both names.
|
---|
1599 | . . set ShowBoth='ShowBoth
|
---|
1600 | . . set input="R"
|
---|
1601 | . else if input="D" do ;"---- delete set
|
---|
1602 | . . kill EntryList,EntryS
|
---|
1603 | . . set input="R"
|
---|
1604 | . else if input="X" do ;" ---- delete entries
|
---|
1605 | . . new valid set valid=1
|
---|
1606 | . . if $get(EntryS)="" do quit:(valid=0)
|
---|
1607 | . . . read "...Enter number(s) to REMOVE from list: ^// ",input,!
|
---|
1608 | . . . set valid=$$MkMultList^TMGMISC(input,.EntryList)
|
---|
1609 | . . . if valid set EntryS=input
|
---|
1610 | . . if CompactMode=1 set input="R"
|
---|
1611 | . . new Cancelled
|
---|
1612 | . . do DoRemove(.Array,.Answers,.EntryList,ByTrade,1,.Cancelled)
|
---|
1613 | . . if Cancelled=0 kill EntryList,EntryS
|
---|
1614 | . else if input="S" do ;"---- set tools
|
---|
1615 | . . do DoSetTools(.Array,.Answers,.EntryList,.EntryS,.ByTrade,.ShowBoth)
|
---|
1616 | . . if CompactMode=1 set input="R"
|
---|
1617 | . else if input="F" do ;" ---- find drugs
|
---|
1618 | . . new valid set valid=1
|
---|
1619 | . . if $get(EntryS)="" do quit:(valid=0)
|
---|
1620 | EFL . . . read "...Enter number(s) to classify by FINDING a similar drug: (? help) ^// ",input,!
|
---|
1621 | . . . if input="?" do FindHelp() goto EFL
|
---|
1622 | . . . set valid=$$MkMultList^TMGMISC(input,.EntryList)
|
---|
1623 | . . . if valid set EntryS=input
|
---|
1624 | . . if CompactMode=1 set input="R"
|
---|
1625 | . . new Cancelled
|
---|
1626 | . . do FindPick(.Array,.Answers,.EntryList,1,.Cancelled)
|
---|
1627 | . . if Cancelled=0 kill EntryList,EntryS
|
---|
1628 | . else if (input="L")!(+input>0) do ;" ----- lookup drugs
|
---|
1629 | . . new valid set valid=1
|
---|
1630 | . . if $get(EntryS)="" do quit:(valid=0)
|
---|
1631 | . . . if input="L" read "...Enter number(s) to LOOKUP from list: ^// ",input,!
|
---|
1632 | . . . set valid=$$MkMultList^TMGMISC(input,.EntryList)
|
---|
1633 | . . . if valid set EntryS=input
|
---|
1634 | . . if CompactMode=1 set input="R"
|
---|
1635 | . . new Cancelled
|
---|
1636 | . . do DoLookup(.Array,.Answers,.Classes,.EntryList,1,.Cancelled)
|
---|
1637 | . . if Cancelled=0 kill EntryList,EntryS
|
---|
1638 | . else if input="G" do ;" ---- guess drugs
|
---|
1639 | . . new valid set valid=1
|
---|
1640 | . . if $get(EntryS)="" do quit:(valid=0)
|
---|
1641 | EGL . . . read "...Enter number(s) to classify by GUESSING: (? help) ^// ",input,!
|
---|
1642 | . . . if input="?" do FindHelp() goto EFL
|
---|
1643 | . . . set valid=$$MkMultList^TMGMISC(input,.EntryList)
|
---|
1644 | . . . if valid set EntryS=input
|
---|
1645 | . . if CompactMode=1 set input="R"
|
---|
1646 | . . new Cancelled
|
---|
1647 | . . do DoEGuess(.Array,.Answers,.EntryList,ByTrade,ShowBoth,.Cancelled,1,.Classes)
|
---|
1648 | . . if Cancelled=0 kill EntryList,EntryS
|
---|
1649 | . else if input'="R" do ;"---- accept numeric input etc.
|
---|
1650 | . . if $$MkMultList^TMGMISC(input,.EntryList)=0 quit
|
---|
1651 | . . set EntryS=input
|
---|
1652 | . . if CompactMode=1 set input="R"
|
---|
1653 |
|
---|
1654 | quit
|
---|
1655 |
|
---|
1656 |
|
---|
1657 | DoGuess(Array,Answers,EntryList,Cancelled,Classes)
|
---|
1658 | ;"Purpose: A wrapper for DoEGuess, with some automatically provided paremeters
|
---|
1659 | do DoEGuess(.Array,.Answers,.EntryList,0,0,.Cancelled,0,.Classes)
|
---|
1660 | quit
|
---|
1661 |
|
---|
1662 | DoEGuess(Array,Answers,List,ByTradeName,ShowBoth,Cancelled,FromECode,Classes)
|
---|
1663 | ;"Purpose: To guess as classification for entries.
|
---|
1664 | ;"Input: Array -- PASS BY REFERENCE, array holding data, As created by GatherEmpties(Array)
|
---|
1665 | ;" Array("GENERIC NAME",VA GENERIC Name,DrugIEN)=""
|
---|
1666 | ;" Array("TRADE NAME",TradeName,DrugIEN)=""
|
---|
1667 | ;" Array("LINK GENERIC TO TRADE",TMGGeneric)=TradeName
|
---|
1668 | ;" Array("LINK TRADE TO GENERIC",TradeName)=TMGGeneric
|
---|
1669 | ;" Answers -- PASS BY REFERENCE, an array linking display number to IENS.
|
---|
1670 | ;" Array should be the one created by ShowEList
|
---|
1671 | ;" Answer(count)=DrugIEN^GenericDrugName^TradeName
|
---|
1672 | ;" Answer(count)=DrugIEN^GenericDrugName^TradeName
|
---|
1673 | ;" List -- PASS BY REFERENCE -- an array of entries (user input values) to process.
|
---|
1674 | ;" Format as follows.
|
---|
1675 | ;" List(Entry number)=""
|
---|
1676 | ;" List(Entry number)=""
|
---|
1677 | ;" ByTradeName -- OPTIONAL, if value=1, then values are shown by TradeName
|
---|
1678 | ;" ShowBoth -- OPTIONAL, if value=1 then trade name and generic names both shown.
|
---|
1679 | ;" Cancelled -- OPTIONAL, PASS BY REFERENCE, will be set to 1 if user cancelled.
|
---|
1680 | ;" FromECode -- OPTIONAL, if value=1, then code is handled as if called from the 'empty'
|
---|
1681 | ;" code modules (ie HandleEmptyClasses). Default=0
|
---|
1682 | ;" Classes -- PASS BY REFERENCE -- An array holding classes.
|
---|
1683 | ;"Results: none
|
---|
1684 |
|
---|
1685 | set FromECode=$get(FromECode,0)
|
---|
1686 | set Cancelled=1 ;"default to cancellation
|
---|
1687 |
|
---|
1688 | new Results
|
---|
1689 | write "Searching for guesses...",$char(10)
|
---|
1690 |
|
---|
1691 | do GGuessList(.Array,.Answers,.List,.Results)
|
---|
1692 | ;" Results(Entry Number,"NAME",VASimilarDrugName,vapIEN)=ClassIEN^ClassCode^ClassName_vapIEN
|
---|
1693 | ;" Results(Entry Number,"NAME",VASimilarDrugName,vapIEN)=ClassIEN^ClassCode^ClassName_vapIEN
|
---|
1694 | ;" Results(Entry Number,"CLASS",ClassIEN,vapIEN)=ClassIEN^ClassCode^ClassName_vapIEN
|
---|
1695 | ;" Results(Entry Number,"CLASS",ClassIEN,vapIEN)=ClassIEN^ClassCode^ClassName_vapIEN
|
---|
1696 | ;" Results("ALL CLASSES",ClassIEN)=ClassIEN_"^"_ClassCode_"^"_ClassName
|
---|
1697 | ;" Results("ALL CLASSES",ClassIEN,matchName,vapIEN)=""
|
---|
1698 |
|
---|
1699 | new showExamples set showExamples=1
|
---|
1700 |
|
---|
1701 | DEGL0 write !,"GUESSES of class for these drugs: ",!
|
---|
1702 | do Disp2List(.Answers,.List,.ByTradeName,.ShowBoth)
|
---|
1703 |
|
---|
1704 | new subAnswers
|
---|
1705 | new someShown set someShown=0
|
---|
1706 | new count set count=0
|
---|
1707 | new classIEN set classIEN=""
|
---|
1708 | for set classIEN=+$order(Results("ALL CLASSES",classIEN)) quit:(classIEN'>0) do
|
---|
1709 | . set count=count+1
|
---|
1710 | . new node set node=$get(Results("ALL CLASSES",classIEN))
|
---|
1711 | . write " ",count,". CLASS: ",$piece(node,"^",3),!
|
---|
1712 | . set someShown=1
|
---|
1713 | . set subAnswers(count)=node
|
---|
1714 | . new matchName set matchName=""
|
---|
1715 | . new temp set temp=0
|
---|
1716 | . for set matchName=$order(Results("ALL CLASSES",classIEN,matchName)) quit:(matchName="")!(temp>5) do
|
---|
1717 | . . new vapIEN set vapIEN=""
|
---|
1718 | . . for set vapIEN=+$order(Results("ALL CLASSES",classIEN,matchName,vapIEN)) quit:(vapIEN'>0)!(temp>5) do
|
---|
1719 | . . . if showExamples=0 quit
|
---|
1720 | . . . write " e.g. ",matchName," (",vapIEN,")",!
|
---|
1721 | . . . set temp=temp+1
|
---|
1722 |
|
---|
1723 | if someShown=0 do goto DEGDone
|
---|
1724 | . write " -- (None Suggestions found) -- ",!!
|
---|
1725 | . new temp read "Press ENTER to continue.",temp,!
|
---|
1726 |
|
---|
1727 | new input,UsrClassIEN,className
|
---|
1728 | new defInput set defInput="^"
|
---|
1729 | if count=1 set defInput=1
|
---|
1730 | new fixing
|
---|
1731 | DEGL1
|
---|
1732 | set fixing=0
|
---|
1733 | write "[Enter F to fix (change) the class of a drug listed above.]",!
|
---|
1734 | write "[Enter E to toggle Examples ON/OFF]",!
|
---|
1735 | write "Enter number of CLASS to select (^ to abort): "_defInput_"// "
|
---|
1736 | read input:$get(DTIME,3600),!
|
---|
1737 | if input="" set input=defInput
|
---|
1738 | set input=$$UP^XLFSTR(input)
|
---|
1739 | if input="^" goto DEGDone
|
---|
1740 | if input="E" do goto DEGL0
|
---|
1741 | . set showExamples='showExamples
|
---|
1742 | if input="F" do goto:(input="^") DEGL1
|
---|
1743 | . set fixing=1
|
---|
1744 | . write !,"Enter number of CLASS containing erroneously classified drug (^ to abort): "_defInput_"// "
|
---|
1745 | . read input:$get(DTIME,3600) write !
|
---|
1746 | . if input="" set input=defInput
|
---|
1747 | set UsrClassIEN=+$get(subAnswers(input))
|
---|
1748 | if UsrClassIEN'>0 goto DEGL1
|
---|
1749 | if fixing=1 do goto DEGL0
|
---|
1750 | . do FixBadClass(.Results,UsrClassIEN,.Classes)
|
---|
1751 | set className=$piece($get(subAnswers(input)),"^",3)
|
---|
1752 | write !!
|
---|
1753 | if $$VerifyWrite(className,.Answers,.List,ByTradeName,ShowBoth)=0 goto DEGDone
|
---|
1754 | do WriteClass(UsrClassIEN,.Array,.Answers,.List,FromECode)
|
---|
1755 | set Cancelled=0 ;"set success here.
|
---|
1756 | DEGDone
|
---|
1757 | quit
|
---|
1758 |
|
---|
1759 |
|
---|
1760 | FixBadClass(GuessArray,UsrClassIEN,Classes)
|
---|
1761 | ;"Purpose: If guessing reveals that an existing drug has been misclassified, then
|
---|
1762 | ;" this function will allow correction of that drug (50.68 entry)
|
---|
1763 | ;"Input: GuessArray -- PASS BY REFERENCE. Format:
|
---|
1764 | ;" GuessArray(Entry Number,"NAME",VASimilarDrugName)=ClassIEN^ClassCode^ClassName^vapIEN
|
---|
1765 | ;" GuessArray(Entry Number,"CLASS",ClassIEN)=ClassIEN^ClassCode^ClassName
|
---|
1766 | ;" GuessArray("ALL CLASSES",classIEN)=classIEN_"^"_classCode_"^"_className
|
---|
1767 | ;" GuessArray("ALL CLASSES",classIEN,matchName)=vapIEN
|
---|
1768 |
|
---|
1769 | ;" GuessArray(Entry Number,"NAME",VASimilarDrugName,vapIEN)=ClassIEN^ClassCode^ClassName_vapIEN
|
---|
1770 | ;" GuessArray(Entry Number,"CLASS",ClassIEN,vapIEN)=ClassIEN^ClassCode^ClassName_vapIEN
|
---|
1771 | ;" GuessArray("ALL CLASSES",ClassIEN)=ClassIEN_"^"_ClassCode_"^"_ClassName
|
---|
1772 | ;" GuessArray("ALL CLASSES",ClassIEN,matchName,vapIEN)=""
|
---|
1773 |
|
---|
1774 |
|
---|
1775 | ;" UsrClassIEN -- The class containing the incorrectly classified drug
|
---|
1776 | ;" Classes -- PASS BY REFERENCE. An array holding classes.
|
---|
1777 |
|
---|
1778 | if $get(UsrClassIEN)="" goto FBCDone
|
---|
1779 | new className
|
---|
1780 | set className=$piece($get(GuessArray("ALL CLASSES",UsrClassIEN)),"^",3)
|
---|
1781 |
|
---|
1782 | new Menu,UsrSlct
|
---|
1783 | new menuNum set menuNum=0
|
---|
1784 | new matchName set matchName=""
|
---|
1785 | new lastMatchName,lastvapIEN
|
---|
1786 | new AllArray,IENArray,vapIEN
|
---|
1787 | set Menu(0)="Pick Which Drug does NOT belong in class: "_className
|
---|
1788 | for set matchName=$order(GuessArray("ALL CLASSES",UsrClassIEN,matchName)) quit:(matchName="") do
|
---|
1789 | . set vapIEN=""
|
---|
1790 | . for set vapIEN=$order(GuessArray("ALL CLASSES",UsrClassIEN,matchName,vapIEN)) quit:(vapIEN="") do
|
---|
1791 | . . set menuNum=menuNum+1
|
---|
1792 | . . set Menu(menuNum)=matchName_" (#"_vapIEN_")"_$char(9)_"@^"_vapIEN_"^"_matchName
|
---|
1793 | . . set AllArray(vapIEN)=matchName
|
---|
1794 | . . set AllArray("NAME",matchName,vapIEN)=""
|
---|
1795 | . . set lastMatchName=matchName,lastvapIEN=vapIEN
|
---|
1796 | if menuNum>1 do
|
---|
1797 | . set menuNum=menuNum+1
|
---|
1798 | . set Menu(menuNum)="ALL of the above drugs"_$char(9)_"ALL"
|
---|
1799 | . if menuNum'>3 quit
|
---|
1800 | . set menuNum=menuNum+1
|
---|
1801 | . set Menu(menuNum)="OR you may enter #-#, or #,#,#-#,# etc."_$char(9)_"#"
|
---|
1802 |
|
---|
1803 | FBCMC1
|
---|
1804 | if menuNum>1 do
|
---|
1805 | . write ! set UsrSlct=$$Menu^TMGUSRIF(.Menu,"^") ;"@^vapIEN^matchName
|
---|
1806 | else do
|
---|
1807 | . set UsrSlct="@^"_lastvapIEN_"^"_lastMatchName
|
---|
1808 |
|
---|
1809 | if UsrSlct="ALL" do
|
---|
1810 | . merge IENArray=AllArray
|
---|
1811 | else if +UsrSlct>0 do
|
---|
1812 | . new EntryList,Entry
|
---|
1813 | . if $$MkMultList^TMGMISC(UsrSlct,.EntryList)>0 do
|
---|
1814 | . . set Entry=""
|
---|
1815 | . . for set Entry=$order(EntryList(Entry)) quit:(Entry="") do
|
---|
1816 | . . . new vapIEN,vapName,s
|
---|
1817 | . . . set s=$piece(Menu(Entry),$char(9),2)
|
---|
1818 | . . . if s="" quit
|
---|
1819 | . . . set vapIEN=$piece(s,"^",2),vapName=$piece(s,"^",3)
|
---|
1820 | . . . set IENArray(vapIEN)=vapName
|
---|
1821 | . . . set IENArray("NAME",vapIEN)=""
|
---|
1822 | else if $piece(UsrSlct,"^",1)="@" do
|
---|
1823 | . set IENArray($piece(UsrSlct,"^",2))=$piece(UsrSlct,"^",3)
|
---|
1824 | . set IENArray("NAME",$piece(UsrSlct,"^",3),$piece(UsrSlct,"^",2))=""
|
---|
1825 | else if UsrSlct="^" goto FBCDone
|
---|
1826 | else if UsrSlct=0 set UsrSlct=""
|
---|
1827 | else if UsrSlct="??" do goto FBCDone
|
---|
1828 | . write !,"For some reason, IEN of selected drug couldn't be found. Sorry.",!
|
---|
1829 | else if menuNum>1 goto FBCMC1
|
---|
1830 | else goto FBCDone
|
---|
1831 |
|
---|
1832 | write "Now pick CORRECT drug class for the chosen drug(s)",!
|
---|
1833 | do PressToCont^TMGUSRIF
|
---|
1834 | new newClassIEN set newClassIEN=$$SelectClass(.Classes,0)
|
---|
1835 | if newClassIEN=0 goto FBCDone
|
---|
1836 | ;"new className set className=$$GET1^DIQ(50.605,newClassIEN,1)
|
---|
1837 | ;"write "Set CLASS for VA PRODUCT entry: "_$piece(UsrSlct,"^",2),!
|
---|
1838 | ;"write "to be: ",className,"?"
|
---|
1839 | ;"new % set %=1
|
---|
1840 | ;"do YN^DICN write !
|
---|
1841 | ;"if %=-1 goto FBCDone
|
---|
1842 |
|
---|
1843 | new vapName set vapName=""
|
---|
1844 | for set vapName=$order(IENArray("NAME",vapName)) quit:(vapName="") do
|
---|
1845 | . new entryNum set entryNum=""
|
---|
1846 | . ;" GuessArray(Entry Number,"NAME",VASimilarDrugName,vapIEN)=ClassIEN^ClassCode^ClassName_vapIEN
|
---|
1847 | . for set entryNum=$order(GuessArray(entryNum)) quit:(+entryNum'>0) do
|
---|
1848 | . . set vapIEN=""
|
---|
1849 | . . for set vapIEN=$order(GuessArray(entryNum,"NAME",vapName,vapIEN)) quit:(vapIEN="") do
|
---|
1850 | . . . new s set s=$get(GuessArray(entryNum,"NAME",vapName,vapIEN))
|
---|
1851 | . . . if s="" quit
|
---|
1852 | . . . new classIEN set classIEN=+s
|
---|
1853 | . . . if classIEN=newClassIEN quit ;"already at correct class
|
---|
1854 | . . . set IENArray(vapIEN)=vapName
|
---|
1855 |
|
---|
1856 | set vapIEN=""
|
---|
1857 | for set vapIEN=$order(IENArray(vapIEN)) quit:(+vapIEN'>0) do
|
---|
1858 | . new TMGFDA,TMGMSG
|
---|
1859 | . set TMGFDA(50.68,vapIEN_",",15)=newClassIEN ;"className
|
---|
1860 | . do FILE^DIE("I","TMGFDA","TMGMSG")
|
---|
1861 | . do ShowIfDIERR^TMGDEBUG(.TMGMSG)
|
---|
1862 | . kill GuessArray("ALL CLASSES",UsrClassIEN,$get(IENArray(vapIEN),"xx"))
|
---|
1863 |
|
---|
1864 | FBCDone
|
---|
1865 | quit
|
---|
1866 |
|
---|
1867 | GGuessList(Array,Answers,List,Results)
|
---|
1868 | ;"Purpose: To gather a guessing list of possible classes for each entry in List
|
---|
1869 | ;"Input: Array -- PASS BY REFERENCE, array holding data, As created by Gather Classes
|
---|
1870 | ;" Array("GENERIC NAME",VA GENERIC Name,DrugIEN)=""
|
---|
1871 | ;" Array("TRADE NAME",TradeName,DrugIEN)=""
|
---|
1872 | ;" Array("LINK GENERIC TO TRADE",TMGGeneric)=TradeName
|
---|
1873 | ;" Array("LINK TRADE TO GENERIC",TradeName)=TMGGeneric
|
---|
1874 | ;" Answers -- PASS BY REFERENCE, an array linking display number to IENS.
|
---|
1875 | ;" Array should be the one created by ShowEList
|
---|
1876 | ;" Answer(count)=DrugIEN^GenericDrugName^TradeName
|
---|
1877 | ;" Answer(count)=DrugIEN^GenericDrugName^TradeName
|
---|
1878 | ;" List -- PASS BY REFERENCE -- an array of entries (user input values) to process.
|
---|
1879 | ;" Format as follows.
|
---|
1880 | ;" List(Entry number)=""
|
---|
1881 | ;" List(Entry number)=""
|
---|
1882 | ;" Results -- PASS BY REFERENCE -- and OUT PARAMETER to receive results, as follows:
|
---|
1883 | ;" Results(Entry Number,"NAME",VASimilarDrugName,vapIEN)=ClassIEN^ClassCode^ClassName_vapIEN
|
---|
1884 | ;" Results(Entry Number,"NAME",VASimilarDrugName,vapIEN)=ClassIEN^ClassCode^ClassName_vapIEN
|
---|
1885 | ;" Results(Entry Number,"CLASS",ClassIEN,vapIEN)=ClassIEN^ClassCode^ClassName_vapIEN
|
---|
1886 | ;" Results(Entry Number,"CLASS",ClassIEN,vapIEN)=ClassIEN^ClassCode^ClassName_vapIEN
|
---|
1887 | ;" Results("ALL CLASSES",ClassIEN)=ClassIEN_"^"_ClassCode_"^"_ClassName
|
---|
1888 | ;" Results("ALL CLASSES",ClassIEN,matchName,vapIEN)=""
|
---|
1889 | ;"Results: none
|
---|
1890 |
|
---|
1891 | new Guesses,GenericName,TradeName
|
---|
1892 | new i
|
---|
1893 | set i=$order(List(""))
|
---|
1894 | if i'="" for do quit:(i="")
|
---|
1895 | . set GenericName=$piece($get(Answers(i)),"^",2)
|
---|
1896 | . set TradeName=$piece($get(Answers(i)),"^",3)
|
---|
1897 | . set i=$order(List(i))
|
---|
1898 | . if $data(Guesses("TRY",TradeName))>0 quit
|
---|
1899 | . set Guesses("TRY",TradeName)=1
|
---|
1900 | . new name
|
---|
1901 | . new j,p,done set done=0
|
---|
1902 | . new X,TMGARRAY,TMGMSG
|
---|
1903 | . for j=$length(GenericName,"/"):-1:1 do
|
---|
1904 | . . set name=$piece(GenericName,"/",j)
|
---|
1905 | . . for p=$length(name," "):-1:1 do quit:(done=1)
|
---|
1906 | . . . new TMGSRCH set TMGSRCH=$piece(name," ",1,p)
|
---|
1907 | . . . do FIND^DIC(50.68,"","","",TMGSRCH,"*","","","","TMGARRAY","TMGMSG")
|
---|
1908 | . . . if +$get(TMGARRAY("DILIST",0))>0 do
|
---|
1909 | . . . . merge Guesses("POS MATCH",GenericName,TMGSRCH,"NAME")=TMGARRAY("DILIST",1)
|
---|
1910 | . . . . merge Guesses("POS MATCH",GenericName,TMGSRCH,"IEN")=TMGARRAY("DILIST",2)
|
---|
1911 | . . . . set done=1
|
---|
1912 | kill Guesses("TRY") ;"temporary use of those items already searched.
|
---|
1913 |
|
---|
1914 | ;"Now convert matching IENs into drug classes.
|
---|
1915 | set GenericName=""
|
---|
1916 | for set GenericName=$order(Guesses("POS MATCH",GenericName)) quit:(GenericName="") do
|
---|
1917 | . new namePart set namePart=""
|
---|
1918 | . for set namePart=$order(Guesses("POS MATCH",GenericName,namePart)) quit:(namePart="") do
|
---|
1919 | . . new j set j=0
|
---|
1920 | . . for set j=$order(Guesses("POS MATCH",GenericName,namePart,"IEN",j)) quit:(j'>0) do
|
---|
1921 | . . . new vapIEN set vapIEN=+$get(Guesses("POS MATCH",GenericName,namePart,"IEN",j))
|
---|
1922 | . . . if vapIEN>0 do
|
---|
1923 | . . . . new classIEN,matchName
|
---|
1924 | . . . . set classIEN=+$$GET1^DIQ(50.68,vapIEN,15,"I")
|
---|
1925 | . . . . set matchName=$$GET1^DIQ(50.68,vapIEN,.01) ;"was 5 (print name)
|
---|
1926 | . . . . if (classIEN'>0)!(matchName="") quit
|
---|
1927 | . . . . set Guesses("POS MATCH",GenericName,"CLASS",matchName,classIEN,vapIEN)=""
|
---|
1928 |
|
---|
1929 | ;"Now compose results
|
---|
1930 | set i=""
|
---|
1931 | for set i=$order(List(i)) quit:(i="") do
|
---|
1932 | . set GenericName=$piece($get(Answers(i)),"^",2)
|
---|
1933 | . set TradeName=$piece($get(Answers(i)),"^",3)
|
---|
1934 | . new matchName set matchName=""
|
---|
1935 | . for set matchName=$order(Guesses("POS MATCH",GenericName,"CLASS",matchName)) quit:(matchName="") do
|
---|
1936 | . . new classIEN set classIEN=""
|
---|
1937 | . . for set classIEN=+$order(Guesses("POS MATCH",GenericName,"CLASS",matchName,classIEN)) quit:(classIEN'>0) do
|
---|
1938 | . . . new classCode,className
|
---|
1939 | . . . set classCode=$$GET1^DIQ(50.605,classIEN,.01)
|
---|
1940 | . . . set className=$$GET1^DIQ(50.605,classIEN,1)
|
---|
1941 | . . . new vapIEN set vapIEN=""
|
---|
1942 | . . . for set vapIEN=+$order(Guesses("POS MATCH",GenericName,"CLASS",matchName,classIEN,vapIEN)) quit:(vapIEN'>0) do
|
---|
1943 | . . . . set Results(i,"NAME",matchName,vapIEN)=classIEN_"^"_classCode_"^"_className_"^"_vapIEN
|
---|
1944 | . . . . set Results(i,"CLASS",classIEN,vapIEN)=classIEN_"^"_classCode_"^"_className_"^"_vapIEN
|
---|
1945 | . . . . set Results("ALL CLASSES",classIEN)=classIEN_"^"_classCode_"^"_className
|
---|
1946 | . . . . set Results("ALL CLASSES",classIEN,matchName,vapIEN)=""
|
---|
1947 |
|
---|
1948 | quit
|
---|
1949 |
|
---|
1950 |
|
---|
1951 |
|
---|
1952 | AutoEClassification(Array)
|
---|
1953 | ;"Purpose: To attempt to automatically classify drugs that have not potential match
|
---|
1954 | ;"Input: -- Array PASS BY REFERENCE, an OUT PARAMETER. Prior entries are NOT killed.
|
---|
1955 | ;"Output: Array will be filled as follows:
|
---|
1956 | ;" Array("POSS MATCH",ClassName,TMGTradename,DrugIEN)=ClassIEN^ClassCode
|
---|
1957 | ;" Array("POSS MATCH",ClassName,TMGTradename,DrugIEN)=ClassIEN^ClassCode
|
---|
1958 | ;" Array(DrugIEN,"?")=""
|
---|
1959 | ;" Array("?",DrugIEN)=""
|
---|
1960 | ;"Results: none
|
---|
1961 |
|
---|
1962 | new tempArray
|
---|
1963 | new Classes
|
---|
1964 | new Answers
|
---|
1965 | write "Gathering drugs with no CLASS information and no existing match...",!
|
---|
1966 |
|
---|
1967 | new CompactMode set CompactMode=0 ;" (list display mode: 1=compact, 0=verb
|
---|
1968 | new ShowBoth set ShowBoth=0
|
---|
1969 | new ByTrade set ByTrade=1
|
---|
1970 |
|
---|
1971 | do GatherEmpties(.tempArray)
|
---|
1972 | ;" Array("GENERIC NAME",VA GENERIC Name,DrugIEN)=""
|
---|
1973 | ;" Array("TRADE NAME",TradeName,DrugIEN)=""
|
---|
1974 | ;" Array("LINK GENERIC TO TRADE",TMGGeneric)=TradeName
|
---|
1975 | ;" Array("LINK TRADE TO GENERIC",TradeName)=TMGGeneric
|
---|
1976 |
|
---|
1977 | do GetClasses(.Classes)
|
---|
1978 | do KillIntro(.Classes)
|
---|
1979 |
|
---|
1980 | do ShowEList(.tempArray,.Answers,CompactMode,ByTrade,ShowBoth)
|
---|
1981 | ;" Answer(count)=DrugIEN^GenericDrugName^TradeName
|
---|
1982 | ;" Answer(count)=DrugIEN^GenericDrugName^TradeName
|
---|
1983 |
|
---|
1984 | write !,"Now scanning unclassified drugs for possible CLASS matches...",!
|
---|
1985 |
|
---|
1986 | new TMGTOTAL set TMGTOTAL=$$ListCt^TMGMISC("Answers")
|
---|
1987 | new TMGCUR
|
---|
1988 | new StartTime set StartTime=$H
|
---|
1989 | new ProgressFn
|
---|
1990 | set ProgressFn="if TMGCUR#10=1 do ProgressBar^TMGUSRIF(TMGCUR,""Progress"",0,TMGTOTAL,,StartTime)"
|
---|
1991 | new abort set abort=0
|
---|
1992 | new i set i=$order(Answers(""))
|
---|
1993 | if i'="" for do quit:(i="")!abort
|
---|
1994 | . if $$KeyPressed^TMGUSRIF()=27 do quit:abort=1
|
---|
1995 | . . new % set %=2
|
---|
1996 | . . write !,"Abort" do YN^DICN write !
|
---|
1997 | . . if %=1 set abort=1
|
---|
1998 | . new List set List(i)=""
|
---|
1999 | . new class set class=$$Guess1(.Array,.Answers,.List)
|
---|
2000 | . if +class>0 do
|
---|
2001 | . . new ClassName,ClassCode,ClassIEN,TMGTradeName,DrugIEN
|
---|
2002 | . . set ClassName=$piece(class,"^",3)
|
---|
2003 | . . set ClassCode=$piece(class,"^",2)
|
---|
2004 | . . set ClassIEN=$piece(class,"^",1)
|
---|
2005 | . . set TMGTradeName=$piece(Answers(i),"^",3)
|
---|
2006 | . . set DrugIEN=$piece(Answers(i),"^",1)
|
---|
2007 | . . set Array("POSS MATCH",ClassName,TMGTradeName,DrugIEN)=ClassIEN_"^"_ClassCode
|
---|
2008 | . . do CUU^TMGTERM(2) write !
|
---|
2009 | . . new s set s="Found: "_TMGTradeName_" --> "_ClassName
|
---|
2010 | . . set s=s_" "
|
---|
2011 | . . write $extract(s,1,79),!
|
---|
2012 | . if $get(ProgressFn)'="" do
|
---|
2013 | . . set TMGCUR=i
|
---|
2014 | . . new $etrap set $etrap="w ""??Progress function -- error trapped??"",!"
|
---|
2015 | . . xecute ProgressFn
|
---|
2016 | . set i=$order(Answers(i))
|
---|
2017 |
|
---|
2018 | quit
|
---|
2019 |
|
---|
2020 |
|
---|
2021 |
|
---|
2022 | Guess1(Array,Answers,List)
|
---|
2023 | ;"Purpose: To return a guessed class, IF there is only one possible guess.
|
---|
2024 | ;"Input: Array -- PASS BY REFERENCE, array holding data, As created by Gather Classes
|
---|
2025 | ;" Array("GENERIC NAME",VA GENERIC Name,DrugIEN)=""
|
---|
2026 | ;" Array("TRADE NAME",TradeName,DrugIEN)=""
|
---|
2027 | ;" Array("LINK GENERIC TO TRADE",TMGGeneric)=TradeName
|
---|
2028 | ;" Array("LINK TRADE TO GENERIC",TradeName)=TMGGeneric
|
---|
2029 | ;" Answers -- PASS BY REFERENCE, an array linking display number to IENS.
|
---|
2030 | ;" Array should be the one created by ShowEList
|
---|
2031 | ;" Answer(count)=DrugIEN^GenericDrugName^TradeName
|
---|
2032 | ;" Answer(count)=DrugIEN^GenericDrugName^TradeName
|
---|
2033 | ;" List -- PASS BY REFERENCE -- an array of entries (user input values) to process.
|
---|
2034 | ;" Format as follows.
|
---|
2035 | ;" List(Entry number)=""
|
---|
2036 | ;" List(Entry number)=""
|
---|
2037 | ;"Results: If only 1 matching class found, then classIEN^classCode^className, otherwise 0
|
---|
2038 |
|
---|
2039 | new ResultArray
|
---|
2040 | new result set result=0
|
---|
2041 | do GGuessList(.Array,.Answers,.List,.ResultArray)
|
---|
2042 | ;" Results(Entry Number,"NAME",VASimilarDrugName)=ClassIEN^ClassCode^ClassName
|
---|
2043 | ;" Results(Entry Number,"CLASS",ClassIEN)=ClassIEN^ClassCode^ClassName
|
---|
2044 | ;" Results("ALL CLASSES",classIEN)=classIEN_"^"_classCode_"^"_className
|
---|
2045 | ;" Results("ALL CLASSES",classIEN,matchName)=""
|
---|
2046 |
|
---|
2047 | ;" Results(Entry Number,"NAME",VASimilarDrugName,vapIEN)=ClassIEN^ClassCode^ClassName_vapIEN
|
---|
2048 | ;" Results(Entry Number,"CLASS",ClassIEN,vapIEN)=ClassIEN^ClassCode^ClassName_vapIEN
|
---|
2049 | ;" Results("ALL CLASSES",ClassIEN)=ClassIEN_"^"_ClassCode_"^"_ClassName
|
---|
2050 | ;" Results("ALL CLASSES",ClassIEN,matchName,vapIEN)=""
|
---|
2051 |
|
---|
2052 |
|
---|
2053 | if $$ListCt^TMGMISC($name(ResultArray("ALL CLASSES")))=1 do
|
---|
2054 | . new classIEN
|
---|
2055 | . set classIEN=$order(ResultArray("ALL CLASSES",""))
|
---|
2056 | . set result=$get(ResultArray("ALL CLASSES",classIEN))
|
---|
2057 |
|
---|
2058 | quit result
|
---|
2059 |
|
---|
2060 |
|
---|
2061 | DoSetTools(Array,Answers,List,EntryS,ByTradeName,ShowBoth)
|
---|
2062 | ;"Purpose: to provide tools for managing SETS to be worked on (List)
|
---|
2063 | ;"Input: Array -- PASS BY REFERENCE, array holding data, As created by Gather Classes
|
---|
2064 | ;" Array("GENERIC NAME",VA GENERIC Name,DrugIEN)=""
|
---|
2065 | ;" Array("TRADE NAME",TradeName,DrugIEN)=""
|
---|
2066 | ;" Array("LINK GENERIC TO TRADE",TMGGeneric)=TradeName
|
---|
2067 | ;" Array("LINK TRADE TO GENERIC",TradeName)=TMGGeneric
|
---|
2068 | ;" Answers -- PASS BY REFERENCE, an array linking display number to IENS.
|
---|
2069 | ;" Array should be the one created by ShowEList
|
---|
2070 | ;" Answer(count)=DrugIEN^GenericDrugName^TradeName
|
---|
2071 | ;" Answer(count)=DrugIEN^GenericDrugName^TradeName
|
---|
2072 | ;" List -- PASS BY REFERENCE -- an array of entries (user input values) to modify.
|
---|
2073 | ;" EntryS -- PASS BY REFERENCE -- a string representing the current set.
|
---|
2074 | ;" ByTradeName -- OPTIONAL, PASS BY REFERENCE, if value=1, then values are shown by TradeName
|
---|
2075 | ;" ShowBoth -- OPTIONAL, PASS BY REFERENCE, if value=1 then trade name and generic names both shown.
|
---|
2076 |
|
---|
2077 | set ByTradeName=$get(ByTradeName,0)
|
---|
2078 | set ShowBoth=$get(ShowBoth,0)
|
---|
2079 |
|
---|
2080 | new input,done
|
---|
2081 | set EntryS=$get(EntryS)
|
---|
2082 | set done=0
|
---|
2083 |
|
---|
2084 | for do quit:(done=1)
|
---|
2085 | . write !,"Tools to modify SET of entry numbers",!
|
---|
2086 | . write "------------------------------------",!
|
---|
2087 | . write "A=Add, X=Remove from SET, C=Clear, D=Display, S=Search, ^ Return",!
|
---|
2088 | . write "T=set TradeName ",$select((ByTrade=1):"OFF",1:"ON"),", B=set Both names ",$select((ShowBoth=1):"OFF",1:"ON"),!
|
---|
2089 | . read "Enter Option: ^// ",input:$get(DTIME,3600),!
|
---|
2090 | . if input="" set input="^"
|
---|
2091 | . set input=$$UP^XLFSTR(input)
|
---|
2092 | . if input="^" write ! set done=1 quit
|
---|
2093 | . if (input="?") do
|
---|
2094 | . . ;"do ShowInstructions()
|
---|
2095 | . . set input="R"
|
---|
2096 | . else if input="A" do
|
---|
2097 | . . read "Enter number(s) to ADD to list: ",input:$get(DTIME,3600),!
|
---|
2098 | . . if $$MkMultList^TMGMISC(input,.List) set EntryS=EntryS_" & "_input
|
---|
2099 | . else if input="X" do
|
---|
2100 | . . new tempList
|
---|
2101 | . . read "Enter number(s) to REMOVE to list: ",input:$get(DTIME,3600),!
|
---|
2102 | . . if $$MkMultList^TMGMISC(input,.tempList)=0 quit
|
---|
2103 | . . new i set i=$order(tempList(""))
|
---|
2104 | . . if i'="" for do quit:(i="")
|
---|
2105 | . . . kill List(i)
|
---|
2106 | . . . set i=$order(tempList(i))
|
---|
2107 | . . set EntryS=EntryS_" - "_input
|
---|
2108 | . else if input="C" do
|
---|
2109 | . . kill List set EntryS=""
|
---|
2110 | . . set input="D"
|
---|
2111 | . else if input="S" do
|
---|
2112 | . . if $$MkSrchList(.Answers,.List,.ByTradeName,.ShowBoth)=1 do
|
---|
2113 | . . . if EntryS'="" set EntryS=EntryS_" & "
|
---|
2114 | . . . set EntryS=EntryS_" (SEARCH)"
|
---|
2115 | . . set input="D"
|
---|
2116 | . else if input="T" do
|
---|
2117 | . . set ByTrade='ByTrade
|
---|
2118 | . . set input="D"
|
---|
2119 | . else if input="B" do
|
---|
2120 | . . set ShowBoth='ShowBoth
|
---|
2121 | . . set input="D"
|
---|
2122 | . if input="D" do
|
---|
2123 | . . write !,"Here is the current SET: ",EntryS,!
|
---|
2124 | . . do Disp2List(.Answers,.List,.ByTradeName,.ShowBoth)
|
---|
2125 | . . ;"new temp read " -- Press [ENTER] to Continue --",temp:$get(DTIME,3600),!
|
---|
2126 |
|
---|
2127 | quit
|
---|
2128 |
|
---|
2129 | MkSrchList(Answers,List,ByTradeName,ShowBoth)
|
---|
2130 | ;"Purpose: to search through Answers for string
|
---|
2131 | ;"Input: Answers -- PASS BY REFERENCE, an array linking display number to IENS.
|
---|
2132 | ;" Array should be the one created by ShowEList
|
---|
2133 | ;" Answer(count)=DrugIEN^GenericDrugName^TradeName
|
---|
2134 | ;" Answer(count)=DrugIEN^GenericDrugName^TradeName
|
---|
2135 | ;" List -- PASS BY REFERENCE -- an OUT PARAMETER, to hold array of entries (user input values)
|
---|
2136 | ;" prior entries are NOT KILLED
|
---|
2137 | ;" ByTradeName -- OPTIONAL, if value=1, then values are shown by TradeName
|
---|
2138 | ;" ShowBoth -- OPTIONAL, if value=1 then trade name and generic names both shown.
|
---|
2139 | ;"Results: 1=some added to list, 0=none added to list.
|
---|
2140 |
|
---|
2141 | set ByTradeName=$get(ByTradeName,0)
|
---|
2142 | set ShowBoth=$get(ShowBoth,0)
|
---|
2143 | new result set result=0
|
---|
2144 |
|
---|
2145 | new input
|
---|
2146 | write !,"Search in ",$select((ByTradeName=1):"TRADE NAME",1:"GENRIC NAME")
|
---|
2147 | if ShowBoth write " and ",$select((ByTradeName=0):"TRADE NAME",1:"GENRIC NAME")
|
---|
2148 | read !,"Entry text to SEARCH for in entries: ^// ",input:$get(DTIME,3600),!
|
---|
2149 | if input="" set input="^"
|
---|
2150 | set input=$$UP^XLFSTR(input)
|
---|
2151 | if input="^" goto MSLDone
|
---|
2152 | new i set i=$order(Answers(""))
|
---|
2153 | if i'="" for do quit:(i="")
|
---|
2154 | . new TradeName,GenericName
|
---|
2155 | . set GenericName=$$UP^XLFSTR($piece($get(Answers(i)),"^",2))
|
---|
2156 | . set TradeName=$$UP^XLFSTR($piece($get(Answers(i)),"^",3))
|
---|
2157 | . if (ByTradeName=1)!(ShowBoth=1) do
|
---|
2158 | . . if TradeName[input set List(i)="",result=1
|
---|
2159 | . if (ByTradeName=0)!(ShowBoth=1) do
|
---|
2160 | . . if GenericName[input set List(i)="",result=1
|
---|
2161 | . set i=$order(Answers(i))
|
---|
2162 |
|
---|
2163 | MSLDone
|
---|
2164 | quit result
|
---|
2165 |
|
---|
2166 | ;"=================================================================
|
---|
2167 |
|
---|
2168 | SelEdClasses
|
---|
2169 | ;"Purpose: Allow user to browse classes with selector
|
---|
2170 | ;"Input: none
|
---|
2171 | ;"Results: none
|
---|
2172 |
|
---|
2173 | new Options,IEN
|
---|
2174 | set Options("FIELDS",1)=".09:1^VA DRUG CLASS^24"
|
---|
2175 | set Options("FIELDS",1,"LOOKUP FN")="$$SECLookup^TMGNDF3A()"
|
---|
2176 | set Options("FIELDS",2)=".05^TRADENAME^24"
|
---|
2177 | set Options("FIELDS",2,"NO EDIT")=1 ;"i.e. show for browsing, but don't allow edit
|
---|
2178 | set Options("FIELDS",3)=".07^GENERIC NAME^24"
|
---|
2179 | set Options("FIELDS",3,"NO EDIT")=1 ;"i.e. show for browsing, but don't allow edit
|
---|
2180 | set Options("FIELDS","MAX NUM")=3
|
---|
2181 | set Options("FILE")="22706.9^TMG FDA IMPORT COMPILED"
|
---|
2182 | ;"Get all records with SKIP THIS RECORD = 0 (KEEP)
|
---|
2183 |
|
---|
2184 | write "Finding records not marked to be skipped...",!
|
---|
2185 | do GetFldValue^TMGSELED(22706.9,6,0,$name(Options("IEN LIST")))
|
---|
2186 |
|
---|
2187 | SEC1
|
---|
2188 | if $$SELED^TMGSELED(.Options)'=2 goto SECDone
|
---|
2189 | if $$GetIENs^TMGSELED(.Options)=0 goto SECDone
|
---|
2190 | goto SEC1
|
---|
2191 |
|
---|
2192 | SECDone quit
|
---|
2193 |
|
---|
2194 |
|
---|
2195 | Ed1Classes
|
---|
2196 | ;"Purpose: Allow user to browse classes with selector
|
---|
2197 | ;"Input: none
|
---|
2198 | ;"Results: none
|
---|
2199 |
|
---|
2200 | new Options,IEN
|
---|
2201 | set Options("FIELDS",1)=".09:1^VA DRUG CLASS^24"
|
---|
2202 | set Options("FIELDS",1,"LOOKUP FN")="$$SECLookup^TMGNDF3A()"
|
---|
2203 | set Options("FIELDS",2)=".05^TRADENAME^24"
|
---|
2204 | set Options("FIELDS",2,"NO EDIT")=1 ;"i.e. show for browsing, but don't allow edit
|
---|
2205 | set Options("FIELDS",3)=".07^GENERIC NAME^24"
|
---|
2206 | set Options("FIELDS",3,"NO EDIT")=1 ;"i.e. show for browsing, but don't allow edit
|
---|
2207 | set Options("FIELDS","MAX NUM")=3
|
---|
2208 | set Options("FILE")="22706.9^TMG FDA IMPORT COMPILED"
|
---|
2209 | ;"Get all records with SKIP THIS RECORD = 0 (KEEP)
|
---|
2210 |
|
---|
2211 | new DIC,X,Y
|
---|
2212 | set DIC=22706.9
|
---|
2213 | set DIC(0)="MAEQ"
|
---|
2214 | do ^DIC write !
|
---|
2215 | if +Y'>0 goto E1Done
|
---|
2216 | set Options("IEN LIST",+Y)=""
|
---|
2217 |
|
---|
2218 | E1
|
---|
2219 | if $$SELED^TMGSELED(.Options)'=2 goto E1Done
|
---|
2220 | if $$GetIENs^TMGSELED(.Options)=0 goto E1Done
|
---|
2221 | goto E1
|
---|
2222 |
|
---|
2223 | E1Done quit
|
---|
2224 |
|
---|
2225 |
|
---|
2226 | SECLookup()
|
---|
2227 | ;"Purpose: A custom call-back function that the selector will use
|
---|
2228 | ;" for looking up class of a given record or list of records.
|
---|
2229 | ;"Input: None (because this is to be used only for ONE field)
|
---|
2230 | ;"Results: Returns IEN for Class, or 0 if not found or abort.
|
---|
2231 |
|
---|
2232 | new Classes,UsrClassIEN
|
---|
2233 |
|
---|
2234 | do GetClasses(.Classes)
|
---|
2235 | do KillIntro(.Classes)
|
---|
2236 | set UsrClassIEN=$$SelectClass(.Classes)
|
---|
2237 |
|
---|
2238 | quit UsrClassIEN
|
---|