| 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
 | 
|---|