diff --git a/src/main/java/com/imsweb/algorithms/Algorithms.java b/src/main/java/com/imsweb/algorithms/Algorithms.java index ab9ca77..14dec2f 100644 --- a/src/main/java/com/imsweb/algorithms/Algorithms.java +++ b/src/main/java/com/imsweb/algorithms/Algorithms.java @@ -136,6 +136,7 @@ public final class Algorithms { public static final String FIELD_RURAL_CONT_1993 = "ruralurbanContinuum1993"; public static final String FIELD_RURAL_CONT_2003 = "ruralurbanContinuum2003"; public static final String FIELD_RURAL_CONT_2013 = "ruralurbanContinuum2013"; + public static final String FIELD_RURAL_CONT_2023 = "ruralurbanContinuum2023"; public static final String FIELD_SURV_VS_RECODE = "vitalStatusRecode"; public static final String FIELD_SURV_DX_DATE_RECODE = "survDateDxRecode"; public static final String FIELD_SURV_DATE_ACTIVE_FUP = "survDateActiveFollowup"; @@ -358,6 +359,7 @@ public static void initialize() { addField(AlgorithmField.of(FIELD_ICCC_EXT, 9422, 3, "Int Class of Childhood Cancer (ICCC) Extended Code", "ICCC Ext", DATA_LEVEL_TUMOR, false)); addField(AlgorithmField.of(FIELD_IARC_MP_INDICATOR, 9400, 1, "IARC Multiple Primary Indicator", "IARC MP", DATA_LEVEL_TUMOR, false)); addField(AlgorithmField.of(FIELD_COUNTY_AT_DX_ANALYSIS_FLAG, 9440, 4, "County at DX Analysis Flag", "DX Anlys Cty Fg", DATA_LEVEL_TUMOR, false)); + addField(AlgorithmField.of(FIELD_RURAL_CONT_2023, 9470, 2, "RuralUrban Continuum 2023", "Rur Urb Cont 23", DATA_LEVEL_TUMOR, false)); addField(AlgorithmField.of(FIELD_IHS_PRCDA_2017, 9970, 1, "IHS PRCDA 2017", "IHS PRCDA 2017", DATA_LEVEL_TUMOR, false)); addField(AlgorithmField.of(FIELD_ACS_YOST_QUINTILE_US, 9610, 1, "Yost Quintile (Across States)", "Yost US", DATA_LEVEL_TUMOR, false)); addField(AlgorithmField.of(FIELD_ACS_YOST_QUINTILE_STATE, 9611, 1, "Yost Quintile (State Specific)", "Yost State", DATA_LEVEL_TUMOR, false)); diff --git a/src/main/java/com/imsweb/algorithms/internal/CountryData.java b/src/main/java/com/imsweb/algorithms/internal/CountryData.java index 5c93548..eaf28f3 100644 --- a/src/main/java/com/imsweb/algorithms/internal/CountryData.java +++ b/src/main/java/com/imsweb/algorithms/internal/CountryData.java @@ -420,6 +420,7 @@ public void initializeContinuumData(String requestedState, Map _censusData = new HashMap<>(); @@ -81,6 +82,14 @@ public void setUrbanContinuum2013(String urbanContinuum2013) { _urbanContinuum2013 = urbanContinuum2013; } + public String getUrbanContinuum2023() { + return _urbanContinuum2023; + } + + public void setUrbanContinuum2023(String urbanContinuum2023) { + _urbanContinuum2023 = urbanContinuum2023; + } + /** * Returns the census data for a given census tract code, null if not found. */ diff --git a/src/main/java/com/imsweb/algorithms/ruralurban/RuralUrbanAlgorithm.java b/src/main/java/com/imsweb/algorithms/ruralurban/RuralUrbanAlgorithm.java index 99329b7..fadb58c 100644 --- a/src/main/java/com/imsweb/algorithms/ruralurban/RuralUrbanAlgorithm.java +++ b/src/main/java/com/imsweb/algorithms/ruralurban/RuralUrbanAlgorithm.java @@ -26,6 +26,7 @@ import static com.imsweb.algorithms.Algorithms.FIELD_RURAL_CONT_1993; import static com.imsweb.algorithms.Algorithms.FIELD_RURAL_CONT_2003; import static com.imsweb.algorithms.Algorithms.FIELD_RURAL_CONT_2013; +import static com.imsweb.algorithms.Algorithms.FIELD_RURAL_CONT_2023; import static com.imsweb.algorithms.Algorithms.FIELD_STATE_DX; import static com.imsweb.algorithms.Algorithms.FIELD_URIC_2000; import static com.imsweb.algorithms.Algorithms.FIELD_URIC_2010; @@ -72,9 +73,11 @@ public RuralUrbanAlgorithm() { _outputFields.add(Algorithms.getField(FIELD_RURAL_CONT_1993)); _outputFields.add(Algorithms.getField(FIELD_RURAL_CONT_2003)); _outputFields.add(Algorithms.getField(FIELD_RURAL_CONT_2013)); + _outputFields.add(Algorithms.getField(FIELD_RURAL_CONT_2023)); _unknownValues.put(FIELD_RURAL_CONT_1993, Arrays.asList(CONTINUUM_UNK_96, CONTINUUM_UNK_97, CONTINUUM_UNK_98, CONTINUUM_UNK_99)); _unknownValues.put(FIELD_RURAL_CONT_2003, Arrays.asList(CONTINUUM_UNK_96, CONTINUUM_UNK_97, CONTINUUM_UNK_98, CONTINUUM_UNK_99)); _unknownValues.put(FIELD_RURAL_CONT_2013, Arrays.asList(CONTINUUM_UNK_96, CONTINUUM_UNK_97, CONTINUUM_UNK_98, CONTINUUM_UNK_99)); + _unknownValues.put(FIELD_RURAL_CONT_2023, Arrays.asList(CONTINUUM_UNK_96, CONTINUUM_UNK_97, CONTINUUM_UNK_98, CONTINUUM_UNK_99)); } @Override @@ -102,6 +105,7 @@ public AlgorithmOutput execute(AlgorithmInput input) { outputTumor.put(FIELD_RURAL_CONT_1993, continuumOutputDto.getRuralUrbanContinuum1993()); outputTumor.put(FIELD_RURAL_CONT_2003, continuumOutputDto.getRuralUrbanContinuum2003()); outputTumor.put(FIELD_RURAL_CONT_2013, continuumOutputDto.getRuralUrbanContinuum2013()); + outputTumor.put(FIELD_RURAL_CONT_2023, continuumOutputDto.getRuralUrbanContinuum2023()); outputTumors.add(outputTumor); } diff --git a/src/main/java/com/imsweb/algorithms/ruralurban/RuralUrbanDataProvider.java b/src/main/java/com/imsweb/algorithms/ruralurban/RuralUrbanDataProvider.java index fb6e9da..7ed7d7b 100644 --- a/src/main/java/com/imsweb/algorithms/ruralurban/RuralUrbanDataProvider.java +++ b/src/main/java/com/imsweb/algorithms/ruralurban/RuralUrbanDataProvider.java @@ -130,8 +130,11 @@ public String getRuralUrbanContinuum(String bealeCategory, String state, String case RuralUrbanUtils.BEALE_CATEGORY_2013: result = countyData.getUrbanContinuum2013(); break; + case RuralUrbanUtils.BEALE_CATEGORY_2023: + result = countyData.getUrbanContinuum2023(); + break; default: - throw new IllegalStateException("Invalid beale category: " + bealeCategory); + throw new IllegalStateException("Unknown bealeCategory: " + bealeCategory); } return result == null ? RURAL_URBAN_CONTINUUM_UNKNOWN : result; @@ -170,6 +173,16 @@ private Map> loadRuralUrbanContinuumData() { dto.setUrbanContinuum2013(StringUtils.leftPad(val, 2, '0')); }); + // load 2023 data + Utils.processInternalFile("ruralurban/rural-urban-continuum-2023.csv", line -> { + String state = line.getField(0); + String county = line.getField(1); + String val = line.getField(2); + + CountyData dto = result.computeIfAbsent(state, k -> new HashMap<>()).computeIfAbsent(county, k -> new CountyData()); + dto.setUrbanContinuum2023(StringUtils.leftPad(val, 2, '0')); + }); + return result; } } \ No newline at end of file diff --git a/src/main/java/com/imsweb/algorithms/ruralurban/RuralUrbanOutputDto.java b/src/main/java/com/imsweb/algorithms/ruralurban/RuralUrbanOutputDto.java index 877019f..46df2b0 100644 --- a/src/main/java/com/imsweb/algorithms/ruralurban/RuralUrbanOutputDto.java +++ b/src/main/java/com/imsweb/algorithms/ruralurban/RuralUrbanOutputDto.java @@ -16,6 +16,7 @@ public class RuralUrbanOutputDto { private String _ruralUrbanContinuum1993; private String _ruralUrbanContinuum2003; private String _ruralUrbanContinuum2013; + private String _ruralUrbanContinuum2023; public String getUrbanRuralIndicatorCode2000() { return _urbanRuralIndicatorCode2000; @@ -45,6 +46,10 @@ public String getRuralUrbanContinuum2013() { return _ruralUrbanContinuum2013; } + public String getRuralUrbanContinuum2023() { + return _ruralUrbanContinuum2023; + } + public void setUrbanRuralIndicatorCode2000(String urbanRuralIndicatorCode2000) { _urbanRuralIndicatorCode2000 = urbanRuralIndicatorCode2000; } @@ -89,4 +94,8 @@ public void setRuralUrbanContinuum2013(String ruralUrbanContinuum2013) { _ruralUrbanContinuum2013 = ruralUrbanContinuum2013; } + public void setRuralUrbanContinuum2023(String ruralUrbanContinuum2023) { + _ruralUrbanContinuum2023 = ruralUrbanContinuum2023; + } + } diff --git a/src/main/java/com/imsweb/algorithms/ruralurban/RuralUrbanUtils.java b/src/main/java/com/imsweb/algorithms/ruralurban/RuralUrbanUtils.java index d1909b0..e7caef9 100644 --- a/src/main/java/com/imsweb/algorithms/ruralurban/RuralUrbanUtils.java +++ b/src/main/java/com/imsweb/algorithms/ruralurban/RuralUrbanUtils.java @@ -34,6 +34,7 @@ public final class RuralUrbanUtils { public static final String BEALE_CATEGORY_1993 = "1993"; public static final String BEALE_CATEGORY_2003 = "2003"; public static final String BEALE_CATEGORY_2013 = "2013"; + public static final String BEALE_CATEGORY_2023 = "2023"; public static final String TRACT_CATEGORY_2000 = "2000"; public static final String TRACT_CATEGORY_2010 = "2010"; @@ -135,7 +136,6 @@ else if (input.countyIsNotReported()) * * All those properties are defined as constants in this class. *

- * The returned urban rural commuting area will have the following values depending on the year (1993, 2003, or 2013): * The returned urban rural commuting area will have the following values depending on the census tract (2000, or 2010): *