1 | SCDXMSG ;ALB/JRP - AMB CARE TRANSMISSION BUILDER;06-MAY-1996 ; 12/20/01 4:46pm
|
---|
2 | ;;5.3;Scheduling;**44,56,70,77,85,96,121,128,66,247,245,387,466**;AUG 13, 1993;Build 2
|
---|
3 | ;
|
---|
4 | SNDZ00 ;Main entry point for the sending of ADT-Z00 batch messages to
|
---|
5 | ; the National Patient Care Database
|
---|
6 | ;
|
---|
7 | ;Input : None
|
---|
8 | ;Output : None
|
---|
9 | ;
|
---|
10 | SD70 ; added w/ patch SD*5.3*70 to reset transmit flags if needed
|
---|
11 | N SDEND,SDSTA D EN^SCDXUTL5
|
---|
12 | ;
|
---|
13 | ;Declare variables
|
---|
14 | N X,X1,X2,%H
|
---|
15 | N XMITPTR,NOACKBY,XMITDATE,SCDXEVNT,MAXBATCH,MAXLINE,BATCHCNT,MSGNUM
|
---|
16 | N LINECNT,MSHLINE,XMITLIST,XMITERR,HL7XMIT,ERROR,IPCNT
|
---|
17 | N HLEID,HL,HLECH,HLFS,HLQ,HLMID,HLMTIEN,HLDT,HLDT1,MSGID,HLRESLT,HLP
|
---|
18 | ;Set message count limit for batch message
|
---|
19 | S MAXBATCH=100
|
---|
20 | ;Set line count limit for batch message Note max 160K char. MM Message
|
---|
21 | S MAXLINE=$P($G(^SD(404.91,1,"AMB")),U,8) S:'MAXLINE MAXLINE=2000
|
---|
22 | ;Initialize global locations
|
---|
23 | S XMITERR="^TMP(""SCDX-XMIT-BLD"","_$J_",""ERRORS"")"
|
---|
24 | S HL7XMIT="^TMP(""HLS"","_$J_")"
|
---|
25 | K @XMITERR,@HL7XMIT
|
---|
26 | ;Get lag time for acks from NPCDB (default to T-LAG)
|
---|
27 | S NOACKBY=+$P($G(^SD(404.91,1,"AMB")),"^",4)
|
---|
28 | S:('NOACKBY) NOACKBY=2
|
---|
29 | ;Determine T-LAG @ 11:59:59 PM
|
---|
30 | S X1=$$DT^XLFDT()
|
---|
31 | S X2=0-NOACKBY
|
---|
32 | S NOACKBY=$$FMADD^XLFDT(X1,X2)_".235959"
|
---|
33 | ;Flag transmissions that haven't been acked by T-LAG for retransmission
|
---|
34 | S XMITDATE=""
|
---|
35 | F S XMITDATE=+$O(^SD(409.73,"AACNOACK",XMITDATE)) Q:(('XMITDATE)!(XMITDATE>NOACKBY)) D
|
---|
36 | .S XMITPTR=""
|
---|
37 | .F S XMITPTR=+$O(^SD(409.73,"AACNOACK",XMITDATE,XMITPTR)) Q:('XMITPTR) D
|
---|
38 | ..;Mark entry with retransmit event (POSTMASTER is causer of event)
|
---|
39 | ..D STREEVNT^SCDXFU01(XMITPTR,0,"",.5)
|
---|
40 | ..;Can no longer receive database credit - delete x-ref and quit
|
---|
41 | ..I +$$XMIT4DBC^SCDXFU04(XMITPTR)>3 K ^SD(409.73,"AACNOACK",XMITDATE,XMITPTR) Q ;SD*5.3*247
|
---|
42 | ..;Turn transmission flag on
|
---|
43 | ..D XMITFLAG^SCDXFU01(XMITPTR)
|
---|
44 | ;Get pointer to sending event
|
---|
45 | S HLEID=+$O(^ORD(101,"B","SCDX AMBCARE SEND SERVER FOR ADT-Z00",0))
|
---|
46 | ;Sending event not found - send error bulletin - done
|
---|
47 | I ('HLEID) D ERRBULL^SCDXMSG2("Unable to initialize HL7 variables - protocol not found") Q
|
---|
48 | ;Initialze HL7 variables
|
---|
49 | D INIT^HLFNC2(HLEID,.HL)
|
---|
50 | ;Unable to initialize HL7 variables - send error bulletin - done
|
---|
51 | I ($O(HL(""))="") D ERRBULL^SCDXMSG2($P(HL,"^",2)) Q
|
---|
52 | ;Create batch message
|
---|
53 | D CREATE^HLTF(.HLMID,.HLMTIEN,.HLDT,.HLDT1)
|
---|
54 | ;Unable to create batch message - send error bulletin - done
|
---|
55 | I ('HLMTIEN) D ERRBULL^SCDXMSG2("Unable to create batch HL7 message") Q
|
---|
56 | ;Initialize message count
|
---|
57 | S BATCHCNT=0,IPCNT=0
|
---|
58 | ;Initialize message number
|
---|
59 | S MSGNUM=1
|
---|
60 | ;Initialize line count
|
---|
61 | S LINECNT=1
|
---|
62 | N VALER,VALERR
|
---|
63 | ;this global contains the validation errors if any.
|
---|
64 | S VALER="^TMP(""SCDXVALID"",$J)"
|
---|
65 | ;Loop through list of [deleted] encounters requiring transmission
|
---|
66 | S SCDXEVNT=""
|
---|
67 | F S SCDXEVNT=+$O(^SD(409.73,"AACXMIT",SCDXEVNT)) Q:('SCDXEVNT) D
|
---|
68 | .S XMITPTR=""
|
---|
69 | .F S XMITPTR=+$O(^SD(409.73,"AACXMIT",SCDXEVNT,XMITPTR)) Q:('XMITPTR) D
|
---|
70 | ..N OENODE,PARENT,FILERR
|
---|
71 | ..S VALERR="^TMP(""SCDXVALID"",$J,"_XMITPTR_")"
|
---|
72 | ..;Bad entry in cross reference - delete cross reference and quit
|
---|
73 | ..I ('$D(^SD(409.73,XMITPTR))) K ^SD(409.73,"AACXMIT",SCDXEVNT,XMITPTR) Q
|
---|
74 | ..;Make sure entry points to an existing encounter - delete entry
|
---|
75 | ..; and quit if it doesn't
|
---|
76 | ..S X=^SD(409.73,XMITPTR,0)
|
---|
77 | ..S X1=+$P(X,"^",2)
|
---|
78 | ..S X2=+$P(X,"^",3)
|
---|
79 | ..S OENODE=$S($G(^SCE(+X1,0)):^(0),1:$G(^SD(409.74,+X2,1))),PARENT=$P(OENODE,"^",6)
|
---|
80 | ..I (((X1)&('$D(^SCE(X1))))!((X2)&('$D(^SD(409.74,X2))))) S ERROR=$$DELXMIT^SCDXFU03(XMITPTR) Q
|
---|
81 | ..; if SD*5.3*70 cleanup not complete, recheck date of encounter for range
|
---|
82 | ..I $G(SDEND) Q:$$CHKD(X1,X2)
|
---|
83 | ..;If inpatient appointment, delete entry and quit
|
---|
84 | ..;Commented to allow transmission of inpatient to NPCD; SD*5.3*387
|
---|
85 | ..;I ($$INPATENC^SCDXUTL(XMITPTR)) S ERROR=$$DELXMIT^SCDXFU03(XMITPTR) Q
|
---|
86 | ..;If test patient, delete entry and quit
|
---|
87 | ..I $$TESTPAT^VADPT($P($$EZN4XMIT^SCDXFU11(XMITPTR),"^",2)) S ERROR=$$DELXMIT^SCDXFU03(XMITPTR) Q
|
---|
88 | ..;If child encounter, delete entry, flag parent for xmit, and quit
|
---|
89 | ..I PARENT D Q
|
---|
90 | ...S ERROR=$$DELXMIT^SCDXFU03(XMITPTR)
|
---|
91 | ..;NPCD will not accept for database credit - clean up and quit
|
---|
92 | ..I +$$XMIT4DBC^SCDXFU04(XMITPTR)>3 D Q ;SD*5.3*247
|
---|
93 | ...;Past database close-out date - delete previously reported errors
|
---|
94 | ...D DELAERR^SCDXFU02(XMITPTR)
|
---|
95 | ...;Turn off transmission flag
|
---|
96 | ...D XMITFLAG^SCDXFU01(XMITPTR,1)
|
---|
97 | ..;Calculate message control ID
|
---|
98 | ..S MSGID=HLMID_"-"_MSGNUM
|
---|
99 | ..;Put [deleted] encounter into transmission
|
---|
100 | ..S ERROR=$$BUILDHL7^SCDXMSG0(XMITPTR,.HL,MSGID,HL7XMIT,LINECNT,VALERR)
|
---|
101 | ..;[Deleted] encounter not added to transmission
|
---|
102 | ..I ERROR<0,$O(@VALERR@(0))']"" D VALIDATE^SCMSVUT0("INTERNAL","","V900",VALERR,0)
|
---|
103 | ..D DELAERR^SCDXFU02(XMITPTR,0)
|
---|
104 | ..I $O(@VALERR@(0))]"" S FILERR=$$FILEVERR^SCMSVUT2(XMITPTR,VALERR)
|
---|
105 | ..I ERROR<0 Q
|
---|
106 | ..;Increment line count
|
---|
107 | ..S LINECNT=LINECNT+ERROR
|
---|
108 | ..;Increment message count
|
---|
109 | ..S BATCHCNT=BATCHCNT+1
|
---|
110 | ..;Increment message number
|
---|
111 | ..S MSGNUM=MSGNUM+1
|
---|
112 | ..;Increment inpatient count
|
---|
113 | ..I $$INPATENC^SCDXUTL(XMITPTR) S IPCNT=IPCNT+1
|
---|
114 | ..;Create entry in ACRP Transmission History file (#409.77)
|
---|
115 | ..S X=$$CRTHIST^SCDXFU10(XMITPTR,HLDT,MSGID,HLMID)
|
---|
116 | ..;Update transmission info for [deleted] encounter
|
---|
117 | ..D XMITDATA^SCDXFU03(XMITPTR,HLDT,MSGID,HLMID)
|
---|
118 | ..;Turn off transmission flag for [deleted] encounter
|
---|
119 | ..D XMITFLAG^SCDXFU01(XMITPTR,1)
|
---|
120 | ..;Delete all errors previously reported for [deleted] encounter
|
---|
121 | ..D DELAERR^SCDXFU02(XMITPTR)
|
---|
122 | ..;Reached max size for batch
|
---|
123 | ..I ((MSGNUM>MAXBATCH)!(LINECNT>MAXLINE)) D
|
---|
124 | ...;Send batch message - immediate priority
|
---|
125 | ...S HLP("PRIORITY")="I"
|
---|
126 | ...D GENERATE^HLMA(HLEID,"GB",1,.HLRESLT,HLMTIEN,.HLP)
|
---|
127 | ...;Re-initialize HL7 message
|
---|
128 | ...K @HL7XMIT
|
---|
129 | ...;Re-initialize HL7 variables
|
---|
130 | ...K HL,HLRESLT,HLP,HLMID,HLMTIEN,HLDT,HLDT1
|
---|
131 | ...S HLEID=+$O(^ORD(101,"B","SCDX AMBCARE SEND SERVER FOR ADT-Z00",0))
|
---|
132 | ...D INIT^HLFNC2(HLEID,.HL)
|
---|
133 | ...;Create new batch message
|
---|
134 | ...D CREATE^HLTF(.HLMID,.HLMTIEN,.HLDT,.HLDT1)
|
---|
135 | ...;Re-initialize line count
|
---|
136 | ...S LINECNT=1
|
---|
137 | ...;Re-initialize message number
|
---|
138 | ...S MSGNUM=1
|
---|
139 | ;Check for unsent batch message
|
---|
140 | I ($O(@HL7XMIT@(0))) D
|
---|
141 | .;Send batch message - immediate priority
|
---|
142 | .S HLP("PRIORITY")="I"
|
---|
143 | .D GENERATE^HLMA(HLEID,"GB",1,.HLRESLT,HLMTIEN,.HLP)
|
---|
144 | N ERRCNT,IPERR
|
---|
145 | S ERRCNT=$$COUNT^SCMSVUT2(VALER)
|
---|
146 | S IPERR=$$IPERR^SCMSVUT2(VALER)
|
---|
147 | ;Send completion bulletin
|
---|
148 | D CMPLBULL^SCDXMSG2(BATCHCNT,ERRCNT,IPCNT,IPERR)
|
---|
149 | ;Clean up global arrays used
|
---|
150 | K @XMITERR,@HL7XMIT,@VALER
|
---|
151 | ;Determine if updating of Hospital Location file hasn't completed AND
|
---|
152 | ; if today is past the OPC to HL7 cut over date
|
---|
153 | I ('$P($G(^SD(404.91,1,"AMB")),"^",7)) I ($$DATE^SCDXUTL(DT)) D
|
---|
154 | .;Task updating of Hospital Location file
|
---|
155 | .N ZTRTN,ZTDESC,ZTDTH,ZTIO,ZTSK
|
---|
156 | .S ZTRTN="HOPUP^SCMSP"
|
---|
157 | .S ZTDESC="REQUIRE PROVIDER AND DIAGNOSIS FOR CHECKOUT FROM CLINICS"
|
---|
158 | .S ZTDTH="NOW"
|
---|
159 | .S ZTIO=""
|
---|
160 | .D ^%ZTLOAD
|
---|
161 | ;Done
|
---|
162 | Q
|
---|
163 | ;
|
---|
164 | CHKD(X1,X2) ; if clean-up still in progress for SD*5.3*70, check date
|
---|
165 | N SDELE
|
---|
166 | I X1,+$G(^SCE(X1,0))>SDEND Q 1
|
---|
167 | I X2 S SDELE=+$G(^SD(409.74,X2,1)) I SDELE>SDSTA D:SDELE<SDEND Q 1
|
---|
168 | . D KILL^SCDXUTL5("^SD(409.74,",X2)
|
---|
169 | . D KILL^SCDXUTL5("^SD(409.73,",XMITPTR)
|
---|
170 | Q 0
|
---|