LA7PCFG ;DALOI/JMC - Configrure Lab Point of Care Interface; Oct 23, 2023@17:30
 ;;5.2;AUTOMATED LAB INSTRUMENTS;**67,104**;Sep 27, 1994;Build 4
 ;
 ;Reference to DIV4^XUSER in ICR #2533
 ;Reference to EDITPAR^XPAREDIT in ICR #2336
 Q
 ;
EN ; Configure files #62.48, #62.4 and #68.2
 N DIR,DIROUT,DIRUT,DUOUT,LA7QUIT,LRLL,X,Y
 S LRLL=0
 F  D  Q:$D(DIRUT)
 . 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;5:Define Reporting Lab;6:Display POC Reporting Facility Value Settings"
 . S DIR("A")="Select which file to setup"
 . D ^DIR
 . I $D(DIRUT) Q
 . I Y=1 D E6248 Q
 . I Y=2 D E682 Q
 . I Y=3 D E624 Q
 . I Y=4 D PRINT Q
 . I Y=5 D REPLAB Q
 . I Y=6 D PARLIST
 Q
 ;
 ;
E6248 ; Setup/edit file #62.48
 ;
 N DA,DIC,DIE,DIR,DIRUT,DR,DTOUT,DUOUT,LA76248,LA7TYP,X,Y
 D EN^DDIOL("","","!!")
 S DIC="^LAHM(62.48,",DIC(0)="AEMQ",DIC("S")="I $P(^(0),U,9)=20!($P(^(0),U,9)=21)"
 D ^DIC
 I Y<1 Q
 S (DA,LA76248)=+Y
 L +^LAHM(62.48,LA76248):0
 I '$T D EN^DDIOL("Another user is editing this entry.","","!?5") Q
 D EN^DDIOL("","","!!")
 S DIR(0)="YO"
 S DIR("A")="Does this POC interface want to receive VistA ADT messages"
 S DIR("B")=$S($P($G(^LAHM(62.48,LA76248,0)),"^",9)=21:"YES",1:"NO")
 D ^DIR
 I $D(DIRUT) Q
 S LA7TYP=$S(Y=1:21,1:20)
 I LA7TYP=21 D
 . D EN^DDIOL("Remember to add the LA7POC ADT RTR event protocol to the appropriate","","!!")
 . D EN^DDIOL("ADT event protocols as specified in the Lab POC User Guide","","!")
 . D EN^DDIOL("","","!!")
 S DIE=DIC,DR="11///"_LA7TYP_";2;3;4///ON;20"
 D ^DIE
 L -^LAHM(62.48,LA76248)
 Q
 ;
 ;
E624 ; Setup/edit file #62.4
 ;
 N DA,DIC,DIE,DR,LA7624,LA76248,LA7ERR,LRNLT,LRX,LRY,X,Y
 ;
 D EN^DDIOL("","","!")
 S DIC="^LAB(62.4,",DIC(0)="AEMQ",DIC("S")="I $E($P(^(0),U),1,6)=""LA7POC"""
 D ^DIC
 I Y<1 Q
 S (DA,LA7624)=+Y
 L +^LAB(62.4,LA7624):0
 I '$T D EN^DDIOL("Another user is editing this entry.","","!?5") Q
 S DIE=DIC
 S DR="3"_$S(LRLL>0:"//"_$$GET1^DIQ(68.2,LRLL_",",.01),1:"")_";8;10;11;12////0;18;30;107"
 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"
 D ^DIE
 ;
 ; Check if loadlist type = POC
 I $P(^LAB(62.4,LA7624,0),"^",4) D
 . S LRLL=$P(^LAB(62.4,LA7624,0),"^",4)
 . 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")
 ;
 ; Check if 62.4 name matches 62.48 name
 I $P(^LAB(62.4,LA7624,0),"^",8) D
 . S LRX=$$GET1^DIQ(62.48,$P(^LAB(62.4,LA7624,0),"^",8)_",",.01)
 . S LRY=$$GET1^DIQ(62.4,LA7624_",",.01)
 . I LRX'=LRY D EN^DDIOL("**WARNING-Name of entry in AUTO INSTRUMENT file should match name of MESSAGE CONFIGURATION**","","!?2")
 ;
 L -^LAB(62.4,LA7624)
 Q
 ;
 ;
E682 ; Setup/edit file #68.2
 N DA,DIC,DIE,DIR,DIROUT,DIRUT,DR,DUOUT,I
 N LA7ERR,LR60,LR61,LRAA,LRDIV,LRMSG,LRPROF,LRX,LRY,X,Y
 ;
 D EN^DDIOL("","","!")
 S DIC="^LRO(68.2,",DIC(0)="AELMQ"
 I LRLL>0 S DIC("B")=$$GET1^DIQ(68.2,LRLL_",",.01)
 D ^DIC
 I Y<1 Q
 S (DA,LRLL)=+Y
 L +^LRO(68.2,LRLL):0
 I '$T D EN^DDIOL("Another user is editing this entry.","","!?5") Q
 S DIE=DIC
 S DR=".01;.02///UNIVERSAL;.03///2;.08///ACCESSION;.14;1;1.5;1.7;50"
 S DR(2,68.23)=".01;2;2.2;1"
 S DR(3,68.24)=".01;I ""IB""'[$P(^LAB(60,X,0),""^"",3) S Y=2;1R;3;4;2///NO"
 D ^DIE
 L -^LRO(68.2,LRLL)
 W !
 ;
 S LRPROF=$O(^LRO(68.2,LRLL,10,0))
 I LRPROF<1 D  Q
 . D EN^DDIOL($C(7)_"*** Need at least one profile for POC interface ***","","!!")
 ;
 I $O(^LRO(68.2,LRLL,10,LRPROF)) D  Q
 . D EN^DDIOL($C(7)_"*** Only one profile should exist for POC interface ***","","!!")
 ;
 S LRAA=$P($G(^LRO(68.2,LRLL,10,LRPROF,0)),U,2)
 I 'LRAA Q
 ;
 ; Check tests on profile for specimen/collection sample
 S I=0
 F  S I=$O(^LRO(68.2,LRLL,10,LRPROF,1,I)) Q:'I  D
 . S LRX=$G(^LRO(68.2,LRLL,10,LRPROF,1,I,0))
 . S LR60=$P(LRX,"^"),LR61=$P(LRX,"^",2)
 . S LR60(0)=^LAB(60,LR60,0)
 . I "IB"[$P(LR60(0),"^",3) D
 . . I 'LR61 D  Q
 . . . S LRMSG(I)=$P(LR60(0),"^")_" missing specimen"
 . . I '$P(LRX,"^",5) D
 . . . S LRMSG(I)=$P(LR60(0),"^")_" missing collection sample for specimen "_$P(^LAB(61,LR61,0),"^")
 I $D(LRMSG) D EN^DDIOL(.LRMSG,"","")
 ;
 D EN^DDIOL("Now edit the associated division for accession area "_$$GET1^DIQ(68,LRAA_",",.01)_".","","!!")
 S DA=LRAA,DIE="^LRO(68,",DR=".091"
 D ^DIE
 ;
 S LRDIV=$O(^LRO(68,LRAA,3,0))
 I 'LRDIV D  Q
 . D EN^DDIOL("*** A division needs to be associated with this POC accession area ***","","!!")
 ;
 I $O(^LRO(68,LRAA,3,LRDIV)) D
 . D EN^DDIOL($C(7)_"*** Lab POC software will use "_$P($$NS^XUAF4(LRDIV),"^"),"","!!")
 . D EN^DDIOL("as the default division with this accession area ***","","!?4")
 ;
 S LRX=$$FIND1^DIC(200,"","OX","LRLAB,POC","B","")
 I LRX<1 D EN^DDIOL($C(7)_"*** Unable to identify user 'LRLAB,POC' in NEW PERSON file ***","","!!")
 I LRX>0 D
 . K LRY
 . S LRY=$$DIV4^XUSER(.LRY,LRX)
 . I $D(LRY(LRDIV)) Q
 . D EN^DDIOL($C(7)_"*** Have IRM assign division "_$P($$NS^XUAF4(LRDIV),"^")_" to user 'LRLAB,POC' ***","","!!")
 Q
 ;
 ;
PRINT ; Print test code mappings for POC setup
 N %ZIS,DIC,LA7624,ZTDTH,ZTSK,ZTRTN,ZTIO,ZTSAVE,X,Y
 ;
 D EN^DDIOL("","","!")
 S DIC="^LAB(62.4,",DIC(0)="AEMQ",DIC("S")="I $E($P(^(0),U),1,6)=""LA7POC"""
 D ^DIC
 I Y<1 Q
 S LA7624=+Y
 ;
 S %ZIS="MQ" D ^%ZIS
 I POP D HOME^%ZIS Q
 I $D(IO("Q")) D  Q
 . S ZTRTN="DQP^LA7PCFG",ZTSAVE("LA7624")="",ZTDESC="Print POC Setup"
 . D ^%ZTLOAD,^%ZISC
 . D EN^DDIOL("Request "_$S($G(ZTSK):"queued - Task #"_ZTSK,1:"NOT queued"),"","!")
 ;
DQP ; entry point from above and TaskMan
 ;
 N I,X,Y
 N LA7EXIT,LA7INTYP,LA7LINE,LA7LINE2,LA7NOW,LA7PAGE,LA7CODE
 N LA76248,LR60,LR61,LR62,LR64,LR642,LRLL,LRPROF
 S LA7NOW=$$HTE^XLFDT($H,"1D"),(LA7EXIT,LA7PAGE)=0
 S LA7624(0)=$G(^LAB(62.4,LA7624,0))
 S LA76248=$P(LA7624(0),"^",8)
 S LA7INTYP=$P(^LAHM(62.48,LA76248,0),"^",9)
 S LRLL=$P(LA7624(0),"^",4)
 S LRPROF=$O(^LRO(68.2,LRLL,10,0))
 S LA7LINE=$$REPEAT^XLFSTR("=",IOM)
 S LA7LINE2=$$REPEAT^XLFSTR("-",IOM)
 D HDR
 W !!,"VistA ADT feed enabled: ",$S(LA7INTYP=21:"YES",LA7INTYP=20:"NO",1:"UNKNOWN"),!!
 D SH1
 ;
 S I=0
 F  S I=$O(^LRO(68.2,LRLL,10,LRPROF,1,I)) Q:'I  D  Q:LA7EXIT
 . I ($Y+6)>IOSL D HDR Q:LA7EXIT  D SH1 Q:LA7EXIT
 . S X=^LRO(68.2,LRLL,10,LRPROF,1,I,0)
 . S LR60=+X,LR64=+$G(^LAB(60,LR60,64)),LR64(0)=$G(^LAM(LR64,0))
 . S LR61=$P(X,"^",2),LR642=$P(X,"^",4),LR62=0
 . I LR61 S LR62=$P(X,"^",5)
 . I 'LR62,LR61 S LR62=$$GET1^DIQ(61,LR61_",",4.1,"I")
 . W !,$J(I,2),?3,$E($P(^LAB(60,LR60,0),"^"),1,25)
 . S X=$P(LR64(0),"^",2)
 . W ?30,$S(X'="":X,1:"<Missing>")
 . I LR61 D
 . . S X="("_LR61_")"
 . . S X=$E($P(^LAB(61,LR61,0),"^"),1,19-$L(X))_X
 . E  S X="<Missing>"
 . W ?50,X
 . S X=$S(LR61:$E($$GET1^DIQ(61,LR61_",","LEDI HL7:HL7 ABBR"),1,14),1:" ")
 . W ?70,$S(X'="":X,1:"<Missing>")
 . W !,?30,$P(LR64(0),"^")
 . W ?50,$S(LR62:$P(^LAB(62,LR62,0),"^"),'LR61:"",1:"<Missing>")
 . S X=$S(LR642:$P($G(^LAB(64.2,LR642,0)),"^",2),1:"")
 . W ?70,$S(X'="":X,1:"No Mapping"),!
 . I LR64<1 W ?3,"Warning - test does not have NATIONAL VA LAB CODE assigned.",!
 ;
 I LA7EXIT D CLEAN Q
 I ($Y+6)>IOSL D HDR
 I LA7EXIT D CLEAN Q
 D SH2
 S I=0
 F  S I=$O(^LAB(62.4,LA7624,3,I)) Q:'I  D  Q:LA7EXIT
 . I ($Y+6)>IOSL D HDR Q:LA7EXIT  D SH2 Q:LA7EXIT
 . S X=^LAB(62.4,LA7624,3,I,0),X(2)=$G(^LAB(62.4,LA7624,3,I,2))
 . S LR60=+X,LR61=$P(X(2),"^",13)
 . W !,$J(I,2),?3,$E($P(^LAB(60,LR60,0),"^"),1,25)
 . S LA7CODE=$P(X,"^",6)
 . W ?30,$S(LA7CODE'="":LA7CODE,1:"<Missing>")
 . I LR61 S X=$P(^LAB(61,LR61,0),"^")_"("_LR61_")"
 . E  S X="<Missing>"
 . W ?55,X
 . S X="("_$P($$GET1^DIQ(60,LR60_",",5),";",2)_")"
 . W !,?3,$E($$GET1^DIQ(60,LR60_",",400),1,25-$L(X))_X
 . I LA7CODE?5N1"."4N D
 . . S Y=$O(^LAM("C",LA7CODE_" ",0))
 . . I Y W ?30,$E($P(^LAM(Y,0),"^"),1,20)
 . S X=$S(LR61:$E($$GET1^DIQ(61,LR61_",","LEDI HL7:HL7 ABBR"),1,14),1:" ")
 . W ?55,$S(X'="":X,1:"<Missing>"),!
 . S LR64=+$P($G(^LAB(60,LR60,64)),"^",2),LR64(0)=$G(^LAM(LR64,0))
 . I LR64<1 W ?3,"Warning - test does not have RESULT NLT CODE assigned.",!
 . I LR64>0,$P(LR64(0),"^",2)'=LA7CODE W ?3,"Warning - RESULT NLT CODE does not match UI TEST CODE."
 ;
 I '$D(ZTQUEUED),'LA7EXIT,$E(IOST,1,2)="C-" D TERM
 D CLEAN
 Q
 ;
 ;
REPLAB ; Define Reporting Lab
 ;LA*5.2*104: Optional to use parameter; only needed if existing logic is
 ;            not retrieving correct reporting lab.
 N DIR,DTOUT,DUOUT
 S DIR("A",1)=" "
 S DIR("A",2)="Defining a reporting lab using this option is not necessary if"
 S DIR("A",3)="the reporting lab is currently displaying correctly."
 S DIR("A",4)=" "
 S DIR("A")="Do you wish to continue"
 S DIR(0)="YN",DIR("B")="YES"
 D ^DIR
 I 'Y!($G(DTOUT))!($G(DUOUT)) Q
 D EDITPAR^XPAREDIT("LR POC REPORTING LAB")
 Q
 ;
 ;
 ;PARLIST added with LA*5.2*104
PARLIST ; List parameter values for LR POC REPORTING LAB
 N LAXPAR,DIR
 ;
 S LAXPAR=$O(^XTV(8989.51,"B","LR POC REPORTING LAB",0))
 Q:'LAXPAR
 I LAXPAR<1 Q
 ;
 D ALLPAR^XPARLIST(LAXPAR)
 Q
 ;
 ;
CLEAN ; Clean up and quit
 I $E(IOST,1,2)'="C-"  W @IOF
 I '$D(ZTQUEUED) D ^%ZISC
 E  S ZTREQ="@"
 Q
 ;
 ;
HDR ; Header for test code mapping
 I '$D(ZTQUEUED),LA7PAGE,$E(IOST,1,2)="C-" D TERM Q:$G(LA7EXIT)
 W @IOF S $X=0
 S LA7PAGE=LA7PAGE+1
 W !,"Point of Care Test Code Mapping",?IOM-20," Page: ",LA7PAGE
 W !," for interface: ",$P(LA7624(0),"^"),?IOM-23," Printed: ",LA7NOW
 W !,LA7LINE,!
 Q
 ;
 ;
SH1 ; Sub header #1
 W !,"POC Order Test Codes using Load/Work List: ",$P(^LRO(68.2,LRLL,0),"^")
 W !,"#  Lab Test",?30,"Order NLT Code",?50,"Specimen(IEN)",?70,"HL7 Spec"
 W !,?30,"Order NLT Name",?50,"Collection Sample",?70,"WKLD Code"
 W !,LA7LINE2,!
 Q
 ;
 ;
SH2 ; Sub head #2
 W !,"POC Result Test Codes using Auto Instrument: ",$P(LA7624(0),"^")
 W !,"#  Lab Test",?30,"Result NLT Code",?55,"Specimen(IEN)"
 W !,"   Dataname(IEN)",?30,"Result NLT Name",?55,"HL7 Spec"
 W !,LA7LINE2,!
 Q
 ;
 ;
TERM ;
 N DIR,DIRUT,DTOUT,DUOUT,X,Y
 S DIR(0)="E" D ^DIR S:$D(DIRUT) LA7EXIT=1
 Q
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HLA7PCFG   10195     printed  Sep 23, 2025@19:15:12                                                                                                                                                                                                    Page 2
LA7PCFG   ;DALOI/JMC - Configrure Lab Point of Care Interface; Oct 23, 2023@17:30
 +1       ;;5.2;AUTOMATED LAB INSTRUMENTS;**67,104**;Sep 27, 1994;Build 4
 +2       ;
 +3       ;Reference to DIV4^XUSER in ICR #2533
 +4       ;Reference to EDITPAR^XPAREDIT in ICR #2336
 +5        QUIT 
 +6       ;
EN        ; Configure files #62.48, #62.4 and #68.2
 +1        NEW DIR,DIROUT,DIRUT,DUOUT,LA7QUIT,LRLL,X,Y
 +2        SET LRLL=0
 +3        FOR 
               Begin DoDot:1
 +4                SET 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;5:Define Reporting Lab;6:Display POC Reporting Facility Value Settings"
 +5                SET DIR("A")="Select which file to setup"
 +6                DO ^DIR
 +7                IF $DATA(DIRUT)
                       QUIT 
 +8                IF Y=1
                       DO E6248
                       QUIT 
 +9                IF Y=2
                       DO E682
                       QUIT 
 +10               IF Y=3
                       DO E624
                       QUIT 
 +11               IF Y=4
                       DO PRINT
                       QUIT 
 +12               IF Y=5
                       DO REPLAB
                       QUIT 
 +13               IF Y=6
                       DO PARLIST
               End DoDot:1
               if $DATA(DIRUT)
                   QUIT 
 +14       QUIT 
 +15      ;
 +16      ;
E6248     ; Setup/edit file #62.48
 +1       ;
 +2        NEW DA,DIC,DIE,DIR,DIRUT,DR,DTOUT,DUOUT,LA76248,LA7TYP,X,Y
 +3        DO EN^DDIOL("","","!!")
 +4        SET DIC="^LAHM(62.48,"
           SET DIC(0)="AEMQ"
           SET DIC("S")="I $P(^(0),U,9)=20!($P(^(0),U,9)=21)"
 +5        DO ^DIC
 +6        IF Y<1
               QUIT 
 +7        SET (DA,LA76248)=+Y
 +8        LOCK +^LAHM(62.48,LA76248):0
 +9        IF '$TEST
               DO EN^DDIOL("Another user is editing this entry.","","!?5")
               QUIT 
 +10       DO EN^DDIOL("","","!!")
 +11       SET DIR(0)="YO"
 +12       SET DIR("A")="Does this POC interface want to receive VistA ADT messages"
 +13       SET DIR("B")=$SELECT($PIECE($GET(^LAHM(62.48,LA76248,0)),"^",9)=21:"YES",1:"NO")
 +14       DO ^DIR
 +15       IF $DATA(DIRUT)
               QUIT 
 +16       SET LA7TYP=$SELECT(Y=1:21,1:20)
 +17       IF LA7TYP=21
               Begin DoDot:1
 +18               DO EN^DDIOL("Remember to add the LA7POC ADT RTR event protocol to the appropriate","","!!")
 +19               DO EN^DDIOL("ADT event protocols as specified in the Lab POC User Guide","","!")
 +20               DO EN^DDIOL("","","!!")
               End DoDot:1
 +21       SET DIE=DIC
           SET DR="11///"_LA7TYP_";2;3;4///ON;20"
 +22       DO ^DIE
 +23       LOCK -^LAHM(62.48,LA76248)
 +24       QUIT 
 +25      ;
 +26      ;
E624      ; Setup/edit file #62.4
 +1       ;
 +2        NEW DA,DIC,DIE,DR,LA7624,LA76248,LA7ERR,LRNLT,LRX,LRY,X,Y
 +3       ;
 +4        DO EN^DDIOL("","","!")
 +5        SET DIC="^LAB(62.4,"
           SET DIC(0)="AEMQ"
           SET DIC("S")="I $E($P(^(0),U),1,6)=""LA7POC"""
 +6        DO ^DIC
 +7        IF Y<1
               QUIT 
 +8        SET (DA,LA7624)=+Y
 +9        LOCK +^LAB(62.4,LA7624):0
 +10       IF '$TEST
               DO EN^DDIOL("Another user is editing this entry.","","!?5")
               QUIT 
 +11       SET DIE=DIC
 +12       SET DR="3"_$SELECT(LRLL>0:"//"_$$GET1^DIQ(68.2,LRLL_",",.01),1:"")_";8;10;11;12////0;18;30;107"
 +13       SET 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"
 +14       DO ^DIE
 +15      ;
 +16      ; Check if loadlist type = POC
 +17       IF $PIECE(^LAB(62.4,LA7624,0),"^",4)
               Begin DoDot:1
 +18               SET LRLL=$PIECE(^LAB(62.4,LA7624,0),"^",4)
 +19               IF $PIECE(^LRO(68.2,LRLL,0),"^",3)'=2
                       DO EN^DDIOL("**WARNING-Associated Load/Work List "_$$GET1^DIQ(68.2,LRLL_",",.01)_" is not TYPE: POINT OF CARE**","","!?2")
               End DoDot:1
 +20      ;
 +21      ; Check if 62.4 name matches 62.48 name
 +22       IF $PIECE(^LAB(62.4,LA7624,0),"^",8)
               Begin DoDot:1
 +23               SET LRX=$$GET1^DIQ(62.48,$PIECE(^LAB(62.4,LA7624,0),"^",8)_",",.01)
 +24               SET LRY=$$GET1^DIQ(62.4,LA7624_",",.01)
 +25               IF LRX'=LRY
                       DO EN^DDIOL("**WARNING-Name of entry in AUTO INSTRUMENT file should match name of MESSAGE CONFIGURATION**","","!?2")
               End DoDot:1
 +26      ;
 +27       LOCK -^LAB(62.4,LA7624)
 +28       QUIT 
 +29      ;
 +30      ;
E682      ; Setup/edit file #68.2
 +1        NEW DA,DIC,DIE,DIR,DIROUT,DIRUT,DR,DUOUT,I
 +2        NEW LA7ERR,LR60,LR61,LRAA,LRDIV,LRMSG,LRPROF,LRX,LRY,X,Y
 +3       ;
 +4        DO EN^DDIOL("","","!")
 +5        SET DIC="^LRO(68.2,"
           SET DIC(0)="AELMQ"
 +6        IF LRLL>0
               SET DIC("B")=$$GET1^DIQ(68.2,LRLL_",",.01)
 +7        DO ^DIC
 +8        IF Y<1
               QUIT 
 +9        SET (DA,LRLL)=+Y
 +10       LOCK +^LRO(68.2,LRLL):0
 +11       IF '$TEST
               DO EN^DDIOL("Another user is editing this entry.","","!?5")
               QUIT 
 +12       SET DIE=DIC
 +13       SET DR=".01;.02///UNIVERSAL;.03///2;.08///ACCESSION;.14;1;1.5;1.7;50"
 +14       SET DR(2,68.23)=".01;2;2.2;1"
 +15       SET DR(3,68.24)=".01;I ""IB""'[$P(^LAB(60,X,0),""^"",3) S Y=2;1R;3;4;2///NO"
 +16       DO ^DIE
 +17       LOCK -^LRO(68.2,LRLL)
 +18       WRITE !
 +19      ;
 +20       SET LRPROF=$ORDER(^LRO(68.2,LRLL,10,0))
 +21       IF LRPROF<1
               Begin DoDot:1
 +22               DO EN^DDIOL($CHAR(7)_"*** Need at least one profile for POC interface ***","","!!")
               End DoDot:1
               QUIT 
 +23      ;
 +24       IF $ORDER(^LRO(68.2,LRLL,10,LRPROF))
               Begin DoDot:1
 +25               DO EN^DDIOL($CHAR(7)_"*** Only one profile should exist for POC interface ***","","!!")
               End DoDot:1
               QUIT 
 +26      ;
 +27       SET LRAA=$PIECE($GET(^LRO(68.2,LRLL,10,LRPROF,0)),U,2)
 +28       IF 'LRAA
               QUIT 
 +29      ;
 +30      ; Check tests on profile for specimen/collection sample
 +31       SET I=0
 +32       FOR 
               SET I=$ORDER(^LRO(68.2,LRLL,10,LRPROF,1,I))
               if 'I
                   QUIT 
               Begin DoDot:1
 +33               SET LRX=$GET(^LRO(68.2,LRLL,10,LRPROF,1,I,0))
 +34               SET LR60=$PIECE(LRX,"^")
                   SET LR61=$PIECE(LRX,"^",2)
 +35               SET LR60(0)=^LAB(60,LR60,0)
 +36               IF "IB"[$PIECE(LR60(0),"^",3)
                       Begin DoDot:2
 +37                       IF 'LR61
                               Begin DoDot:3
 +38                               SET LRMSG(I)=$PIECE(LR60(0),"^")_" missing specimen"
                               End DoDot:3
                               QUIT 
 +39                       IF '$PIECE(LRX,"^",5)
                               Begin DoDot:3
 +40                               SET LRMSG(I)=$PIECE(LR60(0),"^")_" missing collection sample for specimen "_$PIECE(^LAB(61,LR61,0),"^")
                               End DoDot:3
                       End DoDot:2
               End DoDot:1
 +41       IF $DATA(LRMSG)
               DO EN^DDIOL(.LRMSG,"","")
 +42      ;
 +43       DO EN^DDIOL("Now edit the associated division for accession area "_$$GET1^DIQ(68,LRAA_",",.01)_".","","!!")
 +44       SET DA=LRAA
           SET DIE="^LRO(68,"
           SET DR=".091"
 +45       DO ^DIE
 +46      ;
 +47       SET LRDIV=$ORDER(^LRO(68,LRAA,3,0))
 +48       IF 'LRDIV
               Begin DoDot:1
 +49               DO EN^DDIOL("*** A division needs to be associated with this POC accession area ***","","!!")
               End DoDot:1
               QUIT 
 +50      ;
 +51       IF $ORDER(^LRO(68,LRAA,3,LRDIV))
               Begin DoDot:1
 +52               DO EN^DDIOL($CHAR(7)_"*** Lab POC software will use "_$PIECE($$NS^XUAF4(LRDIV),"^"),"","!!")
 +53               DO EN^DDIOL("as the default division with this accession area ***","","!?4")
               End DoDot:1
 +54      ;
 +55       SET LRX=$$FIND1^DIC(200,"","OX","LRLAB,POC","B","")
 +56       IF LRX<1
               DO EN^DDIOL($CHAR(7)_"*** Unable to identify user 'LRLAB,POC' in NEW PERSON file ***","","!!")
 +57       IF LRX>0
               Begin DoDot:1
 +58               KILL LRY
 +59               SET LRY=$$DIV4^XUSER(.LRY,LRX)
 +60               IF $DATA(LRY(LRDIV))
                       QUIT 
 +61               DO EN^DDIOL($CHAR(7)_"*** Have IRM assign division "_$PIECE($$NS^XUAF4(LRDIV),"^")_" to user 'LRLAB,POC' ***","","!!")
               End DoDot:1
 +62       QUIT 
 +63      ;
 +64      ;
PRINT     ; Print test code mappings for POC setup
 +1        NEW %ZIS,DIC,LA7624,ZTDTH,ZTSK,ZTRTN,ZTIO,ZTSAVE,X,Y
 +2       ;
 +3        DO EN^DDIOL("","","!")
 +4        SET DIC="^LAB(62.4,"
           SET DIC(0)="AEMQ"
           SET DIC("S")="I $E($P(^(0),U),1,6)=""LA7POC"""
 +5        DO ^DIC
 +6        IF Y<1
               QUIT 
 +7        SET LA7624=+Y
 +8       ;
 +9        SET %ZIS="MQ"
           DO ^%ZIS
 +10       IF POP
               DO HOME^%ZIS
               QUIT 
 +11       IF $DATA(IO("Q"))
               Begin DoDot:1
 +12               SET ZTRTN="DQP^LA7PCFG"
                   SET ZTSAVE("LA7624")=""
                   SET ZTDESC="Print POC Setup"
 +13               DO ^%ZTLOAD
                   DO ^%ZISC
 +14               DO EN^DDIOL("Request "_$SELECT($GET(ZTSK):"queued - Task #"_ZTSK,1:"NOT queued"),"","!")
               End DoDot:1
               QUIT 
 +15      ;
DQP       ; entry point from above and TaskMan
 +1       ;
 +2        NEW I,X,Y
 +3        NEW LA7EXIT,LA7INTYP,LA7LINE,LA7LINE2,LA7NOW,LA7PAGE,LA7CODE
 +4        NEW LA76248,LR60,LR61,LR62,LR64,LR642,LRLL,LRPROF
 +5        SET LA7NOW=$$HTE^XLFDT($HOROLOG,"1D")
           SET (LA7EXIT,LA7PAGE)=0
 +6        SET LA7624(0)=$GET(^LAB(62.4,LA7624,0))
 +7        SET LA76248=$PIECE(LA7624(0),"^",8)
 +8        SET LA7INTYP=$PIECE(^LAHM(62.48,LA76248,0),"^",9)
 +9        SET LRLL=$PIECE(LA7624(0),"^",4)
 +10       SET LRPROF=$ORDER(^LRO(68.2,LRLL,10,0))
 +11       SET LA7LINE=$$REPEAT^XLFSTR("=",IOM)
 +12       SET LA7LINE2=$$REPEAT^XLFSTR("-",IOM)
 +13       DO HDR
 +14       WRITE !!,"VistA ADT feed enabled: ",$SELECT(LA7INTYP=21:"YES",LA7INTYP=20:"NO",1:"UNKNOWN"),!!
 +15       DO SH1
 +16      ;
 +17       SET I=0
 +18       FOR 
               SET I=$ORDER(^LRO(68.2,LRLL,10,LRPROF,1,I))
               if 'I
                   QUIT 
               Begin DoDot:1
 +19               IF ($Y+6)>IOSL
                       DO HDR
                       if LA7EXIT
                           QUIT 
                       DO SH1
                       if LA7EXIT
                           QUIT 
 +20               SET X=^LRO(68.2,LRLL,10,LRPROF,1,I,0)
 +21               SET LR60=+X
                   SET LR64=+$GET(^LAB(60,LR60,64))
                   SET LR64(0)=$GET(^LAM(LR64,0))
 +22               SET LR61=$PIECE(X,"^",2)
                   SET LR642=$PIECE(X,"^",4)
                   SET LR62=0
 +23               IF LR61
                       SET LR62=$PIECE(X,"^",5)
 +24               IF 'LR62
                       IF LR61
                           SET LR62=$$GET1^DIQ(61,LR61_",",4.1,"I")
 +25               WRITE !,$JUSTIFY(I,2),?3,$EXTRACT($PIECE(^LAB(60,LR60,0),"^"),1,25)
 +26               SET X=$PIECE(LR64(0),"^",2)
 +27               WRITE ?30,$SELECT(X'="":X,1:"<Missing>")
 +28               IF LR61
                       Begin DoDot:2
 +29                       SET X="("_LR61_")"
 +30                       SET X=$EXTRACT($PIECE(^LAB(61,LR61,0),"^"),1,19-$LENGTH(X))_X
                       End DoDot:2
 +31              IF '$TEST
                       SET X="<Missing>"
 +32               WRITE ?50,X
 +33               SET X=$SELECT(LR61:$EXTRACT($$GET1^DIQ(61,LR61_",","LEDI HL7:HL7 ABBR"),1,14),1:" ")
 +34               WRITE ?70,$SELECT(X'="":X,1:"<Missing>")
 +35               WRITE !,?30,$PIECE(LR64(0),"^")
 +36               WRITE ?50,$SELECT(LR62:$PIECE(^LAB(62,LR62,0),"^"),'LR61:"",1:"<Missing>")
 +37               SET X=$SELECT(LR642:$PIECE($GET(^LAB(64.2,LR642,0)),"^",2),1:"")
 +38               WRITE ?70,$SELECT(X'="":X,1:"No Mapping"),!
 +39               IF LR64<1
                       WRITE ?3,"Warning - test does not have NATIONAL VA LAB CODE assigned.",!
               End DoDot:1
               if LA7EXIT
                   QUIT 
 +40      ;
 +41       IF LA7EXIT
               DO CLEAN
               QUIT 
 +42       IF ($Y+6)>IOSL
               DO HDR
 +43       IF LA7EXIT
               DO CLEAN
               QUIT 
 +44       DO SH2
 +45       SET I=0
 +46       FOR 
               SET I=$ORDER(^LAB(62.4,LA7624,3,I))
               if 'I
                   QUIT 
               Begin DoDot:1
 +47               IF ($Y+6)>IOSL
                       DO HDR
                       if LA7EXIT
                           QUIT 
                       DO SH2
                       if LA7EXIT
                           QUIT 
 +48               SET X=^LAB(62.4,LA7624,3,I,0)
                   SET X(2)=$GET(^LAB(62.4,LA7624,3,I,2))
 +49               SET LR60=+X
                   SET LR61=$PIECE(X(2),"^",13)
 +50               WRITE !,$JUSTIFY(I,2),?3,$EXTRACT($PIECE(^LAB(60,LR60,0),"^"),1,25)
 +51               SET LA7CODE=$PIECE(X,"^",6)
 +52               WRITE ?30,$SELECT(LA7CODE'="":LA7CODE,1:"<Missing>")
 +53               IF LR61
                       SET X=$PIECE(^LAB(61,LR61,0),"^")_"("_LR61_")"
 +54              IF '$TEST
                       SET X="<Missing>"
 +55               WRITE ?55,X
 +56               SET X="("_$PIECE($$GET1^DIQ(60,LR60_",",5),";",2)_")"
 +57               WRITE !,?3,$EXTRACT($$GET1^DIQ(60,LR60_",",400),1,25-$LENGTH(X))_X
 +58               IF LA7CODE?5N1"."4N
                       Begin DoDot:2
 +59                       SET Y=$ORDER(^LAM("C",LA7CODE_" ",0))
 +60                       IF Y
                               WRITE ?30,$EXTRACT($PIECE(^LAM(Y,0),"^"),1,20)
                       End DoDot:2
 +61               SET X=$SELECT(LR61:$EXTRACT($$GET1^DIQ(61,LR61_",","LEDI HL7:HL7 ABBR"),1,14),1:" ")
 +62               WRITE ?55,$SELECT(X'="":X,1:"<Missing>"),!
 +63               SET LR64=+$PIECE($GET(^LAB(60,LR60,64)),"^",2)
                   SET LR64(0)=$GET(^LAM(LR64,0))
 +64               IF LR64<1
                       WRITE ?3,"Warning - test does not have RESULT NLT CODE assigned.",!
 +65               IF LR64>0
                       IF $PIECE(LR64(0),"^",2)'=LA7CODE
                           WRITE ?3,"Warning - RESULT NLT CODE does not match UI TEST CODE."
               End DoDot:1
               if LA7EXIT
                   QUIT 
 +66      ;
 +67       IF '$DATA(ZTQUEUED)
               IF 'LA7EXIT
                   IF $EXTRACT(IOST,1,2)="C-"
                       DO TERM
 +68       DO CLEAN
 +69       QUIT 
 +70      ;
 +71      ;
REPLAB    ; Define Reporting Lab
 +1       ;LA*5.2*104: Optional to use parameter; only needed if existing logic is
 +2       ;            not retrieving correct reporting lab.
 +3        NEW DIR,DTOUT,DUOUT
 +4        SET DIR("A",1)=" "
 +5        SET DIR("A",2)="Defining a reporting lab using this option is not necessary if"
 +6        SET DIR("A",3)="the reporting lab is currently displaying correctly."
 +7        SET DIR("A",4)=" "
 +8        SET DIR("A")="Do you wish to continue"
 +9        SET DIR(0)="YN"
           SET DIR("B")="YES"
 +10       DO ^DIR
 +11       IF 'Y!($GET(DTOUT))!($GET(DUOUT))
               QUIT 
 +12       DO EDITPAR^XPAREDIT("LR POC REPORTING LAB")
 +13       QUIT 
 +14      ;
 +15      ;
 +16      ;PARLIST added with LA*5.2*104
PARLIST   ; List parameter values for LR POC REPORTING LAB
 +1        NEW LAXPAR,DIR
 +2       ;
 +3        SET LAXPAR=$ORDER(^XTV(8989.51,"B","LR POC REPORTING LAB",0))
 +4        if 'LAXPAR
               QUIT 
 +5        IF LAXPAR<1
               QUIT 
 +6       ;
 +7        DO ALLPAR^XPARLIST(LAXPAR)
 +8        QUIT 
 +9       ;
 +10      ;
CLEAN     ; Clean up and quit
 +1        IF $EXTRACT(IOST,1,2)'="C-"
               WRITE @IOF
 +2        IF '$DATA(ZTQUEUED)
               DO ^%ZISC
 +3       IF '$TEST
               SET ZTREQ="@"
 +4        QUIT 
 +5       ;
 +6       ;
HDR       ; Header for test code mapping
 +1        IF '$DATA(ZTQUEUED)
               IF LA7PAGE
                   IF $EXTRACT(IOST,1,2)="C-"
                       DO TERM
                       if $GET(LA7EXIT)
                           QUIT 
 +2        WRITE @IOF
           SET $X=0
 +3        SET LA7PAGE=LA7PAGE+1
 +4        WRITE !,"Point of Care Test Code Mapping",?IOM-20," Page: ",LA7PAGE
 +5        WRITE !," for interface: ",$PIECE(LA7624(0),"^"),?IOM-23," Printed: ",LA7NOW
 +6        WRITE !,LA7LINE,!
 +7        QUIT 
 +8       ;
 +9       ;
SH1       ; Sub header #1
 +1        WRITE !,"POC Order Test Codes using Load/Work List: ",$PIECE(^LRO(68.2,LRLL,0),"^")
 +2        WRITE !,"#  Lab Test",?30,"Order NLT Code",?50,"Specimen(IEN)",?70,"HL7 Spec"
 +3        WRITE !,?30,"Order NLT Name",?50,"Collection Sample",?70,"WKLD Code"
 +4        WRITE !,LA7LINE2,!
 +5        QUIT 
 +6       ;
 +7       ;
SH2       ; Sub head #2
 +1        WRITE !,"POC Result Test Codes using Auto Instrument: ",$PIECE(LA7624(0),"^")
 +2        WRITE !,"#  Lab Test",?30,"Result NLT Code",?55,"Specimen(IEN)"
 +3        WRITE !,"   Dataname(IEN)",?30,"Result NLT Name",?55,"HL7 Spec"
 +4        WRITE !,LA7LINE2,!
 +5        QUIT 
 +6       ;
 +7       ;
TERM      ;
 +1        NEW DIR,DIRUT,DTOUT,DUOUT,X,Y
 +2        SET DIR(0)="E"
           DO ^DIR
           if $DATA(DIRUT)
               SET LA7EXIT=1
 +3        QUIT