1 | TMGNDF1D ;TMG/kst/FDA Import: Import name cleanup ;03/25/06
|
---|
2 | ;;1.0;TMG-LIB;**1**;01/23/07
|
---|
3 |
|
---|
4 | ;"FDA - NATIONAL DRUG FILES COMPILING FUNCTIONS
|
---|
5 | ;"Code for cleaning up names.
|
---|
6 | ;"Kevin Toppenberg MD
|
---|
7 | ;"GNU General Public License (GPL) applies
|
---|
8 | ;"1-23-07
|
---|
9 |
|
---|
10 | ;"=======================================================================
|
---|
11 | ;" API -- Public Functions.
|
---|
12 | ;"=======================================================================
|
---|
13 | ;"Menu
|
---|
14 | ;"Fix1Name(IEN) -- perform this units fixes for just 1 record
|
---|
15 |
|
---|
16 | ;"=======================================================================
|
---|
17 | ;" Private Functions.
|
---|
18 | ;"=======================================================================
|
---|
19 | ;"PickSkips -- select records to mark as to be skipped.
|
---|
20 | ;"RemoveDups -- Set duplicate records to be skipped
|
---|
21 | ;"=======================================================================
|
---|
22 |
|
---|
23 | Menu
|
---|
24 | ;"Purpose: To give an interactive menu of tools to clean up data.
|
---|
25 |
|
---|
26 | new Menu,UsrSlct
|
---|
27 | new i set i=0
|
---|
28 | set Menu(i)="Pick Option for Cleaning Up FDA Imported Data (1D)",i=i+1
|
---|
29 | set Menu(i)="Fix common misspellings etc. in Trade Names"_$char(9)_"NormalizeNames",i=i+1
|
---|
30 | set Menu(i)="SEARCH and REPLACE words in drug TRADE NAME"_$char(9)_"SEARCHd05",i=i+1
|
---|
31 | set Menu(i)="SEARCH and REPLACE words in drug STRENGTH"_$char(9)_"SEARCH1",i=i+1
|
---|
32 | set Menu(i)="SEARCH and REPLACE words in drug UNITS"_$char(9)_"SEARCH2",i=i+1
|
---|
33 | set Menu(i)="Fix dose decimals (e.g. '.5;.125' --> '0.5;0.125')"_$char(9)_"DECIMAL",i=i+1
|
---|
34 | set Menu(i)="Fix units decimals (e.g. 'MG/.5 ML;' --> 'MG/0.5ML')"_$char(9)_"UNITS",i=i+1
|
---|
35 | set Menu(i)="Remove unwanted DOSES from TRADE NAME"_$char(9)_"ScrubDoses",i=i+1
|
---|
36 | set Menu(i)="Edit import TRADE NAME (Caution)"_$char(9)_"EditTradeName",i=i+1
|
---|
37 | set Menu(i)="HELP"_$char(9)_"?"
|
---|
38 | set Menu("P")="Prev Stage"_$char(9)_"Prev"
|
---|
39 | set Menu("N")="Next Stage"_$char(9)_"Next"
|
---|
40 |
|
---|
41 | CD1
|
---|
42 | write #
|
---|
43 | set UsrSlct=$$Menu^TMGUSRIF(.Menu,"^")
|
---|
44 | if UsrSlct="^" goto CDDone
|
---|
45 | if UsrSlct=0 set UsrSlct=""
|
---|
46 |
|
---|
47 | if UsrSlct="Prev" goto Menu^TMGNDF1A ;"quit can occur from there...
|
---|
48 | if UsrSlct="Next" goto Menu^TMGNDF1E ;"quit can occur from there...
|
---|
49 |
|
---|
50 | if UsrSlct="NormalizeNames" do NormalizeNames goto CD1
|
---|
51 | if UsrSlct="SEARCHd05" do Srch5Replace goto CD1
|
---|
52 | if UsrSlct="SEARCH1" do Srch1Replace goto CD1
|
---|
53 | if UsrSlct="SEARCH2" do Srch2Replace goto CD1
|
---|
54 | if UsrSlct="DECIMAL" do FixDecimals goto CD1
|
---|
55 | if UsrSlct="UNITS" do FixUnits goto CD1
|
---|
56 | if UsrSlct="ScrubDoses" do ScrubDoses goto CD1
|
---|
57 | if UsrSlct="EditTradeName" do EditTradename() goto CD1
|
---|
58 | if UsrSlct="?" do ShowHelp goto CD1
|
---|
59 | goto CDDone
|
---|
60 | CDDone
|
---|
61 | quit
|
---|
62 |
|
---|
63 | ShowHelp
|
---|
64 | ;"Purpose: to display help instructions
|
---|
65 |
|
---|
66 | write #,!
|
---|
67 | write "Q: Why does the data need clean up?",!
|
---|
68 | write "A: The FDA database seems to consist of data provided",!
|
---|
69 | write " by vendors. As such, there is a big variety in the",!
|
---|
70 | write " formats of drug names and in the dose specifications,",!
|
---|
71 | write " and also accuracy (many drugs are missing information.)",!
|
---|
72 | write !
|
---|
73 | write "Q: Are inaccurate or unwanted drug records deleted?",!
|
---|
74 | write "A: No. They are kept so that with the NEXT import, their",!
|
---|
75 | write " unwanted status will be remembered. Instead, they are",!
|
---|
76 | write " flagged with a SKIP THIS RECORD marker. They will be",!
|
---|
77 | write " ignored during further processing.",!
|
---|
78 | write !
|
---|
79 | write "Q: How do I flag an unwanted record to be SKIPPED?",!
|
---|
80 | write "A: Drug records are browsed in a 'selector' (more below)",!
|
---|
81 | write " and all the drugs to be skipped are selected. Then the",!
|
---|
82 | write " selector is exited by typing [ESC][ESC], and one is ",!
|
---|
83 | write " given a chance to mark all to be SKIPPED at once.",!
|
---|
84 | write !
|
---|
85 | do PressToCont^TMGUSRIF
|
---|
86 | write !
|
---|
87 | write "Q: How do I use the selector?",!
|
---|
88 | write "A: The selector is a tool from the VPE library. It has its",!
|
---|
89 | write " own help. A quick answer is to move the cursor up and down",!
|
---|
90 | write " and press SPACE to select or deselect a record. I recommend",!
|
---|
91 | write " using the '+' feature to select all records matching a",!
|
---|
92 | write " specified pattern.",!
|
---|
93 | write !
|
---|
94 | write "... more later...",!
|
---|
95 |
|
---|
96 | do PressToCont^TMGUSRIF
|
---|
97 | quit
|
---|
98 |
|
---|
99 |
|
---|
100 | Fix1Name(IEN)
|
---|
101 | ;"Purpose: perform this units fixes for just 1 record
|
---|
102 | ;"Input: IEN -- IEN in 22706.9
|
---|
103 | ;"results: none
|
---|
104 |
|
---|
105 | new temp
|
---|
106 |
|
---|
107 | set temp=$$Fix1Dec(IEN)
|
---|
108 | set temp=$$Fix1Unit(IEN)
|
---|
109 | set temp=$$Norm1Name(IEN)
|
---|
110 | set temp=$$Scrub1Dose(IEN)
|
---|
111 |
|
---|
112 | quit
|
---|
113 |
|
---|
114 |
|
---|
115 | FixDecimals
|
---|
116 | ;"Purpose: To convert bare decimals (e.g. '.5' --> '0.5') in STRENGTH
|
---|
117 |
|
---|
118 | new Itr,IEN,strength,abort,count,newStr
|
---|
119 | set abort=0,count=0
|
---|
120 | set IEN=$$ItrInit^TMGITR(22706.9,.Itr)
|
---|
121 | do PrepProgress^TMGITR(.Itr,20,0,"IEN")
|
---|
122 | if IEN'="" for do quit:($$ItrNext^TMGITR(.Itr,.IEN)'>0)!abort
|
---|
123 | . if $piece($get(^TMG(22706.9,IEN,1)),"^",4)=1 quit ;"1=SKIP
|
---|
124 | . if $$KeyPressed^TMGUSRIF=27 set abort=1 quit
|
---|
125 | . set count=count+$$Fix1Dec(IEN)
|
---|
126 |
|
---|
127 | write !,count," records changed",!
|
---|
128 | do PressToCont^TMGUSRIF
|
---|
129 |
|
---|
130 | quit
|
---|
131 |
|
---|
132 | Fix1Dec(IEN)
|
---|
133 | ;"Purpose: To convert bare decimals (e.g. '.5' --> '0.5') in STRENGTH
|
---|
134 | ;"Input: IEN -- IEN in 22706.9
|
---|
135 | ;"Results: 1 if modified, 0 if not
|
---|
136 |
|
---|
137 | new result set result=0
|
---|
138 | set strength=$piece($get(^TMG(22706.9,IEN,0)),"^",2)
|
---|
139 | if strength'["." goto F1DD
|
---|
140 | set newStr=$$FixNum(strength)
|
---|
141 | if newStr'=strength do
|
---|
142 | . new TMGFDA,TMGMSG
|
---|
143 | . set TMGFDA(22706.9,IEN_",",1)=newStr
|
---|
144 | . do FILE^DIE("K","TMGFDA","TMGMSG")
|
---|
145 | . do ShowIfDIERR^TMGDEBUG(.TMGMSG,.result)
|
---|
146 |
|
---|
147 | F1DD quit result
|
---|
148 |
|
---|
149 |
|
---|
150 | FixUnits
|
---|
151 | ;"Purpose: To fix errors in Units (remove spaces, fix hanging decimals)
|
---|
152 |
|
---|
153 | new Itr,IEN,strength,abort,count,newStr
|
---|
154 | set abort=0,count=0
|
---|
155 | set IEN=$$ItrInit^TMGITR(22706.9,.Itr)
|
---|
156 | do PrepProgress^TMGITR(.Itr,20,0,"IEN")
|
---|
157 | if IEN'="" for do quit:($$ItrNext^TMGITR(.Itr,.IEN)'>0)!abort
|
---|
158 | . if $$KeyPressed^TMGUSRIF=27 set abort=1 quit
|
---|
159 | . if $piece($get(^TMG(22706.9,IEN,1)),"^",4)=1 quit ;"1=SKIP
|
---|
160 | . set count=count+$$Fix1Unit(IEN)
|
---|
161 | write !,count," records changed",!
|
---|
162 | do PressToCont^TMGUSRIF
|
---|
163 |
|
---|
164 | quit
|
---|
165 |
|
---|
166 |
|
---|
167 | Fix1Unit(IEN)
|
---|
168 | ;"Purpose: To fix errors in Units (remove spaces, fix hanging decimals)
|
---|
169 | ;"Input: IEN -- IEN in 22706.9
|
---|
170 | ;"Results: 1 if changed, 0 if not
|
---|
171 |
|
---|
172 | new result set result=0
|
---|
173 | set units=$piece($get(^TMG(22706.9,IEN,0)),"^",3)
|
---|
174 | set newStr=$$FixNum(units)
|
---|
175 | set newStr=$$Substitute^TMGSTUTL(newStr,"/PER","/")
|
---|
176 | set newStr=$$Substitute^TMGSTUTL(newStr,"/VIL","/VIAL")
|
---|
177 | set newStr=$translate(newStr," ","")
|
---|
178 | if $extract(newStr,$length(newStr))=";" set newStr=$extract(newStr,1,$length(newStr)-1)
|
---|
179 | if newStr'=units do
|
---|
180 | . new TMGFDA,TMGMSG
|
---|
181 | . set TMGFDA(22706.9,IEN_",",2)=newStr
|
---|
182 | . do FILE^DIE("K","TMGFDA","TMGMSG")
|
---|
183 | . do ShowIfDIERR^TMGDEBUG(.TMGMSG)
|
---|
184 | . set result=1
|
---|
185 |
|
---|
186 | quit result
|
---|
187 |
|
---|
188 |
|
---|
189 | FixNum(numStr)
|
---|
190 | ;"Purpose: to fix hanging decimals in numStr (e.g. '.5' --> '0.5')
|
---|
191 | ;"Input: numStr -- the string to be fixed
|
---|
192 | ;"Results: returns fixed string
|
---|
193 | new result set result=numStr
|
---|
194 | new i for i=1:1:$length(result,".")-1 do
|
---|
195 | . new p set p=$$Pos^TMGSTUTL(".",result,i)
|
---|
196 | . new priorCh set priorCh=$extract(result,p-1)
|
---|
197 | . if +priorCh=priorCh quit
|
---|
198 | . if (p=1) do
|
---|
199 | . . set result="0"_result
|
---|
200 | . else do
|
---|
201 | . . new sA,sB
|
---|
202 | . . set sA=$extract(result,1,p-1),sB=$extract(result,p,9999)
|
---|
203 | . . set result=sA_"0"_sB
|
---|
204 |
|
---|
205 | quit result
|
---|
206 |
|
---|
207 | Srch5Replace
|
---|
208 | ;"Purpose: To provide a mechanism for altering the drug trade names (.05 field)
|
---|
209 | ;" e.g. TETRACYCLINE HYDROCHLORIDE --> TETRACYCLINE HCL
|
---|
210 | ;" or LISINOPRIL/HYDROCHLOROTHIAZIDE --> LISINOPRIL/HCTZ
|
---|
211 | ;" The reason for this is that many drugs are put in BOTH WAYS, leading to
|
---|
212 | ;" duplicate entries, differing only in the expansion of these words.
|
---|
213 |
|
---|
214 | do SrchReplace^TMGMISC(22706.9,.05,"SEARCH & REPLACE in Trade Name of FDA Imported Drugs")
|
---|
215 | quit
|
---|
216 |
|
---|
217 | Srch2Replace
|
---|
218 | ;"Purpose: To provide a mechanism for altering the drug UNITS (field 2)
|
---|
219 | ;" The reason for this is that many drugs are put in BOTH WAYS, leading to
|
---|
220 | ;" duplicate entries, differing only in the expansion of these words.
|
---|
221 |
|
---|
222 | do SrchReplace^TMGMISC(22706.9,2,"SEARCH & REPLACE in UNITS of FDA Imported Drugs")
|
---|
223 | quit
|
---|
224 |
|
---|
225 | Srch1Replace
|
---|
226 | ;"Purpose: To provide a mechanism for altering the drug STRENGTH (field 1)
|
---|
227 | ;" The reason for this is that many drugs are put in BOTH WAYS, leading to
|
---|
228 | ;" duplicate entries, differing only in the expansion of these words.
|
---|
229 |
|
---|
230 | do SrchReplace^TMGMISC(22706.9,1,"SEARCH & REPLACE in STRENGTH of FDA Imported Drugs")
|
---|
231 | quit
|
---|
232 |
|
---|
233 |
|
---|
234 | NormalizeNames
|
---|
235 | ;"Purpose: To 'normalize' names, meaning replacing common misspellings etc.
|
---|
236 |
|
---|
237 | new map ;"These are numbered to preserve their order
|
---|
238 | do SetupMap(.map)
|
---|
239 |
|
---|
240 | new Itr,IEN,count
|
---|
241 | set count=0
|
---|
242 | new abort set abort=0
|
---|
243 | set IEN=$$ItrInit^TMGITR(22706.9,.Itr)
|
---|
244 | do PrepProgress^TMGITR(.Itr,20,0,"IEN")
|
---|
245 | if IEN'="" for do quit:($$ItrNext^TMGITR(.Itr,.IEN)'>0)!abort
|
---|
246 | . if $$UserAborted^TMGUSRIF set abort=1 quit
|
---|
247 | . if $piece($get(^TMG(22706.9,IEN,1)),"^",4)=1 quit ;"1=SKIP
|
---|
248 | . set count=count+$$Norm1Name(IEN,.map)
|
---|
249 |
|
---|
250 | do ProgressDone^TMGITR(.Itr)
|
---|
251 |
|
---|
252 | write count," Trade names (.05 field) modified.",!
|
---|
253 | if count>1 write "Because some changes are interdependant, please run this option again.",!
|
---|
254 | do PressToCont^TMGUSRIF
|
---|
255 |
|
---|
256 | quit
|
---|
257 |
|
---|
258 |
|
---|
259 | Norm1Name(IEN,map)
|
---|
260 | ;"Purpose: To 'normalize' names, meaning replacing common misspellings etc. for 1 record
|
---|
261 | ;"Input: IEN -- IEN in 22706.9
|
---|
262 | ;" map -- OPTIONAL. Array of changes to be made. If not provided, then
|
---|
263 | ;" it will be created here.
|
---|
264 | ;"Results: 1 if modified, 0 if not
|
---|
265 |
|
---|
266 | if $data(map)=0 do SetupMap(.map)
|
---|
267 |
|
---|
268 | new result set result=0
|
---|
269 | new TradeName set TradeName=$piece($get(^TMG(22706.9,IEN,0)),"^",4) ;"field .05
|
---|
270 | new oldName set oldName=TradeName
|
---|
271 | new num set num=""
|
---|
272 | for set num=$order(map(num)) quit:(num="") do
|
---|
273 | . set srchS=$order(map(num,"")) quit:(srchS="")
|
---|
274 | . if TradeName'[srchS quit
|
---|
275 | . write !,srchS,"-->",$get(map(num,srchS)),!
|
---|
276 | . set TradeName=$$Substitute^TMGSTUTL(TradeName,srchS,$get(map(num,srchS)))
|
---|
277 |
|
---|
278 | if TradeName'=oldName do
|
---|
279 | . new TMGFDA,TMGMSG
|
---|
280 | . set TMGFDA(22706.9,IEN_",",.05)=TradeName
|
---|
281 | . do FILE^DIE("K","TMGFDA","TMGMSG")
|
---|
282 | . set result=1
|
---|
283 | . do ShowIfDIERR^TMGDEBUG(.TMGMSG)
|
---|
284 |
|
---|
285 | quit result
|
---|
286 |
|
---|
287 |
|
---|
288 | SetupMap(map)
|
---|
289 | ;"Purpose: to set up mapping of spelling corrections to be made.
|
---|
290 | ;"Input: map -- PASS BY REFERENCE. An OUT parameter.
|
---|
291 |
|
---|
292 | ;"NOTE: These are numbered to preserve their order
|
---|
293 | new i set i=0
|
---|
294 | set i=i+1,map(i,"SOLUTION")="SOLN"
|
---|
295 | set i=i+1,map(i,"OINTMENT")="OINT"
|
---|
296 | set i=i+1,map(i,"CAPSULES")="CAP"
|
---|
297 | set i=i+1,map(i,"CAPSULE")="CAP"
|
---|
298 | set i=i+1,map(i,"TALBETS")="TAB"
|
---|
299 | set i=i+1,map(i,"INJECTION")="INJ"
|
---|
300 | set i=i+1,map(i,"FOR INJ")="INJ"
|
---|
301 | set i=i+1,map(i,"EXTENDED")="EXT"
|
---|
302 | set i=i+1,map(i,"RELEASE")="REL"
|
---|
303 | set i=i+1,map(i,"INH ")="IHNL "
|
---|
304 | set i=i+1,map(i,"INHALATION")="INHL"
|
---|
305 | set i=i+1,map(i,"SUSPENSION")="SUSP"
|
---|
306 | set i=i+1,map(i,"OPHTHALMIC")="OPHTH"
|
---|
307 | set i=i+1,map(i,"HYDROCHLORIDE")="HCL"
|
---|
308 | set i=i+1,map(i,"FOR INJECTABLE SUSPENSION")="INJ"
|
---|
309 | set i=i+1,map(i,"CODEINE PHOSPHATE")="CODEINE"
|
---|
310 | set i=i+1,map(i,"WITH CODEINE")="CODEINE"
|
---|
311 | set i=i+1,map(i,"SOLN FOR INJ")="INJ SOLN"
|
---|
312 | set i=i+1,map(i,"POWDER FOR INJ")="INJ POWDER"
|
---|
313 | set i=i+1,map(i,"SOLN OPHTH")="OPHTH SOLN"
|
---|
314 | set i=i+1,map(i," SUFATE")=" SULFATE"
|
---|
315 | set i=i+1,map(i,"ALBUTEROL SULFATE")="ALBUTEROL"
|
---|
316 | set i=i+1,map(i,"FOR INHL")="INHL"
|
---|
317 | set i=i+1,map(i,"SOLN INHL")="INHL SOLN"
|
---|
318 | set i=i+1,map(i,"SUSTAINED")="SUST"
|
---|
319 | set i=i+1,map(i," BITART ")=" BITARTRATE "
|
---|
320 | set i=i+1,map(i," BITARTRATERATER")=" BITARTRATER"
|
---|
321 | set i=i+1,map(i," BITARTRATER ")=" BITARTRATE "
|
---|
322 | set i=i+1,map(i," BITRATE")=" BITARTRATE"
|
---|
323 | set i=i+1,map(i,"BITARTARATE")="BITARTRATE"
|
---|
324 | set i=i+1,map(i,"BITARTRATERATE")="BITARTRATE"
|
---|
325 | set i=i+1,map(i,"HYDROCODONEARATE")="HYDROCODONE"
|
---|
326 | set i=i+1,map(i,"HYDROCODONE ACET")="HYDROCODONE APAP"
|
---|
327 | set i=i+1,map(i,"HYDROCODONE BITARTRATE")="HYDROCODONE"
|
---|
328 | set i=i+1,map(i,"DIHYDROCODEINE BITARTRATE")="DIHYDROCODEINE"
|
---|
329 | set i=i+1,map(i,"WITH HYDROCODONE")="HYDROCODONE"
|
---|
330 | set i=i+1,map(i,"SOLN FOR IRRIGATION")="IRRIGATION SOLN"
|
---|
331 | set i=i+1,map(i,"CAPLETS")="CAP"
|
---|
332 | set i=i+1,map(i,"TABLET")="TAB"
|
---|
333 | set i=i+1,map(i,"POWDER")="PWDR"
|
---|
334 | set i=i+1,map(i,"TAB EXT REL")="EXT REL TAB"
|
---|
335 | set i=i+1,map(i,"SOLN ORAL")="ORAL SOLN"
|
---|
336 | set i=i+1,map(i,"TAB SUST REL")="SUST REL TAB"
|
---|
337 | set i=i+1,map(i,"RELD ")="REL "
|
---|
338 | set i=i+1,map(i," ")=" "
|
---|
339 | set i=i+1,map(i," SULFATE")=""
|
---|
340 | set i=i+1,map(i,"HYDROCHLOROTHIAZIDE")="HCTZ"
|
---|
341 | set i=i+1,map(i," AND ")=" "
|
---|
342 | set i=i+1,map(i,"HYDROCLORIDE")="HCL"
|
---|
343 | set i=i+1,map(i,"HYDROCLOROTHIAZIDE")="HCTZ"
|
---|
344 | set i=i+1,map(i,"HYDROCHLORITHIZIDE")="HCTZ"
|
---|
345 | set i=i+1,map(i,"HYDROCHLOROHIAZIDE")="HCTZ"
|
---|
346 | set i=i+1,map(i,"HYDROCLORTHIAZIDE")="HCTZ"
|
---|
347 | set i=i+1,map(i,"HYDROCLORIDE")="HCTZ"
|
---|
348 | set i=i+1,map(i,"HYDROCHLORIRDE")="HCTZ"
|
---|
349 | set i=i+1,map(i," HCT ")=" HCTZ "
|
---|
350 | set i=i+1,map(i,"HYDROCHLORIC ACID")="HCL"
|
---|
351 | set i=i+1,map(i,"HYDROCHORIDE")="HCL"
|
---|
352 | set i=i+1,map(i,"HYDROCHLORITHIAZIDE")="HCTZ"
|
---|
353 | set i=i+1,map(i,"HYDROCHLOROTIAZIDE")="HCTZ"
|
---|
354 | set i=i+1,map(i,"HYDROCHOROTHIAZIDE")="HCTZ"
|
---|
355 | set i=i+1,map(i,"HYDROCHLOROTHIAZED")="HCTZ"
|
---|
356 | set i=i+1,map(i,"HYDROCHLOROYTHIAZIDE")="HCTZ"
|
---|
357 | set i=i+1,map(i,"HYDROCHLOROTHIZED")="HCYZ"
|
---|
358 | set i=i+1,map(i,"HYDROCHLROTHIAZIDE")=""
|
---|
359 | set i=i+1,map(i,"HYDROCHOLRIDE")="HCL"
|
---|
360 | set i=i+1,map(i,"HYDROCHOLORIDE")="HCL"
|
---|
361 | set i=i+1,map(i,"HYDROCHLORTHIAZIDE")="HCTZ"
|
---|
362 | set i=i+1,map(i,"HYDROCHOLIRDE")="HCL"
|
---|
363 | set i=i+1,map(i,"HYDROCHLROIDE")="HCL"
|
---|
364 | set i=i+1,map(i,"HYDROCHLORIE")="HCL"
|
---|
365 | set i=i+1,map(i,"HYDROCHLORINE")="HCL"
|
---|
366 | set i=i+1,map(i,"CODIENE")="CODEINE"
|
---|
367 | set i=i+1,map(i,"SOLN INJ")="INJ SOLN"
|
---|
368 | set i=i+1,map(i,"SUBSTAINED")="SUST"
|
---|
369 | set i=i+1,map(i,"SODIM")="SODIUM"
|
---|
370 | set i=i+1,map(i,"CAP EXT REL")="EXT REL CAP"
|
---|
371 | set i=i+1,map(i,"CAP SUST REL")="SUST REL CAP"
|
---|
372 | set i=i+1,map(i,"INHAL ")="INHL "
|
---|
373 | set i=i+1,map(i,"FOR ORAL SOLN")="ORAL SOLN"
|
---|
374 | set i=i+1,map(i," I V ")=" IV "
|
---|
375 | set i=i+1,map(i,"INTRAVENOUS")="IV"
|
---|
376 | set i=i+1,map(i,"FOR ORAL SUSP")="ORAL SUSP"
|
---|
377 | set i=i+1,map(i,"CAPLET")="CAP"
|
---|
378 | set i=i+1,map(i,"WITH HCTZ")="HCTZ"
|
---|
379 | set i=i+1,map(i," HCL ")=" "
|
---|
380 | set i=i+1,map(i," HCL/")=""
|
---|
381 | set i=i+1,map(i,"SUST REL")="SR"
|
---|
382 | set i=i+1,map(i,"SR SR")="SR"
|
---|
383 | set i=i+1,map(i,"SUPENSION")="SUSP"
|
---|
384 | set i=i+1,map(i,"FOR SUSP")="SUSP"
|
---|
385 | set i=i+1,map(i,"SUSP ORAL")="ORAL SUSP"
|
---|
386 | set i=i+1,map(i," USP")=""
|
---|
387 | set i=i+1,map(i,"PHOSPHATE")="PHOS"
|
---|
388 | set i=i+1,map(i,"PHOSPHATES")="PHOS"
|
---|
389 | set i=i+1,map(i,"METROPROLOL")="METOPROLOL"
|
---|
390 | set i=i+1,map(i,"EXT-REL")="EXT REL"
|
---|
391 | set i=i+1,map(i," HCLT")=" HCL"
|
---|
392 | set i=i+1,map(i," HCLM")=" HCL"
|
---|
393 | set i=i+1,map(i," HCL")=""
|
---|
394 | set i=i+1,map(i,"INJECTABLE")="INJ"
|
---|
395 | set i=i+1,map(i,"HYDROCHODONE")="HYDROCODONE"
|
---|
396 | set i=i+1,map(i,"HYDROCHLOROTHAZIDE")="HCTZ"
|
---|
397 | set i=i+1,map(i,"HYDROCHLOROIDE")="HCL"
|
---|
398 | set i=i+1,map(i,"SODIUM CHLORIDE")="NACL"
|
---|
399 | set i=i+1,map(i," NAD ")=" AND "
|
---|
400 | set i=i+1,map(i," SODIUM")=""
|
---|
401 | set i=i+1,map(i,"LEVOYHYROXINE")="LEVOTHYROXINE"
|
---|
402 | set i=i+1,map(i," ACETAMINOPHEN")=" APAP"
|
---|
403 | set i=i+1,map(i,"NAPSLATE")="NAPSYLATE"
|
---|
404 | set i=i+1,map(i,"NAPSULATE")="NAPSYLATE"
|
---|
405 | set i=i+1,map(i," NAPSYLATE")=""
|
---|
406 | set i=i+1,map(i,"DARVOCET-N")="DARVOCET N"
|
---|
407 | set i=i+1,map(i,"PROPOX NAP")="PROPOXYPHENE"
|
---|
408 | set i=i+1,map(i,"PROPOX ")="PROPOXYPHENE "
|
---|
409 | set i=i+1,map(i,"PROPOXY ")="PROPOXYPHENE "
|
---|
410 | set i=i+1,map(i,"PROPOXYPHEN ")="PROPOXYPHENE "
|
---|
411 | set i=i+1,map(i,"PROPACET ")="PROPOXYPHENE APAP "
|
---|
412 | set i=i+1,map(i,"CLAULNATE ")="CLAVULANATE "
|
---|
413 | set i=i+1,map(i,"ASPPIRIN ")="ASPIRIN "
|
---|
414 |
|
---|
415 | set i=i+1,map(i," &")=""
|
---|
416 | set i=i+1,map(i," / ")=" "
|
---|
417 | set i=i+1,map(i," CAFFINE")=" CAFFEINE"
|
---|
418 | set i=i+1,map(i,"MGAPAP")="MG APAP"
|
---|
419 | set i=i+1,map(i,"5MG")="5 MG"
|
---|
420 | set i=i+1,map(i,"0MG")="0 MG"
|
---|
421 |
|
---|
422 | quit
|
---|
423 |
|
---|
424 |
|
---|
425 | ScrubDoses
|
---|
426 | ;"Purpose: To remove doses from Tradename
|
---|
427 | ;"
|
---|
428 |
|
---|
429 | new skips,ignore,PreSelArray
|
---|
430 | do SetScrubMaps(.skips,.ignore)
|
---|
431 |
|
---|
432 | new Itr,IEN,count
|
---|
433 | set count=0
|
---|
434 | new abort set abort=0
|
---|
435 | write "Gathering a list of suggested name changes, removing #'s and doses...",!
|
---|
436 | set IEN=$$ItrInit^TMGITR(22706.9,.Itr)
|
---|
437 | do PrepProgress^TMGITR(.Itr,20,0,"IEN")
|
---|
438 | if IEN'="" for do quit:($$ItrNext^TMGITR(.Itr,.IEN)'>0)!abort
|
---|
439 | . if $$UserAborted^TMGUSRIF set abort=1 quit
|
---|
440 | . set count=count+$$Scrub1Dose(IEN,.skips,.ignore,0,.PreSelArray)
|
---|
441 | do ProgressDone^TMGITR(.Itr)
|
---|
442 |
|
---|
443 | if $data(PreSelArray)=0 goto SDDone
|
---|
444 | new DelArray
|
---|
445 | do SelRxList("PreSelArray","DelArray","SELECT ALLOWED NAME CHANGES (COLUMN 1=OLD,2=NEW) ESC ESC WHEN DONE",3)
|
---|
446 | if $data(DelArray)=0 goto SDDone
|
---|
447 |
|
---|
448 | new NewName set NewName=""
|
---|
449 | for set NewName=$order(DelArray(NewName)) quit:(NewName="") do
|
---|
450 | . new IEN set IEN=0
|
---|
451 | . for set IEN=$order(DelArray(NewName,IEN)) quit:(+IEN'>0) do
|
---|
452 | . . new TMGFDA,TMGMSG
|
---|
453 | . . set TMGFDA(22706.9,IEN_",",.05)=NewName
|
---|
454 | . . do FILE^DIE("K","TMGFDA","TMGMSG")
|
---|
455 | . . set count=count+1
|
---|
456 | . . do ShowIfDIERR^TMGDEBUG(.TMGMSG)
|
---|
457 |
|
---|
458 | SDDone
|
---|
459 | write count," Trade names (.05 field) modified.",!
|
---|
460 | do PressToCont^TMGUSRIF
|
---|
461 |
|
---|
462 | quit
|
---|
463 |
|
---|
464 |
|
---|
465 | Scrub1Dose(IEN,skips,ignore,askuser,PreSelArray)
|
---|
466 | ;"Purpose: To remove doses from Tradename from 1 record
|
---|
467 | ;"Input: skips -- PASS BY REFERENCE. OPTIONAL
|
---|
468 | ;" ignore -- PASS BY REFERENCE. OPTIONAL
|
---|
469 | ;" askuser -- if 1, then user is asked. Default=1
|
---|
470 | ;" Otherwise, PreSelArray is filled with questions for user
|
---|
471 | ;" PreSelArray -- PASS BY REFERENCE. OPTIONAL
|
---|
472 | ;"Results: 1 if modified, 0 if not (including options put into PreSelArray)
|
---|
473 |
|
---|
474 | new result set result=0
|
---|
475 | if ($data(skips)=0)!($data(ignore)=0) do
|
---|
476 | . kill skips,ignore
|
---|
477 | . do SetScrubMaps(.skips,.ignore)
|
---|
478 | set askuser=+$get(askuser,1)
|
---|
479 |
|
---|
480 | new TradeName set TradeName=$piece($get(^TMG(22706.9,IEN,0)),"^",4) ;"field .05
|
---|
481 | new j set j=0
|
---|
482 | new ignore1 set ignore1=0
|
---|
483 | for set j=$order(ignore(j)) quit:(j="") do
|
---|
484 | . if TradeName[ignore(j) set ignore1=1
|
---|
485 | if ignore1 goto S1DD
|
---|
486 | set j=0
|
---|
487 | for set j=$order(skips(j)) quit:(j="") do
|
---|
488 | . new srchS set srchS=$get(skips(j))
|
---|
489 | . if TradeName'[srchS quit
|
---|
490 | . set TradeName=$$Substitute^TMGSTUTL(TradeName,srchS,"@@@"_$char(64+j)_"@@@")
|
---|
491 | new oldName set oldName=TradeName
|
---|
492 | set TradeName=$$ScrubNumeric^TMGSTUTL(TradeName)
|
---|
493 | if TradeName=oldName goto S1DD
|
---|
494 | if TradeName="" goto S1DD
|
---|
495 | if TradeName["@@@" do
|
---|
496 | . new j set j=$ascii($piece(TradeName,"@@@",2))-64
|
---|
497 | . set TradeName=$piece(TradeName,"@@@",1)_$get(skips(j))_$piece(TradeName,"@@@",3)
|
---|
498 | . set oldName=$piece(oldName,"@@@",1)_$get(skips(j))_$piece(oldName,"@@@",3)
|
---|
499 | ;"
|
---|
500 | if askuser'=1 set PreSelArray(TradeName,IEN)="" goto S1DD ;"bypass user asking...
|
---|
501 | ;"------------------
|
---|
502 | write !,IEN,": '",oldName,"' --> '",TradeName,"'",!
|
---|
503 | new % set %=2
|
---|
504 | write "Accept Change" do YN^DICN write !
|
---|
505 | if %=-1 set abort=1 goto S1DD
|
---|
506 | if %'=1 goto S1DD
|
---|
507 | if TradeName'=oldName do
|
---|
508 | . new TMGFDA,TMGMSG
|
---|
509 | . set TMGFDA(22706.9,IEN_",",.05)=TradeName
|
---|
510 | . do FILE^DIE("K","TMGFDA","TMGMSG")
|
---|
511 | . set result=1
|
---|
512 | . do ShowIfDIERR^TMGDEBUG(.TMGMSG)
|
---|
513 |
|
---|
514 | S1DD quit result
|
---|
515 |
|
---|
516 |
|
---|
517 | SetScrubMaps(skips,ignore)
|
---|
518 | ;"Purpose: setup arrays for removing doses from Tradename
|
---|
519 | ;"Input: skips -- PASS BY REFERENCE
|
---|
520 | ;" ignore -- PASS BY REFERENCE
|
---|
521 | ;"result
|
---|
522 |
|
---|
523 | new i
|
---|
524 | set i=0 ;"NOTE!!! ASCII encoding only allow i up to 63!!
|
---|
525 | set i=i+1,skips(i)="5% DEXTROSE"
|
---|
526 | set i=i+1,skips(i)="5 % DEXTROSE"
|
---|
527 | set i=i+1,skips(i)="10% DEXTROSE"
|
---|
528 | set i=i+1,skips(i)="0.9% NA"
|
---|
529 | set i=i+1,skips(i)=".9% NA"
|
---|
530 | set i=i+1,skips(i)="0.45% NA"
|
---|
531 | set i=i+1,skips(i)="7 7 7"
|
---|
532 | set i=i+1,skips(i)="70 30"
|
---|
533 | set i=i+1,skips(i)="7.4"
|
---|
534 | set i=i+1,skips(i)="3 MONTH"
|
---|
535 | set i=i+1,skips(i)="4 MONTH"
|
---|
536 | set i=i+1,skips(i)="28 TAB"
|
---|
537 | set i=i+1,skips(i)="I 131"
|
---|
538 | set i=i+1,skips(i)="I-131"
|
---|
539 | set i=i+1,skips(i)="I 123"
|
---|
540 | set i=i+1,skips(i)="7 VAGINAL"
|
---|
541 | set i=i+1,skips(i)="3 VAGINAL"
|
---|
542 | set i=i+1,skips(i)="0.3% NACL"
|
---|
543 | set i=i+1,skips(i)="0.2% NACL"
|
---|
544 | set i=i+1,skips(i)="B12"
|
---|
545 | set i=i+1,skips(i)="B6"
|
---|
546 | set i=i+1,skips(i)="TC 99M"
|
---|
547 | set i=i+1,skips(i)="TC99M"
|
---|
548 | set i=i+1,skips(i)="THEO 24"
|
---|
549 | set i=i+1,skips(i)="24 H"
|
---|
550 | set i=i+1,skips(i)="12 H"
|
---|
551 | set i=i+1,skips(i)=" 12 "
|
---|
552 | set i=i+1,skips(i)=" 24 "
|
---|
553 | set i=i+1,skips(i)="VITAMIN K1"
|
---|
554 | set i=i+1,skips(i)="PH7"
|
---|
555 |
|
---|
556 | ;"Put entries here when the presence of a word is enough to ignore entire drug name.
|
---|
557 | ;"if TradeName[ingore(x) then no further check done
|
---|
558 | set i=0 ;"no limit on # here...
|
---|
559 | set i=i+1,ignore(i)="TERAZOL"
|
---|
560 | set i=i+1,ignore(i)="ORTHO "
|
---|
561 | set i=i+1,ignore(i)="DARVOCET"
|
---|
562 | set i=i+1,ignore(i)="DEMULEN"
|
---|
563 | set i=i+1,ignore(i)="LEVLEN"
|
---|
564 | set i=i+1,ignore(i)="LEVLITE"
|
---|
565 | set i=i+1,ignore(i)="LOESTRIN"
|
---|
566 | set i=i+1,ignore(i)="NECON"
|
---|
567 | set i=i+1,ignore(i)=" MT "
|
---|
568 | set i=i+1,ignore(i)="ORTHOCEPT"
|
---|
569 | set i=i+1,ignore(i)="GYNAZOLE"
|
---|
570 | set i=i+1,ignore(i)="OVCON"
|
---|
571 | set i=i+1,ignore(i)="MONISTAT"
|
---|
572 | set i=i+1,ignore(i)="MICROGESTIN"
|
---|
573 | set i=i+1,ignore(i)="ULTRASE"
|
---|
574 | set i=i+1,ignore(i)="MTE "
|
---|
575 | set i=i+1,ignore(i)="M T E "
|
---|
576 | set i=i+1,ignore(i)="INSULIN"
|
---|
577 |
|
---|
578 | quit
|
---|
579 |
|
---|
580 |
|
---|
581 | CautionMsg
|
---|
582 | ;"Purpose: To show a caution message.
|
---|
583 |
|
---|
584 | write !,"**NOTICE**",!
|
---|
585 | write "This will use the MULTI-selector to pick imports to be",!
|
---|
586 | write "be edited. BE VERY CAREFUL not to select more than one",!
|
---|
587 | write "drug before exiting to enter the edit screen.",!
|
---|
588 | write "For example: If 3 different drugs were selected, and then",!
|
---|
589 | write "ESC ESC pressed, then one will be presented with an opportunity",!
|
---|
590 | write "to edit the drug name. BUT NOTE: one would be editing ALL THREE",!
|
---|
591 | write "drugs AT ONCE, very likely creating an error in 2 of the drugs.",!
|
---|
592 | write !
|
---|
593 |
|
---|
594 | do PressToCont^TMGUSRIF
|
---|
595 | quit
|
---|
596 |
|
---|
597 |
|
---|
598 | EditTradename(SkipValue)
|
---|
599 | ;"Purpose: to select records to mark as to be skipped.
|
---|
600 | ;"Input: SkipValue: OPTIONAL. Default=0.
|
---|
601 | ;" 0=show only values NOT marked to be skipped
|
---|
602 | ;" 1=show only values MARKED to be skipped
|
---|
603 | ;" ALL=show BOTH skip and non-skipped fields.
|
---|
604 | ;"Output: User may alter the value of SKIP THIS RECORD field for all records
|
---|
605 | ;"Results: none
|
---|
606 |
|
---|
607 | do CautionMsg
|
---|
608 |
|
---|
609 | new Options,IEN
|
---|
610 | set Options("FIELDS",1)=".04^LONG NAME^25"
|
---|
611 | set Options("FIELDS",1,"NO EDIT")=1 ;"i.e. show for browsing, but don't allow edit
|
---|
612 | set Options("FIELDS",2)=".05^TRADENAME^64"
|
---|
613 | set Options("FIELDS","MAX NUM")=2
|
---|
614 | set Options("FILE")="22706.9^TMG FDA IMPORT COMPILED"
|
---|
615 |
|
---|
616 | set SkipValue=$get(SkipValue,0) ;"0=NOT SKIPPED
|
---|
617 | ;"Get all records with chosed SKIP THIS RECORD value
|
---|
618 | do GetFldValue^TMGSELED(22706.9,6,SkipValue,$name(Options("IEN LIST")))
|
---|
619 |
|
---|
620 | PSK1 if $$SELED^TMGSELED(.Options)'=2 goto ETNDone
|
---|
621 | if $$GetIENs^TMGSELED(.Options)=0 goto ETNDone
|
---|
622 | goto PSK1
|
---|
623 |
|
---|
624 | ETNDone quit
|
---|
625 |
|
---|
626 |
|
---|
627 |
|
---|
628 |
|
---|
629 | SelRxList(pList,pSelList,HdrText,mode)
|
---|
630 | ;"Purpose: To display the Drug list, and allow user to select from the list.
|
---|
631 | ;"Input: pList -- PASS BY NAME -- list of drugs to be added, as created by FillList(pList)
|
---|
632 | ;" @pList@(drugName,IEN)=""
|
---|
633 | ;" pSelList -- PASS BY NAME, an OUT PARAMETER.
|
---|
634 | ;" Returns list of selected items
|
---|
635 | ;" @pSelList@(drugName,IEN)="" ;IEN is from 22706.9
|
---|
636 | ;" @pSelList@(drugName,IEN)=""
|
---|
637 | ;" HdrText -- optional, some text to show on top of selector
|
---|
638 | ;" mode -- OPTIONAL. Default=1
|
---|
639 | ;" 1 --> Display by LONG NAME .04 name
|
---|
640 | ;" 2 --> Display by VA PRODUCT (50.68) .01 name
|
---|
641 | ;" 3 --> Display by FDA import name
|
---|
642 | ;" 4 --> Display by VA GENERIC name
|
---|
643 |
|
---|
644 | ;"Results: none
|
---|
645 |
|
---|
646 | new ref set ref="^TMP(""VEE"",$J)"
|
---|
647 | kill @ref
|
---|
648 | new count set count=1
|
---|
649 | set mode=$get(mode,1)
|
---|
650 |
|
---|
651 | ;"new pNDCIndex set pNDCIndex=$$GetNDCIndex^TMGNDF4A(1)
|
---|
652 |
|
---|
653 | write "Prepping to display list...",!
|
---|
654 | ;"First convert list to a display format
|
---|
655 | new name,IEN,Itr
|
---|
656 |
|
---|
657 | set name=$$ItrAInit^TMGITR(pList,.Itr)
|
---|
658 | do PrepProgress^TMGITR(.Itr,20,1,"name")
|
---|
659 | if name'="" for do quit:($$ItrANext^TMGITR(.Itr,.name)="")
|
---|
660 | . new addedArray,showName
|
---|
661 | . set IEN=0
|
---|
662 | . for set IEN=$order(@pList@(name,IEN)) quit:(IEN="") do
|
---|
663 | . . new NameInfo do GetInfo^TMGNDF3B(IEN,.NameInfo)
|
---|
664 | . . new IdxName set IdxName=$get(NameInfo("MODES",mode))
|
---|
665 | . . if mode=3 do ;"Display by FDA import name (TradeName)
|
---|
666 | . . . set showName=""
|
---|
667 | . . . for set showName=$order(NameInfo(IdxName,showName)) quit:(showName="") do
|
---|
668 | . . . . set @ref@(count)=name_"^"_IEN_$char(9)
|
---|
669 | . . . . new newShowName set newShowName=$extract(showName,1,35)
|
---|
670 | . . . . set newShowName=$$LJ^XLFSTR(newShowName,35," ")
|
---|
671 | . . . . new newName set newName=$extract(name,1,35)
|
---|
672 | . . . . set newName=$$LJ^XLFSTR(newName,35," ")
|
---|
673 | . . . . set @ref@(count)=@ref@(count)_newShowName_"|"_newName
|
---|
674 | . . . . set count=count+1
|
---|
675 | . . . set showName="" ;"prevent duplicate addition below
|
---|
676 | . . else if (mode>0)&(mode<5) set showName=$order(NameInfo(IdxName,""))
|
---|
677 | . . if (showName'="") set @ref@(count)=name_"^"_IEN_$char(9)_showName set count=count+1
|
---|
678 |
|
---|
679 | set @ref@("HD")=$get(HdrText,"MENU")
|
---|
680 |
|
---|
681 | ;"Note: Rules of use:
|
---|
682 | ;" ref must=^TMP("VEE",$J)
|
---|
683 | ;" Each line should be in this format:
|
---|
684 | ;" @ref@(number)=ReturnValue_$char(9)_DisplayValue
|
---|
685 | ;" @ref@(number)=ReturnValue_$char(9)_DisplayValue
|
---|
686 | ;" @ref@(number)=ReturnValue_$char(9)_DisplayValue
|
---|
687 | ;" Results come back in:
|
---|
688 | ;" ^TMP("VPE","SELECT",$J,number)=ReturnValue_$char(9)_DisplayValue
|
---|
689 | ;" ^TMP("VPE","SELECT",$J,number)=ReturnValue_$char(9)_DisplayValue
|
---|
690 | ;" ^TMP("VPE","SELECT",$J,number)=ReturnValue_$char(9)_DisplayValue
|
---|
691 |
|
---|
692 | write !,"Passing off to Selector..."
|
---|
693 | D SELECT^%ZVEMKT(ref)
|
---|
694 |
|
---|
695 | set ref="^TMP(""VPE"",""SELECT"","_$J_")"
|
---|
696 | new number set number=""
|
---|
697 | for set number=$order(@ref@(number)) quit:(number="") do
|
---|
698 | . new ReturnValue set ReturnValue=$piece(@ref@(number),$char(9),1)
|
---|
699 | . new drugName set drugName=$piece(ReturnValue,"^",1)
|
---|
700 | . new IEN set IEN=$piece(ReturnValue,"^",2)
|
---|
701 | . set @pSelList@(drugName,IEN)=""
|
---|
702 |
|
---|
703 | quit
|
---|
704 |
|
---|
705 | ;"========================================================
|
---|
706 | PickEdit
|
---|
707 | ;"Purpose: ask user to pick record, and then edit.
|
---|
708 |
|
---|
709 | new DIC,X,Y
|
---|
710 | set DIC=22706.9
|
---|
711 | set DIC(0)="MAEQ"
|
---|
712 | set DIC("A")="Enter Imported Drug to Edit (^ to abort): "
|
---|
713 | PE1
|
---|
714 | do ^DIC write !
|
---|
715 | if +Y>0 do Edit1(+Y) goto PE1
|
---|
716 |
|
---|
717 | quit
|
---|
718 |
|
---|
719 |
|
---|
720 | Edit1(IEN)
|
---|
721 | ;"Purpose: To edit one record in 22706.9
|
---|
722 | ;"Input: IEN -- IEN in 22706.9
|
---|
723 | ;"Results: none
|
---|
724 |
|
---|
725 | new Options,IENlist
|
---|
726 | set IENlist(IEN)=""
|
---|
727 | set Options("FILE")=22706.9
|
---|
728 | new temp
|
---|
729 | set temp=$$GetFields^TMGSELED(.Options)
|
---|
730 | if temp=1 set temp=$$EditRecs^TMGSELED("IENlist",.Options)
|
---|
731 |
|
---|
732 | quit
|
---|
733 |
|
---|
734 |
|
---|