| 1 | EASAILK ;ALB/BRM - ADDRESS INDEXING APIS ; 11/13/02 4:28pm
 | 
|---|
| 2 |  ;;1.0;ENROLLMENT APPLICATION SYSTEM;**13**;Mar 15, 2001
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  Q
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 | GETFIPS(DFN,INCYR,AIGMT) ;get the appropriate FIPS code and address for GMT
 | 
|---|
| 7 |  ;
 | 
|---|
| 8 |  ;INPUT:
 | 
|---|
| 9 |  ;   DFN - internal entry number for the #2 file
 | 
|---|
| 10 |  ;   INCYR - (optional) income year for which the GMT Address will
 | 
|---|
| 11 |  ;           be returned. If this value is null, then this function
 | 
|---|
| 12 |  ;           will not check for an existing GMT address (i.e. new
 | 
|---|
| 13 |  ;           MT, conversion, etc.) but will follow all other
 | 
|---|
| 14 |  ;           applicable rules. INCYR is in internal FILEMAN format
 | 
|---|
| 15 |  ;
 | 
|---|
| 16 |  ;OUTPUT:
 | 
|---|
| 17 |  ;   The AIGMT array will be returned with the FIPS code and
 | 
|---|
| 18 |  ;   address data used to compute the FIPS code.  The array will
 | 
|---|
| 19 |  ;   be structured as follows:
 | 
|---|
| 20 |  ;     AIGMT("INCYR") - Income Year used to compute GMT Threshold
 | 
|---|
| 21 |  ;     AIGMT("FIPS") - FIPS County Code to compute GMT Threshold
 | 
|---|
| 22 |  ;     AIGMT("MSA") - MSA code associated with this zip code
 | 
|---|
| 23 |  ;     AIGMT("ST1") - Street Address 1
 | 
|---|
| 24 |  ;     AIGMT("ST2") - Street Address 2
 | 
|---|
| 25 |  ;     AIGMT("CITY") - City
 | 
|---|
| 26 |  ;     AIGMT("STATE") - State
 | 
|---|
| 27 |  ;     AIGMT("ZIP") - Zip Code
 | 
|---|
| 28 |  ;     AIGMT("COUNTY") - County
 | 
|---|
| 29 |  ;     AIGMT("GMTIEN") - ien for the GMT Thresholds file
 | 
|---|
| 30 |  ;     AIGMT("SOURCE") - this field will contain the source of the
 | 
|---|
| 31 |  ;                       address.
 | 
|---|
| 32 |  ;     AIGMT("SITE") - this field will hold the site number related
 | 
|---|
| 33 |  ;                     to the source if AIGMT("SOURCE")="MT"
 | 
|---|
| 34 |  ;
 | 
|---|
| 35 |  ;   If AIGMT("SOURCE")="PATIENT" then the address used for obtaining
 | 
|---|
| 36 |  ;     the County FIPS code information was based on the Patient's
 | 
|---|
| 37 |  ;     address in the #2 file.
 | 
|---|
| 38 |  ;
 | 
|---|
| 39 |  ;   If AIGMT("SOURCE")="MT" then the address used to obtain the
 | 
|---|
| 40 |  ;     county FIPS code information was based on the Primary Means
 | 
|---|
| 41 |  ;     Test location.
 | 
|---|
| 42 |  ;
 | 
|---|
| 43 |  N X
 | 
|---|
| 44 |  ; initialize AIGMT array values
 | 
|---|
| 45 |  F X="FIPS","ST1","ST2","ST3","CITY","STATE","ZIP","COUNTY","SOURCE","SITE","INCYR","MSA","GMTIEN" S AIGMT(X)=""
 | 
|---|
| 46 |  Q:'DFN
 | 
|---|
| 47 |  S:'$G(INCYR) INCYR=($E($$DT^XLFDT,1,3)-1)
 | 
|---|
| 48 |  S INCYR=$E(INCYR,1,3)_"0000"
 | 
|---|
| 49 |  ; look for patient address in #2
 | 
|---|
| 50 |  D PATIENT(DFN,.AIGMT,.INCYR) Q:AIGMT("SOURCE")'=""
 | 
|---|
| 51 |  ; look for Primary Means Test location address
 | 
|---|
| 52 |  D PRIMMT(DFN,.AIGMT,.INCYR)
 | 
|---|
| 53 |  Q
 | 
|---|
| 54 |  ;
 | 
|---|
| 55 | PATIENT(DFN,AIGMT,INCYR) ;find patient's address in the Patient (#2) file
 | 
|---|
| 56 |  Q:'$G(DFN)
 | 
|---|
| 57 |  N ZIPDAT,VAPA,MSA,GMTIEN
 | 
|---|
| 58 |  ; get patient address
 | 
|---|
| 59 |  S VAPA("P")=1 D ADD^VADPT
 | 
|---|
| 60 |  ; quit if no zip code is present on the Patient record
 | 
|---|
| 61 |  Q:$G(VAPA(6))=""
 | 
|---|
| 62 |  ; determine postal code validity
 | 
|---|
| 63 |  D POSTAL^XIPUTIL(VAPA(6),.ZIPDAT)
 | 
|---|
| 64 |  ; quit if FIPS cannot be determined for this zip code
 | 
|---|
| 65 |  Q:$G(ZIPDAT("ERROR"))]""
 | 
|---|
| 66 |  ; determine MSA code for this zip code
 | 
|---|
| 67 |  S MSA=$$MSACHK(VAPA(6))
 | 
|---|
| 68 |  ; determine if GMT Threshold exists for this zip code
 | 
|---|
| 69 |  S GMTIEN=$$GMTCHK(.INCYR,$G(ZIPDAT("FIPS CODE")),.MSA)
 | 
|---|
| 70 |  Q:'GMTIEN
 | 
|---|
| 71 |  ; populate array
 | 
|---|
| 72 |  S AIGMT("INCYR")=$G(INCYR)
 | 
|---|
| 73 |  S AIGMT("FIPS")=$G(ZIPDAT("FIPS CODE"))
 | 
|---|
| 74 |  S AIGMT("ST1")=$G(VAPA(1))
 | 
|---|
| 75 |  S AIGMT("ST2")=$G(VAPA(2))
 | 
|---|
| 76 |  S AIGMT("ST3")=$G(VAPA(3))
 | 
|---|
| 77 |  S AIGMT("CITY")=$G(VAPA(4))
 | 
|---|
| 78 |  S AIGMT("STATE")=$G(VAPA(5))  ;ien^state name
 | 
|---|
| 79 |  S AIGMT("ZIP")=$G(VAPA(6))
 | 
|---|
| 80 |  S AIGMT("COUNTY")=$G(ZIPDAT("COUNTY"))
 | 
|---|
| 81 |  S AIGMT("MSA")=MSA
 | 
|---|
| 82 |  S AIGMT("GMTIEN")=GMTIEN
 | 
|---|
| 83 |  S AIGMT("SOURCE")="PATIENT"
 | 
|---|
| 84 |  Q
 | 
|---|
| 85 |  ;
 | 
|---|
| 86 | PRIMMT(DFN,AIGMT,INCYR) ;find Primary MT location address
 | 
|---|
| 87 |  N MTIEN,ZIPDAT,MTDATA,ERR,MTSRC,STATION
 | 
|---|
| 88 |  S MTIEN=+$$LST^DGMTU(DFN,$$DT^XLFDT)
 | 
|---|
| 89 |  Q:'MTIEN
 | 
|---|
| 90 |  D GETS^DIQ(408.31,MTIEN_",",".23;2.05","I","MTDATA","ERR")
 | 
|---|
| 91 |  Q:$D(ERR)
 | 
|---|
| 92 |  S MTSRC=$G(MTDATA(408.31,MTIEN_",",.23,"I"))
 | 
|---|
| 93 |  Q:"^2^3^"[("^"_MTSRC_"^")  ;DCD is the source of this income test
 | 
|---|
| 94 |  S STATION=$G(MTDATA(408.31,MTIEN_",",2.05,"I"))
 | 
|---|
| 95 |  Q:STATION']""
 | 
|---|
| 96 |  ; get primary means test location address and populate array
 | 
|---|
| 97 |  D STATADDR(STATION,.AIGMT,.INCYR)
 | 
|---|
| 98 |  Q
 | 
|---|
| 99 |  ;
 | 
|---|
| 100 | STATADDR(STATION,AIGMT,INCYR) ;get the VAMC station address
 | 
|---|
| 101 |  Q:$G(STATION)']""
 | 
|---|
| 102 |  N ZIP,GMTIEN,FIPS,MSA,STFIPS,IEN4,IENS,ZIPDAT,IEN5,SITEADDR
 | 
|---|
| 103 |  S IEN4=$$IEN^XUAF4(STATION) Q:'IEN4
 | 
|---|
| 104 |  S IENS=IEN4_","
 | 
|---|
| 105 |  D GETS^DIQ(4,IENS,"1.01:1.04","","SITEADDR")
 | 
|---|
| 106 |  Q:$G(SITEADDR(4,IENS,1.04))=""
 | 
|---|
| 107 |  ; determine postal code validity
 | 
|---|
| 108 |  D POSTAL^XIPUTIL(SITEADDR(4,IENS,1.04),.ZIPDAT)
 | 
|---|
| 109 |  ; quit if FIPS cannot be determined for this zip code
 | 
|---|
| 110 |  Q:$G(ZIPDAT("ERROR"))]""
 | 
|---|
| 111 |  ; determine MSA code for this zip code
 | 
|---|
| 112 |  S MSA=$$MSACHK(SITEADDR(4,IENS,1.04))
 | 
|---|
| 113 |  ; determine if GMT Threshold exists for this zip code
 | 
|---|
| 114 |  S GMTIEN=$$GMTCHK(.INCYR,$G(ZIPDAT("FIPS CODE")),.MSA)
 | 
|---|
| 115 |  Q:'GMTIEN
 | 
|---|
| 116 |  ; populate array
 | 
|---|
| 117 |  S AIGMT("INCYR")=$G(INCYR)
 | 
|---|
| 118 |  S AIGMT("FIPS")=$G(ZIPDAT("FIPS CODE"))
 | 
|---|
| 119 |  S AIGMT("ST1")=$G(SITEADDR(4,IENS,1.01))
 | 
|---|
| 120 |  S AIGMT("ST2")=$G(SITEADDR(4,IENS,1.02))
 | 
|---|
| 121 |  S AIGMT("ST3")=""
 | 
|---|
| 122 |  S AIGMT("CITY")=$G(SITEADDR(4,IENS,1.03))
 | 
|---|
| 123 |  S AIGMT("STATE")=$G(ZIPDAT("STATE POINTER"))_"^"_$G(ZIPDAT("STATE"))
 | 
|---|
| 124 |  S AIGMT("ZIP")=$G(SITEADDR(4,IENS,1.04))
 | 
|---|
| 125 |  S AIGMT("COUNTY")=$G(ZIPDAT("COUNTY"))
 | 
|---|
| 126 |  S AIGMT("SITE")=STATION
 | 
|---|
| 127 |  S AIGMT("MSA")=MSA
 | 
|---|
| 128 |  S AIGMT("GMTIEN")=GMTIEN
 | 
|---|
| 129 |  S AIGMT("SOURCE")="MT"
 | 
|---|
| 130 |  Q
 | 
|---|
| 131 | MSACHK(ZIP) ; check and return MSA code if it exists for a Zip Code
 | 
|---|
| 132 |  Q:$G(ZIP)']"" ""
 | 
|---|
| 133 |  Q:'$D(^EAS(712.6,"B",$E(ZIP,1,5))) ""
 | 
|---|
| 134 |  Q $O(^EAS(712.6,"AMSA",$E(ZIP,1,5),""))
 | 
|---|
| 135 |  ;
 | 
|---|
| 136 | GMTCHK(YEAR,FIPS,MSA) ;check for valid GMT Threshold
 | 
|---|
| 137 |  ;
 | 
|---|
| 138 |  ;INPUT:
 | 
|---|
| 139 |  ;  YEAR - Income Yr (FM internal) on which to base the GMT Threshold
 | 
|---|
| 140 |  ;         If YEAR="" then the current income year is used
 | 
|---|
| 141 |  ;  FIPS - 5-digit FIPS County Code for this record
 | 
|---|
| 142 |  ;  MSA (pass by reference) - MSA to utilize for GMT determination
 | 
|---|
| 143 |  ;
 | 
|---|
| 144 |  ;OUTPUT:
 | 
|---|
| 145 |  ;  MSA (pass by reference) - updated MSA code if applicable
 | 
|---|
| 146 |  ;  return variable: 0^error if no GMT Threshold can be determined or
 | 
|---|
| 147 |  ;                   ien to the GMT Threshold file
 | 
|---|
| 148 |  ;
 | 
|---|
| 149 |  Q:$G(FIPS)']"" "0^FIPS INPUT PARAMETER MISSING"
 | 
|---|
| 150 |  S:'$G(MSA) MSA=$G(MSA)
 | 
|---|
| 151 |  S:'$G(YEAR) YEAR=($E($$DT^XLFDT,1,3)-1)_"0000"
 | 
|---|
| 152 |  Q:'MSA $$MSAZERO(YEAR,FIPS,.MSA)
 | 
|---|
| 153 |  Q:'$D(^EAS(712.5,"AMSA",YEAR)) "0^INVALID YEAR"
 | 
|---|
| 154 |  Q:'$D(^EAS(712.5,"AMSA",YEAR,FIPS)) "0^INVALID FIPS"
 | 
|---|
| 155 |  Q:$D(^EAS(712.5,"AMSA",YEAR,FIPS,MSA)) $O(^EAS(712.5,"AMSA",YEAR,FIPS,MSA,""))
 | 
|---|
| 156 |  S GMTIEN=$$MSAZERO(YEAR,FIPS,.MSA)
 | 
|---|
| 157 |  Q:GMTIEN GMTIEN
 | 
|---|
| 158 |  Q "0^GMT THRESHOLD CANNOT BE DETERMINED"
 | 
|---|
| 159 |  ;
 | 
|---|
| 160 | MSAZERO(YEAR,FIPS,MSA) ;MSA for this zip code appears to be zero. Can we
 | 
|---|
| 161 |  ; determine a GMT Threshold?
 | 
|---|
| 162 |  ;
 | 
|---|
| 163 |  ;INPUT:
 | 
|---|
| 164 |  ;  YEAR - Income Year on which to base the GMT Threshold
 | 
|---|
| 165 |  ;  FIPS - 5-digit FIPS County Code for this record
 | 
|---|
| 166 |  ;  MSA (pass by reference) - MSA to utilize for GMT determination
 | 
|---|
| 167 |  ;
 | 
|---|
| 168 |  ;OUTPUT:
 | 
|---|
| 169 |  ;  MSA (pass by reference) - updated MSA code if applicable
 | 
|---|
| 170 |  ;  return variable: 0 if no GMT Threshold can be determined or
 | 
|---|
| 171 |  ;                   ien to the GMT Threshold file
 | 
|---|
| 172 |  ;
 | 
|---|
| 173 |  N TMPMSA,TMPGMT
 | 
|---|
| 174 |  S GMTIEN="0^GMT THRESHOLD CANNOT BE DETERMINED",(TMPMSA,TMPGMT)=""
 | 
|---|
| 175 |  Q:'$G(YEAR)!($G(FIPS)="") GMTIEN
 | 
|---|
| 176 |  ;
 | 
|---|
| 177 |  ; no MSA file entry - get GMT ien if possible
 | 
|---|
| 178 |  I '$D(^EAS(712.5,"AMSA",YEAR,FIPS)) D  Q GMTIEN
 | 
|---|
| 179 |  .I '$D(^EAS(712.5,"GMT",YEAR,FIPS)) Q
 | 
|---|
| 180 |  .S GMTIEN=$O(^EAS(712.5,"GMT",YEAR,FIPS,""))
 | 
|---|
| 181 |  ;
 | 
|---|
| 182 |  ; Is there an entry for this MSA?
 | 
|---|
| 183 |  I MSA'="",$D(^EAS(712.5,"AMSA",YEAR,FIPS,MSA)) D  Q GMTIEN
 | 
|---|
| 184 |  .S GMTIEN=$O(^EAS(712.5,"AMSA",YEAR,FIPS,MSA,""))
 | 
|---|
| 185 |  ;
 | 
|---|
| 186 |  ; Is there only 1 MSA for this FIPS code?
 | 
|---|
| 187 |  S TMPMSA=$O(^EAS(712.5,"AMSA",YEAR,FIPS,TMPMSA))
 | 
|---|
| 188 |  Q:$O(^EAS(712.5,"AMSA",YEAR,FIPS,TMPMSA))'="" GMTIEN
 | 
|---|
| 189 |  S GMTIEN=$O(^EAS(712.5,"AMSA",YEAR,FIPS,TMPMSA,""))
 | 
|---|
| 190 |  S MSA=TMPMSA
 | 
|---|
| 191 |  Q GMTIEN
 | 
|---|
| 192 |  ;
 | 
|---|
| 193 |  ;
 | 
|---|
| 194 | FIPS(ZIP,INCYR) ; look-up the 5-digit FIPS County code for the entered zip
 | 
|---|
| 195 |  ;
 | 
|---|
| 196 |  ;INPUT:
 | 
|---|
| 197 |  ;  ZIP - zip code
 | 
|---|
| 198 |  ;  INCYR - (optional) income year to use to obtain the GMT Threshold
 | 
|---|
| 199 |  ;          if the income year is not defined, then the current income
 | 
|---|
| 200 |  ;          year is used.  INCYR is in Fileman internal date format
 | 
|---|
| 201 |  ;
 | 
|---|
| 202 |  ;OUTPUT:
 | 
|---|
| 203 |  ;  5-digit FIPS code ^ MSA value ^ GMT Threshold ien ^ error message
 | 
|---|
| 204 |  ;
 | 
|---|
| 205 |  N MSA,GMTIEN,FIPS,ZIPDAT
 | 
|---|
| 206 |  Q:$G(ZIP)="" "0^0^0^ZIP CODE NOT ENTERED"
 | 
|---|
| 207 |  I $G(INCYR),INCYR?4N Q "0^0^0^INCOME YEAR MUST BE INTERNAL DATE"
 | 
|---|
| 208 |  D POSTAL^XIPUTIL(ZIP,.ZIPDAT)
 | 
|---|
| 209 |  Q:$G(ZIPDAT("ERROR"))]"" "0^0^0^ZIP CODE NOT IN POSTAL CODE FILE"
 | 
|---|
| 210 |  S FIPS=$G(ZIPDAT("FIPS CODE")) S:FIPS']"" FIPS=0
 | 
|---|
| 211 |  S MSA=$$MSACHK(ZIP)
 | 
|---|
| 212 |  S GMTIEN=$$GMTCHK(.INCYR,FIPS,.MSA)
 | 
|---|
| 213 |  Q FIPS_"^"_MSA_"^"_GMTIEN
 | 
|---|
| 214 |  ;
 | 
|---|