| [796] | 1 | TMGNDF2H ;TMG/kst/FDA Import: Fill VA Product entries ;03/25/06 | 
|---|
|  | 2 | ;;1.0;TMG-LIB;**1**;11/21/06 | 
|---|
|  | 3 |  | 
|---|
|  | 4 | ;" FDA - NATIONAL DRUG FILES COMPILING FUNCTIONS | 
|---|
|  | 5 | ;"      Addition of records from TMG FDA IMPORT COMPILED into VA PRODUCT file. | 
|---|
|  | 6 | ;"Kevin Toppenberg MD | 
|---|
|  | 7 | ;"GNU General Public License (GPL) applies | 
|---|
|  | 8 | ;"11-21-2006 | 
|---|
|  | 9 |  | 
|---|
|  | 10 | ;"======================================================================= | 
|---|
|  | 11 | ;" API -- Public Functions. | 
|---|
|  | 12 | ;"======================================================================= | 
|---|
|  | 13 | ;"Menu | 
|---|
|  | 14 |  | 
|---|
|  | 15 | ;"======================================================================= | 
|---|
|  | 16 | ;"Link2VAP -- fill file 22706.9, field 5.5 in with link 50.68 with SAME NDC | 
|---|
|  | 17 | ;"Batch2VAP  -- Batch add drugs to VA PRODUCT file (50.68) and NDC/UPC | 
|---|
|  | 18 |  | 
|---|
|  | 19 | ;"======================================================================= | 
|---|
|  | 20 | ;" Private Functions. | 
|---|
|  | 21 | ;"======================================================================= | 
|---|
|  | 22 | ;"Add2VAProd(IEN,Quiet) | 
|---|
|  | 23 | ;"EnsureNDC(IEN)  Make record in NDC/UPN file (50.67). | 
|---|
|  | 24 | ;"EnsureUnits(UnitS) -- ensure that the UnitS is valid in file 50.607 | 
|---|
|  | 25 | ;"Unlock50dot607 | 
|---|
|  | 26 | ;"Lock50dot607 | 
|---|
|  | 27 |  | 
|---|
|  | 28 |  | 
|---|
|  | 29 | ;"======================================================================= | 
|---|
|  | 30 | ;"======================================================================= | 
|---|
|  | 31 |  | 
|---|
|  | 32 | Menu | 
|---|
|  | 33 | new Menu,UsrSlct | 
|---|
|  | 34 | set Menu(0)="Pick Option to Add imports to VA PRODUCT & NDC/UPN file (2H)" | 
|---|
|  | 35 | set Menu(1)="Link imports to VA PRODUCT via NDC-- *DO THIS FIRST*"_$char(9)_"Link2VAP" | 
|---|
|  | 36 | set Menu(2)="ADD unlinked imports to VA PRODUCT file."_$char(9)_"Batch2VAP" | 
|---|
|  | 37 | set Menu(3)="Synchronize VA PRODUCT file with import data."_$char(9)_"Sync2VAP" | 
|---|
|  | 38 | ;"set Menu(3)="Fix Names with '...'s (SHOULD run AFTER Batch Add)"_$char(9)_"FixNames" | 
|---|
|  | 39 | ;"set Menu(4)="Check/Fix ALL Names (May be run AFTER Batch Add)"_$char(9)_"FixNames2" | 
|---|
|  | 40 | set Menu("P")="Prev Stage"_$char(9)_"Prev" | 
|---|
|  | 41 | set Menu("N")="Next Stage"_$char(9)_"Next" | 
|---|
|  | 42 |  | 
|---|
|  | 43 | M1      write # | 
|---|
|  | 44 | set UsrSlct=$$Menu^TMGUSRIF(.Menu,"^") | 
|---|
|  | 45 |  | 
|---|
|  | 46 | if UsrSlct="Link2VAP" do Link2VAP goto M1 | 
|---|
|  | 47 | if UsrSlct="Batch2VAP" do Batch2VAP goto M1 | 
|---|
|  | 48 | if UsrSlct="Sync2VAP" do Sync2VAP goto M1 | 
|---|
|  | 49 | ;"if UsrSlct="FixNames" do FixNames(0) goto M1 | 
|---|
|  | 50 | ;"if UsrSlct="FixNames2" do FixNames(1) goto M1 | 
|---|
|  | 51 | if UsrSlct="Prev" goto Menu^TMGNDF2G  ;"quit can occur from there... | 
|---|
|  | 52 | if UsrSlct="Next" goto Menu^TMGNDF3A  ;"quit can occur from there... | 
|---|
|  | 53 | if UsrSlct="^" goto MenuDone | 
|---|
|  | 54 | goto M1 | 
|---|
|  | 55 |  | 
|---|
|  | 56 | MenuDone | 
|---|
|  | 57 | quit | 
|---|
|  | 58 |  | 
|---|
|  | 59 |  | 
|---|
|  | 60 | ;"========================================================================== | 
|---|
|  | 61 |  | 
|---|
|  | 62 |  | 
|---|
|  | 63 | Batch2VAP | 
|---|
|  | 64 | ;"Purpose: To scan through all records in TMG FDA IMPORT COMPILED, and create an array of | 
|---|
|  | 65 | ;"           possible entries for addition to VA PRODUCT, also creating an entry in | 
|---|
|  | 66 | ;"           the NDC/UPC file. | 
|---|
|  | 67 | ;"Input: none | 
|---|
|  | 68 | ;"Output: database will be filled with data (records added to VA PRODUCT file) | 
|---|
|  | 69 | ;"Results: none | 
|---|
|  | 70 |  | 
|---|
|  | 71 | ;"Note: After making this function, I changed the function MakeName such that it is better | 
|---|
|  | 72 | ;"      at shortening long names to fit into the field limits. | 
|---|
|  | 73 | ;"      So I wrote the code FixNames to go back and correct the names for better fits. | 
|---|
|  | 74 | ;"      The problem is that it takes user interaction to do this well (asking for abbreviations etc) | 
|---|
|  | 75 | ;"      And this is best done in a batch manner (i.e. not asking each drug, one at a time). | 
|---|
|  | 76 | ;"      So this function was modified such that it shortens the names non-interactively | 
|---|
|  | 77 | ;"      (i.e. AllowCut=1), and then FixNames can be run to review all of the abbreviations | 
|---|
|  | 78 | ;"      are appropriate | 
|---|
|  | 79 |  | 
|---|
|  | 80 |  | 
|---|
|  | 81 | new AddList | 
|---|
|  | 82 | do GetAddList(.AddList) | 
|---|
|  | 83 | new count set count=$$ListCt^TMGMISC("AddList") | 
|---|
|  | 84 | if count=0 do  goto B2VDone | 
|---|
|  | 85 | . write "No entries need to be be added to VA PRODUCT file.",! | 
|---|
|  | 86 | . do PressToCont^TMGUSRIF | 
|---|
|  | 87 | write count," entries will now be added to VA PRODUCT file.",! | 
|---|
|  | 88 | new % set %=1 | 
|---|
|  | 89 | write "Continue" do YN^DICN write ! | 
|---|
|  | 90 | if %=1 do DoAdd(.AddList) | 
|---|
|  | 91 | B2VDone | 
|---|
|  | 92 | quit | 
|---|
|  | 93 |  | 
|---|
|  | 94 |  | 
|---|
|  | 95 | Check1(IEN) | 
|---|
|  | 96 | ;"Purpose: to check one record in TMG FDA IMPORT COMPILED (22706.9) | 
|---|
|  | 97 | ;"NOTE: this just checks if one exists, NOT if correct link is present. | 
|---|
|  | 98 | ;"Input: IEN -- IEN in 22706.9 | 
|---|
|  | 99 |  | 
|---|
|  | 100 | new AddList,vapIEN,syncList | 
|---|
|  | 101 |  | 
|---|
|  | 102 | set vapIEN=+$piece($get(^TMG(22706.9,IEN,6)),"^",2) | 
|---|
|  | 103 | set AddList(IEN)="" | 
|---|
|  | 104 | if vapIEN=0 set vapIEN=$$Add2VAProd(IEN) | 
|---|
|  | 105 | set syncList(IEN)=vapIEN | 
|---|
|  | 106 | do DoSync(.syncList) | 
|---|
|  | 107 |  | 
|---|
|  | 108 | C1Done  quit | 
|---|
|  | 109 |  | 
|---|
|  | 110 |  | 
|---|
|  | 111 | Sync2VAP | 
|---|
|  | 112 | ;"Purpose: To scan through all records in TMG FDA IMPORT COMPILED (22706.9) | 
|---|
|  | 113 | ;"         and synchronize data with records in VA PRODUCT. | 
|---|
|  | 114 | ;"Input: none | 
|---|
|  | 115 | ;"Output: database will be modified with data from 22706.9 | 
|---|
|  | 116 | ;"Results: none | 
|---|
|  | 117 |  | 
|---|
|  | 118 | new SyncList | 
|---|
|  | 119 | do GetSyncList(.SyncList) | 
|---|
|  | 120 | new count set count=$$ListCt^TMGMISC("SyncList") | 
|---|
|  | 121 | if count=0 do  goto S2VDone | 
|---|
|  | 122 | . write "No entries available to update VA PRODUCT file with.",! | 
|---|
|  | 123 | . do PressToCont^TMGUSRIF | 
|---|
|  | 124 | write count," entries will now be used to update VA PRODUCT file.",! | 
|---|
|  | 125 | new % set %=1 | 
|---|
|  | 126 | write "Continue" do YN^DICN write ! | 
|---|
|  | 127 | if %=1 do DoSync(.SyncList) | 
|---|
|  | 128 | S2VDone | 
|---|
|  | 129 | quit | 
|---|
|  | 130 |  | 
|---|
|  | 131 |  | 
|---|
|  | 132 | GetAddList(AddList) | 
|---|
|  | 133 | ;"Purpose: to create a list of IEN's that need addition | 
|---|
|  | 134 | ;"Input: AddList-- PASS BY REFERENCE. An OUT PARAMETER. | 
|---|
|  | 135 | ;"Output: AddList is filled:  Format: | 
|---|
|  | 136 | ;"      AddList(IEN)=""  ;IEN is from file 22706.9 | 
|---|
|  | 137 | ;"      AddList(IEN)="" | 
|---|
|  | 138 | ;"Results: none. | 
|---|
|  | 139 |  | 
|---|
|  | 140 | write "Scanning for imports to be added into VA PRODUCT file...",! | 
|---|
|  | 141 | new Itr,IEN,success | 
|---|
|  | 142 | new abort set abort=0 | 
|---|
|  | 143 | set IEN=$$ItrInit^TMGITR(22706.9,.Itr) | 
|---|
|  | 144 | do PrepProgress^TMGITR(.Itr,20,0,"IEN") | 
|---|
|  | 145 | if IEN'="" for  do  quit:($$ItrNext^TMGITR(.Itr,.IEN)'>0)!abort | 
|---|
|  | 146 | . if $$UserAborted^TMGUSRIF set abort=1 quit | 
|---|
|  | 147 | . if $piece($get(^TMG(22706.9,IEN,1)),"^",4)=1 quit  ;"1=SKIP | 
|---|
|  | 148 | . if $piece($get(^TMG(22706.9,IEN,6)),"^",2)>0 quit  ;"IEN of linked entry in 50.68 | 
|---|
|  | 149 | . set AddList(IEN)="" | 
|---|
|  | 150 | do ProgressDone^TMGITR(.Itr) | 
|---|
|  | 151 |  | 
|---|
|  | 152 | quit | 
|---|
|  | 153 |  | 
|---|
|  | 154 |  | 
|---|
|  | 155 | GetSyncList(SyncList) | 
|---|
|  | 156 | ;"Purpose: to create a list of IEN's can be used for syncing data | 
|---|
|  | 157 | ;"Input: SyncList-- PASS BY REFERENCE. An OUT PARAMETER. | 
|---|
|  | 158 | ;"Output: SyncList is filled:  Format: | 
|---|
|  | 159 | ;"      SyncList(IEN22706d9)=vapIEN | 
|---|
|  | 160 | ;"Results: none. | 
|---|
|  | 161 |  | 
|---|
|  | 162 | write "Scanning for imports to be synchronized with VA PRODUCT file...",! | 
|---|
|  | 163 | new Itr,IEN,success | 
|---|
|  | 164 | new abort set abort=0 | 
|---|
|  | 165 | set IEN=$$ItrInit^TMGITR(22706.9,.Itr) | 
|---|
|  | 166 | do PrepProgress^TMGITR(.Itr,20,0,"IEN") | 
|---|
|  | 167 | if IEN'="" for  do  quit:($$ItrNext^TMGITR(.Itr,.IEN)'>0)!abort | 
|---|
|  | 168 | . if $$UserAborted^TMGUSRIF set abort=1 quit | 
|---|
|  | 169 | . if $piece($get(^TMG(22706.9,IEN,1)),"^",4)=1 quit  ;"1=SKIP | 
|---|
|  | 170 | . new vapIEN set vapIEN=$piece($get(^TMG(22706.9,IEN,6)),"^",2)  ;"IEN of linked entry in 50.68 | 
|---|
|  | 171 | . if vapIEN=0 quit | 
|---|
|  | 172 | . set SyncList(IEN)=vapIEN | 
|---|
|  | 173 | do ProgressDone^TMGITR(.Itr) | 
|---|
|  | 174 |  | 
|---|
|  | 175 | quit | 
|---|
|  | 176 |  | 
|---|
|  | 177 |  | 
|---|
|  | 178 | DoAdd(AddList) | 
|---|
|  | 179 | ;"Purpose: To process the AddList, doing actual adds. | 
|---|
|  | 180 | ;"Input: AddList-- PASS BY REFERENCE. Format: | 
|---|
|  | 181 | ;"              AddList(IEN)=""  ;IEN is from file 22706.9 | 
|---|
|  | 182 | ;"              AddList(IEN)="" | 
|---|
|  | 183 | ;"Results: none. | 
|---|
|  | 184 |  | 
|---|
|  | 185 | do Unlock50dot607 | 
|---|
|  | 186 | do Unlock50^TMGNDF3C | 
|---|
|  | 187 |  | 
|---|
|  | 188 | write "Adding records into VA PRODUCT file from import information...",! | 
|---|
|  | 189 | new count set count=0 | 
|---|
|  | 190 | new Itr,IEN,success,addedIEN | 
|---|
|  | 191 | new abort set abort=0 | 
|---|
|  | 192 | set IEN=$$ItrAInit^TMGITR("AddList",.Itr) | 
|---|
|  | 193 | do PrepProgress^TMGITR(.Itr,1,1,"IEN") | 
|---|
|  | 194 | if IEN'="" for  do  quit:($$ItrANext^TMGITR(.Itr,.IEN)="")!abort | 
|---|
|  | 195 | . if $$UserAborted^TMGUSRIF set abort=1 quit | 
|---|
|  | 196 | L1      . set addedIEN=$$Add2VAProd(IEN,0,1)  ;"0=not quiet, 1=quiet,Allow Cut automatically | 
|---|
|  | 197 | . if addedIEN>0 do | 
|---|
|  | 198 | . . set count=count+1 | 
|---|
|  | 199 | . . new TMGFDA,TMGMSG | 
|---|
|  | 200 | . . set TMGFDA(22706.9,IEN_",",5.5)=addedIEN | 
|---|
|  | 201 | . . do FILE^DIE("K","TMGFDA","TMGMSG") | 
|---|
|  | 202 | . . do ShowIfDIERR^TMGDEBUG(.TMGMSG) | 
|---|
|  | 203 | . else  do | 
|---|
|  | 204 | . . write !,"Unable to add record# ",IEN," from file 22706.9 to file 50.68.",! | 
|---|
|  | 205 | do ProgressDone^TMGITR(.Itr) | 
|---|
|  | 206 |  | 
|---|
|  | 207 | do Lock50dot607 | 
|---|
|  | 208 | do Lock50^TMGNDF3C | 
|---|
|  | 209 |  | 
|---|
|  | 210 | write count," imports added to VA PRODUCT (file 50.68 )",! | 
|---|
|  | 211 | do PressToCont^TMGUSRIF | 
|---|
|  | 212 |  | 
|---|
|  | 213 | quit | 
|---|
|  | 214 |  | 
|---|
|  | 215 |  | 
|---|
|  | 216 | DoSync(SyncList) | 
|---|
|  | 217 | ;"Purpose: To process the SyncList, doing actual synchronization. | 
|---|
|  | 218 | ;"Input: SyncList-- PASS BY REFERENCE. Format: | 
|---|
|  | 219 | ;"              SyncList(IEN)=vapIEN  ;IEN is from file 22706.9; vapIEN=IEN 50.68 | 
|---|
|  | 220 | ;"Results: none. | 
|---|
|  | 221 |  | 
|---|
|  | 222 | do Unlock50dot607 | 
|---|
|  | 223 | do Unlock50^TMGNDF3C | 
|---|
|  | 224 |  | 
|---|
|  | 225 | write "Synchronizing VA PRODUCT file from import information...",! | 
|---|
|  | 226 | new count set count=0 | 
|---|
|  | 227 | new Itr,IEN,success | 
|---|
|  | 228 | new abort set abort=0 | 
|---|
|  | 229 | set IEN=$$ItrAInit^TMGITR("SyncList",.Itr) | 
|---|
|  | 230 | do PrepProgress^TMGITR(.Itr,1,1,"IEN") | 
|---|
|  | 231 | if IEN'="" for  do  quit:($$ItrANext^TMGITR(.Itr,.IEN)="")!abort | 
|---|
|  | 232 | . if $$UserAborted^TMGUSRIF set abort=1 quit | 
|---|
|  | 233 | . new vapIEN set vapIEN=+$get(SyncList(IEN)) | 
|---|
|  | 234 | . if +vapIEN=0 quit | 
|---|
|  | 235 | . set success=$$Sync1Rec(IEN,vapIEN) | 
|---|
|  | 236 | do ProgressDone^TMGITR(.Itr) | 
|---|
|  | 237 |  | 
|---|
|  | 238 | do Lock50dot607 | 
|---|
|  | 239 | do Lock50^TMGNDF3C | 
|---|
|  | 240 |  | 
|---|
|  | 241 | do PressToCont^TMGUSRIF | 
|---|
|  | 242 |  | 
|---|
|  | 243 | quit | 
|---|
|  | 244 |  | 
|---|
|  | 245 |  | 
|---|
|  | 246 | Add2VAProd(IEN,Quiet,AllowCut) | 
|---|
|  | 247 | ;"Purpose: to take drug information from Array and use this to create a new entry | 
|---|
|  | 248 | ;"         in file #50.68 (VA PRODUCT)--and any supporting files needed. | 
|---|
|  | 249 | ;"Input: IEN -- IEN from file 22706.9 (TMG FDA IMPORT COMPILED) to add | 
|---|
|  | 250 | ;"       Quiet -- OPTIONAL -- default = 1 (quiet), if 1 no output generated to console. | 
|---|
|  | 251 | ;"       AllowCut  -- OPTIONAL -- default = 0 (no cut). | 
|---|
|  | 252 | ;"                      If value=1 then names will be shortened to needed length without | 
|---|
|  | 253 | ;"                      asking user for abbreviations etc. | 
|---|
|  | 254 | ;"Output: A new record will be created in 50.68, and any supporint files (such as | 
|---|
|  | 255 | ;"              drug manufacturer, package type etc if needed) | 
|---|
|  | 256 | ;"Result: the IEN in 50.68 of added record, 0 if error | 
|---|
|  | 257 |  | 
|---|
|  | 258 |  | 
|---|
|  | 259 | new TMGFDA,TMGIEN,TMGMSG | 
|---|
|  | 260 | set IENS="+1," | 
|---|
|  | 261 | do SetupFDA(IEN,IENS,.TMGFDA) | 
|---|
|  | 262 |  | 
|---|
|  | 263 | ALabel | 
|---|
|  | 264 | do UPDATE^DIE("E","TMGFDA","TMGIEN","TMGMSG") | 
|---|
|  | 265 | if $data(TMGMSG("DIERR")) do  goto A2VPDone | 
|---|
|  | 266 | . set result=0 | 
|---|
|  | 267 | . if Quiet=1 quit | 
|---|
|  | 268 | . write !,"Error adding new record to 50.68",! | 
|---|
|  | 269 | . new PriorErrorFound | 
|---|
|  | 270 | . do ShowDIERR^TMGDEBUG(.TMGMSG,.PriorErrorFound) | 
|---|
|  | 271 |  | 
|---|
|  | 272 | ;"Check that record was added, then then add subfile entries: active ingredients... | 
|---|
|  | 273 | new AddedIEN set AddedIEN=$get(TMGIEN(1))  ;"also used to create NDC/UPC record; | 
|---|
|  | 274 | if +AddedIEN=0 do  goto A2VPDone | 
|---|
|  | 275 | . set result=0 if Quiet=1 quit | 
|---|
|  | 276 | . write !,"Can't find record number of added record to 50.68",! | 
|---|
|  | 277 | . do PressToCont^TMGUSRIF | 
|---|
|  | 278 |  | 
|---|
|  | 279 | set result=$$EnsureIngredients(IEN,AddedIEN) if result=0 goto A2VPDone | 
|---|
|  | 280 |  | 
|---|
|  | 281 | BLabel  ;"set result=$$Add2NDC(IEN,.DrugInfo) | 
|---|
|  | 282 | set result=$$EnsureNDC(IEN) if result=0 goto A2VPDone | 
|---|
|  | 283 |  | 
|---|
|  | 284 | A2VPDone | 
|---|
|  | 285 | ;"1=OK to continue, 0 if error | 
|---|
|  | 286 | if result=1 set result=+$get(AddedIEN) | 
|---|
|  | 287 | quit result  ;"changed to return IEN in 50.68 | 
|---|
|  | 288 |  | 
|---|
|  | 289 |  | 
|---|
|  | 290 | Sync1Rec(IEN,vapIEN) | 
|---|
|  | 291 | ;"Purpose: to take drug information from Array and use this to create a new entry | 
|---|
|  | 292 | ;"         in file #50.68 (VA PRODUCT)--and any supporting files needed. | 
|---|
|  | 293 | ;"Input: IEN -- IEN from file 22706.9 (TMG FDA IMPORT COMPILED) to add | 
|---|
|  | 294 | ;"       vapIEN -- IEN in 50.68 that is the target of the synchronization. | 
|---|
|  | 295 | ;"Output: data in VA PRODUCT will be updated as needed to match the info in | 
|---|
|  | 296 | ;"        file 22706.9 | 
|---|
|  | 297 | ;"Result: 1 if OK, 0 if error | 
|---|
|  | 298 |  | 
|---|
|  | 299 | new result set result=0 | 
|---|
|  | 300 | new TMGFDA,TMGIEN,TMGMSG | 
|---|
|  | 301 | set IENS=vapIEN_"," | 
|---|
|  | 302 | do SetupFDA(IEN,IENS,.TMGFDA) | 
|---|
|  | 303 | new temp set temp=$$TrimFDA^TMGDBAPI(.TMGFDA) | 
|---|
|  | 304 |  | 
|---|
|  | 305 | if $data(TMGFDA) do | 
|---|
|  | 306 | . do FILE^DIE("EK","TMGFDA","TMGMSG") | 
|---|
|  | 307 | . do ShowIfDIERR^TMGDEBUG(.TMGMSG) | 
|---|
|  | 308 |  | 
|---|
|  | 309 | set result=$$EnsureIngredients(IEN,vapIEN) | 
|---|
|  | 310 | if result=0 goto S2VPDone | 
|---|
|  | 311 | set result=$$EnsureNDC(IEN) if result=0 goto S2VPDone | 
|---|
|  | 312 | S2VPDone | 
|---|
|  | 313 | quit result  ;"changed to return IEN in 50.68 | 
|---|
|  | 314 |  | 
|---|
|  | 315 |  | 
|---|
|  | 316 | SetupFDA(IEN,IENS,TMGFDA,vapIEN) | 
|---|
|  | 317 | ;"Purpose: to set up FDA for data in a#50.68 (VA PRODUCT) entry | 
|---|
|  | 318 | ;"Input: IEN -- IEN from file 22706.9 (TMG FDA IMPORT COMPILED) to add | 
|---|
|  | 319 | ;"       IENS -- a standard FM IENS for FDA to use | 
|---|
|  | 320 | ;"       TMGFDA -- PASS BY REFEERNCE.  A standard FM FDA | 
|---|
|  | 321 | ;"       vapIEN -- OPTIONAL.  If provided, then the FDA wil be trimmed to contain | 
|---|
|  | 322 | ;"                 only those fields that need to be changed | 
|---|
|  | 323 | ;"Output: TMGFDA is filled | 
|---|
|  | 324 | ;"Result: none | 
|---|
|  | 325 |  | 
|---|
|  | 326 | ;"NOTE: this function will create an FDA in EXTERNAL form | 
|---|
|  | 327 |  | 
|---|
|  | 328 | ;"VA PRODUCT FILE RECORD STRUCTURE | 
|---|
|  | 329 | ;"----------------------------------- | 
|---|
|  | 330 | ;"   .01  NAME                                        [RFa] | 
|---|
|  | 331 | ;"              e.g.   NAME: DILTIAZEM (CARDIZEM CD) 240MG SA CAP | 
|---|
|  | 332 | ;"   .05  VA GENERIC NAME                 <-Pntr  [P50.6'a] | 
|---|
|  | 333 | ;"              e.g.   VA GENERIC NAME: DILTIAZEM | 
|---|
|  | 334 | ;"     1  DOSAGE FORM                   <-Pntr  [P50.606'a] | 
|---|
|  | 335 | ;"              e.g.   DOSAGE FORM: CAP,SA | 
|---|
|  | 336 | ;"     2  STRENGTH                                     [Fa] | 
|---|
|  | 337 | ;"              e.g.   STRENGTH: 240 | 
|---|
|  | 338 | ;"     3  UNITS                         <-Pntr  [P50.607'a] | 
|---|
|  | 339 | ;"              e.g.   UNITS: MG | 
|---|
|  | 340 | ;"     4  NATIONAL FORMULARY NAME                      [Fa] | 
|---|
|  | 341 | ;"              e.g.   NATIONAL FORMULARY NAME: DILTIAZEM CAP,SA | 
|---|
|  | 342 | ;"     5  VA PRINT NAME                                [Fa] | 
|---|
|  | 343 | ;"              e.g.   VA PRINT NAME: DILTIAZEM (CARDIZEM CD) 240MG SA CAP | 
|---|
|  | 344 | ;"     6  VA PRODUCT IDENTIFIER                        [Fa]  <--- will use to store "0^TMG ADDED" | 
|---|
|  | 345 | ;"              e.g.   VA PRODUCT IDENTIFIER: D0230 | 
|---|
|  | 346 | ;"     8  VA DISPENSE UNIT                <-Pntr  [P50.64a] | 
|---|
|  | 347 | ;"              e.g.   VA DISPENSE UNIT: CAPNSE UNIT                <-Pntr  [P50.64a] <-- plan to leave blank, for CMOP use | 
|---|
|  | 348 | ;"    14  ACTIVE INGREDIENTS      W:^ D:^ <-Mult [50.6814P] | 
|---|
|  | 349 | ;"        .01   -ACTIVE INGREDIENTS         <-Pntr  [P50.416'Xa] | 
|---|
|  | 350 | ;"              e.g.   ACTIVE INGREDIENTS: DILTIAZEM HYDROCHLORIDE | 
|---|
|  | 351 | ;"          1   -STRENGTH                                   [Fa] | 
|---|
|  | 352 | ;"              e.g.     STRENGTH: 240 | 
|---|
|  | 353 | ;"          2   -UNITS                       <-Pntr  [P50.607'a] | 
|---|
|  | 354 | ;"              e.g.     UNITS: MG | 
|---|
|  | 355 | ;"    15  PRIMARY VA DRUG CLASS         <-Pntr  [P50.605'a] | 
|---|
|  | 356 | ;"              e.g.   PRIMARY VA DRUG CLASS: CV200 | 
|---|
|  | 357 | ;"    16  SECONDARY VA DRUG CLASS W:^ D:^ <-Mult [50.6816P] | 
|---|
|  | 358 | ;"        .01   -SECONDARY VA DRUG CLASS   <-Pntr  [MP50.605'aX] | 
|---|
|  | 359 | ;"    17  NATIONAL FORMULARY INDICATOR                 [Sa] | 
|---|
|  | 360 | ;"              e.g.   NATIONAL FORMULARY INDICATOR: NO | 
|---|
|  | 361 | ;"    18  NATIONAL FORMULARY RESTRICTIONW:^ D:^ <-WP [50.6818] | 
|---|
|  | 362 | ;"         .01   -NATIONAL FORMULARY RESTRICTION              [W] | 
|---|
|  | 363 | ;"    19  CS FEDERAL SCHEDULE                          [Sa] | 
|---|
|  | 364 | ;"    20  SINGLE/MULTI SOURCE PRODUCT                  [Sa] | 
|---|
|  | 365 | ;"    21  INACTIVATION DATE                            [Da] | 
|---|
|  | 366 | ;"    23  EXCLUDE DRG-DRG INTERACTION CK                [S] | 
|---|
|  | 367 | ;"    25  MAX SINGLE DOSE                         [NJ13,4a] | 
|---|
|  | 368 | ;"    26  MIN SINGLE DOSE                         [NJ13,4a] | 
|---|
|  | 369 | ;"    27  MAX DAILY DOSE                          [NJ13,4a] | 
|---|
|  | 370 | ;"    28  MIN DAILY DOSE                          [NJ13,4a] | 
|---|
|  | 371 | ;"    29  MAX CUMULATIVE DOSE                     [NJ13,4a] | 
|---|
|  | 372 | ;"    30  DSS NUMBER                               [NJ6,0a] | 
|---|
|  | 373 |  | 
|---|
|  | 374 | ;"--------------------------------------------------------- | 
|---|
|  | 375 |  | 
|---|
|  | 376 |  | 
|---|
|  | 377 | ;"File: TMG FDA IMPORT COMPILED                                        Branch: 1 | 
|---|
|  | 378 | ;"REF  NODE;PIECE     FLD NUM  FIELD NAME | 
|---|
|  | 379 | ;"=============================================================================== | 
|---|
|  | 380 | ;"  1  0;1                .01  TMG FDA LISTING ENTRY        <-Pntr  [RP22706.5'] | 
|---|
|  | 381 | ;"                              e.g.  TMG FDA LISTING ENTRY: 154001 | 
|---|
|  | 382 | ;"  2  0;4                .05  TRADENAME                                     [F] | 
|---|
|  | 383 | ;"                              e.g.  TRADENAME: DILTIAZEM HCL SR CAPSULES | 
|---|
|  | 384 | ;"  3  0;6                .07  GENERIC NAME                                  [F] | 
|---|
|  | 385 | ;"  4  1;3                .08  VA GENERIC                       <-Pntr  [P50.6'] | 
|---|
|  | 386 | ;"  5  1;5                .09  VA DRUG CLASS                  <-Pntr  [P50.605'] | 
|---|
|  | 387 | ;"  6  0;2                  1  STRENGTH                                      [F] | 
|---|
|  | 388 | ;"                              e.g.  STRENGTH: 240 | 
|---|
|  | 389 | ;"  7  0;3                  2  UNIT                                          [F] | 
|---|
|  | 390 | ;"                              e.g.  UNIT: MG | 
|---|
|  | 391 | ;"  8  0;5                  3  ROUTE                                         [F] | 
|---|
|  | 392 | ;"                              e.g.  ??? | 
|---|
|  | 393 | ;"  9  0;7                3.5  DOSAGE FORM                     <-Pntr  [P50.606] | 
|---|
|  | 394 | ;"  9  1;1                  4  NDC                                           [F] | 
|---|
|  | 395 | ;"                              e.g.  NDC: 053978-3062-*3 | 
|---|
|  | 396 | ;" 10  1;2                  5  NDC 12-DIGIT                                  [F] | 
|---|
|  | 397 | ;"                              e.g.  NDC: 0539783062*3 | 
|---|
|  | 398 | ;" 11  1;4                  6  SKIP THIS RECORD                              [S] | 
|---|
|  | 399 | ;" 12  1;7                  7  DONE ADDING TO 50.68                          [S] | 
|---|
|  | 400 | ;"     2;0                 14  VA PRODUCT MATCHES            <-Mult [22706.914P] | 
|---|
|  | 401 | ;" 13   -0;1                   .01   -ONE MATCH                <-Pntr  [P50.68'] | 
|---|
|  | 402 | ;"                                      e.g.  ONE MATCH: DILTIAZEM (DILACOR XR) 240MG SA CAP | 
|---|
|  | 403 | ;"                                      e.g.  ONE MATCH: DILTIAZEM (CARDIZEM CD) 240MG SA CAP | 
|---|
|  | 404 | ;"                                      e.g.  ONE MATCH: DILTIAZEM (TIAZAC) 240MG SA CAP | 
|---|
|  | 405 | ;"                                      e.g.  ONE MATCH: DILTIAZEM (WATSON-XR) 240MG SA CAP | 
|---|
|  | 406 | ;"                                      e.g.  ONE MATCH: DILTIAZEM (TIAZAC) 240MG SA CAP,UD | 
|---|
|  | 407 | ;"                                      e.g.  ONE MATCH: DILTIAZEM (CARDIZEM CD) 240MG SA CAP,UD | 
|---|
|  | 408 | ;"     3;0                 15  VA PRODUCT POSS MATCH         <-Mult [22706.915P] | 
|---|
|  | 409 | ;" 14   -0;1                   .01   -POSS MATCH               <-Pntr  [P50.68'] | 
|---|
|  | 410 | ;"     4;0                 16  INGREDIENTS                    <-Mult [22706.916] | 
|---|
|  | 411 | ;" 15   -0;1                   .01   -NUMBER                             [NJ3,0] | 
|---|
|  | 412 | ;"                                      e.g.  NUMBER: 1 | 
|---|
|  | 413 | ;" 17   -0;3                     2   -INGREDIENT              <-Pntr  [P50.416'] | 
|---|
|  | 414 | ;"                                      e.g.  INGREDIENT: DILTIAZEM HYDROCHLORIDE | 
|---|
|  | 415 | ;" 18   -0;4                     3   -STRENGTH                               [F] | 
|---|
|  | 416 | ;"                                      e.g.  STRENGTH: 240 | 
|---|
|  | 417 | ;" 19   -0;6                     5   -UNIT                    <-Pntr  [P50.607'] | 
|---|
|  | 418 | ;"                                      e.g.  ??? | 
|---|
|  | 419 | ;" | 
|---|
|  | 420 | ;"=============================================================================== | 
|---|
|  | 421 | ;"<>  'n',I=FldDD  DA=Data  F=Find  G=Goto  N=Node  P=Pointer  VGL=VGL  ?=Help | 
|---|
|  | 422 | ;" | 
|---|
|  | 423 |  | 
|---|
|  | 424 | ;"new FDAitemNum | 
|---|
|  | 425 | ;"set FDAitemNum=$$GET1^DIQ(22706.9,IEN,.01) | 
|---|
|  | 426 | ;"new DrugInfo | 
|---|
|  | 427 | ;"set result=$$GetDrugInfo^TMGNDF1A(FDAitemNum,.DrugInfo,"",1) | 
|---|
|  | 428 | ;"if result=0 do  goto A2VPDone | 
|---|
|  | 429 | ;". if Quiet=1 quit | 
|---|
|  | 430 | ;". write !,"Unable to Get Drug Info for record: ",FDAitemNum,! | 
|---|
|  | 431 |  | 
|---|
|  | 432 | ;".01  NAME                                        [RFa] | 
|---|
|  | 433 | ;"      e.g.   NAME: DILTIAZEM (CARDIZEM CD) 240MG SA CAP | 
|---|
|  | 434 | set tempS=$piece($get(^TMG(22706.9,IEN,7)),"^",6) ;"7;6= field .04 LONG NAME | 
|---|
|  | 435 | set TMGFDA(50.68,IENS,.01)=tempS     ;".01  NAME  [RFa]  ;e.g.   NAME: DILTIAZEM (CARDIZEM CD) 240MG SA CAP | 
|---|
|  | 436 | ;"set DrugInfo("ADDED","GENERIC+BRAND")=tempS | 
|---|
|  | 437 |  | 
|---|
|  | 438 | ;".05  VA GENERIC NAME                 <-Pntr  [P50.6'a] | 
|---|
|  | 439 | ;"      e.g.   VA GENERIC NAME: DILTIAZEM | 
|---|
|  | 440 | set TMGFDA(50.68,IENS,.05)=$$GET1^DIQ(22706.9,IEN,.08) | 
|---|
|  | 441 |  | 
|---|
|  | 442 | ;"1  DOSAGE FORM                   <-Pntr  [P50.606'a] | 
|---|
|  | 443 | ;"      e.g.   DOSAGE FORM: CAP,SA | 
|---|
|  | 444 | set TMGFDA(50.68,IENS,1)=$$GET1^DIQ(22706.9,IEN,3.5) | 
|---|
|  | 445 |  | 
|---|
|  | 446 | ;"2  STRENGTH                                     [Fa] | 
|---|
|  | 447 | ;"      e.g.   STRENGTH: 240 | 
|---|
|  | 448 | set TMGFDA(50.68,IENS,2)=$$GET1^DIQ(22706.9,IEN,1) | 
|---|
|  | 449 |  | 
|---|
|  | 450 | ;"3  UNITS                         <-Pntr  [P50.607'a] | 
|---|
|  | 451 | ;"      e.g.   UNITS: MG | 
|---|
|  | 452 | new tempUnits set tempUnits=$$GET1^DIQ(22706.9,IEN,2) | 
|---|
|  | 453 | if tempUnits'="" do | 
|---|
|  | 454 | . do EnsureUnits(tempUnits) | 
|---|
|  | 455 | . set TMGFDA(50.68,IENS,3)=tempUnits | 
|---|
|  | 456 |  | 
|---|
|  | 457 | ;"5  VA PRINT NAME                                [Fa] | 
|---|
|  | 458 | ;"      e.g.   VA PRINT NAME: DILTIAZEM (CARDIZEM CD) 240MG SA CAP | 
|---|
|  | 459 | ;"set tempS=$$MakeName(IEN,40,AllowCut) | 
|---|
|  | 460 | ;"if tempS="^" set result=0 goto A2VPDone | 
|---|
|  | 461 | set tempS=$piece($get(^TMG(22706.9,IEN,7)),"^",3) ;"7;3 = .055 TRADEBANE - 40 | 
|---|
|  | 462 | set TMGFDA(50.68,IENS,5)=tempS ;" 5=VA PRINT NAME | 
|---|
|  | 463 |  | 
|---|
|  | 464 | ;"6  VA PRODUCT IDENTIFIER                        [Fa]  <--- will use to store "0;TMG" | 
|---|
|  | 465 | ;"      e.g.   VA PRODUCT IDENTIFIER: D0230 | 
|---|
|  | 466 | set TMGFDA(50.68,IENS,6)="0;TMG" | 
|---|
|  | 467 |  | 
|---|
|  | 468 | ;"14  ACTIVE INGREDIENTS      W:^ D:^ <-Mult [50.6814P] | 
|---|
|  | 469 | ;"(multiple/subfile, add after this record added) | 
|---|
|  | 470 |  | 
|---|
|  | 471 | ;"15  PRIMARY VA DRUG CLASS         <-Pntr  [P50.605'a] | 
|---|
|  | 472 | ;"      e.g.   PRIMARY VA DRUG CLASS: CV200 | 
|---|
|  | 473 | set TMGFDA(50.68,IENS,15)=$$GET1^DIQ(22706.9,IEN,.09) | 
|---|
|  | 474 |  | 
|---|
|  | 475 | quit | 
|---|
|  | 476 |  | 
|---|
|  | 477 |  | 
|---|
|  | 478 | EnsureIngredients(fdaIEN,vapIEN) | 
|---|
|  | 479 | ;"Purpose: to ensure that all the ingredients from the FDA record (22706.9) are in the | 
|---|
|  | 480 | ;"         VA PRODUCT record (50.68) | 
|---|
|  | 481 | ;"Input: fdaIEN -- the IEN from 22706.9 | 
|---|
|  | 482 | ;"       vapIEN -- the target IEN in 50.68 | 
|---|
|  | 483 | ;"result: 1= OK to continue, 0=error | 
|---|
|  | 484 |  | 
|---|
|  | 485 | new result set result=1  ;"default to success | 
|---|
|  | 486 | new recNum set recNum=1 | 
|---|
|  | 487 | ;"new IENS set IENS=fdaIEN_"," | 
|---|
|  | 488 | new IENS set IENS=vapIEN_"," | 
|---|
|  | 489 | new TMGFDA,TMGMSG,TMGIEN | 
|---|
|  | 490 |  | 
|---|
|  | 491 | new subIEN set subIEN=0  ;"INGREDIENTS | 
|---|
|  | 492 | for  set subIEN=+$order(^TMG(22706.9,fdaIEN,4,subIEN)) quit:(+subIEN'>0)  do | 
|---|
|  | 493 | . new node set node=$get(^TMG(22706.9,fdaIEN,4,subIEN,0)) | 
|---|
|  | 494 | . new pIngredients,strength,units | 
|---|
|  | 495 | . set pIngredients=$piece(node,"^",3) ;"INGREDIENTS (a POINTER) | 
|---|
|  | 496 | . set strength=$piece(node,"^",4)   ;"STRENGTH | 
|---|
|  | 497 | . set units=$piece(node,"^",6)   ;"UNITS | 
|---|
|  | 498 | . ;"First search to ensure ingredient is not already present. | 
|---|
|  | 499 | . new subIEN2 set subIEN2=0 | 
|---|
|  | 500 | . new found set found=0 | 
|---|
|  | 501 | . for  set subIEN2=$order(^PSNDF(50.68,vapIEN,2,subIEN2)) quit:(+subIEN2'>0)!found  do | 
|---|
|  | 502 | . . new ptr set ptr=$piece($get(^PSNDF(50.68,vapIEN,2,subIEN2,0)),"^",1) | 
|---|
|  | 503 | . . if ptr=pIngredients set found=1 | 
|---|
|  | 504 | . if found=1 quit | 
|---|
|  | 505 | . if pIngredients="" do  quit | 
|---|
|  | 506 | . . write !,"Ingredient entry is missing actual ingredient, so that subpart was DELETED.",! | 
|---|
|  | 507 | . . new TMGFDA,TMGMSG | 
|---|
|  | 508 | . . set TMGFDA(22706.916,subIEN_","_fdaIEN_",",.01)="@"  ;"delete entry. | 
|---|
|  | 509 | . . do FILE^DIE("E","TMGFDA","TMGMSG") | 
|---|
|  | 510 | . . do ShowDIERR^TMGDEBUG(.TMGMSG,.PriorErrorFound) | 
|---|
|  | 511 | . set TMGFDA(50.6814,"+"_recNum_","_IENS,.01)=pIngredients | 
|---|
|  | 512 | . if strength'="" set TMGFDA(50.6814,"+"_recNum_","_IENS,1)=strength | 
|---|
|  | 513 | . if units'="" set TMGFDA(50.6814,"+"_recNum_","_IENS,2)=units | 
|---|
|  | 514 | . set recNum=recNum+1 | 
|---|
|  | 515 |  | 
|---|
|  | 516 | if $data(TMGFDA)=0 goto EIDone | 
|---|
|  | 517 | do UPDATE^DIE("S","TMGFDA","TMGIEN","TMGMSG") | 
|---|
|  | 518 | if $data(TMGMSG("DIERR")) do  goto A2VPDone | 
|---|
|  | 519 | . set result=0 if $get(Quiet)=1 quit | 
|---|
|  | 520 | . write !,"Error adding ingredients subrecord.  IEN in 22706.9=",fdaIEN,! | 
|---|
|  | 521 | . new PriorErrorFound | 
|---|
|  | 522 | . do ShowDIERR^TMGDEBUG(.TMGMSG,.PriorErrorFound) | 
|---|
|  | 523 | EIDone | 
|---|
|  | 524 | quit result | 
|---|
|  | 525 |  | 
|---|
|  | 526 |  | 
|---|
|  | 527 | EnsureNDC(IEN) | 
|---|
|  | 528 | ;"Purpose: Ensure record exists in NDC/UPN file (50.67). | 
|---|
|  | 529 | ;"Input: IEN -- IEN from file 22706.9 (TMG FDA IMPORT COMPILED) to add from | 
|---|
|  | 530 | ;"Output: An entry to be added to file 50.67 | 
|---|
|  | 531 | ;"Result: 1=OK to continue, 0 if error | 
|---|
|  | 532 |  | 
|---|
|  | 533 | ;"Make record in NDC/UPN file (50.67). | 
|---|
|  | 534 | ;"File: NDC/UPN                                                        Branch: 1 | 
|---|
|  | 535 | ;"REF  NODE;PIECE     FLD NUM  FIELD NAME | 
|---|
|  | 536 | ;"=============================================================================== | 
|---|
|  | 537 | ;"  1  0;1                .01  SEQUENCE NUMBER                        [RNJ9,0aX] | 
|---|
|  | 538 | ;"  2  0;2                  1  NDC                                          [Fa] | 
|---|
|  | 539 | ;"  3  0;3                  2  UPN                                          [Fa] | 
|---|
|  | 540 | ;"  4  0;4                  3  MANUFACTURER                   <-Pntr  [P55.95'a] | 
|---|
|  | 541 | ;"  5  0;5                  4  TRADE NAME                                   [Fa] | 
|---|
|  | 542 | ;"  6  0;6                  5  VA PRODUCT NAME                <-Pntr  [P50.68'a] | 
|---|
|  | 543 | ;"     1;0                  6  ROUTE OF ADMINISTRATION  W:^ D:^ <-Mult [50.676A] | 
|---|
|  | 544 | ;"  7   -0;1              .01   -ROUTE OF ADMINISTRATION                   [FaX] | 
|---|
|  | 545 | ;"  8  0;7                  7  INACTIVATION DATE                            [Da] | 
|---|
|  | 546 | ;"  9  0;8                  8  PACKAGE SIZE                  <-Pntr  [P50.609'a] | 
|---|
|  | 547 | ;" 10  0;9                  9  PACKAGE TYPE                  <-Pntr  [P50.608'a] | 
|---|
|  | 548 | ;" 11  0;10                10  OTX/RX INDICATOR                             [Sa] | 
|---|
|  | 549 | ;"     2;0                 11  PREVIOUS NDC            W:^ D:^ <-Mult [50.6711A] | 
|---|
|  | 550 | ;" 12   -0;1              .01   -PREVIOUS NDC                               [Fa] | 
|---|
|  | 551 | ;"     3;0                 12  PREVIOUS UPN            W:^ D:^ <-Mult [50.6712A] | 
|---|
|  | 552 | ;" 13   -0;1              .01   -PREVIOUS UPN                               [Fa] | 
|---|
|  | 553 | ;" <> <> <> | 
|---|
|  | 554 |  | 
|---|
|  | 555 | new result set result=0   ;" default to failure | 
|---|
|  | 556 |  | 
|---|
|  | 557 | new TMGFDA,TMGMSG,TMGIEN | 
|---|
|  | 558 |  | 
|---|
|  | 559 | new NDC set NDC=$piece($get(^TMG(22706.9,IEN,1)),"^",2)  ;"1;2= field 5, NDC 12 digit | 
|---|
|  | 560 | new ndcIEN set ndcIEN=$order(^PSNDF(50.67,"NDC",NDC,"")) | 
|---|
|  | 561 | if +ndcIEN>0 set IENS=ndcIEN_"," goto EN1 | 
|---|
|  | 562 |  | 
|---|
|  | 563 | ;"Below is for NEW records.  DINUM at play here... | 
|---|
|  | 564 | new newIEN set newIEN="" | 
|---|
|  | 565 | for  set newIEN=$order(^PSNDF(50.67,newIEN),-1) quit:(+newIEN=newIEN)!(newIEN="") | 
|---|
|  | 566 | if +newIEN=0 do  write "Unable to create NDF entry for ",IEN,! goto ENDone | 
|---|
|  | 567 | set newIEN=newIEN+1 | 
|---|
|  | 568 | set TMGFDA(50.67,IENS,.01)=newIEN   ;"  .01  SEQUENCE NUMBER | 
|---|
|  | 569 | set IENS="+1," | 
|---|
|  | 570 |  | 
|---|
|  | 571 | EN1     if NDC'="" set TMGFDA(50.67,IENS,1)=NDC   ;"1=NDC | 
|---|
|  | 572 |  | 
|---|
|  | 573 | ;"**Must add manufacturer if to be used! | 
|---|
|  | 574 | ;"  3  MANUFACTURER                   <-Pntr  [P55.95'a] | 
|---|
|  | 575 | ;"new Firm set Firm=$get(DrugInfo("FIRM","NAME")) | 
|---|
|  | 576 | ;"if Firm'="" set TMGFDA(50.67,IENS,3)=Firm | 
|---|
|  | 577 |  | 
|---|
|  | 578 | new tName set tName=$piece($get(^TMG(22706.9,IEN,7)),"^",3) ;"7;3 = TRADE NAME - 40 | 
|---|
|  | 579 | if tName'="" set TMGFDA(50.67,IENS,4)=tName   ;"  4  TRADE NAME | 
|---|
|  | 580 |  | 
|---|
|  | 581 | new vapIEN set vapIEN=+$piece($get(^TMG(22706.9,IEN,6)),"^",2)  ;"6;2=field 5.5, VA PRODUCT LINK | 
|---|
|  | 582 | if vapIEN>0 set TMGFDA(50.67,IENS,5)=vapIEN;"  5  VA PRODUCT NAME --pointer to newly added 50.68 record | 
|---|
|  | 583 |  | 
|---|
|  | 584 | ;" 10  OTX/RX INDICATOR | 
|---|
|  | 585 | new codeOTC set codeOTC=$piece($get(^TMG(22706.9,IEN,7)),"^",5)  ;"7;5= field 7, RX or OTC | 
|---|
|  | 586 | if codeOTC'="" set TMGFDA(50.67,IENS,10)=codeOTC | 
|---|
|  | 587 |  | 
|---|
|  | 588 | ;"If I decide to add this, must do it after adding parent record. | 
|---|
|  | 589 | ;"     1;0                  6  ROUTE OF ADMINISTRATION  W:^ D:^ <-Mult [50.676A] | 
|---|
|  | 590 | ;"  7   -0;1              .01   -ROUTE OF ADMINISTRATION                   [FaX] | 
|---|
|  | 591 |  | 
|---|
|  | 592 | if IENS'["+" do  goto EN2  ;"update existing record | 
|---|
|  | 593 | . new temp set temp=$$TrimFDA^TMGDBAPI(.TMGFDA) | 
|---|
|  | 594 | . if $data(TMGFDA)=0 quit | 
|---|
|  | 595 | . do FILE^DIE("K","TMGFDA","TMGMSG")  ;"FDA is in INTERNAL format | 
|---|
|  | 596 |  | 
|---|
|  | 597 | else  do  ;"add new record | 
|---|
|  | 598 | . do UPDATE^DIE("","TMGFDA","TMGIEN","TMGMSG") | 
|---|
|  | 599 | EN2 | 
|---|
|  | 600 | if $data(TMGMSG("DIERR")) do  goto ENDone | 
|---|
|  | 601 | . set result=0 | 
|---|
|  | 602 | . new PriorErrorFound | 
|---|
|  | 603 | . do ShowDIERR^TMGDEBUG(.TMGMSG,.PriorErrorFound) | 
|---|
|  | 604 |  | 
|---|
|  | 605 | set result=1 ;"ensure we are at success. | 
|---|
|  | 606 |  | 
|---|
|  | 607 | ENDone | 
|---|
|  | 608 | quit result | 
|---|
|  | 609 |  | 
|---|
|  | 610 |  | 
|---|
|  | 611 | ;"========================================================== | 
|---|
|  | 612 | ;"========================================================== | 
|---|
|  | 613 | EnsureUnits(UnitS) | 
|---|
|  | 614 | ;"Purpose: to ensure that the UnitS is valid in file 50.607 | 
|---|
|  | 615 | ;"Input: UnitS -- the string such as "mg;mg" | 
|---|
|  | 616 | ;"Output: If UnitS is not found in 50.607, then it will be added | 
|---|
|  | 617 | ;"Results: none | 
|---|
|  | 618 |  | 
|---|
|  | 619 | new TMGROOT,TMGMSG | 
|---|
|  | 620 |  | 
|---|
|  | 621 | ;"Finish later... | 
|---|
|  | 622 |  | 
|---|
|  | 623 | ;"do FIND^DIC(50.607,"","","",UnitS,"*",,,,"TMGROOT","TMGMSG") | 
|---|
|  | 624 | ;"if +$get(TMGROOT("DILIST",0))=1 goto EUDone | 
|---|
|  | 625 | ;"goto EUDone | 
|---|
|  | 626 |  | 
|---|
|  | 627 | ;"Note: if there are duplicate entries (i.e. 2 entries for MG/0.5ML), then Y=-1 | 
|---|
|  | 628 | new X,Y,DIC | 
|---|
|  | 629 | set DIC=50.607 | 
|---|
|  | 630 | set DIC(0)="XML" | 
|---|
|  | 631 | set X=UnitS | 
|---|
|  | 632 | do ^DIC | 
|---|
|  | 633 | if +Y'>0 do | 
|---|
|  | 634 | . if $get(Quiet)=1 quit | 
|---|
|  | 635 | . write !,"Can't find or add: ",UnitS,! | 
|---|
|  | 636 |  | 
|---|
|  | 637 | EUDone | 
|---|
|  | 638 | quit | 
|---|
|  | 639 |  | 
|---|
|  | 640 | Unlock50dot607 | 
|---|
|  | 641 | ;"Purpose to allow deletion in file 50.607 | 
|---|
|  | 642 |  | 
|---|
|  | 643 | kill ^DD(50.607,.01,8.5) | 
|---|
|  | 644 | kill ^DD(50.607,.01,9) | 
|---|
|  | 645 |  | 
|---|
|  | 646 | quit | 
|---|
|  | 647 |  | 
|---|
|  | 648 | Lock50dot607 | 
|---|
|  | 649 | ;"Purpose: to restore lock on file 50.607 | 
|---|
|  | 650 |  | 
|---|
|  | 651 | set ^DD(50.607,.01,8.5)="^" | 
|---|
|  | 652 | set ^DD(50.607,.01,9)="^" | 
|---|
|  | 653 |  | 
|---|
|  | 654 | quit | 
|---|
|  | 655 |  | 
|---|
|  | 656 | Link2VAP | 
|---|
|  | 657 | ;"Purpose: to fill file 22706.9, field 5.5 in with link to a record | 
|---|
|  | 658 | ;"        in VA PRODUCT file (50.68) that has the SAME national drug | 
|---|
|  | 659 | ;"        code (NDC).  It checks for and handles situations where there | 
|---|
|  | 660 | ;"        are multiple entries in 50.68 with the same NDC.  It picks | 
|---|
|  | 661 | ;"        the entry with the closest name as the one to use. | 
|---|
|  | 662 | ;"        --It also removes such a link from the VA PRODUCT SIMILAR MATCHES | 
|---|
|  | 663 | ;"          field.  I.e. it is not a 'similar' match if it is an exact match. | 
|---|
|  | 664 | ;"        --It also removes such a link from the VA PRODUCT POSSIBLE MATCHES | 
|---|
|  | 665 | ;"          field.  I.e. it is not a 'possible' match if it is an exact match. | 
|---|
|  | 666 | ;"Results: none. | 
|---|
|  | 667 |  | 
|---|
|  | 668 | ;"new pNDCIndex | 
|---|
|  | 669 | ;"set pNDCIndex=$name(^TMG("TMP","INDEX NDC-->VAP")) | 
|---|
|  | 670 | set pNDCIndex=$name(^PSNDF(50.67,"NDC")) | 
|---|
|  | 671 |  | 
|---|
|  | 672 | new Itr,IEN,success | 
|---|
|  | 673 | new abort set abort=0 | 
|---|
|  | 674 | new modCount set modCount=0 | 
|---|
|  | 675 | set IEN=$$ItrInit^TMGITR(22706.9,.Itr) | 
|---|
|  | 676 | do PrepProgress^TMGITR(.Itr,20,0,"IEN") | 
|---|
|  | 677 | if IEN'="" for  do  quit:($$ItrNext^TMGITR(.Itr,.IEN)'>0)!abort | 
|---|
|  | 678 | . if $$UserAborted^TMGUSRIF set abort=1 quit | 
|---|
|  | 679 | . if $piece($get(^TMG(22706.9,IEN,1)),"^",4)=1 quit ;"1=SKIP THIS RECORD | 
|---|
|  | 680 | . new NDC set NDC=$piece($get(^TMG(22706.9,IEN,1)),"^",2) | 
|---|
|  | 681 | . if NDC="" quit  ;"Can't link if no NDC.  Fix later? | 
|---|
|  | 682 | . new count set count=$$ListCt^TMGMISC($name(@pNDCIndex@(NDC))) | 
|---|
|  | 683 | . new VAP set VAP=0 | 
|---|
|  | 684 | . if count=1 do | 
|---|
|  | 685 | . . new ndcP1 | 
|---|
|  | 686 | . . set ndcP1=+$order(@pNDCIndex@(NDC,"")) | 
|---|
|  | 687 | . . set VAP=+$piece($get(^PSNDF(50.67,ndcP1,0)),"^",6) | 
|---|
|  | 688 | . else  do | 
|---|
|  | 689 | . . new vap1,s1,fdaS,ndcP1 | 
|---|
|  | 690 | . . new bestScore set bestScore=0 | 
|---|
|  | 691 | . . new bestVAP set bestVAP=0 | 
|---|
|  | 692 | . . new bestS set bestS="" | 
|---|
|  | 693 | . . set fdaS=$piece($get(^TMG(22706.9,IEN,0)),"^",4) ;"TradeName, field .05 | 
|---|
|  | 694 | . . set ndcP1=+$order(@pNDCIndex@(NDC,"")) | 
|---|
|  | 695 | . . for  do  set ndcP1=+$order(@pNDCIndex@(NDC,ndcP1)) quit:(+ndcP1'>0) | 
|---|
|  | 696 | . . . set vap1=+$piece($get(^PSNDF(50.67,ndcP1,0)),"^",6) | 
|---|
|  | 697 | . . . set s1=$piece($get(^PSNDF(50.68,vap1,0)),"^",1) | 
|---|
|  | 698 | . . . new tempScore set tempScore=$$Comp2Strs^TMGSTUTL(fdaS,s1) | 
|---|
|  | 699 | . . . if tempScore>bestScore set bestScore=tempScore,bestVAP=vap1,bestS=s1 | 
|---|
|  | 700 | . . if bestScore'>1 set bestVAP=0 | 
|---|
|  | 701 | . . set VAP=bestVAP | 
|---|
|  | 702 | . if VAP=0 quit | 
|---|
|  | 703 | . if $piece($get(^TMG(22706.9,IEN,6)),"^",2)'=VAP do | 
|---|
|  | 704 | . . new TMGFDA,TMGMSG | 
|---|
|  | 705 | . . set TMGFDA(22706.9,IEN_",",5.5)=VAP | 
|---|
|  | 706 | . . do FILE^DIE("K","TMGFDA","TMGMSG") | 
|---|
|  | 707 | . . do ShowIfDIERR^TMGDEBUG("TMGMSG") | 
|---|
|  | 708 | . . set modCount=modCount+1 | 
|---|
|  | 709 | . new subIEN set subIEN=0 | 
|---|
|  | 710 | . for  set subIEN=$order(^TMG(22706.9,IEN,2,subIEN)) quit:(+subIEN'>0)  do | 
|---|
|  | 711 | . . new nearVAP set nearVAP=$piece($get(^TMG(22706.9,IEN,2,subIEN,0)),"^",1) | 
|---|
|  | 712 | . . if nearVAP'=VAP quit | 
|---|
|  | 713 | . . ;"write "SIMILAR MATCH contains this link. Deleting...",! | 
|---|
|  | 714 | . . new TMGFDA,TMGMSG | 
|---|
|  | 715 | . . set TMGFDA(22706.914,subIEN_","_IEN_",",.01)="@" | 
|---|
|  | 716 | . . do FILE^DIE("K","TMGFDA","TMGMSG") | 
|---|
|  | 717 | . . do ShowIfDIERR^TMGDEBUG(.TMGMSG) | 
|---|
|  | 718 | . . set modCount=modCount+1 | 
|---|
|  | 719 | . for  set subIEN=$order(^TMG(22706.9,IEN,3,subIEN)) quit:(+subIEN'>0)  do | 
|---|
|  | 720 | . . new nearVAP set nearVAP=$piece($get(^TMG(22706.9,IEN,3,subIEN,0)),"^",1) | 
|---|
|  | 721 | . . if nearVAP'=VAP quit | 
|---|
|  | 722 | . . ;"write "POSS SIMILAR MATCH contains this link. Deleting...",! | 
|---|
|  | 723 | . . new TMGFDA,TMGMSG | 
|---|
|  | 724 | . . set TMGFDA(22706.915,subIEN_","_IEN_",",.01)="@" | 
|---|
|  | 725 | . . do FILE^DIE("K","TMGFDA","TMGMSG") | 
|---|
|  | 726 | . . do ShowIfDIERR^TMGDEBUG(.TMGMSG) | 
|---|
|  | 727 | . . set modCount=modCount+1 | 
|---|
|  | 728 | do ProgressDone^TMGITR(.Itr) | 
|---|
|  | 729 |  | 
|---|
|  | 730 | write modCount," modifications made.",! | 
|---|
|  | 731 | do PressToCont^TMGUSRIF | 
|---|
|  | 732 | quit | 
|---|
|  | 733 |  | 
|---|