[613] | 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 | ;
|
---|