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