| 1 | LEXXGI ;ISL/KER/FJF - Global Import (Needs ^LEXM) ;04/22/2008
 | 
|---|
| 2 |  ;;2.0;LEXICON UTILITY;**4,25,26,27,28,29,46,49,50,41**;Sep 23, 1996;Build 34
 | 
|---|
| 3 |  ;              
 | 
|---|
| 4 |  ; NEWed by Lexicon Environment Check routine LEX20nn
 | 
|---|
| 5 |  ;    LEXBUILD
 | 
|---|
| 6 |  ;    LEXFY
 | 
|---|
| 7 |  ;    LEXIGHF
 | 
|---|
| 8 |  ;    LEXLREV
 | 
|---|
| 9 |  ;    LEXPTYPE
 | 
|---|
| 10 |  ;    LEXQTR
 | 
|---|
| 11 |  ;    LEXREQP
 | 
|---|
| 12 |  ;              
 | 
|---|
| 13 |  ; NEWed by KIDS during the Install of a patch/build
 | 
|---|
| 14 |  ;    XPDNM
 | 
|---|
| 15 |  ;              
 | 
|---|
| 16 |  ; Global Variables
 | 
|---|
| 17 |  ;    ^LEXM
 | 
|---|
| 18 |  ;              
 | 
|---|
| 19 |  ; External References
 | 
|---|
| 20 |  ;    DBIA 10086  HOME^%ZIS
 | 
|---|
| 21 |  ;    DBIA 10016  ^DIM
 | 
|---|
| 22 |  ;    DBIA  2056  $$GET1^DIQ (file 200)
 | 
|---|
| 23 |  ;    DBIA 10103  $$DT^XLFDT
 | 
|---|
| 24 |  ;    DBIA 10103  $$FMTE^XLFDT
 | 
|---|
| 25 |  ;    DBIA 10141  BMES^XPDUTL 
 | 
|---|
| 26 |  ;    DBIA 10141  MES^XPDUTL
 | 
|---|
| 27 |  ;              
 | 
|---|
| 28 | EN ; Main Entry Point for Installing LEXM in Post-Installs
 | 
|---|
| 29 |  ;                
 | 
|---|
| 30 |  ; Requires 
 | 
|---|
| 31 |  ;                
 | 
|---|
| 32 |  ;   LEXBUILD - the name of the patch/build being installed
 | 
|---|
| 33 |  ;                
 | 
|---|
| 34 |  ; Uses
 | 
|---|
| 35 |  ;                
 | 
|---|
| 36 |  ;   LEXMSG   - If this variable exist, then an install message
 | 
|---|
| 37 |  ;              message will be set to G.LEXICON
 | 
|---|
| 38 |  ;              
 | 
|---|
| 39 |  ;   LEXSHORT - If this variable exist, the install message
 | 
|---|
| 40 |  ;              will be an abbreviated message, without the 
 | 
|---|
| 41 |  ;              file totals and checksums
 | 
|---|
| 42 |  ;               
 | 
|---|
| 43 |  ;              Abbreviated Install Message
 | 
|---|
| 44 |  ;               
 | 
|---|
| 45 |  ;                Date and Time Installed
 | 
|---|
| 46 |  ;                Account where the Data was Installed
 | 
|---|
| 47 |  ;                Who Installed the Data
 | 
|---|
| 48 |  ;                The Name of the Build Installed
 | 
|---|
| 49 |  ;                The Name of the Global Host File
 | 
|---|
| 50 |  ;                Protocol Invoked
 | 
|---|
| 51 |  ;                Date and time Protocol was Invoked
 | 
|---|
| 52 |  ;                Install Start Date/Time
 | 
|---|
| 53 |  ;                Install Complete Date/Time
 | 
|---|
| 54 |  ;                Install Elapsed Time
 | 
|---|
| 55 |  ;               
 | 
|---|
| 56 |  ;              Long Install Message
 | 
|---|
| 57 |  ;               
 | 
|---|
| 58 |  ;                All of the elements above plus:
 | 
|---|
| 59 |  ;               
 | 
|---|
| 60 |  ;                   File Versions/Revisions
 | 
|---|
| 61 |  ;                   File Checksums
 | 
|---|
| 62 |  ;                   File Record Counts
 | 
|---|
| 63 |  ;              
 | 
|---|
| 64 |  ;   LEXPTYPE - Patch Type
 | 
|---|
| 65 |  ;   LEXLREV  - Revision
 | 
|---|
| 66 |  ;   LEXREQP  - Required Patches/Builds
 | 
|---|
| 67 |  ;   LEXIGHF  - The patch Export Global Host Filename
 | 
|---|
| 68 |  ;   LEXFY    - Fiscal Year
 | 
|---|
| 69 |  ;   LEXQTR   - Quarter
 | 
|---|
| 70 |  ;   LEXCRE   - Import Global Creation Date
 | 
|---|
| 71 |  ;                
 | 
|---|
| 72 |  D IMPORT D KALL^LEXXGI2
 | 
|---|
| 73 |  Q
 | 
|---|
| 74 | TASK ; Queue Lexicon Update with Taskman
 | 
|---|
| 75 |  N Y,ZTRTN,ZTDESC,ZTIO,ZTDTH,ZTSK,ZTSAVE,ZTQUEUED
 | 
|---|
| 76 |  S:$D(LEXBUILD) ZTSAVE("LEXBUILD")=""
 | 
|---|
| 77 |  S:$D(LEXMSG) ZTSAVE("LEXMSG")=""
 | 
|---|
| 78 |  S:$D(LEXSHORT) ZTSAVE("LEXSHORT")=""
 | 
|---|
| 79 |  S:$D(LEXPTYPE) ZTSAVE("LEXPTYPE")=""
 | 
|---|
| 80 |  S:$D(LEXLREV) ZTSAVE("LEXLREV")=""
 | 
|---|
| 81 |  S:$D(LEXREQP) ZTSAVE("LEXREQP")=""
 | 
|---|
| 82 |  S:$D(LEXIGHF) ZTSAVE("LEXIGHF")=""
 | 
|---|
| 83 |  S:$D(LEXFY) ZTSAVE("LEXFY")=""
 | 
|---|
| 84 |  S:$D(LEXQTR) ZTSAVE("LEXQTR")=""
 | 
|---|
| 85 |  S:$D(LEXCRE) ZTSAVE("LEXCRE")=""
 | 
|---|
| 86 |  S ZTRTN="EN^LEXXGI",ZTDESC="Importing Updated Lexicon Data"
 | 
|---|
| 87 |  S ZTIO="",ZTDTH=$H
 | 
|---|
| 88 |  D ^%ZTLOAD,HOME^%ZIS
 | 
|---|
| 89 |  Q
 | 
|---|
| 90 | IMPORT ; Import Data during a Patch Installation
 | 
|---|
| 91 |  S:$D(ZTQUEUED) ZTREQ="@"
 | 
|---|
| 92 |  S:$L($G(LEXPTYPE)) LEXPTYPE=$G(LEXPTYPE) S:$L($G(LEXLREV)) LEXLREV=$G(LEXLREV) S:$L($G(LEXREQP)) LEXREQP=$G(LEXREQP)
 | 
|---|
| 93 |  S:$L($G(LEXBUILD)) LEXBUILD=$G(LEXBUILD) S:$L($G(LEXIGHF)) LEXIGHF=$G(LEXIGHF) S:$L($G(LEXFY)) LEXFY=$G(LEXFY)
 | 
|---|
| 94 |  S:$L($G(LEXQTR)) LEXQTR=$G(LEXQTR) K LEXSCHG,LEXCHG
 | 
|---|
| 95 |  N LEXB,LEXCD,LEXSTR,LEXLAST,%,%DT,C,D,D0,D1,D2,DG,DIC,DICR,DILOCKTM,DIW,IREC,J,XMDUN,XMZ,ZTSK
 | 
|---|
| 96 |  S U="^",LEXSTR=$G(LEXPTYPE),LEXB=$G(^LEXM(0,"BUILD"))
 | 
|---|
| 97 |  S:$L($G(LEXFY))&($L($G(LEXQTR)))&($L(LEXSTR)) LEXSTR=LEXSTR_" for "_$G(LEXFY)_" "_$G(LEXQTR)_" Quarter"
 | 
|---|
| 98 |  S:$L(LEXB) LEXBLD=LEXB S:'$L(LEXBLD)&($L(LEXBUILD)) LEXBLD=LEXBUILD
 | 
|---|
| 99 |  I '$L(LEXB)!(LEXB'=LEXBUILD) D
 | 
|---|
| 100 |  . N X,LEXBLD I '$L(LEXB) D  Q
 | 
|---|
| 101 |  . . S X=" Invalid export global, aborting data install" W:'$D(XPDNM) !!,X D:$D(XPDNM) BMES^XPDUTL(X) W:'$D(XPDNM) ! D:$D(XPDNM) MES^XPDUTL(" ")
 | 
|---|
| 102 |  . I '$L(LEXBUILD) D  Q
 | 
|---|
| 103 |  . . S X=" Undefined KIDS Build, aborting data install" W:'$D(XPDNM) !!,X D:$D(XPDNM) BMES^XPDUTL(X) W:'$D(XPDNM) ! D:$D(XPDNM) MES^XPDUTL(" ")
 | 
|---|
| 104 |  I $L(LEXB)&(LEXB=LEXBUILD) D
 | 
|---|
| 105 |  . N LEXFI,LEXID S X="Installing Data for patch "_LEXB W:'$D(XPDNM) !!,X D:$D(XPDNM) BMES^XPDUTL(X) W:'$D(XPDNM) ! D:$D(XPDNM) MES^XPDUTL(" ")
 | 
|---|
| 106 |  . K LEXSCHG S LEXCHG=0,LEXFI=0 F  S LEXFI=$O(^LEXM(LEXFI)) Q:+LEXFI'>0  D
 | 
|---|
| 107 |  . . S LEXID=$S(LEXFI=80!(LEXFI=80.1):"ICD",LEXFI=81!(LEXFI=81.1)!(LEXFI=81.2)!(LEXFI=81.3):"CPT",$P(LEXFI,".",1)=757:"LEX",1:"UNK")
 | 
|---|
| 108 |  . . S LEXSCHG(LEXFI,0)=+($G(^LEXM(LEXFI,0))),LEXSCHG("B",LEXFI)="" S LEXSCHG("C",LEXID,LEXFI)=""
 | 
|---|
| 109 |  . S:$D(LEXSCHG("C","CPT"))!($D(LEXSCHG("C","ICD"))) LEXSCHG("D","PRO")="",LEXCHG=1,LEXSCHG(0)=1
 | 
|---|
| 110 |  . D LOAD,NOTIFY^LEXXGI2 I +($G(DUZ))>0,$L($$GET1^DIQ(200,(+($G(DUZ))_","),.01)) D
 | 
|---|
| 111 |  . . D HOME^%ZIS N DIFROM,LEXPRO,LEXPRON,LEXLAST S LEXPRON="LEXICAL SERVICES UPDATE",LEXPRO=$G(^LEXM(0,"PRO")) D:$D(LEXMSG) POST^LEXXFI
 | 
|---|
| 112 |  Q
 | 
|---|
| 113 | LOAD ; Load Data from ^LEXM into IC*/LEX Files
 | 
|---|
| 114 |  Q:'$L($G(LEXB))  S:$D(ZTQUEUED) ZTREQ="@"
 | 
|---|
| 115 |  N LEXBEG,LEXELP,LEXEND,LEXMSG,LEXOK,LEXFL
 | 
|---|
| 116 |  D:'$D(^LEXM) NF^LEXXGI2 Q:'$D(^LEXM)
 | 
|---|
| 117 |  S LEXOK=0 S:$O(^LEXM(0))>0 LEXOK=1 D:'LEXOK IG^LEXXGI2 Q:'LEXOK
 | 
|---|
| 118 |  S LEXBEG=$$HACK^LEXXGI2 D FILES S LEXEND=$$HACK^LEXXGI2,LEXELP=$$ELAP^LEXXGI2(LEXBEG,LEXEND)
 | 
|---|
| 119 |  S:LEXELP="" LEXELP="00:00:00"
 | 
|---|
| 120 |  D PB^LEXXGI2("  Data Updated ")
 | 
|---|
| 121 |  D PB^LEXXGI2(("     Started:   "_$TR($$FMTE^XLFDT(LEXBEG),"@"," ")))
 | 
|---|
| 122 |  D TL^LEXXGI2(("     Finished:  "_$TR($$FMTE^XLFDT(LEXEND),"@"," ")))
 | 
|---|
| 123 |  D TL^LEXXGI2(("     Elapsed:   "_LEXELP))
 | 
|---|
| 124 |  Q
 | 
|---|
| 125 | FILES ;   Load Data for all files
 | 
|---|
| 126 |  Q:'$L($G(LEXB))  N LEXHDR,LEXBLD,LEXDAT,LEXFI,LEXFIC,LEXHDRS,LEXLOG,LEXINS
 | 
|---|
| 127 |  S (LEXFI,LEXFIC)=0,LEXHDR=0,LEXBLD=LEXB
 | 
|---|
| 128 |  S LEXDAT=$P($G(^LEXM(0,"VRRVDT")),"^",1),LEXINS=1
 | 
|---|
| 129 |  S:+LEXDAT'>0 LEXDAT=$$DT^XLFDT I LEXOK D
 | 
|---|
| 130 |  . N LEXCRE,LEXL1 S LEXL1="" S LEXCRE=$G(^LEXM(0,"CREATED")) S LEXCRE=$S(+LEXCRE>0:($$MIX^LEXXGI2($$FMTE^XLFDT(LEXCRE))),1:"")
 | 
|---|
| 131 |  . S:$L($P(LEXCRE,"@",2)) LEXCRE=$P(LEXCRE,"@",1)_" at "_$P(LEXCRE,"@",2) S LEXL1=" Updating files "
 | 
|---|
| 132 |  . S:$L($G(LEXCRE))&($L($G(LEXL1))) LEXL1=$G(LEXL1)_"using export global created "_$G(LEXCRE)
 | 
|---|
| 133 |  . D PB^LEXXGI2(LEXL1)
 | 
|---|
| 134 |  F  S LEXFI=$O(^LEXM(LEXFI)) Q:+LEXFI=0  D FILE
 | 
|---|
| 135 |  Q
 | 
|---|
| 136 | FILE ;     Load Data for one file
 | 
|---|
| 137 |  N LEXCF,LEXCHG,LEXCHGS,LEXCNT,LEXFIL,LEXI,LEXID,LEXIEN,LEXL,LEXLC
 | 
|---|
| 138 |  N LEXMUMPS,LEXNM,LEXRT,LEXS,LEXTOT,LEXTXT,LEXIGL,LEXIGI,LEXIGF,LEXIGT
 | 
|---|
| 139 |  N LEXIGD,LEXIGO,LEXBEG,LEXEND,LEXELP,LEXFB
 | 
|---|
| 140 |  S LEXFB=$G(^LEXM(+LEXFI,0,"BUILD")),LEXIGO=0,LEXBEG=$$HACK^LEXXGI2
 | 
|---|
| 141 |  S (LEXCNT,LEXLC,LEXI)=0,LEXL=68,LEXFIC=LEXFIC+1 I LEXOK D
 | 
|---|
| 142 |  . N LEXB,LEXFID,LEXNM,LEXVR,LEXRV,LEXDT,LEXL1,LEXL2 S (LEXL1,LEXL2)="",LEXFID=$P(LEXFI,".",1)
 | 
|---|
| 143 |  . Q:+LEXFID'>0  Q:$D(LEXHDRS(+LEXFID))  S LEXHDRS(LEXFID)="" S:+LEXFI=81!(+LEXFI=81.3) LEXHDRS(81)="",LEXHDRS(81.3)=""
 | 
|---|
| 144 |  . S:LEXFID=80 LEXNM="ICD-9-CM" S:LEXFID=81 LEXNM="CPT-4/HCPCS" S:LEXFID=757 LEXNM="Lexicon" S LEXB=$G(^LEXM(LEXFI,0,"BUILD"))
 | 
|---|
| 145 |  . S LEXVR=$G(^LEXM(LEXFI,0,"VR")),LEXRV=$G(^LEXM(LEXFI,0,"VRRV")),LEXDT=$$MIX^LEXXGI2($$FMTE^XLFDT($P(LEXRV,"^",2))),LEXRV=$P(LEXRV,"^",1)
 | 
|---|
| 146 |  . S LEXL1="Updating "_LEXNM S:$L(LEXB) LEXL1=LEXL1_" with patch/build "_LEXB S:$L(LEXVR) LEXL2=" To version "_LEXVR
 | 
|---|
| 147 |  . S:$L(LEXVR)&($L(LEXRV)) LEXL2=LEXL2_" revision "_LEXRV S:$L(LEXVR)&($L(LEXRV))&($L(LEXDT)) LEXL2=LEXL2_" dated "_LEXDT
 | 
|---|
| 148 |  . S:$L(LEXL1) LEXL1=" "_LEXL1 S:$L(LEXL2) LEXL2=" "_LEXL2 D BL^LEXXGI2 D:$L(LEXL1) TL^LEXXGI2(LEXL1) D:$L(LEXL2) TL^LEXXGI2(LEXL2),BL^LEXXGI2
 | 
|---|
| 149 |  S LEXTOT=+($G(^LEXM(LEXFI,0))) G:LEXTOT=0 FILEQ
 | 
|---|
| 150 |  S LEXNM=$G(^LEXM(LEXFI,0,"NM"))
 | 
|---|
| 151 |  I $L(LEXNM),$$UP^LEXXGI2(LEXNM)'["FILE" S LEXNM=LEXNM_" FILE"
 | 
|---|
| 152 |  S:$L(LEXNM) LEXNM=$$MIX^LEXXGI2(LEXNM) S LEXCHG=$G(^LEXM(LEXFI,0))
 | 
|---|
| 153 |  S LEXTXT="   "_LEXNM,LEXTXT=LEXTXT_$J("",(40-$L(LEXTXT)))_LEXFI
 | 
|---|
| 154 |  D:LEXFIC=1 PB^LEXXGI2(LEXTXT) D:LEXFIC'=1 TL^LEXXGI2(LEXTXT)
 | 
|---|
| 155 |  S LEXS=+(LEXTOT\LEXL) S:LEXS=0 LEXS=1 W:+($O(^LEXM(LEXFI,0)))>0 !,"   "
 | 
|---|
| 156 |  D UPCHG^LEXXGI2 F  S LEXI=$O(^LEXM(LEXFI,LEXI)) Q:+LEXI=0  D
 | 
|---|
| 157 |  . S LEXCNT=LEXCNT+1,LEXMUMPS=$G(^LEXM(LEXFI,LEXI))
 | 
|---|
| 158 |  . I LEXCNT'<LEXS S LEXLC=LEXLC+1 W:LEXLC'>LEXL "." S LEXCNT=0
 | 
|---|
| 159 |  . S LEXRT=$P(LEXMUMPS,"^",2),LEXFIL=""
 | 
|---|
| 160 |  . S:LEXMUMPS["^LEX("!(LEXMUMPS["^LEXT(")!(LEXMUMPS["^LEXC(") LEXFIL=+($P(LEXRT,"(",2)),LEXFL(+($P(LEXRT,"(",2)))=""
 | 
|---|
| 161 |  . S:LEXMUMPS["^ICD9(" LEXFIL=80,LEXFL(80)=""
 | 
|---|
| 162 |  . S:LEXMUMPS["^ICD0(" LEXFIL=80.1,LEXFL(80.1)=""
 | 
|---|
| 163 |  . S:LEXMUMPS["^ICPT(" LEXFIL=81,LEXFL(81)=""
 | 
|---|
| 164 |  . S:LEXMUMPS["^DIC(81.3" LEXFIL=81.3,LEXFL(81.3)=""
 | 
|---|
| 165 |  . S:LEXMUMPS["^DIC(81.2" LEXFIL=81.2,LEXFL(81.2)=""
 | 
|---|
| 166 |  . S:LEXMUMPS["^LEX("!(LEXMUMPS["^LEXT(")!(LEXMUMPS["^LEXC(") LEXFIL=+($P(LEXRT,"(",2))
 | 
|---|
| 167 |  . S:LEXMUMPS["^ICD9(" LEXFIL=80 S:LEXMUMPS["^ICD0(" LEXFIL=80.1
 | 
|---|
| 168 |  . S:LEXMUMPS["^ICPT(" LEXFIL=81 S:LEXMUMPS["^DIC(81.3" LEXFIL=81.3
 | 
|---|
| 169 |  . S:+LEXFIL>0 LEXSCHG(+LEXFIL,0)=""
 | 
|---|
| 170 |  . I $L(LEXMUMPS) D
 | 
|---|
| 171 |  . . N X S X=LEXMUMPS D ^DIM Q:'$D(X)  X LEXMUMPS S LEXIGO=1
 | 
|---|
| 172 |  I +($G(LEXIGO))>0 D
 | 
|---|
| 173 |  . S LEXEND=$$HACK^LEXXGI2 S LEXELP=$$ELAP^LEXXGI2(LEXBEG,LEXEND) S:LEXELP="" LEXELP="00:00:00"
 | 
|---|
| 174 | FILEQ ;     Load Data for one file - QUIT
 | 
|---|
| 175 |  K ^LEXM(+LEXFI)
 | 
|---|
| 176 |  Q
 | 
|---|
| 177 |  ;                     
 | 
|---|
| 178 | NOTIFY ; Notify by Protocol - LEXICAL SERVICES UPDATE
 | 
|---|
| 179 |  D NOTIFY^LEXXGI2,KALL^LEXXGI2
 | 
|---|
| 180 |  Q
 | 
|---|
| 181 | SCHG ;   Save Change File Changes (for NOTIFY)
 | 
|---|
| 182 |  N FI,ID K LEXSCHG S LEXCHG=0
 | 
|---|
| 183 |  N FI S FI=0 F  S FI=$O(^LEXM(FI)) Q:+FI'>0  D
 | 
|---|
| 184 |  . S ID=$S(FI=80!(FI=80.1):"ICD",FI=81!(FI=81.1)!(FI=81.2)!(FI=81.3):"CPT",$P(FI,".",1)=757:"LEX",1:"UNK")
 | 
|---|
| 185 |  . S LEXSCHG(FI,0)=+($G(^LEXM(FI,0))),LEXSCHG("B",FI)="" S LEXSCHG("C",ID,FI)=""
 | 
|---|
| 186 |  S:$D(LEXSCHG("C","CPT"))!($D(LEXSCHG("C","ICD"))) LEXSCHG("D","PRO")=""
 | 
|---|
| 187 |  S:$D(^LEXM(80))!($D(^LEXM(80.1)))!($D(^LEXM(81)))!($D(^LEXM(81.2)))!($D(^LEXM(81.3)))!($D(LEXSCHG("D","PRO"))) LEXCHG=1,LEXSCHG(0)=1
 | 
|---|
| 188 |  Q
 | 
|---|
| 189 | ZTQ ; Taskman Quit
 | 
|---|
| 190 |  K ZTDESC,ZTDTH,ZTIO,ZTQUEUED,ZTREQ,ZTRTN,ZTSAVE,ZTSK
 | 
|---|
| 191 |  Q
 | 
|---|
| 192 | CHECKSUM ; Check ^LEXM Checksum
 | 
|---|
| 193 |  D CS^LEXXGI2
 | 
|---|
| 194 |  Q
 | 
|---|