| [613] | 1 | SDSTAT ;MJK/ALB - Appt Status Update Protocol for ADT ; 7/14/92 | 
|---|
|  | 2 | ;;5.3;Scheduling;**31,132,396**;Aug 13, 1993 | 
|---|
|  | 3 | ; | 
|---|
|  | 4 | EN ; -- main entry point called by ADT event driver | 
|---|
|  | 5 | ; -- process adm and d/c only | 
|---|
|  | 6 | I '$D(^UTILITY("DGPM",$J,1)),'$D(^(3)) G ENQ | 
|---|
|  | 7 | I '$O(^DPT(DFN,"S",0)) G ENQ | 
|---|
|  | 8 | N SDBEG,SDEND,PREV,AFTER,SDP,SDA,SDTYPE,SDCA K ^TMP("SDSTAT",$J),^TMP("SDOE STAT",$J) | 
|---|
|  | 9 | W:'$G(DGQUIET) !!,"Updating appointment status..." | 
|---|
|  | 10 | S ^TMP("SDSTAT",$J,0)=0,^TMP("SDOE STAT",$J,0)=0 | 
|---|
|  | 11 | F SDTYPE=1,3 S SDMVT="" F  S SDMVT=$O(^UTILITY("DGPM",$J,SDTYPE,SDMVT)) Q:'SDMVT  S SDP=$G(^(SDMVT,"P")),SDA=$G(^("A")) D | 
|---|
|  | 12 | .S PREV=$S(+SDP:+SDP,1:9999999),AFTER=$S(+SDA:+SDA,1:9999999) | 
|---|
|  | 13 | .I SDTYPE=3,+SDP=+SDA Q  ; d/c & same d/t then quit | 
|---|
|  | 14 | .I SDTYPE=3,$P($G(^DIC(42,+$P($G(^DGPM(+$P($S(SDP]"":SDP,1:SDA),U,14),0)),U,6),0)),U,3)="D" Q  ; d/c & admitted to dom ward then quit | 
|---|
|  | 15 | .I SDTYPE=1,+SDP=+SDA,$P(SDP,U,6)=$P(SDA,U,6) Q  ; adm -> same d/t & same ward then quit | 
|---|
|  | 16 | .I SDTYPE=1,+SDP=+SDA S PREV=+SDP,AFTER=$S(+$G(^DGPM(+$P(SDP,U,17),0)):+^(0),1:9999999) ; adm & same d/t then reset date range | 
|---|
|  | 17 | .S SDBEG=$S(PREV>AFTER:AFTER,1:PREV),SDEND=$S(PREV>AFTER:PREV,1:AFTER) | 
|---|
|  | 18 | .D SCAN(DFN,SDBEG,SDEND) Q | 
|---|
|  | 19 | W:'$G(DGQUIET) "completed." | 
|---|
|  | 20 | ENQ K ^TMP("SDSTAT",$J),^TMP("SDOE STAT",$J) Q | 
|---|
|  | 21 | ; | 
|---|
|  | 22 | SCAN(SDFN,SDBEG,SDEND) ; -- scan range of appts to update | 
|---|
|  | 23 | ;  input:           SDFN := ien of patient | 
|---|
|  | 24 | ;                  SDBEG := begin date | 
|---|
|  | 25 | ;                  SDEND := end date | 
|---|
|  | 26 | ;      ^TMP("SDSTAT",$J) := array of apts processed | 
|---|
|  | 27 | ;   ^TMP("SDOE STAT",$J) := array of encounters processed | 
|---|
|  | 28 | ; | 
|---|
|  | 29 | N SDT,SDOE,SDOEP,SDORG,SDSTB,SDSTA | 
|---|
|  | 30 | ; -- process appts | 
|---|
|  | 31 | S SDT=SDBEG | 
|---|
|  | 32 | F  S SDT=$O(^DPT(SDFN,"S",SDT)) Q:'SDT!(SDT>SDEND)  D | 
|---|
|  | 33 | .I $D(^TMP("SDSTAT",$J,SDT)) Q  ; appt already processed | 
|---|
|  | 34 | .S ^TMP("SDSTAT",$J,0)=^TMP("SDSTAT",$J,0)+1,^(SDT)="" | 
|---|
|  | 35 | .D UPDATE(SDFN,SDT) | 
|---|
|  | 36 | ; | 
|---|
|  | 37 | ; -- process encounters | 
|---|
|  | 38 | S SDT=SDBEG | 
|---|
|  | 39 | F  S SDT=$O(^SCE("ADFN",SDFN,SDT)) Q:'SDT!(SDT>SDEND)  D | 
|---|
|  | 40 | .S SDOE=0 F  S SDOE=$O(^SCE("ADFN",SDFN,SDT,SDOE)) Q:'SDOE  D | 
|---|
|  | 41 | ..I $D(^TMP("SDOE STAT",$J,SDOE)) Q  ; emcounter already processed | 
|---|
|  | 42 | ..S ^TMP("SDOE STAT",$J,0)=^TMP("SDOE STAT",$J,0)+1,^(SDOE)="" | 
|---|
|  | 43 | ..S SDOE0=$G(^SCE(SDOE,0)),SDORG=$P(SDOE0,U,8),SDOEP=$P(SDOE0,U,6) | 
|---|
|  | 44 | ..I SDOEP!(SDORG=1) Q | 
|---|
|  | 45 | ..S SDSTB=$S($P(SDOE0,U,12)=8:"I",1:""),SDSTA=$$INP^SDAM2(SDFN,SDT) | 
|---|
|  | 46 | ..N SDATA,SDADTHDL,DFN S SDADTHDL=$$HANDLE^SDAMEVT(SDORG),DFN=SDFN | 
|---|
|  | 47 | ..I SDORG=2 D BEFORE^SDAMEVT2(SDOE,SDADTHDL) | 
|---|
|  | 48 | ..I SDORG=3 D BEFORE^SDAMEVT3(SDFN,SDT,9,SDADTHDL) | 
|---|
|  | 49 | ..D OE(SDOE,SDSTB,SDSTA,SDADTHDL) | 
|---|
|  | 50 | ..I SDORG=2 D EVT^SDAMEVT2(SDOE,7,SDADTHDL) | 
|---|
|  | 51 | ..I SDORG=3 D EVT^SDAMEVT3(SDFN,SDT,9,SDADTHDL) | 
|---|
|  | 52 | Q | 
|---|
|  | 53 | ; | 
|---|
|  | 54 | UPDATE(DFN,SDT) ; -- update appt status | 
|---|
|  | 55 | ;  input:            DFN := ien of patient | 
|---|
|  | 56 | ;                    SDT := date of appt | 
|---|
|  | 57 | ; | 
|---|
|  | 58 | N SDATA,SDSTB,SDSTA,SDSTB,SDOE,SDCL | 
|---|
|  | 59 | G UPDATEQ:'$D(^DPT(DFN,"S",SDT,0)) S SDATA=^(0) | 
|---|
|  | 60 | S SDOE=+$P(SDATA,U,20),SDSTB=$P(SDATA,U,2),SDCL=+SDATA | 
|---|
|  | 61 | I SDSTB=""!(SDSTB="NT")!(SDSTB="I") S SDSTA=$$STAT() I SDSTB'=SDSTA D | 
|---|
|  | 62 | .I $$REQ^SDM1A(SDT)="CI"!(SDT'<(DT+.2359)) S $P(^DPT(DFN,"S",SDT,0),U,2)=SDSTA Q | 
|---|
|  | 63 | .I SDT<(DT+.2359) D | 
|---|
|  | 64 | ..N SDATA,SDADTHDL,SDOEC | 
|---|
|  | 65 | ..S SDOE=$S(SDOE:SDOE,1:+$$GETAPT^SDVSIT2(DFN,SDT,SDCL)) Q:'SDOE | 
|---|
|  | 66 | ..S SDADTHDL=$$HANDLE^SDAMEVT(+$P($G(^SCE(SDOE,0)),U,8)) | 
|---|
|  | 67 | ..D OEVT^SDAMEVT(SDOE,"BEFORE",SDADTHDL,.SDATA) | 
|---|
|  | 68 | ..S $P(^DPT(DFN,"S",SDT,0),U,2)=SDSTA | 
|---|
|  | 69 | ..D OE(SDOE,SDSTB,SDSTA,SDADTHDL) | 
|---|
|  | 70 | ..D OEVT^SDAMEVT(SDOE,"AFTER",SDADTHDL,.SDATA) | 
|---|
|  | 71 | ..I SDSTA="I",$G(SDOE),$P($G(^SCE(SDOE,0)),U,12)=14 D | 
|---|
|  | 72 | ...S $P(^SCE(SDOE,0),U,12)=8 | 
|---|
|  | 73 | ...S SDOEC=$O(^SCE("APAR",SDOE,SDOE)) I SDOEC S $P(^SCE(SDOEC,0),U,12)=8 | 
|---|
|  | 74 | UPDATEQ Q | 
|---|
|  | 75 | ; | 
|---|
|  | 76 | STAT() ; -- determine status of appt | 
|---|
|  | 77 | N C,X | 
|---|
|  | 78 | S C=$G(^SC(+SDATA,"S",SDT,1,+$$FIND^SDAM2(DFN,SDT,+SDATA),"C")) | 
|---|
|  | 79 | I $$INP^SDAM2(DFN,SDT)="I" S X="I" G STATQ        ; inpatient | 
|---|
|  | 80 | I SDT>(DT+.2359) S X="" G STATQ                   ; future | 
|---|
|  | 81 | I $$REQ^SDM1A(.SDT)="CI",C S X="" G STATQ         ; checked in | 
|---|
|  | 82 | I $$COCMP^SDM1A(DFN,SDT),$P(C,U,3) S X="" G STATQ ; checked out | 
|---|
|  | 83 | I '$$CHK^SDM1A(+SDATA,SDT) S X="" G STATQ         ; non-count | 
|---|
|  | 84 | S X="NT" | 
|---|
|  | 85 | STATQ Q X | 
|---|
|  | 86 | ; | 
|---|
|  | 87 | OE(SDOE,SDSTB,SDSTA,SDHDL) ; -- update outpatient encounter if appropriate | 
|---|
|  | 88 | N Y | 
|---|
|  | 89 | S Y=0 | 
|---|
|  | 90 | I 'Y,SDSTB="I",SDSTA="NT" S Y=1 | 
|---|
|  | 91 | I 'Y,SDSTB="I",SDSTA="" S Y=1 | 
|---|
|  | 92 | I 'Y,SDSTB="NT",SDSTA="I" S Y=1 | 
|---|
|  | 93 | I 'Y,SDSTB="",SDSTA="I" S Y=1 | 
|---|
|  | 94 | I Y D | 
|---|
|  | 95 | .D COMDT^SDCODEL(SDOE,0) | 
|---|
|  | 96 | .D EN^SDCOM(SDOE,0,SDHDL) | 
|---|
|  | 97 | OEQ Q | 
|---|