[613] | 1 | ACKQUTL5 ;HCIOFO/BH-Quasar utilities routine ; 04/01/99
|
---|
| 2 | ;;3.0;QUASAR;**1,4,6,8**;Feb 11, 2000
|
---|
| 3 | ;Per VHA Directive 10-93-142, this routine SHOULD NOT be modified.
|
---|
| 4 | SETREF(X,ACKVIEN,ACKTYPE) ;
|
---|
| 5 | ; Maintains APCE xRef When 3 of the 4 entries are present & the 4TH
|
---|
| 6 | ; has been entered a new entry will be set up. If any of the 4 data
|
---|
| 7 | ; items used within the X ref are changed the entry will be deleted & a
|
---|
| 8 | ; new 1 set up
|
---|
| 9 | N ACKTME,ACKCLIN,ACKVD,ACKPAT
|
---|
| 10 | D GETVAL
|
---|
| 11 | I ACKTME="",ACKTYPE'="T" Q
|
---|
| 12 | I ACKCLIN="",ACKTYPE'="C" Q
|
---|
| 13 | I ACKVD="",ACKTYPE'="D" Q
|
---|
| 14 | I ACKPAT="",ACKTYPE'="P" Q
|
---|
| 15 | ;
|
---|
| 16 | S ^ACK(509850.6,"APCE",ACKPAT,ACKCLIN,ACKVD,ACKTME,ACKVIEN)=""
|
---|
| 17 | Q
|
---|
| 18 | KILLREF(X,ACKVIEN,ACKTYPE) ;
|
---|
| 19 | ; When any of the 4 var values that make up the APCE xRef are deleted
|
---|
| 20 | ; or when the visit record is deleted the APCE xRef will be deleted
|
---|
| 21 | N ACKTME,ACKCLIN,ACKVD,ACKPAT
|
---|
| 22 | D GETVAL
|
---|
| 23 | ;
|
---|
| 24 | I ACKTYPE'="T",ACKTME="" Q ; If any of the 4 field values other than
|
---|
| 25 | I ACKTYPE'="C",ACKCLIN="" Q ; the field being edited are null the
|
---|
| 26 | I ACKTYPE'="D",ACKVD="" Q ; xRef will not have been set up
|
---|
| 27 | I ACKTYPE'="P",ACKPAT="" Q
|
---|
| 28 | ;
|
---|
| 29 | I ACKTYPE="D" S ACKVD=X ; X=Old field value
|
---|
| 30 | I ACKTYPE="P" S ACKPAT=X
|
---|
| 31 | I ACKTYPE="C" S ACKCLIN=X
|
---|
| 32 | I ACKTYPE="T" S ACKTME=X
|
---|
| 33 | ;
|
---|
| 34 | I $D(^ACK(509850.6,"APCE",ACKPAT,ACKCLIN,ACKVD,ACKTME,ACKVIEN)) D
|
---|
| 35 | . K ^ACK(509850.6,"APCE",ACKPAT,ACKCLIN,ACKVD,ACKTME,ACKVIEN)
|
---|
| 36 | Q
|
---|
| 37 | ;
|
---|
| 38 | GETVAL ; Used with SETREF & KILLREF - Gets The Clinic, Visit Date, Visit
|
---|
| 39 | ; time and Patient from the visit file currently being processed
|
---|
| 40 | N ACKTGT
|
---|
| 41 | D GETS^DIQ(509850.6,ACKVIEN_",",".01;1;2.6;55","I","ACKTGT")
|
---|
| 42 | S ACKVD=$G(ACKTGT(509850.6,ACKVIEN_",",.01,"I"))
|
---|
| 43 | S ACKPAT=$G(ACKTGT(509850.6,ACKVIEN_",",1,"I"))
|
---|
| 44 | S ACKCLIN=$G(ACKTGT(509850.6,ACKVIEN_",",2.6,"I"))
|
---|
| 45 | S ACKTME=$G(ACKTGT(509850.6,ACKVIEN_",",55,"I"))
|
---|
| 46 | Q
|
---|
| 47 | ;
|
---|
| 48 | EXCEPT(ACKVIEN,ACKFLD,ACKVAL) ; Called from xRefs within the LAST SENT TO PCE, LAST
|
---|
| 49 | ; EDITED IN QSR and PCE VISIT IEN fields
|
---|
| 50 | N ACKTGT,ACKPIEN,ACKSENT,ACKEDIT,ACKARR,ACKEXCP
|
---|
| 51 | I ACKFLD=125 D
|
---|
| 52 | . S ACKPIEN=ACKVAL
|
---|
| 53 | . S ACKSENT=$$GET1^DIQ(509850.6,ACKVIEN_",",135,"I")
|
---|
| 54 | . S ACKEDIT=$$GET1^DIQ(509850.6,ACKVIEN_",",140,"I")
|
---|
| 55 | I ACKFLD=135 D
|
---|
| 56 | . S ACKPIEN=$$GET1^DIQ(509850.6,ACKVIEN_",",125,"I")
|
---|
| 57 | . S ACKSENT=ACKVAL
|
---|
| 58 | . S ACKEDIT=$$GET1^DIQ(509850.6,ACKVIEN_",",140,"I")
|
---|
| 59 | I ACKFLD=140 D
|
---|
| 60 | . S ACKPIEN=$$GET1^DIQ(509850.6,ACKVIEN_",",125,"I")
|
---|
| 61 | . S ACKSENT=$$GET1^DIQ(509850.6,ACKVIEN_",",135,"I")
|
---|
| 62 | . S ACKEDIT=ACKVAL
|
---|
| 63 | ;
|
---|
| 64 | ; if PCE visit ien known and PCE updated last then no exception
|
---|
| 65 | I ACKPIEN'="",ACKEDIT'="",ACKSENT'="",ACKEDIT<ACKSENT D Q
|
---|
| 66 | . S ACKARR(509850.6,ACKVIEN_",",900)="@"
|
---|
| 67 | . D FILE^DIE("","ACKARR")
|
---|
| 68 | ; else this visit is an exception - only update if null or
|
---|
| 69 | ; earlier than today
|
---|
| 70 | S ACKEXCP=$$GET1^DIQ(509850.6,ACKVIEN_",",900,"I")
|
---|
| 71 | D NOW^%DTC
|
---|
| 72 | I (ACKEXCP="")!(ACKEXCP\1<(%\1)) D
|
---|
| 73 | . S ACKARR(509850.6,ACKVIEN_",",900)=%
|
---|
| 74 | . D FILE^DIE("","ACKARR")
|
---|
| 75 | Q
|
---|
| 76 | SEND(ACKVIEN) ; Called when entering/editing any of the PCE fields.
|
---|
| 77 | ; inputs: ACKVIEN - visit ien
|
---|
| 78 | ; this s/r is used in the xRef of any data field that, if changed,
|
---|
| 79 | ; should be sent to PCE to keep PCE up to date. The edit triggers the
|
---|
| 80 | ; xRef call to this s/r. It ensures that the LAST EDITED IN QSR date is
|
---|
| 81 | ; after the LAST SENT TO PCE date so that the visit becomes a PCE
|
---|
| 82 | ; EXCEPTION. NB. The LAST EDITED IN QSR date will only be updated if
|
---|
| 83 | ; a. it is currently earlier than the LAST SENT TO PCE and by updating
|
---|
| 84 | ; it the visit becomes a PCE Exception. or b. the current value is
|
---|
| 85 | ; earlier than today this saves the system from constantly updating
|
---|
| 86 | ; this field and checking the exception status each time a pce field
|
---|
| 87 | ; is changed
|
---|
| 88 | N ACKARR,ACKEDIT,ACKSENT
|
---|
| 89 | ; get current value of LAST EDITED IN QSR and LAST SENT TO PCE
|
---|
| 90 | S ACKEDIT=$$GET1^DIQ(509850.6,ACKVIEN_",",140,"I")
|
---|
| 91 | S ACKSENT=$$GET1^DIQ(509850.6,ACKVIEN_",",135,"I")
|
---|
| 92 | D NOW^%DTC
|
---|
| 93 | ; if qsr edit currently earlier than sent to pce update
|
---|
| 94 | I ACKEDIT<ACKSENT D Q
|
---|
| 95 | . S ACKARR(509850.6,ACKVIEN_",",140)=%
|
---|
| 96 | . D FILE^DIE("","ACKARR")
|
---|
| 97 | ;
|
---|
| 98 | ; if last edit is earlier than today update
|
---|
| 99 | I (ACKEDIT\1)<(%\1) D Q
|
---|
| 100 | . S ACKARR(509850.6,ACKVIEN_",",140)=%
|
---|
| 101 | . D FILE^DIE("","ACKARR")
|
---|
| 102 | ; nothing to do - QSR date must already be after LAST SENT and for today
|
---|
| 103 | Q
|
---|
| 104 | MOD ; Creates an array of valid CPT Modfrs. gets all valid Mods for the
|
---|
| 105 | ; Proc then disgards any that are not on the A&SP Proc Mod file or that
|
---|
| 106 | ; are on file but Inactive
|
---|
| 107 | K ACKMOD,ACKMODD
|
---|
| 108 | N CDT,ACKMOD1,ACKM1,ACKK2
|
---|
| 109 | I $$PATCH^XPDUTL("PX*1.0*73") S ACKMOD1=$$CODM^ICPTCOD(ACKPC,"ACKMODD","",ACKVD)
|
---|
| 110 | I '$$PATCH^XPDUTL("PX*1.0*73") S ACKMOD1=$$CODM^ICPTCOD(ACKPC,"ACKMODD")
|
---|
| 111 | S ACKM1=""
|
---|
| 112 | F S ACKM1=$O(ACKMODD(ACKM1)) Q:ACKM1="" D
|
---|
| 113 | . S ACKK2=$P(ACKMODD(ACKM1),U,2)
|
---|
| 114 | . I '$D(^ACK(509850.5,ACKK2,0)) K ACKMODD(ACKM1) Q
|
---|
| 115 | . I $P(^ACK(509850.5,ACKK2,0),U,2)=0 K ACKMODD(ACKM1) Q
|
---|
| 116 | . K ACKMODD(ACKM1) S ACKMOD(ACKPC,ACKK2)=""
|
---|
| 117 | S ACKMOD(ACKPC)=""
|
---|
| 118 | Q
|
---|
| 119 | MODW ; Called from x ref of Modfr field within 509850.6
|
---|
| 120 | I X'["?" Q
|
---|
| 121 | N ACKQDDD
|
---|
| 122 | S ACKQDDD=$G(ACKVD)
|
---|
| 123 | S DIC("W")="W "" "",$$MODTXT^ACKQUTL8(Y,"_ACKQDDD_"),?48,$$GET1^DIQ(81.3,Y,.04)"
|
---|
| 124 | Q
|
---|
| 125 | ;
|
---|
| 126 | ;
|
---|
| 127 | MODS ; Screen for Modfrs input within Modifrs field of Modfrs File
|
---|
| 128 | N ACKQDDD
|
---|
| 129 | S ACKQDDD=$G(ACKVD)
|
---|
| 130 | S DIC("S")="D GETS^DIQ(81.3,Y,"".04;5"",""I"",""ACKARR"",""ACKMSG"") I ACKARR(81.3,Y_"","",.04,""I"")=""C""!(ACKARR(81.3,Y_"","",.04,""I"")=""H""),ACKARR(81.3,Y_"","",5,""I"")'=1"
|
---|
| 131 | S DIC("W")="W "" "",$$MODTXT^ACKQUTL8(Y,"_ACKQDDD_")"
|
---|
| 132 | Q
|
---|
| 133 | ;
|
---|
| 134 | ;
|
---|
| 135 | CHK(Y,ACKVD,ACKCSC) ; Screen for EC codes
|
---|
| 136 | N ACKQCD,ACKQQD,ACKQQCPT,ACKPARAM
|
---|
| 137 | I $E($P(^EC(725,+Y,0),"^",2),1,2)'="SP" Q 0
|
---|
| 138 | S ACKQQCPT=$$GET1^DIQ(725,+Y_",",4,"I") I ACKQQCPT="" Q 0
|
---|
| 139 | ;S ACKQCD=$$CONVERT(ACKQQCPT) I ACKQCD="" Q 0
|
---|
| 140 | S ACKQCD=ACKQQCPT
|
---|
| 141 | S ACKPARAM=$P($$CPT^ICPTCOD(ACKQCD,ACKVD),"^",7) I 'ACKPARAM Q 0
|
---|
| 142 | I '$D(^ACK(509850.4,ACKQCD,0)) Q 0
|
---|
| 143 | I $P(^ACK(509850.4,ACKQCD,0),U,2)'[$E(ACKCSC) Q 0
|
---|
| 144 | I $P(^ACK(509850.4,ACKQCD,0),U,4)'=1 Q 0
|
---|
| 145 | S ACKQQD=$P(^EC(725,Y,0),"^",3) I ACKQQD="" Q 1
|
---|
| 146 | I ACKVD<ACKQQD Q 1
|
---|
| 147 | Q 0
|
---|
| 148 | EVNTDIS ; Get EC Procs filed and display
|
---|
| 149 | D ENS^%ZISS
|
---|
| 150 | N D0,ACKKEY,ACKEVTDS,ACKK3,ACKPROC,ACKPRV,ACKNME,ACKNATNM
|
---|
| 151 | D LIST^DIC(509850.615,","_ACKVIEN_",",".01;.03;.05","I","*","","","","","","ACKEVTDS")
|
---|
| 152 | I '$D(ACKEVTDS("DILIST",1)) Q
|
---|
| 153 | W !!," ",IOUON,"Event Capture Procedures currently entered for this visit",IOUOFF,!
|
---|
| 154 | S ACKK3=""
|
---|
| 155 | F S ACKK3=$O(ACKEVTDS("DILIST",1,ACKK3)) Q:ACKK3="" D
|
---|
| 156 | . S ACKPROC=ACKEVTDS("DILIST",1,ACKK3)
|
---|
| 157 | . S ACKPRV=ACKEVTDS("DILIST","ID",ACKK3,.05)
|
---|
| 158 | . I ACKPRV'="" S ACKPRV=$$CONVERT^ACKQUTL4(ACKPRV)
|
---|
| 159 | . S ACKNME=$$GET1^DIQ(725,ACKPROC_",",.01) S ACKNME=$E(ACKNME,1,29)
|
---|
| 160 | . S ACKNATNM=$$GET1^DIQ(725,ACKPROC_",",1)
|
---|
| 161 | . W !," Nat.#: ",ACKNATNM,?14," Name: ",ACKNME,?55,"Vol.: ",ACKEVTDS("DILIST","ID",ACKK3,.03) I ACKPRV'="" W !,?14,"Provider: ",ACKPRV
|
---|
| 162 | . W !
|
---|
| 163 | Q
|
---|
| 164 | SETCPT(DA,ACKQQIEN,X) ; When EC Code is entered create a CPT entry
|
---|
| 165 | I '$D(ACKEVENT) Q ; "" or 1 ACKEVENT must be defined
|
---|
| 166 | N ACK,ACKARR1,ACKCIEN,ACKQQCPT
|
---|
| 167 | ; Get CPT associated with EC code
|
---|
| 168 | S ACKQQCPT=$$GET1^DIQ(725,X_",",4,"I")
|
---|
| 169 | ;S ACKQQCPT=$$CONVERT(ACKQQCPT)
|
---|
| 170 | S ACKCIEN="" K ACKARR1
|
---|
| 171 | ; Create CPT entry and enter DA as CPT's pter to creating EC entry
|
---|
| 172 | S ACKARR1(509850.61,"+1,"_ACKQQIEN_",",.01)=ACKQQCPT
|
---|
| 173 | S ACKARR1(509850.61,"+1,"_ACKQQIEN_",",.07)=DA
|
---|
| 174 | D UPDATE^DIE("","ACKARR1","ACKCIEN","")
|
---|
| 175 | K ACK
|
---|
| 176 | ; After CPT entry set up get its IEN & set it to the creating EC
|
---|
| 177 | ; entries CPT ptr field
|
---|
| 178 | S ACK(509850.615,DA_","_ACKQQIEN_",",.07)=ACKCIEN(1)
|
---|
| 179 | D FILE^DIE("","ACK","")
|
---|
| 180 | Q
|
---|
| 181 | KILLCPT(DA,ACKQQIEN) ; Deletes CPT entry if created by an EC entry
|
---|
| 182 | I '$D(ACKEVENT) Q ; "" or 1 ACKEVENT must be defined
|
---|
| 183 | Q:'ACKEVENT ; Q if Div set up to use CPT's
|
---|
| 184 | N ACKCIEN,ACK
|
---|
| 185 | S ACKCIEN=$$GET1^DIQ(509850.615,DA_","_ACKQQIEN_",",.07)
|
---|
| 186 | I ACKCIEN="" Q
|
---|
| 187 | S ACK(509850.61,ACKCIEN_","_ACKQQIEN_",",.01)="@" D FILE^DIE("","ACK")
|
---|
| 188 | Q
|
---|
| 189 | ECVOLPRV(DA,ACKQQIEN,X,ACKQQVP,ACKQQDS) ; Update CPT rec. when EC data entered
|
---|
| 190 | ;If CPT entry linked with the EC entry -
|
---|
| 191 | ; If ACKQQDS='S'
|
---|
| 192 | ; If ACKQQVP='V' set EC vol to CPT vol
|
---|
| 193 | ; If ACKQQVP='P' set EC Prvdr to CPT Prvdr
|
---|
| 194 | ; If ACKQQDS='D'
|
---|
| 195 | ; If ACKQQVP='V' delete CPT vol
|
---|
| 196 | ; If ACKQQVP='P' delete CPT Prvdr
|
---|
| 197 | ;
|
---|
| 198 | I '$D(ACKEVENT) Q ; "" or 1 ACKEVENT must be defined
|
---|
| 199 | Q:'ACKEVENT
|
---|
| 200 | N ACKFIELD,ACKVAL,ACK,ACKCIEN
|
---|
| 201 | S ACKCIEN=$$GET1^DIQ(509850.615,DA_","_ACKQQIEN_",",.07)
|
---|
| 202 | I ACKCIEN="" Q
|
---|
| 203 | S ACKFIELD=".03" I ACKQQVP="P" S ACKFIELD=".05"
|
---|
| 204 | S ACKVAL=X I ACKQQDS="D" S ACKVAL="@"
|
---|
| 205 | S ACK(509850.61,ACKCIEN_","_ACKQQIEN_",",ACKFIELD)=ACKVAL
|
---|
| 206 | D FILE^DIE("","ACK","")
|
---|
| 207 | Q
|
---|
| 208 | CPVOLPRV(DA,ACKQQIEN,X,ACKQQVP,ACKQQDS) ; Update EC rec. when CPT data entered
|
---|
| 209 | ;If EC entry linked with the CPT entry -
|
---|
| 210 | ; If ACKQQDS='S'
|
---|
| 211 | ; If ACKQQVP='V' set CPT vol to EC vol
|
---|
| 212 | ; If ACKQQVP='P' set CPT Prvdr to EC Prvdr
|
---|
| 213 | ; If ACKQQDS='D'
|
---|
| 214 | ; If ACKQQVP='V' delete EC vol
|
---|
| 215 | ; If ACKQQVP='P' delete EC Prvdr
|
---|
| 216 | ;
|
---|
| 217 | I '$D(ACKEVENT) Q ; "" or 1 ACKEVENT must be defined
|
---|
| 218 | Q:ACKEVENT
|
---|
| 219 | N ACKFIELD,ACKVAL,ACK,ACKEIEN
|
---|
| 220 | S ACKEIEN=$$GET1^DIQ(509850.61,DA_","_ACKQQIEN_",",.07)
|
---|
| 221 | I ACKEIEN="" Q
|
---|
| 222 | S ACKFIELD=".03" I ACKQQVP="P" S ACKFIELD=".05"
|
---|
| 223 | S ACKVAL=X I ACKQQDS="D" S ACKVAL="@"
|
---|
| 224 | S ACK(509850.615,ACKEIEN_","_ACKQQIEN_",",ACKFIELD)=ACKVAL
|
---|
| 225 | D FILE^DIE("","ACK","")
|
---|
| 226 | Q
|
---|
| 227 | KILLEC(DA,ACKQQIEN) ; Delets EC entry if CPT entry has EC pter
|
---|
| 228 | I '$D(ACKEVENT) Q ; "" or 1 ACKEVENT must be defined
|
---|
| 229 | Q:ACKEVENT ; Q if Div set up to use EC's
|
---|
| 230 | N ACKECIEN,ACK
|
---|
| 231 | S ACKECIEN=$$GET1^DIQ(509850.61,DA_","_ACKQQIEN_",",.07)
|
---|
| 232 | I ACKECIEN="" Q
|
---|
| 233 | S ACK(509850.615,ACKECIEN_","_ACKQQIEN_",",.01)="@" D FILE^DIE("","ACK")
|
---|
| 234 | Q
|
---|
| 235 | EVENT(ACKDIV,ACKVD) ; params set up for Divn to use EC Codes ?
|
---|
| 236 | N ACKY,X,Y,ACKM
|
---|
| 237 | S ACKY=$E(ACKVD,2,3),ACKM=$E(ACKVD,4,5)
|
---|
| 238 | I ACKM>9 S ACKY=ACKY+1 I $L(ACKY)=1 S ACKY="0"_ACKY
|
---|
| 239 | I '$D(^ACK(509850.8,1,2,ACKDIV,2,"B",ACKY)) Q 0
|
---|
| 240 | S ACKKEY=0
|
---|
| 241 | S ACKKEY=$O(^ACK(509850.8,1,2,ACKDIV,2,"B",ACKY,ACKKEY))
|
---|
| 242 | S ACKEC=$P(^ACK(509850.8,1,2,ACKDIV,2,ACKKEY,0),"^",2)
|
---|
| 243 | I ACKEC="" S ACKEC="0"
|
---|
| 244 | Q ACKEC
|
---|
| 245 | ;
|
---|