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

LR7OVB.m

Go to the documentation of this file.
  1. LR7OVB ;HOIFO/BNT - Lab Receive HL7 Order Update from VBECS ;2/22/08 21:19
  1. ;;5.2;LAB SERVICE;**367**;Sep 27, 1994;Build 12
  1. ;Reference to $$FIND1^DIC supported by IA #2051
  1. ;Reference to EN^ORMVBEC supported by IA #4982
  1. ;Reference to $$HL7TFM^XLFDT supported by IA #10103
  1. ;Reference to $$NOW^XLFDT supported by IA #10103
  1. ;Reference to $$STRIP^XLFSTR supported by IA #10104
  1. ;
  1. EN1(LRMSG) ; Entry point for LR7O VBECS RECEIVE Protocol
  1. N LRSEG,LRSEGID,LRERR,LRACK,ORDCNTRL,LROIEN,LRTST,LRDFN,DFN,LRI,LRJ,ORIFN,ORDSTS,ORDCNTRL
  1. S LRQUIT=0
  1. S LRI=0 F S LRI=$O(LRMSG(LRI)) Q:'LRI D Q:$D(LRERR)!(LRQUIT)
  1. . S LRSEG=LRMSG(LRI),LRSEGID=$P(LRMSG(LRI),HL("FS"))
  1. . I $T(@LRSEGID)]"" D @LRSEGID
  1. Q:$D(LRERR)!(LRQUIT)
  1. ;
  1. I 'LRACK D GENACK
  1. Q
  1. ;
  1. ORC ; - Process ORC segment
  1. S ORDCNTRL=$TR($P(LRSEG,HL("FS"),2),"@","P")
  1. I '$L(ORDCNTRL) S LRERR="Invalid control code" D ERROR Q
  1. S ORDSTS=$P(LRSEG,HL("FS"),6)
  1. I ORDSTS'="CM" D ERROR Q
  1. Q
  1. ;
  1. OBR ; -- Process OBR segment
  1. S LROIEN=$P($P(LRSEG,HL("FS"),14),";")
  1. S LRTST=$$STRIP^XLFSTR($P($P(LRSEG,HL("FS"),14),";",4)," ")
  1. I LRTST']"" S LRERR="Missing Lab Test ID" D ERROR Q
  1. I LROIEN']"" S LRERR="Missing Lab Test IEN" D ERROR Q
  1. ; Complete the Lab Order
  1. D COMPLETE(LROIEN,LRTST,LRDFN1)
  1. Q
  1. ;
  1. PID ; -- Process PID segment
  1. N I,X,PIDLST
  1. ; Adding logic to support v2.4 Patient Id List
  1. S PIDLST=$P(LRSEG,HL("FS"),4)
  1. I PIDLST[$E(HL("ECH")) D
  1. . F I=1:1:$L(PIDLST,$E(HL("ECH"),2)) S X=$P(PIDLST,$E(HL("ECH"),2),I) Q:X="" I $P(X,$E(HL("ECH")),5)["PI" S LRDFN1=+X Q
  1. I PIDLST'[$E(HL("ECH")) S LRDFN1=+$P(LRSEG,HL("FS"),4)
  1. I '$D(^DPT(LRDFN1,0)) S LRERR="Invalid Patient Id "_LRDFN1 D ERROR Q
  1. Q
  1. ;
  1. FMDATE(Y) ; -- Convert HL7 date/time to FM format
  1. Q $$HL7TFM^XLFDT(Y) ;**97
  1. ;
  1. ERROR ;
  1. S LRQUIT=1
  1. I 'LRACK D GENACK
  1. Q
  1. ;
  1. COMPLETE(LROIEN,LRTST,LRDFN1) ; - Complete the accession for this test and the OERR order
  1. ; LROIEN = File 69 IEN
  1. ; LRTST = File 60 IEN
  1. ; LRDFN1 = File 2 IEN
  1. N LRA,LRB,LRC,LR0,LRV,LRAA,LRY,LRAD,LRAN,LRODT,LRSN
  1. S (LRQUIT,LRW)=0
  1. I '$D(LRACK) S LRACK=1
  1. I '$D(^LRO(69,"C",LROIEN)) S LRERR="Invalid Lab Order Number" D ERROR Q
  1. S LRA=0 F S LRA=$O(^LRO(69,"C",LROIEN,LRA)) Q:'LRA D Q:LRQUIT
  1. . S LRB=0 F S LRB=$O(^LRO(69,"C",LROIEN,LRA,LRB)) Q:'LRB D
  1. . . ; Order has been merged.
  1. . . I $P($G(^LRO(69,LRA,1,LRB,1)),"^",7)]"" D ERROR Q
  1. . . S LRC=0 F S LRC=$O(^LRO(69,LRA,1,LRB,2,LRC)) Q:'LRC D
  1. . . . S LR0=^LRO(69,LRA,1,LRB,2,LRC,0) Q:+LR0'=LRTST
  1. . . . S LRDFN=$P(^LRO(69,LRA,1,LRB,0),"^",1)
  1. . . . I $P($G(^LR(LRDFN,0)),"^",3)'=LRDFN1 S LRERR="Lab Patient on order does not match patient DFN" D ERROR Q
  1. . . . S LRAA=$P($G(LR0),"^",4)
  1. . . . S LRAD=$P($G(LR0),"^",3)
  1. . . . S LRAN=$P($G(LR0),"^",5)
  1. . . . S ORIFN=$P($G(LR0),"^",7)
  1. . . . S LRK=$$NOW^XLFDT()
  1. . . . I '$$FIND1^DIC(68.04,","_LRAN_","_LRAD_","_LRAA_",","QUX",LRTST,,,"LRERR") Q ;Test not ordered or not accession. Same action either way.
  1. . . . S LRV=$$GET1^DIQ(68.04,LRTST_","_LRAN_","_LRAD_","_LRAA_",",4,"I",,"LRERR") Q:LRV ;Already complete
  1. . . . S X=^LRO(68,LRAA,1,LRAD,1,LRAN,0)
  1. . . . S LRSVC=$P(X,"^",9)
  1. . . . S LRLLOC=$P(X,"^",7)
  1. . . . S LRDFN=+X Q:'$D(^LR(LRDFN,0))
  1. . . . S LRODT=$P(X,"^",4)
  1. . . . S LRSN=$P(X,"^",5)
  1. . . . ;S LRLABPOC=$$FIND1^DIC(200,,"BOX","LRLAB,POC",,,"ERR") S:'LRLABPOC LRLABPOC=".5"
  1. . . . K DIERR,LRFDA D FDA^DILF(68.04,LRTST_","_LRAN_","_LRAD_","_LRAA_",",4,,LRK,"LRFDA")
  1. . . . D FDA^DILF(68.04,LRTST_","_LRAN_","_LRAD_","_LRAA_",",3,,"LRLAB,POC","LRFDA")
  1. . . . D FILE^DIE("E","LRFDA","LRERR")
  1. . . . S Y=^LRO(68,LRAA,1,LRAD,1,LRAN,0),Y(4)=$P(Y,"^",4),Y(5)=$P(Y,"^",5)
  1. . . . ;Y(4)=Date Ordered, Y(5)=Specimen Number
  1. . . . I Y(4),Y(5),$D(^LRO(69,Y(4),1,Y(5),3)) K DIERR,LRFDA D FDA^DILF(69.01,Y(5)_","_Y(4)_",",21,,LRK,"LRFDA") Q:$D(DIERR) D FILE^DIE("E","LRFDA","LRERR")
  1. . . . S:'$D(^LRO(68,LRAA,1,LRAD,1,LRAN,4,LRTST,1,0)) ^(0)="^68.14P^^"
  1. . . . S ORDCNTRL="SC",ORDSTS="CM"
  1. . . . D EN^ORMVBEC
  1. . . . Q
  1. ;
  1. Q
  1. ;
  1. GENACK ; -- Send an acknowldegement to original message
  1. ;Q:$G(VBTEST)
  1. S MSA1="AA"
  1. I $D(LRERR) S MSA1="AR"
  1. S HLA("HLA",1)="MSA"_HL("FS")_MSA1_HL("FS")_HL("MID")_$S($D(LRERR):HL("FS")_LRERR,1:"")
  1. S HLEID=HL("EID"),HLEIDS=HL("EIDS")
  1. D GENACK^HLMA1(HL("EID"),HLMTIENS,HL("EIDS"),"LM",1,.RESULT)
  1. K MSA
  1. Q