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

LA7VMSG.m

Go to the documentation of this file.
  1. LA7VMSG ;DALOI/JMC - LAB ORU (Observation Result) message builder ;08/12/13 15:12
  1. ;;5.2;AUTOMATED LAB INSTRUMENTS;**27,50,56,46,64,74,80**;Sep 27, 1994;Build 19
  1. ;
  1. ORU ; Bleed the ORU (Observation Result) message queue
  1. ; Tasked by LA7SRR, LRCAPV2, LRU
  1. ;
  1. N LA7MTYP
  1. S LA7MTYP="ORU"
  1. D START^LA7VMSG1
  1. ;
  1. Q
  1. ;
  1. ORR ; Bleed the ORR (Order Response) message queue
  1. ; Called by LRWLST12
  1. ;
  1. N LA7MTYP
  1. S LA7MTYP="ORR"
  1. ;D START^LA7VMSG1
  1. ;
  1. Q
  1. ;
  1. ;
  1. SET(LRUID,SITE,RUID,SITEN,ORD,LRNLT,LRIDT,LRSS,LRDFN,ORDT,LA7VDB,LA7MTYP) ; adds entries to LA7V QUEUE file
  1. ; Called by LA7SRR, LRVER3, LRWLST12
  1. ; variable list
  1. ; LRUID - Host Unique ID from the local ACCESSION file (#68)
  1. ; SITE - remote sites IEN in INSTITUTION file (#4)
  1. ; RUID - Remote sites Unique ID from ACCESSION file (#68)
  1. ; SITEN - Primary site number of remote site ($$SITE^VASITE)
  1. ; ORD - Free text ordered test name from WKLD CODE file (#64)
  1. ; LRNLT - National Laboratory test code from WKLD CODE file (#64)
  1. ; LRIDT - Inverse date/time (accession date/time)
  1. ; LRSS - test subscript defined in LABORATORY TEST file (#60)
  1. ; LRDFN - IEN in LAB DATA file (#63)
  1. ; ORDT - Order date
  1. ; LA7VDB - <opt><byref> Chemistry results or database section
  1. ; for MI, SP, CY, EM subscripts
  1. ; ex. glucose LA7VDB(2)=LR NODE
  1. ; LA7VDB(2,1)="C" (corrected results)
  1. ; MI: LA7VDB(File #64 Field #63)=""
  1. ; SP: LA7VDB("88515.0000")="" CY: LA7VDB("88593.0000")=""
  1. ; EM: LA7VDB("88597.0000")="" AU: LA7VDB("88533.0000")=""
  1. ; LA7MTYP (Optional) - Message Type (ORU or ORR) defaults to ORU
  1. ;
  1. N FDA,LA76248,LA76249,LA7DT,LA7FACID,LA7ERR,LA7RSITE,LA7Y,LAHLSTAT,PORD,PORT,RSITE
  1. ;
  1. S LA7ERR=0
  1. I $G(LA7MTYP)="" S LA7MTYP="ORU"
  1. ; Currently not building ORR when accessioning - JMC/7/11/00
  1. I LA7MTYP="ORR" Q
  1. ;
  1. ; Retrieve facility id (VA=station number, DoD=DMIS code, other=local site assigned id)
  1. S LA7FACID=$$RETFACID^LA7VHLU2(SITEN,2,1),LA76248=0
  1. S LA7RSITE="LA7V COLLECTION "_LA7FACID
  1. S LA76248=$O(^LAHM(62.48,"B",LA7RSITE,0))
  1. ; No entry in 62.48 - *** Need to add error logging ****
  1. I 'LA76248 Q
  1. I '$P(^LAHM(62.48,LA76248,0),"^",3) Q ; not active
  1. ;
  1. ;
  1. ; add check here to see if agency associated with site (SITE) is enabled for this subscript;CKA 6/11
  1. S LAHLSTAT=$$HLSTATUS("ORU",SITE,LRSS)
  1. I 'LAHLSTAT Q
  1. ;
  1. ; Create new outgoing entry in 62.49
  1. S LA76249=$$INIT6249^LA7VHLU
  1. I LA76249<1 D Q
  1. . ; Log entry creation error
  1. ;
  1. ; Check/validate parameters before storing
  1. ; If error store but flag entry with error status.
  1. D CHKACC
  1. ;
  1. ; File data
  1. S FDA(1,62.49,LA76249_",",1)="O"
  1. S FDA(1,62.49,LA76249_",",.5)=LA76248
  1. S FDA(1,62.49,LA76249_",",2)=$S(LA7ERR:"E",1:"P")
  1. S FDA(1,62.49,LA76249_",",5)=LA7RSITE_"-O-"_RUID
  1. S FDA(1,62.49,LA76249_",",108)=LA7MTYP
  1. S FDA(1,62.49,LA76249_",",151)=LRUID
  1. S FDA(1,62.49,LA76249_",",152)=SITEN
  1. S FDA(1,62.49,LA76249_",",153)=RUID
  1. S FDA(1,62.49,LA76249_",",154)=ORD
  1. S FDA(1,62.49,LA76249_",",155)=LRNLT
  1. S FDA(1,62.49,LA76249_",",156)=LRIDT
  1. S FDA(1,62.49,LA76249_",",157)=LRSS
  1. S FDA(1,62.49,LA76249_",",158)=LRDFN
  1. S FDA(1,62.49,LA76249_",",159)=ORDT
  1. ;
  1. D FILE^DIE("","FDA(1)","LA7ERR(1)")
  1. D CLEAN^DILF
  1. ;
  1. ; Add test to order
  1. S LA7Y=0
  1. F S LA7Y=$O(LA7VDB(LA7Y)) Q:'LA7Y D
  1. . N FDAIEN
  1. . S FDA(2,62.49162,"+2,"_LA76249_",",.01)=LA7Y
  1. . I $G(LA7VDB(LA7Y,1))="C" S FDA(2,62.49162,"+2,"_LA76249_",",.02)="C"
  1. . S FDAIEN(1)=LA76249
  1. . D UPDATE^DIE("","FDA(2)","FDAIEN","LA7ERR(2)")
  1. . D CLEAN^DILF
  1. ;
  1. ; Check for date report completed.
  1. I '$$OK2SEND^LA7SRR D CREATE^LA7LOG(122)
  1. ;
  1. ; Release lock on entry.
  1. L -^LAHM(62.49,LA76249)
  1. Q
  1. ;
  1. ;
  1. MIAP(LRAA,LRAD,LRAN,LR60,LRDFN,LRSS,LRIDT,LRODT) ; Makes MI/AP calls to send results to LA7V QUEUE
  1. ;
  1. ; Call with LRAA = accession area IEN
  1. ; LRAD = accession date (FM format)
  1. ; LRAN = accession number
  1. ; LR60 = file #60 test IEN
  1. ; LRDFN = IEN in LAB DATA file (#63)
  1. ; LRSS = test subscript defined in LABORATORY TEST file (#60)
  1. ; LRIDT = Inverse date/time (accession date/time)
  1. ; LRORDT = Order date (FM format)
  1. ;
  1. ; Called by LRVR0, LRMIUT, LRVRAP4
  1. ;
  1. N LA764,LA76248,LA76249,LA7NLT,LA7NLTN,LA7ONQUE,LA7SS,LA7VDB,LA7Y,LRORU3
  1. ;
  1. S LA764=$$GET1^DIQ(60,LR60_",",64,"I")
  1. S LA7NLT=$$GET1^DIQ(64,LA764_",",1)
  1. I LA7NLT="" Q
  1. S LA7NLTN=$$GET1^DIQ(64,LA764_",",.01)
  1. ;
  1. S LA7VDB=$$GET1^DIQ(64,LA764_",",63,"I")
  1. I LA7VDB'="" S LA7Y(LA7VDB)=""
  1. ;
  1. S LRORU3=$G(^LRO(68,LRAA,1,LRAD,1,LRAN,.3))
  1. ;
  1. ; Check if this report is already in the queue
  1. S LA7ONQUE=0
  1. S LA76248=0 F S LA76248=$O(^LAHM(62.49,"AC","ORU","P",LA76248)) Q:'LA76248 D
  1. . S LA76249=0 F S LA76249=$O(^LAHM(62.49,"AC","ORU","P",LA76248,LA76249)) Q:'LA76249 D
  1. . . I $$GET1^DIQ(62.49,LA76249_",",2,"I")'="P" Q
  1. . . ;
  1. . . ; Check the following fields. If they all match, then it's the same report and don't add to the queue again
  1. . . I $P(LRORU3,U,5)'=$$GET1^DIQ(62.49,LA76249_",",153,"I") Q ; Check REMOTE UID
  1. . . I $P(LRORU3,U,3)'=$$GET1^DIQ(62.49,LA76249_",",152,"I") Q ; Check COLLECTING SITE
  1. . . I LA7NLT'=$$GET1^DIQ(62.49,LA76249_",",155,"I") Q ; Check NLT
  1. . . I LRIDT'=$$GET1^DIQ(62.49,LA76249_",",156,"I") Q ; Check LRIDT
  1. . . I LRSS'=$$GET1^DIQ(62.49,LA76249_",",157,"I") Q ; Check LRSS
  1. . . I LRDFN'=$$GET1^DIQ(62.49,LA76249_",",158,"I") Q ; Check LRDFN
  1. . . ;
  1. . . S LA7ONQUE=1 ; All fields match - report already in the queue
  1. ;
  1. I LA7ONQUE D Q ; Report already in queue, don't add again
  1. . W !,$$CJ^XLFSTR("Report already in LEDI queue - no need to add again",IOM)
  1. ;
  1. ;
  1. D SET^LA7VMSG($P(LRORU3,U,4),$P(LRORU3,U,2),$P(LRORU3,U,5),$P(LRORU3,U,3),LA7NLTN,LA7NLT,LRIDT,LRSS,LRDFN,LRODT,.LA7Y,"ORU")
  1. ;
  1. Q
  1. ;
  1. ;
  1. CHKACC ; Check/validate parameters passed in before storing in file #62.49
  1. ;
  1. N I,LA763,LA768,LA7AA,LA7AD,LA7AN
  1. ;
  1. I $G(LRUID)="",$G(RUID)="" Q
  1. I LRUID'="",'$D(^LRO(68,"C",LRUID)) D
  1. . S LRUID=$G(RUID)
  1. . I LRUID'="",'$D(^LRO(68,"C",LRUID)) S LRUID=""
  1. I LRUID="" Q
  1. ;
  1. S I=$Q(^LRO(68,"C",LRUID)),(LA7AA,LA7AD,LA7AN)=0
  1. I I'="",$QS(I,3)=LRUID S LA7AA=$QS(I,4),LA7AD=$QS(I,5),LA7AN=$QS(I,6)
  1. F I=0,.2,.3,3 S LA768(I)=$G(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,I))
  1. ;
  1. F I=0,"ORU" S LA763(I)=$G(^LR(LRDFN,LRSS,LRIDT,I))
  1. ;
  1. ; Mismatch on subscript with file #68
  1. I LRSS'=$P(^LRO(68,LA7AA,0),"^",2) S LA7ERR=40 D CREATE^LA7LOG(LA7ERR)
  1. ;
  1. ; Mismatch on LRDFN with file #68
  1. I LRDFN'=$P(LA768(0),"^") S LA7ERR=41 D CREATE^LA7LOG(LA7ERR)
  1. ;
  1. ; Mismatch on specimen inverse d/t with file #68
  1. I LRIDT'=$P(LA768(3),"^",5) S LA7ERR=42 D CREATE^LA7LOG(LA7ERR)
  1. ;
  1. ; Mismatch on remote UID with file #68
  1. I $G(RUID)'="",RUID'=$P(LA768(.3),"^",5) S LA7ERR=43 D CREATE^LA7LOG(LA7ERR)
  1. ;
  1. ; Mismatch on remote UID with file #63
  1. I $G(RUID)'="",$P(LA763("ORU"),"^",5)'="",RUID'=$P(LA763("ORU"),"^",5) S LA7ERR=44 D CREATE^LA7LOG(LA7ERR)
  1. ;
  1. ; Mismatch on UID between file #63 and file #68
  1. I $P(LA768(.3),"^")'="",$P(LA763("ORU"),"^")'="",$P(LA768(.3),"^")'=$P(LA763("ORU"),"^") S LA7ERR=45 D CREATE^LA7LOG(LA7ERR)
  1. ;
  1. Q
  1. ;
  1. ;
  1. ACK ; ACKnowledgment message processor
  1. ;
  1. G ACK^LA7VHL
  1. Q
  1. HLSTATUS(LA7MTYP,SITE,LRSS) ;
  1. ;
  1. ; Check if agency associated with site has LEDI HL7 messaging enabled for this Subscript.
  1. ;
  1. ; Call with:
  1. ; LA7MTYP = The HL7 message type. Either: "ORU" or "ORM"
  1. ; SITE = Site's IEN in INSTITUTION file (#4)
  1. ; LRSS = Subscript
  1. ;
  1. ; Returns 0: LEDI HL7 messaging is disabled for this SITE and Subscript.
  1. ; 1: LEDI HL7 messaging is enabled for this SITE and Subscript.
  1. ; -- if LSRP cutover is installed and rollback restore is not installed, return 1 (enabled)
  1. I $$PATCH^XPDUTL("LA*5.2*75"),'$$PATCH^XPDUTL("LA*5.2*78") Q 1
  1. ;
  1. N LA7PAR
  1. ;
  1. S LA7PAR=2
  1. I LA7MTYP="ORU" S LA7PAR=$$GET^XPAR("ALL","LA LEDI ORU HL7 STATUS",$$WHAT^XUAF4(SITE,"AGENCY"),"Q")
  1. I LA7MTYP="ORM" S LA7PAR=$$GET^XPAR("ALL","LA LEDI ORM HL7 STATUS",$$WHAT^XUAF4(SITE,"AGENCY"),"Q")
  1. ;
  1. I LA7PAR=0 Q 0
  1. I LA7PAR=2,LRSS'="CH" Q 0
  1. I LA7PAR=3,LRSS'="MI" Q 0
  1. I LA7PAR=4,LRSS'["SPCYEM" Q 0
  1. I LA7PAR=5,"CHMI"'[LRSS Q 0
  1. I LA7PAR=6,"CHSPCYEM"'[LRSS Q 0
  1. I LA7PAR=7,"MISPCYEM"'[LRSS Q 0
  1. ;
  1. Q 1