source: WorldVistAEHR/trunk/r/EVENT_CAPTURE-EC--ECT--ECX/ECMUTL1.m@ 1036

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

initial load of WorldVistAEHR

File size: 7.8 KB
RevLine 
[613]1ECMUTL1 ;ALB/ESD - Utilities for Multiple Dates/Mult Procs ;20 AUG 1997 13:56
2 ;;2.0; EVENT CAPTURE ;**5,10,15,13,17,23,41,42,50,54**;8 May 96
3 ;
4 ;
5ASKPAT(ECPAT) ; Ask patient
6 ;
7 ; Input: ECPAT = patient DFN and name (passed by reference)
8 ;
9 ; Output: 1 = successful
10 ; -1 = unsuccessful (timed out or uparrowed)
11 ; -2 = unsuccessful (returned out)
12 ;
13 N DIC,DUOUT,DTOUT,Y,YY,ECDUP,ECI,ECUP
14SEL ;
15 S (ECDUP,ECI)=0
16 S DIC="^DPT(",DIC(0)="QEAMZ"
17 S DIC("A")="Select Patient: "
18 D ^DIC
19 I Y=-1!($D(DUOUT))!($D(DTOUT)) G ASKPATQ
20 ;
21 ;- Create ECPLST local array to track duplicate names
22 I $O(^TMP("ECPLST",$J,0)) D
23 . F S ECI=$O(^TMP("ECPLST",$J,ECI)) Q:'ECI D
24 .. I +$G(^TMP("ECPLST",$J,ECI))=+Y D
25 ... S ECDUP=1
26 ... W !!,"Patient already selected. Please select another patient.",!
27 I ECDUP G SEL
28 I 'ECDUP D I $G(ECUP)="^" G SEL
29 . S ECPAT=+Y_"^"_$P(Y,"^",2)
30 . S YY=Y,DFN=+Y,ECUP="" D 2^VADPT S Y=YY I +VADM(6) D I ECUP="^" Q
31 .. ;NOIS MWV-0603-21781: line below changed by VMP.
32 .. W !!,"WARNING "_"[PATIENT DIED ON "_$P(VADM(6),U,2)_"] ",!!
33 .. R "Press Return to Continue or ^ to Deselect: ",ECUP:DTIME
34 . S ^TMP("ECPLST",$J,($S('$O(^TMP("ECPLST",$J,0)):1,1:$O(^TMP("ECPLST",$J,""),-1)+1)))=+Y_"^"_$P(Y,"^",2)
35ASKPATQ Q $S((Y=-1)&($D(DUOUT)!$D(DTOUT)):-1,(Y=-1)&('$D(DUOUT))&('$D(DTOUT)):-2,1:1)
36 ;
37 ;
38ASKORD() ; Ask ordering section
39 ;
40 ; Input: None
41 ;
42 ; Output: Ordering Section ien if successful
43 ; 0 if not successful
44 ;
45 N DIR,DIRUT,Y,ECORD
46 S ECORD=0
47 S DIR(0)="721,11",DIR("A")="Ordering Section"
48 D ^DIR
49 I Y=""!($D(DIRUT)) G ASKORDQ
50 S ECORD=+Y
51ASKORDQ Q +ECORD
52 ;
53 ;
54PCEDAT(ECUNIT,ECSCR,ECPCE) ;get needed PCE data
55 ;
56 ; input
57 ; ECUNIT = ien of DSS unit in file #724 (required)
58 ; ECSCR = ien of event code screen in file #720.3 (required);
59 ; but may be null value
60 ; ECPCE = array, passed by reference (required)
61 ;
62 ; output
63 ; ECPCE("CLIN") = associated clinic ien in file #44^clinic name
64 ; ECPCE("DX") = ien in file #80^icd code
65 ; ECPCE("DXS",) = array of multiple secondary diagnosis, where
66 ; = ecpce("dxs",n)=v n=dx code and v=dx ien
67 ; ECPCE("AO") = agent orange indicator
68 ; ECPCE("IR") = ionizing radiation indicator
69 ; ECPCE("ENV") = environmental contaminants indicator
70 ; ECPCE("SC") = service connected indicator (Y/N)
71 ; ECPCE("MST") = military sexual trauma indicator (Y/N)
72 ; ECPCE("HNC") = head/neck cancer indicator (Y/N)
73 ; ECPCE("CV") = combat veteran indicator (Y/N
74 ;
75 ; returns
76 ; ECOUT = if normal user input, then "0"
77 ; if user times-out, then "1"
78 ; if user up-arrows out, then "2"
79 ;
80 N SEND,ECOUT,EC4,EC4N,ECPCL,ECPCID,ECPCRD
81 S ECOUT=0
82 S ECSCR=+$G(ECSCR)
83 S SEND=$P(^ECD(+ECUNIT,0),"^",14)
84 I SEND="" S SEND="N"
85 S ECPCE("CLIN")="",ECPCE("DX")="",ECPCE("AO")="",ECPCE("IR")=""
86 S ECPCE("ENV")="",ECPCE("SC")="",ECPCE("MST")="",ECPCE("HNC")=""
87 S ECPCE("CV")=""
88 K ECPCE("DXS")
89 I "AO"[SEND D
90 .;- Don't write message if Send to PCE = "O" and patient is an inpatient
91 .I SEND="A"!(SEND="O"&(ECPCE("I/O")="O")) D
92 ..W !!,?5,"Please Note: The following prompt(s) cannot be by-passed with"
93 ..W !,?5,"<cr>, since the data is sent to PCE for workload reporting."
94 ..W !,?5,"If data cannot be provided, respond with ""^"". This will"
95 ..W !,?5,"remove the current patient from the selected patient list.",!
96 .D CLINIC I $G(ECOUT) D MSGCLN Q
97 .D ASKDX I $G(ECOUT) D MSGDX Q
98 .D VISIT I $G(ECOUT) D CLMSG Q
99 I ECSCR,(ECPCE("CLIN")=""),('$G(ECOUT)) D
100 .Q:'$D(^ECJ(ECSCR))
101 .I ECUNIT'=$P($P(^ECJ(ECSCR,0),"^",1),"-",2) Q
102 .S EC4=$P($G(^ECJ(ECSCR,"PRO")),"^",4) I +EC4 D
103 ..S EC4N=$P($G(^SC(+EC4,0)),"^",1)
104 ..D CLIN(EC4,.ECPCL)
105 ..S:ECPCL ECPCE("CLIN")=EC4_"^"_EC4N
106 ..S:'ECPCL ECPCE("CLIN")=""
107 Q ECOUT
108 ;
109ASKDX ;ask dx
110 N ECDX,ECDXN,DTOUT,DUOUT,DIRUT,DIR,Y,EC4,ECDXS
111 S (ECDX,ECDXN)="",EC4=$P(ECPCE("CLIN"),U)
112 D PDX^ECUTL2 I ECOUT Q
113 S ECPCE("DX")=ECDX_"^"_ECDXN
114 D SDX^ECUTL2 I ECOUT Q
115 M ECPCE("DXS")=ECDXS
116 Q
117 ;
118CLINIC ;get associated clinic
119 N ECDATA,EC4,EC4N,ECID,ECPCL,DTOUT,DUOUT,DIRUT,DIR,Y
120 Q:SEND="O"&(ECPCE("I/O")'="O")
121 F D Q:$G(ECOUT) Q:$G(ECPCL)
122 .K DA,DIR,DIRUT,DTOUT,DUOUT
123 .S (EC4,ECPCL)=0,EC4N=""
124 .S DIR(0)="721,26",DIR("A")="Associated Clinic",DIR("?")="An active clinic is required. Enter an active clinic or an ^ to exit"
125 .D ^DIR
126 .S:$D(DTOUT) ECOUT=1 S:$D(DUOUT) ECOUT=2
127 .Q:$G(ECOUT)
128 .I 'Y W !!?5,"You must enter an active clinic now.",! Q
129 .I Y S EC4=+Y,ECDATA=$G(^SC(+EC4,0)),ECID=$P(ECDATA,"^",7),EC4N=$P(ECDATA,"^",1)
130 .I $G(EC4) D CLIN(EC4,.ECPCL) I 'ECPCL D
131 ..W !!,?5,"The clinic you selected is inactive."
132 ..W !,?5,"Workload data cannot be sent to PCE for Event"
133 ..W !,?5,"Capture procedures without an active clinic."
134 .I 'ECPCL W !!?5,"You must enter an active clinic now.",!
135 Q:'$G(ECPCL)
136 S ECPCE("CLIN")=EC4_"^"_EC4N
137 Q
138 ;
139 ;
140VISIT ;ask visit info
141 N ECFLG,ECCLFLDS,ECCLVAR,ECX,ECAO,ECIR,ECMST,ECMST,ECSC,ECZEC,ECHNC,ECCV
142 N ECMDT,ECY,ECMD,ECDT
143 Q:ECPCE("I/O")="I"
144 S (ECAO,ECIR,ECSC,ECZEC,ECX,ECMST,ECHNC,ECCV)="",ECY=0
145 F S ECY=$O(^TMP("ECMPIDX",$J,ECY)) Q:'ECY S ECMD=^(ECY) I $P(ECMD,U,2) D
146 .S ECMDT($P(ECMD,U,2))=""
147 S ECDT=$O(ECMDT(0)) ;use earliest date to evaluate classifications
148 ;
149 ;- Ask classification questions applicable to patient and file in #721
150 I $$ASKCLASS^ECUTL1(+$G(ECPAT),.ECCLFLDS,.ECOUT,SEND,ECPCE("I/O")),($O(ECCLFLDS(""))]"") D SETCLASS^ECUTL1(.ECCLFLDS)
151 Q:+$G(ECOUT)
152 ;
153 ;- Store classification variables into ECPCE array
154 F ECCLVAR="ECAO","ECIR","ECZEC","ECSC","ECMST","ECHNC","ECCV" I @($G(ECCLVAR))]"" S ECPCE($S($E(ECCLVAR,3,$L(ECCLVAR))'="ZEC":$E(ECCLVAR,3,$L(ECCLVAR)),1:"ENV"))=@ECCLVAR
155 Q
156 ;
157 ;
158CLIN(EC4,ECPCL) ;check for active associated clinic
159 N ECPCID,ECPCRD
160 D CLIN^ECPCEU
161 Q
162 ;
163 ;
164MSGDX ;if ecout & essential data missing, display msg
165 Q:SEND="N" Q:SEND="O"&(ECPCE("I/O")'="O")
166 I ECPCE("DX")="" D Q
167 .W !!,?5,"Please note that data cannot be sent to PCE"
168 .W !,?5,"for workload reporting without an ICD-9 code.",!
169 .D MSG1
170 Q
171 ;
172MSGCLN ;if ecout & essential data missing, display msg
173 Q:SEND="N" Q:SEND="O"&(ECPCE("I/O")'="O")
174 I ECPCE("CLIN")="" D Q
175 .W !!,?5,"Please note that data cannot be sent to PCE for workload"
176 .W !,?5,"reporting without an active associated clinic.",!
177 .D MSG1
178 Q
179 ;
180CLMSG ; Display classification questions error message
181 Q:SEND="N" Q:ECPCE("I/O")'="O"
182 W !!,?5,"Please note that data cannot be sent to PCE for workload reporting"
183 W !,?5,"unless the classification questions are answered.",!
184 D MSG1
185 Q
186 ;
187 ;
188MSG1 ;Error message display
189 N DIR,Y
190 S DIR(0)="E",DIR("A")="Press RETURN to continue"
191 D ^DIR
192 W !
193 Q
194 ;
195 ;
196INOUT(ECPTIEN,ECARRY) ; Determine inpatient/outpatient status
197 ;
198 N ECOUT
199 S ECOUT=0
200 S ECARRY=$G(ECARRY)
201 S ECPTIEN=+$G(ECPTIEN)
202 ;
203 ; - If ECARRY not defined, use ^TMP("ECMPIDX",$J)
204 S:(ECARRY="") ECARRY="^TMP(""ECMPIDX"",$J)"
205 ;
206 S ECPCE("I/O")=$$INOUTPT^ECUTL0(ECPTIEN,+$P(@ECARRY@(+$O(@ECARRY@(""),-1)),"^",2))
207 I ECPCE("I/O")="" D INOUTERR^ECUTL0
208 Q $S(+$G(ECOUT)=0:1,1:0)
209 ;
210 ;
211ASKELIG(ECDSS,ECIO,ECPTIEN) ; Determine patient eligibility
212 ;
213 ; Input:
214 ; ECDSS - DSS Unit IEN
215 ; ECIO - Inpatient or Outpatient
216 ; ECPTIEN - DFN of Patient file (#2)
217 ;
218 ; Output:
219 ; ECPCE("ELIG") - containing patient eligibility
220 ;
221 N VAEL
222 S ECDSS=+$G(ECDSS)
223 S ECIO=$G(ECIO)
224 S ECPTIEN=+$G(ECPTIEN)
225 ;
226 ;- Get elig if Send to PCE="A" or Send to PCE="O" and outpatient
227 I $$CHKDSS^ECUTL0(+$G(ECDSS),ECIO) D
228 . ;
229 . ;- If dual elig, ask user to select otherwise use primary elig
230 . I $$MULTELG^ECUTL0(+$G(ECPTIEN)) S ECPCE("ELIG")=+$$ELGLST^ECUTL0
231 . E S ECPCE("ELIG")=+$G(VAEL(1))
232 Q
233 ;
234REMOVE(ECPAT) ; Remove patient from selected patient list because required data missing
235 N DFN,ECI
236 S DFN=+ECPAT,ECI=0
237 F S ECI=$O(^TMP("ECPLST",$J,ECI)) Q:'ECI D
238 .I +$G(^TMP("ECPLST",$J,ECI))=DFN D
239 ..K ^TMP("ECPLST",$J,ECI),^TMP("ECMPTIDX",$J,ECI),^TMP("ECPAT",$J,DFN)
240 ..W !?5,"Patient deselected because required data missing.",!
241 ..D MSG1
242 Q
Note: See TracBrowser for help on using the repository browser.