| [613] | 1 | SCDXUTL0 ;ALB/ESD - Generic functions for Amb Care HL7 Interface ; 5/31/05 11:23am
 | 
|---|
 | 2 |  ;;5.3;Scheduling;**44,55,69,77,85,110,122,94,66,132,180,235,256,258,325,451**;Aug 13, 1993
 | 
|---|
 | 3 |  ;
 | 
|---|
 | 4 |  ; This routine contains functions used with the Ambulatory Care
 | 
|---|
 | 5 |  ; Reporting Project (ACRP).
 | 
|---|
 | 6 |  ;
 | 
|---|
 | 7 | MTI(DFN,DATE,EC,AT,SDOE) ;Calculate Means Test Indicator
 | 
|---|
 | 8 |  ;
 | 
|---|
 | 9 |  ;    Input:     DFN   =  Patient IEN
 | 
|---|
 | 10 |  ;               Date  =  Encounter Date/Time
 | 
|---|
 | 11 |  ;               EC    =  Eligibility (Code) of Encounter
 | 
|---|
 | 12 |  ;               AT    =  Appointment Type of Encounter
 | 
|---|
 | 13 |  ;               SDOE  =  Outpatient Encounter IEN
 | 
|---|
 | 14 |  ;
 | 
|---|
 | 15 |  ;   Output:     MTI   =  Means Test Indicator
 | 
|---|
 | 16 |  ;
 | 
|---|
 | 17 |  N MT,MTI,SDVD1,SDINPT,SDANS,SDANS1,SDINPT,SDMT,VET,X
 | 
|---|
 | 18 |  S MTI=""
 | 
|---|
 | 19 |  S DFN=$G(DFN),DATE=$G(DATE),EC=$G(EC),AT=$G(AT),SDOE=$G(SDOE)
 | 
|---|
 | 20 |  I (DFN="")!(DATE="")!(EC="")!(EC=0)!(AT="")!(SDOE="") G MTQ
 | 
|---|
 | 21 |  ;
 | 
|---|
 | 22 |  ;- VA Code (get from MAS Eligibility Code IEN)
 | 
|---|
 | 23 |  S X=$G(^DIC(8.1,$P($G(^DIC(8,+EC,0)),"^",9),0))
 | 
|---|
 | 24 |  S EC=$P(X,"^",4),VET=$P(X,"^",5)
 | 
|---|
 | 25 |  ;- Non-Veteran
 | 
|---|
 | 26 |  I $P($G(^DPT(DFN,"VET")),"^")="N"!(VET="N") S MTI="N" G MTQ
 | 
|---|
 | 27 |  ;- Dom patient
 | 
|---|
 | 28 |  I EC=6 S MTI="X" G MTQ
 | 
|---|
 | 29 |  ;- Inpatient status
 | 
|---|
 | 30 |  S SDVD1=DATE D INPT^SDOPC1 I SDMT="X0" S MTI="X" G MTQ
 | 
|---|
 | 31 |  ;- Service Connected > 50 %
 | 
|---|
 | 32 |  I EC=1 S MTI="AS" G MTQ
 | 
|---|
 | 33 |  ;-- Service Connected < 50 %
 | 
|---|
 | 34 |  I EC=3,$$SC^DGMTR(DFN) D  I MTI'="" G MTQ
 | 
|---|
 | 35 |  .; 'AS' if seen for SC condition
 | 
|---|
 | 36 |  .I $P($G(^SDD(409.42,+$O(^SDD(409.42,"AO",+SDOE,3,0)),0)),U,3) S MTI="AS"
 | 
|---|
 | 37 |  ;-Military Disability Retiree
 | 
|---|
 | 38 |  ;S X=$P($G(^DPT(DFN,.36)),"^",2) I X,(X<3) S MTI="AS" G MTQ
 | 
|---|
 | 39 |  ;-Military Disability Retirement OR Discharge Due To Disability
 | 
|---|
 | 40 |  I $P($G(^DPT(DFN,.36)),"^",12)!($P($G(^DPT(DFN,.36)),"^",13)) S MTI="AS" G MTQ
 | 
|---|
 | 41 |  ;
 | 
|---|
 | 42 |  I EC=2 D  I MTI'="" G MTQ
 | 
|---|
 | 43 |  .;- Mexican Border Period or World War I
 | 
|---|
 | 44 |  .I $P($G(^DIC(21,+$P($G(^DPT(DFN,.32)),"^",3),0)),"^",3)=1!($P($G(^DIC(21,+$P($G(^DPT(DFN,.32)),"^",3),0)),"^",3)=3) S MTI="AS" Q
 | 
|---|
 | 45 |  .;- Prisoner of War (POW)
 | 
|---|
 | 46 |  .I $P($G(^DPT(DFN,.52)),"^",5)="Y" S MTI="AS" Q
 | 
|---|
 | 47 |  .;- Purple Heart Recipient
 | 
|---|
 | 48 |  .I $P($G(^DPT(DFN,.53)),"^")="Y" S MTI="AS" Q
 | 
|---|
 | 49 |  .;- Aid and Attendance
 | 
|---|
 | 50 |  .I $P($G(^DPT(DFN,.362)),"^",12)="Y" S MTI="AN" Q
 | 
|---|
 | 51 |  .;- Housebound
 | 
|---|
 | 52 |  .I $P($G(^DPT(DFN,.362)),"^",13)="Y" S MTI="AN" Q
 | 
|---|
 | 53 |  ;- Receiving VA Pension
 | 
|---|
 | 54 |  I EC=4,$P($G(^DPT(DFN,.362)),"^",14)="Y" S MTI="AN" G MTQ
 | 
|---|
 | 55 |  ;
 | 
|---|
 | 56 |  I EC=5!(EC=3) D  I MTI'="" G MTQ
 | 
|---|
 | 57 |  .;- Eligible for Medicaid
 | 
|---|
 | 58 |  .I $P($G(^DPT(DFN,.38)),"^")=1 S MTI="AN" Q
 | 
|---|
 | 59 |  .;- Appt types with ignore billing set to 1 (except comp gen)
 | 
|---|
 | 60 |  .I AT'=10,$P($G(^SD(409.1,+AT,0)),"^",2) S MTI="X" Q
 | 
|---|
 | 61 |  .;- Treatment for AO, IR, EC, MST, HNC
 | 
|---|
 | 62 |  .F SDANS1=1,2,4,5,6 S SDANS=$S('$D(^SDD(409.42,"AO",+SDOE,SDANS1)):"",$P($G(^SDD(409.42,$O(^(SDANS1,0)),0)),"^",3):1,1:0) I SDANS=1 S MTI="AS" Q
 | 
|---|
 | 63 |  .I MTI]"" Q
 | 
|---|
 | 64 |  .;- Means Test Code A, C, or G  (also Pending Adj = Code C or Code G)
 | 
|---|
 | 65 |  .S MT=$$LST^DGMTU(DFN,DATE)
 | 
|---|
 | 66 |  .I $P(MT,"^",4)="A" S MTI="AN" Q
 | 
|---|
 | 67 |  .I $P(MT,"^",4)="C" S MTI="C" Q
 | 
|---|
 | 68 |  .I $P(MT,"^",4)="G" S MTI="G" Q
 | 
|---|
 | 69 |  .I $P(MT,"^",4)="P" D  Q
 | 
|---|
 | 70 |  . .S MTI=$$PA^DGMTUTL($P(MT,"^")),MTI=$S('$D(MTI):"U",MTI="MT":"C",MTI="GMT":"G",1:"U")
 | 
|---|
 | 71 |  .;- no means test status or no longer required...check current eligibility data
 | 
|---|
 | 72 |  .S X=+$G(^DPT(DFN,.36)),X=+$P($G(^DIC(8,X,0)),U,9) ; get MAS eligibility
 | 
|---|
 | 73 |  .;- Service connected > 50 %
 | 
|---|
 | 74 |  .I X=1 S MTI="AS" Q
 | 
|---|
 | 75 |  .;- Service connected < 50 %
 | 
|---|
 | 76 |  .I EC=3,'$$SC^DGMTR(DFN) S MTI="AS" Q
 | 
|---|
 | 77 |  .;- mex border or WWI or POW
 | 
|---|
 | 78 |  .I X=16!(X=17)!(X=18)!(X=22) S MTI="AS" Q
 | 
|---|
 | 79 |  .;- A&A or Pension or HB
 | 
|---|
 | 80 |  .I X=2!(X=4)!(X=15) S MTI="AN" Q
 | 
|---|
 | 81 |  ;- Means Test required and not done/completed
 | 
|---|
 | 82 |  S MTI="U"
 | 
|---|
 | 83 | MTQ Q MTI
 | 
|---|
 | 84 |  ;
 | 
|---|
 | 85 |  ;
 | 
|---|
 | 86 | PATCLASS(DFN,SDOE) ; - Return classification questions from PATIENT (#2) file
 | 
|---|
 | 87 |  ;           (Agent Orange, Radiation Exposure, Service Connected,
 | 
|---|
 | 88 |  ;            Environmental Contaminants, Military Sexual Trauma and
 | 
|---|
 | 89 |  ;            Head/Neck Cancer questions)
 | 
|---|
 | 90 |  ;
 | 
|---|
 | 91 |  ;   Input:  DFN  = Patient IEN (from file #2)
 | 
|---|
 | 92 |  ;           SDOE = Outpatient Encounter File IEN [Optional]
 | 
|---|
 | 93 |  ;
 | 
|---|
 | 94 |  ;  Output:  String containing Y if classification question = YES, N if 
 | 
|---|
 | 95 |  ;           = NO, null otherwise (classifications separated by "^")
 | 
|---|
 | 96 |  ;
 | 
|---|
 | 97 |  N NODE,PATCLASS,SDTEMP,X
 | 
|---|
 | 98 |  S SDTEMP(1)=$$AO^SDCO22(DFN,$G(SDOE))
 | 
|---|
 | 99 |  S SDTEMP(2)=$$IR^SDCO22(DFN,$G(SDOE))
 | 
|---|
 | 100 |  S SDTEMP(3)=$$SC^SDCO22(DFN,$G(SDOE))
 | 
|---|
 | 101 |  S SDTEMP(4)=$$EC^SDCO22(DFN,$G(SDOE))
 | 
|---|
 | 102 |  S SDTEMP(5)=$$MST^SDCO22(DFN,$G(SDOE))
 | 
|---|
 | 103 |  S SDTEMP(6)=$$HNC^SDCO22(DFN,$G(SDOE))
 | 
|---|
 | 104 |  S SDTEMP(7)=$$CV^SDCO22(DFN,$G(SDOE))
 | 
|---|
 | 105 |  F X=1:1:7 S $P(PATCLASS,U,X)=$S(SDTEMP(X)=1:"Y",1:"N")
 | 
|---|
 | 106 |  Q PATCLASS
 | 
|---|
 | 107 |  ;
 | 
|---|
 | 108 |  ;
 | 
|---|
 | 109 | CLASS(SDOE,SCDXARRY) ; - Return array of classification types for encounter
 | 
|---|
 | 110 |  ;
 | 
|---|
 | 111 |  ;   Input:  SDOE = Outpatient Encounter IEN (from file #409.68)
 | 
|---|
 | 112 |  ;
 | 
|---|
 | 113 |  ;  Output:  Array (pass desired name as parameter) containing
 | 
|---|
 | 114 |  ;           Classification Type^Value
 | 
|---|
 | 115 |  ;
 | 
|---|
 | 116 |  N CLASS,I,X
 | 
|---|
 | 117 |  S CLASS="",(I,X)=0
 | 
|---|
 | 118 |  S SDOE=+$G(SDOE)
 | 
|---|
 | 119 |  F  S CLASS=+$O(^SDD(409.42,"OE",SDOE,CLASS)) Q:'CLASS  D
 | 
|---|
 | 120 |  . S I=$P($G(^SDD(409.42,CLASS,0)),"^"),X=X+1
 | 
|---|
 | 121 |  . S @SCDXARRY@(I)=$P($G(^SDD(409.42,CLASS,0)),"^")_"^"_$P($G(^SDD(409.42,CLASS,0)),"^",3)
 | 
|---|
 | 122 | CLASSQ S @SCDXARRY@(0)=X
 | 
|---|
 | 123 |  Q
 | 
|---|
 | 124 |  ;
 | 
|---|
 | 125 |  ;
 | 
|---|
 | 126 | CHKCLASS(DFN,SDOE) ; - Get classification data for HL7 VAFHLZCL segment
 | 
|---|
 | 127 |  ;
 | 
|---|
 | 128 |  ;   Input:  DFN = Patient IEN (from file #2)
 | 
|---|
 | 129 |  ;          SDOE = Outpatient Encounter IEN (from file #409.68)
 | 
|---|
 | 130 |  ;
 | 
|---|
 | 131 |  ;  Output:  String separated by "^" containing: 
 | 
|---|
 | 132 |  ;           1 (patient class = YES and encounter class = YES)
 | 
|---|
 | 133 |  ;           0 (patient class = YES and encounter class = NO)
 | 
|---|
 | 134 |  ;           HLQ ("""""") otherwise
 | 
|---|
 | 135 |  ;
 | 
|---|
 | 136 | EN N OECLASS,OUT,PATCLASS,TYPE,ENCVAL,CLCNT,PATVAL
 | 
|---|
 | 137 |  S PATCLASS=$$PATCLASS(DFN,SDOE)
 | 
|---|
 | 138 |  D CLASS(SDOE,"OECLASS")
 | 
|---|
 | 139 |  S CLCNT=$L(PATCLASS,"^")
 | 
|---|
 | 140 |  F TYPE=1:1:CLCNT D
 | 
|---|
 | 141 |  .S ENCVAL=$P($G(OECLASS(TYPE)),"^",2)
 | 
|---|
 | 142 |  .S PATVAL=$P(PATCLASS,"^",TYPE)
 | 
|---|
 | 143 |  .S $P(OUT,"^",TYPE)=""""""
 | 
|---|
 | 144 |  .I PATVAL="Y" S $P(OUT,"^",TYPE)=ENCVAL
 | 
|---|
 | 145 | ENQ Q OUT
 | 
|---|
 | 146 |  ;
 | 
|---|
 | 147 |  ;
 | 
|---|
 | 148 | POV(DFN,DATE,CLINIC,APTYP) ; - Determine Purpose of Visit for encounter
 | 
|---|
 | 149 |  ;
 | 
|---|
 | 150 |  ;   Input:  DFN = Patient IEN
 | 
|---|
 | 151 |  ;          DATE = Appointment Date/Time
 | 
|---|
 | 152 |  ;        CLINIC = Clinic
 | 
|---|
 | 153 |  ;         APTYP = Appointment Type
 | 
|---|
 | 154 |  ;
 | 
|---|
 | 155 |  ;  Output:  Purpose of Visit value (combination of Purpose of Visit
 | 
|---|
 | 156 |  ;           and Appointment Type)
 | 
|---|
 | 157 |  ;
 | 
|---|
 | 158 |  N POV,SCDXPOV
 | 
|---|
 | 159 |  I (DFN=""!(DATE="")!(CLINIC="")!(APTYP="")) G POVQ
 | 
|---|
 | 160 |  I $P($G(^DPT(DFN,"S",+DATE,0)),"^")'=CLINIC G POVQ
 | 
|---|
 | 161 |  S POV=$P($G(^DPT(DFN,"S",+DATE,0)),"^",7),POV=$S($L(POV)=1:"0"_POV,1:POV)
 | 
|---|
 | 162 |  S APTYP=$S($L(APTYP)=1:"0"_APTYP,1:APTYP)
 | 
|---|
 | 163 |  S SCDXPOV=POV_APTYP
 | 
|---|
 | 164 | POVQ Q $G(SCDXPOV)
 | 
|---|
 | 165 |  ;
 | 
|---|
 | 166 |  ;
 | 
|---|
 | 167 | SCODE(SDOE,SCDXARRY) ; Return array of stop codes for encounter
 | 
|---|
 | 168 |  ;
 | 
|---|
 | 169 |  ;   Input:  SDOE = Outpatient Encounter IEN (from file #409.68)
 | 
|---|
 | 170 |  ;
 | 
|---|
 | 171 |  ;  Output:  Array (pass desired name as parameter) containing
 | 
|---|
 | 172 |  ;           stop codes
 | 
|---|
 | 173 |  ;
 | 
|---|
 | 174 |  ;
 | 
|---|
 | 175 |  N CNT,I,SDOE0,SDOEC,SDOEC0
 | 
|---|
 | 176 |  S CNT=1,(I,SDOEC)=0
 | 
|---|
 | 177 |  S SDOE=+$G(SDOE)
 | 
|---|
 | 178 |  I '$D(^SCE(SDOE,0)) G SCODEQ
 | 
|---|
 | 179 |  I '$P($G(^SCE(SDOE,0)),"^",3) G SCODEQ
 | 
|---|
 | 180 |  S SDOE0=$G(^SCE(SDOE,0))
 | 
|---|
 | 181 |  ;
 | 
|---|
 | 182 |  ;- Get stop code from parent encounter
 | 
|---|
 | 183 |  I $P(SDOE0,"^",3) S @SCDXARRY@(CNT)=$P(SDOE0,"^",3),I=CNT
 | 
|---|
 | 184 |  ;
 | 
|---|
 | 185 |  ;- Get stop code from child encounter (credit stop)
 | 
|---|
 | 186 |  F  S SDOEC=+$O(^SCE("APAR",SDOE,SDOEC)) Q:('SDOEC)!(CNT=2)  D
 | 
|---|
 | 187 |  . S SDOEC0=$G(^SCE(SDOEC,0))
 | 
|---|
 | 188 |  . I $P(SDOEC0,"^",3),($P(SDOEC0,"^",8)=4) D
 | 
|---|
 | 189 |  .. S CNT=CNT+1,I=CNT
 | 
|---|
 | 190 |  .. S @SCDXARRY@(CNT)=$P(SDOEC0,"^",3)
 | 
|---|
 | 191 | SCODEQ S @SCDXARRY@(0)=I
 | 
|---|
 | 192 |  Q
 | 
|---|
 | 193 |  ;
 | 
|---|
 | 194 |  ;
 | 
|---|
 | 195 | PROC(SDOE,SCDXARRY) ; Return array of procedures for encounter
 | 
|---|
 | 196 |  ;
 | 
|---|
 | 197 |  ;
 | 
|---|
 | 198 |  ;   Input:  SDOE = Outpatient Encounter IEN (from file #409.68)
 | 
|---|
 | 199 |  ;
 | 
|---|
 | 200 |  ;  Output:  Array (pass desired name as parameter) containing
 | 
|---|
 | 201 |  ;           procedures
 | 
|---|
 | 202 |  ;
 | 
|---|
 | 203 |  N CNT
 | 
|---|
 | 204 |  S CNT=0,SDOE=+$G(SDOE)
 | 
|---|
 | 205 |  I '$D(^SCE(SDOE,0)) G PROCQ
 | 
|---|
 | 206 |  ;
 | 
|---|
 | 207 |  D GETPROC(.CNT,SDOE,SCDXARRY) G PROCQ
 | 
|---|
 | 208 |  ;
 | 
|---|
 | 209 |  ;- Array of procedures
 | 
|---|
 | 210 | PROCQ S @SCDXARRY@(0)=CNT
 | 
|---|
 | 211 |  Q
 | 
|---|
 | 212 |  ;
 | 
|---|
 | 213 |  ;
 | 
|---|
 | 214 | GETPROC(CNT,ENC,SCDXARRY) ;Get procedures from Scheduling Visits file
 | 
|---|
 | 215 |  ;
 | 
|---|
 | 216 |  N CPTS,VCPT
 | 
|---|
 | 217 |  D GETCPT^SDOE(ENC,"CPTS")
 | 
|---|
 | 218 |  N CPT,QTY,I
 | 
|---|
 | 219 |  S VCPT=0
 | 
|---|
 | 220 |  F  S VCPT=$O(CPTS(VCPT)) Q:'VCPT  D
 | 
|---|
 | 221 |  . S CPT=$G(CPTS(VCPT))
 | 
|---|
 | 222 |  . S QTY=+$P(CPT,U,16)
 | 
|---|
 | 223 |  . F I=1:1:QTY S CNT=CNT+1,@SCDXARRY@(CNT)=+CPT
 | 
|---|
 | 224 |  Q
 | 
|---|