| [613] | 1 | ECMUTL1 ;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 |  ;
 | 
|---|
 | 5 | ASKPAT(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
 | 
|---|
 | 14 | SEL ;
 | 
|---|
 | 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)
 | 
|---|
 | 35 | ASKPATQ Q $S((Y=-1)&($D(DUOUT)!$D(DTOUT)):-1,(Y=-1)&('$D(DUOUT))&('$D(DTOUT)):-2,1:1)
 | 
|---|
 | 36 |  ;
 | 
|---|
 | 37 |  ;
 | 
|---|
 | 38 | ASKORD() ; 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
 | 
|---|
 | 51 | ASKORDQ Q +ECORD
 | 
|---|
 | 52 |  ;
 | 
|---|
 | 53 |  ;
 | 
|---|
 | 54 | PCEDAT(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 |  ;
 | 
|---|
 | 109 | ASKDX ;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 |  ;
 | 
|---|
 | 118 | CLINIC ;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 |  ;
 | 
|---|
 | 140 | VISIT ;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 |  ;
 | 
|---|
 | 158 | CLIN(EC4,ECPCL) ;check for active associated clinic
 | 
|---|
 | 159 |  N ECPCID,ECPCRD
 | 
|---|
 | 160 |  D CLIN^ECPCEU
 | 
|---|
 | 161 |  Q
 | 
|---|
 | 162 |  ;
 | 
|---|
 | 163 |  ;
 | 
|---|
 | 164 | MSGDX ;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 |  ;
 | 
|---|
 | 172 | MSGCLN ;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 |  ;
 | 
|---|
 | 180 | CLMSG ; 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 |  ;
 | 
|---|
 | 188 | MSG1 ;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 |  ;
 | 
|---|
 | 196 | INOUT(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 |  ;
 | 
|---|
 | 211 | ASKELIG(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 |  ;
 | 
|---|
 | 234 | REMOVE(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
 | 
|---|