source: FOIAVistA/trunk/r/PCE_PATIENT_CARE_ENCOUNTER-AUTN-EFDP-PX-VSIT--PXRM/VSITSTAT.m@ 1397

Last change on this file since 1397 was 628, checked in by George Lilly, 15 years ago

initial load of FOIAVistA 6/30/08 version

File size: 4.6 KB
Line 
1VSITSTAT ;ISL/PKR - Visit Tracking in/out patient Update Protocol for ADT ;4/23/97
2 ;;1.0;PCE PATIENT CARE ENCOUNTER;**76**;Aug 12, 1996
3 ; Patch PX*1*76 changes the 2nd line of all VSIT* routines to reflect
4 ; the incorporation of the module into PCE. For historical reference,
5 ; the old (VISIT TRACKING) 2nd line is included below to reference VSIT
6 ; patches.
7 ;
8 ;;2.0;VISIT TRACKING;**2**;Aug 12, 1996
9 ;
10EN ;Main entry point called by ADT event driver, process adm and d/c only.
11 I '$D(^UTILITY("DGPM",$J,1))&'$D(^UTILITY("DGPM",$J,3)) G ENQ
12 W:'$G(DGQUIET) !!,"Updating visit status..."
13 ;
14 N MAXDATE,TOFFSET
15 S MAXDATE=9999999
16 S TOFFSET=.0000001
17 ;
18 ;Build a time ordered list of visits for this patient.
19 N DATE,TIME,VDT,VIEN
20 S VDT=""
21 F S VDT=$O(^AUPNVSIT("AA",DFN,VDT)) Q:'VDT D
22 . S VIEN="",VIEN=$O(^AUPNVSIT("AA",DFN,VDT,VIEN))
23 . S DATE=$P(VDT,".",1)
24 . S TIME=VDT-DATE
25 . S DATE=MAXDATE-DATE+TIME
26 . S ^TMP("VSITSTAT",$J,DFN,DATE,VIEN)=""
27 ;
28 ;Try to get information for the complete movement.
29 S VAIP("E")=DGPMDA
30 D IN5^VADPT
31 ;
32 ;Setup the admission information.
33 N ADMA,ADMIT
34 S ADMIT=$$ADMISSIO(.ADMA)
35 ;
36 ;Setup the discharge information.
37 N DISA,DISCHG
38 S DISCHG=$$DISCHARG(.DISA)
39 ;
40 ;We must have a value either for the admission after or previous.
41 I (ADMA("A")="")&(ADMA("P")="") D Q
42 . W !,"VSITSTAT FATAL ERROR -- NO ADMISSION TIME"
43 ;
44 N IN,INOUT,OUT,SDBEG,SDEND
45 S IN=1,OUT=0
46 ;
47 ;General, this handles admission add and parts of admission change
48 ;delete change.
49 I (+ADMA("A")>0)&(ADMA("A")'=ADMA("P")) D
50 . S SDBEG=ADMA("A")-TOFFSET
51 . I DISCHG S SDEND=DISA("A")
52 . E S SDEND=MAXDATE
53 . S INOUT=IN
54 . D SCANUPD(SDBEG,SDEND,INOUT)
55 ;
56 ;Admission change. We only need to worry about a latter time. The
57 ;earlier case is entirely handled above.
58 I (+ADMA("P")>0)&(+ADMA("P")<+ADMA("A")) D
59 . S SDBEG=ADMA("P")
60 . S SDEND=ADMA("A")-TOFFSET
61 . S INOUT=OUT
62 . D SCANUPD(SDBEG,SDEND,INOUT)
63 ;
64 ;Admission delete.
65 I (+ADMA("P")>0)&(ADMA("A")="") D
66 . S SDBEG=ADMA("P")-TOFFSET
67 . I +DISA("P")>0 S SDEND=DISA("P")
68 . E S SDEND=MAXDATE
69 . S INOUT=OUT
70 . D SCANUPD(SDBEG,SDEND,INOUT)
71 ;
72 ;Discharge add.
73 I (ADMA("A")=ADMA("P"))&(+DISA("A")>0) D
74 . S SDBEG=DISA("A")+TOFFSET
75 . S SDEND=MAXDATE
76 . S INOUT=OUT
77 . D SCANUPD(SDBEG,SDEND,INOUT)
78 ;
79 ;Discharge change. We only need to worry about an earlier discharge
80 ;time.
81 I (+DISA("A")>0)&(+DISA("A")<+DISA("P")) D
82 . S SDBEG=DISA("A")+TOFFSET
83 . S SDEND=DISA("P")
84 . S INOUT=OUT
85 . D SCANUPD(SDBEG,SDEND,INOUT)
86 ;
87 ;Discharge delete.
88 I (ADMA("A")=ADMA("P"))&(+DISA("P")>0)&(DISA("A")="") D
89 . S SDBEG=ADMA("A")-TOFFSET
90 . S SDEND=DISA("P")
91 . S INOUT=IN
92 . D SCANUPD(SDBEG,SDEND,INOUT)
93 ;
94 W:'$G(DGQUIET) "completed."
95 ;
96ENQ ;
97 K ^TMP("VSITSTAT",$J,DFN)
98 D KVA^VADPT
99 Q
100 ;
101 ;=======================================================================
102ADMISSIO(ADMA) ;Return true if there is an admission.
103 ;
104 ;If the movement is just a change in discharge time UTILITY(...1,...)
105 ;will not exist.
106 N MVMNT
107 S MVMNT="",MVMNT=$O(^UTILITY("DGPM",$J,1,MVMNT))
108 I MVMNT D
109 . S ADMA("A")=$P($G(^UTILITY("DGPM",$J,1,MVMNT,"A")),U,1)
110 . S ADMA("P")=$P($G(^UTILITY("DGPM",$J,1,MVMNT,"P")),U,1)
111 E D
112 . S ADMA("A")=$P(VAIP(13,1),U,1)
113 . I VAIP(13)=DGPMDA S ADMA("P")=$P(DGPMP,U,1)
114 . E S ADMA("P")=""
115 Q 1
116 ;
117 ;=======================================================================
118DISCHARG(DISA) ;Return true if there is a discharge.
119 N MVMNT,RETVAL
120 S MVMNT="",MVMNT=$O(^UTILITY("DGPM",$J,3,MVMNT))
121 I MVMNT D
122 . S DISA("A")=$P($G(^UTILITY("DGPM",$J,3,MVMNT,"A")),U,1)
123 . S DISA("P")=$P($G(^UTILITY("DGPM",$J,3,MVMNT,"P")),U,1)
124 E D
125 . S DISA("A")=$P(VAIP(17,1),U,1)
126 . I VAIP(17)=DGPMDA S DISA("P")=$P(DGPMP,U,1)
127 . E S DISA("P")=""
128 I DISA("A")>0 S RETVAL=1
129 E S RETVAL=0
130 Q RETVAL
131 ;
132 ;=======================================================================
133SCANUPD(VSITBEG,VSITEND,INOUT) ;Scan range of visits and update
134 ; input:
135 ; VSITBEG := begin date
136 ; VSITEND := end date
137 ; INOUT := visit status
138 ;
139 N VSIT,VSITDT,VSITIEN
140 S VSITDT=VSITBEG
141 F S VSITDT=$O(^TMP("VSITSTAT",$J,DFN,VSITDT)) Q:('VSITDT)!(VSITDT>VSITEND) D
142 . S VSITIEN="",VSITIEN=$O(^TMP("VSITSTAT",$J,DFN,VSITDT,VSITIEN))
143 . S VSIT("IEN")=VSITIEN
144 . S VSIT("IO")=INOUT
145 . S VSIT("SVC")=$$UPDSCAT(VSITIEN,INOUT)
146 . D UPD^VSIT
147 ;
148 Q
149 ;=======================================================================
150UPDSCAT(VSITIEN,INOUT) ;Set the Service Category for in or outpatient.
151 N CSC,NSC
152 S (CSC,NSC)=$P($G(^AUPNVSIT(VSITIEN,0)),U,7)
153 I (CSC="A")!(CSC="I") D
154 . I INOUT S NSC="I"
155 . E S NSC="A"
156 ;
157 I (CSC="D")!(CSC="X") D
158 . I INOUT S NSC="D"
159 . E S NSC="X"
160 ;
161 ;If the current Service Category was not A, I, D, or X return the original.
162 Q NSC
163 ;
Note: See TracBrowser for help on using the repository browser.