| 1 | TMGNDF4A ;TMG/kst/FDA Import: Create POI's from DRUGs ;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.7 (PHARMACY ORDERABLE ITEM file)
 | 
|---|
| 6 |  ;"      from all records stored in file 50 (DRUG file)
 | 
|---|
| 7 |  ;"Kevin Toppenberg MD
 | 
|---|
| 8 |  ;"GNU General Public License (GPL) applies
 | 
|---|
| 9 |  ;"11-21-2006
 | 
|---|
| 10 |  
 | 
|---|
| 11 |  ;"=======================================================================
 | 
|---|
| 12 |  ;" API -- Public Functions.
 | 
|---|
| 13 |  ;"=======================================================================
 | 
|---|
| 14 |  ;"Menu
 | 
|---|
| 15 |  
 | 
|---|
| 16 |  ;"=======================================================================
 | 
|---|
| 17 |  ;" Private Functions.
 | 
|---|
| 18 |  ;"=======================================================================
 | 
|---|
| 19 |  ;"InactivatePOIs -- inactivate all POI (entries in PHARMACY ORDERABLE ITEMS)
 | 
|---|
| 20 |  ;"ActivatePOI(IEN50d7) -- remove the inactivation date that is automatically added
 | 
|---|
| 21 |  ;"HandlePOIErr -- error handler for ActivatePOI
 | 
|---|
| 22 |  
 | 
|---|
| 23 |  ;"SyncAllTMG -- Add all relevent TMG entries into POI
 | 
|---|
| 24 |  ;"AddFromTMG(IEN) -- Add/Update ONE entry in POI file
 | 
|---|
| 25 |  ;"Do1POI(DrugNAF,IEN50,IEN50d606,IEN51d2) -- add/refresh one POI entry.
 | 
|---|
| 26 |  
 | 
|---|
| 27 |  ;"=============================================================================
 | 
|---|
| 28 |  ;"=============================================================================
 | 
|---|
| 29 |  
 | 
|---|
| 30 | Menu
 | 
|---|
| 31 |         new Menu,UsrSlct
 | 
|---|
| 32 |         set Menu(0)="Pick Option to Sync to PHARMACY ORDERABLE ITEMS (4A)"
 | 
|---|
| 33 |         set Menu(1)="Sync Non-Skipped Imports to PHARMACY ORDERABLE ITEMS."_$char(9)_"SyncDRUGs"
 | 
|---|
| 34 |         ;"set Menu(2)="Activate all PHARMACY ORDERABLE ITEMS (do after syncing)"_$char(9)_"ActivateAll"
 | 
|---|
| 35 |         set Menu(3)="Kill all previous PHARMACY ORDERABLE ITEMS (only if needed!)"_$char(9)_"KillAll"
 | 
|---|
| 36 |         set Menu("P")="Prev Stage"_$char(9)_"Prev"
 | 
|---|
| 37 |         set Menu("N")="Next Stage"_$char(9)_"Next"
 | 
|---|
| 38 |  
 | 
|---|
| 39 | M1      write #
 | 
|---|
| 40 |         set UsrSlct=$$Menu^TMGUSRIF(.Menu,"^")
 | 
|---|
| 41 |  
 | 
|---|
| 42 |         if UsrSlct="SyncDRUGs" do SyncAllTMG goto M1
 | 
|---|
| 43 |         ;"if UsrSlct="ActivateAll" do ActivAll goto M1
 | 
|---|
| 44 |         if UsrSlct="KillAll" do KillPOIs goto M1
 | 
|---|
| 45 |         if UsrSlct="Prev" goto Menu^TMGNDF3E  ;"quit can occur from there...
 | 
|---|
| 46 |         if UsrSlct="Next" goto Menu^TMGNDF4B  ;"quit can occur from there...
 | 
|---|
| 47 |         if UsrSlct="^" goto MenuDone
 | 
|---|
| 48 |         goto M1
 | 
|---|
| 49 |  
 | 
|---|
| 50 | MenuDone
 | 
|---|
| 51 |         quit
 | 
|---|
| 52 |  
 | 
|---|
| 53 |  
 | 
|---|
| 54 |  ;"=============================================================================
 | 
|---|
| 55 |  ;"File 50.7 (PHARMACY ORDERABLE ITEM):
 | 
|---|
| 56 |  ;"
 | 
|---|
| 57 |  ;" **A record in 50.7 should be created first.
 | 
|---|
| 58 |  ;" .01 field should be the generic name of the drug.
 | 
|---|
| 59 |  ;" When the record is created, an entry in fle 101.43 (ORDERABLE ITEM) will automatically be made.
 | 
|---|
| 60 |  ;" Also, a record in in ORDER QUICK VIEW will also be created (but it is incomplete--see below.)
 | 
|---|
| 61 |  ;" Note: new drugs may not be added unless PSEDITNM>0.  So to setup a drug in fileman,
 | 
|---|
| 62 |  ;"       set PSEDITNM=1 from the command-line, then DO D^DI to get into Fileman with vars intact.
 | 
|---|
| 63 |  ;" In the MED ROUTE field, the input transform does not allow an input of "ORAL".  (If left
 | 
|---|
| 64 |  ;" blank ORAL will be shown in CPRS)
 | 
|---|
| 65 |  ;" This file can hold the synonyms of a drug etc.
 | 
|---|
| 66 |  ;" When this record is created, for some reason it is automatically given the current
 | 
|---|
| 67 |  ;"   date in the INACTIVE DAT
 | 
|---|
| 68 |         ;"Purpose: to Ask E field--meaning it is created in an inactive state.  One must
 | 
|---|
| 69 |  ;"   go back and edit the record a second time to remove the entry from this field.
 | 
|---|
| 70 |  ;" File 101.43 (ORDERABLE ITEM), field ID holds a text pointer to this file, e.g.
 | 
|---|
| 71 |  ;" '10;99PSP' <---- 10 is IEN in file #50.7
 | 
|---|
| 72 |  ;" There is no pointer field from file 50.7 up to file 50.  The link is FROM file #50
 | 
|---|
| 73 |  ;" TO #50.7 (via file #50's field 2.1(PHARMACY ORDERABLE ITEM)).  HOWEVER, File #50.7's
 | 
|---|
| 74 |  ;" "ASP" cross-reference for the field "PHARMACY ORDERABLE ITEM (#2.1) i.e.
 | 
|---|
| 75 |  ;" ^PSDRUG("ASP",+ID,*), contains list of linked records in file #50
 | 
|---|
| 76 |  
 | 
|---|
| 77 |  ;"=================================================================
 | 
|---|
| 78 |  
 | 
|---|
| 79 | SyncAllTMG
 | 
|---|
| 80 |         ;"Purpose: Sync/Add all relevent TMG entries into POI
 | 
|---|
| 81 |         ;"Input:none
 | 
|---|
| 82 |         ;"results: none
 | 
|---|
| 83 |  
 | 
|---|
| 84 |         new IEN,Itr
 | 
|---|
| 85 |         new abort set abort=0
 | 
|---|
| 86 |         new result set result=0
 | 
|---|
| 87 |         new repeatNeeded set repeatNeeded=0
 | 
|---|
| 88 |  
 | 
|---|
| 89 | SATL1   set IEN=$$ItrInit^TMGITR(22706.9,.Itr)
 | 
|---|
| 90 |         do PrepProgress^TMGITR(.Itr,20,0,"IEN")
 | 
|---|
| 91 |         if IEN'="" for  do  quit:($$ItrNext^TMGITR(.Itr,.IEN)'>0)!(abort=1)
 | 
|---|
| 92 |         . if $$UserAborted^TMGUSRIF set abort=1 quit
 | 
|---|
| 93 |         . new Option
 | 
|---|
| 94 |         . set Option("CUR MODE")="TRADE"
 | 
|---|
| 95 |         . set result=$$POIFromTMG(IEN,.Option)  ;"screen for skip will occur in function
 | 
|---|
| 96 |         . if result=-1 set repeatNeeded=1
 | 
|---|
| 97 |         . set Option("CUR MODE")="GENERIC"
 | 
|---|
| 98 |         . set result=$$POIFromTMG(IEN,.Option)  ;"screen for skip will occur in function
 | 
|---|
| 99 |         . if result=-1 set repeatNeeded=1
 | 
|---|
| 100 |  
 | 
|---|
| 101 |         new % set %=2
 | 
|---|
| 102 |         if repeatNeeded do
 | 
|---|
| 103 |         . write !,"Error found and repeat scan needed.",!
 | 
|---|
| 104 |         . write "Repeat scan now" do YN^DICN write !
 | 
|---|
| 105 |         else  do
 | 
|---|
| 106 |         . write !
 | 
|---|
| 107 |         . do PressToCont^TMGUSRIF
 | 
|---|
| 108 |         if %=1 goto SATL1
 | 
|---|
| 109 |  
 | 
|---|
| 110 |         quit
 | 
|---|
| 111 |  
 | 
|---|
| 112 |  
 | 
|---|
| 113 | POIFromTMG(IEN22706d9,Option)
 | 
|---|
| 114 |         ;"Purpose: to Add/Update/(or delete) ONE entry in POI (50.7) file
 | 
|---|
| 115 |         ;"Input:  IEN22706d9 -- IEN in 22706.9
 | 
|---|
| 116 |         ;"       Option -- NON-OPTIONAL part. Format:
 | 
|---|
| 117 |         ;"                  Option("CUR MODE")="TRADE" or "GENERIC"
 | 
|---|
| 118 |         ;"        Option -- OPTIONAL. Format:
 | 
|---|
| 119 |         ;"                  Option("FIX CHAIN")=1  <--- changes will be propigate forward
 | 
|---|
| 120 |         ;"                   to file POI, OI, OQV etc.
 | 
|---|
| 121 |         ;"                  OPTION("FIX CHAIN","IEN22706d9")=Source IEN
 | 
|---|
| 122 |         ;"                  Option("IEN50","TRADE")=IEN50 for Trade Name
 | 
|---|
| 123 |         ;"                  Option("IEN50","GENERIC")=IEN50 for Generic Name
 | 
|---|
| 124 |         ;"                  Option("CUR MODE")="TRADE" or "GENERIC"
 | 
|---|
| 125 |         ;"                  Option("QUIET")=1 <-- supress text output
 | 
|---|
| 126 |         ;"                  Option("DELETING")=1 <-- deleting chain (not IEN22706d9)
 | 
|---|
| 127 |  
 | 
|---|
| 128 |         ;"NOTE: This function does DOES screen for skipped entries, and skips
 | 
|---|
| 129 |         ;"      proccessing. BUT, if Deleting, then it is NOT skipped
 | 
|---|
| 130 |         ;"Output: POI records will be added or refreshed (or deleted)
 | 
|---|
| 131 |         ;"Result: 1=OK, 0=Error, -1 process repeat requested
 | 
|---|
| 132 |  
 | 
|---|
| 133 |         new result set result=1
 | 
|---|
| 134 |         new repeatNeeded set repeatNeeded=0
 | 
|---|
| 135 |         new TMGA,TMGMSG
 | 
|---|
| 136 |         new IEN50d606,IEN51d2,IEN50d7
 | 
|---|
| 137 |  
 | 
|---|
| 138 |         if $get(Option("DELETING"))'=1,$piece($get(^TMG(22706.9,IEN22706d9,1)),"^",4)=1 goto AFTMGDone  ;"1=SKIP
 | 
|---|
| 139 |         if +$get(IEN22706d9)=0 goto AFTMGDone
 | 
|---|
| 140 |  
 | 
|---|
| 141 |         new mode set mode=$get(Option("CUR MODE"))
 | 
|---|
| 142 |         if mode="" set result=0 goto AFTMGDone
 | 
|---|
| 143 |         new field,node,pce
 | 
|---|
| 144 |         if mode="GENERIC" set field=5.71,node=8,pce=4  ;"5.71= POI ptr Generic
 | 
|---|
| 145 |         else  if mode="TRADE" set field=5.61,node=8,pce=3  ;"5.61 = POI ptr Trade
 | 
|---|
| 146 |  
 | 
|---|
| 147 |         do LoadOption^TMGNDF4C(IEN22706d9,.Option)
 | 
|---|
| 148 |  
 | 
|---|
| 149 |         set IEN50d606=$piece($get(^TMG(22706.9,IEN22706d9,0)),"^",7)
 | 
|---|
| 150 |         set IEN51d2=$piece($get(^TMG(22706.9,IEN22706d9,7)),"^",7)
 | 
|---|
| 151 |         new IEN50 set IEN50=+$get(Option("IEN50",mode))
 | 
|---|
| 152 |         if IEN50=0 set result=0 goto AFTM2
 | 
|---|
| 153 |  
 | 
|---|
| 154 |         new DrugNAF set DrugNAF=$get(Option("DRUG NAME AND FORM",mode))
 | 
|---|
| 155 |         if (DrugNAF="<DUPLICATE>")!(DrugNAF="") goto AFTM2  ;"skip these...
 | 
|---|
| 156 |  
 | 
|---|
| 157 |         set IEN50d7=+$get(Option("IEN50.7",mode))
 | 
|---|
| 158 |  
 | 
|---|
| 159 |         if $get(Option("DELETING"))=1 do  goto AFTMGDone
 | 
|---|
| 160 |         . do KillPOI^TMGNDFUT(IEN50d7)
 | 
|---|
| 161 |         . set Option("IEN50.7",mode)=""
 | 
|---|
| 162 |  
 | 
|---|
| 163 |         if IEN50d7=0 set IEN50d7=$$FindPOI^TMGNDFUT(DrugNAF)
 | 
|---|
| 164 |         if IEN50d7=0 do  if IEN50d7=0 set result=0 goto AFTM2
 | 
|---|
| 165 |         . new TMGFDA,TMGIEN,TMGMSG
 | 
|---|
| 166 |         . new PSEDITNM set PSEDITNM=1 ;"a key to allow editing data
 | 
|---|
| 167 |         . set TMGFDA(50.7,"+1,",.01)=DrugNAF
 | 
|---|
| 168 |         . set TMGFDA(50.7,"+1,",.02)=IEN50d606
 | 
|---|
| 169 |         . set TMGFDA(50.7,"+1,",.06)=IEN51d2
 | 
|---|
| 170 |         . set TMGFDA(50.7,"+1,",.07)="R"
 | 
|---|
| 171 |         . do UPDATE^DIE("","TMGFDA","TMGIEN","TMGMSG")
 | 
|---|
| 172 |         . if $data(TMGMSG("DIERR")) do
 | 
|---|
| 173 |         . . set result=0
 | 
|---|
| 174 |         . . do ShowIfDIERR^TMGDEBUG(.TMGMSG)
 | 
|---|
| 175 |         . else  set IEN50d7=+$get(TMGIEN(1))
 | 
|---|
| 176 |         else  do
 | 
|---|
| 177 |         . new TMGFDA,TMGIEN,TMGMSG
 | 
|---|
| 178 |         . new PSEDITNM set PSEDITNM=1 ;"a key to allow editing data
 | 
|---|
| 179 |         . set TMGFDA(50.7,IEN50d7_",",.01)=DrugNAF
 | 
|---|
| 180 |         . set TMGFDA(50.7,IEN50d7_",",.02)=IEN50d606
 | 
|---|
| 181 |         . set TMGFDA(50.7,IEN50d7_",",.06)=IEN51d2
 | 
|---|
| 182 |         . set TMGFDA(50.7,IEN50d7_",",.07)="R"
 | 
|---|
| 183 |         . new temp set temp=$$TrimFDA^TMGDBAPI(.TMGFDA)
 | 
|---|
| 184 |         . if $data(TMGFDA)=0 quit
 | 
|---|
| 185 |         . do FILE^DIE("S","TMGFDA","TMGMSG")
 | 
|---|
| 186 |         . if $data(TMGMSG("DIERR")) do
 | 
|---|
| 187 |         . . set result=0
 | 
|---|
| 188 |         . . do ShowIfDIERR^TMGDEBUG(.TMGMSG)
 | 
|---|
| 189 |         . . if $get(TMGMSG("DIERR",1))=601 do  ;"601 --> [record doesn't exist]
 | 
|---|
| 190 |         . . . write "Dangling pointer found & removed.  ** RUN ENTIRE PROCESS AGAIN **",!
 | 
|---|
| 191 |         . . . set IEN50d7=0
 | 
|---|
| 192 |         . . . new TMGFDA,TMGMSG
 | 
|---|
| 193 |         . . . set TMGFDA(22706.9,IEN22706d9_",",field)="@"
 | 
|---|
| 194 |         . . . do FILE^DIE("S","TMGFDA","TMGMSG")
 | 
|---|
| 195 |         . . . do ShowIfDIERR^TMGDEBUG(.TMGMSG)
 | 
|---|
| 196 |         . . . kill TMGFDA,TMGMSG
 | 
|---|
| 197 |         . . . set TMGFDA(50,IEN50_",",2.1)="@"
 | 
|---|
| 198 |         . . . do FILE^DIE("S","TMGFDA","TMGMSG")
 | 
|---|
| 199 |         . . . set repeatNeeded=1
 | 
|---|
| 200 |         . . . set result=-1
 | 
|---|
| 201 |         . . . if $data(TMGMSG("DIERR")) do
 | 
|---|
| 202 |         . . . . if $data(TMGMSG("DIERR","E",120))>0 set result="" quit  ;"ignore error if #120 (hook) present.
 | 
|---|
| 203 |         . . . . do ShowIfDIERR^TMGDEBUG(.TMGMSG)
 | 
|---|
| 204 |  
 | 
|---|
| 205 |         set Option("IEN50.7",mode)=IEN50d7
 | 
|---|
| 206 |  
 | 
|---|
| 207 |         ;"Ensure pointer to POI stored in TMG IMPORT COMPILED
 | 
|---|
| 208 |         if +$piece($get(^TMG(22706.9,IEN22706d9,node)),"^",pce)'=IEN50d7 do
 | 
|---|
| 209 |         . new TMGFDA,TMGMSG
 | 
|---|
| 210 |         . set TMGFDA(22706.9,IEN22706d9_",",field)=IEN50d7
 | 
|---|
| 211 |         . do FILE^DIE("","TMGFDA","TMGMSG")
 | 
|---|
| 212 |         . do ShowIfDIERR^TMGDEBUG(.TMGMSG)
 | 
|---|
| 213 |         . set Option("IEN50.7",mode)=IEN50d7
 | 
|---|
| 214 |  
 | 
|---|
| 215 |         ;"Ensure pointer to POI stored in DRUG file, field 2.1
 | 
|---|
| 216 |         if +$piece($get(^PSDRUG(IEN50,2)),"^",1)'=IEN50d7 do
 | 
|---|
| 217 |         . new TMGFDA,TMGMSG
 | 
|---|
| 218 |         . set TMGFDA(50,IEN50_",",2.1)=IEN50d7
 | 
|---|
| 219 |         . do FILE^DIE("S","TMGFDA","TMGMSG")
 | 
|---|
| 220 |         . set result=0
 | 
|---|
| 221 |         . if $data(TMGMSG("DIERR")) do
 | 
|---|
| 222 |         . . if $data(TMGMSG("DIERR","E",120))>0 set result="" quit  ;"ignore error if #120 (hook) present.
 | 
|---|
| 223 |         . . do ShowIfDIERR^TMGDEBUG(.TMGMSG)
 | 
|---|
| 224 |  
 | 
|---|
| 225 | AFTM2
 | 
|---|
| 226 |         if $get(Option("FIX CHAIN"))=1 do   ;"pass message forward for fix
 | 
|---|
| 227 |         . do Activ1TMG^TMGNDF4B(IEN22706d9)
 | 
|---|
| 228 |         . new temp set temp=$$OIFromTMG^TMGNDF4C(IEN22706d9,.Option) ;" <-- more chaining from this
 | 
|---|
| 229 |         . ;"if $get(Option("DELETING"))=1 do
 | 
|---|
| 230 |         . ;". new IEN50 set IEN50=+$get(Option("IEN50",mode))
 | 
|---|
| 231 |         . ;". if IEN50=0 write "?? 1 -- In POIFromTMG^TMGNDF4A.",! quit
 | 
|---|
| 232 |         . ;". new IEN50d7 set IEN50d7=+$get(Option("IEN50d7",mode))
 | 
|---|
| 233 |         . ;". if IEN50d7=0 set IEN50d7=+$piece(^PSDRUG(IEN50,2),"^",1) ;"try a second way
 | 
|---|
| 234 |         . ;". if IEN50d7=0 write "?? 2 -- In POIFromTMG^TMGNDF4A.",! quit
 | 
|---|
| 235 |         . ;". new numRef set numRef=$$ListCt^TMGMISC($name(^PSDRUG("ASP",IEN50d7)))
 | 
|---|
| 236 |         . ;". if numRef>1 quit ;"don't kill POI if another drug in 50 points to it
 | 
|---|
| 237 |         . ;". new TMGFDA,TMGMSG,TMGIEN
 | 
|---|
| 238 |         . ;". new PSEDITNM set PSEDITNM=1 ;"a key to allow editing data
 | 
|---|
| 239 |         . ;". set TMGFDA(50.7,IEN50d7_",",.01)="@"  ;"delete pointer from file 50
 | 
|---|
| 240 |         . ;". do FILE^DIE("EK","TMGFDA","TMGMSG")
 | 
|---|
| 241 |         . ;". if $$ShowIfError^TMGDBAPI(.TMGMSG) quit
 | 
|---|
| 242 |         . ;". ;"Now delete from TMG IMPORT COMPILED
 | 
|---|
| 243 |         . ;". new field
 | 
|---|
| 244 |         . ;". if mode="GENERIC" set field=5.71
 | 
|---|
| 245 |         . ;". else  if mode="TRADE" set field=5.61
 | 
|---|
| 246 |         . ;". else  write "Can't delete pointer to 50.7 from 22706.9.",!,"Can't determine if GENERIC or TRADE mode.",! quit
 | 
|---|
| 247 |         . ;". set TMGFDA(22706.9,IEN22706d9_",",field)="@"  ;"delete pointer from TMG IMPORT COMPILED
 | 
|---|
| 248 |         . ;". do FILE^DIE("EK","TMGFDA","TMGMSG")
 | 
|---|
| 249 |         . ;". if $$ShowIfError^TMGDBAPI(.TMGMSG) quit
 | 
|---|
| 250 |  
 | 
|---|
| 251 | AFTMGDone
 | 
|---|
| 252 |         if repeatNeeded=1 set result=-1
 | 
|---|
| 253 |         quit result
 | 
|---|
| 254 |  
 | 
|---|
| 255 |  ;" === Do1POI is old -- delete later...
 | 
|---|
| 256 | Do1POI(IEN22706d9,IEN50d606,IEN51d2,Option)
 | 
|---|
| 257 |         ;"Purpose: add/refresh one PHARMACY ORDERABLE ITEM (POI) entry.
 | 
|---|
| 258 |         ;"Input: IEN22706d9 -- IEN in 22706.9
 | 
|---|
| 259 |         ;"       IEN50d606 -- IEN in 50.606
 | 
|---|
| 260 |         ;"       IEN51d2 -- IEN in 51.2
 | 
|---|
| 261 |         ;"       Option -- NON-OPTIONAL PART. Format:
 | 
|---|
| 262 |         ;"                  Option("CUR MODE")="TRADE" or "GENERIC"
 | 
|---|
| 263 |         ;"                  Option("IEN50.7","TRADE")=IEN50.7 for Trade Name
 | 
|---|
| 264 |         ;"                  Option("IEN50.7","GENERIC")=IEN50.7 for Generic Name
 | 
|---|
| 265 |         ;"                  Option("DRUG NAME AND FORM","TRADE")=Trade Name and Form
 | 
|---|
| 266 |         ;"                  Option("DRUG NAME AND FORM","GENERIC")=Generic Name and Form
 | 
|---|
| 267 |         ;"                  Option("IEN50","TRADE")=IEN50 for Trade Name
 | 
|---|
| 268 |         ;"                  Option("IEN50","GENERIC")=IEN50 for Generic Name
 | 
|---|
| 269 |         ;"       Option -- OPTIONAL. Format:
 | 
|---|
| 270 |         ;"                  Option("FIX CHAIN")=1  <--- changes will be propigate forward
 | 
|---|
| 271 |         ;"                   to file POI, OI, OQV etc.
 | 
|---|
| 272 |         ;"                  OPTION("FIX CHAIN","IEN22706d9")=Source IEN
 | 
|---|
| 273 |         ;"                  Option("QUIET")=1 <-- supress text output
 | 
|---|
| 274 |         ;"                  Option("DELETING")=1 <-- deleting chain (not IEN22706d9)
 | 
|---|
| 275 |         ;"Result: IEN50d7 if OK, -1 =Error, -2 process repeat requested
 | 
|---|
| 276 |  
 | 
|---|
| 277 |         new result set result=""  ;"default to null
 | 
|---|
| 278 |         new TMGA,TMGMSG
 | 
|---|
| 279 |         new IEN50d7 set IEN50d7=-1 ;"default to error
 | 
|---|
| 280 |         new mode set mode=$get(Option("CUR MODE"))
 | 
|---|
| 281 |         if mode="" write "ERROR: in Do1POI^TMGNDF4A.  Mode not supplied.",! goto D1PDone
 | 
|---|
| 282 |         new DrugNAF set DrugNAF=$get(Option("DRUG NAME AND FORM",mode))
 | 
|---|
| 283 |         if (DrugNAF="<DUPLICATE>")!(DrugNAF="") goto D1PDone  ;"skip these...
 | 
|---|
| 284 |         new IEN50 set IEN50=+$get(Option("IEN50",mode)) if IEN50=0 set result=-1 goto D1PDone
 | 
|---|
| 285 |         new IEN50d7 set IEN50d7=+$get(Option("IEN50.7",mode))
 | 
|---|
| 286 |         new field,node,pce
 | 
|---|
| 287 |         if mode="GENERIC" set field=5.71,node=8,pce=4  ;"5.71= POI ptr Generic
 | 
|---|
| 288 |         else  if mode="TRADE" set field=5.61,node=8,pce=3  ;"5.61 = POI ptr Trade
 | 
|---|
| 289 |  
 | 
|---|
| 290 |         if IEN50d7=0 set IEN50d7=$$FindPOI^TMGNDFUT(DrugNAF)
 | 
|---|
| 291 |         if IEN50d7=0 do
 | 
|---|
| 292 |         . new TMGFDA,TMGIEN,TMGMSG
 | 
|---|
| 293 |         . new PSEDITNM set PSEDITNM=1 ;"a key to allow editing data
 | 
|---|
| 294 |         . set TMGFDA(50.7,"+1,",.01)=DrugNAF
 | 
|---|
| 295 |         . set TMGFDA(50.7,"+1,",.02)=IEN50d606
 | 
|---|
| 296 |         . set TMGFDA(50.7,"+1,",.06)=IEN51d2
 | 
|---|
| 297 |         . set TMGFDA(50.7,"+1,",.07)="R"
 | 
|---|
| 298 |         . do UPDATE^DIE("","TMGFDA","TMGIEN","TMGMSG")
 | 
|---|
| 299 |         . if $data(TMGMSG("DIERR")) do
 | 
|---|
| 300 |         . . set result=-1
 | 
|---|
| 301 |         . . do ShowIfDIERR^TMGDEBUG(.TMGMSG)
 | 
|---|
| 302 |         . else  set IEN50d7=+$get(TMGIEN(1))
 | 
|---|
| 303 |         else  do
 | 
|---|
| 304 |         . new TMGFDA,TMGIEN,TMGMSG
 | 
|---|
| 305 |         . new PSEDITNM set PSEDITNM=1 ;"a key to allow editing data
 | 
|---|
| 306 |         . set TMGFDA(50.7,IEN50d7_",",.01)=DrugNAF
 | 
|---|
| 307 |         . set TMGFDA(50.7,IEN50d7_",",.02)=IEN50d606
 | 
|---|
| 308 |         . set TMGFDA(50.7,IEN50d7_",",.06)=IEN51d2
 | 
|---|
| 309 |         . set TMGFDA(50.7,IEN50d7_",",.07)="R"
 | 
|---|
| 310 |         . new temp set temp=$$TrimFDA^TMGDBAPI(.TMGFDA)
 | 
|---|
| 311 |         . if $data(TMGFDA)=0 quit
 | 
|---|
| 312 |         . do FILE^DIE("S","TMGFDA","TMGMSG")
 | 
|---|
| 313 |         . if $data(TMGMSG("DIERR")) do
 | 
|---|
| 314 |         . . set result=-1
 | 
|---|
| 315 |         . . do ShowIfDIERR^TMGDEBUG(.TMGMSG)
 | 
|---|
| 316 |         . . if $get(TMGMSG("DIERR",1))=601 do  ;"601 --> [record doesn't exist]
 | 
|---|
| 317 |         . . . write "Dangling pointer found & removed.  ** RUN ENTIRE PROCESS AGAIN **",!
 | 
|---|
| 318 |         . . . set IEN50d7=0
 | 
|---|
| 319 |         . . . new TMGFDA,TMGMSG
 | 
|---|
| 320 |         . . . set TMGFDA(22706.9,IEN22706d9_",",field)="@"
 | 
|---|
| 321 |         . . . do FILE^DIE("S","TMGFDA","TMGMSG")
 | 
|---|
| 322 |         . . . do ShowIfDIERR^TMGDEBUG(.TMGMSG)
 | 
|---|
| 323 |         . . . kill TMGFDA,TMGMSG
 | 
|---|
| 324 |         . . . set TMGFDA(50,IEN50_",",2.1)="@"
 | 
|---|
| 325 |         . . . do FILE^DIE("S","TMGFDA","TMGMSG")
 | 
|---|
| 326 |         . . . set result=-1
 | 
|---|
| 327 |         . . . if $data(TMGMSG("DIERR")) do
 | 
|---|
| 328 |         . . . . if $data(TMGMSG("DIERR","E",120))>0 set result="" quit  ;"ignore error if #120 (hook) present.
 | 
|---|
| 329 |         . . . . do ShowIfDIERR^TMGDEBUG(.TMGMSG)
 | 
|---|
| 330 |  
 | 
|---|
| 331 |         if +IEN50d7=0 set result=-1 goto D1PDone
 | 
|---|
| 332 |  
 | 
|---|
| 333 |         ;"if +$get(Option("IEN50.7",mode))=0 do
 | 
|---|
| 334 |         ;". new TMGFDA,TMGMSG
 | 
|---|
| 335 |         ;". set TMGFDA(22706.9,IEN22706d9_",",field)=IEN50d7
 | 
|---|
| 336 |         ;". do FILE^DIE("S","TMGFDA","TMGMSG")
 | 
|---|
| 337 |         ;". do ShowIfDIERR^TMGDEBUG(.TMGMSG)
 | 
|---|
| 338 |         ;". set Option("IEN50.7",mode)=IEN50d7
 | 
|---|
| 339 |  
 | 
|---|
| 340 |         ;"Store pointer to POI in TMG IMPORT COMPILED
 | 
|---|
| 341 |         if +$piece($get(^TMG(22706.9,IEN22706d9,node)),"^",pce)'=IEN50d7 do
 | 
|---|
| 342 |         . new TMGFDA,TMGMSG
 | 
|---|
| 343 |         . set TMGFDA(22706.9,IEN22706d9_",",field)=IEN50d7
 | 
|---|
| 344 |         . do FILE^DIE("","TMGFDA","TMGMSG")
 | 
|---|
| 345 |         . do ShowIfDIERR^TMGDEBUG(.TMGMSG)
 | 
|---|
| 346 |         . set Option("IEN50.7",mode)=IEN50d7
 | 
|---|
| 347 |  
 | 
|---|
| 348 |         if +$piece($get(^PSDRUG(IEN50,2)),"^",1)'=IEN50d7 do
 | 
|---|
| 349 |         . new TMGFDA,TMGMSG
 | 
|---|
| 350 |         . set TMGFDA(50,IEN50_",",2.1)=IEN50d7
 | 
|---|
| 351 |         . do FILE^DIE("S","TMGFDA","TMGMSG")
 | 
|---|
| 352 |         . set result=-1
 | 
|---|
| 353 |         . if $data(TMGMSG("DIERR")) do
 | 
|---|
| 354 |         . . if $data(TMGMSG("DIERR","E",120))>0 set result="" quit  ;"ignore error if #120 (hook) present.
 | 
|---|
| 355 |         . . do ShowIfDIERR^TMGDEBUG(.TMGMSG)
 | 
|---|
| 356 |  
 | 
|---|
| 357 | D1PDone
 | 
|---|
| 358 |         if result="" set result=IEN50d7
 | 
|---|
| 359 |         quit result
 | 
|---|
| 360 |  
 | 
|---|
| 361 |  ;"=================================================================
 | 
|---|
| 362 |  ;"=================================================================
 | 
|---|
| 363 |  
 | 
|---|
| 364 |  
 | 
|---|
| 365 | InactivatePOIs
 | 
|---|
| 366 |         ;"Purpose: To inactivate all POI (entries in PHARMACY ORDERABLE ITEMS)
 | 
|---|
| 367 |         ;"          This will prevent left-over entries from a prior run to cause problems
 | 
|---|
| 368 |  
 | 
|---|
| 369 |         new Itr,IEN
 | 
|---|
| 370 |         new abort set abort=0
 | 
|---|
| 371 |         write "Inactivating all prior PHARMACY ORDERABLE ITEMS...",!
 | 
|---|
| 372 |         set IEN=$$ItrInit^TMGITR(50.7,.Itr)
 | 
|---|
| 373 |         do PrepProgress^TMGITR(.Itr,20,0,"IEN")
 | 
|---|
| 374 |         if IEN'="" for  do  quit:($$ItrNext^TMGITR(.Itr,.IEN)'>0)!abort
 | 
|---|
| 375 |         . if $$UserAborted^TMGUSRIF set abort=1 quit
 | 
|---|
| 376 |         . new TMGFDA,TMGMSG
 | 
|---|
| 377 |         . set TMGFDA(50.7,IEN_",",.04)="NOW"
 | 
|---|
| 378 |         . do FILE^DIE("KE","TMGFDA","TMGMSG")
 | 
|---|
| 379 |         . do ShowIfDIERR^TMGDEBUG(.TMGMSG)
 | 
|---|
| 380 |         do ProgressDone^TMGITR(.Itr)
 | 
|---|
| 381 |  
 | 
|---|
| 382 |         quit
 | 
|---|
| 383 |  
 | 
|---|
| 384 |  
 | 
|---|
| 385 | ActivAll
 | 
|---|
| 386 |         ;"DISABLED... THIS SHOULD BE DONE IN TMENDF4B...
 | 
|---|
| 387 |  
 | 
|---|
| 388 |         ;"Purpose: to activate all POI's
 | 
|---|
| 389 |  
 | 
|---|
| 390 |         new Itr,IEN
 | 
|---|
| 391 |         new abort set abort=0
 | 
|---|
| 392 |         set IEN=$$ItrInit^TMGITR(50.7,.Itr)
 | 
|---|
| 393 |         do PrepProgress^TMGITR(.Itr,20,0,"IEN")
 | 
|---|
| 394 |         if IEN'="" for  do  quit:(+$$ItrNext^TMGITR(.Itr,.IEN)'>0)!abort
 | 
|---|
| 395 |         . if $$UserAborted^TMGUSRIF set abort=1 quit
 | 
|---|
| 396 |         . new temp
 | 
|---|
| 397 |         . set temp=$$ActivatePOI(IEN)
 | 
|---|
| 398 |         do ProgressDone^TMGITR(.Itr)
 | 
|---|
| 399 |  
 | 
|---|
| 400 |         quit
 | 
|---|
| 401 |  
 | 
|---|
| 402 |  
 | 
|---|
| 403 |  
 | 
|---|
| 404 | ActivatePOI(IEN50d7)
 | 
|---|
| 405 |         ;"Purpose: to remove the inactivation date that is automatically
 | 
|---|
| 406 |         ;"         added with editing of the POI record
 | 
|---|
| 407 |         ;"result: 1 = OK, 0=error
 | 
|---|
| 408 |  
 | 
|---|
| 409 |         new result set result=1
 | 
|---|
| 410 |  
 | 
|---|
| 411 |         new TMGFDA,TMGMSG
 | 
|---|
| 412 |         set TMGFDA(50.7,IEN50d7_",",.04)="@"  ;"delete inactivation date field value
 | 
|---|
| 413 |         do
 | 
|---|
| 414 |         . new $etrap set $etrap="do HandlePOIErr^TMGNDF4A quit"
 | 
|---|
| 415 |         . do FILE^DIE("ES","TMGFDA","TMGMSG")
 | 
|---|
| 416 |         if $data(TMGMSG("DIERR"))'=0 do  goto APOIDone
 | 
|---|
| 417 |         . do ShowDIERR^TMGDEBUG(.TMGMSG,.PriorErrorFound)
 | 
|---|
| 418 |         . set result=0
 | 
|---|
| 419 |         . write "Error occurred in function ActivatePOI",!
 | 
|---|
| 420 |         . zwr TMGFDA
 | 
|---|
| 421 | APOIDone
 | 
|---|
| 422 |         quit result
 | 
|---|
| 423 |  
 | 
|---|
| 424 |  
 | 
|---|
| 425 | HandlePOIErr
 | 
|---|
| 426 |         ;"Purpose: An error handler for ActivatePOI
 | 
|---|
| 427 |         set $ECODE=""
 | 
|---|
| 428 |         if result=0 quit
 | 
|---|
| 429 |         set result=0
 | 
|---|
| 430 |         write "Error encountered activating Pharmacy Orderable Item: "
 | 
|---|
| 431 |         write $piece($get(^PS(50.7,IEN50d7,0)),"^",1)," (#",IEN50d7,")",!
 | 
|---|
| 432 |         ;"Note: below won't set needed xrefs etc.
 | 
|---|
| 433 |         ;"set $piece(^PS(50.7,IEN50d7,0),"^",4)=""
 | 
|---|
| 434 |         ;"write "Fixed with low-level removal of inactivation date.",!
 | 
|---|
| 435 |         quit
 | 
|---|
| 436 |  
 | 
|---|
| 437 |  
 | 
|---|
| 438 |  
 | 
|---|
| 439 | KillPOIs
 | 
|---|
| 440 |         ;"Purpose: to kill all POI's, do allow fresh start (after errors)
 | 
|---|
| 441 |  
 | 
|---|
| 442 |         new % set %=2
 | 
|---|
| 443 |         write "Are you sure you want to perminantly KILL all PHARMACY ORDERABLE ITEMS"
 | 
|---|
| 444 |         do YN^DICN
 | 
|---|
| 445 |         if %'=1 goto KPOIDone
 | 
|---|
| 446 |  
 | 
|---|
| 447 |         new Itr,IEN50d7
 | 
|---|
| 448 |         new abort set abort=0
 | 
|---|
| 449 |         set IEN50d7=$$ItrInit^TMGITR(50.7,.Itr)
 | 
|---|
| 450 |         do PrepProgress^TMGITR(.Itr,2,0,"IEN50d7")
 | 
|---|
| 451 |         if IEN50d7'="" for  do  quit:(+$$ItrNext^TMGITR(.Itr,.IEN50d7)'>0)!abort
 | 
|---|
| 452 |         . if $$UserAborted^TMGUSRIF set abort=1 quit
 | 
|---|
| 453 |         . do KillPOI^TMGNDFUT(IEN50d7)
 | 
|---|
| 454 |         do ProgressDone^TMGITR(.Itr)
 | 
|---|
| 455 |  
 | 
|---|
| 456 | KPOIDone
 | 
|---|
| 457 |         quit
 | 
|---|