LA7VIN4A ;DALOI/JMC - Process Incoming UI Msgs, continued ;Jun 14, 2022@18:38
 ;;5.2;AUTOMATED LAB INSTRUMENTS;**74,80,88,101**;Sep 27, 1994;Build 6
 ;
 ;This routine is a continuation of LA7VIN4 and is only called from there.
 Q
 ;
 ; ZEXCEPT is used to identify variables which are external to a specific TAG
 ;         used in conjunction with Eclipse M-editor.
 ;
LAGEN ; Sets up variables for call to ^LAGEN,  build entry in LAH
 ; requires LA7INST,LA7TRAY,LA7CUP,LA7AA,LA7AD,LA7AN,LA7LWL
 ; returns LA7ISQN=subscript to store results in ^LAH global
 ;
 I LA7ENTRY="LOG" D
 . I LA7INTYP>19,LA7INTYP<30 Q
 . I '$D(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,0)) S LA7ERR=13,LA7AERR=$$CREATE^LA7LOG(LA7ERR,1)
 I LA7ENTRY="LLIST" S:'LA7CUP LA7CUP=LA7IDE ;cup=sequence number
 ;
 K LA7ISQN,LADT,LAGEN
 K TRAY,CUP,LWL,WL,LROVER,METH,LOG,IDENT,ISQN
 ;
 S LA7ISQN=""
 S TRAY=+$G(LA7TRAY) S:'TRAY TRAY=1
 S CUP=+$G(LA7CUP) S:'CUP CUP=1
 ;
 S LWL=LA7LWL
 I '$D(^LRO(68.2,+LWL,0)) D  Q
 . S LA7ERR=19,LA7AERR=$$CREATE^LA7LOG(LA7ERR,1)
 ;
 ; Set accession area to area of specimen, allow multiple areas on same instrument.
 S WL=LA7AA
 I '$D(^LRO(68,+WL,0)) D  Q
 . S LA7ERR=20,LA7AERR=$$CREATE^LA7LOG(LA7ERR,1)
 S LROVER=$P(LA7624(0),"^",12)
 ;
 ; LEDI(MI & AP) override #62.4 setting so results never overlay unless same message
 I LA7INTYP=10 D
 . I LA7SS'?1(1"MI",1"SP",1"CY",1"EM") Q
 . ; Use same entry in LAH if handling multiple OBR within same message for same accession/test
 . I $P($G(LA7INTYP("ISQN",LWL)),"^",1,3)=(LA76249_"^"_LA7UID_"^"_LA7ONLT) S ISQN=$P(LA7INTYP("ISQN",LWL),"^",4),LROVER=2 Q
 . S LROVER=0
 S METH=$P(LA7624(0),"^",10)
 S LOG=LA7AN
 S IDENT=$P($G(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,0)),"^",6) ;identity field
 S IDE=+LA7IDE
 S LADT=LA7AD
 ;
 ; If auto release then set flag to not overlay data in LAH unless from same message.
 I LA7OBR49="AR" S LROVER=0
 I $G(LA7UID)'="",$D(^TMP("LA7 AR",$J,LA7LWL,1,"AUTOREL-UID",LA7UID)) D
 . N I
 . S I=0
 . F  S I=$O(^TMP("LA7 AR",$J,LA7LWL,1,"AUTOREL-UID",LA7UID,I)) Q:'I  I $D(^TMP("LA7 AR",$J,LA7LWL,1,"AUTOREL-UID",LA7UID,I,LA76249)) S ISQN=I,LROVER=2 Q
 ;
 I LROVER<2 D
 . N LRDFN ; Protect LRDFN - call into LAGEN can set to 0
 . ;
 . ; If POC interface call special entry point
 . I LA7INTYP>19,LA7INTYP<30 S IDE=LA76249 D POC^LAGEN Q
 . ;
 . D @(LA7ENTRY_"^LAGEN") ;this disregards the CROSS LINK field in 62.4
 ;
 S LA7ISQN=$G(ISQN)
 ;
 I LA7ISQN<1 Q
 ; Save entry made in LAH for this load list and message for this accession (UID)
 I LA7INTYP=10 S LA7INTYP("ISQN",LWL)=LA76249_"^"_LA7UID_"^"_LA7ONLT_"^"_LA7ISQN
 ;
 ; Build/store patient demographics array
 N I,J,LA7OBRA,LA7PIDA,X,Y
 S J="DFN^DOB^ICN^LOC^LRDFN^LRTDFN^PNM^SEX^SSN"
 S J(0)="DFN^LA7DOB^LA7ICN^LA7LOC^LRDFN^LRTDFN^LA7PNM^LA7SEX^LA7SSN"
 F I=1:1 S X=$P(J,"^",I) Q:X=""  D
 . S Y=$P(J(0),"^",I)
 . I $G(@Y)'="" S LA7PIDA(X)=@Y
 I $D(LA7PIDA) D POI^LAGEN(LA7LWL,LA7ISQN,"PID",.LA7PIDA)
 ;
 ; Build/store order info array
 N LA7ONLTS
 I LA7POP'="" S LA7POP=$P(LA7POP," [")
 S X=$G(^LAH(LA7LWL,1,LA7ISQN,.1,"OBR","ORDNLT"))
 I X'="",LA7ONLT'="",X'[LA7ONLT S LA7ONLTS=X_"^"_LA7ONLT
 E  S LA7ONLTS=LA7ONLT
 S J="EOL^FID^ORCDT^ORDNLT^ORDP^ORDSPEC^PON^SID^PEB^PVB^PRI^ARI^TECH"
 S J(0)="LA7EOL^LA7FID^LA7CDT^LA7ONLTS^LA7POP^LA7SPEC^LA7PON^LA7SID^LA7PEB^LA7PVB^LA7PRI^LA7ARI^LA7TECH"
 F I=1:1 S X=$P(J,"^",I) Q:X=""  D
 . S Y=$P(J(0),"^",I)
 . I $G(@Y)'="" S LA7OBRA(X)=@Y
 I $D(LA7OBRA) D POI^LAGEN(LA7LWL,LA7ISQN,"OBR",.LA7OBRA)
 ;
 ; Save placer fields 1/2 and filler fields 1/2
 I LA7SOBR>0 F I=18:1:21 S X=$P("PF1^PF2^FF1^FF2","^",I-17) S ^LAH(LA7LWL,1,LA7ISQN,.1,"OBR",X,LA7SOBR)=LA7OBR(I)
 ;
 ; Store interface type with results
 D LATYP^LAGEN(LA7LWL,LA7ISQN,LA7INTYP)
 ;
 ; Store #62.49 ien with results
 D LAMSGID^LAGEN(LA7LWL,LA7ISQN,LA76249)
 ;
 ; Store method name with LAH entry
 D METH^LAGEN(LA7LWL,LA7ISQN,METH)
 ;
 ; Set flag if POC interface to start POC processing routine when
 ; finished - tasked by LA7VIN before shutdown
 I LA7INTYP>19,LA7INTYP<30 S LA7INTYP("LWL",LA7LWL)=""
 ;
 Q
 ;
 ;
SMUPDT ; Update shipping manifest in shipping event file #62.85
 N LA7DATA,LA7NCS,LA7TST,LA7USID
 ;
 S LA7USID=$$P^LA7VHLU(.LA7SEG,5,LA7FS) ; Universal Service ID (OBR-4)
 S LA7TST=$P(LA7USID,LA7CS,1) ; Test code
 S LA7NCS=$P(LA7USID,LA7CS,3) ; Name of coding system
 S LA7TST(2)=$P(LA7USID,LA7CS,4) ; Alternate test code
 S LA7NCS(2)=$P(LA7USID,LA7CS,6) ; Alternate coding system
 ;
 ; Determine ordered test, check primary and alternate
 ;LA*5.2*101: Pass in LA7629
 S LA7OTST=$$DOT^LA7SMU1(LA7TST,LA7NCS,LA7UID,$P(LA7SM,"^"),$G(LA7629))
 I 'LA7OTST,LA7TST(2)'="" S LA7OTST=$$DOT^LA7SMU1(LA7TST(2),LA7NCS(2),LA7UID,$P(LA7SM,"^"),$G(LA7629))
 ;
 ; Flag the Results Received Event in #62.85
 I LA7MTYP="ORU" D
 . S LA7DATA="SM70"_"^"_LA7MEDT_"^"_$G(LA7OTST)_"^"_$P(LA7SM,"^",2)
 . D SEUP^LA7SMU(LA7UID,"2",LA7DATA)
 ;
 ; Flag the Test Received Event in #62.85
 I LA7MTYP="ORR" D
 . S LA7DATA="SM55"_"^"_LA7MEDT_"^"_$G(LA7OTST)_"^"_$P(LA7SM,"^",2)
 . D SEUP^LA7SMU(LA7UID,"2",LA7DATA)
 Q
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HLA7VIN4A   5143     printed  Sep 23, 2025@19:16:26                                                                                                                                                                                                    Page 2
LA7VIN4A  ;DALOI/JMC - Process Incoming UI Msgs, continued ;Jun 14, 2022@18:38
 +1       ;;5.2;AUTOMATED LAB INSTRUMENTS;**74,80,88,101**;Sep 27, 1994;Build 6
 +2       ;
 +3       ;This routine is a continuation of LA7VIN4 and is only called from there.
 +4        QUIT 
 +5       ;
 +6       ; ZEXCEPT is used to identify variables which are external to a specific TAG
 +7       ;         used in conjunction with Eclipse M-editor.
 +8       ;
LAGEN     ; Sets up variables for call to ^LAGEN,  build entry in LAH
 +1       ; requires LA7INST,LA7TRAY,LA7CUP,LA7AA,LA7AD,LA7AN,LA7LWL
 +2       ; returns LA7ISQN=subscript to store results in ^LAH global
 +3       ;
 +4        IF LA7ENTRY="LOG"
               Begin DoDot:1
 +5                IF LA7INTYP>19
                       IF LA7INTYP<30
                           QUIT 
 +6                IF '$DATA(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,0))
                       SET LA7ERR=13
                       SET LA7AERR=$$CREATE^LA7LOG(LA7ERR,1)
               End DoDot:1
 +7       ;cup=sequence number
           IF LA7ENTRY="LLIST"
               if 'LA7CUP
                   SET LA7CUP=LA7IDE
 +8       ;
 +9        KILL LA7ISQN,LADT,LAGEN
 +10       KILL TRAY,CUP,LWL,WL,LROVER,METH,LOG,IDENT,ISQN
 +11      ;
 +12       SET LA7ISQN=""
 +13       SET TRAY=+$GET(LA7TRAY)
           if 'TRAY
               SET TRAY=1
 +14       SET CUP=+$GET(LA7CUP)
           if 'CUP
               SET CUP=1
 +15      ;
 +16       SET LWL=LA7LWL
 +17       IF '$DATA(^LRO(68.2,+LWL,0))
               Begin DoDot:1
 +18               SET LA7ERR=19
                   SET LA7AERR=$$CREATE^LA7LOG(LA7ERR,1)
               End DoDot:1
               QUIT 
 +19      ;
 +20      ; Set accession area to area of specimen, allow multiple areas on same instrument.
 +21       SET WL=LA7AA
 +22       IF '$DATA(^LRO(68,+WL,0))
               Begin DoDot:1
 +23               SET LA7ERR=20
                   SET LA7AERR=$$CREATE^LA7LOG(LA7ERR,1)
               End DoDot:1
               QUIT 
 +24       SET LROVER=$PIECE(LA7624(0),"^",12)
 +25      ;
 +26      ; LEDI(MI & AP) override #62.4 setting so results never overlay unless same message
 +27       IF LA7INTYP=10
               Begin DoDot:1
 +28               IF LA7SS'?1(1"MI",1"SP",1"CY",1"EM")
                       QUIT 
 +29      ; Use same entry in LAH if handling multiple OBR within same message for same accession/test
 +30               IF $PIECE($GET(LA7INTYP("ISQN",LWL)),"^",1,3)=(LA76249_"^"_LA7UID_"^"_LA7ONLT)
                       SET ISQN=$PIECE(LA7INTYP("ISQN",LWL),"^",4)
                       SET LROVER=2
                       QUIT 
 +31               SET LROVER=0
               End DoDot:1
 +32       SET METH=$PIECE(LA7624(0),"^",10)
 +33       SET LOG=LA7AN
 +34      ;identity field
           SET IDENT=$PIECE($GET(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,0)),"^",6)
 +35       SET IDE=+LA7IDE
 +36       SET LADT=LA7AD
 +37      ;
 +38      ; If auto release then set flag to not overlay data in LAH unless from same message.
 +39       IF LA7OBR49="AR"
               SET LROVER=0
 +40       IF $GET(LA7UID)'=""
               IF $DATA(^TMP("LA7 AR",$JOB,LA7LWL,1,"AUTOREL-UID",LA7UID))
                   Begin DoDot:1
 +41                   NEW I
 +42                   SET I=0
 +43                   FOR 
                           SET I=$ORDER(^TMP("LA7 AR",$JOB,LA7LWL,1,"AUTOREL-UID",LA7UID,I))
                           if 'I
                               QUIT 
                           IF $DATA(^TMP("LA7 AR",$JOB,LA7LWL,1,"AUTOREL-UID",LA7UID,I,LA76249))
                               SET ISQN=I
                               SET LROVER=2
                               QUIT 
                   End DoDot:1
 +44      ;
 +45       IF LROVER<2
               Begin DoDot:1
 +46      ; Protect LRDFN - call into LAGEN can set to 0
                   NEW LRDFN
 +47      ;
 +48      ; If POC interface call special entry point
 +49               IF LA7INTYP>19
                       IF LA7INTYP<30
                           SET IDE=LA76249
                           DO POC^LAGEN
                           QUIT 
 +50      ;
 +51      ;this disregards the CROSS LINK field in 62.4
                   DO @(LA7ENTRY_"^LAGEN")
               End DoDot:1
 +52      ;
 +53       SET LA7ISQN=$GET(ISQN)
 +54      ;
 +55       IF LA7ISQN<1
               QUIT 
 +56      ; Save entry made in LAH for this load list and message for this accession (UID)
 +57       IF LA7INTYP=10
               SET LA7INTYP("ISQN",LWL)=LA76249_"^"_LA7UID_"^"_LA7ONLT_"^"_LA7ISQN
 +58      ;
 +59      ; Build/store patient demographics array
 +60       NEW I,J,LA7OBRA,LA7PIDA,X,Y
 +61       SET J="DFN^DOB^ICN^LOC^LRDFN^LRTDFN^PNM^SEX^SSN"
 +62       SET J(0)="DFN^LA7DOB^LA7ICN^LA7LOC^LRDFN^LRTDFN^LA7PNM^LA7SEX^LA7SSN"
 +63       FOR I=1:1
               SET X=$PIECE(J,"^",I)
               if X=""
                   QUIT 
               Begin DoDot:1
 +64               SET Y=$PIECE(J(0),"^",I)
 +65               IF $GET(@Y)'=""
                       SET LA7PIDA(X)=@Y
               End DoDot:1
 +66       IF $DATA(LA7PIDA)
               DO POI^LAGEN(LA7LWL,LA7ISQN,"PID",.LA7PIDA)
 +67      ;
 +68      ; Build/store order info array
 +69       NEW LA7ONLTS
 +70       IF LA7POP'=""
               SET LA7POP=$PIECE(LA7POP," [")
 +71       SET X=$GET(^LAH(LA7LWL,1,LA7ISQN,.1,"OBR","ORDNLT"))
 +72       IF X'=""
               IF LA7ONLT'=""
                   IF X'[LA7ONLT
                       SET LA7ONLTS=X_"^"_LA7ONLT
 +73      IF '$TEST
               SET LA7ONLTS=LA7ONLT
 +74       SET J="EOL^FID^ORCDT^ORDNLT^ORDP^ORDSPEC^PON^SID^PEB^PVB^PRI^ARI^TECH"
 +75       SET J(0)="LA7EOL^LA7FID^LA7CDT^LA7ONLTS^LA7POP^LA7SPEC^LA7PON^LA7SID^LA7PEB^LA7PVB^LA7PRI^LA7ARI^LA7TECH"
 +76       FOR I=1:1
               SET X=$PIECE(J,"^",I)
               if X=""
                   QUIT 
               Begin DoDot:1
 +77               SET Y=$PIECE(J(0),"^",I)
 +78               IF $GET(@Y)'=""
                       SET LA7OBRA(X)=@Y
               End DoDot:1
 +79       IF $DATA(LA7OBRA)
               DO POI^LAGEN(LA7LWL,LA7ISQN,"OBR",.LA7OBRA)
 +80      ;
 +81      ; Save placer fields 1/2 and filler fields 1/2
 +82       IF LA7SOBR>0
               FOR I=18:1:21
                   SET X=$PIECE("PF1^PF2^FF1^FF2","^",I-17)
                   SET ^LAH(LA7LWL,1,LA7ISQN,.1,"OBR",X,LA7SOBR)=LA7OBR(I)
 +83      ;
 +84      ; Store interface type with results
 +85       DO LATYP^LAGEN(LA7LWL,LA7ISQN,LA7INTYP)
 +86      ;
 +87      ; Store #62.49 ien with results
 +88       DO LAMSGID^LAGEN(LA7LWL,LA7ISQN,LA76249)
 +89      ;
 +90      ; Store method name with LAH entry
 +91       DO METH^LAGEN(LA7LWL,LA7ISQN,METH)
 +92      ;
 +93      ; Set flag if POC interface to start POC processing routine when
 +94      ; finished - tasked by LA7VIN before shutdown
 +95       IF LA7INTYP>19
               IF LA7INTYP<30
                   SET LA7INTYP("LWL",LA7LWL)=""
 +96      ;
 +97       QUIT 
 +98      ;
 +99      ;
SMUPDT    ; Update shipping manifest in shipping event file #62.85
 +1        NEW LA7DATA,LA7NCS,LA7TST,LA7USID
 +2       ;
 +3       ; Universal Service ID (OBR-4)
           SET LA7USID=$$P^LA7VHLU(.LA7SEG,5,LA7FS)
 +4       ; Test code
           SET LA7TST=$PIECE(LA7USID,LA7CS,1)
 +5       ; Name of coding system
           SET LA7NCS=$PIECE(LA7USID,LA7CS,3)
 +6       ; Alternate test code
           SET LA7TST(2)=$PIECE(LA7USID,LA7CS,4)
 +7       ; Alternate coding system
           SET LA7NCS(2)=$PIECE(LA7USID,LA7CS,6)
 +8       ;
 +9       ; Determine ordered test, check primary and alternate
 +10      ;LA*5.2*101: Pass in LA7629
 +11       SET LA7OTST=$$DOT^LA7SMU1(LA7TST,LA7NCS,LA7UID,$PIECE(LA7SM,"^"),$GET(LA7629))
 +12       IF 'LA7OTST
               IF LA7TST(2)'=""
                   SET LA7OTST=$$DOT^LA7SMU1(LA7TST(2),LA7NCS(2),LA7UID,$PIECE(LA7SM,"^"),$GET(LA7629))
 +13      ;
 +14      ; Flag the Results Received Event in #62.85
 +15       IF LA7MTYP="ORU"
               Begin DoDot:1
 +16               SET LA7DATA="SM70"_"^"_LA7MEDT_"^"_$GET(LA7OTST)_"^"_$PIECE(LA7SM,"^",2)
 +17               DO SEUP^LA7SMU(LA7UID,"2",LA7DATA)
               End DoDot:1
 +18      ;
 +19      ; Flag the Test Received Event in #62.85
 +20       IF LA7MTYP="ORR"
               Begin DoDot:1
 +21               SET LA7DATA="SM55"_"^"_LA7MEDT_"^"_$GET(LA7OTST)_"^"_$PIECE(LA7SM,"^",2)
 +22               DO SEUP^LA7SMU(LA7UID,"2",LA7DATA)
               End DoDot:1
 +23       QUIT