Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: LA7VMSG1

LA7VMSG1.m

Go to the documentation of this file.
  1. LA7VMSG1 ;DALOI/JMC - LAB ORU (Observation Result) message builder cont'd ;Aug 8, 2008
  1. ;;5.2;AUTOMATED LAB INSTRUMENTS;**56,46,61,64,68,74**;Sep 27, 1994;Build 229
  1. ;
  1. START ; Process entries in queue
  1. ; Called from LA7VMSG
  1. ;
  1. N EID,GBL,HLEID,HLMTIEN,HLRESLT,HLARYTYP,HLECH,HLFS,HLCOMP,HLFORMAT,RSITE
  1. N LA,LA76248,LA76249,LA76249P,LA7DT,LA7ECH,LA7END,LA7FS,LA7ID,LA7MID,LA7NVAF,LA7ROOT,LA7V,LA7VS,LA7VER,LA7V0N,LA7VIEN,LA7X
  1. N LAER,LRDFN,LRIDT,LRNT,LRSS,LRUID
  1. ;
  1. ; variable list
  1. ; LA("LRUID") - Host Unique ID from the local ACCESSION file (#68)
  1. ; LA("SITE") - Primary site number of remote site ($$SITE^VASITE)
  1. ; LA("RUID") - Remote sites Unique ID from ACCESSION file (#68)
  1. ; LA("ORD") - Free text ordered test name from WKLD CODE file (#64)
  1. ; LA("LRNLT") - National Laboratory test code from WKLD CODE file (#64)
  1. ; LA("LRIDT") - Inverse date/time (accession date/time)
  1. ; LA("LRSS") - test subscript defined in LABORATORY TEST file (#60)
  1. ; LA("LRDFN") - IEN in LAB DATA file (#63)
  1. ; LA("ORDT") - Order date
  1. ; LA(62.49) - entry in #62.49 which contains pointer to results to build
  1. ;
  1. D LOCK^DILF("^LAHM(62.49,""HL7 PROCESS"",LA7MTYP)")
  1. I '$T Q
  1. ;
  1. S GBL="^TMP(""HLS"","_$J_")"
  1. ;
  1. D SORTPAT
  1. I $D(^TMP("LA76248",$J)) D PROCESS
  1. D KVAR^LRX
  1. ;
  1. ; Release lock
  1. L -^LAHM(62.49,"HL7 PROCESS",LA7MTYP)
  1. ;
  1. K ^TMP("LA76248",$J),^TMP("LA7VS",$J),^TMP("HLS",$J)
  1. ;
  1. I $D(ZTQUEUED) S ZTREQ="@"
  1. ;
  1. Q
  1. ;
  1. ;
  1. SORTPAT ; Sort all results for transmission
  1. ;
  1. N LA76248,LA76249,LA7END,LA7ROOT,LRDFN,LRUID
  1. ;
  1. K ^TMP("LA76248",$J)
  1. ; Flag to indicate end of global.
  1. S LA7END=0
  1. ;
  1. ; Sort by configuration (LA76248), patient (LRDFN), UID (LRUID), file #62.49 ien (LA76249)
  1. ; Check status of each message to insure that cross-reference is not an orphan which can cause
  1. ; repetitive message generation and receving problems.
  1. S LA7ROOT="^LAHM(62.49,""AC"",LA7MTYP,""P"")"
  1. F S LA7ROOT=$Q(@LA7ROOT) Q:LA7END D
  1. . I $QS(LA7ROOT,3)'=LA7MTYP!($QS(LA7ROOT,6)<1) S LA7END=1 Q
  1. . S LA76248=$QS(LA7ROOT,5),LA76249=$QS(LA7ROOT,6)
  1. . D LOCK^DILF("^LAHM(62.49,LA76249)") Q:'$T
  1. . I $P($G(^LAHM(62.49,LA76249,0)),"^",3)'="P" K ^LAHM(62.49,"AC",LA7MTYP,"P",LA76248,LA76249) L -^LAHM(62.49,LA76249) Q
  1. . S LRDFN=$P($G(^LAHM(62.49,LA76249,63)),"^",8)
  1. . S LRUID=$P($G(^LAHM(62.49,LA76249,63)),"^",1)
  1. . I LRDFN,LRUID'="" S ^TMP("LA76248",$J,LA76248,LRDFN,LRUID,LA76249)=""
  1. . L -^LAHM(62.49,LA76249)
  1. ;
  1. Q
  1. ;
  1. ;
  1. PROCESS ; Process and build messages to be sent
  1. ;
  1. N LA7101,LA76248,LA76249,LA76249P,LA7INTYP,LA7NTESN,LA7OBRSN,LA7OBXSN,LA7PIDSN,LA7SMSG,LA7VS,LRDFN
  1. ;
  1. ; Cleanup
  1. K ^TMP("LA7VS",$J),^TMP("HLS",$J)
  1. ; Initialize variables
  1. S (LA76248,LA76249,LA76249P,LA7END,LRDFN)=0,LRUID=""
  1. ;
  1. ; Process sorted list of results to transmit.
  1. S LA7ROOT="^TMP(""LA76248"",$J)"
  1. F S LA7ROOT=$Q(@LA7ROOT) Q:LA7ROOT="" D Q:LA7END
  1. . I $QS(LA7ROOT,1)'="LA76248"!($QS(LA7ROOT,2)'=$J) S LA7END=1 Q
  1. . I LA76248'=$QS(LA7ROOT,3) D CONFIG
  1. . I '$P(LA76248(0),"^",3) Q
  1. . S LA7INTYP=+$P(LA76248(0),"^",9)
  1. . S (LA76249,LA(62.49))=$QS(LA7ROOT,6)
  1. . S LA7X=$G(^LAHM(62.49,LA76249,63))
  1. . S LA("HUID")=$P(LA7X,U),LA("SITE")=$P(LA7X,U,2),LA("RUID")=$P(LA7X,U,3),LA("ORD")=$P(LA7X,U,4),LA("NLT")=$P(LA7X,U,5),LA("LRIDT")=$P(LA7X,U,6),LA("SUB")=$P(LA7X,U,7),LA("LRDFN")=$P(LA7X,U,8),LA("ORDT")=$P(LA7X,U,9)
  1. . S LA7NVAF=$$NVAF^LA7VHLU2(+LA("SITE"))
  1. . I LRUID'=$QS(LA7ROOT,5),LA7SMSG=2 D PAT Q:LA7END
  1. . I LRDFN'=$QS(LA7ROOT,4) D PAT Q:LA7END
  1. . S LRUID=$QS(LA7ROOT,5)
  1. . S ^TMP("LA7VS",$J,LA76249)=LA76249P
  1. . N LA76249
  1. . S LA76249=LA76249P
  1. . I LA7MTYP="ORU" D EN^LA7VORU(.LA)
  1. . I LA7MTYP="ORR" D EN^LA7VORR1(.LA)
  1. ;
  1. I LA76249P D SENDMSG
  1. ;
  1. Q
  1. ;
  1. ;
  1. STARTMSG ; Initialize a HL7 message and variables
  1. ;
  1. N LA7EVNT,SITE
  1. ;
  1. K ^TMP("LA7VS",$J),@GBL
  1. ;
  1. S LA76249P=LA76249
  1. S SITE=$$RETFACID^LA7VHLU2(LA("SITE"),2,1)
  1. ;
  1. I LA7MTYP="ORU" S LA7EVNT="LA7V Results Reporting to "_SITE
  1. I LA7MTYP="ORR" S LA7EVNT="LA7V Order Response to "_SITE
  1. D STARTMSG^LA7VHLU(LA7EVNT,LA76249P)
  1. I $G(HL) S LA7END=1
  1. ;
  1. Q
  1. ;
  1. ;
  1. SENDMSG ; File HL7 message with HL and LAB packages
  1. ;
  1. ; No data to send
  1. I '$D(^TMP("HLS",$J)) Q
  1. ;
  1. D GEN^LA7VHLU
  1. I $P(LA7MID,U)=0 D
  1. . N LA7X
  1. . S LA7X(1)=LA76249P,LA7X(2)=$TR($P(HLMID,"^",2,3),"^","-")
  1. . D CREATE^LA7LOG(28)
  1. ;
  1. D UPDT6249
  1. D UPDLPD
  1. ;
  1. S (LA76249P,LA7PIDSN,LA7OBRSN,LA7OBXSN,LA7NTESN)=0
  1. ;
  1. Q
  1. ;
  1. ;
  1. CONFIG ; Setup for this configuration
  1. ;
  1. ; Send a building message
  1. I LA76249P D SENDMSG
  1. ;
  1. ; Retrieve configuration information from #62.48
  1. S LA76248=$QS(LA7ROOT,3)
  1. S LA76248(0)=$G(^LAHM(62.48,LA76248,0))
  1. ;
  1. ; Flag to control message building; 1-one patient/msg, 2-one order/msg
  1. S LA7SMSG=+$P(LA76248(0),"^",8)
  1. ;
  1. ; Initialize variables
  1. S (LA76249,LA76249P,LRDFN)=0
  1. S LRUID="",LA7ID=$P(LA76248(0),"^")_"-O-"
  1. ;
  1. Q
  1. ;
  1. ;
  1. PAT ; Build patient information
  1. ;
  1. N LA7ALTID,LA7EXTID,LA7PID,LA7PV1
  1. ;
  1. ; If one patient/msg or one order/msg and message building then send it.
  1. I LA7SMSG>0,LA76249P D SENDMSG
  1. ;
  1. ; If no message building then start one.
  1. I 'LA76249P S LA7PIDSN=0 D STARTMSG Q:LA7END
  1. ;
  1. ; Setup PID and PV1 segments.
  1. S LRDFN=$QS(LA7ROOT,4)
  1. S LRDPF=$P(^LR(LRDFN,0),"^",2),DFN=$P(^(0),"^",3)
  1. D DEM^LRX
  1. I $G(PNM)'="" D
  1. . D SETID^LA7VHLU1(LA76249,LA7ID,PNM,0)
  1. . D SETID^LA7VHLU1(LA76249,"",PNM,0)
  1. I $G(SSN)'="" D
  1. . D SETID^LA7VHLU1(LA76249,LA7ID,SSN,0)
  1. . D SETID^LA7VHLU1(LA76249,"",SSN,0)
  1. ;
  1. ; Send placer's patient id (PID-3), return in PID-2, return PID-4 with alternate id
  1. S (LA7ALTID,LA7EXTID)=""
  1. D PTEXTID^LA7VHLU(LA("SITE"),LA("RUID"),.LA7EXTID)
  1. I $G(LA7EXTID("PID-2"))'="" S LA7EXTID=$$CNVFLD^LA7VHLU3(LA7EXTID("PID-2"),LA7EXTID("ECH"),LA7ECH)
  1. I $G(LA7EXTID("PID-4"))'="" S LA7ALTID=$$CNVFLD^LA7VHLU3(LA7EXTID("PID-4"),LA7EXTID("ECH"),LA7ECH)
  1. ;
  1. ; Build PID segment
  1. D PID^LA7VPID(LRDFN,LA7EXTID,.LA7PID,.LA7PIDSN,.HL,LA7ALTID)
  1. D FILESEG^LA7VHLU(GBL,.LA7PID)
  1. D FILE6249^LA7VHLU(LA76249P,.LA7PID)
  1. ;
  1. ; Build PV1 segment
  1. ; Not built when sending to DoD facility - not used by CHCS
  1. I LA7NVAF'=1 D
  1. . D PV1^LA7VPID(LRDFN,.LA7PV1,LA7FS,LA7ECH)
  1. . D FILESEG^LA7VHLU(GBL,.LA7PV1)
  1. . D FILE6249^LA7VHLU(LA76249P,.LA7PV1)
  1. ;
  1. S LRUID="",(LA7OBRSN,LA7OBXSN,LA7NTESN)=0
  1. ;
  1. Q
  1. ;
  1. ;
  1. UPDT6249 ; Update entries in file #62.49
  1. ;
  1. N LA7ERR,LA76249,LA76249P
  1. ;
  1. ; UNDEF HL array will cause HL7 filers to stop. The $G(HL(x)) prevents the filers from halting on UNDEF error but we
  1. ; want to log the missing HL array as an error for system monitoring/troubleshooting.
  1. I $D(HL)<10 D ^%ZTER
  1. ;
  1. S LA76249=0
  1. F S LA76249=$O(^TMP("LA7VS",$J,LA76249)) Q:'LA76249 D
  1. . N FDA,LA7ERR
  1. . S LA76249P=+$G(^TMP("LA7VS",$J,LA76249))
  1. . ; Set pointer to parent on child entry.
  1. . I LA76249'=LA76249P S FDA(1,62.49,LA76249_",",6)=LA76249P
  1. . I $P(^LAHM(62.49,LA76249,0),"^",3)'="E" D
  1. . . I $G(HL("APAT"))="AL"!($G(HL("APAT"))="") S FDA(1,62.49,LA76249_",",2)="A"
  1. . . E S FDA(1,62.49,LA76249_",",2)="X"
  1. . S FDA(1,62.49,LA76249_",",102)=$G(HL("SAN"))
  1. . S FDA(1,62.49,LA76249_",",103)=$G(HL("SAF"))
  1. . S FDA(1,62.49,LA76249_",",108)=$G(HL("MTN"))
  1. . S FDA(1,62.49,LA76249_",",110)=$G(HL("PID"))
  1. . S FDA(1,62.49,LA76249_",",111)=$G(HL("VER"))
  1. . I $P($G(LA7MID),"^")'="" S FDA(1,62.49,LA76249_",",109)=$P(LA7MID,"^")
  1. . I $P($G(LA7MID),"^",2) D
  1. . . S FDA(1,62.49,LA76249_",",160)=$P(LA7MID,"^",2)
  1. . . S FDA(1,62.49,LA76249_",",161)=$P(LA7MID,"^",3)
  1. . D FILE^DIE("","FDA(1)","LA7ERR(1)")
  1. . D CLEAN^DILF
  1. . D UPID^LA7VHLU1(LA76249)
  1. ;
  1. Q
  1. ;
  1. ;
  1. UPDLPD ; Update lab pending orders (#69.6) for each entry in #62.49
  1. ;
  1. N LA76249
  1. ;
  1. S LA76249=0
  1. F S LA76249=$O(^TMP("LA7VS",$J,LA76249)) Q:'LA76249 D UPD696
  1. Q
  1. ;
  1. ;
  1. UPD696 ; Update LAB PENDING ORDERS file #69.6
  1. ;
  1. N LA74,LA7696,LA76964,LA7ERR,LA7ORDT,LA7STAT,LA7X
  1. ;
  1. ; Find "Results Available" status in #64.061
  1. S LA7STAT=$$FIND1^DIC(64.061,"","OMX","Results Available","","I $P(^LAB(64.061,Y,0),U,7)=""U""")
  1. ;
  1. S LA7X=$G(^LAHM(62.49,LA76249,63))
  1. ;
  1. ; Ordering institution - pointer to file #4
  1. S LA74=$P(LA7X,"^",2)
  1. I LA74="" Q
  1. ;
  1. ; Ordered test
  1. S LA7ORDT=$P(LA7X,"^",4)
  1. I LA7ORDT="" Q
  1. ;
  1. ; File #69.6 ien and ordered test multiple ien
  1. S LA7696=0
  1. F S LA7696=$O(^LRO(69.6,"RST",LA74,LA("RUID"),LA7696)) Q:'LA7696 D
  1. . N FDA
  1. . S LA76964=$O(^LRO(69.6,LA7696,2,"B",LA7ORDT,0))
  1. . I LA76964<1 Q
  1. . ;
  1. . D LOCK^DILF("^LRO(69.6,LA7696)")
  1. . ; Cannot get lock on ENTRY in 69.6
  1. . I '$T D CREATE^LA7LOG(33) Q
  1. . ;
  1. . ; Store outgoing HL7 message ID
  1. . S FDA(1,69.64,LA76964_","_LA7696_",",7)=$P(LA7MID,U)
  1. . ; Set to Results Available.
  1. . S FDA(1,69.64,LA76964_","_LA7696_",",5)=LA7STAT
  1. . D FILE^DIE("","FDA(1)","LA7ERR(1)")
  1. . D CLEAN^DILF
  1. . ;
  1. . L -^LRO(69.6,LA7696)
  1. ;
  1. Q