| 1 | ECXUTL5 ;ALB/JRC - Utilities for DSS Extracts ; 10/17/07 3:49pm
 | 
|---|
| 2 |  ;;3.0;DSS EXTRACTS;**71,84,92,103,105**;Dec 22, 1997;Build 70
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | REPEAT(CHAR,TIMES) ;REPEAT A STRING
 | 
|---|
| 5 |  ;INPUT  : CHAR - Character to repeat
 | 
|---|
| 6 |  ;         TIMES - Number of times to repeat CHAR
 | 
|---|
| 7 |  ;OUTPUT : s - String of CHAR that is TIMES long
 | 
|---|
| 8 |  ;         "" - Error (bad input)
 | 
|---|
| 9 |  ;
 | 
|---|
| 10 |  ;CHECK INPUT
 | 
|---|
| 11 |  Q:($G(CHAR)="") ""
 | 
|---|
| 12 |  Q:((+$G(TIMES))=0) ""
 | 
|---|
| 13 |  ;RETURN STRING
 | 
|---|
| 14 |  Q $TR($J("",TIMES)," ",CHAR)
 | 
|---|
| 15 | INSERT(INSTR,OUTSTR,COLUMN,LENGTH) ;INSERT A STRING INTO ANOTHER
 | 
|---|
| 16 |  ;INPUT  : INSTR - String to insert
 | 
|---|
| 17 |  ;         OUTSTR - String to insert into
 | 
|---|
| 18 |  ;         COLUMN - Where to begin insertion (defaults to end of OUTSTR)
 | 
|---|
| 19 |  ;         LENGTH - Number of characters to clear from OUTSTR
 | 
|---|
| 20 |  ;                  (defaults to length of INSTR)
 | 
|---|
| 21 |  ;OUTPUT : s - INSTR will be placed into OUTSTR starting at COLUMN
 | 
|---|
| 22 |  ;             using LENGTH characters
 | 
|---|
| 23 |  ;         "" - Error (bad input)
 | 
|---|
| 24 |  ;
 | 
|---|
| 25 |  ;NOTE : This module is based on $$SETSTR^VALM1
 | 
|---|
| 26 |  ;
 | 
|---|
| 27 |  ;CHECK INPUT
 | 
|---|
| 28 |  Q:('$D(INSTR)) ""
 | 
|---|
| 29 |  Q:('$D(OUTSTR)) ""
 | 
|---|
| 30 |  S:('$D(COLUMN)) COLUMN=$L(OUTSTR)+1
 | 
|---|
| 31 |  S:('$D(LENGTH)) LENGTH=$L(INSTR)
 | 
|---|
| 32 |  ;DECLARE VARIABLES
 | 
|---|
| 33 |  N FRONT,END
 | 
|---|
| 34 |  S FRONT=$E((OUTSTR_$J("",COLUMN-1)),1,(COLUMN-1))
 | 
|---|
| 35 |  S END=$E(OUTSTR,(COLUMN+LENGTH),$L(OUTSTR))
 | 
|---|
| 36 |  ;INSERT STRING
 | 
|---|
| 37 |  Q FRONT_$E((INSTR_$J("",LENGTH)),1,LENGTH)_END
 | 
|---|
| 38 | TYPE(DFN) ;Determine patient type DBIA #2511
 | 
|---|
| 39 |  ;   input 
 | 
|---|
| 40 |  ;   DFN = patient ien
 | 
|---|
| 41 |  ;
 | 
|---|
| 42 |  ;   output
 | 
|---|
| 43 |  ;   ECXPTYPE = patient type external value from fle 391
 | 
|---|
| 44 |  ;
 | 
|---|
| 45 |  ;          AC = ACTIVE DUTY        MI = MILITARY RETIREE
 | 
|---|
| 46 |  ;          AL = ALLIED VETERAN     NO = NON-VETERAN (OTHER)
 | 
|---|
| 47 |  ;          CO = COLLATERAL         NS = NSC VETERAN
 | 
|---|
| 48 |  ;          EM = EMPLOYEE           SC = SC VETERAN
 | 
|---|
| 49 |  ;          IN = INELIGIBLE         TR = TRICARE
 | 
|---|
| 50 |  ;          return value 0 if no data found, 1 if data found
 | 
|---|
| 51 |  ;
 | 
|---|
| 52 |  N TYPE,ECXPTYPE
 | 
|---|
| 53 |  ;Check input
 | 
|---|
| 54 |  Q:'$D(DFN) ""
 | 
|---|
| 55 |  S (TYPE,ECXPTYPE)=""
 | 
|---|
| 56 |  S TYPE=$G(^DPT(DFN,"TYPE"))
 | 
|---|
| 57 |  I 'TYPE Q ECXPTYPE
 | 
|---|
| 58 |  S ECXPTYPE=$P($G(^DG(391,TYPE,0)),U,1)
 | 
|---|
| 59 |  S ECXPTYPE=$E(ECXPTYPE,1,2)
 | 
|---|
| 60 |  Q ECXPTYPE
 | 
|---|
| 61 | CVEDT(DFN,DATE) ;Determine patient CV status DBIA #4156
 | 
|---|
| 62 |  ;   input
 | 
|---|
| 63 |  ;   DFN = patient ien
 | 
|---|
| 64 |  ;
 | 
|---|
| 65 |  ;   output
 | 
|---|
| 66 |  ;   ECXCVE = combat veteran status eligibility
 | 
|---|
| 67 |  ;   ECXCVEDT = combat veteran eligibility end date
 | 
|---|
| 68 |  ;   ECXCVENC = combat veteran encounter
 | 
|---|
| 69 |  ;Initialize variables
 | 
|---|
| 70 |  N CVSTAT
 | 
|---|
| 71 |  S (CVSTAT,ECXCVE,ECXCVEDT,ECXCVENC)=""
 | 
|---|
| 72 |  ;Check input
 | 
|---|
| 73 |  Q:'$D(DFN) 0
 | 
|---|
| 74 |  ;Call CV API
 | 
|---|
| 75 |  S CVSTAT=$$CVEDT^DGCV(DFN,DATE)
 | 
|---|
| 76 |  I CVSTAT<1 Q 0
 | 
|---|
| 77 |  ;Veteran been given CV eligibility
 | 
|---|
| 78 |  S ECXCVE=$S($P(CVSTAT,U,3)=1:"Y",$P(CVSTAT,U,3)=0:"E",1:"")
 | 
|---|
| 79 |  ;Save CV eligibility end date and convert from FM to HL7 format
 | 
|---|
| 80 |  S ECXCVEDT=$P(CVSTAT,U,2)
 | 
|---|
| 81 |  S ECXCVEDT=$$FMTHL7^XLFDT(ECXCVEDT)
 | 
|---|
| 82 |  ;Is the veteran eligible for CV in the date of encounter
 | 
|---|
| 83 |  S ECXCVENC=$S($P(CVSTAT,U,3)=1:"Y",1:"")
 | 
|---|
| 84 |  Q 1
 | 
|---|
| 85 | NPRF ;National patient record flags DBIA #3860
 | 
|---|
| 86 |  N ECXARR,FLG
 | 
|---|
| 87 |  S ECXNPRFI="",CNT=$$GETACT^DGPFAPI(ECXDFN,"ECXARR"),FLG=""
 | 
|---|
| 88 |  I 'CNT Q
 | 
|---|
| 89 |  F I=1:1:CNT D  Q:FLG
 | 
|---|
| 90 |  .I ECXARR(I,"CATEGORY")["NATIONAL" S ECXNPRFI="Y",FLG=1
 | 
|---|
| 91 |  Q
 | 
|---|
| 92 | RXPTST(K) ;Rx patient status DBIA #2511
 | 
|---|
| 93 |  N ECXDIC,STAT
 | 
|---|
| 94 |  S (ECXDIC,STAT)=""
 | 
|---|
| 95 |  ;Check input
 | 
|---|
| 96 |  Q:'$D(K) STAT
 | 
|---|
| 97 |  S DA=K,DIC="^PS(53,",DIQ(0)="I",DIQ="ECXDIC",DR="6"
 | 
|---|
| 98 |  D EN^DIQ1
 | 
|---|
| 99 |  S STAT=$G(ECXDIC(53,K,6,"I"))
 | 
|---|
| 100 |  S STAT=$S(STAT=1:"SC",STAT=2:"AA",STAT=3:"OTH",STAT=4:"INP",STAT=5:"NON",1:"")
 | 
|---|
| 101 |  Q STAT
 | 
|---|
| 102 | NONVAP(K) ;Non-va prescriber DBIA #10060
 | 
|---|
| 103 |  N ECXDIC,NONVAP
 | 
|---|
| 104 |  S (ECXDIC,NONVAP)=""
 | 
|---|
| 105 |  Q:'$D(K) NONVAP
 | 
|---|
| 106 |  S DA=K,DIC="^VA(200,",DIQ(0)="I",DIQ="ECXDIC",DR="53.91"
 | 
|---|
| 107 |  D EN^DIQ1
 | 
|---|
| 108 |  S NONVAP=$G(ECXDIC(200,K,53.91,"I"))
 | 
|---|
| 109 |  I NONVAP S NONVAP="Y"
 | 
|---|
| 110 |  Q NONVAP
 | 
|---|
| 111 | DOIVPO(K,L) ;Add destination for outpatient ivp orders
 | 
|---|
| 112 |  ;     Input     K - DFN
 | 
|---|
| 113 |  ;               L - Order # from Pharmacy Patient File (#55)
 | 
|---|
| 114 |  ;
 | 
|---|
| 115 |  ;     Output     ordering stop code
 | 
|---|
| 116 |  ;
 | 
|---|
| 117 |  N ECXDIC,ECXDICA,ECXDICB,DOIVPO,CLINIC,SCODE,DIC,DIQ,DR,DA
 | 
|---|
| 118 |  S (ECXDIC,ECXDICA,ECXDICB,DOIVPO,CLINIC,SCODE)=""
 | 
|---|
| 119 |  ;Check input
 | 
|---|
| 120 |  Q:'K!'(L) SCODE
 | 
|---|
| 121 |  ;Check treating specialty
 | 
|---|
| 122 |  S SCODE=$$TSSC($G(ECXTS)) I SCODE>0 Q SCODE
 | 
|---|
| 123 |  ;Go to pharmacy patient file (#55) and return value of field (#136)
 | 
|---|
| 124 |  S DIC=55,DIQ(0)="I",DIQ="ECXDIC",DR="100",DR(55.01)="136",DA=K,DA(55.01)=L
 | 
|---|
| 125 |  D EN^DIQ1
 | 
|---|
| 126 |  S CLINIC=$G(ECXDIC(55.01,L,136,"I"))
 | 
|---|
| 127 |  I 'CLINIC Q SCODE
 | 
|---|
| 128 |  ;Get stop code pointer to file 40.7 from file 44
 | 
|---|
| 129 |  S DIC="^SC(",DIQ(0)="I",DIQ="ECXDICA",DR="8",DA=CLINIC D EN^DIQ1
 | 
|---|
| 130 |  S SCODE=ECXDICA(44,CLINIC,8,"I")
 | 
|---|
| 131 |  ;Get stop code external value
 | 
|---|
| 132 |  S DIC="^DIC(40.7,",DIQ(0)="E",DIQ="ECXDICB",DR="1",DA=SCODE D EN^DIQ1
 | 
|---|
| 133 |  S SCODE=$G(ECXDICB(40.7,SCODE,1,"E"))
 | 
|---|
| 134 |  Q SCODE
 | 
|---|
| 135 |  ;
 | 
|---|
| 136 | DOUDO(K,L) ;Add destination for outpatient udp orders
 | 
|---|
| 137 |  ;     Input     K - DFN
 | 
|---|
| 138 |  ;               L - Order # from Pharmacy Patient File (#55)
 | 
|---|
| 139 |  ;
 | 
|---|
| 140 |  ;     Output     ordering stop code
 | 
|---|
| 141 |  ;
 | 
|---|
| 142 |  N ECXDIC,ECXDICA,ECXDICB,DOIVPO,CLINIC,SCODE,DIC,DIQ,DR,DA
 | 
|---|
| 143 |  S (ECXDIC,ECXDICA,ECXDICB,DOIVPO,CLINIC,SCODE)=""
 | 
|---|
| 144 |  ;Check treating specialty
 | 
|---|
| 145 |  S SCODE=$$TSSC($G(ECXTS)) I SCODE>0 Q SCODE
 | 
|---|
| 146 |  ;Check input
 | 
|---|
| 147 |  Q:'K!'(L) SCODE
 | 
|---|
| 148 |  S DIC=55,DIQ(0)="I",DIQ="ECXDIC",DR="62",DR(55.06)="130",DA=K,DA(55.06)=L
 | 
|---|
| 149 |  D EN^DIQ1
 | 
|---|
| 150 |  S CLINIC=$G(ECXDIC(55.06,L,130,"I"))
 | 
|---|
| 151 |  I 'CLINIC Q SCODE
 | 
|---|
| 152 |  ;Get stop code pointer to file 40.7 from file 44
 | 
|---|
| 153 |  S DIC="^SC(",DIQ(0)="I",DIQ="ECXDICA",DR="8",DA=CLINIC D EN^DIQ1
 | 
|---|
| 154 |  S SCODE=ECXDICA(44,CLINIC,8,"I")
 | 
|---|
| 155 |  ;Get stop code external value
 | 
|---|
| 156 |  S DIC="^DIC(40.7,",DIQ(0)="E",DIQ="ECXDICB",DR="1",DA=SCODE D EN^DIQ1
 | 
|---|
| 157 |  S SCODE=$G(ECXDICB(40.7,SCODE,1,"E"))
 | 
|---|
| 158 |  Q SCODE
 | 
|---|
| 159 |  ;
 | 
|---|
| 160 | PHAAPI(DRUG) ;Call Pharmacy drug file API dbia 4483
 | 
|---|
| 161 |  ;   Input: drug file (#50) ien
 | 
|---|
| 162 |  ;
 | 
|---|
| 163 |  ;   Output: generic name ^ classification ^ ndc ^ dea hand
 | 
|---|
| 164 |  ;            ^ ndf file entry # ^ psndf va product entry ^
 | 
|---|
| 165 |  ;            price per disp unit ^ dispense unit
 | 
|---|
| 166 |  ;
 | 
|---|
| 167 |  ;Initialize variables and scratch global
 | 
|---|
| 168 |  N NAME,CLASS,NDC,INV,NDF,P1,P3,PPDU,UNIT,ARRAY,DATA
 | 
|---|
| 169 |  S (NAME,CLASS,NDC,INV,NDF,P1,P3,PPDU,ARRAY,DATA)=""
 | 
|---|
| 170 |  S ARRAY="^TMP($J,""ECXLIST"")"
 | 
|---|
| 171 |  K @ARRAY
 | 
|---|
| 172 |  D DATA^PSS50(DRUG,,,,,"ECXLIST")
 | 
|---|
| 173 |  I @ARRAY@(0)'>0 Q "^^^^^^"
 | 
|---|
| 174 |  S NAME=@ARRAY@(DRUG,.01),CLASS=@ARRAY@(DRUG,2),NDC=@ARRAY@(DRUG,31)
 | 
|---|
| 175 |  S INV=@ARRAY@(DRUG,3),P1=$P(@ARRAY@(DRUG,20),U),P3=$P(@ARRAY@(DRUG,22),U),PPDU=@ARRAY@(DRUG,16),UNIT=@ARRAY@(DRUG,14.5)
 | 
|---|
| 176 |  K @ARRAY
 | 
|---|
| 177 |  Q NAME_U_CLASS_U_NDC_U_INV_U_P1_U_P3_U_PPDU_U_UNIT
 | 
|---|
| 178 |  ;
 | 
|---|
| 179 | TSSC(X) ;Check treating specialty (ts) and if ts equals any of the following
 | 
|---|
| 180 |  ;18,23,24,36,41,65,94 then assign predefined code and return value
 | 
|---|
| 181 |  ;
 | 
|---|
| 182 |  ;    Input: treating specialty
 | 
|---|
| 183 |  ;    Output: Ordering stop code
 | 
|---|
| 184 |  ;
 | 
|---|
| 185 |  S CODE=$S(X=18:293,X=23:295,X=24:290,X=36:294,X=41:296,X=65:291,X=94:292,1:"")
 | 
|---|
| 186 |  Q CODE
 | 
|---|
| 187 |  ;
 | 
|---|
| 188 | PSJ59P5(X) ;Get iv room division
 | 
|---|
| 189 |  ;   Input  X - iv room ien
 | 
|---|
| 190 |  ;
 | 
|---|
| 191 |  ;   Output - field .02 division
 | 
|---|
| 192 |  ;Init variables
 | 
|---|
| 193 |  N DIV S DIV=""
 | 
|---|
| 194 |  ;Check input
 | 
|---|
| 195 |  I 'X  Q DIV
 | 
|---|
| 196 |  D ALL^PSJ59P5(X,,"ECXDIV")
 | 
|---|
| 197 |  S DIV=$P($G(^TMP($J,"ECXDIV",X,.02)),U)
 | 
|---|
| 198 |  K ^TMP($J,"ECXDIV")
 | 
|---|
| 199 |  Q DIV
 | 
|---|
| 200 |  ;
 | 
|---|
| 201 | SCRX(IEN) ;Service connected prescription
 | 
|---|
| 202 |  ;Init variables
 | 
|---|
| 203 |  N DIC,DR,DA,ECXDIQ
 | 
|---|
| 204 |  ;Check input
 | 
|---|
| 205 |  I '$G(IEN) Q ""
 | 
|---|
| 206 |  S DIC=52,DR="116",DA=IEN,DIQ="ECXDIQ"
 | 
|---|
| 207 |  D DIQ^PSODI(DIC,DIC,DR,DA,DIQ)
 | 
|---|
| 208 |  Q $S($G(ECXDIQ(52,DA,116))="YES":"Y",$G(ECXDIQ(52,DA,116))="NO":"N",1:"")
 | 
|---|
| 209 |  ;
 | 
|---|
| 210 | SSN(SSN,FILE) ; extended validation of ssn
 | 
|---|
| 211 |  ;       input:     ssn - social security number to validate
 | 
|---|
| 212 |  ;                  file - optional "", 2 or 67, the only check is for
 | 
|---|
| 213 |  ;                         reference lab file (#67) in which case ssn
 | 
|---|
| 214 |  ;                         "000123456" is considered a valid ssn.
 | 
|---|
| 215 |  ;        output:   0 - test patient or invalid ssn
 | 
|---|
| 216 |  ;                  1 - valid ssn
 | 
|---|
| 217 |  ;
 | 
|---|
| 218 |  ;check input
 | 
|---|
| 219 |  I $G(SSN)']"" Q 0
 | 
|---|
| 220 |  S FILE=$G(FILE)
 | 
|---|
| 221 |  I (FILE=67)&(SSN="000123456") Q 1
 | 
|---|
| 222 |  I "89"[$E(SSN) Q 0
 | 
|---|
| 223 |  I (SSN="123456789")!(SSN="111111111")!(SSN="222222222")!(SSN="333333333")!(SSN="444444444")!(SSN="555555555")!($E(SSN,1,3)="666")!($E(SSN,4,5)="00")!($E(SSN,1,3)="000") Q 0
 | 
|---|
| 224 |  Q 1
 | 
|---|