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

LA7VORM1.m

Go to the documentation of this file.
  1. LA7VORM1 ;DALOI/DLR - LAB ORM (Order) message builder ;06/19/12 16:19
  1. ;;5.2;AUTOMATED LAB INSTRUMENTS;**27,51,46,61,64,68,74**;Sep 27, 1994;Build 229
  1. ;
  1. BUILD(LA7628) ;
  1. ; Call with LA7628 = ien of entry in file #62.8 Shipping Manifest
  1. ;
  1. N DFN,DIC,ECNT,EID,GBL,HL,HLCOMP,HLFS,HLQ,HLSUB,I,INT
  1. N LA,LA7101,LA760,LA76248,LA76249,LA762801,LA7629,LA7ECH,LA7ERR,LA7FS,LA7HDR,LA7ID,LA7INTYP,LA7MID,LA7NVAF,LA7OBRSN,LA7OBXSN,LA7PIDSN,LA7SMSG,LA7UID,LA7V,LA7VIEN,LA7X,LAEVNT
  1. N LRAA,LRACC,LRAD,LRAN,LRDFN,LRI,LTST,NLT,NLTIEN,NTST,ORUID,PCNT,RUID,SHP,SHPC,SITE,SNIEN,TIEN,X,Y
  1. ;
  1. I $G(LA7628)<1!('$D(^LAHM(62.8,+$G(LA7628),0))) D Q
  1. . ; Need to add error logging for manifest not found.
  1. . D EXIT
  1. ;
  1. S GBL="^TMP(""HLS"","_$J_")",ECNT=1
  1. S LA7628(0)=$G(^LAHM(62.8,LA7628,0))
  1. S LA7629=$P(LA7628(0),U,2)
  1. S LA7629(0)=$G(^LAHM(62.9,LA7629,0))
  1. S LA76248=+$P(LA7629(0),"^",7)
  1. S LA76248(0)=$G(^LAHM(62.48,LA76248,0))
  1. I '$P(LA76248(0),"^",3) D EXIT Q ; not active
  1. ;
  1. S LA7V("INST")=$P(LA7629(0),U,11)
  1. Q:LA7V("INST")=$P(LA7629(0),U,6) ;Same system shipment
  1. ;
  1. S LA7NVAF=$$NVAF^LA7VHLU2(+LA7V("INST")),SITE=""
  1. S SITE=$$ID^XUAF4($S(LA7NVAF=0:"VASTANUM",LA7NVAF=1:"DMIS",LA7NVAF=2:"ASUFAC",1:"VASTANUM"),+$P(LA7629(0),U,11))
  1. S LA7V("NON")=$P(LA7629(0),U,12)
  1. I LA7V("NON")'="" S SITE=LA7V("NON")
  1. ;
  1. S LA7X=$$NVAF^LA7VHLU2(+$P(LA7629(0),U,2))
  1. S LA7V("CLNT")=$$ID^XUAF4($S(LA7X=0:"VASTANUM",LA7X=1:"DMIS",LA7X=2:"ASUFAC",1:"VASTANUM"),+$P(LA7629(0),U,2))
  1. S $P(LA7V("CLNT"),U,2)=$P($$NS^XUAF4(+$P(LA7629(0),U,2)),"^")
  1. ;
  1. S LA7X=$$NVAF^LA7VHLU2(+$P(LA7629(0),U,3))
  1. S LA7V("HOST")=$$ID^XUAF4($S(LA7X=0:"VASTANUM",LA7X=1:"DMIS",LA7X=2:"ASUFAC",1:"VASTANUM"),+$P(LA7629(0),U,3))
  1. S $P(LA7V("HOST"),U,2)=$P($$NS^XUAF4(+$P(LA7629(0),U,3)),"^")
  1. ;
  1. ; Assuming the receiving institution is the primary site (site with the computer system)
  1. ;
  1. ; Sort tests by patient,UID,test - only need to build one PID, PV1 per patient
  1. ; ^TMP("LA7628",$J, LRDFN, accession UID, ien of shipping manifest specimen entry)
  1. K ^TMP("LA7628",$J),^TMP("LA7SM",$J)
  1. S LA762801=0
  1. F S LA762801=$O(^LAHM(62.8,LA7628,10,LA762801)) Q:'LA762801 D
  1. . S X(0)=$G(^LAHM(62.8,LA7628,10,LA762801,0))
  1. . I $P(X(0),"^",8)=0 Q ; Removed from manifest
  1. . ;
  1. . ; Check to see if agency associated with site
  1. . ; has LEDI HL7 messaging enabled for this subscript.
  1. . ; Don't build it to TMP if not enabled.
  1. . ;
  1. . N LRUID,LRY,LRAA,LRSS,LAHLSTAT
  1. . S LRUID=$P(X(0),"^",5)
  1. . S LRY=$$CHECKUID^LRWU4(LRUID,"")
  1. . I 'LRY Q
  1. . S LRAA=$P(LRY,"^",2)
  1. . S LRSS=$$GET1^DIQ(68,LRAA,.02,"I")
  1. . S LAHLSTAT=$$HLSTATUS^LA7VMSG("ORM",+$P(LA7629(0),U,3),LRSS)
  1. . I 'LAHLSTAT Q
  1. . ;
  1. . I $P(X(0),"^"),$P(X(0),"^",5)'="" D
  1. . . S ^TMP("LA7628",$J,+$P(X(0),"^"),$P(X(0),"^",5),LA762801)=""
  1. . . S ^TMP("LA7SM",$J,+$P(X(0),"^",7),+$P(X(0),"^",9),$P(X(0),"^",5),LA762801)=""
  1. K LA762801
  1. ;
  1. ; Setup item identifiers for messages
  1. D ITEM
  1. ;
  1. ; Nothing to send
  1. I '$D(^TMP("LA7628",$J)) D EXIT Q
  1. ;
  1. ; Set flag = 0 (multiple PID's/message - build one message)
  1. ; 1 (one PID/message - build multiple messages)
  1. ; 2 (one ORC/message - build multiple messages)
  1. S LA7SMSG=+$P(LA76248(0),"^",8)
  1. ;
  1. ; Determine interface type
  1. S LA7INTYP=+$P(LA76248(0),"^",9)
  1. ;
  1. I LA7SMSG=0 D Q:$G(HL)
  1. . D STARTMSG
  1. . I $G(HL) D EXIT
  1. ;
  1. S (LRDFN,LRI,LA7PIDSN)=0
  1. F S LRDFN=$O(^TMP("LA7628",$J,LRDFN)) Q:'LRDFN D Q:$G(HL)
  1. . N LA7PID,LA7PV1
  1. . I LA7SMSG=1 D STARTMSG Q:$G(HL)
  1. . I LA7SMSG<2 D PID,PV1
  1. . S LA7UID=""
  1. . F S LA7UID=$O(^TMP("LA7628",$J,LRDFN,LA7UID)) Q:LA7UID="" D
  1. . . N LA76802,LA7ORC,X
  1. . . S X=$Q(^LRO(68,"C",LA7UID))
  1. . . I $QS(X,3)'=LA7UID Q
  1. . . S LRAA=$QS(X,4),LRAD=$QS(X,5),LRAN=$QS(X,6)
  1. . . F I=0,.2,.3,3 S LA76802(I)=$G(^LRO(68,LRAA,1,LRAD,1,LRAN,I))
  1. . . S I=$O(^LRO(68,LRAA,1,LRAD,1,LRAN,5,0))
  1. . . I I>0 S LA76802(5)=$G(^LRO(68,LRAA,1,LRAD,1,LRAN,5,I,0))
  1. . . E S LA76802(5)=""
  1. . . I LA7SMSG=2 D STARTMSG Q:$G(HL) D PID,PV1
  1. . . S (LA7OBRSN,LA762801)=0
  1. . . F S LA762801=$O(^TMP("LA7628",$J,LRDFN,LA7UID,LA762801)) Q:'LA762801 D
  1. . . . N LA7OBR,I
  1. . . . F I=0,.1,1,2,5,"SCT" S LA762801(I)=$G(^LAHM(62.8,LA7628,10,LA762801,I))
  1. . . . I $$CHKTST^LA7SMU(LA7628,LA762801)'=0 Q ;deleted accession
  1. . . . D ORC,OBR^LA7VORM3,OBX^LA7VORM3,BLG
  1. . . I LA7SMSG=2 D SENDMSG
  1. . I LA7SMSG=1 D SENDMSG
  1. ;
  1. I LA7SMSG=0 D SENDMSG
  1. ;
  1. ;
  1. EXIT ;
  1. K @GBL,^TMP("LA7628",$J),^TMP("LA7ITEM",$J),^TMP("LA7SM",$J)
  1. K DIC,DFN,EID,HL,HLCOMP,HLFS,HLQ,HLSUB,INT
  1. K LA760,LA7628,LA762801,LA7629
  1. K LA7ECH,LA7FS,LA7MID,LA7V,LA7HDR,LA7OBRSN,LA7OBXSN,LA7VIEN,LAEVNT
  1. K LRAA,LRACC,LRAD,LRAN,LRDFN,LRI
  1. K LTST,NLT,NLTIEN,PCNT,RUID,SNIEN,TIEN,X,Y,LA
  1. D KVAR^LRX
  1. I $D(ZTQUEUED) S ZTREQ="@"
  1. Q
  1. ;
  1. ;
  1. STARTMSG ; Create/initialize HL message
  1. ;
  1. K @GBL
  1. S (LA76249,LA7PIDSN)=0
  1. D STARTMSG^LA7VHLU("LA7V Order to "_SITE,.LA76249)
  1. D SETID^LA7VHLU1(LA76249,"","LA7V HOST "_SITE_"-O-"_$P($G(LA7628(0)),"^"),1)
  1. S LA7ID="LA7V HOST "_SITE_"-O-"_$P($G(LA7628(0)),"^")_"-"
  1. Q
  1. ;
  1. ;
  1. SENDMSG ; File HL7 message with HL and LAB packages.
  1. ;
  1. N LA7DATA
  1. ; If no message to send then quit
  1. I '$D(^TMP("HLS",$J)) D Q
  1. . N FDA,LA7ER
  1. . I $G(LA76248) S FDA(1,62.49,LA76249_",",.5)=LA76248
  1. . S FDA(1,62.49,LA76249_",",1)="O"
  1. . S FDA(1,62.49,LA76249_",",2)="E"
  1. . D FILE^DIE("","FDA(1)","LA7ER(1)")
  1. . D CLEAN^DILF
  1. . L -^LAHM(62.49,LA76249)
  1. ;
  1. D GEN^LA7VHLU
  1. S LA7DATA="SM06"_"^"_$$NOW^XLFDT
  1. D SEUP^LA7SMU($P(LA7628(0),"^"),"1",LA7DATA)
  1. D UPDT6249
  1. ; Unlock entry
  1. L -^LAHM(62.49,LA76249)
  1. Q
  1. ;
  1. ;
  1. UPDT6249 ; update entry in 62.49
  1. ;
  1. N FDA,LA7ER
  1. ;
  1. I $G(LA76248) S FDA(1,62.49,LA76249_",",.5)=LA76248
  1. S FDA(1,62.49,LA76249_",",1)="O"
  1. ;
  1. ; Check for acknowledgment type and set status accordingly.
  1. ; If no commit/application ack then original mode(application ack)
  1. ; Check for commit ack when HL package sends these to application.
  1. I $P(^LAHM(62.49,LA76249,0),"^",3)'="E" D
  1. . I $G(LA7ERR) S FDA(1,62.49,LA76249_",",2)="E" Q
  1. . I $G(HL("APAT"))="",$G(HL("ACAT"))="" S FDA(1,62.49,LA76249_",",2)="A" Q
  1. . I $G(HL("APAT"))="AL" S FDA(1,62.49,LA76249_",",2)="A"
  1. . E S FDA(1,62.49,LA76249_",",2)="X"
  1. I $G(HL("SAN"))'="" S FDA(1,62.49,LA76249_",",102)=HL("SAN")
  1. I $G(HL("SAF"))'="" S FDA(1,62.49,LA76249_",",103)=HL("SAF")
  1. I $G(HL("MTN"))'="" S FDA(1,62.49,LA76249_",",108)=HL("MTN")
  1. I $G(HL("PID"))'="" S FDA(1,62.49,LA76249_",",110)=HL("PID")
  1. I $G(HL("VER"))'="" S FDA(1,62.49,LA76249_",",111)=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)","LA7ER(1)")
  1. D CLEAN^DILF
  1. D UPID^LA7VHLU1(LA76249)
  1. Q
  1. ;
  1. ;
  1. PID ; Patient identification
  1. N X
  1. S LRDPF=$P(^LR(LRDFN,0),"^",2),DFN=$P(^(0),"^",3)
  1. D DEM^LRX
  1. I $G(PNM)'="" D SETID^LA7VHLU1(LA76249,"",PNM,0)
  1. D PID^LA7VPID(LRDFN,"",.LA7PID,.LA7PIDSN,.HL,"")
  1. ; DoD/CHCS facilities only use 1st repetition of PID-3.
  1. I LA7NVAF=1 D
  1. . S X=$P(LA7PID(0),LA7FS,4),X=$P(X,$E(LA7ECH,2))
  1. . S $P(LA7PID(0),LA7FS,4)=X
  1. D FILESEG^LA7VHLU(GBL,.LA7PID)
  1. D FILE6249^LA7VHLU(LA76249,.LA7PID)
  1. Q
  1. ;
  1. ;
  1. PV1 ; Location information
  1. ; DoD/CHCS facilities do not use PV1 segment
  1. I LA7INTYP=10,LA7NVAF=1 Q
  1. ;
  1. D PV1^LA7VPID(LRDFN,.LA7PV1,LA7FS,LA7ECH)
  1. D FILESEG^LA7VHLU(GBL,.LA7PV1)
  1. D FILE6249^LA7VHLU(LA76249,.LA7PV1)
  1. Q
  1. ;
  1. ;
  1. ORC ;Order Control
  1. ;
  1. N ORC,LA7DATA,LA7DUR,LA7DURU,LA76205,LA762801,LA7X,X
  1. ;
  1. S ORC(0)="ORC"
  1. S ORC(1)=$$ORC1^LA7VORC("NW")
  1. ;
  1. ; Place order number - accession UID
  1. S ORC(2)=$$ORC2^LA7VORC($P(LA76802(.3),"^"),LA7FS,LA7ECH)
  1. ;
  1. ; Placer group number - shipping manifest invoice #
  1. S ORC(4)=$$ORC4^LA7VORC($P(LA7628(0),"^"),LA7FS,LA7ECH)
  1. ;
  1. ; Quantity/Timing
  1. S (LA76205,LA7DUR,LA7DURU)=""
  1. S LA762801=0
  1. F S LA762801=$O(^TMP("LA7628",$J,LRDFN,LA7UID,LA762801)) Q:'LA762801 D
  1. . N I,LA760
  1. . ; Test duration
  1. . F I=0,2 S LA762801(I)=$G(^LAHM(62.8,LA7628,10,LA762801,I))
  1. . I $P(LA762801(2),"^",4) D
  1. . . S LA7DUR=$P(LA762801(2),"^",6) ; collection duration
  1. . . S LA7DURU=$P(LA762801(2),"^",7) ; duration units
  1. . ; Test urgency - find highest urgency on accession
  1. . S LA760=+$P(LA762801(0),"^",2)
  1. . S X=+$$GET1^DIQ(68.04,LA760_","_LRAN_","_LRAD_","_LRAA_",",1,"I")
  1. . I 'LA76205 S LA76205=X
  1. . I LA76205,X<LA76205 S LA76205=X
  1. S ORC(7)=$$ORC7^LA7VORC(LA7DUR,LA7DURU,LA76205,LA7FS,LA7ECH)
  1. ;
  1. ; Order Date/Time - if no order date/time then try draw time (only send date if d/t is inexact (2nd piece))
  1. I $P(LA76802(0),"^",4) S ORC(9)=$$ORC9^LA7VORC($P(LA76802(0),"^",4))
  1. I '$P(LA76802(0),"^",4),$P(LA76802(3),"^") D
  1. . K LA7X
  1. . S LA7X=$P(LA76802(3),"^") S:$P(LA76802(3),"^",2) LA7X=$P(LA7X,".")
  1. . S ORC(9)=$$ORC9^LA7VORC(LA7X)
  1. ;
  1. ; Ordering provider
  1. S LA7X=$$FNDOLOC^LA7VHLU2(LA7UID)
  1. S ORC(12)=$$ORC12^LA7VORC($P(LA76802(0),"^",8),$P(LA7X,"^",3),LA7FS,LA7ECH,2)
  1. ;
  1. ; Entering organization - VA facility
  1. S ORC(17)=$$ORC17^LA7VORC($P($G(LA7629(0)),U,2),LA7FS,LA7ECH)
  1. ;
  1. ; Ordering facility/address
  1. I $P($G(LA7629(0)),U,2) D
  1. . S ORC(21)=$$ORC21^LA7VORC($P(LA7629(0),U,2),LA7FS,LA7ECH)
  1. . S ORC(22)=$$ORC22^LA7VORC($P(LA7629(0),U,2),$P(LA76802(3),"^"),LA7FS,LA7ECH)
  1. ;
  1. D BUILDSEG^LA7VHLU(.ORC,.LA7DATA,LA7FS)
  1. D FILESEG^LA7VHLU(GBL,.LA7DATA)
  1. D FILE6249^LA7VHLU(LA76249,.LA7DATA)
  1. D SETID^LA7VHLU1(LA76249,LA7ID,$P(LA76802(.3),"^"),0)
  1. D SETID^LA7VHLU1(LA76249,"",$P(LA76802(.3),"^"),0)
  1. D SETID^LA7VHLU1(LA76249,"",$P(LA76802(.2),"^"),0)
  1. Q
  1. ;
  1. ;
  1. ITEM ; Setup identifier for item in PLACER FIELD 2.
  1. N LA7ITEM,LA7PC,LA7PREFX,LA7SC,LA7ROOT,LA7UID
  1. K ^TMP("LA7ITEM",$J)
  1. S LA7ROOT="^TMP(""LA7SM"",$J)",(LA7ITEM,LA7PC,LA7PREFX,LA7SC)=0,LA7UID=""
  1. F S LA7ROOT=$Q(@LA7ROOT) Q:LA7ROOT="" Q:$QS(LA7ROOT,1)'="LA7SM"!($QS(LA7ROOT,2)'=$J) D
  1. . I LA7SC'=$QS(LA7ROOT,3) S LA7PREFX=LA7PREFX+1,LA7ITEM=0,LA7SC=$QS(LA7ROOT,3),LA7PC=$QS(LA7ROOT,4),LA7UID=""
  1. . I LA7PC'=$QS(LA7ROOT,4) S LA7PREFX=LA7PREFX+1,LA7ITEM=0,LA7PC=$QS(LA7ROOT,4),LA7UID=""
  1. . I LA7UID'=$QS(LA7ROOT,5) S LA7UID=$QS(LA7ROOT,5),LA7ITEM=LA7ITEM+1
  1. . S ^TMP("LA7ITEM",$J,LA7UID,$QS(LA7ROOT,6))=LA7PREFX_"-"_LA7ITEM
  1. Q
  1. ;
  1. ;
  1. BLG ; Billing segment
  1. ;
  1. N LA7BLG
  1. ;
  1. I $P(LA7629(0),U,13)="" Q
  1. S LA7BLG(0)=$$BLG^LA7VHLU($P(LA7629(0),"^",13),"CO",LA7FS,LA7ECH)
  1. D FILESEG^LA7VHLU(GBL,.LA7BLG)
  1. D FILE6249^LA7VHLU(LA76249,.LA7BLG)
  1. Q