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

ALPBGEN.m

Go to the documentation of this file.
  1. ALPBGEN ;SFVAMC/JC - Build HL7 PMU messages ;03/11/2004 15:54
  1. ;;3.0;BAR CODE MED ADMIN;**7,8,102,127**;March 2004;Build 6
  1. HL7(XUIEN,XUFLG,XUSR) ;GENERATE MESSAGE - For Subscriber to XUSER DATA REQUEST (BCBU PMU MESSAGE BUILDER)
  1. ;Build HL7 PMU~B01 or B02 message from array XUSR() and XUNAME()
  1. ;B01=Personnel Add/Create event type
  1. ;B02=Personnel Update event type
  1. ;
  1. ;CHECK IF BCBU IS ACTIVE AT PACKAGE LEVEL
  1. Q:+$$GET^XPAR("PKG.BAR CODE MED ADMIN","PSB BKUP ONLINE",1,"Q")'>0
  1. Q:'$D(XUSR) ;Array of user data from Kernel
  1. Q:'$D(XUIEN) ;Internal entry of user required
  1. ;
  1. ;SFVAMC/JC - 10/8/03 ADD CHECK FOR BCMA USER STATUS
  1. I '$G(XUSR("TERMINATION DATE")),'$G(XUSR("DISUSER")),$$ISBCMA^ALPBGEN2(XUIEN)<1 Q
  1. ;
  1. N ALPBEVN,MT,FS,EC,CS,RS,ESC,SS,N,ALERR,ALPBDIV,ALPBRCV,ECS,EEC,EFS,ERS,ESS,HLA,HLMTIENS,HLNEXT,HLNODE,HLQUIT,ZTDESC,ZTIO,ZTRTN,ZTSAVE,ZTSK
  1. S ALPBEVN=$S(XUFLG=1:"PSB BCBU PMU_B01 EVENT",1:"PSB BCBU PMU_B02 EVENT")
  1. S ALPBRCV=$S(XUFLG=1:"PSB BCBU PMU_B01 RECV",1:"PSB BCBU PMU_B02 RECV")
  1. K HL D INIT^HLFNC2(ALPBEVN,.HL)
  1. I +$G(HL) W !,HL Q ;SETUP ERROR or no subscribers.
  1. S N=0
  1. S MT=$S(XUFLG=1:"B01",1:"B02")
  1. S FS=$G(HL("FS")) Q:FS="" ;Field separator
  1. S EC=$G(HL("ECH")) Q:EC="" ;Encoding Characters
  1. S CS=$E(EC) ;Component separator
  1. S RS=$E(EC,2) ;Repetition separator
  1. S ESC=$E(EC,3) ;Escape character
  1. S SS=$E(EC,4) ;Subcomponent separator
  1. S EEC=ESC_"E"_ESC ;escaped escape character
  1. S EFS=ESC_"F"_ESC ;escaped field separator
  1. S ECS=ESC_"S"_ESC ;escaped component separator
  1. S ERS=ESC_"R"_ESC ; escaped Repetition separator
  1. S ESS=ESC_"T"_ESC ;escaped subcomponent separator
  1. EVN ;EVN segment
  1. S N=N+1
  1. S HLA("HLS",N)="EVN"_FS_MT_FS_$$FMTHL7^XLFDT($$NOW^XLFDT)
  1. GSTF ;Generate Staff Detail Segment
  1. N ALPBSSN,STF S STF="STF"
  1. S $P(STF,FS,2)=XUIEN_CS_200_CS_"VISTA" ;Primary Key
  1. ;Staff ID Code
  1. ;SSN Incorrect variable reference before transmit to workstation
  1. ;also don't plus SSN
  1. ;S ALPBSSN=$TR($G(XUSR("ALPBSSN")),"-","") S:+ALPBSSN ALPBSSN=$$M10^HLFNC(ALPBSSN,EC) S:'+ALPBSSN ALPBSSN=ALPBSSN_CS_""_CS_"LOCAL"
  1. S ALPBSSN=$TR($G(XUSR("SSN")),"-","") Q:$L(ALPBSSN)'=9 S ALPBSSN=$$M10^HLFNC(ALPBSSN,EC)
  1. S $P(STF,FS,3)=ALPBSSN_CS_"USSSA"_CS_"SS"_RS_$$ESC($G(XUSR("ACCESS CODE")))_RS_$$ESC($G(XUSR("VERIFY CODE")))
  1. GSTNM ;Staff Name
  1. N SN S SN=""
  1. I $D(XUSR("HL7NAME")) D
  1. . S XUSR("HL7NAME")=$TR(XUSR("HL7NAME"),"~",CS)
  1. . S SN=XUSR("HL7NAME")
  1. I '$D(XUSR("HL7NAME")),$D(XUSR("NAME")) D
  1. . S SN=$TR(XUSR("NAME"),",",CS)
  1. S $P(STF,FS,4)=SN
  1. ;Active/Inactive (Disuser=1 or 0 or null)
  1. S $P(STF,FS,8)=$S(XUSR("DISUSER")=1:"I",1:"A")
  1. ;Termination Date
  1. I XUSR("TERMINATION DATE")]"" S $P(STF,FS,14)=$$FMTHL7^XLFDT(XUSR("TERMINATION DATE"))
  1. ;Add to HL7 array
  1. S N=N+1,HLA("HLS",N)=STF
  1. ;Send the message
  1. Q:'$D(HLA)
  1. ;Check user's divisions
  1. SEND K HLL S ALPBDIV="" F S ALPBDIV=$O(XUSR("DIV",ALPBDIV)) Q:ALPBDIV="" D
  1. . K DIC,D,X,Y
  1. . S DIC="^DG(40.8,",D="AD",X=ALPBDIV,DIC(0)="XN"
  1. . D IX^DIC
  1. . Q:+Y'>0
  1. . S ALPBDIV1=+Y
  1. . K DIC,D,X,Y,ALPHLL
  1. . D GET^ALPBPARM(.ALPHLL,ALPBDIV1)
  1. . I $D(ALPHLL) S I=0 F S I=$O(ALPHLL("LINKS",I)) Q:I<1 D
  1. . . S $P(ALPHLL("LINKS",I),"^",1)=ALPBRCV
  1. . . S HLL("LINKS",($O(HLL("LINKS",999999),-1)+1))=ALPHLL("LINKS",I)
  1. K ALPHLL
  1. ;If no division assoc. use defaults
  1. I $O(XUSR("DIV",0))=""!('$D(HLL)) D GET^ALPBPARM(.HLL,"","",ALPBRCV)
  1. K MYRESULT
  1. I '$D(HLL) S MYRESULT="1-No subscribers" Q
  1. D GENERATE^HLMA(ALPBEVN,"LM",1,.MYRESULT)
  1. I $P(MYRESULT,U,2)]"" S ALERR=MYRESULT D SERR
  1. Q
  1. ;
  1. ESC(ST,PR) ;Translate reserved characters to escape sequences in Access/Verify
  1. ;ST=String to translate
  1. ;PR=Event Protocol to set up HL array variables (optional)
  1. ;First, do the escape character
  1. N I,J
  1. I $G(ST)']"" Q ""
  1. S PR=$G(PR) I PR]"" D INIT^HLFNC2(PR,.HL)
  1. I '$D(HL) D
  1. . S HL("FS")="^"
  1. . S HL("ECH")="~|\&"
  1. S FS=$G(HL("FS")) I FS="" Q "" ;Field separator
  1. S EC=$G(HL("ECH")) I EC="" Q "" ;Encoding Charaters
  1. S CS=$E(EC) ;Component separator
  1. S RS=$E(EC,2) ;Repitition separator
  1. S ESC=$E(EC,3) ;Escape character
  1. S SS=$E(EC,4) ;Subcomponent separator
  1. S EEC=ESC_"E"_ESC ;escaped escape character
  1. S EFS=ESC_"F"_ESC ;escaped field sep
  1. S ECS=ESC_"S"_ESC ;escaped component sep
  1. S ERS=ESC_"R"_ESC ; escaped repitition sep
  1. S ESS=ESC_"T"_ESC ;escaped subcomponent separator
  1. F I=1:1:$L(ST) S J=$E(ST,I),^TMP($J,I)=J D
  1. . S:J=ESC ^TMP($J,I)=EEC
  1. . S:J=FS ^TMP($J,I)=EFS
  1. . S:J=CS ^TMP($J,I)=ECS
  1. . S:J=RS ^TMP($J,I)=ERS
  1. . S:J=SS ^TMP($J,I)=ESS
  1. S I=0,ST="" F S I=$O(^TMP($J,I)) Q:I<1 S ST=ST_^TMP($J,I)
  1. K ^TMP($J)
  1. Q ST
  1. UNESC(ST,PR) ;Unescape string from message
  1. ;ST=String to translate
  1. ;PR=Event Protocol to set up HL array variables (optional)
  1. ;First, do the escape character
  1. N I,J,K,L,X
  1. I $G(ST)="" Q ""
  1. S PR=$G(PR) I PR]"" D INIT^HLFNC2(PR,.HL)
  1. I '$D(HL) D
  1. . S HL("FS")="^"
  1. . S HL("ECH")="~|\&"
  1. S FS=$G(HL("FS")) I FS="" Q "" ;Field separator
  1. S EC=$G(HL("ECH")) I EC="" Q "" ;Encoding Charaters
  1. S CS=$E(EC) ;Component separator
  1. S RS=$E(EC,2) ;Repitition separator
  1. S ESC=$E(EC,3) ;Escape character
  1. S SS=$E(EC,4) ;Subcomponent separator
  1. S EEC=ESC_"E"_ESC ;escaped escape character
  1. S EFS=ESC_"F"_ESC ;escaped field sep
  1. S ECS=ESC_"S"_ESC ;escaped component sep
  1. S ERS=ESC_"R"_ESC ; escaped repitition sep
  1. S ESS=ESC_"T"_ESC ;escaped subcomponent separator
  1. K I,J,K,L,X F S X=$F(ST,EEC) S:X I=$G(I)+1,K(I)=$E(ST,1,X-1),ST=$E(ST,X,999) S:'X K($G(I)+1)=ST Q:'X
  1. S I=0 F S I=$O(K(I)) Q:I<1 S:K(I)[EEC K(I)=$P(K(I),EEC)_ESC S L=$G(L)_K(I)
  1. I $G(L)]"" S ST=L
  1. ;
  1. K I,J,K,L,X F S X=$F(ST,EFS) S:X I=$G(I)+1,K(I)=$E(ST,1,X-1),ST=$E(ST,X,999) S:'X K($G(I)+1)=ST Q:'X
  1. S I=0 F S I=$O(K(I)) Q:I<1 S:K(I)[EFS K(I)=$P(K(I),EFS)_FS S L=$G(L)_K(I)
  1. I $G(L)]"" S ST=L
  1. ;
  1. K I,J,K,L,X S I=0 F S X=$F(ST,ECS) S:X I=$G(I)+1,K(I)=$E(ST,1,X-1),ST=$E(ST,X,999) S:'X K(I+1)=ST Q:'X
  1. S I=0 F S I=$O(K(I)) Q:I<1 S:K(I)[ECS K(I)=$P(K(I),ECS)_CS S L=$G(L)_K(I)
  1. I $G(L)]"" S ST=L
  1. ;
  1. K I,J,K,L,X S I=0 F S X=$F(ST,ERS) S:X I=$G(I)+1,K(I)=$E(ST,1,X-1),ST=$E(ST,X,999) S:'X K(I+1)=ST Q:'X
  1. S I=0 F S I=$O(K(I)) Q:I<1 S:K(I)[ERS K(I)=$P(K(I),ERS)_RS S L=$G(L)_K(I)
  1. I $G(L)]"" S ST=L
  1. ;
  1. K I,J,K,L,X S I=0 F S X=$F(ST,ESS) S:X I=$G(I)+1,K(I)=$E(ST,1,X-1),ST=$E(ST,X,999) S:'X K(I+1)=ST Q:'X
  1. S I=0 F S I=$O(K(I)) Q:I<1 S:K(I)[ESS K(I)=$P(K(I),ESS)_SS S L=$G(L)_K(I)
  1. I $G(L)]"" S ST=L
  1. K I,J,K,L,X
  1. Q ST
  1. ;
  1. SERR ;SEND ERRORS
  1. K XQA,XQAMSG,XQAOPT,XQAROU,XQAID,XQADATA,XQAFLAG
  1. S XQA("G.PSB BCBU ERRORS")=""
  1. S XQAMSG="Error sending HL7 message "_$G(HL("MID"))_". Header in HLMA("_$G(HLMTIENS)_"Error: "_ALERR
  1. D SETUP^XQALERT
  1. Q