| 1 | SDAMEVT ;ALB/MJK - Appt Event Driver Utilities ; 12/1/91 [ 09/19/96  1:39 PM ] | 
|---|
| 2 | ;;5.3;Scheduling;**15,132,443**;Aug 13, 1993 | 
|---|
| 3 | ; | 
|---|
| 4 | BEFORE(SDATA,DFN,SDT,SDCL,SDDA,SDHDL) ; -- get before values | 
|---|
| 5 | K ^TMP("SDAMEVT",$J) | 
|---|
| 6 | D CAPTURE("BEFORE",.SDATA,.DFN,.SDT,.SDCL,.SDDA,.SDHDL) | 
|---|
| 7 | Q | 
|---|
| 8 | ; | 
|---|
| 9 | AFTER(SDATA,DFN,SDT,SDCL,SDDA,SDHDL) ; -- get after values | 
|---|
| 10 | D CAPTURE("AFTER",.SDATA,.DFN,.SDT,.SDCL,.SDDA,.SDHDL) | 
|---|
| 11 | Q | 
|---|
| 12 | ; | 
|---|
| 13 | HANDLE(SDORG) ; -- get evt handle | 
|---|
| 14 | ;  SDORG = originating process (1=appt , 2=a/e , 3=disp) | 
|---|
| 15 | S (Y,^($J))=$G(^TMP("SDEVT HANDLE",$J))+1 | 
|---|
| 16 | Q Y | 
|---|
| 17 | ; | 
|---|
| 18 | CLEAN(SDHDL) ; | 
|---|
| 19 | K ^TMP("SDEVT",$J,SDHDL) | 
|---|
| 20 | Q | 
|---|
| 21 | ; | 
|---|
| 22 | HDLKILL ; -- kill off handle data | 
|---|
| 23 | K SDHDL,^TMP("SDEVT HANDLE",$J),^TMP("SDEVT",$J) | 
|---|
| 24 | Q | 
|---|
| 25 | ; | 
|---|
| 26 | CAPTURE(SDCAP,SDATA,DFN,SDT,SDCL,SDDA,SDHDL) ; | 
|---|
| 27 | N Z | 
|---|
| 28 | S (Z,^TMP("SDAMEVT",$J,SDCAP,"DPT"),^TMP("SDEVT",$J,SDHDL,1,"DPT",0,SDCAP))=$G(^DPT(DFN,"S",SDT,0)) | 
|---|
| 29 | S (^TMP("SDAMEVT",$J,SDCAP,"SC"),^TMP("SDEVT",$J,SDHDL,1,"SC",0,SDCAP))=$G(^SC(SDCL,"S",SDT,1,+SDDA,0)) | 
|---|
| 30 | S (^TMP("SDAMEVT",$J,SDCAP,"STATUS"),SDATA(SDCAP,"STATUS"))=$TR($$STATUS^SDAM1(DFN,SDT,SDCL,Z,SDDA),";","^") | 
|---|
| 31 | D:$P(Z,U,20) OE(.SDCAP,1,$P(Z,U,20),.SDHDL) | 
|---|
| 32 | Q | 
|---|
| 33 | ; | 
|---|
| 34 | ; | 
|---|
| 35 | EVT(SDATA,SDAMEVT,SDMODE,SDHDL) ; -- calls the sdam event protocol | 
|---|
| 36 | N OROLD | 
|---|
| 37 | K DTOUT,DIROUT | 
|---|
| 38 | I $G(SDATA("BEFORE","STATUS"))=$G(SDATA("AFTER","STATUS")),'$$COMP^SDAMEVT4(SDHDL,SDAMEVT) G EVTQ  ; SD*5.3*443 | 
|---|
| 39 | S:$P(SDATA,U,3) $P(SDATA,U,5)=$$REQ^SDM1A(+$P(SDATA,U,3)) | 
|---|
| 40 | S X=+$O(^ORD(101,"B","SDAM APPOINTMENT EVENTS",0))_";ORD(101," | 
|---|
| 41 | D EN^XQOR | 
|---|
| 42 | EVTQ K XQORPOP,X,^TMP("SDAMEVT",$J) D CLEAN(SDHDL) Q | 
|---|
| 43 | ; | 
|---|
| 44 | ; | 
|---|
| 45 | MAKE(DFN,SDT,SDCL,SDDA,SDMODE) ; -- make appt event #1 | 
|---|
| 46 | N SDATA,%,SDMKHDL,SDHDL K ^TMP("SDAMEVT",$J) | 
|---|
| 47 | S SDMKHDL=$$HANDLE(1) | 
|---|
| 48 | S (^TMP("SDAMEVT",$J,"BEFORE","DPT"),^TMP("SDAMEVT",$J,"BEFORE","SC"),SDATA("BEFORE","STATUS"),^TMP("SDAMEVT",$J,"BEFORE","STATUS"),^TMP("SDEVT",$J,SDMKHDL,1,"DPT",0,"BEFORE"),^TMP("SDEVT",$J,SDMKHDL,1,"SC",0,"BEFORE"))="" | 
|---|
| 49 | D AFTER(.SDATA,DFN,SDT,SDCL,SDDA,SDMKHDL) | 
|---|
| 50 | S SDATA=SDDA_U_DFN_U_SDT_U_SDCL | 
|---|
| 51 | D EVT(.SDATA,1,+$G(SDAMODE),SDMKHDL) | 
|---|
| 52 | ; -- if appt d/t is less than NOW then check-in | 
|---|
| 53 | D NOW^%DTC | 
|---|
| 54 | I SDT<% W:'$G(SDMODE) ! D | 
|---|
| 55 | .N SDACT,SDCOQUIT | 
|---|
| 56 | .S SDDA=+SDATA,DFN=$P(SDATA,U,2),SDT=$P(SDATA,U,3),SDCL=$P(SDATA,U,4) K SDATA | 
|---|
| 57 | .I $$REQ^SDM1A(SDT)="CO",'$G(SDCOACT) D | 
|---|
| 58 | ..S SDACT=$S(SDT<DT:"CO",1:$$ASK^SDAMEX) I SDACT']"" S SDCOQUIT=1 Q | 
|---|
| 59 | ..I SDACT="CO" D CO^SDCO1(DFN,SDT,SDCL,SDDA,0,SDT) | 
|---|
| 60 | .I '$G(SDCOQUIT),$G(SDACT)'="CO" D ONE^SDAM2(DFN,SDCL,SDT,SDDA,0,SDT) | 
|---|
| 61 | Q | 
|---|
| 62 | ; | 
|---|
| 63 | ; | 
|---|
| 64 | CANCEL(SDATA,DFN,SDT,SDCL,SDDA,SDMODE,SDHDL) ; -- cancel event #2 | 
|---|
| 65 | D AFTER(.SDATA,DFN,SDT,SDCL,SDDA,SDHDL) | 
|---|
| 66 | I "^5^7^9^10^"[("^"_+SDATA("AFTER","STATUS")_"^"),$P($G(^DPT(DFN,"S",SDT,0)),"^",20) D EN^SDCODEL(+$P(^(0),"^",20),0,SDHDL),OENUL^SDAMEVT1("AFTER",SDHDL) | 
|---|
| 67 | S SDATA=SDDA_U_DFN_U_SDT_U_SDCL | 
|---|
| 68 | D EVT(.SDATA,2,0,SDHDL) | 
|---|
| 69 | Q | 
|---|
| 70 | ; | 
|---|
| 71 | ; | 
|---|
| 72 | NOSHOW(SDATA,DFN,SDT,SDCL,SDDA,SDMODE,SDHDL) ; -- no-show event #3 | 
|---|
| 73 | D AFTER(.SDATA,DFN,SDT,SDCL,SDDA,SDHDL) | 
|---|
| 74 | I "^4^6^"[("^"_+SDATA("AFTER","STATUS")_"^"),$P($G(^DPT(DFN,"S",SDT,0)),"^",20) D EN^SDCODEL(+$P(^(0),"^",20),0,SDHDL),OENUL^SDAMEVT1("AFTER",SDHDL) | 
|---|
| 75 | S SDATA=SDDA_U_DFN_U_SDT_U_SDCL | 
|---|
| 76 | D EVT(.SDATA,3,0,SDHDL) | 
|---|
| 77 | Q | 
|---|
| 78 | ; | 
|---|
| 79 | OE(SDCAP,SDORG,SDOE,SDHDL) ; -- set up encounter data | 
|---|
| 80 | N I,OP,FILE,X,SDKID | 
|---|
| 81 | ; | 
|---|
| 82 | ; -- set up 'OP'posite variable | 
|---|
| 83 | S OP=$S(SDCAP="BEFORE":"AFTER",1:"BEFORE") | 
|---|
| 84 | ; | 
|---|
| 85 | ; -- set zero of oe | 
|---|
| 86 | S X=$G(^SCE(SDOE,0)) | 
|---|
| 87 | S ^TMP("SDEVT",$J,SDHDL,SDORG,"SDOE",SDOE,0,SDCAP)=X | 
|---|
| 88 | S:'$D(^TMP("SDEVT",$J,SDHDL,SDORG,"SDOE",SDOE,0,OP)) ^(OP)="" | 
|---|
| 89 | ; | 
|---|
| 90 | ; -- save other data | 
|---|
| 91 | S FILE=409.42 | 
|---|
| 92 | S I=0 F  S I=$O(^SDD(FILE,"OE",SDOE,I)) Q:'I  D | 
|---|
| 93 | . S X=$G(^SDD(FILE,I,0)) | 
|---|
| 94 | . S ^TMP("SDEVT",$J,SDHDL,SDORG,"SDOE",SDOE,"CL",I,0,SDCAP)=X | 
|---|
| 95 | . S:'$D(^TMP("SDEVT",$J,SDHDL,SDORG,"SDOE",SDOE,"CL",I,0,OP)) ^(OP)="" | 
|---|
| 96 | ; | 
|---|
| 97 | IF SDORG'=1,SDORG'=3 G OEQ | 
|---|
| 98 | ; | 
|---|
| 99 | ; -- gets children oe's | 
|---|
| 100 | S SDKID=0 | 
|---|
| 101 | F  S SDKID=$O(^SCE("APAR",SDOE,SDKID)) Q:'SDKID  D | 
|---|
| 102 | . S X=$G(^SCE(SDKID,0)) | 
|---|
| 103 | . IF $P(X,U,8)'=4 Q  ; -- must be a credit stop encounter | 
|---|
| 104 | . S ^TMP("SDEVT",$J,SDHDL,4,"SDOE",SDKID,0,SDCAP)=X | 
|---|
| 105 | . S:'$D(^TMP("SDEVT",$J,SDHDL,4,"SDOE",SDKID,0,OP)) ^(OP)="" | 
|---|
| 106 | OEQ Q | 
|---|
| 107 | ; | 
|---|
| 108 | OECHG(SDORG,SDHDL) ; -- compare befores and afters | 
|---|
| 109 | N Y,I,SDOE S (Y,SDOE)=0 | 
|---|
| 110 | F  S SDOE=$O(^TMP("SDEVT",$J,SDHDL,SDORG,"SDOE",SDOE)) Q:'SDOE  D  Q:Y | 
|---|
| 111 | . S I=0 | 
|---|
| 112 | . F  S I=$O(^TMP("SDEVT",$J,SDHDL,SDORG,"SDOE",SDOE,"CL",I)) Q:'I  I $G(^(I,0,"BEFORE"))='$G(^("AFTER")) S Y=1 Q | 
|---|
| 113 | Q Y | 
|---|
| 114 | ; | 
|---|
| 115 | OEVT(SDOE,SDCAP,SDHDL,SDATA,SDOE0) ; -- event driver calls by oe | 
|---|
| 116 | ; SDATA only required for appts | 
|---|
| 117 | ; SDOE0 only required for check out deletion AFTER | 
|---|
| 118 | ; | 
|---|
| 119 | N SD0,SDORG,SDT,DFN,SDDA,SDCL,SDOEP | 
|---|
| 120 | S SD0=$S($D(^SCE(SDOE,0)):^(0),1:$G(SDOE0)),SDOEP=$P(SD0,U,6) | 
|---|
| 121 | I SD0']""!(SDOEP) G OEVTQ | 
|---|
| 122 | S SDT=+SD0,DFN=+$P(SD0,U,2),SDCL=+$P(SD0,U,4),SDORG=+$P(SD0,U,8),SDDA=$P(SD0,U,9) | 
|---|
| 123 | I SDCAP="BEFORE" D | 
|---|
| 124 | .I SDORG=1 D BEFORE(.SDATA,DFN,SDT,SDCL,SDDA,SDHDL) Q | 
|---|
| 125 | .I SDORG=2 D BEFORE^SDAMEVT2(SDOE,SDHDL) Q | 
|---|
| 126 | .I SDORG=3 D BEFORE^SDAMEVT3(DFN,SDT,9,SDHDL) | 
|---|
| 127 | I SDCAP="AFTER" D | 
|---|
| 128 | .I SDORG=1 S SDATA=SDDA_"^"_DFN_"^"_SDT_"^"_SDCL D AFTER(.SDATA,DFN,SDT,SDCL,SDDA,SDHDL),EVT(.SDATA,5,0,SDHDL) Q | 
|---|
| 129 | .I SDORG=2 D EVT^SDAMEVT2(SDOE,7,SDHDL) Q | 
|---|
| 130 | .I SDORG=3 D EVT^SDAMEVT3(DFN,SDT,9,SDHDL) | 
|---|
| 131 | OEVTQ Q | 
|---|
| 132 | ; | 
|---|
| 133 | ; -- SEE SDAMEVT0 FOR DOC ON VARIABLES | 
|---|