HLOPBLD1 ;ALB/CJM-HL7 - Building segments (CONTINUED) ;10/24/2006
;;1.6;HEALTH LEVEL SEVEN;**126,132**;Oct 13, 1995;Build 6
;Per VHA Directive 2004-038, this routine should not be modified.
;
BUILDHDR(HLMSTATE,TYPE,HDR) ;Builds the header segment in 2 lines, line 1 is components 1-6
;Input:
; HLMSTATE("HDR") - (pass by reference, required) These subscripts are used:
; "FIELD SEPARATOR"
; "ENCODING CHARACTERS"
; "SENDING APPLICATION"
; "RECEIVING APPLICATION"
; "RECEIVING FACILITY",1 and ,2 and ,3
; "DT/TM OF MESSAGE"
; "SECURITY"
; "ACCEPT ACK TYPE"
; "APP ACK TYPE"
; "PROCESSING ID"
;
; *MSH ONLY*
; "CONTINUATION POINTER"
; "COUNTRY"
; "EVENT"
; "MESSAGE STRUCTURE"
; "MESSAGE TYPE"
; "PROCESSING MODE"
; "VERSION"
;
; *BHS ONLY*
; "REFERENCE BATCH CONTROL ID"
;
; HLMSTATE("BATCH")
; HLMSTATE("BATCH","CURRENT MESSAGE") - batch messages only
; HLMSTATE("IEN") - ien, file 778
;
; TYPE - must be either "MSH" or "BHS"
;
;Output:
; HLMSTATE("HDR") - these subscripts will be added, unless building an MSH within a batch:
; "SENDING FACILITY",1 and ,2 and ,3
; "PROCESSING ID"
; "MESSAGE CONTROL ID" (MSH ONLY)
; "BATCH CONTROL ID" (BHS ONLY)
; "DT/TM OF MESSAGE"
; HDR (pass by reference) This will return the segment in an array form at HDR(1),HDR(2) (two lines).
;
K HDR
N SEG,BATCH,LEN,FS,CS
;
;shortcuts
S HDR="HLMSTATE(""HDR"")"
S BATCH=HLMSTATE("BATCH")
S FS=@HDR@("FIELD SEPARATOR")
S CS=$E(@HDR@("ENCODING CHARACTERS"),1)
;
S HDR(1)=TYPE_FS_@HDR@("ENCODING CHARACTERS")_FS_$$ESCAPE^HLOPBLD(.HLMSTATE,$G(@HDR@("SENDING APPLICATION")))
;
;If building an MSH segment for a batch message, these parameters should already be determined
D:(('HLMSTATE("BATCH"))!(TYPE="BHS"))
.N PORT
.S PORT=$$RTRNPORT^HLOAPP($G(@HDR@("SENDING APPLICATION")))
.S:'PORT PORT=HLMSTATE("SYSTEM","PORT")
.S @HDR@("SENDING FACILITY",1)=HLMSTATE("SYSTEM","STATION")
.S @HDR@("SENDING FACILITY",2)=HLMSTATE("SYSTEM","DOMAIN")_":"_PORT
.S @HDR@("SENDING FACILITY",3)="DNS"
.;
.;create the unique message ids, using the ien from file 778
.S:TYPE="BHS" @HDR@("BATCH CONTROL ID")=HLMSTATE("SYSTEM","STATION")_" "_HLMSTATE("IEN")
.S:TYPE="MSH" @HDR@("MESSAGE CONTROL ID")=HLMSTATE("SYSTEM","STATION")_" "_HLMSTATE("IEN")
.;
.S @HDR@("PROCESSING ID")=HLMSTATE("SYSTEM","PROCESSING ID")
.S @HDR@("DT/TM OF MESSAGE")=$$HLDATE^HLFNC($$NOW^XLFDT,"TS")
;
S HDR(1)=HDR(1)_FS_$$ESCAPE^HLOPBLD(.HLMSTATE,$G(@HDR@("SENDING FACILITY",1)))_CS_$$ESCAPE^HLOPBLD(.HLMSTATE,$G(@HDR@("SENDING FACILITY",2)))_CS_"DNS"
S HDR(1)=HDR(1)_FS_$$ESCAPE^HLOPBLD(.HLMSTATE,$G(@HDR@("RECEIVING APPLICATION")))
S HDR(1)=HDR(1)_FS_$$ESCAPE^HLOPBLD(.HLMSTATE,$G(@HDR@("RECEIVING FACILITY",1)))_CS_$$ESCAPE^HLOPBLD(.HLMSTATE,$G(@HDR@("RECEIVING FACILITY",2)))
S HDR(1)=HDR(1)_CS_$$ESCAPE^HLOPBLD(.HLMSTATE,$G(@HDR@("RECEIVING FACILITY",3)))
S HDR(2)=FS_$$ESCAPE^HLOPBLD(.HLMSTATE,@HDR@("DT/TM OF MESSAGE"))_FS_$$ESCAPE^HLOPBLD(.HLMSTATE,$G(@HDR@("SECURITY")))
;
I TYPE="MSH" D
.N ID
.S HDR(2)=HDR(2)_FS_@HDR@("MESSAGE TYPE")_CS_@HDR@("EVENT")_CS_$$ESCAPE^HLOPBLD(.HLMSTATE,$G(@HDR@("MESSAGE STRUCTURE")))
.S:BATCH ID=@HDR@("BATCH CONTROL ID")_"-"_$G(HLMSTATE("BATCH","CURRENT MESSAGE"))
.S:'BATCH ID=@HDR@("MESSAGE CONTROL ID")
.S HDR(2)=HDR(2)_FS_$$ESCAPE^HLOPBLD(.HLMSTATE,ID)_FS_@HDR@("PROCESSING ID")_CS_$$ESCAPE^HLOPBLD(.HLMSTATE,$G(@HDR@("PROCESSING MODE")))_FS_$$ESCAPE^HLOPBLD(.HLMSTATE,@HDR@("VERSION"))
.S HDR(2)=HDR(2)_FS_FS_$$ESCAPE^HLOPBLD(.HLMSTATE,$G(@HDR@("CONTINUATION POINTER")))_FS_@HDR@("ACCEPT ACK TYPE")_FS_@HDR@("APP ACK TYPE")_FS_$$ESCAPE^HLOPBLD(.HLMSTATE,$G(@HDR@("COUNTRY")))
;
I TYPE="BHS" D
.N TEXT
.S TEXT="PROCESSING ID"_"="_@HDR@("PROCESSING ID")_" "
.I $L($G(@HDR@("ACCEPT ACK TYPE"))) S TEXT=TEXT_"ACCEPT ACK TYPE"_"="_@HDR@("ACCEPT ACK TYPE")_" "
.I $L($G(@HDR@("APP ACK TYPE"))) S TEXT=TEXT_"APP ACK TYPE"_"="_@HDR@("APP ACK TYPE")_" "
.S HDR(2)=HDR(2)_FS_$$ESCAPE^HLOPBLD(.HLMSTATE,TEXT)_FS_FS_$$ESCAPE^HLOPBLD(.HLMSTATE,@HDR@("BATCH CONTROL ID"))_FS_$$ESCAPE^HLOPBLD(.HLMSTATE,$G(@HDR@("REFERENCE BATCH CONTROL ID")))
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HHLOPBLD1 4290 printed Nov 22, 2024@17:09 Page 2
HLOPBLD1 ;ALB/CJM-HL7 - Building segments (CONTINUED) ;10/24/2006
+1 ;;1.6;HEALTH LEVEL SEVEN;**126,132**;Oct 13, 1995;Build 6
+2 ;Per VHA Directive 2004-038, this routine should not be modified.
+3 ;
BUILDHDR(HLMSTATE,TYPE,HDR) ;Builds the header segment in 2 lines, line 1 is components 1-6
+1 ;Input:
+2 ; HLMSTATE("HDR") - (pass by reference, required) These subscripts are used:
+3 ; "FIELD SEPARATOR"
+4 ; "ENCODING CHARACTERS"
+5 ; "SENDING APPLICATION"
+6 ; "RECEIVING APPLICATION"
+7 ; "RECEIVING FACILITY",1 and ,2 and ,3
+8 ; "DT/TM OF MESSAGE"
+9 ; "SECURITY"
+10 ; "ACCEPT ACK TYPE"
+11 ; "APP ACK TYPE"
+12 ; "PROCESSING ID"
+13 ;
+14 ; *MSH ONLY*
+15 ; "CONTINUATION POINTER"
+16 ; "COUNTRY"
+17 ; "EVENT"
+18 ; "MESSAGE STRUCTURE"
+19 ; "MESSAGE TYPE"
+20 ; "PROCESSING MODE"
+21 ; "VERSION"
+22 ;
+23 ; *BHS ONLY*
+24 ; "REFERENCE BATCH CONTROL ID"
+25 ;
+26 ; HLMSTATE("BATCH")
+27 ; HLMSTATE("BATCH","CURRENT MESSAGE") - batch messages only
+28 ; HLMSTATE("IEN") - ien, file 778
+29 ;
+30 ; TYPE - must be either "MSH" or "BHS"
+31 ;
+32 ;Output:
+33 ; HLMSTATE("HDR") - these subscripts will be added, unless building an MSH within a batch:
+34 ; "SENDING FACILITY",1 and ,2 and ,3
+35 ; "PROCESSING ID"
+36 ; "MESSAGE CONTROL ID" (MSH ONLY)
+37 ; "BATCH CONTROL ID" (BHS ONLY)
+38 ; "DT/TM OF MESSAGE"
+39 ; HDR (pass by reference) This will return the segment in an array form at HDR(1),HDR(2) (two lines).
+40 ;
+41 KILL HDR
+42 NEW SEG,BATCH,LEN,FS,CS
+43 ;
+44 ;shortcuts
+45 SET HDR="HLMSTATE(""HDR"")"
+46 SET BATCH=HLMSTATE("BATCH")
+47 SET FS=@HDR@("FIELD SEPARATOR")
+48 SET CS=$EXTRACT(@HDR@("ENCODING CHARACTERS"),1)
+49 ;
+50 SET HDR(1)=TYPE_FS_@HDR@("ENCODING CHARACTERS")_FS_$$ESCAPE^HLOPBLD(.HLMSTATE,$GET(@HDR@("SENDING APPLICATION")))
+51 ;
+52 ;If building an MSH segment for a batch message, these parameters should already be determined
+53 if (('HLMSTATE("BATCH"))!(TYPE="BHS"))
Begin DoDot:1
+54 NEW PORT
+55 SET PORT=$$RTRNPORT^HLOAPP($GET(@HDR@("SENDING APPLICATION")))
+56 if 'PORT
SET PORT=HLMSTATE("SYSTEM","PORT")
+57 SET @HDR@("SENDING FACILITY",1)=HLMSTATE("SYSTEM","STATION")
+58 SET @HDR@("SENDING FACILITY",2)=HLMSTATE("SYSTEM","DOMAIN")_":"_PORT
+59 SET @HDR@("SENDING FACILITY",3)="DNS"
+60 ;
+61 ;create the unique message ids, using the ien from file 778
+62 if TYPE="BHS"
SET @HDR@("BATCH CONTROL ID")=HLMSTATE("SYSTEM","STATION")_" "_HLMSTATE("IEN")
+63 if TYPE="MSH"
SET @HDR@("MESSAGE CONTROL ID")=HLMSTATE("SYSTEM","STATION")_" "_HLMSTATE("IEN")
+64 ;
+65 SET @HDR@("PROCESSING ID")=HLMSTATE("SYSTEM","PROCESSING ID")
+66 SET @HDR@("DT/TM OF MESSAGE")=$$HLDATE^HLFNC($$NOW^XLFDT,"TS")
End DoDot:1
+67 ;
+68 SET HDR(1)=HDR(1)_FS_$$ESCAPE^HLOPBLD(.HLMSTATE,$GET(@HDR@("SENDING FACILITY",1)))_CS_$$ESCAPE^HLOPBLD(.HLMSTATE,$GET(@HDR@("SENDING FACILITY",2)))_CS_"DNS"
+69 SET HDR(1)=HDR(1)_FS_$$ESCAPE^HLOPBLD(.HLMSTATE,$GET(@HDR@("RECEIVING APPLICATION")))
+70 SET HDR(1)=HDR(1)_FS_$$ESCAPE^HLOPBLD(.HLMSTATE,$GET(@HDR@("RECEIVING FACILITY",1)))_CS_$$ESCAPE^HLOPBLD(.HLMSTATE,$GET(@HDR@("RECEIVING FACILITY",2)))
+71 SET HDR(1)=HDR(1)_CS_$$ESCAPE^HLOPBLD(.HLMSTATE,$GET(@HDR@("RECEIVING FACILITY",3)))
+72 SET HDR(2)=FS_$$ESCAPE^HLOPBLD(.HLMSTATE,@HDR@("DT/TM OF MESSAGE"))_FS_$$ESCAPE^HLOPBLD(.HLMSTATE,$GET(@HDR@("SECURITY")))
+73 ;
+74 IF TYPE="MSH"
Begin DoDot:1
+75 NEW ID
+76 SET HDR(2)=HDR(2)_FS_@HDR@("MESSAGE TYPE")_CS_@HDR@("EVENT")_CS_$$ESCAPE^HLOPBLD(.HLMSTATE,$GET(@HDR@("MESSAGE STRUCTURE")))
+77 if BATCH
SET ID=@HDR@("BATCH CONTROL ID")_"-"_$GET(HLMSTATE("BATCH","CURRENT MESSAGE"))
+78 if 'BATCH
SET ID=@HDR@("MESSAGE CONTROL ID")
+79 SET HDR(2)=HDR(2)_FS_$$ESCAPE^HLOPBLD(.HLMSTATE,ID)_FS_@HDR@("PROCESSING ID")_CS_$$ESCAPE^HLOPBLD(.HLMSTATE,$GET(@HDR@("PROCESSING MODE")))_FS_$$ESCAPE^HLOPBLD(.HLMSTATE,@HDR@("VERSION"))
+80 SET HDR(2)=HDR(2)_FS_FS_$$ESCAPE^HLOPBLD(.HLMSTATE,$GET(@HDR@("CONTINUATION POINTER")))_FS_@HDR@("ACCEPT ACK TYPE")_FS_@HDR@("APP ACK TYPE")_FS_$$ESCAPE^HLOPBLD(.HLMSTATE,$GET(@HDR@("COUNTRY")))
End DoDot:1
+81 ;
+82 IF TYPE="BHS"
Begin DoDot:1
+83 NEW TEXT
+84 SET TEXT="PROCESSING ID"_"="_@HDR@("PROCESSING ID")_" "
+85 IF $LENGTH($GET(@HDR@("ACCEPT ACK TYPE")))
SET TEXT=TEXT_"ACCEPT ACK TYPE"_"="_@HDR@("ACCEPT ACK TYPE")_" "
+86 IF $LENGTH($GET(@HDR@("APP ACK TYPE")))
SET TEXT=TEXT_"APP ACK TYPE"_"="_@HDR@("APP ACK TYPE")_" "
+87 SET HDR(2)=HDR(2)_FS_$$ESCAPE^HLOPBLD(.HLMSTATE,TEXT)_FS_FS_$$ESCAPE^HLOPBLD(.HLMSTATE,@HDR@("BATCH CONTROL ID"))_FS_$$ESCAPE^HLOPBLD(.HLMSTATE,$GET(@HDR@("REFERENCE BATCH CONTROL ID")))
End DoDot:1
+88 QUIT