| 1 | ECMUTL ;ALB/ESD - Utilities for Multiple Dates/Mult Procs ;20 AUG 1997 13:56
 | 
|---|
| 2 |  ;;2.0; EVENT CAPTURE ;**5,10,18,33,47,63**;8 May 96
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | ASKLOC() ; Get Location
 | 
|---|
| 5 |  ;   Input:      None
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 |  ;  Output:      ECL = Location (Division file pointer) ien
 | 
|---|
| 8 |  ;              ECLN = Location name
 | 
|---|
| 9 |  ;
 | 
|---|
| 10 |  D ^ECL
 | 
|---|
| 11 |  K ECOUT,LOC
 | 
|---|
| 12 |  Q $S($D(ECL):1,1:0)
 | 
|---|
| 13 |  ;
 | 
|---|
| 14 |  ;
 | 
|---|
| 15 | ASKPRDT(DSSU,ONE) ; Get Procedure Start Date/Time
 | 
|---|
| 16 |  ;   Input:      ECD = DSS Unit ien
 | 
|---|
| 17 |  ;               ONE = Ask procedure start date/time once
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 |  ;  Output:   ^TMP("ECPRDT",$J) = procedure date/time array
 | 
|---|
| 20 |  ;
 | 
|---|
| 21 |  N DTOUT,DUOUT,ECCNT,ECDUP,ECERR
 | 
|---|
| 22 |  S (ECCNT,ECDUP,ECERR)=0
 | 
|---|
| 23 |  I '$G(DSSU) G ASKPRDTQ
 | 
|---|
| 24 |  I $P($G(^ECD(DSSU,0)),"^",12)="N" S DIR("B")="NOW"
 | 
|---|
| 25 | AGAIN N DIRUT,Y
 | 
|---|
| 26 |  S DIR("A")="Select "_$S(+ECDUP:"Another Procedure Date and Time",1:"Procedure Date and Time")
 | 
|---|
| 27 |  S DIR("?")="Enter both date AND time procedure was performed. Future dates are not allowed."
 | 
|---|
| 28 |  S DIR(0)="DO^:NOW:EXR"
 | 
|---|
| 29 |  D ^DIR K DIR
 | 
|---|
| 30 |  I $D(DTOUT)!($D(DUOUT)) S ECERR=1
 | 
|---|
| 31 |  I +Y S ECDUP=1,^TMP("ECPRDT",$J,Y)="" G @($S('$G(ONE):"AGAIN",1:"ASKPRDTQ"))
 | 
|---|
| 32 |  ;
 | 
|---|
| 33 | ASKPRDTQ Q $S(ECERR:0,(+$G(ONE)&(+Y)):1,('$G(ONE))&($D(^TMP("ECPRDT",$J))):1,1:0)
 | 
|---|
| 34 |  ;
 | 
|---|
| 35 |  ;
 | 
|---|
| 36 | ASKCAT(ECL,ECD) ; Get category
 | 
|---|
| 37 |  ;   Input:      ECL = Location ien
 | 
|---|
| 38 |  ;               ECD = DSS Unit ien
 | 
|---|
| 39 |  ;
 | 
|---|
| 40 |  ;  Output:   ECATEG = Category ien (may be 0 if no categories)
 | 
|---|
| 41 |  ;
 | 
|---|
| 42 |  N CATS,DIRUT,ECATEG,ECMAX,X
 | 
|---|
| 43 |  S ECATEG=0_"^No Categories",(ECMAX,X)=0
 | 
|---|
| 44 |  I '$G(ECL)!('$G(ECD)) G ASKCATQ
 | 
|---|
| 45 |  D CATS^ECHECK1
 | 
|---|
| 46 |  I $O(ECC(0))']"" G ASKCATQ
 | 
|---|
| 47 |  W !!,"Categories within "_$P($G(^ECD(+ECD,0)),"^")_":",!
 | 
|---|
| 48 |  F  S X=$O(ECC(X)) Q:'X  W !?5,X_". ",$P(ECC(X),"^",2) S ECMAX=X
 | 
|---|
| 49 |  W ! S DIR(0)="NA^1:"_ECMAX,DIR("A")="Select Number: "
 | 
|---|
| 50 |  D ^DIR K DIR
 | 
|---|
| 51 |  I 'Y!($D(DIRUT)) K ECATEG G ASKCATQ
 | 
|---|
| 52 |  I +Y S ECATEG=$G(ECC(Y))
 | 
|---|
| 53 | ASKCATQ K CNT,ECAT,ECC
 | 
|---|
| 54 |  Q $G(ECATEG)
 | 
|---|
| 55 |  ;
 | 
|---|
| 56 |  ;
 | 
|---|
| 57 | ASKPRO(ECL,ECD,ECC,NUM) ; Ask procedures
 | 
|---|
| 58 |  ;   Input:      ECL = Location ien
 | 
|---|
| 59 |  ;               ECD = DSS Unit ien
 | 
|---|
| 60 |  ;               ECC = Category ien
 | 
|---|
| 61 |  ;               NUM = Only ask procedure once
 | 
|---|
| 62 |  ;
 | 
|---|
| 63 |  ;  Output:  ^TMP("ECPROC",$J) = procedure array
 | 
|---|
| 64 |  ;
 | 
|---|
| 65 |  N CNT,ECERR,ECOUNT,ECOUT,ECPCNT,ECP,ECPNM,ECPREV,ECREAS,ECVOLU,ECEXIT
 | 
|---|
| 66 |  N ECX,ECMOD,ECMODS,ECCPT,ECDT
 | 
|---|
| 67 |  I '$D(ECL)!('$D(ECD)) G ASKPROQ
 | 
|---|
| 68 |  S ECC=+$G(ECC)
 | 
|---|
| 69 |  S ECOUNT=0
 | 
|---|
| 70 |  S ECDT=$O(^TMP("ECPRDT",$J,0))
 | 
|---|
| 71 |  D PROS^ECHECK1
 | 
|---|
| 72 |  I '$O(^TMP("ECPRO",$J,0)) D  G ASKPROQ
 | 
|---|
| 73 |  . W !!,"Within the ",ECLN," location there are no procedures defined",!
 | 
|---|
| 74 |  . W "for the DSS Unit ",$P(ECDSSU,"^",2),".",!
 | 
|---|
| 75 |  . S DIR(0)="E" D ^DIR K DIR,Y
 | 
|---|
| 76 |  ;
 | 
|---|
| 77 | SEL ;
 | 
|---|
| 78 |  K ECPNAME,ECMOD
 | 
|---|
| 79 |  S (ECPNM,ECPREV,ECREAS,ECX)="",(CNT,ECPCNT,ECP,ECVOLU,ECEXIT)=0
 | 
|---|
| 80 |  S DIR("?")="^D LISTPR^ECMUTL"
 | 
|---|
| 81 |  W ! S ECX=$$GETPRO^ECDSUTIL
 | 
|---|
| 82 |  I +$G(ECX)=-1,('ECOUNT) D MSG^ECBEN2U,KILLV^ECDSUTIL G ASKPROQ
 | 
|---|
| 83 |  I +$G(ECX)=-1,ECOUNT G ASKPROQ
 | 
|---|
| 84 |  I +$G(ECX)=1 S ECPREV=$P(ECX,"^",2) D SRCHTM^ECDSUTIL(ECX)
 | 
|---|
| 85 |  S ECPCNT=+$G(ECPCNT)
 | 
|---|
| 86 |  I ECPCNT=-1!(ECPCNT=-2) D  G SEL
 | 
|---|
| 87 |  . D @($S(ECPCNT=-1:"ERRMSG^ECDSUTIL",ECPCNT=-2:"ERRMSG2^ECDSUTIL"))
 | 
|---|
| 88 |  . D KILLV^ECDSUTIL
 | 
|---|
| 89 |  I ECPCNT>0 D  D CONTINU G:$G(ECERR) ASKPROQ
 | 
|---|
| 90 |  . S CNT=ECPCNT
 | 
|---|
| 91 |  . I ECPREV="L" W $P($G(^TMP("ECPRO",$J,+$G(^TMP("ECLKUP",$J,"LAST")))),"^",4)
 | 
|---|
| 92 |  . I ECPREV="X"!(ECPREV="N") W "   "_$P($G(^TMP("ECPRO",$J,+CNT)),"^",4)
 | 
|---|
| 93 |  I 'ECPCNT,$D(ECPNAME) D  G:CNT=-1!($G(ECERR)) ASKPROQ
 | 
|---|
| 94 |  . S CNT=$$PRLST^ECDSUTIL
 | 
|---|
| 95 |  . I CNT=-1 D MSG^ECBEN2U,KILLV^ECDSUTIL Q
 | 
|---|
| 96 |  . I CNT>0 D
 | 
|---|
| 97 |  .. W "   "_$S(ECPREV="S":$P($G(^TMP("ECPRO",$J,+CNT)),"^",3),1:$P($G(^TMP("ECPRO",$J,+CNT)),"^",4))
 | 
|---|
| 98 |  .. D CONTINU
 | 
|---|
| 99 |  ;
 | 
|---|
| 100 |  I CNT>0,($G(ECP)'=""),(ECVOLU>0) D
 | 
|---|
| 101 |  . S ECOUNT=$S(+$G(NUM)=-99:1,+$G(NUM)>0:NUM,1:(ECOUNT+1))
 | 
|---|
| 102 |  . S ^TMP("ECPROC",$J,(ECOUNT))=ECP_"^"_ECPNM_"^"_+ECREAS_"^"_$S(+ECREAS:$P($G(^ECR($P($G(^ECL(+ECREAS,0)),"^"),0)),"^"),1:"Reason Not Defined")_"^"_ECVOLU
 | 
|---|
| 103 |  . S ECCPT=$S(ECP["EC":$P($G(^EC(725,+ECP,0)),"^",5),1:+ECP)
 | 
|---|
| 104 |  . I ECCPT'="",$O(ECMOD(ECCPT,""))'="" D
 | 
|---|
| 105 |  . . M ^TMP("ECPROC",$J,ECOUNT,"MOD")=ECMOD(ECCPT)
 | 
|---|
| 106 |  I '$G(NUM) G SEL
 | 
|---|
| 107 | ASKPROQ K ^TMP("ECPRO",$J),^TMP("ECLKUP",$J),JJ,OK
 | 
|---|
| 108 |  D KILLV^ECDSUTIL
 | 
|---|
| 109 |  Q
 | 
|---|
| 110 |  ;
 | 
|---|
| 111 | CONTINU ;
 | 
|---|
| 112 |  D SETP
 | 
|---|
| 113 |  S ECCPT=$S(ECP["EC":$P($G(^EC(725,+ECP,0)),"^",5),1:+ECP)
 | 
|---|
| 114 |  I ECCPT'="" D  I $G(ECERR) G CONTINUQ
 | 
|---|
| 115 |  . S ECMODS=$G(ECMODS)
 | 
|---|
| 116 |  . S ECMODF=$$ASKMOD^ECUTL(ECCPT,ECMODS,ECDT,.ECMOD,.ECERR)
 | 
|---|
| 117 |  . K ECMODF,ECMODS
 | 
|---|
| 118 |  S ECREAS=$$ASKREAS(ECL,ECD,ECC,ECP,.ECERR)
 | 
|---|
| 119 |  G:$G(ECERR) CONTINUQ
 | 
|---|
| 120 |  S ECVOLU=$$ASKVOL(ECL,ECD,ECC,ECP,.ECERR)
 | 
|---|
| 121 | CONTINUQ Q
 | 
|---|
| 122 |  ;
 | 
|---|
| 123 | SETP ;
 | 
|---|
| 124 |  S ^TMP("ECLKUP",$J,"LAST")=CNT
 | 
|---|
| 125 |  S ECP=$P($G(^TMP("ECPRO",$J,CNT)),"^"),ECPNM=$P($G(^TMP("ECPRO",$J,CNT)),"^",4)
 | 
|---|
| 126 |  Q
 | 
|---|
| 127 |  ;
 | 
|---|
| 128 | LISTPR ;- List available procedures
 | 
|---|
| 129 |  ;   Input:        None
 | 
|---|
| 130 |  ;
 | 
|---|
| 131 |  ;  Output:        None (display on screen)
 | 
|---|
| 132 |  ;
 | 
|---|
| 133 |  N DIR,DIRUT,ECI,Y
 | 
|---|
| 134 |  S ECI=0
 | 
|---|
| 135 |  D PROCHDR
 | 
|---|
| 136 |  F   S ECI=$O(^TMP("ECPRO",$J,ECI)) Q:'ECI!(ECEXIT)  D
 | 
|---|
| 137 |  . I ($Y+5>IOSL) S DIR(0)="E" D ^DIR S:'Y!$D(DIRUT) ECEXIT=1 I +Y D PROCHDR
 | 
|---|
| 138 |  . Q:ECEXIT
 | 
|---|
| 139 |  . W !,ECI_".",?5,$E($P(^TMP("ECPRO",$J,ECI),"^",4),1,30),?38,$E($P(^(ECI),"^",3),1,30),?72,$P(^(ECI),"^",5)
 | 
|---|
| 140 |  Q:ECEXIT
 | 
|---|
| 141 |  W !!?5,"Select by number, CPT or national code, procedure name, or synonym.",!?5,"Synonym must be preceded by the & character  (example:  &TESTSYN).",!
 | 
|---|
| 142 |  W ?2,"** Modifier(s) can be appended to a CPT code (ex: CPT code-mod1,mod2,mod3) **",!
 | 
|---|
| 143 | LISTPRQ Q
 | 
|---|
| 144 |  ;
 | 
|---|
| 145 | PROCHDR ;- Procedure display header
 | 
|---|
| 146 |  ;
 | 
|---|
| 147 |  W @IOF
 | 
|---|
| 148 |  W !,"Available Procedures within "_$P(ECDSSU,"^",2)_": ",!
 | 
|---|
| 149 |  W ?72,"National",!,?5,"Procedure Name",?40,"Synonym",?72,"Number",!
 | 
|---|
| 150 |  Q
 | 
|---|
| 151 |  ;
 | 
|---|
| 152 |  ;
 | 
|---|
| 153 | ASKREAS(ECL,ECD,ECC,ECP,ECOUT) ;-Ask procedure reason
 | 
|---|
| 154 |  ;   Input:      ECL = Location ien
 | 
|---|
| 155 |  ;               ECD = DSS Unit ien
 | 
|---|
| 156 |  ;               ECC = Category ien
 | 
|---|
| 157 |  ;               ECP = Procedure ien
 | 
|---|
| 158 |  ;
 | 
|---|
| 159 |  ;  Output:  ECPRPTR = Link file ien (from file #720.5)
 | 
|---|
| 160 |  ;             ECOUT = 0 if successful
 | 
|---|
| 161 |  ;                     1 if uparrowed or timed out
 | 
|---|
| 162 |  ;                     (passed by reference)
 | 
|---|
| 163 |  ;
 | 
|---|
| 164 |  N DTOUT,DUOUT,ECPRPTR,ECSCR
 | 
|---|
| 165 |  S (ECOUT,ECPRPTR,ECSCR)=0
 | 
|---|
| 166 |  S ECC=+$G(ECC)
 | 
|---|
| 167 |  I '$D(ECL)!('$D(ECD))!('$D(ECP)) G ASKREASQ
 | 
|---|
| 168 |  I $G(ECP)]"" S ECSCR=+$O(^ECJ("AP",+ECL,+ECD,+ECC,ECP,0))
 | 
|---|
| 169 |  I ECSCR>0,(+$P($G(^ECJ(ECSCR,"PRO")),"^",5)),(+$O(^ECL("AD",ECSCR,0))) D
 | 
|---|
| 170 |  . S DIC="^ECL(",DIC(0)="QEAM"
 | 
|---|
| 171 |  . S DIC("A")="Procedure Reason: ",DIC("S")="I $P(^(0),U,2)=ECSCR"
 | 
|---|
| 172 |  . D ^DIC K DIC
 | 
|---|
| 173 |  . I +Y>0 S ECPRPTR=+Y
 | 
|---|
| 174 |  . I $D(DTOUT)!($D(DUOUT)) S ECOUT=1
 | 
|---|
| 175 | ASKREASQ Q +ECPRPTR
 | 
|---|
| 176 |  ;
 | 
|---|
| 177 |  ;
 | 
|---|
| 178 | ASKVOL(ECL,ECD,ECC,ECP,ECOUT) ;- Ask procedure volume
 | 
|---|
| 179 |  ;   Input:    ECL = Location ien
 | 
|---|
| 180 |  ;             ECD = DSS Unit ien
 | 
|---|
| 181 |  ;             ECC = Category ien
 | 
|---|
| 182 |  ;             ECP = Procedure ien
 | 
|---|
| 183 |  ;
 | 
|---|
| 184 |  ;  Output:  ECVOL = volume
 | 
|---|
| 185 |  ;           ECOUT = 0 if successful
 | 
|---|
| 186 |  ;                   1 if uparrowed or timed out
 | 
|---|
| 187 |  ;                   (passed by reference)
 | 
|---|
| 188 |  ;
 | 
|---|
| 189 |  N DIR,DIRUT,DTOUT,DUOUT,ECSCR,ECVOL
 | 
|---|
| 190 |  S (ECOUT,ECSCR,ECVOL)=0
 | 
|---|
| 191 |  S ECC=+$G(ECC)
 | 
|---|
| 192 |  I '$D(ECL)!('$D(ECD))!('$D(ECP)) G ASKVOLQ
 | 
|---|
| 193 |  I $G(ECP)]"" S ECSCR=+$O(^ECJ("AP",+ECL,+ECD,+ECC,ECP,0))
 | 
|---|
| 194 |  S DIR(0)="N^^K:(X<1)!(X>99) X",DIR("A")="Volume"
 | 
|---|
| 195 |  S DIR("?")="Type a Number between 1 and 99, 0 Decimal Digits"
 | 
|---|
| 196 |  S DIR("B")=$S($P($G(^ECJ(ECSCR,"PRO")),"^",3):$P($G(^ECJ(ECSCR,"PRO")),"^",3),1:1)
 | 
|---|
| 197 |  D ^DIR
 | 
|---|
| 198 |  I +Y S ECVOL=Y
 | 
|---|
| 199 |  I $D(DIRUT) S ECOUT=1
 | 
|---|
| 200 | ASKVOLQ Q +ECVOL
 | 
|---|
| 201 |  ;
 | 
|---|
| 202 |  ;
 | 
|---|
| 203 | PROV(ECDT,ECPROVS) ;get providers - new providers function
 | 
|---|
| 204 |  ;- This is the same function as PROV^ECPRVUTL
 | 
|---|
| 205 |  ;- Select provider(s) with active person class
 | 
|---|
| 206 |  ;- No updating of file #721 record is done here
 | 
|---|
| 207 |  ;
 | 
|---|
| 208 |  ;   input
 | 
|---|
| 209 |  ;   ECDT    = date/time of procedure (required)
 | 
|---|
| 210 |  ;   ECPROVS = local array, passed by reference (required)
 | 
|---|
| 211 |  ;    
 | 
|---|
| 212 |  ;   output
 | 
|---|
| 213 |  ;   ECU(1)  = provider #1 (mandatory) ien^provider #1 name^person class
 | 
|---|
| 214 |  ;   ECU(2)  = provider #2 (optional) ien^provider #2 name^person class
 | 
|---|
| 215 |  ;   ECU(3)  = provider #3 (optional) ien^provider #3 name^person class
 | 
|---|
| 216 |  ;
 | 
|---|
| 217 |  ;   returns
 | 
|---|
| 218 |  ;       0 ==> prov selection successful; at least prov #1 selected
 | 
|---|
| 219 |  ;       1 ==> selection unsuccessful or user timed-out
 | 
|---|
| 220 |  ;       2 ==> selection unsuccessful or user entered "^"
 | 
|---|
| 221 |  ;
 | 
|---|
| 222 |  N ECU,ECU2,ECU3,ECDA
 | 
|---|
| 223 |  D GET^ECPRVUTL("",ECDT,.ECU,.ECU2,.ECU3,.ECOUT)
 | 
|---|
| 224 |  S ECPROVS(1)=ECU,ECPROVS(2)=ECU2,ECPROVS(3)=ECU3
 | 
|---|
| 225 |  Q ECOUT
 | 
|---|
| 226 |  ;
 | 
|---|
| 227 | ONEUNIT(ECDSSU) ;- Create ECDSSU containing DSS Unit
 | 
|---|
| 228 |  ;  Checks for validity and access to Unit
 | 
|---|
| 229 |  ;
 | 
|---|
| 230 |  ;   input
 | 
|---|
| 231 |  ;   ECDSSU = passed by reference
 | 
|---|
| 232 |  ;
 | 
|---|
| 233 |  ;   output
 | 
|---|
| 234 |  ;   ECDDSU = ien in file #724^name of DSS unit  OR
 | 
|---|
| 235 |  ;            undefined
 | 
|---|
| 236 |  ;
 | 
|---|
| 237 |  ;   returns ECOUT = 0  if unit selection sucessful  OR
 | 
|---|
| 238 |  ;                   1  if user times out; selection unsuccessful
 | 
|---|
| 239 |  ;                   2  if user up-arrows out; selection unsuccessful
 | 
|---|
| 240 |  ;   Note: if selection is unsuccessful, variable ECDSSU will be undefined.
 | 
|---|
| 241 |  ;
 | 
|---|
| 242 |  N Y,DIRUT,DUOUT,ECKEY,ECOUT
 | 
|---|
| 243 |  S ECKEY=$S($D(^XUSEC("ECALLU",DUZ)):1,1:0)
 | 
|---|
| 244 |  F  S ECOUT=0 D  Q:$G(ECOUT)  Q:$G(ECDSSU)
 | 
|---|
| 245 |  .K DUOUT,DTOUT,DIRUT,Y
 | 
|---|
| 246 |  .W !
 | 
|---|
| 247 |  .S DIC=724,DIC("A")="Select DSS Unit: ",DIC(0)="QEAMZ"
 | 
|---|
| 248 |  .S DIC("S")="I ECKEY!($D(^VA(200,DUZ,""EC"",+Y)))"
 | 
|---|
| 249 |  .D ^DIC K DIC
 | 
|---|
| 250 |  .S:$D(DTOUT) ECOUT=1 S:$D(DUOUT) ECOUT=2
 | 
|---|
| 251 |  .Q:$G(ECOUT)
 | 
|---|
| 252 |  .I +Y>0 D  Q
 | 
|---|
| 253 |  .. I $$VALID(+Y) S ECDSSU=Y
 | 
|---|
| 254 |  .. I '$$VALID(+Y) D
 | 
|---|
| 255 |  ...S Y=-1
 | 
|---|
| 256 |  ...W !!,?5,"This DSS Unit is either inactive or cannot be used"
 | 
|---|
| 257 |  ...W !,?5,"in Event Capture.  Please select a different DSS Unit.",!
 | 
|---|
| 258 |  .I +Y<0 D  Q
 | 
|---|
| 259 |  ..W !!,?5,"A response is required...try again."
 | 
|---|
| 260 |  ..W !,?5,"You must enter an ""^"" to exit."
 | 
|---|
| 261 |  .K DIR,DUOUT,DTOUT,DIRUT
 | 
|---|
| 262 |  .W ! S DIR(0)="YA",DIR("A")="Is this correct? ",DIR("B")="YES"
 | 
|---|
| 263 |  .S DIR("?")="Answer YES to accept the unit, NO to start over."
 | 
|---|
| 264 |  .D ^DIR K DIR
 | 
|---|
| 265 |  .I $D(DIRUT) S:$D(DTOUT) ECOUT=1 S:$D(DUOUT) ECOUT=2 K ECDSSU Q
 | 
|---|
| 266 |  .I '$G(Y) K ECDSSU
 | 
|---|
| 267 |  Q ECOUT
 | 
|---|
| 268 |  ;
 | 
|---|
| 269 | VALID(IEN) ;- Check DSS Unit for use by Event Capture
 | 
|---|
| 270 |  ;
 | 
|---|
| 271 |  N NODE,NO,YES,VAL
 | 
|---|
| 272 |  S NODE=$G(^ECD(IEN,0))
 | 
|---|
| 273 |  ;piece 6 is 'inactive'; piece 8 is 'use with EC'
 | 
|---|
| 274 |  S NO=$P(NODE,"^",6),YES=$P(NODE,"^",8)
 | 
|---|
| 275 |  ;start out with 'valid'
 | 
|---|
| 276 |  S VAL=1 D
 | 
|---|
| 277 |  .;if 'inactive', then 'not valid'
 | 
|---|
| 278 |  .I NO S VAL=0 Q
 | 
|---|
| 279 |  .;if not 'use with EC', then 'not valid'
 | 
|---|
| 280 |  .I 'YES S VAL=0
 | 
|---|
| 281 |  Q VAL
 | 
|---|