1 | YSCUP000 ;DALISC/LJA - Pt Move Utils: Master Logic ;8/23/94 18:04
|
---|
2 | ;;5.01;MENTAL HEALTH;**2,11,20,29**;Dec 30, 1994
|
---|
3 | ;;
|
---|
4 | ;
|
---|
5 | CTRL ; Process movements starting here... YSCUP is just the "caller".
|
---|
6 | ;
|
---|
7 | ; Required Variable: DFN
|
---|
8 | ;
|
---|
9 | ; OK to set DFN and call here multiple times. No harm done.
|
---|
10 | ; This can be done to correct any "errant" patient records.
|
---|
11 | ;
|
---|
12 | CHKPMOV ; Check type of PIM's movement. If the movement is made from Bed Switch
|
---|
13 | ; [DG SWITCH BED], Provider Change [DGPM PROVIDER CHANGE],
|
---|
14 | ; Check-in Lodger [DGPM CHECK-IN] OR Lodger Check-out [DGPM CHECK-OUT],
|
---|
15 | ; then no MH data is updated.
|
---|
16 | ;
|
---|
17 | S YSMOVOK=1
|
---|
18 | S:$D(ZTQUEUED) ZTREQ="@"
|
---|
19 | I DGPMA="",$D(DGPMP)&($P(DGPMP,U,2)=4)!($P(DGPMP,U,2)=5) D
|
---|
20 | . S YSMOVOK=0
|
---|
21 | E I $D(DGPMA) D
|
---|
22 | . I (($D(DGPMA)&(DGPMP'=""))&($P(DGPMA,U,2)=1)&($P(DGPMA,U,7)'=$P(DGPMP,U,7)))!(($P(DGPMA,U,2)=6))!($P(DGPMA,U,2)=4)!($P(DGPMA,U,2)=5) D
|
---|
23 | . . S YSMOVOK=0
|
---|
24 | QUIT:'YSMOVOK
|
---|
25 | ;
|
---|
26 | CHKMOV ;Check movement
|
---|
27 | ;
|
---|
28 | S YSACTS=0 ; Records if Adds, Deletes, or
|
---|
29 | ; Updates occured
|
---|
30 | D CKDFN QUIT:'YSOK ;->
|
---|
31 | N YSMH
|
---|
32 | S YSMH="^TMP(""YSMH"""_","_$J_")"
|
---|
33 | D GETMH^YSCUP003(+YSDFN,YSMH) ; Move MH Entries into ^TMP("YSMH",$J,
|
---|
34 | S YSMHMOV=0
|
---|
35 | N YSPM
|
---|
36 | S YSPM="^TMP(""YSPM"""_","_$J_")"
|
---|
37 | D GETMOVES^YSCUP003(+YSDFN,YSPM) ; Move Latest Inpt Stay info -> ^TMP("YSPM",$J,
|
---|
38 | D STATUS ; Build p(1-2) of YSTatus
|
---|
39 | N YSMH,YSPM
|
---|
40 | S YSMH="^TMP(""YSMH"""_","_$J_")",YSPM="^TMP(""YSPM"""_","_$J_")"
|
---|
41 | D MATCH^YSCUP003(YSMH,YSPM) ; Compare ^TMP("YSPM",$J, to ^TMP("YSMH",$J, data
|
---|
42 | D XTMP^YSCUP004 ; Store ^XTMP data
|
---|
43 | D ACTION ; Create, Edit, or Delete ^YSG("INP",
|
---|
44 | D UPDST^YSCUP004 ; Store latest value of YST in ^XTMP
|
---|
45 | I 'YSACTS D ; If no MH actions, kill ^XTMP data
|
---|
46 | . D CLEAN^YSCUP004
|
---|
47 | . QUIT
|
---|
48 | D NOMH^YSCUP004($G(YSXTMP),1) ; If MH actions, leave 0 node
|
---|
49 | ;
|
---|
50 | QUIT
|
---|
51 | ;
|
---|
52 | ACTION ; Perform whatever updating is necessary...
|
---|
53 | QUIT:'$D(YSPM)&('$D(YSMH)) ;->
|
---|
54 | ;
|
---|
55 | ; Active MH Inpatient? (0/1)
|
---|
56 | S YSAMV=+$O(^TMP("YSPM",$J,0)),YSAMV=+$G(^TMP("YSPM",$J,+YSAMV))
|
---|
57 | ;
|
---|
58 | ; MH Inpt entry active now? (0/1)
|
---|
59 | S YSAMH=+$O(^TMP("YSMH",$J,0)),YSAMH=$P($G(^TMP("YSMH",$J,+YSAMH,7)),U,4),YSAMH=(YSAMH>0)
|
---|
60 | ;
|
---|
61 | NOMH1 ; If no MH moves, but latest MH Inpt entry from current stay moves...
|
---|
62 | S $P(YST,U,7)="NOMH"
|
---|
63 | I $P(YST,U,3)'>0&($$CURRENT>0) D QUIT ;->
|
---|
64 | . I '$D(ZTQUEUED),'$G(DGQUIET) W !,"No Mental Health wards in current stay... Deleting entry# "
|
---|
65 | . S X=+$O(^TMP("YSMH",$J,0)),YSNO=+$G(^TMP("YSMH",$J,+X,0)) W:YSNO>0&('$D(ZTQUEUED))&('$G(DGQUIET)) +YSNO
|
---|
66 | . I '$D(ZTQUEUED),('$G(DGQUIET)) W "..."
|
---|
67 | . I YSNO>0 D DELETE^YSCUP002(+YSNO)
|
---|
68 | ;
|
---|
69 | NOMH2 ; If no MH moves, and latest MH inpt entry NOT from current stay...
|
---|
70 | S $P(YST,U,7)="NOMH2"
|
---|
71 | I $P(YST,U,3)'>0&(+$$CURRENT'>0) D QUIT ;->
|
---|
72 | . S $P(YST,U,7)="NOMH2"
|
---|
73 | . K ^XTMP(YSXTMP)
|
---|
74 | . S YSACTS=0
|
---|
75 | . I '$D(ZTQUEUED),'$G(DGQUIET) W " No MH actions taken..."
|
---|
76 | ;
|
---|
77 | DELMH ; Should MH entry be deleted?
|
---|
78 | ; Get Last Movement information...
|
---|
79 | ; ... Movement Type & Movement Number
|
---|
80 | S $P(YST,U,7)="DELMH"
|
---|
81 | S X=+$O(^TMP("YSPM",$J,0)),X=$G(^TMP("YSPM",$J,+X)),YSMT=+$P(X,U,4),YSMOVN=+$P(X,U,5)
|
---|
82 | ; Get Last MH Entry Information...
|
---|
83 | S X=+$O(^TMP("YSMH",$J,0)),X=$G(^TMP("YSMH",$J,+X,7)),YSMHAN=+$P(X,U,3)
|
---|
84 | ; If last movement is a DC, and IEN of last movement is LESS than the
|
---|
85 | ; Admission IEN used to create the last MH Inpatient entry!!!
|
---|
86 | I YSMT=3,YSMHAN>YSMOVN D QUIT ;->
|
---|
87 | . I '$D(ZTQUEUED),'$G(DGQUIET) W !,"No Mental Health wards in current stay... Deleting entry# "
|
---|
88 | . S X=+$O(^TMP("YSMH",$J,0)),YSNO=+$G(^TMP("YSMH",$J,+X,0)) W:(YSNO>0&('$D(ZTQUEUED)))&('$G(DGQUIET)) +YSNO
|
---|
89 | . I '$D(ZTQUEUED),'$G(DGQUIET) W "..."
|
---|
90 | . I YSNO>0 D DELETE^YSCUP002(+YSNO)
|
---|
91 | ;
|
---|
92 | MHMOV ; If MH moves, and NO current entry
|
---|
93 | S $P(YST,U,7)="MHMOV"
|
---|
94 | I $P(YST,U,3)>0&(+$$CURRENT'>0) D QUIT ;->
|
---|
95 | .
|
---|
96 | . QUIT:$G(YSFMTMH)']""!($G(YSFMTMH)="0") ;->
|
---|
97 | . I '$D(ZTQUEUED),'$G(DGQUIET) W !,"Creating new Mental Health Inpt file entry..."
|
---|
98 | . D ADD^YSCUP002(+YSFMTMH)
|
---|
99 | . I '$D(ZTQUEUED),'$G(DGQUIET) W $S($G(YSIEN)'>0:" No entry made!",1:" #"_+YSIEN)
|
---|
100 | . QUIT:$G(YSIEN)'>0 ;->
|
---|
101 | . D GETMH^YSCUP003(+YSDFN,"^TMP(""YSMH"","_$J_",") ;Update ^TMP("YSMH",$J, array elements...
|
---|
102 | . S X=+$O(^TMP("YSMH",$J,0)),YSNO=+$G(^TMP("YSMH",$J,+X,0))
|
---|
103 | . I '$D(ZTQUEUED),'$G(DGQUIET) W !,"Updating MH entry ",$S(YSNO>0:"#"_+YSNO,1:""),"..."
|
---|
104 | . D UPDATE^YSCUP001(+$O(^TMP("YSMH",$J,0)),+$O(^TMP("YSPM",$J,0)))
|
---|
105 | ;
|
---|
106 | UPDATE ; Update data in last YSMH entry...
|
---|
107 | S $P(YST,U,7)="UPDATE"
|
---|
108 | S X=$$CURRENT I +$P(X,U,2)>0&('$D(ZTQUEUED))&('$G(DGQUIET)) W !,"Updating MH entry# ",+$P(X,U,2),"..."
|
---|
109 | D UPDATE^YSCUP001(+$O(^TMP("YSMH",$J,0)),+$O(^TMP("YSPM",$J,0)))
|
---|
110 | ;
|
---|
111 | QUIT
|
---|
112 | CURRENT() ; Is last YSMH entry part of the current stay? (0/Move IEN)
|
---|
113 | ; Returns 0 or Movement IEN of move responsible for MH Inpt creation
|
---|
114 | I +$O(^TMP("YSMH",$J,0))'>0 QUIT 0 ;-> No MH entries exist
|
---|
115 | S YSMH=+$O(^TMP("YSMH",$J,0)),YSNO=+$P($G(^TMP("YSMH",$J,+YSMH,7)),U,3) I YSNO'>0 QUIT 0 ;->
|
---|
116 | S X=$D(^TMP("YSPM",$J,"A",+YSNO)) QUIT:+X'>0 0 ;->
|
---|
117 | S YSMH=+$G(^TMP("YSMH",$J,+YSMH,0)) QUIT:YSMH'>0 0 ;->
|
---|
118 | S X=+$O(^TMP("YSPM",$J,0)),YSC=+$P($G(^TMP("YSPM",$J,+X)),U,4)
|
---|
119 | QUIT +YSNO_U_+YSMH_U_+YSC
|
---|
120 | ;
|
---|
121 | STATUS ; MH/Patient Movement Data Status...
|
---|
122 | ; YST is used to track various statuses...
|
---|
123 | ; STATUS^YSCUP000 sets the 1st two pieces...
|
---|
124 | ; MH DATA? ^ MOVEMENT DATA
|
---|
125 | ; MATCH^YSCUP003 sets the third piece. (Ie., Whether there is
|
---|
126 | ; is a match between movements and MH entries.)
|
---|
127 | ;
|
---|
128 | S YST=(YSNMH>0)_U_(YSNM>0)
|
---|
129 | ;
|
---|
130 | QUIT
|
---|
131 | ;
|
---|
132 | CKDFN ; DFN check...
|
---|
133 | S YSOK=1
|
---|
134 | S:$G(DFN)>0&($G(YSDFN)'>0) YSDFN=+DFN
|
---|
135 | QUIT:$G(YSDFN)>0 ;->
|
---|
136 | I '$D(ZTQUEUED),'$G(DGQUIET) W !!,$C(7),"The patient DFN is not defined!! Exiting..."
|
---|
137 | H 10
|
---|
138 | S YSOK=0
|
---|
139 | QUIT
|
---|
140 | ;
|
---|
141 | EOR ;YSCUP000 - Pt Move Utils: Master Logic ;8/23/94 18:04
|
---|