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