1 | ALPBGEN ;SFVAMC/JC - Build HL7 PMU messages ;03/11/2004 15:54
|
---|
2 | ;;3.0;BAR CODE MED ADMIN;**7,8**;March 2004
|
---|
3 | HL7(XUIEN,XUFLG,XUSR) ;GENERATE MESSAGE - For Subscriber to XUSER DATA REQUEST (BCBU PMU MESSAGE BUILDER)
|
---|
4 | ;Build HL7 PMU~B01 or B02 message from array XUSR() and XUNAME()
|
---|
5 | ;B01=Personnel Add/Create event type
|
---|
6 | ;B02=Personnel Update event type
|
---|
7 | ;
|
---|
8 | ;CHECK IF BCBU IS ACTIVE AT PACKAGE LEVEL
|
---|
9 | Q:+$$GET^XPAR("PKG.BAR CODE MED ADMIN","PSB BKUP ONLINE",1,"Q")'>0
|
---|
10 | Q:'$D(XUSR) ;Array of user data from Kernel
|
---|
11 | Q:'$D(XUIEN) ;Internal entry of user required
|
---|
12 | ;
|
---|
13 | ;SFVAMC/JC - 10/8/03 ADD CHECK FOR BCMA USER STATUS
|
---|
14 | Q:+$$ISBCMA^ALPBGEN2(XUIEN)<1
|
---|
15 | ;
|
---|
16 | 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
|
---|
17 | S ALPBEVN=$S(XUFLG=1:"PSB BCBU PMU_B01 EVENT",1:"PSB BCBU PMU_B02 EVENT")
|
---|
18 | S ALPBRCV=$S(XUFLG=1:"PSB BCBU PMU_B01 RECV",1:"PSB BCBU PMU_B02 RECV")
|
---|
19 | K HL D INIT^HLFNC2(ALPBEVN,.HL)
|
---|
20 | I +$G(HL) W !,HL Q ;SETUP ERROR or no subscribers.
|
---|
21 | S N=0
|
---|
22 | S MT=$S(XUFLG=1:"B01",1:"B02")
|
---|
23 | S FS=$G(HL("FS")) Q:FS="" ;Field separator
|
---|
24 | S EC=$G(HL("ECH")) Q:EC="" ;Encoding Characters
|
---|
25 | S CS=$E(EC) ;Component separator
|
---|
26 | S RS=$E(EC,2) ;Repetition separator
|
---|
27 | S ESC=$E(EC,3) ;Escape character
|
---|
28 | S SS=$E(EC,4) ;Subcomponent separator
|
---|
29 | S EEC=ESC_"E"_ESC ;escaped escape character
|
---|
30 | S EFS=ESC_"F"_ESC ;escaped field separator
|
---|
31 | S ECS=ESC_"S"_ESC ;escaped component separator
|
---|
32 | S ERS=ESC_"R"_ESC ; escaped Repetition separator
|
---|
33 | S ESS=ESC_"T"_ESC ;escaped subcomponent separator
|
---|
34 | EVN ;EVN segment
|
---|
35 | S N=N+1
|
---|
36 | S HLA("HLS",N)="EVN"_FS_MT_FS_$$FMTHL7^XLFDT($$NOW^XLFDT)
|
---|
37 | GSTF ;Generate Staff Detail Segment
|
---|
38 | N ALPBSSN,STF S STF="STF"
|
---|
39 | S $P(STF,FS,2)=XUIEN_CS_200_CS_"VISTA" ;Primary Key
|
---|
40 | ;Staff ID Code
|
---|
41 | ;SSN Incorrect variable reference before transmit to workstation
|
---|
42 | ;also don't plus SSN
|
---|
43 | ;S ALPBSSN=$TR($G(XUSR("ALPBSSN")),"-","") S:+ALPBSSN ALPBSSN=$$M10^HLFNC(ALPBSSN,EC) S:'+ALPBSSN ALPBSSN=ALPBSSN_CS_""_CS_"LOCAL"
|
---|
44 | S ALPBSSN=$TR($G(XUSR("SSN")),"-","") Q:$L(ALPBSSN)'=9 S ALPBSSN=$$M10^HLFNC(ALPBSSN,EC)
|
---|
45 | S $P(STF,FS,3)=ALPBSSN_CS_"USSSA"_CS_"SS"_RS_$$ESC($G(XUSR("ACCESS CODE")))_RS_$$ESC($G(XUSR("VERIFY CODE")))
|
---|
46 | GSTNM ;Staff Name
|
---|
47 | N SN S SN=""
|
---|
48 | I $D(XUSR("HL7NAME")) D
|
---|
49 | . S XUSR("HL7NAME")=$TR(XUSR("HL7NAME"),"~",CS)
|
---|
50 | . S SN=XUSR("HL7NAME")
|
---|
51 | I '$D(XUSR("HL7NAME")),$D(XUSR("NAME")) D
|
---|
52 | . S SN=$TR(XUSR("NAME"),",",CS)
|
---|
53 | S $P(STF,FS,4)=SN
|
---|
54 | ;Active/Inactive (Disuser=1 or 0 or null)
|
---|
55 | S $P(STF,FS,8)=$S(XUSR("DISUSER")=1:"I",1:"A")
|
---|
56 | ;Termination Date
|
---|
57 | I XUSR("TERMINATION DATE")]"" S $P(STF,FS,14)=$$FMTHL7^XLFDT(XUSR("TERMINATION DATE"))
|
---|
58 | ;Add to HL7 array
|
---|
59 | S N=N+1,HLA("HLS",N)=STF
|
---|
60 | ;Send the message
|
---|
61 | Q:'$D(HLA)
|
---|
62 | ;Check user's divisions
|
---|
63 | SEND K HLL S ALPBDIV="" F S ALPBDIV=$O(XUSR("DIV",ALPBDIV)) Q:ALPBDIV="" D
|
---|
64 | . K DIC,D,X,Y
|
---|
65 | . S DIC="^DG(40.8,",D="AD",X=ALPBDIV,DIC(0)="XN"
|
---|
66 | . D IX^DIC
|
---|
67 | . Q:+Y'>0
|
---|
68 | . S ALPBDIV1=+Y
|
---|
69 | . K DIC,D,X,Y,ALPHLL
|
---|
70 | . D GET^ALPBPARM(.ALPHLL,ALPBDIV1)
|
---|
71 | . I $D(ALPHLL) S I=0 F S I=$O(ALPHLL("LINKS",I)) Q:I<1 D
|
---|
72 | . . S $P(ALPHLL("LINKS",I),"^",1)=ALPBRCV
|
---|
73 | . . S HLL("LINKS",($O(HLL("LINKS",999999),-1)+1))=ALPHLL("LINKS",I)
|
---|
74 | K ALPHLL
|
---|
75 | ;. K DIC,D,X,Y
|
---|
76 | ;. D GET^ALPBPARM(.HLL,ALPBDIV1)
|
---|
77 | ;. I $D(HLL) S I=0 F S I=$O(HLL("LINKS",I)) Q:I<1 S $P(HLL("LINKS",I),"^",1)=ALPBRCV
|
---|
78 | ;If no division assoc. use defaults
|
---|
79 | I $O(XUSR("DIV",0))=""!('$D(HLL)) D GET^ALPBPARM(.HLL,"","",ALPBRCV)
|
---|
80 | K MYRESULT
|
---|
81 | I '$D(HLL) S MYRESULT="1-No subscribers" Q
|
---|
82 | D GENERATE^HLMA(ALPBEVN,"LM",1,.MYRESULT)
|
---|
83 | I $P(MYRESULT,U,2)]"" S ALERR=MYRESULT D SERR
|
---|
84 | Q
|
---|
85 | ;
|
---|
86 | ESC(ST,PR) ;Translate reserved characters to escape sequences in Access/Verify
|
---|
87 | ;ST=String to translate
|
---|
88 | ;PR=Event Protocol to set up HL array variables (optional)
|
---|
89 | ;First, do the escape character
|
---|
90 | I $G(ST)']"" Q ""
|
---|
91 | S PR=$G(PR) I PR]"" D INIT^HLFNC2(PR,.HL)
|
---|
92 | I '$D(HL) D
|
---|
93 | . S HL("FS")="^"
|
---|
94 | . S HL("ECH")="~|\&"
|
---|
95 | S FS=$G(HL("FS")) I FS="" Q "" ;Field separator
|
---|
96 | S EC=$G(HL("ECH")) I EC="" Q "" ;Encoding Charaters
|
---|
97 | S CS=$E(EC) ;Component separator
|
---|
98 | S RS=$E(EC,2) ;Repitition separator
|
---|
99 | S ESC=$E(EC,3) ;Escape character
|
---|
100 | S SS=$E(EC,4) ;Subcomponent separator
|
---|
101 | S EEC=ESC_"E"_ESC ;escaped escape character
|
---|
102 | S EFS=ESC_"F"_ESC ;escaped field sep
|
---|
103 | S ECS=ESC_"S"_ESC ;escaped component sep
|
---|
104 | S ERS=ESC_"R"_ESC ; escaped repitition sep
|
---|
105 | S ESS=ESC_"T"_ESC ;escaped subcomponent separator
|
---|
106 | F I=1:1:$L(ST) S J=$E(ST,I),^TMP($J,I)=J D
|
---|
107 | . S:J=ESC ^TMP($J,I)=EEC
|
---|
108 | . S:J=FS ^TMP($J,I)=EFS
|
---|
109 | . S:J=CS ^TMP($J,I)=ECS
|
---|
110 | . S:J=RS ^TMP($J,I)=ERS
|
---|
111 | . S:J=SS ^TMP($J,I)=ESS
|
---|
112 | S I=0,ST="" F S I=$O(^TMP($J,I)) Q:I<1 S ST=ST_^TMP($J,I)
|
---|
113 | K ^TMP($J)
|
---|
114 | Q ST
|
---|
115 | UNESC(ST,PR) ;Unescape string from message
|
---|
116 | ;ST=String to translate
|
---|
117 | ;PR=Event Protocol to set up HL array variables (optional)
|
---|
118 | ;First, do the escape character
|
---|
119 | I $G(ST)="" Q ""
|
---|
120 | S PR=$G(PR) I PR]"" D INIT^HLFNC2(PR,.HL)
|
---|
121 | I '$D(HL) D
|
---|
122 | . S HL("FS")="^"
|
---|
123 | . S HL("ECH")="~|\&"
|
---|
124 | S FS=$G(HL("FS")) I FS="" Q "" ;Field separator
|
---|
125 | S EC=$G(HL("ECH")) I EC="" Q "" ;Encoding Charaters
|
---|
126 | S CS=$E(EC) ;Component separator
|
---|
127 | S RS=$E(EC,2) ;Repitition separator
|
---|
128 | S ESC=$E(EC,3) ;Escape character
|
---|
129 | S SS=$E(EC,4) ;Subcomponent separator
|
---|
130 | S EEC=ESC_"E"_ESC ;escaped escape character
|
---|
131 | S EFS=ESC_"F"_ESC ;escaped field sep
|
---|
132 | S ECS=ESC_"S"_ESC ;escaped component sep
|
---|
133 | S ERS=ESC_"R"_ESC ; escaped repitition sep
|
---|
134 | S ESS=ESC_"T"_ESC ;escaped subcomponent separator
|
---|
135 | 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
|
---|
136 | 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)
|
---|
137 | I $G(L)]"" S ST=L
|
---|
138 | ;
|
---|
139 | 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
|
---|
140 | 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)
|
---|
141 | I $G(L)]"" S ST=L
|
---|
142 | ;
|
---|
143 | 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
|
---|
144 | 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)
|
---|
145 | I $G(L)]"" S ST=L
|
---|
146 | ;
|
---|
147 | 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
|
---|
148 | 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)
|
---|
149 | I $G(L)]"" S ST=L
|
---|
150 | ;
|
---|
151 | 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
|
---|
152 | 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)
|
---|
153 | I $G(L)]"" S ST=L
|
---|
154 | K I,J,K,L,X
|
---|
155 | Q ST
|
---|
156 | ;
|
---|
157 | SERR ;SEND ERRORS
|
---|
158 | K XQA,XQAMSG,XQAOPT,XQAROU,XQAID,XQADATA,XQAFLAG
|
---|
159 | S XQA("G.PSB BCBU ERRORS")=""
|
---|
160 | S XQAMSG="Error sending HL7 message "_$G(HL("MID"))_". Header in HLMA("_$G(HLMTIENS)_"Error: "_ALERR
|
---|
161 | D SETUP^XQALERT
|
---|
162 | Q
|
---|