| 1 | ECUTL1 ;ALB/ESD - Event Capture Classification Utilities ;19 May 98 | 
|---|
| 2 | ;;2.0; EVENT CAPTURE ;**10,13,17,42,54**;8 May 96 | 
|---|
| 3 | ; | 
|---|
| 4 | ASKCLASS(DFN,ECANS,ERR,ECTOPCE,ECPATST,ECHDA) ;  Ask classification questions (Agent Orange, Ionizing Radiation, Environmental Contaminants, Service Conn) | 
|---|
| 5 | ; | 
|---|
| 6 | ;   Input: | 
|---|
| 7 | ;      DFN     - IEN of Patient file (#2) | 
|---|
| 8 | ;      ECTOPCE - Variable which indicates if DSS Unit is sending to PCE | 
|---|
| 9 | ;      ECPATST - Inpatient/outpatient status | 
|---|
| 10 | ;      ECHDA   - IEN in file #721 if editing existing record [optional] | 
|---|
| 11 | ; | 
|---|
| 12 | ;  Output: | 
|---|
| 13 | ;      ECANS - array subscripted by classification abbreviation | 
|---|
| 14 | ;              (i.e. ECANS("AO")) and passed by reference containing: | 
|---|
| 15 | ;                 field # of class from EC Patient file (#721)^answer | 
|---|
| 16 | ;      ERR   - Error indicator if user uparrows or times out (set to 1) | 
|---|
| 17 | ; | 
|---|
| 18 | ;      Function value - 1 if successful, 0 otherwise | 
|---|
| 19 | ; | 
|---|
| 20 | N ANS,DIR,ECCL,ECCLFLD,SUCCESS,ECVST,ECVSTDT,ECPXB,PXBDATA,ECNT,ECOLD,ECPIECE,ECXX | 
|---|
| 21 | S (ECANS,ECCL)="" | 
|---|
| 22 | S ERR=0 | 
|---|
| 23 | S SUCCESS=1 | 
|---|
| 24 | S DFN=+$G(DFN) | 
|---|
| 25 | S ECTOPCE=$G(ECTOPCE) | 
|---|
| 26 | I ECTOPCE["~" S ECTOPCE=$P(ECTOPCE,"~",2) | 
|---|
| 27 | S ECPATST=$G(ECPATST) | 
|---|
| 28 | ;- Drop out if invalid condition found OR if DSS Unit not sending to | 
|---|
| 29 | ;  PCE or patient is an inpatient | 
|---|
| 30 | I ('DFN)!(ECTOPCE="")!(ECPATST="")!(ECTOPCE="N")!(ECPATST="I") S SUCCESS=0 Q SUCCESS | 
|---|
| 31 | D NOW^%DTC S ECVSTDT=$S(+$G(ECDT):ECDT,1:%),ECVST="" ;modified to use event date;JAM/11/24/03 | 
|---|
| 32 | ;- If editing an existing record, get visit data & display classification | 
|---|
| 33 | I $G(ECHDA) D | 
|---|
| 34 | .S ECVSTDT=$P($G(^ECH(ECHDA,0)),U,3) | 
|---|
| 35 | .S ECVST=$P($G(^ECH(ECHDA,0)),U,21) | 
|---|
| 36 | .F ECCL="AO","IR","EC","SC","MST","HNC","CV" D | 
|---|
| 37 | ..S ECCLFLD=$S(ECCL="AO":"Agent Orange",ECCL="IR":"Ionizing Radiation",ECCL="EC":"Environmental Contaminants",ECCL="SC":"Service Connected",ECCL="HNC":"Head/Neck Cancer",ECCL="CV":"Combat Veteran",1:"Military Sexual Trauma") | 
|---|
| 38 | ..S ECPIECE=$S(ECCL="AO":3,ECCL="IR":4,ECCL="EC":5,ECCL="SC":6,ECCL="MST":9,ECCL="HNC":10,1:11) | 
|---|
| 39 | ..S ECXX=$P($G(^ECH(ECHDA,"P")),U,ECPIECE),ECXX=$S(ECXX="Y":"YES",ECXX="N":"NO",1:"") | 
|---|
| 40 | ..I ECXX]"" S ECOLD(ECCL)=ECCLFLD_": "_ECXX | 
|---|
| 41 | .I $D(ECOLD) D | 
|---|
| 42 | ..W !,"*** Current encounter classification ***",! | 
|---|
| 43 | ..F ECCL="SC","CV","AO","IR","EC","MST","HNC" D | 
|---|
| 44 | ...I $D(ECOLD(ECCL)) W !?4,ECOLD(ECCL) | 
|---|
| 45 | ;- Ask user classification question | 
|---|
| 46 | D CLASS^PXBAPI21("",DFN,ECVSTDT,1,ECVST) W ! | 
|---|
| 47 | ;- Check error; exit if error condition | 
|---|
| 48 | I $D(PXBDATA("ERR")) D  I ERR S SUCCESS=0 Q SUCCESS | 
|---|
| 49 | .F ECPXB=1:1:4 I $D(PXBDATA("ERR",ECPXB)) D | 
|---|
| 50 | ..I (PXBDATA("ERR",ECPXB)=1)!(PXBDATA("ERR",ECPXB)=4) S ERR=1 | 
|---|
| 51 | ;- Otherwise, continue to setup ecans array, i.e., new classification data | 
|---|
| 52 | F ECCL="AO","IR","SC","EC","MST","HNC","CV" D | 
|---|
| 53 | .S ECCLFLD=$S(ECCL="AO":21,ECCL="IR":22,ECCL="EC":23,ECCL="SC":24,ECCL="MST":35,ECCL="HNC":39,1:40) | 
|---|
| 54 | .S ECPXB=$S(ECCL="AO":1,ECCL="IR":2,ECCL="EC":4,ECCL="SC":3,ECCL="MST":5,ECCL="CV":7,1:6) | 
|---|
| 55 | .S ANS=$P($G(PXBDATA(ECPXB)),U,2),ANS=$S(ANS=1:"Y",ANS=0:"N",1:"") | 
|---|
| 56 | .S ECANS(ECCL)=ECCLFLD_"^"_ANS | 
|---|
| 57 | ;- Delete old data if it exists | 
|---|
| 58 | I $G(ECHDA) D DELCLASS(ECHDA) | 
|---|
| 59 | Q SUCCESS | 
|---|
| 60 | ; | 
|---|
| 61 | ; | 
|---|
| 62 | EDCLASS(ECIEN,ECANS) ;  Edit classifications fields in EC Patient | 
|---|
| 63 | ;                  file (#721) | 
|---|
| 64 | ; | 
|---|
| 65 | ;   Input: | 
|---|
| 66 | ;      ECIEN - EC Patient record (#721) IEN | 
|---|
| 67 | ;      ECANS - Array of answers to classification questions asked | 
|---|
| 68 | ; | 
|---|
| 69 | ;  Output: | 
|---|
| 70 | ;      Classification fields 21,22,23,24,35,39,40 edited in file #721 | 
|---|
| 71 | ; | 
|---|
| 72 | N DA,DIE,DR,ECCL | 
|---|
| 73 | S (DR,ECCL)="" | 
|---|
| 74 | ; | 
|---|
| 75 | ;- Drops out if invalid condition found | 
|---|
| 76 | D | 
|---|
| 77 | . I '$G(ECIEN)!('$D(ECANS)) Q | 
|---|
| 78 | . ; | 
|---|
| 79 | . ;- Lock main node | 
|---|
| 80 | . I '$$LOCK(ECIEN) Q | 
|---|
| 81 | . S DA=ECIEN | 
|---|
| 82 | . S DIE="^ECH(" | 
|---|
| 83 | . ; | 
|---|
| 84 | . ;- Edit classification fields (AO, IR, EC, SC, MST, HNC, CV) | 
|---|
| 85 | . F  S ECCL=$O(ECANS(ECCL)) Q:ECCL=""  S DR=DR_+$P($G(ECANS(ECCL)),"^")_"////"_$P($G(ECANS(ECCL)),"^",2)_";" | 
|---|
| 86 | . ; | 
|---|
| 87 | . ;- Remove last ";" from DR string before editing | 
|---|
| 88 | . S DR=$E(DR,1,($L(DR)-1)) | 
|---|
| 89 | . D ^DIE | 
|---|
| 90 | ; | 
|---|
| 91 | ;- Unlock main node | 
|---|
| 92 | D UNLOCK(ECIEN) | 
|---|
| 93 | ; | 
|---|
| 94 | Q | 
|---|
| 95 | ; | 
|---|
| 96 | ; | 
|---|
| 97 | SETCLASS(ECANS) ;  Set answers to classification questions in EC variables | 
|---|
| 98 | ;          (used in EC data entry options when filing EC Patient record) | 
|---|
| 99 | ; | 
|---|
| 100 | ;   Input: | 
|---|
| 101 | ;      ECANS - array of answers to class questions asked containing: | 
|---|
| 102 | ;                 field number of class ques from file #721^answer | 
|---|
| 103 | ; | 
|---|
| 104 | ;  Output: | 
|---|
| 105 | ;      EC classification var - ECAO,ECIR,ECZEC,ECSC,ECMST,ECHNC,ECCV | 
|---|
| 106 | ; | 
|---|
| 107 | N ECCL,ECCLFLD | 
|---|
| 108 | S (ECCL,ECAO,ECIR,ECZEC,ECSC,ECMST,ECHNC,ECCV)="" | 
|---|
| 109 | ; | 
|---|
| 110 | ;- Drops out if invalid condition found | 
|---|
| 111 | D | 
|---|
| 112 | . ; | 
|---|
| 113 | . ;- If array containing class flds^answers is not created, exit | 
|---|
| 114 | . I '$D(ECANS) Q | 
|---|
| 115 | . F  S ECCL=$O(ECANS(ECCL)) Q:ECCL=""  D | 
|---|
| 116 | .. ; | 
|---|
| 117 | .. ;- Get field number of classification | 
|---|
| 118 | .. S ECCLFLD=+$P($G(ECANS(ECCL)),"^") | 
|---|
| 119 | .. ; | 
|---|
| 120 | .. ;- Agent Orange variable | 
|---|
| 121 | .. S:ECCLFLD=21 ECAO=$P(ECANS(ECCL),"^",2) | 
|---|
| 122 | .. ; | 
|---|
| 123 | .. ;- Ionizing Radiation variable | 
|---|
| 124 | .. S:ECCLFLD=22 ECIR=$P(ECANS(ECCL),"^",2) | 
|---|
| 125 | .. ; | 
|---|
| 126 | .. ;- Environmental Contaminants variable | 
|---|
| 127 | .. S:ECCLFLD=23 ECZEC=$P(ECANS(ECCL),"^",2) | 
|---|
| 128 | .. ; | 
|---|
| 129 | .. ;- Service Connected variable | 
|---|
| 130 | .. S:ECCLFLD=24 ECSC=$P(ECANS(ECCL),"^",2) | 
|---|
| 131 | .. ; | 
|---|
| 132 | .. ;- Military Sexual Trauma variable | 
|---|
| 133 | .. S:ECCLFLD=35 ECMST=$P(ECANS(ECCL),"^",2) | 
|---|
| 134 | .. ; | 
|---|
| 135 | .. ;- Head/Neck Cancer | 
|---|
| 136 | .. S:ECCLFLD=39 ECHNC=$P(ECANS(ECCL),"^",2) | 
|---|
| 137 | .. ; | 
|---|
| 138 | .. ;- Combat Veteran | 
|---|
| 139 | .. S:ECCLFLD=40 ECCV=$P(ECANS(ECCL),"^",2) | 
|---|
| 140 | Q | 
|---|
| 141 | ; | 
|---|
| 142 | ; | 
|---|
| 143 | DELCLASS(ECIEN) ;  Delete classification fields in EC Patient file (#721) | 
|---|
| 144 | ; | 
|---|
| 145 | ;   Input: | 
|---|
| 146 | ;      ECIEN - EC Patient record (#721) IEN | 
|---|
| 147 | ; | 
|---|
| 148 | ;  Output: | 
|---|
| 149 | ;      Classification fields 21,22,23,24,35,39,40 deleted in file #721 | 
|---|
| 150 | ; | 
|---|
| 151 | N DA,DIE,DR,ECCL | 
|---|
| 152 | S DR="" | 
|---|
| 153 | ; | 
|---|
| 154 | ;- Drops out if invalid condition found | 
|---|
| 155 | D | 
|---|
| 156 | . I '$G(ECIEN) Q | 
|---|
| 157 | . ; | 
|---|
| 158 | . ;- Lock main node | 
|---|
| 159 | . I '$$LOCK(ECIEN) Q | 
|---|
| 160 | . S DA=ECIEN | 
|---|
| 161 | . S DIE="^ECH(" | 
|---|
| 162 | . ; | 
|---|
| 163 | . ;- Delete classification fields (AO, IR, EC, SC, MST, HNC, CV) | 
|---|
| 164 | . F ECCL=21:1:24,35,39,40 S DR=DR_ECCL_"////@;" | 
|---|
| 165 | . ; | 
|---|
| 166 | . ;- Remove last ";" from DR string before editing | 
|---|
| 167 | . S DR=$E(DR,1,($L(DR)-1)) | 
|---|
| 168 | . D ^DIE | 
|---|
| 169 | ; | 
|---|
| 170 | ;- Unlock main node | 
|---|
| 171 | D UNLOCK(ECIEN) | 
|---|
| 172 | ; | 
|---|
| 173 | Q | 
|---|
| 174 | ; | 
|---|
| 175 | ; | 
|---|
| 176 | LOCK(ECIEN) ;  Lock EC Patient record | 
|---|
| 177 | ; | 
|---|
| 178 | ;   Input: | 
|---|
| 179 | ;      ECIEN - EC Patient record IEN | 
|---|
| 180 | ; | 
|---|
| 181 | ;  Output: | 
|---|
| 182 | ;      Function Value - 1 if record can be locked, 0 otherwise | 
|---|
| 183 | ; | 
|---|
| 184 | I $G(ECIEN) L +^ECH(ECIEN):5 | 
|---|
| 185 | Q $T | 
|---|
| 186 | ; | 
|---|
| 187 | ; | 
|---|
| 188 | UNLOCK(ECIEN) ;  Unlock EC Patient record | 
|---|
| 189 | ; | 
|---|
| 190 | ;   Input: | 
|---|
| 191 | ;      ECIEN - EC Patient record IEN | 
|---|
| 192 | ; | 
|---|
| 193 | ;  Output: | 
|---|
| 194 | ;      EC Patient record unlocked | 
|---|
| 195 | ; | 
|---|
| 196 | I $G(ECIEN) L -^ECH(ECIEN) | 
|---|
| 197 | Q | 
|---|