| 1 | SDCO1 ;ALB/RMO - Appointment - Check Out;Apr 23 1999  ; Compiled November 16, 2006 15:24:29 | 
|---|
| 2 | ;;5.3;Scheduling;**27,132,149,193,250,296,446**;08/13/93;Build 77 | 
|---|
| 3 | ; | 
|---|
| 4 | ;check out if sd/369 is released before 446!!! | 
|---|
| 5 | ; | 
|---|
| 6 | EN ;Entry point for SDCO APPT CHECK OUT protocol | 
|---|
| 7 | N SDCOALBF,SDCOAP,SDCOBG,SDCODT,VALMY | 
|---|
| 8 | S VALMBCK="" | 
|---|
| 9 | D EN^VALM2(XQORNOD(0)) | 
|---|
| 10 | D FULL^VALM1 | 
|---|
| 11 | S SDCOAP=0 D NOW^%DTC S SDCODT=$P(%,".")_"."_$E($P(%,".",2)_"0000",1,4) | 
|---|
| 12 | F  S SDCOAP=$O(VALMY(SDCOAP)) Q:'SDCOAP  D | 
|---|
| 13 | .I $D(^TMP("SDAMIDX",$J,SDCOAP)) K SDAT S SDAT=^(SDCOAP) D | 
|---|
| 14 | ..W !!,^TMP("SDAM",$J,+SDAT,0) | 
|---|
| 15 | ..I $$CHK^SDCOU(SDCOAP) D CO(+$P(SDAT,"^",2),+$P(SDAT,"^",3),+$P(SDAT,"^",4),+$P(SDAT,"^",5),0,SDCODT,"CO",+SDAT,.SDCOALBF) | 
|---|
| 16 | I $G(SDCOALBF) S SDCOBG=VALMBG W ! D BLD^SDAM S:$D(@VALMAR@(SDCOBG,0)) VALMBG=SDCOBG | 
|---|
| 17 | S VALMBCK="R" | 
|---|
| 18 | K SDAT | 
|---|
| 19 | Q | 
|---|
| 20 | ; | 
|---|
| 21 | CO(DFN,SDT,SDCL,SDDA,SDASK,SDCODT,SDCOACT,SDLNE,SDCOALBF) ;Appt Check Out | 
|---|
| 22 | ; Input  -- DFN      Patient file IEN | 
|---|
| 23 | ;           SDT      Appointment Date/Time | 
|---|
| 24 | ;           SDCL     Hospital Location file IEN for Appt | 
|---|
| 25 | ;           SDDA     IEN in ^SC multiple or null [Optional] | 
|---|
| 26 | ;           SDASK    Ask Check Out Date/Time     [Optional] | 
|---|
| 27 | ;           SDCODT   Date/Time of Check Out      [Optional] | 
|---|
| 28 | ;           SDCOACT  Appt Mgmt Check Out Action  [Optional] | 
|---|
| 29 | ;           SDLNE    Appt Mgmt Line Number       [Optional] | 
|---|
| 30 | ; Output -- SDCOALBF Re-build Appt Mgmt List | 
|---|
| 31 | I $D(XRTL) D T0^%ZOSV | 
|---|
| 32 | N SDCOQUIT,SDOE,SDATA | 
|---|
| 33 | S:'SDDA SDDA=$$FIND^SDAM2(DFN,SDT,SDCL) | 
|---|
| 34 | I 'SDDA W !!,*7,">>> You cannot check out this appointment." D PAUSE^VALM1 G COQ | 
|---|
| 35 | S SDATA=$G(^DPT(DFN,"S",SDT,0)) | 
|---|
| 36 | ; ** MT Blocking removed | 
|---|
| 37 | ;S X="EASMTCHK" X ^%ZOSF("TEST") I $T,$G(EASACT)'="W",$$MT^EASMTCHK(DFN,$P($G(SDATA),U,16),"C",$G(SDT)) D PAUSE^VALM1 G COQ | 
|---|
| 38 | ; | 
|---|
| 39 | ;-- if new encounter, pass to PCE | 
|---|
| 40 | I $$NEW^SDPCE(SDT) D  S VALMBCK="R",SDCOALBF=1 G COQ | 
|---|
| 41 | . N SDCOED | 
|---|
| 42 | . S SDOE=$$GETAPT^SDVSIT2(DFN,SDT,SDCL) | 
|---|
| 43 | . ; | 
|---|
| 44 | . ; -- has appt already been checked out | 
|---|
| 45 | . S SDCOED=$$CHK($TR($$STATUS^SDAM1(DFN,SDT,SDCL,SDATA,SDDA),";","^")) | 
|---|
| 46 | . ; | 
|---|
| 47 | . ; -- if not checked out then do interview process | 
|---|
| 48 | . IF '$$CODT^SDCOU(DFN,SDT,SDCL) D | 
|---|
| 49 | . . N SDCOMKF,SDTRES | 
|---|
| 50 | . . ; | 
|---|
| 51 | . . ; -- first, check if should make follow-up appt | 
|---|
| 52 | . . IF $G(SDCOACT)="CO",'SDCOED D | 
|---|
| 53 | . . . N SDCOMKF | 
|---|
| 54 | . . . D MC^SDCO5(SDOE,1,.SDCOMKF,.SDCOQUIT) Q:$D(SDCOQUIT) | 
|---|
| 55 | . . . ; | 
|---|
| 56 | . . . ; -- Set flag to re-build appointment list | 
|---|
| 57 | . . . IF $G(SDCOMKF) S SDCOALBF=1 | 
|---|
| 58 | . . ; | 
|---|
| 59 | . . ; -- c/o interview if user didn't quit | 
|---|
| 60 | . . I '$D(SDCOQUIT),'SDCOED D | 
|---|
| 61 | . . . N SDAPTYP | 
|---|
| 62 | . . . S SDTRES=$$INTV^PXAPI("INTV","SD","PIMS",$P($G(^SCE(+SDOE,0)),U,5),$P($G(^SCE(+SDOE,0)),U,4),DFN) | 
|---|
| 63 | . . . Q:SDTRES<0 | 
|---|
| 64 | . . . ; | 
|---|
| 65 | . . . ; -- ask user if they want to see c/o screen | 
|---|
| 66 | . . . S SDGAFC=$$ASK^SDCO6 | 
|---|
| 67 | . . . I 'SDGAFC D | 
|---|
| 68 | . . . .N SDELIG | 
|---|
| 69 | . . . .S SDELIG=$$ELSTAT^SDUTL2(DFN) | 
|---|
| 70 | . . . .I $$MHCLIN^SDUTL2(SDCL),'($$COLLAT^SDUTL2(SDELIG)!$P(SDATA,U,11)) D | 
|---|
| 71 | . . . . .I $$NEWGAF^SDUTL2(DFN) D | 
|---|
| 72 | . . . . . .I '$$GAFCM^SDUTL2() S SDGAFC=1 | 
|---|
| 73 | . . .I SDGAFC D EN^SDCO(SDOE,,1) | 
|---|
| 74 | . ; | 
|---|
| 75 | . ; -- if already checked out then show c/o screen | 
|---|
| 76 | . E  D EN^SDCO(SDOE,,1) | 
|---|
| 77 | ; | 
|---|
| 78 | ; -- view if old encounters | 
|---|
| 79 | S SDOE=$$GETAPT^SDVSIT2(DFN,SDT,SDCL) | 
|---|
| 80 | D EN^SDCO(SDOE,,1) | 
|---|
| 81 | ; | 
|---|
| 82 | COQ K % D EWLCHK Q | 
|---|
| 83 | Q | 
|---|
| 84 | EWLCHK ;check if patient has any open EWL entries (SD/372) | 
|---|
| 85 | ;get appointment | 
|---|
| 86 | ; | 
|---|
| 87 | K ^TMP($J,"SDAMA301"),^TMP($J,"APPT") | 
|---|
| 88 | W:$D(IOF) @IOF D APPT^SDWLEVAL(DFN,SDT,SDCL) | 
|---|
| 89 | Q:'$D(^TMP($J,"APPT")) | 
|---|
| 90 | N SDEV D EN^SDWLEVAL(DFN,.SDEV) I SDEV,$L(SDEV(1))>0 D | 
|---|
| 91 | .K ^TMP("SDWLPL",$J),^TMP($J,"SDWLPL") | 
|---|
| 92 | .D INIT^SDWLPL(DFN,"M") | 
|---|
| 93 | .Q:'$D(^TMP($J,"SDWLPL")) | 
|---|
| 94 | .D LIST^SDWLPL("M",DFN) | 
|---|
| 95 | .F  Q:'$D(^TMP($J,"SDWLPL"))  N SDR D ANSW^SDWLEVAL(1,.SDR) I 'SDR D LIST^SDWLPL("M",DFN) D | 
|---|
| 96 | ..F  N SDR  D ANSW^SDWLEVAL(0,.SDR) Q:'$D(^TMP($J,"SDWLPL"))  I 'SDR W !,"MUST ENTER A REASON NOT TO DISPOSITION MATCHED EWL ENTRY",! | 
|---|
| 97 | ..Q | 
|---|
| 98 | .Q | 
|---|
| 99 | Q | 
|---|
| 100 | ; | 
|---|
| 101 | BEFORE(SDATA,DFN,SDT,SDCL,SDDA,SDHDL) ; -- event driver before ; not used | 
|---|
| 102 | S SDATA=SDDA_"^"_DFN_"^"_SDT_"^"_SDCL,SDHDL=$$HANDLE^SDAMEVT(1) | 
|---|
| 103 | D BEFORE^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDHDL) | 
|---|
| 104 | Q | 
|---|
| 105 | ; | 
|---|
| 106 | AFTER(SDATA,DFN,SDT,SDCL,SDDA,SDHDL,SDLNE) ; -- event driver after ; not used | 
|---|
| 107 | D AFTER^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDHDL) | 
|---|
| 108 | D:$G(SDLNE) UPD(DFN,SDT,SDCL,SDLNE,SDATA("BEFORE","STATUS"),SDATA("AFTER","STATUS")) | 
|---|
| 109 | D EVT^SDAMEVT(.SDATA,5,0,SDHDL) | 
|---|
| 110 | Q | 
|---|
| 111 | ; | 
|---|
| 112 | UPD(DFN,SDT,SDCL,SDLNE,SDSTB,SDSTA) ; -- update appt mgmt screen ; used by AFTER but AFTER is not used | 
|---|
| 113 | N SDAMBOLD | 
|---|
| 114 | I $P(SDSTB,"^",3)'=$P(SDSTA,"^",3) D UPD^SDAM2($$LOWER^VALM1($P(SDSTA,"^",3)),"STAT",SDLNE),UPD^SDAM2("","TIME",SDLNE) S SDAMBOLD(DFN,SDT,SDCL)="" | 
|---|
| 115 | I $P(SDSTA,"^",3)["CHECKED OUT",$P($P(SDSTA,"^",5),".")=DT D UPD^SDAM2($$TIME^SDAM1($P($P(SDSTA,"^",5),".",2)),"TIME",SDLNE) | 
|---|
| 116 | Q | 
|---|
| 117 | ; | 
|---|
| 118 | ELIG(DFN,SDT,SDCL,SDDA) ; -- update elig if blank | 
|---|
| 119 | N X,DR | 
|---|
| 120 | I $P(^SC(SDCL,"S",SDT,1,SDDA,0),U,10)="" D | 
|---|
| 121 | .S X=+$G(^DPT(DFN,.36)),X=$S('$D(^DIC(8,X,0)):"",$P(^(0),U,4)=6:"",1:X) | 
|---|
| 122 | .I X]"" S DR="30////^S X="_X D DIE(SDCL,SDT,SDDA,DR) | 
|---|
| 123 | Q | 
|---|
| 124 | ; | 
|---|
| 125 | CHK(SDSTB) ; -- is appointment checked out | 
|---|
| 126 | N Y | 
|---|
| 127 | I "^2^8^12^"[("^"_+SDSTB_"^"),$P(SDSTB,"^",3)["CHECKED OUT" S Y=1 | 
|---|
| 128 | Q +$G(Y) | 
|---|
| 129 | ; | 
|---|
| 130 | DT(DFN,SDT,SDCL,SDDA,SDASK,SDCODT,SDCOQUIT) ;Update Check Out Date | 
|---|
| 131 | N %DT,DR,SDCIDT,X | 
|---|
| 132 | S:'$D(^SC(SDCL,"S",0)) ^(0)="^44.001DA^^" | 
|---|
| 133 | S DR="",SDCIDT=$P($G(^SC(SDCL,"S",SDT,1,SDDA,"C")),"^"),X=$P($G(^("C")),"^",3) | 
|---|
| 134 | I X G DTQ:'SDASK  S DR="303R" | 
|---|
| 135 | I DR="",$P(^SC(SDCL,0),U,24),$$REQ^SDM1A(SDT)="CO" S DR="303R//"_$S($G(SDCODT):$$FTIME^VALM1($S(SDCODT<SDCIDT:SDCIDT,1:SDCODT)),1:"NOW") | 
|---|
| 136 | I DR="" S DR="303R///"_$S($G(SDCODT):"/"_$S(SDCODT<SDCIDT:SDCIDT,1:SDCODT),1:"NOW") | 
|---|
| 137 | S DR="S SDCOQUIT="""";"_DR_";K SDCOQUIT" | 
|---|
| 138 | D DIE(SDCL,SDT,SDDA,DR) | 
|---|
| 139 | DTQ Q | 
|---|
| 140 | ; | 
|---|
| 141 | DIE(SDCL,SDT,SDDA,DR) ; -- update appt data in ^SC | 
|---|
| 142 | N DA,DIE | 
|---|
| 143 | S DA(2)=SDCL,DA(1)=SDT,DA=SDDA,DIE="^SC("_DA(2)_",""S"","_DA(1)_",1," | 
|---|
| 144 | D ^DIE K DQ,DE | 
|---|
| 145 | DIEQ Q | 
|---|