[796] | 1 | TMGNDF3C ;TMG/kst/FDA Import: Create DRUG entries ;03/25/06
|
---|
| 2 | ;;1.0;TMG-LIB;**1**;11/21/06
|
---|
| 3 |
|
---|
| 4 | ;" FDA - NATIONAL DRUG FILES COMPILING FUNCTIONS
|
---|
| 5 | ;" Creation of records in file 50 (DRUG 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 | ;"Refresh1(IEN22706d9,Option) -- Refresh one drug from 22706.9
|
---|
| 16 | ;"RefreshBatch(IENArray,Option) -- Refres batch entries in 22706.9
|
---|
| 17 |
|
---|
| 18 | ;"=======================================================================
|
---|
| 19 | ;" Private Functions.
|
---|
| 20 | ;"=======================================================================
|
---|
| 21 | ;"RefreshNonSkips -- Refresh all non-skipped records in 22706.9
|
---|
| 22 | ;"GetAddList(List): get list of entries in VA PRODUCT (50.68) not having corresponding entry in DRUG file (50)
|
---|
| 23 | ;"EnsureFromList(List) -- Add to DRUG file (50) from TMG FDA IMPORT COMPILED
|
---|
| 24 | ;"Update50(IEN50,DrugInfo,Option) -- refresh info in DRUG (50) file, or add if it doesn't exist (or delete if needed)
|
---|
| 25 | ;"GetTMGDrugInfo(fdaIEN,DrugInfo) -- Create a very abbreviated version of the DrugInfo array
|
---|
| 26 | ;"Stuff50(IEN50,DrugInfo,Option) -- synch record(s) in the DRUG file, based on entry from VA PRODUCT file
|
---|
| 27 | ;"SetupFDA(DrugInfo,IENS,TMGFDA) -- setup FDA for data for record in DRUG file
|
---|
| 28 | ;"AddMsg(IEN50,Msg) -- Add a message in the Activity log field
|
---|
| 29 |
|
---|
| 30 | ;"=======================================================================
|
---|
| 31 | ;"=======================================================================
|
---|
| 32 | ;"NOTE: Data mapping:
|
---|
| 33 | ;" File 50, .01 field (name) is filled with data from file 22706.9, from on
|
---|
| 34 | ;" of two possible fields:
|
---|
| 35 | ;" If entry in 50 represents a GENERICNAME drug, then .01 <--- .076
|
---|
| 36 | ;" If entry in 50 represents a TRADENAME drug, then .01 <--- .056
|
---|
| 37 | ;"=======================================================================
|
---|
| 38 | ;"=======================================================================
|
---|
| 39 | ;"Q: Where is BatchTo50 (i.e. 50.68-->50)??
|
---|
| 40 | ;"A: There are many entries in 50.68 that I don't want put into 50, so I need
|
---|
| 41 | ;" to do this: 22706.9 --> 50.68
|
---|
| 42 | ;" 22706.9 --> 50
|
---|
| 43 | ;" instead of this: 22706.9 --> 50.68 --> 50
|
---|
| 44 | ;"=======================================================================
|
---|
| 45 | Menu
|
---|
| 46 | ;"Purpose: Provide menu to entry points of main routines
|
---|
| 47 |
|
---|
| 48 | new Menu,UsrSlct
|
---|
| 49 | set Menu(0)="Pick Option for Synchronizing Imports Data to file 50 (3C)"
|
---|
| 50 | set Menu(1)="Synchronize DRUG file with import data"_$char(9)_"RefreshNonSkips"
|
---|
| 51 | set Menu(2)="Verify Synchronization"_$char(9)_"VerifySync"
|
---|
| 52 | set Menu("P")="Prev Stage"_$char(9)_"Prev"
|
---|
| 53 | set Menu("N")="Next Stage"_$char(9)_"Next"
|
---|
| 54 |
|
---|
| 55 | MC1 write #
|
---|
| 56 | set UsrSlct=$$Menu^TMGUSRIF(.Menu,"^")
|
---|
| 57 | if UsrSlct="^" goto MCDone
|
---|
| 58 | if UsrSlct=0 set UsrSlct=""
|
---|
| 59 |
|
---|
| 60 | if UsrSlct="RefreshNonSkips" do RefreshNonSkips goto MC1
|
---|
| 61 | if UsrSlct="VerifySync" do VerifySync goto MC1
|
---|
| 62 | if UsrSlct="Prev" goto Menu^TMGNDF3A ;"quit can occur from there...
|
---|
| 63 | if UsrSlct="Next" goto Menu^TMGNDF3D ;"quit can occur from there...
|
---|
| 64 | goto MC1
|
---|
| 65 |
|
---|
| 66 | MCDone
|
---|
| 67 | quit
|
---|
| 68 |
|
---|
| 69 |
|
---|
| 70 | RefreshNonSkips
|
---|
| 71 | ;"Purpose: To work on ALL records in 22706.9 that are not marked to be
|
---|
| 72 | ;" skipped, and ensure that all is refreshed appropriately
|
---|
| 73 |
|
---|
| 74 | new tempList
|
---|
| 75 |
|
---|
| 76 | new AddCt,OKCt
|
---|
| 77 | set AddCt=0,OKCt=0
|
---|
| 78 | new Itr,IEN
|
---|
| 79 | new abort set abort=0
|
---|
| 80 | write !,"Gathering list of imports to use (those not marked to be skipped)...",!
|
---|
| 81 | set IEN22706d9=$$ItrInit^TMGITR(22706.9,.Itr)
|
---|
| 82 | do PrepProgress^TMGITR(.Itr,20,0,"IEN22706d9")
|
---|
| 83 | if IEN22706d9'="" for do quit:($$ItrNext^TMGITR(.Itr,.IEN22706d9)'>0)!abort
|
---|
| 84 | . if $$UserAborted^TMGUSRIF set abort=1 quit
|
---|
| 85 | . if +$piece($get(^TMG(22706.9,IEN22706d9,1)),"^",4)=1 quit ;"1=SKIP
|
---|
| 86 | . new tIEN50 set tIEN50=+$piece($get(^TMG(22706.9,IEN22706d9,7)),"^",1)
|
---|
| 87 | . new gIEN50 set gIEN50=+$piece($get(^TMG(22706.9,IEN22706d9,7)),"^",2)
|
---|
| 88 | . set tempList(IEN22706d9)=""
|
---|
| 89 | . if (tIEN50>0)&(gIEN50>0) set OKCt=OKCt+1
|
---|
| 90 | . else set AddCt=AddCt+1
|
---|
| 91 | do ProgressDone^TMGITR(.Itr)
|
---|
| 92 |
|
---|
| 93 | write !,AddCt," items may be added to DRUG file (if appropriate).",!
|
---|
| 94 | write OKCt," items will be refreshed in DRUG file.",!
|
---|
| 95 |
|
---|
| 96 | new % set %=1
|
---|
| 97 | write "Proceed" do YN^DICN write !
|
---|
| 98 | if %'=1 goto RNSDone
|
---|
| 99 |
|
---|
| 100 | do EnsureFromList(.tempList)
|
---|
| 101 |
|
---|
| 102 | RNSDone
|
---|
| 103 | quit
|
---|
| 104 |
|
---|
| 105 | RefreshBatch(IENArray,Option)
|
---|
| 106 | ;"Purpose: To take entries in 22706.9 and refresh them
|
---|
| 107 | ;"Input: IENArray -- PASS BY REFERENCE. Array of IENs from 22706.9
|
---|
| 108 | ;" IENArray(IEN22706d9)=""
|
---|
| 109 | ;" IENArray(IEN22706d9)=""
|
---|
| 110 | ;" Option -- OPTIONAL. Format:
|
---|
| 111 | ;" Option("FIX CHAIN")=1 <--- changes will be propigate forward
|
---|
| 112 | ;" to file 50, POI, OI, OQV etc.
|
---|
| 113 | ;" Option("QUIET")=1
|
---|
| 114 |
|
---|
| 115 | ;"Results: none
|
---|
| 116 |
|
---|
| 117 | new IEN22706d9,Itr
|
---|
| 118 | new abort set abort=0
|
---|
| 119 | set IEN22706d9=$$ItrAInit^TMGITR("IENArray",.Itr)
|
---|
| 120 | do PrepProgress^TMGITR(.Itr,1,1,"IEN22706d9")
|
---|
| 121 | if IEN22706d9'="" for do quit:($$ItrANext^TMGITR(.Itr,.IEN22706d9)="")!abort
|
---|
| 122 | . ;"write !,"Refreshing compiled entry #",IEN227606d9,!
|
---|
| 123 | . do Refresh1(IEN22706d9,.Option)
|
---|
| 124 | quit
|
---|
| 125 |
|
---|
| 126 |
|
---|
| 127 | Refresh1(IEN22706d9,Option)
|
---|
| 128 | ;"Purpose: To take one entry in 22706.9 and refresh it
|
---|
| 129 | ;"Input: IEN22706d9 -- IEN from 22706.9
|
---|
| 130 | ;" Option -- OPTIONAL. Format:
|
---|
| 131 | ;" Option("FIX CHAIN")=1 <--- changes will be propigate forward
|
---|
| 132 | ;" to file 50, POI, OI, OQV etc.
|
---|
| 133 | ;"Results: none
|
---|
| 134 |
|
---|
| 135 | new gIEN50,tIEN50
|
---|
| 136 | new skip
|
---|
| 137 | set skip=($piece($get(^TMG(22706.9,IEN22706d9,1)),"^",4)=1)
|
---|
| 138 |
|
---|
| 139 | if $get(Option("FIX CHAIN"))=1 do
|
---|
| 140 | . new temp
|
---|
| 141 | . set tIEN50=+$piece($get(^TMG(22706.9,IEN22706d9,7)),"^",1)
|
---|
| 142 | . set Option("IEN50","TRADE")=tIEN50
|
---|
| 143 | . set gIEN50=+$piece($get(^TMG(22706.9,IEN22706d9,7)),"^",2)
|
---|
| 144 | . set Option("IEN50","GENERIC")=gIEN50
|
---|
| 145 | . set Option("FIX CHAIN","IEN22706d9")=IEN22706d9
|
---|
| 146 |
|
---|
| 147 | new List
|
---|
| 148 | if skip set List(IEN22706d9)="S"
|
---|
| 149 | else set List(IEN22706d9)=""
|
---|
| 150 |
|
---|
| 151 | do EnsureFromList(.List,.Option)
|
---|
| 152 |
|
---|
| 153 | if $get(Option("FIX CHAIN"))=1 do
|
---|
| 154 | . if tIEN50>0 set temp=$$Fix1Drug^TMGNDF3D(tIEN50,IEN22706d9)
|
---|
| 155 | . if gIEN50>0 set temp=$$Fix1Drug^TMGNDF3D(gIEN50,IEN22706d9)
|
---|
| 156 |
|
---|
| 157 | quit
|
---|
| 158 |
|
---|
| 159 |
|
---|
| 160 | EnsureFromList(List,Option)
|
---|
| 161 | ;"Purpose: to add entries to, or refresh fields in, DRUG file (50) based on
|
---|
| 162 | ;" data from TMG FDA IMPORT COMPILED (22706.9),
|
---|
| 163 | ;" OR to ensure that the linked records are properly refreshed.
|
---|
| 164 | ;" OR ensure that records liked from a skipped record are deleted
|
---|
| 165 | ;"Input: List -- PASS BY REFERENCE, format:
|
---|
| 166 | ;" List(IEN22706d9)=""
|
---|
| 167 | ;" List(IEN22706d9)=""
|
---|
| 168 | ;" List(IEN22706d9)="S" <-- record now skipped, so ensure linked records are removed
|
---|
| 169 | ;" Option -- OPTIONAL. Format:
|
---|
| 170 | ;" Option("FIX CHAIN")=1 <--- changes will be propigate forward
|
---|
| 171 | ;" to file 50, POI, OI, OQV etc.
|
---|
| 172 | ;" OPTION("FIX CHAIN","IEN22706d9")=Source IEN
|
---|
| 173 | ;" Option("QUIET")=1 <-- supress text output
|
---|
| 174 | ;"Results: none
|
---|
| 175 |
|
---|
| 176 | new IEN22706d9,Itr
|
---|
| 177 | new error set error=0
|
---|
| 178 | new abort set abort=0
|
---|
| 179 | new ChangeCt set ChangeCt=0
|
---|
| 180 | new quiet set quiet=($get(Option("QUIET"))=1)
|
---|
| 181 | do Unlock50^TMGNDFUT
|
---|
| 182 |
|
---|
| 183 | if 'quiet write "Scanning import file, to ensure all records in DRUG file are updated...",!
|
---|
| 184 | set IEN22706d9=$$ItrAInit^TMGITR("List",.Itr)
|
---|
| 185 | if 'quiet do PrepProgress^TMGITR(.Itr,20,0,"IEN22706d9")
|
---|
| 186 | if IEN22706d9>0 for do quit:($$ItrANext^TMGITR(.Itr,.IEN22706d9)'>0)!abort
|
---|
| 187 | . new DrugInfo,ndcIEN,tempS,error,temp,vapIEN,temp
|
---|
| 188 | . new skip set skip=($get(List(IEN22706d9))="S")
|
---|
| 189 | . set error=0,temp=0,tempS=""
|
---|
| 190 | . if $$UserAborted^TMGUSRIF set abort=1 quit
|
---|
| 191 | . set vapIEN=+$piece($get(^TMG(22706.9,IEN22706d9,6)),"^",2)
|
---|
| 192 | . if skip=0,vapIEN>0,$data(^PSNDF(50.68,vapIEN))=0 do
|
---|
| 193 | . . if 'quiet write "Pointer to VA PRODUCT from File 22709.9, IEN# ",IEN22706d9," is invalid. Will delete.",!
|
---|
| 194 | . . set vapIEN=0
|
---|
| 195 | . . new TMGMSG,TMGFDA
|
---|
| 196 | . . set TMGFDA(22706.9,fdaIEN_",",5.5)="@"
|
---|
| 197 | . . do FILE^DIE("K","TMGFDA","TMGMSG")
|
---|
| 198 | . . do ShowIfDIERR^TMGDEBUG(.TMGMSG) ;"show errors, even if quiet
|
---|
| 199 | . if skip=0,vapIEN'>0 set error=1 quit
|
---|
| 200 | . set temp=$$GetTMGDrugInfo(IEN22706d9,.DrugInfo)
|
---|
| 201 | . if skip=0,temp=0 set error=1 quit
|
---|
| 202 | . if skip=1 set Option("DELETING")=1
|
---|
| 203 | . ;"--- work on Trade Name link ---
|
---|
| 204 | . if ($get(DrugInfo("NAME","TRADE"))=$get(DrugInfo("NAME","GENERIC"))) set DrugInfo("NAME","TRADE")=""
|
---|
| 205 | . new tIEN50 set tIEN50=+$piece($get(^TMG(22706.9,IEN22706d9,7)),"^",1) ;"DRUG TRADENAME LINK
|
---|
| 206 | . set Option("CUR MODE")="TRADE"
|
---|
| 207 | . set temp=$$Update50(tIEN50,.DrugInfo,.Option) ;"may chain forward
|
---|
| 208 | . if temp=1 set ChangeCt=ChangeCt+1
|
---|
| 209 | . else if temp=-1 set error=1 ;"quit
|
---|
| 210 | . ;"--- work on Generic Name link ---
|
---|
| 211 | . new gIEN50 set gIEN50=+$piece($get(^TMG(22706.9,IEN22706d9,7)),"^",2) ;"DRUG GENERIC LINK
|
---|
| 212 | . if gIEN50=tIEN50 set gIEN50=0
|
---|
| 213 | . set Option("CUR MODE")="GENERIC"
|
---|
| 214 | . set temp=$$Update50(gIEN50,.DrugInfo,.Option) ;"may chain forward
|
---|
| 215 | . if temp=1 set ChangeCt=ChangeCt+1
|
---|
| 216 | . else if temp=-1 set error=1 ;"quit
|
---|
| 217 | if error write "Error with import : IEN22706d9=",IEN22706d9,!
|
---|
| 218 |
|
---|
| 219 | if 'quiet do
|
---|
| 220 | . write ChangeCt," Records Modified.",!
|
---|
| 221 | . do PressToCont^TMGUSRIF
|
---|
| 222 |
|
---|
| 223 | do Unlock50^TMGNDFUT
|
---|
| 224 | quit
|
---|
| 225 |
|
---|
| 226 |
|
---|
| 227 | GetTMGDrugInfo(IEN22706d9,DrugInfo)
|
---|
| 228 | ;"Purpose: Create a very abbreviated version of the DrugInfo array
|
---|
| 229 | ;" This is because calling GetDrugInfo^TMGNDF1A is unneccesarily SLOW
|
---|
| 230 | ;" Also, it makes one dependant on FDA primary files.
|
---|
| 231 | ;"Input: IEN22706d9 -- IEN in file 22706.9
|
---|
| 232 | ;" DrugInfo -- PASS BY REFERENCE. Format:
|
---|
| 233 | ;" DrugInfo("NDC")
|
---|
| 234 | ;"Output: DrugInfo("NAME","TRADE")=.056 field
|
---|
| 235 | ;" DrugInfo("NAME","GENERIC")=.076 field
|
---|
| 236 | ;" DrugInfo("SOURCE IEN")=source IEN in 22706.9
|
---|
| 237 | ;" DrugInfo("IEN 50.68")=field 5.5, a pointer to 50.68 (VA PRODUCT)
|
---|
| 238 | ;"Results: 1=OK to continue, 0=error
|
---|
| 239 | ;"NOTE: 11/5/07 Modifying to make use of fields .055 and .075, where name is
|
---|
| 240 | ;" prepaired and stored in a previous step.
|
---|
| 241 | ;"NOTE: 11/10/07 Modifying to make use of fields .056 and .076, where name is
|
---|
| 242 | ;" prepaired and stored in a previous step.
|
---|
| 243 |
|
---|
| 244 | kill DrugInfo
|
---|
| 245 | new result set result=1
|
---|
| 246 | set DrugInfo("NDC")=$piece($get(^TMG(22706.9,IEN22706d9,1)),"^",1)
|
---|
| 247 | if DrugInfo("NDC")="" set result=0
|
---|
| 248 |
|
---|
| 249 | set DrugInfo("SOURCE IEN")=IEN22706d9
|
---|
| 250 | set DrugInfo("IEN 50.68")=+$piece($get(^TMG(22706.9,IEN22706d9,6)),"^",2)
|
---|
| 251 |
|
---|
| 252 | new tempS set tempS=$piece($get(^TMG(22706.9,IEN22706d9,8)),"^",1) ;".056 TRADENAME FORM DOSE UNIT - 40
|
---|
| 253 | if tempS'="" set DrugInfo("NAME","TRADE")=tempS
|
---|
| 254 |
|
---|
| 255 | new tempS set tempS=$piece($get(^TMG(22706.9,IEN22706d9,8)),"^",2) ;".076 GENERICNAME FORM DOSE UNT - 40
|
---|
| 256 | if tempS'="" set DrugInfo("NAME","GENERIC")=tempS
|
---|
| 257 |
|
---|
| 258 | GDIDone
|
---|
| 259 | quit result
|
---|
| 260 |
|
---|
| 261 |
|
---|
| 262 | Update50(IEN50,DrugInfo,Option)
|
---|
| 263 | ;"Purpose: to refresh info in DRUG file, or add if it doesn't exist (or delete if needed)
|
---|
| 264 | ;"Input: IEN50: Target IEN to refresh, or 0 if needs to be added
|
---|
| 265 | ;" DrugInfo -- PASS BY REFERENCE. Format:
|
---|
| 266 | ;" DrugInfo("NDC")
|
---|
| 267 | ;" DrugInfo("NAME","TRADE")=.056 field
|
---|
| 268 | ;" DrugInfo("NAME","GENERIC")=.076 field
|
---|
| 269 | ;" DrugInfo("SOURCE IEN")=source IEN in 22706.9
|
---|
| 270 | ;" DrugInfo("IEN 50.68")=field 5.5, a pointer to 50.68 (VA PRODUCT)
|
---|
| 271 | ;" Option -- NON-OPTIONAL part. Format:
|
---|
| 272 | ;" Option("CUR MODE")="TRADE"
|
---|
| 273 | ;" Option -- OPTIONAL part. Format:
|
---|
| 274 | ;" Option("FIX CHAIN")=1 <--- changes will be propigate forward
|
---|
| 275 | ;" to file 50, POI, OI, OQV etc.
|
---|
| 276 | ;" OPTION("FIX CHAIN","IEN22706d9")=Source IEN
|
---|
| 277 | ;" Option("QUIET")=1 <-- supress text output
|
---|
| 278 | ;" Option("DELETING")=1 <-- deleting chain (not IEN22706d9)
|
---|
| 279 | ;"Result: -1 = error, 0=info refreshed, 1=record added.
|
---|
| 280 |
|
---|
| 281 | new result set result=0
|
---|
| 282 | new quiet set quiet=$get(Option("QUIET"))=1
|
---|
| 283 | new IEN22706d9 set IEN22706d9=+$get(DrugInfo("SOURCE IEN"))
|
---|
| 284 | new mode set mode=$get(Option("CUR MODE"))
|
---|
| 285 | if (mode'="TRADE")&(mode'="GENERIC") set result=-1 goto UDDone
|
---|
| 286 |
|
---|
| 287 | new StoreField,node,pce
|
---|
| 288 | if mode="TRADE" set StoreField=5.6,node=7,pce=1
|
---|
| 289 | else set StoreField=5.7,node=7,pce=2
|
---|
| 290 |
|
---|
| 291 | new drugName set drugName=$get(DrugInfo("NAME",mode))
|
---|
| 292 | set DrugInfo("NAME",mode)=drugName
|
---|
| 293 | if (drugName="")!(drugName="<DUPLICATE>")!($get(Option("DELETING"))=1) do goto UDDone
|
---|
| 294 | . do Kill50^TMGNDFUT(IEN50,IEN22706d9,mode,quiet) ;"is OK if IEN50=0
|
---|
| 295 | . set result=-1
|
---|
| 296 |
|
---|
| 297 | if (IEN50>0),$data(^PSDRUG(IEN50))=0 do
|
---|
| 298 | . set IEN50=0 ;"I found case of dangling pointer
|
---|
| 299 |
|
---|
| 300 | if IEN50=0 do ;"Create stub entry with drug name in .01 field
|
---|
| 301 | . new PSSZ set PSSZ=1 ;"allows code to add entries into DRUG file.
|
---|
| 302 | . new TMGFDA,TMGMSG,TMGIEN,IENS
|
---|
| 303 | . set TMGFDA(50,"+1,",.01)=drugName
|
---|
| 304 | . do UPDATE^DIE("S","TMGFDA","TMGIEN","TMGMSG")
|
---|
| 305 | . do ShowDIERR^TMGDEBUG(.TMGMSG)
|
---|
| 306 | . set IEN50=+$get(TMGIEN(1)) if IEN50=0 quit
|
---|
| 307 | . do AddMsg(IEN50,"TMG AUTOADDED FROM FDA")
|
---|
| 308 | . set Option("IEN50",mode)=IEN50
|
---|
| 309 | . set Option("IEN50",mode,"NAME")=drugName
|
---|
| 310 |
|
---|
| 311 | set DrugInfo("CUR MODE")=mode
|
---|
| 312 | set temp=$$Stuff50(IEN50,.DrugInfo,.Option) ;"no chain forward
|
---|
| 313 | if temp=0 set result=-1
|
---|
| 314 | if temp=2 set result=1
|
---|
| 315 |
|
---|
| 316 | ;"Ensure pointer to DRUG (50) is stored in 22706.9
|
---|
| 317 | if $piece($get(^TMG(22706.9,IEN22706d9,node)),"^",pce)'=IEN50 do
|
---|
| 318 | . new TMGFDA,TMGMSG
|
---|
| 319 | . set TMGFDA(22706.9,IEN22706d9_",",StoreField)=IEN50
|
---|
| 320 | . do FILE^DIE("K","TMGFDA","TMGMSG")
|
---|
| 321 | . do ShowIfDIERR^TMGDEBUG(.TMGMSG)
|
---|
| 322 | . set Option("IEN50",mode)=IEN50
|
---|
| 323 |
|
---|
| 324 | if $get(Option("FIX CHAIN"))=1 do
|
---|
| 325 | . new temp set temp=$$POIFromTMG^TMGNDF4A(IEN22706d9,.Option) ;" --> more chain from here
|
---|
| 326 | . ;"if $get(Option("DELETING"))=1 do
|
---|
| 327 | . ;". do Kill50^TMGNDFUT(IEN50,IEN22706d9,mode,quiet) ;"is OK if IEN50=0
|
---|
| 328 |
|
---|
| 329 | UDDone
|
---|
| 330 | quit result
|
---|
| 331 |
|
---|
| 332 |
|
---|
| 333 | Stuff50(IEN50,DrugInfo,Option)
|
---|
| 334 | ;"Purpose: To synch record(s) in the DRUG file
|
---|
| 335 | ;"Input: IEN50 -- IEN of record in file 50 to update
|
---|
| 336 | ;" DrugInfo -- PASS BY REFERENCE -- Drug info array. Format:
|
---|
| 337 | ;" DrugInfo("NAME","GENERIC")=e.g. NAME: DILTIAZEM 240MG
|
---|
| 338 | ;" DrugInfo("NAME","TRADE")=e.g. NAME: CARDIZEM CD 240MG
|
---|
| 339 | ;" DrugInfo("NDC")
|
---|
| 340 | ;" DrugInfo("SOURCE IEN")=source IEN in 22706.9
|
---|
| 341 | ;" DrugInfo("IEN 50.68")=field 5.5, a pointer to 50.68 (VA PRODUCT)
|
---|
| 342 | ;" Option -- NON-OPTIONAL part. Format:
|
---|
| 343 | ;" Option("CUR MODE")="TRADE"
|
---|
| 344 | ;" Option -- OPTIONAL. Format:
|
---|
| 345 | ;" Option("FIX CHAIN")=1 <--- changes will be propigate forward
|
---|
| 346 | ;" to file 50, POI, OI, OQV etc.
|
---|
| 347 | ;" OPTION("FIX CHAIN","IEN22706d9")=Source IEN
|
---|
| 348 | ;" Option("QUIET")=1 <-- supress text output
|
---|
| 349 | ;"Output: A record will be added to file DRUG (50)
|
---|
| 350 | ;"Result: 1=OK to continue, 2=change made, 0 if error
|
---|
| 351 |
|
---|
| 352 | ;"Note: must set PSSZ=1 to be allowed to enter entries into DRUG file.
|
---|
| 353 |
|
---|
| 354 | new result set result=1 ;"default to success -- don't change.
|
---|
| 355 | new PSSZ set PSSZ=1 ;"allows code to add entries into DRUG file.
|
---|
| 356 |
|
---|
| 357 | ;"Remove any synonyms
|
---|
| 358 | RF1 new numSyns
|
---|
| 359 | for do quit:(numSyns'>0)
|
---|
| 360 | . set numSyns=+$piece($get(^PSDRUG(IEN50,1,0)),"^",4) ;"number of records
|
---|
| 361 | . if numSyns=0 quit
|
---|
| 362 | RF2 . set subIEN=$order(^PSDRUG(IEN50,1,0))
|
---|
| 363 | . if (subIEN'>0) set numSyns=0 quit
|
---|
| 364 | . new TMGFDA,TMGMSG
|
---|
| 365 | . set TMGFDA(50.1,subIEN_","_IEN50_",",.01)="@"
|
---|
| 366 | . do FILE^DIE("K","TMGFDA","TMGMSG")
|
---|
| 367 | . do ShowIfDIERR^TMGDEBUG(.TMGMSG)
|
---|
| 368 | . set result=2
|
---|
| 369 |
|
---|
| 370 | new TMGFDA,TMGMSG,TMGIEN
|
---|
| 371 |
|
---|
| 372 | set result=$$SetupFDA(.DrugInfo,IEN50_",",.TMGFDA)
|
---|
| 373 | if result=0 goto RFDone
|
---|
| 374 | new temp set temp=$$TrimFDA^TMGDBAPI(.TMGFDA)
|
---|
| 375 | if $data(TMGFDA)=0 goto RFDone
|
---|
| 376 |
|
---|
| 377 | do FILE^DIE("KS","TMGFDA","TMGMSG")
|
---|
| 378 | if $data(TMGMSG("DIERR")) do goto RFDone
|
---|
| 379 | . set result=0
|
---|
| 380 | . if $get(Quiet)=1 quit
|
---|
| 381 | . write !,"Error editing record in file 50",!
|
---|
| 382 | . new PriorErrorFound
|
---|
| 383 | . do ShowDIERR^TMGDEBUG(.TMGMSG,.PriorErrorFound)
|
---|
| 384 |
|
---|
| 385 | do AddMsg(IEN50,"TMG AUTO UPDATED FROM FDA")
|
---|
| 386 | set result=2 ;"update made.
|
---|
| 387 |
|
---|
| 388 | RFDone quit result
|
---|
| 389 |
|
---|
| 390 |
|
---|
| 391 | AddMsg(IEN50,Msg)
|
---|
| 392 | ;"Purpose: to Add a message in the Activity log field
|
---|
| 393 | ;"Input: IEN50 -- the IEN in DRUG file
|
---|
| 394 | ;" Msg -- the Message to add (a string)
|
---|
| 395 | ;"results: none.
|
---|
| 396 |
|
---|
| 397 | ;"Check that record was added, then then add subfile entries:
|
---|
| 398 | set IENS="+1,"_IEN50_","
|
---|
| 399 | kill TMGFDA,TMGMSG,TMGIEN
|
---|
| 400 | ;" 214 ACTIVITY LOG <-Mult [50.0214DA]
|
---|
| 401 | ;" .01 -ACTIVITY LOG [D]
|
---|
| 402 | ;" 1 -REASON [S]
|
---|
| 403 | ;" 2 -INITIATOR OF ACTIVITY <-Pntr [P200']
|
---|
| 404 | ;" 3 -FIELD EDITED [F]
|
---|
| 405 | ;" 4 -NEW VALUE [F]
|
---|
| 406 | ;" 5 -NDF UPDATE [F]
|
---|
| 407 | set TMGFDA(50.0214,IENS,.01)="NOW"
|
---|
| 408 | set TMGFDA(50.0214,IENS,1)="E"
|
---|
| 409 | set TMGFDA(50.0214,IENS,2)="`"_DUZ
|
---|
| 410 | set TMGFDA(50.0214,IENS,3)="ALL FIELDS"
|
---|
| 411 | set TMGFDA(50.0214,IENS,4)=Msg
|
---|
| 412 |
|
---|
| 413 | do UPDATE^DIE("ES","TMGFDA","TMGIEN","TMGMSG")
|
---|
| 414 | if $get(Quiet)'=1 do ShowIfDIERR^TMGDEBUG(.TMGMSG)
|
---|
| 415 |
|
---|
| 416 | quit
|
---|
| 417 |
|
---|
| 418 |
|
---|
| 419 | SetupFDA(DrugInfo,IENS,TMGFDA)
|
---|
| 420 | ;"Purpose: To set up the FDA (Filman data array) for the data that will go into
|
---|
| 421 | ;" a record to the DRUG file, based on entry from VA PRODUCT file
|
---|
| 422 | ;"Input: DrugInfo -- PASS BY REFERENCE -- Drug info from array GetTMGDrugInfo, and
|
---|
| 423 | ;" as modified by Add2VAProd^TMGNDF3A
|
---|
| 424 | ;" Fields used are:
|
---|
| 425 | ;" DrugInfo("CUR MODE")="GENERIC" or "TRADE"
|
---|
| 426 | ;" DrugInfo("NAME","GENERIC")=e.g. NAME: DILTIAZEM 240MG
|
---|
| 427 | ;" DrugInfo("NAME","TRADE")=e.g. NAME: CARDIZEM CD 240MG
|
---|
| 428 | ;" DrugInfo("NDC")
|
---|
| 429 | ;" DrugInfo("SOURCE IEN")=source IEN in 22706.9
|
---|
| 430 | ;" DrugInfo("IEN 50.68")=field 5.5, a pointer to 50.68 (VA PRODUCT)
|
---|
| 431 | ;" IENS -- a standard fileman IENS for this FDA to be created with
|
---|
| 432 | ;" TMGFDA -- PASS BY REFERENCE -- an OUT PARAMETER. This will be a standard
|
---|
| 433 | ;" fileman FDA
|
---|
| 434 | ;"Output: TMGFDA will be filled
|
---|
| 435 | ;"Result: 1=OK to continue, 0 if error
|
---|
| 436 |
|
---|
| 437 | ;"NOTE: The FDA that this function contains will contain INTERNAL values
|
---|
| 438 |
|
---|
| 439 | new result set result=1 ;"default to success -- don't change.
|
---|
| 440 | new mode set mode=$get(DrugInfo("CUR MODE"))
|
---|
| 441 | if (mode'="TRADE")&(mode'="GENERIC") set result=0 goto SUFDone
|
---|
| 442 |
|
---|
| 443 | new TMGMSG,TMGIEN
|
---|
| 444 | new tempS,tempIEN
|
---|
| 445 | new IEN22706d9 set IEN22706d9=+$get(DrugInfo("SOURCE IEN"))
|
---|
| 446 |
|
---|
| 447 | ;"Example Entry. (Edited for fields I care about)
|
---|
| 448 | ;"#50 .01 GENERIC NAME: DILTIAZEM CD 120MG CAP
|
---|
| 449 | ;"#50.68 .01 NAME [RFa]
|
---|
| 450 | ;"#50.68 e.g. NAME: DILTIAZEM (CARDIZEM CD) 240MG SA CAP
|
---|
| 451 | set tempS=$get(DrugInfo("NAME",mode))
|
---|
| 452 | set tempS=$translate(tempS,";",":") ;" for some reason ';' is not allowed in .01 field
|
---|
| 453 | if $length(tempS)>40 set tempS=$extract(tempS,1,37)_"..."
|
---|
| 454 | set TMGFDA(50,IENS,.01)=tempS
|
---|
| 455 |
|
---|
| 456 | ;"#50 22 PSNDF VA PRODUCT NAME ENTRY: DILTIAZEM (CARDIZEM CD) 120MG SA CAP
|
---|
| 457 | ;"#50.68 .01 NAME [RFa]
|
---|
| 458 | ;"#50.68 e.g. NAME: DILTIAZEM (CARDIZEM CD) 240MG SA CAP
|
---|
| 459 | new vapIEN set vapIEN=+$get(DrugInfo("IEN 50.68"))
|
---|
| 460 | if +vapIEN>0 DO
|
---|
| 461 | . set TMGFDA(50,IENS,22)=vapIEN
|
---|
| 462 | . new vapName
|
---|
| 463 | . set vapName=$$GET1^DIQ(50.68,vapIEN,.01)
|
---|
| 464 | . ;"#50 21 VA PRODUCT NAME: DILTIAZEM (CARDIZEM CD) 120MG SA CAP
|
---|
| 465 | . ;"#50.68 .01 NAME [RFa]
|
---|
| 466 | . ;"#50.68 e.g. NAME: DILTIAZEM (CARDIZEM CD) 240MG SA CAP
|
---|
| 467 | . set TMGFDA(50,IENS,21)=vapName
|
---|
| 468 | . ;"set TMGFDA(50,IENS,21)=tempS
|
---|
| 469 |
|
---|
| 470 | ;"#50 5 STANDARD SIG: T1 CAP QD
|
---|
| 471 | ;" plan "USE AS DIRECTED"
|
---|
| 472 | set TMGFDA(50,IENS,5)="USE AS DIRECTED"
|
---|
| 473 |
|
---|
| 474 | ;"#50 20 NATIONAL DRUG FILE ENTRY: DILTIAZEM <-Pntr [P50.6, VA GENERIC]
|
---|
| 475 | set tempIEN=+$piece($get(^TMG(22706.9,IEN22706d9,1)),"^",3) ;"1;3 = field .08 VA GENERIC
|
---|
| 476 | if tempIEN>0 set TMGFDA(50,IENS,20)=tempIEN
|
---|
| 477 |
|
---|
| 478 | ;"#50 25 NATIONAL DRUG CLASS <-Pntr [P50.605']
|
---|
| 479 | ;"#50 2 VA CLASSIFICATION [FX]
|
---|
| 480 | set tempIEN=+$piece($get(^TMG(22706.9,IEN22706d9,1)),"^",5) ;"1;5 = field .09 VA DRUG CLASS
|
---|
| 481 | set TMGFDA(50,IENS,25)=tempIEN
|
---|
| 482 | set tempClass=$$GET1^DIQ(50.605,tempIEN_",",.01)
|
---|
| 483 | if tempClass'="" set TMGFDA(50,IENS,2)=tempClass
|
---|
| 484 |
|
---|
| 485 | ;"#50 29 NATIONAL FORMULARY INDICATOR: NO
|
---|
| 486 | set TMGFDA(50,IENS,29)=0 ;"0=NO, 1=YES
|
---|
| 487 |
|
---|
| 488 | ;"#50 31 NDC: 0088-1795-30
|
---|
| 489 | new NDC set NDC=$piece($get(^TMG(22706.9,IEN22706d9,1)),"^",1)
|
---|
| 490 | set NDC=$extract(NDC,2,20) ;"should be in 5-4-2 format, but must be 11 digits, 1st is not significant
|
---|
| 491 | if NDC'="" set TMGFDA(50,IENS,31)=NDC
|
---|
| 492 |
|
---|
| 493 | ;"#50 901 STRENGTH: 120
|
---|
| 494 | new tempStr set tempStr=$piece($get(^TMG(22706.9,IEN22706d9,0)),"^",2) ;"0;2=field 1 STRENGTH
|
---|
| 495 | if tempStr'="" set TMGFDA(50,IENS,901)=tempStr
|
---|
| 496 |
|
---|
| 497 | ;"#50 902 UNIT: MG
|
---|
| 498 | ;"#50.68 3 UNITS <-Pntr [P50.607'a]
|
---|
| 499 | ;"#50.68 e.g. UNITS: MG
|
---|
| 500 | new tempUnit set tempUnit=$$GET1^DIQ(50.68,vapIEN,3,"I")
|
---|
| 501 | if tempUnit'="" set TMGFDA(50,IENS,902)=tempUnit
|
---|
| 502 |
|
---|
| 503 | ;"#50 62.02 UNIT DOSE MED ROUTE <-Pntr [*P51.2']
|
---|
| 504 | ;"#22706.9 3.1 VA ROUTE <-Pntr [P51.2']
|
---|
| 505 | set tempIEN=+$piece($get(^TMG(22706.9,IEN22706d9,7)),"^",7) ;"7;7 3.1 VA ROUTE
|
---|
| 506 | if tempIEN>0 set TMGFDA(50,IENS,62.02)=tempIEN
|
---|
| 507 |
|
---|
| 508 | SUFDone
|
---|
| 509 | quit result
|
---|
| 510 |
|
---|
| 511 |
|
---|
| 512 | VerifySync
|
---|
| 513 | ;"To verify the synchronization, i.e. looking for dangling pointers etc.
|
---|
| 514 |
|
---|
| 515 | new ChangeCt set ChangeCt=0
|
---|
| 516 | new Itr,IEN22706d9
|
---|
| 517 | new abort set abort=0
|
---|
| 518 | write !,"Checking Synchronization",!
|
---|
| 519 | set IEN22706d9=$$ItrInit^TMGITR(22706.9,.Itr)
|
---|
| 520 | do PrepProgress^TMGITR(.Itr,20,0,"IEN22706d9")
|
---|
| 521 | if IEN22706d9'="" for do quit:($$ItrNext^TMGITR(.Itr,.IEN22706d9)'>0)!abort
|
---|
| 522 | . if $$UserAborted^TMGUSRIF set abort=1 quit
|
---|
| 523 | . ;"if +$piece($get(^TMG(22706.9,IEN22706d9,1)),"^",4)=1 quit ;"1=SKIP
|
---|
| 524 | . new tIEN50 set tIEN50=$piece($get(^TMG(22706.9,IEN22706d9,7)),"^",1)
|
---|
| 525 | . set ChangeCt=ChangeCt+$$Verify1(IEN22706d9,tIEN50,"TRADE")
|
---|
| 526 | . new gIEN50 set gIEN50=$piece($get(^TMG(22706.9,IEN22706d9,7)),"^",2)
|
---|
| 527 | . set ChangeCt=ChangeCt+$$Verify1(IEN22706d9,gIEN50,"GENERIC")
|
---|
| 528 | do ProgressDone^TMGITR(.Itr)
|
---|
| 529 |
|
---|
| 530 | do PressToCont^TMGUSRIF
|
---|
| 531 |
|
---|
| 532 | quit
|
---|
| 533 |
|
---|
| 534 | Verify1(IEN22706d9,IEN50,mode)
|
---|
| 535 | ;"To Verify one
|
---|
| 536 | ;"Input: IEN22706d9
|
---|
| 537 | ;" IEN50 -- link to DRUG file (either for Generic Drug, or Trade Drug)
|
---|
| 538 | ;" mode - "GENERIC" or "TRADE"
|
---|
| 539 | ;"Result: 0 -- no change, 1= change made
|
---|
| 540 |
|
---|
| 541 | new result set result=0
|
---|
| 542 | new field50 set field50=""
|
---|
| 543 | new fieldName set fieldName=""
|
---|
| 544 | new node,pce set (node,pce)=""
|
---|
| 545 | if mode="GENERIC" do
|
---|
| 546 | . set field50=5.7
|
---|
| 547 | . set fieldName=.076
|
---|
| 548 | . set node=8,pce=2
|
---|
| 549 | else if mode="TRADE" do
|
---|
| 550 | . set field50=5.6
|
---|
| 551 | . set fieldName=.056
|
---|
| 552 | . set node=8,pce=1
|
---|
| 553 | if (field50="") goto V1Done
|
---|
| 554 | if (IEN50="") goto V1Done
|
---|
| 555 |
|
---|
| 556 | new drugName set drugName=$piece($get(^PSDRUG(IEN50,0)),"^",1)
|
---|
| 557 | new TMGName set TMGName=$piece($get(^TMG(22706.9,IEN22706d9,node)),"^",pce)
|
---|
| 558 | set TMGName=$translate(TMGName,";",":")
|
---|
| 559 |
|
---|
| 560 | if $data(^PSDRUG(+$get(IEN50)))=0 do
|
---|
| 561 | . write "Bad pointer: ",IEN50
|
---|
| 562 | . set IEN50=0
|
---|
| 563 |
|
---|
| 564 | if drugName'=TMGName do
|
---|
| 565 | . write IEN22706d9," (",$extract(mode,1),"): Name mismatch: ",drugName," vs ",TMGName,!
|
---|
| 566 | . if TMGName="" set IEN50=0
|
---|
| 567 |
|
---|
| 568 | if $get(IEN50)=0 do goto V1Done
|
---|
| 569 | . new TMGFDA,TMGMSG
|
---|
| 570 | . set TMGFDA(22706.9,IEN22706d9_",",field50)="@"
|
---|
| 571 | . do UPDATE^DIE("","TMGFDA","TMGMSG")
|
---|
| 572 | . do ShowIfDIERR^TMGDEBUG(.TMGMSG)
|
---|
| 573 | . write " ... fixed.",!
|
---|
| 574 | . set result=1
|
---|
| 575 |
|
---|
| 576 |
|
---|
| 577 | V1Done
|
---|
| 578 | quit result
|
---|