| 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 |  ;
 | 
|---|