[796] | 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
|
---|