| 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
 | 
|---|