[796] | 1 | TMGNDF2C ;TMG/kst/FDA Import: Fill VA GENERIC entries;03/25/06
|
---|
| 2 | ;;1.0;TMG-LIB;**1**;11/21/06
|
---|
| 3 |
|
---|
| 4 | ;" FDA - NATIONAL DRUG FILES COMPILING FUNCTIONS
|
---|
| 5 | ;" -- FILLING VA GENERIC FILE WITH NEW VALUES
|
---|
| 6 | ;" -- and linking field .08 (VA GENERIC) in file TMG FDA IMPORT with links to apprpriate values.
|
---|
| 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 | ;"FillGenerics -- scan TMG FDA IMPORT file and make sure that all of the GENERIC NAMEs
|
---|
| 17 | ;" have been added into the VA GENERIC file, or that a link exists between a
|
---|
| 18 | ;" GENERIC name and an existing VA GENERIC name.
|
---|
| 19 | ;" Then use this data and fill in field .08 in file TMG FDA IMPORT COMPILED
|
---|
| 20 |
|
---|
| 21 | ;"=======================================================================
|
---|
| 22 | ;" Private Functions.
|
---|
| 23 | ;"=======================================================================
|
---|
| 24 | ;"CheckGenerics(Results)
|
---|
| 25 | ;"Rescan(Array,Label,number)
|
---|
| 26 | ;"FindSimGenerics(Generic,Array)
|
---|
| 27 | ;"NarrowGenMatches(Generic,Array)
|
---|
| 28 | ;"FindGenContain(name,Array)
|
---|
| 29 | ;"Scan4Generics(Array)
|
---|
| 30 | ;"Unlock50dot6
|
---|
| 31 | ;"Lock50dot6
|
---|
| 32 | ;"ShowList(Array,Label)
|
---|
| 33 | ;"ProcessList(Array) -- handle adding generic names, returning a list of linkages
|
---|
| 34 | ;"HandleAdds(Array) -- handle adding those entries in Array that need to be added to VA GENERIC file.
|
---|
| 35 | ;"Remove(Array,Label,Num,EndNum) -- remove name(s) from Array of additions to VA GENERIC file
|
---|
| 36 | ;"CustLookup(Array,Label,Num) -- manually link entry in Array to an existing entry in VA GENERIC file
|
---|
| 37 | ;"DoAdds(Array,Label,Num,EndNum) -- extract name(s) from Array and add to VA GENERIC file, via Add1Generic
|
---|
| 38 | ;"Add1Generic(Name) -- add on entry to the VA GENERIC FILE
|
---|
| 39 | ;"HandleQAdds(Array) -- review 'Uncertain Matches' node of Array and allow user to specify whether
|
---|
| 40 | ;"DoLinks(Array,Num,EndNum) -- change a link from the "Uncertain Matches" node, to a formal link
|
---|
| 41 | ;"DoMltLink(Array,Num,TMGGeneric) -- interact with user and pick which link (amoung multiple)
|
---|
| 42 | ;"FillCompFile(Array) -- fill in field .08 in file TMG FDA IMPORT COMPILED
|
---|
| 43 |
|
---|
| 44 | ;"=======================================================================
|
---|
| 45 | ;"=======================================================================
|
---|
| 46 |
|
---|
| 47 | Menu
|
---|
| 48 | ;"Purpose: Provide menu to entry points of main routines
|
---|
| 49 |
|
---|
| 50 | new Menu,UsrSlct
|
---|
| 51 | set Menu(0)="Pick Option for filling VA GENERIC entries (2C)"
|
---|
| 52 | set Menu(1)="Ensure link between import GENERIC name, and VA GENERIC name"_$char(9)_"FillGenerics"
|
---|
| 53 | set Menu("P")="Prev Stage"_$char(9)_"Prev"
|
---|
| 54 | set Menu("N")="Next Stage"_$char(9)_"Next"
|
---|
| 55 |
|
---|
| 56 | MC1 write #
|
---|
| 57 | set UsrSlct=$$Menu^TMGUSRIF(.Menu,"^")
|
---|
| 58 | if UsrSlct="^" goto MCDone
|
---|
| 59 | if UsrSlct=0 set UsrSlct=""
|
---|
| 60 |
|
---|
| 61 | if UsrSlct="FillGenerics" do FillGenerics goto MC1
|
---|
| 62 | if UsrSlct="Prev" goto Menu^TMGNDF2A ;"quit can occur from there...
|
---|
| 63 | if UsrSlct="Next" goto Menu^TMGNDF2E ;"quit can occur from there...
|
---|
| 64 | goto MC1
|
---|
| 65 |
|
---|
| 66 | MCDone
|
---|
| 67 | quit
|
---|
| 68 |
|
---|
| 69 |
|
---|
| 70 | FillGenerics
|
---|
| 71 | ;"Purpose: To scan TMG FDA IMPORT file and make sure that all of the GENERIC NAMEs
|
---|
| 72 | ;" have been added into the VA GENERIC file, or that a link exists between a
|
---|
| 73 | ;" GENERIC name and an existing VA GENERIC name.
|
---|
| 74 | ;" Then use this data and fill in field .08 in file TMG FDA IMPORT COMPILED
|
---|
| 75 |
|
---|
| 76 | new list
|
---|
| 77 |
|
---|
| 78 | write #
|
---|
| 79 | write "======================================================",!
|
---|
| 80 | write "Link FDA import entries to entries in VA GENERIC file",!
|
---|
| 81 | write "======================================================",!,!
|
---|
| 82 | new list
|
---|
| 83 | if $data(^TMG("templist")) do
|
---|
| 84 | . write "Data from another work run found. Continue to use this"
|
---|
| 85 | . new % set %=1 do YN^DICN write !
|
---|
| 86 | . if %=1 merge list=^TMG("templist")
|
---|
| 87 | . if %=2 do
|
---|
| 88 | . . write "Delete old data from prior run"
|
---|
| 89 | . . set %=2 do YN^DICN write !
|
---|
| 90 | . . if %=1 kill ^TMG("templist"),list
|
---|
| 91 | . . do CheckGenerics(.list)
|
---|
| 92 | else do CheckGenerics(.list)
|
---|
| 93 | kill ^TMG("templist")
|
---|
| 94 |
|
---|
| 95 | if $data(list)=0 goto FGDone
|
---|
| 96 |
|
---|
| 97 | do ProcessList(.list)
|
---|
| 98 | merge ^TMG("templist")=list
|
---|
| 99 | write "Use data to fill in VA GENERIC field in TMG FDA IMPORT COMPILED now"
|
---|
| 100 | set %=1 do YN^DICN write !
|
---|
| 101 | if %=1 do FillCompFile(.list)
|
---|
| 102 |
|
---|
| 103 | FGDone
|
---|
| 104 | write "Goodbye.",!
|
---|
| 105 | quit
|
---|
| 106 |
|
---|
| 107 |
|
---|
| 108 | CheckGenerics(Results)
|
---|
| 109 | ;"Purpose: To scan TMG FDA IMPORT file and make sure that all of the GENERIC NAMEs
|
---|
| 110 | ;" have been added into the VA GENERIC file, or that a link exists between a
|
---|
| 111 | ;" GENERIC NAME and an existing VA GENERIC name.
|
---|
| 112 | ;"Input: Results -- PASS BY REFERENCE, and OUT PARAMETER. Returns array with results.
|
---|
| 113 |
|
---|
| 114 | new Array,i
|
---|
| 115 | write "Collecting list of imports not linked to a VA GENERIC entry.",!
|
---|
| 116 | do Scan4Generics(.Array) ;"note: result Array will not include SKIPPED records
|
---|
| 117 | if $data(Array)=0 do goto CGDone
|
---|
| 118 | . write "No unmatched entries found--great!",!
|
---|
| 119 |
|
---|
| 120 | write "Processing GENERIC names...",!
|
---|
| 121 |
|
---|
| 122 | new DIC,X,Y
|
---|
| 123 | set DIC=50.6
|
---|
| 124 | set DIC(0)="M" ;"multiple index, LAYGO (add if not found)
|
---|
| 125 |
|
---|
| 126 | new abort set abort=0
|
---|
| 127 | new temp set temp=""
|
---|
| 128 | new count set count=1
|
---|
| 129 | new TMGGeneric
|
---|
| 130 | new Itr,i
|
---|
| 131 | set i=$$ItrAInit^TMGITR("Array",.Itr)
|
---|
| 132 | do PrepProgress^TMGITR(.Itr,20,1,"i")
|
---|
| 133 | if i'="" for do quit:($$ItrANext^TMGITR(.Itr,.i)="")!abort
|
---|
| 134 | . set X=i,TMGGeneric=i
|
---|
| 135 | . set DIC(0)="M" do ^DIC
|
---|
| 136 | . if Y=-1 do
|
---|
| 137 | . . set DIC(0)="MX"
|
---|
| 138 | . . do ^DIC
|
---|
| 139 | . if Y=-1 do
|
---|
| 140 | . . if $data(^PSNDF(50.6,"B",X)) do
|
---|
| 141 | . . . new IEN set IEN=+$order(^PSNDF(50.6,"B",X,""))
|
---|
| 142 | . . . if IEN'>0 write "?? IEN for ",X," is NULL??",! quit
|
---|
| 143 | . . . set Y=IEN_"^"_X ;"only get first match
|
---|
| 144 | . if +Y>0 do quit
|
---|
| 145 | . . set Results("Uncertain Matches",count,TMGGeneric,$piece(Y,"^",2))=Y
|
---|
| 146 | . . set count=count+1
|
---|
| 147 | . new list
|
---|
| 148 | . do FindSimGenerics(TMGGeneric,.list)
|
---|
| 149 | . if $data(list) do
|
---|
| 150 | . . merge Results("Uncertain Matches",count,TMGGeneric)=list
|
---|
| 151 | . . set count=count+1 ;"is this right???
|
---|
| 152 | . else do
|
---|
| 153 | . . set Results("Should Add",count,TMGGeneric)=""
|
---|
| 154 | . . set count=count+1
|
---|
| 155 | do ProgressDone^TMGITR(.Itr)
|
---|
| 156 |
|
---|
| 157 | CGDone
|
---|
| 158 | quit
|
---|
| 159 |
|
---|
| 160 | Rescan(Array,Label,number)
|
---|
| 161 | ;"Purpose: to allow rescan of one entry
|
---|
| 162 | ;"Input: Array -- PASS BY REFERENCE -- Array with drug lists, as used by CheckGenerics
|
---|
| 163 | ;" Label -- i.e. "Uncertain Matches", or "Should Add"
|
---|
| 164 | ;" number -- the number of the listing to rescan
|
---|
| 165 | ;" NOTE: This affects Results from a global scope
|
---|
| 166 | ;" ??? Was this intended ???
|
---|
| 167 | ;"Output:
|
---|
| 168 | ;"results: none
|
---|
| 169 |
|
---|
| 170 | new DIC,X,Y
|
---|
| 171 | set DIC=50.6
|
---|
| 172 | set DIC(0)="M" ;"multiple index, LAYGO (add if not found)
|
---|
| 173 |
|
---|
| 174 | set X=$order(Array(Label,number,""))
|
---|
| 175 | if X'="" do
|
---|
| 176 | . do ^DIC
|
---|
| 177 | . if +Y'>0 do
|
---|
| 178 | . . new list
|
---|
| 179 | . . do FindSimGenerics(X,.list)
|
---|
| 180 | . . if $data(list) do
|
---|
| 181 | . . . merge Results("Uncertain Matches",number,X)=list
|
---|
| 182 | . . else do
|
---|
| 183 | . . . set Results("Should Add",number,X)=""
|
---|
| 184 | . else set Results(X)=Y
|
---|
| 185 |
|
---|
| 186 | quit
|
---|
| 187 |
|
---|
| 188 |
|
---|
| 189 | FindSimGenerics(Generic,Array)
|
---|
| 190 | ;"Purpose: to scan VA GENERIC file and return an array of similar entries.
|
---|
| 191 | ;"Input: Generic: the name of the generic drug name to scan for
|
---|
| 192 | ;" Array: PASS BY REFERENCE, and OUT PARAMETER -- prior entries are killed
|
---|
| 193 | ;"Result: none (output is in Array)
|
---|
| 194 |
|
---|
| 195 | new i,i2,s
|
---|
| 196 | kill Array
|
---|
| 197 | new NumRxs
|
---|
| 198 | set NumRxs=$length(Generic,"/")
|
---|
| 199 |
|
---|
| 200 | set i2=$order(^PSNDF(50.6,0))
|
---|
| 201 | if i2'="" for do quit:(i2="")
|
---|
| 202 | . new VAGeneric set VAGeneric=$piece($get(^PSNDF(50.6,i2,0)),"^",1)
|
---|
| 203 | . new IEN set IEN=i2
|
---|
| 204 | . set i2=$order(^PSNDF(50.6,i2))
|
---|
| 205 | . if NumRxs'=$length(VAGeneric,"/") quit
|
---|
| 206 | . new temp set temp=VAGeneric
|
---|
| 207 | . for i=1:1:NumRxs do quit:(s="")!(temp="")
|
---|
| 208 | . . set s=$piece(Generic,"/",i)
|
---|
| 209 | . . set s=$piece(s," ",1) ;"get first word of multi-word drug name
|
---|
| 210 | . . if s="" quit
|
---|
| 211 | . . if $extract(VAGeneric,1,$length(s))'=s set temp=""
|
---|
| 212 | . if temp'="" do
|
---|
| 213 | . . set Array(VAGeneric)=IEN_"^"_VAGeneric
|
---|
| 214 |
|
---|
| 215 | new count
|
---|
| 216 | set count=$$ListCt^TMGMISC("Array")
|
---|
| 217 | if count>1 do
|
---|
| 218 | . do NarrowGenMatches(Generic,.Array)
|
---|
| 219 | . if (($$ListCt^TMGMISC("Array")/count)>0.5)&(count>5) do ;"i.e. no improvement
|
---|
| 220 | . . kill Array
|
---|
| 221 |
|
---|
| 222 | quit
|
---|
| 223 |
|
---|
| 224 |
|
---|
| 225 | NarrowGenMatches(Generic,Array,DivCh)
|
---|
| 226 | ;"Purpose: To take a number of matches, and weed out bad matches (narrow down the list).
|
---|
| 227 | ;"Input: Generic -- Name of Generic name that ideal match should equal
|
---|
| 228 | ;" Array -- PASS BY REFERENCE, the array that needs trimming.
|
---|
| 229 | ;" DivCH -- OPTIONAL, default="/"
|
---|
| 230 | ;"Output: Array will be thinned if possible.
|
---|
| 231 | ;"Results: none
|
---|
| 232 |
|
---|
| 233 | new i,j,result
|
---|
| 234 | new MaxScore set MaxScore=0
|
---|
| 235 | set DivCh=$get(DivCh,"/")
|
---|
| 236 |
|
---|
| 237 | set i=$order(Array(""))
|
---|
| 238 | if i'="" for do quit:(i="")
|
---|
| 239 | . new score set score=0
|
---|
| 240 | . for j=1:1:$length(i,DivCh) do
|
---|
| 241 | . . new GenIgd,ArrayIgd
|
---|
| 242 | . . set GenIgd=$piece(Generic,DivCh,j)
|
---|
| 243 | . . set ArrayIgd=$piece(i,DivCh,j)
|
---|
| 244 | . . set score=score+$$Comp2Strs^TMGSTUTL(GenIgd,ArrayIgd)
|
---|
| 245 | . if score>MaxScore set MaxScore=score
|
---|
| 246 | . if score'<MaxScore do
|
---|
| 247 | . . set result(score,i)=""
|
---|
| 248 | . set i=$order(Array(i))
|
---|
| 249 |
|
---|
| 250 | new output,count
|
---|
| 251 | set score=0,count=0
|
---|
| 252 | set i=$order(result(""),-1)
|
---|
| 253 | if i'="" for do quit:(i="")
|
---|
| 254 | . if (i'<score) do
|
---|
| 255 | . . set j=$order(result(i,""),-1)
|
---|
| 256 | . . if j'="" for do quit:(j="")
|
---|
| 257 | . . . set output(j)=$get(Array(j))
|
---|
| 258 | . . . set j=$order(result(i,j),-1)
|
---|
| 259 | . . set score=i
|
---|
| 260 | . set i=$order(result(i),-1)
|
---|
| 261 |
|
---|
| 262 | kill Array
|
---|
| 263 | merge Array=output
|
---|
| 264 |
|
---|
| 265 | quit
|
---|
| 266 |
|
---|
| 267 |
|
---|
| 268 | FindGenContain(name,Array)
|
---|
| 269 | ;"Purpose to scan the VA GENERIC file and return a list off all entries containing name
|
---|
| 270 | ;"Input -- name: the string to scan for
|
---|
| 271 | ;" Array: PASS BY REFERENCE, and OUT PARAMETER (prior entries are killed
|
---|
| 272 | ;"Results: none
|
---|
| 273 |
|
---|
| 274 | kill Array
|
---|
| 275 | new i
|
---|
| 276 | set i=$order(^PSNDF(50.6,0))
|
---|
| 277 | if i'="" for do quit:(i="")
|
---|
| 278 | . new VAGeneric set VAGeneric=$piece($get(^PSNDF(50.6,i,0)),"^",1)
|
---|
| 279 | . if VAGeneric[name set Array(VAGeneric)=""
|
---|
| 280 | . set i=$order(^PSNDF(50.6,i))
|
---|
| 281 |
|
---|
| 282 | quit
|
---|
| 283 |
|
---|
| 284 |
|
---|
| 285 | Scan4Generics(Array)
|
---|
| 286 | ;"Purpose: To scan TMG FDA IMPORT file and collect all the GENERICS NAME entries into the array
|
---|
| 287 | ;" It collects all instances were GENERIC NAME is provided, but VAGeneric pointer is NULL
|
---|
| 288 | ;"Input -- Array -- PASS BY REFERENCE. An Out parameter
|
---|
| 289 | ;"Results -- the Array is filled with names of GENERICS NAME
|
---|
| 290 | ;" Array(GenericName)=""
|
---|
| 291 | ;" Array(GenericName)=""
|
---|
| 292 | ;"Note: This will only return GENERICS NAMEs when there is NO entry already in field
|
---|
| 293 | ;" .08 (VA GENERIC)
|
---|
| 294 | ;" This will skip records marked to be skipped.
|
---|
| 295 |
|
---|
| 296 | new name,VAGeneric
|
---|
| 297 | new Itr,IEN
|
---|
| 298 | set IEN=$$ItrInit^TMGITR(22706.9,.Itr)
|
---|
| 299 | do PrepProgress^TMGITR(.Itr,20,0,"IEN")
|
---|
| 300 | if IEN'="" for do quit:($$ItrNext^TMGITR(.Itr,.IEN)'>0)
|
---|
| 301 | . if $piece($get(^TMG(22706.9,IEN,1)),"^",4)=1 quit ;"1=SKIP
|
---|
| 302 | . set name=$piece($get(^TMG(22706.9,IEN,0)),"^",6) ;"get field#.07, GENERIC NAME
|
---|
| 303 | . set VAGeneric=$piece($get(^TMG(22706.9,IEN,1)),"^",3) ;"get field#.08, VA GENERIC
|
---|
| 304 | . if (+name'=name)&(name'="")&(+VAGeneric=0) do
|
---|
| 305 | . . set Array(name)=""
|
---|
| 306 | do ProgressDone^TMGITR(.Itr)
|
---|
| 307 |
|
---|
| 308 | quit
|
---|
| 309 |
|
---|
| 310 |
|
---|
| 311 | ScanNoGenerics(Array)
|
---|
| 312 | ;"Purpose: To scan TMG FDA IMPORT file and collect all entries into the array
|
---|
| 313 | ;" where there is NO GENERIC NAME is provided, and VAGeneric pointer is NULL
|
---|
| 314 | ;"Input -- Array -- PASS BY REFERENCE. An Out parameter
|
---|
| 315 | ;"Results -- the Array is filled with names of drugs missing GENERICS NAME & VAGeneric Ptr
|
---|
| 316 | ;" This will skip records marked to be skipped.
|
---|
| 317 |
|
---|
| 318 | new IEN
|
---|
| 319 | new name,VAGeneric
|
---|
| 320 |
|
---|
| 321 | set IEN=$order(^TMG(22706.9,""))
|
---|
| 322 | if IEN'="" for do quit:(+IEN'>0)
|
---|
| 323 | . new skip set skip=$piece($get(^TMG(22706.9,IEN,1)),"^",4)
|
---|
| 324 | . if skip=0 do
|
---|
| 325 | . . set name=$piece($get(^TMG(22706.9,IEN,0)),"^",6) ;"get field#.07, GENERIC NAME
|
---|
| 326 | . . set VAGeneric=$piece($get(^TMG(22706.9,IEN,1)),"^",3) ;"get field#.08, VA GENERIC
|
---|
| 327 | . . if (name="")&(+VAGeneric=0) do
|
---|
| 328 | . . . if name["ALLERGENIC EXTRACT" quit ;"skip all these... I don't want them
|
---|
| 329 | . . . new tradeName set tradeName=$piece($get(^TMG(22706.9,IEN,0)),"^",4) ;"get field#.05, TRADENAME
|
---|
| 330 | . . . set Array(tradeName)=""
|
---|
| 331 | . set IEN=$order(^TMG(22706.9,IEN))
|
---|
| 332 |
|
---|
| 333 | quit
|
---|
| 334 |
|
---|
| 335 |
|
---|
| 336 |
|
---|
| 337 | Unlock50dot6
|
---|
| 338 | ;"note: could just set DUZ(0)="^" and not remove this...
|
---|
| 339 | ;"Purpose: to remove the write restrictions for file 50.6
|
---|
| 340 |
|
---|
| 341 | new Lbl set Lbl="50.6"
|
---|
| 342 | do SavKilRef(Lbl,$name(^DIC(50.6,0,"LAYGO")))
|
---|
| 343 | do SavKilRef(Lbl,$name(^DIC(50.6,0,"WR")))
|
---|
| 344 | do SavKilRef(Lbl,$name(^DIC(50.6,0,"DEL")))
|
---|
| 345 | do SavKilRef(Lbl,$name(^DD(50.6,.01,9)))
|
---|
| 346 | do SavKilRef(Lbl,$name(^DD(50.6,.01,"DEL",.01,0)))
|
---|
| 347 | set XUMF=1 ;"a secret programmer's key
|
---|
| 348 | set XPDGREF=1
|
---|
| 349 |
|
---|
| 350 | quit
|
---|
| 351 |
|
---|
| 352 |
|
---|
| 353 | Lock50dot6
|
---|
| 354 | ;"Purpose: to restore the write restrictions for file 50.6
|
---|
| 355 |
|
---|
| 356 | do RestoreSK("50.6")
|
---|
| 357 | ;"set ^DIC(50.6,0,"LAYGO")="^"
|
---|
| 358 | ;"set ^DIC(50.6,0,"WR")="^"
|
---|
| 359 | ;"set ^DIC(50.6,0,"DEL")="^"
|
---|
| 360 | ;"set ^DD(50.6,.01,9)="^"
|
---|
| 361 | ;"set ^DD(50.6,.01,"DEL",.01,0)="I 1 D EN^DDIOL(""DELETIONS ARE NOT ALLOWED"")"
|
---|
| 362 | kill XUMF
|
---|
| 363 | kill XPDGREF
|
---|
| 364 |
|
---|
| 365 | quit
|
---|
| 366 |
|
---|
| 367 | SavKilRef(Label,Ref)
|
---|
| 368 | if ($get(Label)="")!($get(Ref)="") quit
|
---|
| 369 | kill ^TMG("BAK",Label,Ref)
|
---|
| 370 | merge ^TMG("BAK",Label,Ref)=@Ref
|
---|
| 371 | kill @Ref
|
---|
| 372 | quit
|
---|
| 373 |
|
---|
| 374 | RestoreSK(Label)
|
---|
| 375 | if ($get(Label)="") quit
|
---|
| 376 | new Ref set Ref=""
|
---|
| 377 | for set Ref=$order(^TMG("BAK",Label,Ref)) quit:(Ref="") do
|
---|
| 378 | . merge @Ref=^TMG("BAK",Label,Ref)
|
---|
| 379 | . kill ^TMG("BAK",Label,Ref)
|
---|
| 380 | quit
|
---|
| 381 |
|
---|
| 382 | ShowList(Array,Label)
|
---|
| 383 | ;"Purpose: To display the list generated by CheckGenerics
|
---|
| 384 | ;"Input: Array -- the array containing the data
|
---|
| 385 | ;" Label -- the name of the node to display
|
---|
| 386 |
|
---|
| 387 | new count,ingredient,value,first
|
---|
| 388 | new someShown set someShown=0
|
---|
| 389 | set count=$order(Array(Label,""))
|
---|
| 390 | if count'="" for do quit:(count="")
|
---|
| 391 | . new TMGGeneric,VAGeneric
|
---|
| 392 | . set TMGGeneric=$order(Array(Label,count,""))
|
---|
| 393 | . set first=1
|
---|
| 394 | . set someShown=1
|
---|
| 395 | . set VAGeneric=$order(Array(Label,count,TMGGeneric,""))
|
---|
| 396 | . if VAGeneric'="" for do quit:(VAGeneric="")
|
---|
| 397 | . . new next set next=$order(Array(Label,count,TMGGeneric,VAGeneric))
|
---|
| 398 | . . if first=1 do
|
---|
| 399 | . . . if next'="" do
|
---|
| 400 | . . . . write count,". ",TMGGeneric," ---> (multiple)",!
|
---|
| 401 | . . . . write " ---> ",VAGeneric,!
|
---|
| 402 | . . . else do
|
---|
| 403 | . . . . write count,". ",TMGGeneric," ---> ",VAGeneric,!
|
---|
| 404 | . . . set first=0
|
---|
| 405 | . . else write " ---> ",VAGeneric,!
|
---|
| 406 | . . set VAGeneric=$order(Array(Label,count,TMGGeneric,VAGeneric))
|
---|
| 407 | . else do
|
---|
| 408 | . . write count,". ",TMGGeneric,!
|
---|
| 409 | . set count=$order(Array(Label,count))
|
---|
| 410 |
|
---|
| 411 | if someShown=0 do
|
---|
| 412 | . write " --- (List is Empty) ---",!
|
---|
| 413 |
|
---|
| 414 | quit
|
---|
| 415 |
|
---|
| 416 | ProcessList(Array)
|
---|
| 417 | ;"Purpose: After list of linkages between GENERIC NAMEs and VA GENERIC names
|
---|
| 418 | ;" is created by CheckGenerics(), then this function will handle adding those
|
---|
| 419 | ;" generic names that need adding, and returning a list of linkages to use those
|
---|
| 420 | ;" cases there an entry already exists that is not exactly the same, but will be
|
---|
| 421 | ;" used as equivalent.
|
---|
| 422 | ;"Input: Array -- PASS BY REFERENCE the array generated by CheckGenerics
|
---|
| 423 | ;" Results are passed back in Array
|
---|
| 424 | ;" Array(GENERIC NAME)=IEN in VA GENERIC file
|
---|
| 425 | ;" Array(GENERIC NAME)=IEN in VA GENERIC file
|
---|
| 426 | ;"Results: none
|
---|
| 427 |
|
---|
| 428 | new datafound,abort
|
---|
| 429 | set abort=0
|
---|
| 430 |
|
---|
| 431 | for do quit:(datafound=0)!(abort=1)
|
---|
| 432 | . set datafound=0
|
---|
| 433 | . if $data(Array("Should Add"))>0 do quit:(abort=1)
|
---|
| 434 | . . set datafound=1
|
---|
| 435 | . . write !!,"There are entries that should be added to the VA GENERIC file",!
|
---|
| 436 | . . write "Process now (^ to abort)"
|
---|
| 437 | . . new % set %=1 ;"default to YES
|
---|
| 438 | . . do YN^DICN write !
|
---|
| 439 | . . if %=-1 set abort=1 quit
|
---|
| 440 | . . if %=1 do HandleAdds(.Array)
|
---|
| 441 | . if $data(Array("Uncertain Matches"))>0 do
|
---|
| 442 | . . set datafound=1
|
---|
| 443 | . . write !!,"There are presumed linkages that need approval.",!
|
---|
| 444 | . . write "Process now (^ to abort)"
|
---|
| 445 | . . new % set %=1 ;"default to YES
|
---|
| 446 | . . do YN^DICN write !
|
---|
| 447 | . . if %'=1 set abort=1 quit
|
---|
| 448 | . . do HandleQAdds(.Array)
|
---|
| 449 |
|
---|
| 450 | quit
|
---|
| 451 |
|
---|
| 452 |
|
---|
| 453 | HandleAdds(Array)
|
---|
| 454 | ;"Purpose: To handle adding those entries in Array that need to be added to VA GENERIC file.
|
---|
| 455 | ;"Input: Array -- PASS BY REFERENCE the array generated by CheckGenerics
|
---|
| 456 | ;" Results are passed back in Array
|
---|
| 457 | ;" Array(GENERIC NAME)=IEN in VA GENERIC file
|
---|
| 458 | ;" Array(GENERIC NAME)=IEN in VA GENERIC file
|
---|
| 459 | ;"Output: results returned in Array, as above.
|
---|
| 460 | ;"Results: none
|
---|
| 461 |
|
---|
| 462 | do Unlock50dot6
|
---|
| 463 |
|
---|
| 464 | new done set done=0
|
---|
| 465 | new input set input="R"
|
---|
| 466 |
|
---|
| 467 | for do quit:(done=1)
|
---|
| 468 | . if input="R" do
|
---|
| 469 | . . write !!
|
---|
| 470 | . . write "-------------------------------------------------------------------",!
|
---|
| 471 | . . write "Specify which GENERIC names are OK for ADDITION to VA GENERIC file",!
|
---|
| 472 | . . write "-------------------------------------------------------------------",!
|
---|
| 473 | . . do ShowList(.Array,"Should Add")
|
---|
| 474 | . . write "-------------------------------------------------------------------",!
|
---|
| 475 | . . write "Specify which GENERIC names are OK for ADDITION to VA GENERIC file",!
|
---|
| 476 | . . write "-------------------------------------------------------------------",!
|
---|
| 477 | . write " R to refresh, L lookup, ? for instructions",!
|
---|
| 478 | . write " # or #-#, ^ to continue, X remove from list",!
|
---|
| 479 | . write "Enter number(s) to ACCEPT (or codes listed above): ^//"
|
---|
| 480 | . read input,!
|
---|
| 481 | . if input="" set input="^"
|
---|
| 482 | . set input=$$UP^XLFSTR(input)
|
---|
| 483 | . if input="^" set done=1
|
---|
| 484 | . if (input="?") do
|
---|
| 485 | . . ;"do ShowInstructions
|
---|
| 486 | . . set input="R"
|
---|
| 487 | . if +input=input do
|
---|
| 488 | . . do DoAdds(.Array,"Should Add",+input)
|
---|
| 489 | . . set input="R"
|
---|
| 490 | . if input["-" do
|
---|
| 491 | . . new N1,N2
|
---|
| 492 | . . set N1=$piece(input,"-",1)
|
---|
| 493 | . . set N2=$piece(input,"-",2)
|
---|
| 494 | . . do DoAdds(.Array,"Should Add",N1,N2)
|
---|
| 495 | . . set input="R"
|
---|
| 496 | . if input="L" do
|
---|
| 497 | . . read "Enter number to lookup manually: ",input,!
|
---|
| 498 | . . do CustLookup(.Array,"Should Add",+input)
|
---|
| 499 | . . set input="R"
|
---|
| 500 | . if input="X" do
|
---|
| 501 | . . read "Enter number(s) to REMOVE from list: ",input,!
|
---|
| 502 | . . if +input=input do
|
---|
| 503 | . . . do Remove(.Array,"Should Add",+input)
|
---|
| 504 | . . if input["-" do
|
---|
| 505 | . . . new N1,N2
|
---|
| 506 | . . . set N1=$piece(input,"-",1)
|
---|
| 507 | . . . set N2=$piece(input,"-",2)
|
---|
| 508 | . . . do Remove(.Array,"Should Add",N1,N2)
|
---|
| 509 | . . set input="R"
|
---|
| 510 |
|
---|
| 511 | do Lock50dot6
|
---|
| 512 | quit
|
---|
| 513 |
|
---|
| 514 |
|
---|
| 515 | Remove(Array,Label,Num,EndNum)
|
---|
| 516 | ;"Purpose: To remove name(s) from Array of additions to VA GENERIC file
|
---|
| 517 | ;"Input: Array -- PASS BY REFERENCE, array holding data, As created by CheckGenerics()
|
---|
| 518 | ;" Label -- the section of the array to extract from (i.e. "Already Present", or "Should Add" etc.)
|
---|
| 519 | ;" Num -- entry number to add
|
---|
| 520 | ;" EndNum -- OPTIONAL. If supplied, then range of Num-EndNum are all added.
|
---|
| 521 | ;"Output: Those values that are removed are changed to a different node, i.e.
|
---|
| 522 | ;" Array("Should Add",count,Generic)=""
|
---|
| 523 | ;"Results: none
|
---|
| 524 |
|
---|
| 525 | set EndNum=$get(EndNum,Num)
|
---|
| 526 | new i,Generic,Y
|
---|
| 527 |
|
---|
| 528 | for i=Num:1:EndNum do
|
---|
| 529 | . set Generic=$order(Array(Label,i,""))
|
---|
| 530 | . if Generic'="" do
|
---|
| 531 | . . ;"set Array("Rescan",i,Generic)=""
|
---|
| 532 | . . set Array("Should Add",i,Generic)=""
|
---|
| 533 | . . kill Array(Label,i)
|
---|
| 534 |
|
---|
| 535 | quit
|
---|
| 536 |
|
---|
| 537 |
|
---|
| 538 | CustLookup(Array,Label,Num)
|
---|
| 539 | ;"Purpose: To manually link entry in Array to an existing entry in VA GENERIC file
|
---|
| 540 | ;"Input: Array -- PASS BY REFERENCE, array holding data, As created by CheckGenerics()
|
---|
| 541 | ;" Results are passed back in Array
|
---|
| 542 | ;" Array(GENERIC NAME)=IEN in VA GENERIC file^Name
|
---|
| 543 | ;" Array(GENERIC NAME)=IEN in VA GENERIC file^Name
|
---|
| 544 | ;" Label -- the section of the array to extract from (i.e. "Already Present", or "Should Add" etc.)
|
---|
| 545 | ;" Num -- entry number to add
|
---|
| 546 | ;"Results: none
|
---|
| 547 |
|
---|
| 548 | new DIC,X,Y,Generic
|
---|
| 549 | set DIC=50.6
|
---|
| 550 | set DIC(0)="AEQM"
|
---|
| 551 |
|
---|
| 552 | set Generic=$order(Array(Label,Num,""))
|
---|
| 553 | if Generic'="" do
|
---|
| 554 | . write !,"Look up an entry to match with: ",Generic
|
---|
| 555 | . do ^DIC
|
---|
| 556 | . if +Y>0 do
|
---|
| 557 | . . kill Array(Label,Num,Generic)
|
---|
| 558 | . . set Array(Generic)=Y
|
---|
| 559 |
|
---|
| 560 | quit
|
---|
| 561 |
|
---|
| 562 |
|
---|
| 563 | DoAdds(Array,Label,Num,EndNum)
|
---|
| 564 | ;"Purpose: To extract name(s) from Array and add to VA GENERIC file, via Add1Generic
|
---|
| 565 | ;"Input: Array -- PASS BY REFERENCE, array holding data, As created by CheckGenerics()
|
---|
| 566 | ;" Results -- PASS BY REFERENCE. An OUT array to received results
|
---|
| 567 | ;" Results(GENERIC NAME)=IEN in VA GENERIC file^Name
|
---|
| 568 | ;" Results(GENERIC NAME)=IEN in VA GENERIC file^Name
|
---|
| 569 | ;" Label -- the section of the array to extract from (i.e. "Already Present", or "Should Add" etc.)
|
---|
| 570 | ;" Num -- entry number to add
|
---|
| 571 | ;" EndNum -- OPTIONAL. If supplied, then range of Num-EndNum are all added.
|
---|
| 572 | ;"Results: none
|
---|
| 573 |
|
---|
| 574 | set EndNum=$get(EndNum,Num)
|
---|
| 575 | new i,Generic,Y
|
---|
| 576 |
|
---|
| 577 | for i=Num:1:EndNum do
|
---|
| 578 | . set Generic=$order(Array(Label,i,""))
|
---|
| 579 | . if Generic'="" do
|
---|
| 580 | . . set Y=$$Add1Generic(Generic)
|
---|
| 581 | . . if +Y>0 do
|
---|
| 582 | . . . set Array(Generic)=Y
|
---|
| 583 | . . . kill Array(Label,i,Generic)
|
---|
| 584 | . . . ;"set Array("Already Present",i,Generic)=Y
|
---|
| 585 |
|
---|
| 586 | quit
|
---|
| 587 |
|
---|
| 588 |
|
---|
| 589 | Add1Generic(Name)
|
---|
| 590 | ;"Purpose: To add on entry to the VA GENERIC FILE
|
---|
| 591 | ;"Input: the name of the genric to be added. Should be 3-64 characters in length
|
---|
| 592 | ;"Results: returns the added entry: IEN^NAME, or -1 if Fileman error
|
---|
| 593 | ;"Note: This function assumes that the file as been UNLOCKED via Unlock50dot6
|
---|
| 594 |
|
---|
| 595 | new X,DIC
|
---|
| 596 | set DIC=50.6
|
---|
| 597 | set DIC(0)="XL"
|
---|
| 598 | set X=Name
|
---|
| 599 | do ^DIC
|
---|
| 600 |
|
---|
| 601 | quit Y
|
---|
| 602 |
|
---|
| 603 |
|
---|
| 604 | ;"--------------------------------
|
---|
| 605 |
|
---|
| 606 | HandleQAdds(Array)
|
---|
| 607 | ;"Purpose: To review 'Uncertain Matches' node of Array and allow user to specify whether
|
---|
| 608 | ;" to accept equivilence of match, or to disallow link and add new GENERIC name.
|
---|
| 609 | ;"Input: Array -- PASS BY REFERENCE the array generated by CheckGenerics
|
---|
| 610 | ;" Results are passed back in Array
|
---|
| 611 | ;" Array(GENERIC NAME)=IEN in VA GENERIC file
|
---|
| 612 | ;" Array(GENERIC NAME)=IEN in VA GENERIC file
|
---|
| 613 | ;" Array(GENERIC NAME)=IEN in VA GENERIC file
|
---|
| 614 | ;"Output: results returned in Results array, as above.
|
---|
| 615 | ;"Results: none
|
---|
| 616 |
|
---|
| 617 | do Unlock50dot6
|
---|
| 618 |
|
---|
| 619 | new done set done=0
|
---|
| 620 | new input set input="R"
|
---|
| 621 |
|
---|
| 622 | for do quit:(done=1)
|
---|
| 623 | . if input="R" do
|
---|
| 624 | . . write !!
|
---|
| 625 | . . write "-------------------------------------------------------------------",!
|
---|
| 626 | . . write "Specify which links between New --> Existing GENERIC names are OK",!
|
---|
| 627 | . . write "-------------------------------------------------------------------",!
|
---|
| 628 | . . do ShowList(.Array,"Uncertain Matches")
|
---|
| 629 | . . write "-------------------------------------------------------------------",!
|
---|
| 630 | . . write "Specify which links between New --> Existing GENERIC names are OK",!
|
---|
| 631 | . . write "-------------------------------------------------------------------",!
|
---|
| 632 | . write " R to refresh, ? for instructions",!
|
---|
| 633 | . write " # or #-#, ^ to continue, X remove from list",!
|
---|
| 634 | . write "Enter number(s) to ACCEPT (or codes listed above): ^//"
|
---|
| 635 | . read input,!
|
---|
| 636 | . if input="" set input="^"
|
---|
| 637 | . set input=$$UP^XLFSTR(input)
|
---|
| 638 | . if input="^" set done=1
|
---|
| 639 | . if (input="?") do
|
---|
| 640 | . . ;"do ShowInstructions
|
---|
| 641 | . . set input="R"
|
---|
| 642 | . if +input=input do
|
---|
| 643 | . . do DoLinks(.Array,+input)
|
---|
| 644 | . . set input="R"
|
---|
| 645 | . if input["-" do
|
---|
| 646 | . . new N1,N2
|
---|
| 647 | . . set N1=$piece(input,"-",1)
|
---|
| 648 | . . set N2=$piece(input,"-",2)
|
---|
| 649 | . . do DoLinks(.Array,N1,N2)
|
---|
| 650 | . . set input="R"
|
---|
| 651 | . if input="S" do
|
---|
| 652 | . . read "Enter number to re-SCAN: ",input,!
|
---|
| 653 | . . if +input=input do
|
---|
| 654 | . . . do Rescan(.Array,"Uncertain Matches",+input)
|
---|
| 655 | . if input="X" do
|
---|
| 656 | . . read "Enter number(s) to REMOVE from list: ",input,!
|
---|
| 657 | . . if +input=input do
|
---|
| 658 | . . . do Remove(.Array,"Uncertain Matches",+input)
|
---|
| 659 | . . if input["-" do
|
---|
| 660 | . . . new N1,N2
|
---|
| 661 | . . . set N1=$piece(input,"-",1)
|
---|
| 662 | . . . set N2=$piece(input,"-",2)
|
---|
| 663 | . . . ;"do Remove(.Array,"Uncertain Matches",N1,N2)
|
---|
| 664 | . . set input="R"
|
---|
| 665 |
|
---|
| 666 | do Lock50dot6
|
---|
| 667 | quit
|
---|
| 668 |
|
---|
| 669 |
|
---|
| 670 | DoLinks(Array,Num,EndNum)
|
---|
| 671 | ;"Purpose: To change a link from the "Uncertain Matches" node, to a formal link
|
---|
| 672 | ;"Input: Array -- PASS BY REFERENCE the array generated by CheckGenerics
|
---|
| 673 | ;" Results are passed back in Array
|
---|
| 674 | ;" Array(GENERIC NAME)=IEN in VA GENERIC file^Name
|
---|
| 675 | ;" Array(GENERIC NAME)=IEN in VA GENERIC file^Name
|
---|
| 676 | ;" Array(GENERIC NAME)=IEN in VA GENERIC file^Name
|
---|
| 677 | ;" Num -- entry number to add
|
---|
| 678 | ;" EndNum -- OPTIONAL. If supplied, then range of Num-EndNum are all added.
|
---|
| 679 | ;"Results: none
|
---|
| 680 |
|
---|
| 681 | set EndNum=$get(EndNum,Num)
|
---|
| 682 | new i,TMGGeneric,VAGeneric,Y
|
---|
| 683 |
|
---|
| 684 | for i=Num:1:EndNum do
|
---|
| 685 | . set TMGGeneric=$order(Array("Uncertain Matches",i,""))
|
---|
| 686 | . if TMGGeneric'="" do
|
---|
| 687 | . . if $data(Array("Uncertain Matches",i,TMGGeneric))>0 do
|
---|
| 688 | . . . set VAGeneric=$order(Array("Uncertain Matches",i,TMGGeneric,""))
|
---|
| 689 | . . . set Y=$get(Array("Uncertain Matches",i,TMGGeneric,VAGeneric))
|
---|
| 690 | . . else do ;"pick from multiple options.
|
---|
| 691 | . . . set Y=$$DoMltLink(.Array,i,TMGGeneric)
|
---|
| 692 | . . if +Y>0 do
|
---|
| 693 | . . . ;"kill Array("Uncertain Matches",i,TMGGeneric,VAGeneric)
|
---|
| 694 | . . . kill Array("Uncertain Matches",i,TMGGeneric)
|
---|
| 695 | . . . set Array(TMGGeneric)=Y
|
---|
| 696 |
|
---|
| 697 | quit
|
---|
| 698 |
|
---|
| 699 | DoMltLink(Array,Num,TMGGeneric)
|
---|
| 700 | ;"Purpose: To interact with user and pick which link (amoung multiple)
|
---|
| 701 | ;"Input: Array -- PASS BY REFERENCE. Array as created by CheckGenerics
|
---|
| 702 | ;" Num -- The number in the "Uncertain Matches" to pick amoung.
|
---|
| 703 | ;" TMGGeneric -- the Generic Name for to look for a match to
|
---|
| 704 | ;"Results: The selected link: i.e. IEN^Name, or "" if not found
|
---|
| 705 |
|
---|
| 706 |
|
---|
| 707 | new VAGeneric,j,tempResults
|
---|
| 708 | new name,input,result
|
---|
| 709 | new NumAnswers set NumAnswers=0
|
---|
| 710 |
|
---|
| 711 | set VAGeneric=$order(Array("Uncertain Matches",Num,TMGGeneric,""))
|
---|
| 712 | if VAGeneric'="" for j=1:1 do quit:(VAGeneric="")
|
---|
| 713 | . set tempResults(j)=$get(Array("Uncertain Matches",Num,TMGGeneric,VAGeneric))
|
---|
| 714 | . set NumAnswers=j
|
---|
| 715 | . set VAGeneric=$order(Array("Uncertain Matches",Num,TMGGeneric,VAGeneric))
|
---|
| 716 |
|
---|
| 717 | if NumAnswers=1 set result=$get(tempResult(1)) goto DMLDone
|
---|
| 718 |
|
---|
| 719 | write "Please select match for ",TMGGeneric,!
|
---|
| 720 | for j=1:1 do quit:(name="")
|
---|
| 721 | . set name=$get(tempResult(j))
|
---|
| 722 | . if name="" quit
|
---|
| 723 | . write " ",j,". ",$piece(name,"^",2),!
|
---|
| 724 |
|
---|
| 725 | read "Enter number of match (^ to quit): ^// ",input,!
|
---|
| 726 | set result=$get(tempResult(+input))
|
---|
| 727 |
|
---|
| 728 | DMLDone
|
---|
| 729 | quit result
|
---|
| 730 |
|
---|
| 731 |
|
---|
| 732 | ;"===========================================================================
|
---|
| 733 |
|
---|
| 734 | FillCompFile(Array)
|
---|
| 735 | ;"Purpose: To take the list (generated in FillGenerics(), with its linkages
|
---|
| 736 | ;" between new drug names and existing drug name data, and fill
|
---|
| 737 | ;" in field .08 in file TMG FDA IMPORT COMPILED
|
---|
| 738 | ;"Input: Array -- PASS BY REFERENCE. List of linkages between names.
|
---|
| 739 | ;" Array(GENERIC NAME)=IEN in VA GENERIC file^Name
|
---|
| 740 | ;" Array(GENERIC NAME)=IEN in VA GENERIC file^Name
|
---|
| 741 | ;" Array(GENERIC NAME)=IEN in VA GENERIC file^Name
|
---|
| 742 | ;"Output: Data is put into TMG FDA IMPORT COMPILED
|
---|
| 743 | ;"Results: none
|
---|
| 744 |
|
---|
| 745 | write "Filling field .08 (VA GENERIC) in file TMG FDA IMPORT COMPILED",!
|
---|
| 746 | write "based on data from field .07 (GENERIC NAME)...",!
|
---|
| 747 |
|
---|
| 748 | new TMGGeneric,VAGeneric
|
---|
| 749 | new IEN,oldval
|
---|
| 750 | new count set count=0
|
---|
| 751 |
|
---|
| 752 | new Itr,IEN
|
---|
| 753 | set IEN=$$ItrInit^TMGITR(22706.9,.Itr)
|
---|
| 754 | do PrepProgress^TMGITR(.Itr,20,0,"IEN")
|
---|
| 755 | if IEN'="" for do quit:($$ItrNext^TMGITR(.Itr,.IEN)'>0)
|
---|
| 756 | . if $piece($get(^TMG(22706.9,IEN,1)),"^",4)=1 quit ;"1=SKIP
|
---|
| 757 | . set TMGGeneric=$piece($get(^TMG(22706.9,IEN,0)),"^",6) ;"0;6 --> field .07, GENERIC NAME
|
---|
| 758 | . set oldval=$piece($get(^TMG(22706.9,IEN,1)),"^",3) ;"1;3 --> field .08, VA GENERIC
|
---|
| 759 | . if (+oldval'=0)!(TMGGeneric="") quit
|
---|
| 760 | . set VAGeneric=$get(Array(TMGGeneric))
|
---|
| 761 | . if +VAGeneric>0 do
|
---|
| 762 | . . if +VAGeneric'=oldval do
|
---|
| 763 | . . new TMGFDA,TMGMSG
|
---|
| 764 | . . set TMGFDA(22706.9,IEN_",",.08)=+VAGeneric
|
---|
| 765 | . . do FILE^DIE("K","TMGFDA","TMGMSG")
|
---|
| 766 | . . do ShowIfDIERR^TMGDEBUG(.TMGMSG)
|
---|
| 767 | . . set count=count+1
|
---|
| 768 | . . ;"write "Stored ",$piece(VAGeneric,"^",2)," in record# ",IEN,!
|
---|
| 769 | . else do
|
---|
| 770 | . . write !,"Can't find entry for: ",TMGGeneric,!
|
---|
| 771 | do ProgressDone^TMGITR(.Itr)
|
---|
| 772 | write count," records modified.",!
|
---|
| 773 |
|
---|
| 774 | quit
|
---|
| 775 |
|
---|
| 776 |
|
---|
| 777 |
|
---|