| [613] | 1 | LA7PCFG ;DALOI/JMC - Configrure Lab Point of Care Interface; Jan 12, 2004 | 
|---|
|  | 2 | ;;5.2;AUTOMATED LAB INSTRUMENTS;**67**;Sep 27, 1994 | 
|---|
|  | 3 | ; | 
|---|
|  | 4 | ; Reference to DIV4^XUSER supported by DBIA #2533 | 
|---|
|  | 5 | Q | 
|---|
|  | 6 | ; | 
|---|
|  | 7 | EN ; Configure files #62.48, #62.4 and #68.2 | 
|---|
|  | 8 | N DIR,DIROUT,DIRUT,DUOUT,LA7QUIT,LRLL,X,Y | 
|---|
|  | 9 | S LRLL=0 | 
|---|
|  | 10 | F  D  Q:$D(DIRUT) | 
|---|
|  | 11 | . S DIR(0)="SO^1:LA7 MESSAGE PARAMETER (#62.48);2:LOAD/WORK LIST (#68.2);3:AUTO INSTRUMENT (#62.4);4:Print POC Test Code Mapping" | 
|---|
|  | 12 | . S DIR("A")="Select which file to setup" | 
|---|
|  | 13 | . D ^DIR | 
|---|
|  | 14 | . I $D(DIRUT) Q | 
|---|
|  | 15 | . I Y=1 D E6248 Q | 
|---|
|  | 16 | . I Y=2 D E682 Q | 
|---|
|  | 17 | . I Y=3 D E624 Q | 
|---|
|  | 18 | . I Y=4 D PRINT Q | 
|---|
|  | 19 | Q | 
|---|
|  | 20 | ; | 
|---|
|  | 21 | ; | 
|---|
|  | 22 | E6248 ; Setup/edit file #62.48 | 
|---|
|  | 23 | ; | 
|---|
|  | 24 | N DA,DIC,DIE,DIR,DIRUT,DR,DTOUT,DUOUT,LA76248,LA7TYP,X,Y | 
|---|
|  | 25 | D EN^DDIOL("","","!!") | 
|---|
|  | 26 | S DIC="^LAHM(62.48,",DIC(0)="AEMQ",DIC("S")="I $P(^(0),U,9)=20!($P(^(0),U,9)=21)" | 
|---|
|  | 27 | D ^DIC | 
|---|
|  | 28 | I Y<1 Q | 
|---|
|  | 29 | S (DA,LA76248)=+Y | 
|---|
|  | 30 | L +^LAHM(62.48,LA76248):0 | 
|---|
|  | 31 | I '$T D EN^DDIOL("Another user is editing this entry.","","!?5") Q | 
|---|
|  | 32 | D EN^DDIOL("","","!!") | 
|---|
|  | 33 | S DIR(0)="YO" | 
|---|
|  | 34 | S DIR("A")="Does this POC interface want to receive VistA ADT messages" | 
|---|
|  | 35 | S DIR("B")=$S($P($G(^LAHM(62.48,LA76248,0)),"^",9)=21:"YES",1:"NO") | 
|---|
|  | 36 | D ^DIR | 
|---|
|  | 37 | I $D(DIRUT) Q | 
|---|
|  | 38 | S LA7TYP=$S(Y=1:21,1:20) | 
|---|
|  | 39 | I LA7TYP=21 D | 
|---|
|  | 40 | . D EN^DDIOL("Remember to add the LA7POC ADT RTR event protocol to the appropriate","","!!") | 
|---|
|  | 41 | . D EN^DDIOL("ADT event protocols as specified in the Lab POC User Guide","","!") | 
|---|
|  | 42 | . D EN^DDIOL("","","!!") | 
|---|
|  | 43 | S DIE=DIC,DR="11///"_LA7TYP_";2;3;4///ON;20" | 
|---|
|  | 44 | D ^DIE | 
|---|
|  | 45 | L -^LAHM(62.48,LA76248) | 
|---|
|  | 46 | Q | 
|---|
|  | 47 | ; | 
|---|
|  | 48 | ; | 
|---|
|  | 49 | E624 ; Setup/edit file #62.4 | 
|---|
|  | 50 | ; | 
|---|
|  | 51 | N DA,DIC,DIE,DR,LA7624,LA76248,LA7ERR,LRNLT,LRX,LRY,X,Y | 
|---|
|  | 52 | ; | 
|---|
|  | 53 | D EN^DDIOL("","","!") | 
|---|
|  | 54 | S DIC="^LAB(62.4,",DIC(0)="AEMQ",DIC("S")="I $E($P(^(0),U),1,6)=""LA7POC""" | 
|---|
|  | 55 | D ^DIC | 
|---|
|  | 56 | I Y<1 Q | 
|---|
|  | 57 | S (DA,LA7624)=+Y | 
|---|
|  | 58 | L +^LAB(62.4,LA7624):0 | 
|---|
|  | 59 | I '$T D EN^DDIOL("Another user is editing this entry.","","!?5") Q | 
|---|
|  | 60 | S DIE=DIC | 
|---|
|  | 61 | S DR="3"_$S(LRLL>0:"//"_$$GET1^DIQ(68.2,LRLL_",",.01),1:"")_";8;10;11;12////0;18;30;107" | 
|---|
|  | 62 | S DR(2,62.41)=".01;S LRNLT=$$GET1^DIQ(64,+$P($G(^LAB(60,X,64)),U,2)_"","",1);2;6////^S X=LRNLT;8R;12;13;14;17;18;19;21//YES" | 
|---|
|  | 63 | D ^DIE | 
|---|
|  | 64 | ; | 
|---|
|  | 65 | ; Check if loadlist type = POC | 
|---|
|  | 66 | I $P(^LAB(62.4,LA7624,0),"^",4) D | 
|---|
|  | 67 | . S LRLL=$P(^LAB(62.4,LA7624,0),"^",4) | 
|---|
|  | 68 | . I $P(^LRO(68.2,LRLL,0),"^",3)'=2 D EN^DDIOL("**WARNING-Associated Load/Work List "_$$GET1^DIQ(68.2,LRLL_",",.01)_" is not TYPE: POINT OF CARE**","","!?2") | 
|---|
|  | 69 | ; | 
|---|
|  | 70 | ; Check if 62.4 name matches 62.48 name | 
|---|
|  | 71 | I $P(^LAB(62.4,LA7624,0),"^",8) D | 
|---|
|  | 72 | . S LRX=$$GET1^DIQ(62.48,$P(^LAB(62.4,LA7624,0),"^",8)_",",.01) | 
|---|
|  | 73 | . S LRY=$$GET1^DIQ(62.4,LA7624_",",.01) | 
|---|
|  | 74 | . I LRX'=LRY D EN^DDIOL("**WARNING-Name of entry in AUTO INSTRUMENT file should match name of MESSAGE CONFIGURATION**","","!?2") | 
|---|
|  | 75 | ; | 
|---|
|  | 76 | L -^LAB(62.4,LA7624) | 
|---|
|  | 77 | Q | 
|---|
|  | 78 | ; | 
|---|
|  | 79 | ; | 
|---|
|  | 80 | E682 ; Setup/edit file #68.2 | 
|---|
|  | 81 | N DA,DIC,DIE,DIR,DIROUT,DIRUT,DR,DUOUT,I | 
|---|
|  | 82 | N LA7ERR,LR60,LR61,LRAA,LRDIV,LRMSG,LRPROF,LRX,LRY,X,Y | 
|---|
|  | 83 | ; | 
|---|
|  | 84 | D EN^DDIOL("","","!") | 
|---|
|  | 85 | S DIC="^LRO(68.2,",DIC(0)="AELMQ" | 
|---|
|  | 86 | I LRLL>0 S DIC("B")=$$GET1^DIQ(68.2,LRLL_",",.01) | 
|---|
|  | 87 | D ^DIC | 
|---|
|  | 88 | I Y<1 Q | 
|---|
|  | 89 | S (DA,LRLL)=+Y | 
|---|
|  | 90 | L +^LRO(68.2,LRLL):0 | 
|---|
|  | 91 | I '$T D EN^DDIOL("Another user is editing this entry.","","!?5") Q | 
|---|
|  | 92 | S DIE=DIC | 
|---|
|  | 93 | S DR=".01;.02///UNIVERSAL;.03///2;.08///ACCESSION;.14;1;1.5;1.7;50" | 
|---|
|  | 94 | S DR(2,68.23)=".01;2;2.2;1" | 
|---|
|  | 95 | S DR(3,68.24)=".01;I ""IB""'[$P(^LAB(60,X,0),""^"",3) S Y=2;1R;3;4;2///NO" | 
|---|
|  | 96 | D ^DIE | 
|---|
|  | 97 | L -^LRO(68.2,LRLL) | 
|---|
|  | 98 | W ! | 
|---|
|  | 99 | ; | 
|---|
|  | 100 | S LRPROF=$O(^LRO(68.2,LRLL,10,0)) | 
|---|
|  | 101 | I LRPROF<1 D  Q | 
|---|
|  | 102 | . D EN^DDIOL($C(7)_"*** Need at least one profile for POC interface ***","","!!") | 
|---|
|  | 103 | ; | 
|---|
|  | 104 | I $O(^LRO(68.2,LRLL,10,LRPROF)) D  Q | 
|---|
|  | 105 | . D EN^DDIOL($C(7)_"*** Only one profile should exist for POC interface ***","","!!") | 
|---|
|  | 106 | ; | 
|---|
|  | 107 | S LRAA=$P($G(^LRO(68.2,LRLL,10,LRPROF,0)),U,2) | 
|---|
|  | 108 | I 'LRAA Q | 
|---|
|  | 109 | ; | 
|---|
|  | 110 | ; Check tests on profile for specimen/collection sample | 
|---|
|  | 111 | S I=0 | 
|---|
|  | 112 | F  S I=$O(^LRO(68.2,LRLL,10,LRPROF,1,I)) Q:'I  D | 
|---|
|  | 113 | . S LRX=$G(^LRO(68.2,LRLL,10,LRPROF,1,I,0)) | 
|---|
|  | 114 | . S LR60=$P(LRX,"^"),LR61=$P(LRX,"^",2) | 
|---|
|  | 115 | . S LR60(0)=^LAB(60,LR60,0) | 
|---|
|  | 116 | . I "IB"[$P(LR60(0),"^",3) D | 
|---|
|  | 117 | . . I 'LR61 D  Q | 
|---|
|  | 118 | . . . S LRMSG(I)=$P(LR60(0),"^")_" missing specimen" | 
|---|
|  | 119 | . . I '$P(LRX,"^",5) D | 
|---|
|  | 120 | . . . S LRMSG(I)=$P(LR60(0),"^")_" missing collection sample for specimen "_$P(^LAB(61,LR61,0),"^") | 
|---|
|  | 121 | I $D(LRMSG) D EN^DDIOL(.LRMSG,"","") | 
|---|
|  | 122 | ; | 
|---|
|  | 123 | D EN^DDIOL("Now edit the associated division for accession area "_$$GET1^DIQ(68,LRAA_",",.01)_".","","!!") | 
|---|
|  | 124 | S DA=LRAA,DIE="^LRO(68,",DR=".091" | 
|---|
|  | 125 | D ^DIE | 
|---|
|  | 126 | ; | 
|---|
|  | 127 | S LRDIV=$O(^LRO(68,LRAA,3,0)) | 
|---|
|  | 128 | I 'LRDIV D  Q | 
|---|
|  | 129 | . D EN^DDIOL("*** A division needs to be associated with this POC accession area ***","","!!") | 
|---|
|  | 130 | ; | 
|---|
|  | 131 | I $O(^LRO(68,LRAA,3,LRDIV)) D | 
|---|
|  | 132 | . D EN^DDIOL($C(7)_"*** Lab POC software will use "_$P($$NS^XUAF4(LRDIV),"^"),"","!!") | 
|---|
|  | 133 | . D EN^DDIOL("as the default division with this accession area ***","","!?4") | 
|---|
|  | 134 | ; | 
|---|
|  | 135 | S LRX=$$FIND1^DIC(200,"","OX","LRLAB,POC","B","") | 
|---|
|  | 136 | I LRX<1 D EN^DDIOL($C(7)_"*** Unable to identify user 'LRLAB,POC' in NEW PERSON file ***","","!!") | 
|---|
|  | 137 | I LRX>0 D | 
|---|
|  | 138 | . K LRY | 
|---|
|  | 139 | . S LRY=$$DIV4^XUSER(.LRY,LRX) | 
|---|
|  | 140 | . I $D(LRY(LRDIV)) Q | 
|---|
|  | 141 | . D EN^DDIOL($C(7)_"*** Have IRM assign division "_$P($$NS^XUAF4(LRDIV),"^")_" to user 'LRLAB,POC' ***","","!!") | 
|---|
|  | 142 | Q | 
|---|
|  | 143 | ; | 
|---|
|  | 144 | ; | 
|---|
|  | 145 | PRINT ; Print test code mappings for POC setup | 
|---|
|  | 146 | N %ZIS,DIC,LA7624,ZTDTH,ZTSK,ZTRTN,ZTIO,ZTSAVE,X,Y | 
|---|
|  | 147 | ; | 
|---|
|  | 148 | D EN^DDIOL("","","!") | 
|---|
|  | 149 | S DIC="^LAB(62.4,",DIC(0)="AEMQ",DIC("S")="I $E($P(^(0),U),1,6)=""LA7POC""" | 
|---|
|  | 150 | D ^DIC | 
|---|
|  | 151 | I Y<1 Q | 
|---|
|  | 152 | S LA7624=+Y | 
|---|
|  | 153 | ; | 
|---|
|  | 154 | S %ZIS="MQ" D ^%ZIS | 
|---|
|  | 155 | I POP D HOME^%ZIS Q | 
|---|
|  | 156 | I $D(IO("Q")) D  Q | 
|---|
|  | 157 | . S ZTRTN="DQP^LA7PCFG",ZTSAVE("LA7624")="",ZTDESC="Print POC Setup" | 
|---|
|  | 158 | . D ^%ZTLOAD,^%ZISC | 
|---|
|  | 159 | . D EN^DDIOL("Request "_$S($G(ZTSK):"queued - Task #"_ZTSK,1:"NOT queued"),"","!") | 
|---|
|  | 160 | ; | 
|---|
|  | 161 | DQP ; entry point from above and TaskMan | 
|---|
|  | 162 | ; | 
|---|
|  | 163 | N I,X,Y | 
|---|
|  | 164 | N LA7EXIT,LA7INTYP,LA7LINE,LA7LINE2,LA7NOW,LA7PAGE,LA7CODE | 
|---|
|  | 165 | N LA76248,LR60,LR61,LR62,LR64,LR642,LRLL,LRPROF | 
|---|
|  | 166 | S LA7NOW=$$HTE^XLFDT($H,"1D"),(LA7EXIT,LA7PAGE)=0 | 
|---|
|  | 167 | S LA7624(0)=$G(^LAB(62.4,LA7624,0)) | 
|---|
|  | 168 | S LA76248=$P(LA7624(0),"^",8) | 
|---|
|  | 169 | S LA7INTYP=$P(^LAHM(62.48,LA76248,0),"^",9) | 
|---|
|  | 170 | S LRLL=$P(LA7624(0),"^",4) | 
|---|
|  | 171 | S LRPROF=$O(^LRO(68.2,LRLL,10,0)) | 
|---|
|  | 172 | S LA7LINE=$$REPEAT^XLFSTR("=",IOM) | 
|---|
|  | 173 | S LA7LINE2=$$REPEAT^XLFSTR("-",IOM) | 
|---|
|  | 174 | D HDR | 
|---|
|  | 175 | W !!,"VistA ADT feed enabled: ",$S(LA7INTYP=21:"YES",LA7INTYP=20:"NO",1:"UNKNOWN"),!! | 
|---|
|  | 176 | D SH1 | 
|---|
|  | 177 | ; | 
|---|
|  | 178 | S I=0 | 
|---|
|  | 179 | F  S I=$O(^LRO(68.2,LRLL,10,LRPROF,1,I)) Q:'I  D  Q:LA7EXIT | 
|---|
|  | 180 | . I ($Y+6)>IOSL D HDR Q:LA7EXIT  D SH1 Q:LA7EXIT | 
|---|
|  | 181 | . S X=^LRO(68.2,LRLL,10,LRPROF,1,I,0) | 
|---|
|  | 182 | . S LR60=+X,LR64=+$G(^LAB(60,LR60,64)),LR64(0)=$G(^LAM(LR64,0)) | 
|---|
|  | 183 | . S LR61=$P(X,"^",2),LR642=$P(X,"^",4),LR62=0 | 
|---|
|  | 184 | . I LR61 S LR62=$P(X,"^",5) | 
|---|
|  | 185 | . I 'LR62,LR61 S LR62=$$GET1^DIQ(61,LR61_",",4.1,"I") | 
|---|
|  | 186 | . W !,$J(I,2),?3,$E($P(^LAB(60,LR60,0),"^"),1,25) | 
|---|
|  | 187 | . S X=$P(LR64(0),"^",2) | 
|---|
|  | 188 | . W ?30,$S(X'="":X,1:"<Missing>") | 
|---|
|  | 189 | . I LR61 D | 
|---|
|  | 190 | . . S X="("_LR61_")" | 
|---|
|  | 191 | . . S X=$E($P(^LAB(61,LR61,0),"^"),1,19-$L(X))_X | 
|---|
|  | 192 | . E  S X="<Missing>" | 
|---|
|  | 193 | . W ?50,X | 
|---|
|  | 194 | . S X=$S(LR61:$E($$GET1^DIQ(61,LR61_",","LEDI HL7:HL7 ABBR"),1,14),1:" ") | 
|---|
|  | 195 | . W ?70,$S(X'="":X,1:"<Missing>") | 
|---|
|  | 196 | . W !,?30,$P(LR64(0),"^") | 
|---|
|  | 197 | . W ?50,$S(LR62:$P(^LAB(62,LR62,0),"^"),'LR61:"",1:"<Missing>") | 
|---|
|  | 198 | . S X=$S(LR642:$P($G(^LAB(64.2,LR642,0)),"^",2),1:"") | 
|---|
|  | 199 | . W ?70,$S(X'="":X,1:"No Mapping"),! | 
|---|
|  | 200 | . I LR64<1 W ?3,"Warning - test does not have NATIONAL VA LAB CODE assigned.",! | 
|---|
|  | 201 | ; | 
|---|
|  | 202 | I LA7EXIT D CLEAN Q | 
|---|
|  | 203 | I ($Y+6)>IOSL D HDR | 
|---|
|  | 204 | I LA7EXIT D CLEAN Q | 
|---|
|  | 205 | D SH2 | 
|---|
|  | 206 | S I=0 | 
|---|
|  | 207 | F  S I=$O(^LAB(62.4,LA7624,3,I)) Q:'I  D  Q:LA7EXIT | 
|---|
|  | 208 | . I ($Y+6)>IOSL D HDR Q:LA7EXIT  D SH2 Q:LA7EXIT | 
|---|
|  | 209 | . S X=^LAB(62.4,LA7624,3,I,0),X(2)=$G(^LAB(62.4,LA7624,3,I,2)) | 
|---|
|  | 210 | . S LR60=+X,LR61=$P(X(2),"^",13) | 
|---|
|  | 211 | . W !,$J(I,2),?3,$E($P(^LAB(60,LR60,0),"^"),1,25) | 
|---|
|  | 212 | . S LA7CODE=$P(X,"^",6) | 
|---|
|  | 213 | . W ?30,$S(LA7CODE'="":LA7CODE,1:"<Missing>") | 
|---|
|  | 214 | . I LR61 S X=$P(^LAB(61,LR61,0),"^")_"("_LR61_")" | 
|---|
|  | 215 | . E  S X="<Missing>" | 
|---|
|  | 216 | . W ?55,X | 
|---|
|  | 217 | . S X="("_$P($$GET1^DIQ(60,LR60_",",5),";",2)_")" | 
|---|
|  | 218 | . W !,?3,$E($$GET1^DIQ(60,LR60_",",400),1,25-$L(X))_X | 
|---|
|  | 219 | . I LA7CODE?5N1"."4N D | 
|---|
|  | 220 | . . S Y=$O(^LAM("C",LA7CODE_" ",0)) | 
|---|
|  | 221 | . . I Y W ?30,$E($P(^LAM(Y,0),"^"),1,20) | 
|---|
|  | 222 | . S X=$S(LR61:$E($$GET1^DIQ(61,LR61_",","LEDI HL7:HL7 ABBR"),1,14),1:" ") | 
|---|
|  | 223 | . W ?55,$S(X'="":X,1:"<Missing>"),! | 
|---|
|  | 224 | . S LR64=+$P($G(^LAB(60,LR60,64)),"^",2),LR64(0)=$G(^LAM(LR64,0)) | 
|---|
|  | 225 | . I LR64<1 W ?3,"Warning - test does not have RESULT NLT CODE assigned.",! | 
|---|
|  | 226 | . I LR64>0,$P(LR64(0),"^",2)'=LA7CODE W ?3,"Warning - RESULT NLT CODE does not match UI TEST CODE." | 
|---|
|  | 227 | ; | 
|---|
|  | 228 | I '$D(ZTQUEUED),'LA7EXIT,$E(IOST,1,2)="C-" D TERM | 
|---|
|  | 229 | D CLEAN | 
|---|
|  | 230 | Q | 
|---|
|  | 231 | ; | 
|---|
|  | 232 | ; | 
|---|
|  | 233 | CLEAN ; Clean up and quit | 
|---|
|  | 234 | I $E(IOST,1,2)'="C-"  W @IOF | 
|---|
|  | 235 | I '$D(ZTQUEUED) D ^%ZISC | 
|---|
|  | 236 | E  S ZTREQ="@" | 
|---|
|  | 237 | Q | 
|---|
|  | 238 | ; | 
|---|
|  | 239 | ; | 
|---|
|  | 240 | HDR ; Header for test code mapping | 
|---|
|  | 241 | I '$D(ZTQUEUED),LA7PAGE,$E(IOST,1,2)="C-" D TERM Q:$G(LA7EXIT) | 
|---|
|  | 242 | W @IOF S $X=0 | 
|---|
|  | 243 | S LA7PAGE=LA7PAGE+1 | 
|---|
|  | 244 | W !,"Point of Care Test Code Mapping",?IOM-20," Page: ",LA7PAGE | 
|---|
|  | 245 | W !," for interface: ",$P(LA7624(0),"^"),?IOM-23," Printed: ",LA7NOW | 
|---|
|  | 246 | W !,LA7LINE,! | 
|---|
|  | 247 | Q | 
|---|
|  | 248 | ; | 
|---|
|  | 249 | ; | 
|---|
|  | 250 | SH1 ; Sub header #1 | 
|---|
|  | 251 | W !,"POC Order Test Codes using Load/Work List: ",$P(^LRO(68.2,LRLL,0),"^") | 
|---|
|  | 252 | W !,"#  Lab Test",?30,"Order NLT Code",?50,"Specimen(IEN)",?70,"HL7 Spec" | 
|---|
|  | 253 | W !,?30,"Order NLT Name",?50,"Collection Sample",?70,"WKLD Code" | 
|---|
|  | 254 | W !,LA7LINE2,! | 
|---|
|  | 255 | Q | 
|---|
|  | 256 | ; | 
|---|
|  | 257 | ; | 
|---|
|  | 258 | SH2 ; Sub head #2 | 
|---|
|  | 259 | W !,"POC Result Test Codes using Auto Instrument: ",$P(LA7624(0),"^") | 
|---|
|  | 260 | W !,"#  Lab Test",?30,"Result NLT Code",?55,"Specimen(IEN)" | 
|---|
|  | 261 | W !,"   Dataname(IEN)",?30,"Result NLT Name",?55,"HL7 Spec" | 
|---|
|  | 262 | W !,LA7LINE2,! | 
|---|
|  | 263 | Q | 
|---|
|  | 264 | ; | 
|---|
|  | 265 | ; | 
|---|
|  | 266 | TERM ; | 
|---|
|  | 267 | N DIR,DIRUT,DTOUT,DUOUT,X,Y | 
|---|
|  | 268 | S DIR(0)="E" D ^DIR S:$D(DIRUT) LA7EXIT=1 | 
|---|
|  | 269 | Q | 
|---|