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

VAFCADT2.m

Go to the documentation of this file.
  1. VAFCADT2 ;ALB/RJS - HL7 ADT MESSAGE BUILDING ROUTINE ; 3/6/06 8:24am
  1. ;;5.3;Registration;**91,179,209,415,494,484,508,692**;Aug 13, 1993
  1. ;hl7v1.6
  1. ;
  1. ;This routine builds ADT HL7 messages: A01 = Admission
  1. ; A02 = Transfer
  1. ; A03 = Discharge
  1. ; A08 = Treating Specialty Update
  1. ; A11 = Cancel Admission
  1. ; A12 = Cancel Transfer
  1. ; A13 = Cancel Discharge
  1. ;
  1. ;It is called by VAFCADT1, which is itself is called by the
  1. ;DGPM patient movement event driver.
  1. ;
  1. ;
  1. BLDMSG(DFN,EVENT,VAFHDT,EVCODE,IEN,PIVOT,PV1) ;
  1. ;Required Variables are: DFN = IEN of Patient File
  1. ; EVENT = HL7 Event, A01, A02, A03, etc.
  1. ; VAFHDT = Date/Time of Admission, Transfer, etc
  1. ;
  1. ;Optional Variables are: Event Code = (EVCODE):A string literal which is
  1. ; inserted in the Event Reason
  1. ; Code Field of the EVN segment
  1. ; of the message. This serves to
  1. ; indicate that the message might
  1. ; need to be processed in a special
  1. ; way. PIMS ADT software uses the
  1. ; Event Code to indicate whether
  1. ; the message is the most recent
  1. ; "Snapshot" of the data "05" or
  1. ; a "Snapshot" of data that is
  1. ; followed by more recent data "04"
  1. ;
  1. ;
  1. ; IEN = The IEN of the Patient Movement
  1. ; that the HL7 message is being
  1. ; built from. This is especially
  1. ; useful for Discharge Movements
  1. ; where date/time (VAFHDT) is not
  1. ; enough information to retrieve
  1. ; the movement
  1. ;
  1. ; PIVOT = The PIMS Pivot number that
  1. ; uniquely identifies the ADMISSION
  1. ;
  1. ; PV1 = In the case of a "Deleted
  1. ; Admission" the record in the
  1. ; Patient Movement File has already
  1. ; been deleted. But, a PV1 segment
  1. ; can be built from the DGPMP
  1. ; variable that has been saved off
  1. ; by the DGPM Event Driver. This
  1. ; PV1 segment is passed a string
  1. ; literal that is built by a call
  1. ; to DGBUILD^VAFHAPV1 previous to
  1. ; calling this software.
  1. ;
  1. K HLA N VAFDIAG,LIN,VAFSTR,DGREL,DGINC,DGINR,DGDEP,VAFZEL
  1. ;Q:($G(EVCODE)'="05")
  1. ;
  1. K HL
  1. I EVENT="A08" D INIT^HLFNC2("VAFC ADT-A08-TSP SERVER",.HL)
  1. I EVENT'="A08" D INIT^HLFNC2("VAFC ADT-"_EVENT_" SERVER",.HL)
  1. I $D(HL)#2 G EXIT
  1. S LIN=1
  1. S VAFSTR=$$COMMANUM^VAFCADT2(2,9)_",10B,11PC,"_$$COMMANUM^VAFCADT2(13,21)_",22B,"_$$COMMANUM^VAFCADT2(23,30)
  1. S HLA("HLS",$$ADD(.LIN,1))=$$EN^VAFCPID(DFN,VAFSTR)
  1. I +HLA("HLS",LIN)=-1 K HLA("HLS",2) G EXIT
  1. ;I $G(VAFPID(1))]"" S HLA("HLS",LIN,1)=VAFPID(1)
  1. ;I $G(VAFPID(2))]"" S HLA("HLS",LIN,2)=VAFPID(2)
  1. MERGE HLA("HLS",LIN)=VAFPID K VAFPID
  1. S $P(HLA("HLS",LIN),HLFS,2)=1 ;SET ID
  1. S VAFSTR=$$COMMANUM(1,12)
  1. S HLA("HLS",$$ADD(.LIN,1))=$$EN^VAFHLPD1(DFN,VAFSTR)
  1. S VAFSTR=$$COMMANUM(1,21)
  1. S HLA("HLS",$$ADD(.LIN,1))=$$EN^VAFHLZPD(DFN,VAFSTR)
  1. S $P(HLA("HLS",LIN),HLFS,2)=1 ;SET ID
  1. I EVENT="A11" D G NEXT
  1. . S HLA("HLS",$$ADD(.LIN,1))=PV1
  1. . S $P(HLA("HLS",LIN),HLFS,51)=$G(PIVOT) ; VISIT&SET ID'S
  1. I EVENT="A01"!(EVENT="A03")!(EVENT="A08")!(EVENT="A12")!(EVENT="A13") D G NEXT
  1. . S VAFSTR=$$COMMANUM(2,5)_","_$$COMMANUM(7,45)
  1. . S HLA("HLS",$$ADD(.LIN,1))=$$IN^VAFHLPV1(DFN,VAFHDT,VAFSTR,$G(IEN),PIVOT,"",.VAFDIAG)
  1. I EVENT="A02" D G NEXT
  1. . S VAFSTR=$$COMMANUM(2,45)
  1. . S HLA("HLS",$$ADD(.LIN,1))=$$IN^VAFHLPV1(DFN,VAFHDT,VAFSTR,$G(IEN),PIVOT,"",.VAFDIAG)
  1. G EXIT
  1. NEXT ;
  1. S $P(HLA("HLS",LIN),HLFS,2)=1 ;PV1 SET ID
  1. S HLA("HLS",1)="EVN"_HLFS_EVENT_HLFS_$$HLDATE^HLFNC(VAFHDT,"TS")_HLFS
  1. S HLA("HLS",1)=HLA("HLS",1)_HLFS_$G(EVCODE) ;,1
  1. ;Get patient directory call center parameter
  1. N VAFCCON
  1. S VAFCCON=$$GET^XPAR("SYS","DG PT DIRECTORY CALL CENTER")
  1. I VAFCCON S HLA("HLS",$$ADD(.LIN,1))=$$EN^VAFHLPV2(DFN,IEN,",22,")
  1. S VAFSTR=$$COMMANUM(1,4)
  1. N HLAROL
  1. D BLDROL^VAFCROL("HLAROL",DFN,VAFHDT,VAFSTR,$G(PIVOT),$G(IEN))
  1. N I,J,K
  1. S I=""
  1. F K=1:1 S I=+$O(HLAROL(I)) Q:('I) D
  1. . S J=""
  1. . F S J=$O(HLAROL(I,J)) Q:(J="") D
  1. . . S:('J) HLA("HLS",LIN+K)=HLAROL(I,J)
  1. . . S:(J) HLA("HLS",LIN+K,J)=HLAROL(I,J)
  1. S LIN=LIN+K-1
  1. I (EVENT="A01")!(EVENT="A08")!(EVENT="A11")!(EVENT="A12")!(EVENT="A13") DO
  1. . S HLA("HLS",$$ADD(.LIN,1))="DG1"_HLFS_1_HLFS_HLFS_HLFS_$$HLQ^VAFHUTL($G(VAFDIAG))
  1. S VAFSTR=$$COMMANUM(1,5)
  1. S HLA("HLS",$$ADD(.LIN,1))=$$EN^VAFHLZSP(DFN,1,1)
  1. S VAFSTR=$$COMMANUM(1,22)
  1. S HLA("HLS",$$ADD(.LIN,1))=$$EN^VAFHLZEL(DFN,VAFSTR,2)
  1. S VAFSTR=$$COMMANUM(1,9)
  1. S HLA("HLS",$$ADD(.LIN,1))=$$EN^VAFHLZCT(DFN,VAFSTR,1)
  1. S VAFSTR=$$COMMANUM(1,8)
  1. S HLA("HLS",$$ADD(.LIN,1))=$$EN^VAFHLZEM(DFN,VAFSTR,1,1)
  1. D ALL^DGMTU21(DFN,"V",VAFHDT,"R")
  1. S VAFSTR=$$COMMANUM(1,13)
  1. S HLA("HLS",$$ADD(.LIN,1))=$$EN^VAFHLZIR(+$G(DGINR("V")),VAFSTR,1)
  1. S VAFSTR=$$COMMANUM(1,10)
  1. S HLA("HLS",$$ADD(.LIN,1))=$$EN^VAFHLZEN(DFN,VAFSTR,1,HL("Q"),HL("FS"))
  1. D:$D(VATRACE) LOOP
  1. ;
  1. S COUNTER=""
  1. F S COUNTER=$O(HLA("HLS",COUNTER)) Q:COUNTER'>0 D
  1. .; I +(HLA("HLS",COUNTER))=-1 S HLERR="Bad "_COUNTER_" Segment"
  1. . I +(HLA("HLS",COUNTER))=-1 S HL="Bad "_COUNTER_" Segment"
  1. .
  1. ;
  1. EXIT ;
  1. ;I $D(HL)=1 DO
  1. ;. S HLERR(1)=HL
  1. ;. D EBULL^VAFHUTL2(DFN,VAFHDT,PIVOT,"HLERR(")
  1. I $D(HL)>1,$D(HLA("HLS")) DO
  1. . I EVENT="A08" DO
  1. . . D GENERATE^HLMA("VAFC ADT-A08-TSP SERVER","LM",1,.HLRST,"")
  1. . E D GENERATE^HLMA("VAFC ADT-"_EVENT_" SERVER","LM",1,.HLRST,"")
  1. .
  1. D KVAR^VADPT,KVAR^VAFHLPV1 K HLA,HLERR
  1. Q
  1. LOOP ;
  1. ;
  1. ;
  1. W !!
  1. N XX S XX=0
  1. F S XX=$O(HLA("HLS",XX)) Q:XX="" W !,HLA("HLS",XX)
  1. Q
  1. ;
  1. COMMANUM(FROM,TO) ;Build comma separated list of numbers
  1. ;Input : FROM - Starting number (default = 1)
  1. ; TO - Ending number (default = FROM)
  1. ;Output : Comma separated list of numbers between FROM and TO
  1. ; (Ex: 1,2,3)
  1. ;Notes : Call assumes FROM <= TO
  1. ;
  1. S FROM=$G(FROM) S:(FROM="") FROM=1
  1. S TO=$G(TO) S:(TO="") TO=FROM
  1. N OUTPUT,X
  1. S OUTPUT=FROM
  1. F X=(FROM+1):1:TO S OUTPUT=(OUTPUT_","_X)
  1. Q OUTPUT
  1. ;
  1. ADD(LINE,COUNTER) ;Increments Line = Line + Counter
  1. ;Input : LINE - Line number
  1. ; COUNTER - Increment number
  1. ;Output : Updated LINE value
  1. ;
  1. S LINE=$G(LINE),COUNTER=$G(COUNTER)
  1. S LINE=LINE+COUNTER
  1. Q LINE