1 | SCDXHLDR ;ALB/JLU;Ambulatory care event handler;4/30/96
|
---|
2 | ;;5.3;Scheduling;**44,99,126,66,132,245**;5/1/96
|
---|
3 | ;This routine is the Ambulatory care event handler. It will hang on
|
---|
4 | ;the Scheduling event driver and monitor the types of events. When a
|
---|
5 | ;check out, edit to a check out or deletion of a check out occurs this
|
---|
6 | ;routine will update the Transmitted outpatient encounter file.
|
---|
7 | ;
|
---|
8 | EN ;Main entry point
|
---|
9 | ;
|
---|
10 | I $D(SDSTPAMB) G ENQ ;this will stop the logging of events.
|
---|
11 | I '$D(SDAMEVT) G ENQ
|
---|
12 | I SDAMEVT'>4!(SDAMEVT>9) G ENQ ;check out, add/edit and add/edit change
|
---|
13 | N SDOE,SDPROC,SDBEFORE,SDAFTER,EVTDT,CLINIC,XMIT
|
---|
14 | S SDPROC=0
|
---|
15 | F S SDPROC=$O(^TMP("SDEVT",$J,SDHDL,SDPROC)) Q:'SDPROC I SDPROC'=4 DO
|
---|
16 | .S SDOE=0
|
---|
17 | .F S SDOE=$O(^TMP("SDEVT",$J,SDHDL,SDPROC,"SDOE",SDOE)) Q:'SDOE DO
|
---|
18 | ..K XMIT
|
---|
19 | ..D NOW^%DTC S EVTDT=%
|
---|
20 | ..S SDAFTER=$G(^TMP("SDEVT",$J,SDHDL,SDPROC,"SDOE",SDOE,0,"AFTER"))
|
---|
21 | ..S SDBEFORE=$G(^("BEFORE")) ;naked reference from previous line
|
---|
22 | ..;
|
---|
23 | ..;Screen out test patients
|
---|
24 | ..S DFN=$S((SDAFTER'=""):$P(SDAFTER,U,2),(SDBEFORE'=""):$P(SDBEFORE,U,2),1:0)
|
---|
25 | ..I DFN Q:$$TESTPAT^VADPT(DFN)
|
---|
26 | ..;
|
---|
27 | ..; screen out non counts
|
---|
28 | ..I SDAFTER]"" S CLINIC=$P(SDAFTER,U,4) Q:$$NONCNT($P(SDAFTER,U,4))
|
---|
29 | ..I SDBEFORE]"" S CLINIC=$P(SDBEFORE,U,4) Q:$$NONCNT($P(SDBEFORE,U,4))
|
---|
30 | ..;
|
---|
31 | ..; handling of delete encounters and check outs
|
---|
32 | ..I SDAFTER]"",SDBEFORE]"",SDAFTER'=SDBEFORE,'$$COMPL(SDAFTER) D LOAD("DELETE",SDOE,EVTDT,SDBEFORE) Q ;DELETION OF A CHECK OUT
|
---|
33 | ..I SDBEFORE]"",SDAFTER']"",SDPROC=2,'+$P(SDBEFORE,U,6) D LOAD("DELETE",SDOE,EVTDT,SDBEFORE) Q ;delete of a stand alone add/edit
|
---|
34 | ..I SDBEFORE]"",SDAFTER']"",SDPROC=2,+$P(SDBEFORE,U,6) Q ;delete of add/edit from an appt. IT HAS ALREADY BEEN MARKED
|
---|
35 | ..;;;I SDBEFORE]"",SDAFTER']"",SDPROC=2,+$P(SDBEFORE,U,6) D LOAD("EDIT",SDOE,EVTDT,SDBEFORE) Q ;THIS IS FROM ABOVE. KEPT FOR REFERENCE
|
---|
36 | ..;
|
---|
37 | ..;screen out not checked out encounters
|
---|
38 | ..I '$S(SDAFTER]"":$$COMPL(SDAFTER),SDBEFORE]"":$$COMPL(SDBEFORE),1:0) Q
|
---|
39 | ..;
|
---|
40 | ..;any loads or edits
|
---|
41 | ..I SDBEFORE]"",SDAFTER]"" D LOAD("EDIT",SDOE,EVTDT) ;edit of C/O
|
---|
42 | ..I SDBEFORE']"",SDAFTER]"" D LOAD("ADD",SDOE,EVTDT) ;new encounter at C/O
|
---|
43 | ..Q
|
---|
44 | .Q
|
---|
45 | ;
|
---|
46 | ENQ ;
|
---|
47 | Q
|
---|
48 | ;
|
---|
49 | NONCNT(IEN) ;this function determines if the clinic is non count or not
|
---|
50 | ;INPUT IEN the poitner to the hospital location.
|
---|
51 | ;OUTPUT 1 if a non count
|
---|
52 | ; 0 if not a non count
|
---|
53 | I '$D(IEN) S ANS=0 G NONCNTQ
|
---|
54 | I 'IEN S ANS=0 G NONCNTQ
|
---|
55 | S ANS=$S($P(^SC(IEN,0),U,17)="Y":1,1:0)
|
---|
56 | NONCNTQ Q ANS
|
---|
57 | ;
|
---|
58 | COMPL(NODE) ;this function call returns whether or not the check out
|
---|
59 | ;process is complete or not. 1 for complete 0 for not
|
---|
60 | ;
|
---|
61 | Q $S(+$P(NODE,U,7):1,1:0)
|
---|
62 | ;
|
---|
63 | LOAD(ACTION,IEN,EVTDT,NODE) ;
|
---|
64 | ;ACTION is what type of action caused this event
|
---|
65 | ;IEN is the pointer to the outpatient encounter file
|
---|
66 | ;EVTDT is the date this action occured
|
---|
67 | ;NODE is the zero node of the outpatient encounter file
|
---|
68 | ;
|
---|
69 | N EVNT,PAR
|
---|
70 | ;
|
---|
71 | I ACTION'="DELETE" DO
|
---|
72 | .I $D(^SCE(IEN,0)) S PAR=$P(^SCE(IEN,0),U,6)
|
---|
73 | .E S PAR=$P(NODE,U,6)
|
---|
74 | .S IEN=$S(+PAR:PAR,1:IEN)
|
---|
75 | .S EVNT=$S(ACTION="ADD":1,1:2)
|
---|
76 | .S XMIT=$$FINDXMIT^SCDXFU01(IEN)
|
---|
77 | .I 'XMIT S XMIT=$$CRTXMIT^SCDXFU01(IEN,"",EVTDT)
|
---|
78 | .I +XMIT>0 D STREEVNT^SCDXFU01(XMIT,EVNT,EVTDT),XMITFLAG^SCDXFU01(XMIT,0)
|
---|
79 | .Q
|
---|
80 | ;
|
---|
81 | I ACTION="DELETE" DO
|
---|
82 | .N DELENT,TRANENT,DELENCT,PAR,NTNEED
|
---|
83 | .S PAR=$P(NODE,U,6)
|
---|
84 | .S IEN=$S(+PAR:PAR,1:IEN)
|
---|
85 | .;
|
---|
86 | .;Encounter never transmitted to or accepted by NPCD
|
---|
87 | .I (('$$XMITED^SCDXFU03(IEN))&('$$ACCEPTED^SCDXFU03(IEN))) S NTNEED=""
|
---|
88 | .;Another parent encounter has same Visit ID (i.e. duplicate encounter)
|
---|
89 | .I ($$VIDCNT^SCDXFU03($P(NODE,"^",20),IEN)) S NTNEED=""
|
---|
90 | .;
|
---|
91 | .S DELENT=$$CRTDEL^SCDXFU02($P(NODE,U,1),$P(NODE,U,2),EVTDT,NODE)
|
---|
92 | .I DELENT<0 S DELENT=$$DELXMIT^SCDXFU03(IEN,1) Q
|
---|
93 | .;
|
---|
94 | .S XMIT=$$CRTXMIT^SCDXFU01(IEN,DELENT,EVTDT)
|
---|
95 | .I XMIT<0 S DELENT=$$DELXMIT^SCDXFU03(IEN,1) Q
|
---|
96 | .;
|
---|
97 | .;Delete entry in transmission file (409.73) - not needed
|
---|
98 | .I $D(NTNEED) S DELENT=$$DELXMIT^SCDXFU03(DELENT,2) Q
|
---|
99 | .;
|
---|
100 | .D XMITFLAG^SCDXFU01(XMIT,0)
|
---|
101 | .Q
|
---|
102 | Q
|
---|
103 | ;
|
---|
104 | VALIDATE(XMIT,CLINIC) ;this entry point performs the validation at check out.
|
---|
105 | ;
|
---|
106 | ;INPUT - XMIT this is the IEN of an entry in the transmit file 409.73
|
---|
107 | S XMIT=+$G(XMIT)
|
---|
108 | S CLINIC=+$G(CLINIC)
|
---|
109 | I XMIT<1!(CLINIC<1) G VALQ
|
---|
110 | N VAL
|
---|
111 | S VAL=$$VALWL^SCMSVUT2(+$G(CLINIC))
|
---|
112 | I VAL<1 G VALQ
|
---|
113 | I 'SDMODE,'$D(ZTQUEUED),'$D(VALQUIET) W !!,"Performing Ambulatory Care Validation Checks.",!
|
---|
114 | S ERR=$$VALIDATE^SCMSVUT2(XMIT)
|
---|
115 | I SDMODE!($D(ZTQUEUED))!($D(VALQUIET)) G VALQ
|
---|
116 | I ERR<1 DO G VALQ
|
---|
117 | .W !,"No validation errors found!"
|
---|
118 | .Q
|
---|
119 | S DIR(0)="Y"
|
---|
120 | S DIR("B")="YES"
|
---|
121 | S DIR("A")="Do you wish to correct the validation errors"
|
---|
122 | D ^DIR
|
---|
123 | K DIR
|
---|
124 | I Y<1 G VALQ
|
---|
125 | ;
|
---|
126 | D ENP^SCENI0(XMIT)
|
---|
127 | ;
|
---|
128 | VALQ Q
|
---|
129 | ;
|
---|
130 | FINAL(VISIT,PXKVST) ;
|
---|
131 | ;INPUT VISIT - the IEN of the visit at hand.
|
---|
132 | ;
|
---|
133 | Q:$D(SDIEMM)
|
---|
134 | Q:'$D(VISIT)
|
---|
135 | Q:VISIT=""
|
---|
136 | Q:$D(VALSTP)
|
---|
137 | Q:$D(^TMP("PXKSAVE",$J))
|
---|
138 | N ENC,CLN,XMT,SDMODE
|
---|
139 | S ENC=0
|
---|
140 | F S ENC=$O(^SCE("AVSIT",VISIT,ENC)) Q:ENC="" I $P(^SCE(ENC,0),U,6)="" Q
|
---|
141 | I ENC="" Q
|
---|
142 | Q:'$D(^SCE(ENC,0))
|
---|
143 | Q:'$$COMPL(^SCE(ENC,0))
|
---|
144 | S CLN=$P(^SCE(ENC,0),U,4)
|
---|
145 | S XMT=+$O(^SD(409.73,"AENC",ENC,0))
|
---|
146 | I 'XMT Q
|
---|
147 | S SDMODE=0
|
---|
148 | D TERM
|
---|
149 | D VALIDATE(XMT,CLN)
|
---|
150 | Q
|
---|
151 | ;
|
---|
152 | TERM ;this is to reset the io variables for lsitman to function properly
|
---|
153 | ;when coming from PCE.
|
---|
154 | N X
|
---|
155 | S X="IORVON;IORVOFF;IOIL;IOSTBM;IOSC;IORC;IOEDEOP;IOINHI;IOINORM;IOUON;IOUOFF;IOBON;IOBOFF;IOSGR0"
|
---|
156 | ;;;S X="IORVON;IORVOFF;IOSC;IORC;IOEDEOP;IOINHI;IOINORM;IOUON;IOUOFF;IOBON;IOBOFF;IOSGR0"
|
---|
157 | D ENDR^%ZISS
|
---|
158 | Q
|
---|
159 | ;
|
---|
160 | OK() ;
|
---|
161 | I SDAMEVT=6,SDBEFORE="",SDAFTER]"" Q 0
|
---|
162 | Q 1
|
---|
163 | ;
|
---|