This commit is contained in:
Saran Ahluwalia 2021-12-20 13:43:31 -05:00
commit 0db9526659
49 changed files with 695 additions and 487 deletions

9
.github/workflows/README.md vendored Normal file
View file

@ -0,0 +1,9 @@
# Justice40 Github Actions Workflows
This directory has the github actions workflows for the Justice40 Project.
This project is deployed on an AWS account managed by [GeoPlatform.gov](https://www.geoplatform.gov/), and github actions is used to automate the data pipeline and all deployment steps.
The names of the Github Actions stages in the yaml files should describe what each step does, so it is best to refer there to understand the latest of what everything is doing.
To mitigate the risk of having this README quickly become outdated as the project evolves, avoid documenting anything application or data pipeline specific here. Instead, go back up to the [top level project README](/README.md) and refer to the documentation on those components directly.

View file

@ -0,0 +1,10 @@
name: Check Markdown links
on:
push:
pull_request:
jobs:
markdown-link-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: gaurav-nelson/github-action-markdown-link-check@v1

View file

@ -12,5 +12,5 @@ Los mantenedores del proyecto tienen el derecho y la obligación de eliminar, ed
Los casos de abuso, acoso o de otro comportamiento inaceptable se pueden denunciar abriendo un problema o contactando con uno o más de los mantenedores del proyecto en justice40open@usds.gov. Los casos de abuso, acoso o de otro comportamiento inaceptable se pueden denunciar abriendo un problema o contactando con uno o más de los mantenedores del proyecto en justice40open@usds.gov.
Este Código de conducta es una adaptación de la versión 1.0.0 del Convenio del colaborador ([Contributor Covenant](contributor-covenant.org), *en inglés*) disponible en el sitio http://contributor-covenant.org/version/1/0/0/ *(en inglés)*. Este Código de conducta es una adaptación de la versión 1.0.0 del Convenio del colaborador ([Contributor Covenant](http://contributor-covenant.org), *en inglés*) disponible en el sitio http://contributor-covenant.org/version/1/0/0/ *(en inglés)*.

View file

@ -6,7 +6,7 @@
The following is a set of guidelines for contributing to the Justice40 Tool that lives in this repository. The following is a set of guidelines for contributing to the Justice40 Tool that lives in this repository.
Before contributing, we encourage you to also read our [LICENSE](https://github.com/usds/justice40-tool/blob/main/LICENSE) and [README](https://github.com/usds/justice40-tool/blob/main/README) files, also found in this repository. If you have any questions not answered by the content of this repository, please don't hesitate to [contact us](mailto:justice40open@usds.gov). Before contributing, we encourage you to also read our [LICENSE](LICENSE.md) and [README](README.md) files, also found in this repository. If you have any questions not answered by the content of this repository, please don't hesitate to [contact us](mailto:justice40open@usds.gov).
## Public Domain ## Public Domain

12
DATASETS.md Normal file
View file

@ -0,0 +1,12 @@
# Justice40 Datasets
This page contains web links to the datasets that are uploaded as part of our data pipeline, if you want to access them directly. Note that this is just a quick reference and the [Data Pipeline README](/data/data-pipeline/README.md) has the comprehensive documentation on all these datasets.
> Note: These currently aren't updated on any specific cadence, so be aware of this if you know that the dataset you are using might change frequently.
- Census data, generated by the [Generate Census Github Action](https://github.com/usds/justice40-tool/blob/main/.github/workflows/generate-census.yml): <https://justice40-data.s3.us-east-1.amazonaws.com/data-sources/census.zip>
- Score data, generated by the [Generate Score Github Action](https://github.com/usds/justice40-tool/blob/main/.github/workflows/generate-score.yml): <https://justice40-data.s3.us-east-1.amazonaws.com/data-pipeline/data/score/csv/full/usa.csv>
- EJScreen: <https://justice40-data.s3.amazonaws.com/data-pipeline/data/dataset/ejscreen_2019/usa.csv>
- Census ACS 2019: <https://justice40-data.s3.amazonaws.com/data-pipeline/data/dataset/census_acs_2019/usa.csv>
- Housing and Transportation Index: <https://justice40-data.s3.amazonaws.com/data-pipeline/data/dataset/housing_and_transportation_index/usa.csv>
- HUD Housing: <https://justice40-data.s3.amazonaws.com/data-pipeline/data/dataset/hud_housing/usa.csv>

View file

@ -56,5 +56,3 @@ Si bien se puede usar cualquier IDE, describimos cómo configurar VS Code
Para el desarrollo de front-end, lea el [Client README](client/README.md). Para el desarrollo de front-end, lea el [Client README](client/README.md).
Para el desorrollo de back-end, lea el [Data Pipeline README](data/data-pipeline/README.md). Para el desorrollo de back-end, lea el [Data Pipeline README](data/data-pipeline/README.md).
Para la implementación de software, lea el [Infrastructure README](infrastructure/README.md).

View file

@ -1,25 +1,30 @@
# Installing the Justice40 Tool # Justice40 Tool Installation
*[¡Lea esto en español!](INSTALLATION-es.md)* *[¡Lea esto en español!](INSTALLATION-es.md)*
## Required Software This page documents the installation steps for some of the software needed to work with this project.
You'll need the following set up in your environment before continuing to run the Justice40 Tool code.
- git, node, and an IDE > **NOTE: If you all you want to do is quickly run everything locally to try out the application, go straight to [`QUICKSTART.md`](QUICKSTART.md).**
### Install Git After the generic installation steps on this page, continue on to one of the following, depending on what you are trying to do:
#### MacOS - If you are working with the frontend, see [`client/README.md`](client/README.md).
- If you are working with the data pipeline, see [`data/data-pipeline/README.md`](data/data-pipeline/README.md).
- If you want to understand the current deployment process, see [`.github/workflows/README.md`](.github/workflows/README.md).
## Install Git
### MacOS
1. Open the terminal and type `git` and hit RETURN. 1. Open the terminal and type `git` and hit RETURN.
2. If dev tools are not installed a window will prompt you to install dev tools. 2. If dev tools are not installed a window will prompt you to install dev tools.
3. Open the terminal and type `git --version` and hit RETURN. 3. Open the terminal and type `git --version` and hit RETURN.
4. Validate that a version number is returned. If so, git is properly installed. 4. Validate that a version number is returned. If so, git is properly installed.
#### Win10 ### Win10
Download from [website](https://git-scm.com/download/win) Download from [website](https://git-scm.com/download/win)
## Install Homebrew (MacOS only)
### Install Homebrew (MacOS only)
Homebrew is an easy way to manage software downloads on MacOS. You don't *have* to use it, but we recommend it. Homebrew is an easy way to manage software downloads on MacOS. You don't *have* to use it, but we recommend it.
1. First, open your terminal and run `brew -v` to determine whether you have Homebrew installed. If you get a resopnse that looks something like `Homebrew 3.1.9`, you've already got it! If you get nothing back, or an error, continue. 1. First, open your terminal and run `brew -v` to determine whether you have Homebrew installed. If you get a resopnse that looks something like `Homebrew 3.1.9`, you've already got it! If you get nothing back, or an error, continue.
@ -29,15 +34,9 @@ Homebrew is an easy way to manage software downloads on MacOS. You don't *have*
2. Validate installation by typing `brew -v` in the terminal and ensure a version number is shown. 2. Validate installation by typing `brew -v` in the terminal and ensure a version number is shown.
### Install Node using NVM You should regularly run `brew update` and `brew doctor` to make sure your packages are up to date and in good condition.
This will work for both MacOS and Win10. Follow instructions on this [link](https://medium.com/@nodesource/installing-node-js-tutorial-using-nvm-5c6ff5925dd8). Be sure to read through the whole doc to find the sections within each step relevant to you (e.g. if you're using Homebrew, when you get to Step 2 look for the section, "Install NVM with Homebrew"). ## IDE set up (Optional)
If you install NVM using Homebrew, make sure to read the output in terminal after you run `brew install nvm`. You will need to add a few lines to your ~/.bash_profile and perhaps complete a couple other tasks.
Once you install NVM, don't forget to install Node! This is included in the linked tutorial above.
### IDE set up
While any IDE can be used, we're outlining how to set up VS Code While any IDE can be used, we're outlining how to set up VS Code
1. Open the terminal and type `brew install --cask visual-studio-code` and hit RETURN. 1. Open the terminal and type `brew install --cask visual-studio-code` and hit RETURN.
@ -49,7 +48,7 @@ While any IDE can be used, we're outlining how to set up VS Code
6. Type `gatsby develop` to spin up the app 6. Type `gatsby develop` to spin up the app
7. Navigate to `localhost:8000` to view the app 7. Navigate to `localhost:8000` to view the app
#### Recommended VS Code Extensions ### Recommended VS Code Extensions
1. [Browser Preview](https://github.com/auchenberg/vscode-browser-preview) 1. [Browser Preview](https://github.com/auchenberg/vscode-browser-preview)
2. [Live Server](https://github.com/ritwickdey/vscode-live-server) 2. [Live Server](https://github.com/ritwickdey/vscode-live-server)
@ -57,28 +56,7 @@ While any IDE can be used, we're outlining how to set up VS Code
4. [Live Share Audio](https://github.com/MicrosoftDocs/live-share) 4. [Live Share Audio](https://github.com/MicrosoftDocs/live-share)
5. [Live Share Extention Pack](https://github.com/MicrosoftDocs/live-share) 5. [Live Share Extention Pack](https://github.com/MicrosoftDocs/live-share)
## Install Docker
## Running the code Follow the [Docker installation
instructions](https://docs.docker.com/get-docker/) for your platform.
Once you have the required software installed and ready on your computer, you're ready to begin installing and running the Justice40 Tool code.
1. Fork this repository and create a clone locally. In your terminal/CLI, in the directory you wish to put this project, run `git clone` plus the URL of your fork.
1. If you're using a Mac and Homebrew, go ahead and run `brew update` and `brew doctor`. It's always good to run these regularly to make sure your packages are up to date and in good condition.
Now, check out the next section on the organization of this repository to determine where to go next.
### Repo organization
Our repo is organized into multiple directories (folders) to make it easier to work on and run different parts of the system independently.
The top level of the repo contains these directories, as well as project-wide documentation such as this INSTALLATION file, the README, LICENSE, CODE OF CONDUCT, etc.
There is also a docker-compose file that will eventually include everything you need to run every part of the application in one docker command; however, at the moment, this file only spins up the score creation part of our data pipeline.
**Running the client**
If you wish to check out our client-side code (i.e. the GatsbyJS statically generated website with the map), check out the `client` directory and its [README](client/README.md).
**Running the backend**
If you want to run the data pipeline with ETL and score generation, check out the `data/data-pipeline` directory and its [README](data/data-pipeline/README.md).
**Deployment**
For core team contributors working on deployment, check out the `infrastructure` directory and its [README](infrastructure/README.md) for information on deploying the backend to AWS.

View file

@ -6,7 +6,7 @@
- Lucas Brown - lucasmbrown-usds - Lucas Brown - lucasmbrown-usds
## Ingeniería ## Ingeniería
Consultar la lista definitiva en [archivo CODEOWNERS](./github/CODEOWNERS). Consultar la lista definitiva en [archivo CODEOWNERS](/.github/CODEOWNERS).
- Shelby Switzer - switzersc-usds - dirección de ingeniería - Shelby Switzer - switzersc-usds - dirección de ingeniería
- Jorge Escobar - esfoobar-usds - Jorge Escobar - esfoobar-usds

View file

@ -6,7 +6,7 @@
- Lucas Brown - lucasmbrown-usds - Lucas Brown - lucasmbrown-usds
## Engineering ## Engineering
See [CODEOWNERS file](./github/CODEOWNERS) for definitive list. See [CODEOWNERS file](/.github/CODEOWNERS) for definitive list.
- Shelby Switzer - switzersc-usds - engineering lead - Shelby Switzer - switzersc-usds - engineering lead
- Jorge Escobar - esfoobar-usds - Jorge Escobar - esfoobar-usds

23
QUICKSTART.md Normal file
View file

@ -0,0 +1,23 @@
# Local Quickstart
Install [`git`](https://git-scm.com/). See [Install Git](INSTALLATION.md#install-git).
Open a terminal, clone this repository, and change directory to the repository root:
```sh
$ git clone https://github.com/usds/justice40-tool
Cloning into 'justice40-tool'...
$ cd justice40-tool
```
Install [`docker`](https://www.docker.com/). See [Install Docker](INSTALLATION.md#install-docker).
> *Important*: To be able to run the entire application, you may need to increase the memory allocated for docker to at least 8096 MB. See [this post](https://stackoverflow.com/a/44533437) for more details.
Use `docker-compose` to run the application:
```sh
$ docker-compose up
```
After it initializes (which may take a while, possibly even an hour or two, since it has to download and process all the data), you should be able to open the application in your browser at [http://localhost:8000](http://localhost:8000).

View file

@ -1,5 +1,5 @@
# Herramienta Justice40 # Herramienta Justice40
[![CC0 License](https://img.shields.io/badge/license-CCO--1.0-brightgreen)](https://github.com/usds/justice40-tool/blob/main/LICENSE) [![CC0 License](https://img.shields.io/badge/license-CCO--1.0-brightgreen)](https://github.com/usds/justice40-tool/blob/main/LICENSE.md)
*[Read this in English!](README.md)* *[Read this in English!](README.md)*
@ -18,7 +18,7 @@ En la realización de esta herramienta, el método de código abierto que usa el
Sabemos que podemos aprender de comunidades muy distintas (incluidas las que usarán la herramienta o se verán afectadas por esta) que tienen gran experiencia en la ciencia o la tecnología de datos, o en el trabajo en favor del clima y de la justicia económica o ambiental. Nos dedicamos a crear foros para facilitar la conversación y los comentarios continuos con objeto de conformar el diseño y el desarrollo de la herramienta. Sabemos que podemos aprender de comunidades muy distintas (incluidas las que usarán la herramienta o se verán afectadas por esta) que tienen gran experiencia en la ciencia o la tecnología de datos, o en el trabajo en favor del clima y de la justicia económica o ambiental. Nos dedicamos a crear foros para facilitar la conversación y los comentarios continuos con objeto de conformar el diseño y el desarrollo de la herramienta.
Asimismo, reconocemos que la generación de capacidad es indispensable para incluir a una comunidad diversa de código abierto. Estamos procurando usar lenguaje accesible, proporcionar documentación técnica y sobre procesos en varios idiomas, y ofrecer asistencia, sea directamente o en forma de chats de grupo y de capacitación, a los miembros de nuestra comunidad que poseen gran variedad de conocimientos y habilidades. Si tiene ideas acerca de cómo podemos mejorar o ampliar nuestro trabajo para generar capacidad y de métodos para atraer a los usuarios a nuestra comunidad, comuníquese con nosotros en el [Grupo de Google]((https://groups.google.com/u/4/g/justice40-open-source)) *(en inglés)* o por correo electrónico en justice40open@usds.gov. Asimismo, reconocemos que la generación de capacidad es indispensable para incluir a una comunidad diversa de código abierto. Estamos procurando usar lenguaje accesible, proporcionar documentación técnica y sobre procesos en varios idiomas, y ofrecer asistencia, sea directamente o en forma de chats de grupo y de capacitación, a los miembros de nuestra comunidad que poseen gran variedad de conocimientos y habilidades. Si tiene ideas acerca de cómo podemos mejorar o ampliar nuestro trabajo para generar capacidad y de métodos para atraer a los usuarios a nuestra comunidad, comuníquese con nosotros en el [Grupo de Google](https://groups.google.com/u/4/g/justice40-open-source) *(en inglés)* o por correo electrónico en justice40open@usds.gov.
### Chats de la comunidad ### Chats de la comunidad
Cada dos semanas, llevamos a cabo sesiones de chat para la comunidad de código abierto los lunes de 5 a 6 p. m. hora del Este. Nuestro [Grupo de Google](https://groups.google.com/u/4/g/justice40-open-source) *(en inglés)*, proporciona información acerca de los temas que se tratarán en esas sesiones y de cómo puede participar en estas. Cada dos semanas, llevamos a cabo sesiones de chat para la comunidad de código abierto los lunes de 5 a 6 p. m. hora del Este. Nuestro [Grupo de Google](https://groups.google.com/u/4/g/justice40-open-source) *(en inglés)*, proporciona información acerca de los temas que se tratarán en esas sesiones y de cómo puede participar en estas.

View file

@ -1,5 +1,5 @@
# Justice40 Tool # Justice40 Tool
[![CC0 License](https://img.shields.io/badge/license-CCO--1.0-brightgreen)](https://github.com/usds/justice40-tool/blob/main/LICENSE) [![CC0 License](https://img.shields.io/badge/license-CCO--1.0-brightgreen)](https://github.com/usds/justice40-tool/blob/main/LICENSE.md)
*[¡Lea esto en español!](README-es.md)* *[¡Lea esto en español!](README-es.md)*
@ -8,8 +8,7 @@ Welcome to the Justice40 Open Source Community! This repo contains the code, pro
## Background ## Background
The Justice40 initiative and screening tool were announced in an [Executive Order](https://www.whitehouse.gov/briefing-room/presidential-actions/2021/01/27/executive-order-on-tackling-the-climate-crisis-at-home-and-abroad/) in January 2021, with the goal to launch an MVP of the tool by July 27, 2021. This tool will include interactive maps and an initial draft scorecard which federal agencies can use to prioritize historically overburdened and underserved communities for benefits in their programs. The Justice40 initiative and screening tool were announced in an [Executive Order](https://www.whitehouse.gov/briefing-room/presidential-actions/2021/01/27/executive-order-on-tackling-the-climate-crisis-at-home-and-abroad/) in January 2021, with the goal to launch an MVP of the tool by July 27, 2021. This tool will include interactive maps and an initial draft scorecard which federal agencies can use to prioritize historically overburdened and underserved communities for benefits in their programs.
Please see our [Open Source Community Orientation](docs/Justice40_Open_Source_Community_Orientation.pptx) deck for more information on the Justice40 initiative, our team, Please see our [Open Source Community Orientation](docs/Justice40_Open_Source_Community_Orientation.pptx) deck for more information on the Justice40 initiative, our team, this project, and ways to participate.
this project, and ways to participate.
## Core team ## Core team
The core Justice40 team building this tool is a small group of designers, developers, and product managers from the US Digital Service in partnership with the Council on Environmental Quality (CEQ). The core Justice40 team building this tool is a small group of designers, developers, and product managers from the US Digital Service in partnership with the Council on Environmental Quality (CEQ).
@ -44,9 +43,23 @@ Contributions are always welcome! We encourage contributions in the form of disc
See [CONTRIBUTING.md](CONTRIBUTING.md) for ways to get started. See [CONTRIBUTING.md](CONTRIBUTING.md) for ways to get started.
## Installation ## For Developers and Data Scientists
The installation is a typical gatsby install and the details can be found in [INSTALLATION.md](https://github.com/usds/justice40-tool/blob/main/INSTALLATION.md) ### Datasets
The intermediate steps of the data pipeline and the final output that is consumed by the frontend are all public and can be accessed directly. See [DATASETS.md](DATASETS.md) for these direct download links.
### Local Quickstart
If you want to run the entire application locally, see [QUICKSTART.md](QUICKSTART.md).
### Advanced Guides
If you have software experience or more specific use cases, start at [INSTALLATION.md](INSTALLATION.md) for more in depth documentation of how to work with this project.
### Project Documentation
For more general documentation on the project that is not related to getting set up, including architecture diagrams and engineering decision logs, see [docs/](docs/).
## Glossary ## Glossary

View file

@ -16,8 +16,21 @@ This README contains the following content:
## Installing and running the client site ## Installing and running the client site
### Via npm ### Via npm
1. Confirm you have the base required software installed. See [INSTALLATION](INSTALLATION.md) for more details.
1. Install yarn if you do not have it yet. Open your terminal and run `sudo npm install -global yarn`. This works on MacOS and Win10. To confirm it is installed, run `yarn -v`. A version number should be returned. #### Install Node using NVM
This will work for both MacOS and Win10. Follow instructions on this [link](https://medium.com/@nodesource/installing-node-js-tutorial-using-nvm-5c6ff5925dd8). Be sure to read through the whole doc to find the sections within each step relevant to you (e.g. if you're using Homebrew, when you get to Step 2 look for the section, "Install NVM with Homebrew").
If you install NVM using Homebrew, make sure to read the output in terminal after you run `brew install nvm`. You will need to add a few lines to your ~/.bash_profile and perhaps complete a couple other tasks.
Once you install NVM, don't forget to install Node! This is included in the linked tutorial above. This will also install `npm` which you need for the steps below.
#### Install Yarn
Install yarn if you do not have it yet. Open your terminal and run `sudo npm install -global yarn`. This works on MacOS and Win10. To confirm it is installed, run `yarn -v`. A version number should be returned.
#### Run The Application
1. Navigate to the base directory of this repository, and go to the `client` directory (`cd client`). 1. Navigate to the base directory of this repository, and go to the `client` directory (`cd client`).
1. Run the command `npm install` to install the dependencies. 1. Run the command `npm install` to install the dependencies.
1. Run `npm start` to start up the client app. 1. Run `npm start` to start up the client app.
@ -62,7 +75,7 @@ DATA_SOURCE env variable in the docker-compose.yml. See [environment variables](
### Viewing data on the map ### Viewing data on the map
See [VIEW_MAP_DATA](./VIEW_MAP_DATA) for more details on this. See [VIEW_MAP_DATA.md](./VIEW_MAP_DATA.md) for more details on this.
## Linting and Formatting ## Linting and Formatting
@ -159,7 +172,7 @@ When developing, to use a flag:
1. Pass the Gatsby-provided `location` variable to your component. You have several options here: 1. Pass the Gatsby-provided `location` variable to your component. You have several options here:
1. If your page uses the `Layout` [component](src/components/layout.tsx), you automatically get `URLFlagProvider` (see [FlagContext](src/contexts/FlagContext.tsx) for more info). 1. If your page uses the `Layout` [component](src/components/layout.tsx), you automatically get `URLFlagProvider` (see [FlagContext](src/contexts/FlagContext.tsx) for more info).
2. If your page does not use `Layout`, you need to surround your component with a `URLFlagProvider` component and pass `location`. You can get `location` from the default props of the page (more [here](https://www.gatsbyjs.com/docs/location-data-from-props/)). See [Index.tsx](src/pages/index.tsx) for an example. 2. If your page does not use `Layout`, you need to surround your component with a `URLFlagProvider` component and pass `location`. You can get `location` from the default props of the page (more [here](https://www.gatsbyjs.com/docs/location-data-from-props/)). See [Index.tsx](src/pages/index.tsx) for an example.
2. Use the `useFlags()` hook to get access to an array of flags, and check this array for the presence of the correct feature identifier. See [J40Header](src/components/J40Header.tsx) for an example. 2. Use the `useFlags()` hook to get access to an array of flags, and check this array for the presence of the correct feature identifier. See [J40Header](src/components/J40Header/J40Header.tsx) for an example.
#### When to use flags: #### When to use flags:

View file

@ -22,7 +22,7 @@ Feature: All links on About page are functional
Scenario: People can find how to Send feedback Scenario: People can find how to Send feedback
Given I am on the "About" page Given I am on the "About" page
When I look for the "Send feedback" CTA When I look for the "Send feedback" CTA
Then the link should allow client to send an email to "screeningtool.feedback@usds.gov" Then the link should allow client to send an email to "Screeningtool-Support@omb.eop.gov"
Scenario: Open source community can find and click on their CTA Scenario: Open source community can find and click on their CTA
Given I am on the "About" page Given I am on the "About" page

View file

@ -9,10 +9,14 @@ $sidePanelLabelFontColor: #171716;
font-weight: 600; font-weight: 600;
} }
@mixin thresholdExceeded {
font-size: medium;
@include u-margin-top('05');
}
.versionInfo { .versionInfo {
padding: .5rem 1rem .5rem 1.2rem; padding: .5rem 1rem .5rem 1.2rem;
font-size: medium; font-size: medium;
font-weight: bold;
border-bottom: 1px solid $sidePanelBorderColor; border-bottom: 1px solid $sidePanelBorderColor;
} }
@ -26,7 +30,7 @@ $sidePanelLabelFontColor: #171716;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
padding-bottom: 2rem; @include u-padding-bottom(3);
.isInFocus { .isInFocus {
padding: .5rem 1rem .25rem 1.2rem; padding: .5rem 1rem .25rem 1.2rem;
@ -44,6 +48,17 @@ $sidePanelLabelFontColor: #171716;
} }
} }
.showThresholdExceed {
@include thresholdExceeded;
display: block;
}
.hideThresholdExceed {
@include thresholdExceeded;
visibility: hidden;
}
.feedbackLink { .feedbackLink {
font-size: small; font-size: small;
@include u-margin-top(1); @include u-margin-top(1);
@ -67,13 +82,3 @@ $sidePanelLabelFontColor: #171716;
font-size: medium; font-size: medium;
} }
} }
//Divider styles
.divider {
@include sidePanelLabelStyle;
display: flex;
justify-content: space-between;
padding: 0.5rem 0.5rem 0.5rem 1.2rem;
border-top: 1px solid $sidePanelBorderColor;
border-bottom: 1px solid $sidePanelBorderColor;
}

View file

@ -3,14 +3,14 @@ declare namespace MapModuleScssNamespace {
areaDetailContainer: string; areaDetailContainer: string;
categorization:string; categorization:string;
communityOfFocus:string; communityOfFocus:string;
communityOfFocusCircle:string;
censusRow:string; censusRow:string;
censusLabel:string; censusLabel:string;
censusText: string; censusText: string;
divider:string;
feedbackLink:string; feedbackLink:string;
isInFocus:string; isInFocus:string;
versionInfo: string; versionInfo: string;
showThresholdExceed:string;
hideThresholdExceed:string;
} }
} }

View file

@ -1,7 +1,7 @@
/* eslint-disable quotes */ /* eslint-disable quotes */
// External Libs: // External Libs:
import React from 'react'; import React from 'react';
import {useIntl} from 'gatsby-plugin-intl'; import {useIntl, FormattedMessage} from 'gatsby-plugin-intl';
import {Accordion} from '@trussworks/react-uswds'; import {Accordion} from '@trussworks/react-uswds';
// Components: // Components:
@ -234,14 +234,14 @@ const AreaDetail = ({properties}:IAreaDetailProps) => {
isDisadvagtaged: properties[constants.IS_GTE_90_BELOW_100_POVERTY_AND_LOW_HIGH_SCHOOL_EDU] ? isDisadvagtaged: properties[constants.IS_GTE_90_BELOW_100_POVERTY_AND_LOW_HIGH_SCHOOL_EDU] ?
properties[constants.IS_GTE_90_BELOW_100_POVERTY_AND_LOW_HIGH_SCHOOL_EDU] : null, properties[constants.IS_GTE_90_BELOW_100_POVERTY_AND_LOW_HIGH_SCHOOL_EDU] : null,
}; };
// const highSchool:indicatorInfo = { const highSchool:indicatorInfo = {
// label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.HIGH_SCL), label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.HIGH_SCL),
// description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.HIGH_SKL), description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.HIGH_SKL),
// value: properties[constants.HIGH_SCHOOL_PROPERTY_PERCENTILE] ? value: properties[constants.HIGH_SCHOOL_PROPERTY_PERCENTILE] ?
// properties[constants.HIGH_SCHOOL_PROPERTY_PERCENTILE] : null, properties[constants.HIGH_SCHOOL_PROPERTY_PERCENTILE] : null,
// isDisadvagtaged: properties[constants.IS_GTE_90_BELOW_100_POVERTY_AND_LOW_HIGH_SCHOOL_EDU] ? isDisadvagtaged: properties[constants.IS_GTE_90_UNEMPLOYMENT_AND_LOW_HIGH_SCHOOL_EDU] ?
// properties[constants.IS_GTE_90_BELOW_100_POVERTY_AND_LOW_HIGH_SCHOOL_EDU] : null, properties[constants.IS_GTE_90_UNEMPLOYMENT_AND_LOW_HIGH_SCHOOL_EDU] : null,
// }; };
// Aggregate indicators based on categories // Aggregate indicators based on categories
const categories = [ const categories = [
@ -297,7 +297,7 @@ const AreaDetail = ({properties}:IAreaDetailProps) => {
{ {
id: 'work-dev', id: 'work-dev',
titleText: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_CATEGORY.WORK_DEV), titleText: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_CATEGORY.WORK_DEV),
indicators: [lowMedInc, lingIso, unemploy, poverty], indicators: [lowMedInc, lingIso, unemploy, poverty, highSchool],
isDisadvagtaged: properties[constants.IS_WORKFORCE_FACTOR_DISADVANTAGED_L] ? isDisadvagtaged: properties[constants.IS_WORKFORCE_FACTOR_DISADVANTAGED_L] ?
properties[constants.IS_WORKFORCE_FACTOR_DISADVANTAGED_L] : null, properties[constants.IS_WORKFORCE_FACTOR_DISADVANTAGED_L] : null,
}, },
@ -369,8 +369,22 @@ const AreaDetail = ({properties}:IAreaDetailProps) => {
<h3>{EXPLORE_COPY.COMMUNITY.NOT_OF_FOCUS}</h3> <h3>{EXPLORE_COPY.COMMUNITY.NOT_OF_FOCUS}</h3>
} }
</div> </div>
<div className={
properties[constants.TOTAL_NUMBER_OF_DISADVANTAGE_INDICATORS] > 0 ?
styles.showThresholdExceed : styles.hideThresholdExceed
}>
<FormattedMessage
id={'explore.page.threshold.count.exceed'}
description={"threshold exceeded count"}
defaultMessage={'{disadvCount} of {totalCount} thresholds exceeded'}
values={{
disadvCount: properties[constants.TOTAL_NUMBER_OF_DISADVANTAGE_INDICATORS],
totalCount: constants.TOTAL_NUMBER_OF_INDICATORS,
}}/>
</div>
{/* eslint-disable-next-line max-len */} {/* eslint-disable-next-line max-len */}
{/* <a className={styles.feedbackLink} href={sidePanelFeedbackHref}>{EXPLORE_COPY.COMMUNITY.SEND_FEEDBACK}</a> */} {/* <a className={styles.feedbackLink} href={sidePanelFeedbackHref}>{EXPLORE_COPY.COMMUNITY.SEND_FEEDBACK}</a> */}
</div> </div>
{/* All category accordions in this component */} {/* All category accordions in this component */}

View file

@ -52,6 +52,9 @@ exports[`rendering of the AreaDetail checks if various text fields are visible 1
</h3> </h3>
<div /> <div />
</div> </div>
<div>
of 21 thresholds exceeded
</div>
</div> </div>
<div <div
aria-multiselectable="true" aria-multiselectable="true"
@ -127,7 +130,9 @@ exports[`rendering of the AreaDetail checks if various text fields are visible 1
<div> <div>
Expected population loss rate Expected population loss rate
<div> <div>
Economic loss rate to the population in fatalities and injuries resulting from natural hazards
Rate relative to the population in fatalities and injuries resulting from natural hazards each year
</div> </div>
</div> </div>
<div> <div>
@ -171,7 +176,7 @@ exports[`rendering of the AreaDetail checks if various text fields are visible 1
> >
<div> <div>
<div> <div>
Clean, efficient energy Clean energy and energy efficiency
</div> </div>
<div <div
class="" class=""
@ -192,7 +197,7 @@ exports[`rendering of the AreaDetail checks if various text fields are visible 1
<div> <div>
Energy cost burden Energy cost burden
<div> <div>
Energy costs divided by household income Average annual energy costs divided by household income
</div> </div>
</div> </div>
<div> <div>
@ -208,7 +213,7 @@ exports[`rendering of the AreaDetail checks if various text fields are visible 1
> >
<div> <div>
<div> <div>
PM2.5 PM2.5 in the air
<div> <div>
Fine inhalable particles, 2.5 micrometers and smaller Fine inhalable particles, 2.5 micrometers and smaller
</div> </div>
@ -273,7 +278,7 @@ exports[`rendering of the AreaDetail checks if various text fields are visible 1
> >
<div> <div>
<div> <div>
Diesel particulate matter Diesel particulate matter exposure
<div> <div>
Diesel exhaust in the air Diesel exhaust in the air
</div> </div>
@ -291,7 +296,7 @@ exports[`rendering of the AreaDetail checks if various text fields are visible 1
> >
<div> <div>
<div> <div>
Traffic Traffic proximity and volume
<div> <div>
Count of vehicles at major roads within 500 meters Count of vehicles at major roads within 500 meters
</div> </div>
@ -378,7 +383,7 @@ exports[`rendering of the AreaDetail checks if various text fields are visible 1
<div> <div>
Lead paint Lead paint
<div> <div>
Pre-1960 housing Percent of pre-1960 housing with a median home value is at or below 90th
</div> </div>
</div> </div>
<div> <div>
@ -477,7 +482,7 @@ exports[`rendering of the AreaDetail checks if various text fields are visible 1
> >
<div> <div>
<div> <div>
Proximity to RMP sites Proximity to RMP facilities
<div> <div>
Risk Management Plan facilities within 5 km Risk Management Plan facilities within 5 km
</div> </div>
@ -523,7 +528,7 @@ exports[`rendering of the AreaDetail checks if various text fields are visible 1
> >
<div> <div>
<div> <div>
Clean water and waste Clean water and waste infrastructure
</div> </div>
<div <div
class="" class=""
@ -609,7 +614,7 @@ exports[`rendering of the AreaDetail checks if various text fields are visible 1
<div> <div>
Asthma Asthma
<div> <div>
Number of people who have been told they have asthma Weighted percent of people who have been told they have asthma
</div> </div>
</div> </div>
<div> <div>
@ -627,7 +632,10 @@ exports[`rendering of the AreaDetail checks if various text fields are visible 1
<div> <div>
Diabetes Diabetes
<div> <div>
People ages 18 years and older who have diabetes other than diabetes during pregnancy
Weighted percent of people ages 18 years and older who have diabetes other than
diabetes during pregnancy
</div> </div>
</div> </div>
<div> <div>
@ -645,7 +653,9 @@ exports[`rendering of the AreaDetail checks if various text fields are visible 1
<div> <div>
Heart disease Heart disease
<div> <div>
People ages 18 years and older who have been told they have heart disease
Weighted percent of people ages 18 years and older who have been told they have heart disease
</div> </div>
</div> </div>
<div> <div>
@ -746,8 +756,9 @@ exports[`rendering of the AreaDetail checks if various text fields are visible 1
<div> <div>
Linguistic isolation Linguistic isolation
<div> <div>
Households in which no one age 14 and over speaks English only or also speaks
a language other than English Percent of limited speaking households, which are households where no one over age 14 speaks English well
</div> </div>
</div> </div>
<div> <div>
@ -787,8 +798,10 @@ exports[`rendering of the AreaDetail checks if various text fields are visible 1
<div> <div>
Poverty Poverty
<div> <div>
Percent of individuals in households where the household income is at or
below 100% of the federal poverty level Percent of a tract's population in households where the household income is at or below
100% of the federal poverty level
</div> </div>
</div> </div>
<div> <div>
@ -801,6 +814,26 @@ exports[`rendering of the AreaDetail checks if various text fields are visible 1
</div> </div>
</div> </div>
</li> </li>
<li
data-cy="indicatorBox"
>
<div>
<div>
High school degree achievement rate
<div>
Percent of people ages 25 years or older whose education level is less than a high school diploma
</div>
</div>
<div>
N/A
<sup>
<span />
</sup>
</div>
</div>
</li>
</div> </div>
</div> </div>
</aside> </aside>

View file

@ -7,11 +7,11 @@ exports[`rendering of the BetaBanner checks if component renders 1`] = `
<div /> <div />
<div> <div>
<span> <span>
This is a Beta site. This is a beta site.
</span> </span>
<span> <span>
It is an early, in-progress version of the tool with limited data It is an early, in-progress version of the tool with limited datasets
sets that will be continuously updated. that will be continuously updated.
</span> </span>
</div> </div>
</div> </div>

View file

@ -85,13 +85,13 @@ exports[`rendering of the Categories checks if component renders 1`] = `
<a <a
href="#energy-burden" href="#energy-burden"
> >
energy cost burden score energy cost burden
</a> </a>
OR score OR
<a <a
href="#pm-25" href="#pm-25"
> >
PM2.5 PM2.5 in the air
</a> </a>
@ -126,7 +126,7 @@ exports[`rendering of the Categories checks if component renders 1`] = `
<a <a
href="#diesel-pm" href="#diesel-pm"
> >
diesel particulate matter diesel particulate matter exposure
</a> </a>
or or
<a <a
@ -173,10 +173,10 @@ exports[`rendering of the Categories checks if component renders 1`] = `
<a <a
href="#median-home" href="#median-home"
> >
the median home value low median home value
</a> </a>
is less than is at or less than
90th percentile OR at or above the 90th percentile for the 90th percentile OR at or above the 10th percentile for the
<a <a
href="#house-burden" href="#house-burden"
> >
@ -221,13 +221,13 @@ exports[`rendering of the Categories checks if component renders 1`] = `
<a <a
href="#prox-npl" href="#prox-npl"
> >
proximity to NLP sites proximity to NPL sites
</a> </a>
OR OR
<a <a
href="#prox-rmp" href="#prox-rmp"
> >
proximity to RMP sites proximity to RMP facilities
</a> </a>
@ -346,14 +346,14 @@ exports[`rendering of the Categories checks if component renders 1`] = `
<strong> <strong>
IF IF
</strong> </strong>
at or above 90th percentile for at or above the 90th percentile for
<a <a
href="#low-med-inc" href="#low-med-inc"
> >
low median income relative to area median income low median income
</a> </a>
OR as a percent of area median income OR
at or above the 90th percentile for
<a <a
href="#ling-iso" href="#ling-iso"
> >
@ -367,13 +367,13 @@ exports[`rendering of the Categories checks if component renders 1`] = `
unemployment unemployment
</a> </a>
OR OR
for percentage individuals in households at or below 100% federal percent individuals in households at or below 100% federal
<a <a
href="#poverty" href="#poverty"
> >
poverty poverty
</a> </a>
level at or above 90% level
</p> </p>
<p> <p>
@ -388,7 +388,7 @@ exports[`rendering of the Categories checks if component renders 1`] = `
> >
the high school degree achievement rates the high school degree achievement rates
</a> </a>
for adults 25 years and older is less than 90% for adults 25 years and older is at or less than 90%
</p> </p>
<p> <p>

View file

@ -3,4 +3,8 @@
.categoryContainer { .categoryContainer {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
.category {
flex-basis: 80%;
}
} }

View file

@ -1,6 +1,7 @@
declare namespace CategoryNamespace { declare namespace CategoryNamespace {
export interface ICategoryScss { export interface ICategoryScss {
categoryContainer: string; categoryContainer: string;
category:string;
disadvantageDot: string; disadvantageDot: string;
} }
} }

View file

@ -11,7 +11,7 @@ interface ICategory {
const Category = ({name, isDisadvantaged}:ICategory) => { const Category = ({name, isDisadvantaged}:ICategory) => {
return ( return (
<div className={styles.categoryContainer}> <div className={styles.categoryContainer}>
<div> <div className={styles.category}>
{name} {name}
</div> </div>
<DisadvantageDot isDisadvantaged={isDisadvantaged}/> <DisadvantageDot isDisadvantaged={isDisadvantaged}/>

View file

@ -6,7 +6,7 @@ exports[`rendering of indicator dataset card checks if component renders 1`] = `
id="low-income" id="low-income"
> >
<h3> <h3>
Low Income Low income
</h3> </h3>
<div> <div>

View file

@ -36,7 +36,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
id="low-income" id="low-income"
> >
<h3> <h3>
Low Income Low income
</h3> </h3>
<div> <div>
@ -75,11 +75,15 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
id="exp-agr-loss-rate" id="exp-agr-loss-rate"
> >
<h3> <h3>
Expected Agriculture Loss Rate Expected agriculture loss rate
</h3> </h3>
<div> <div>
Economic loss rate to agriculture resulting from natural hazards each year. Percent of agriculture value at risk from losses due to natural hazards. Calculated by dividing
the agriculture value at risk in a census tract by the total agriculture value in that census
tract. Fourteen natural hazards that have some link to climate change include: avalanche,
coastal flooding, cold wave, drought, hail, heat wave, hurricane, ice storm, landslide,
riverine flooding, strong wind, tornado, wildfire, and winter weather.
</div> </div>
<ul> <ul>
@ -113,11 +117,15 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
id="exp-bld-loss-rate" id="exp-bld-loss-rate"
> >
<h3> <h3>
Expected Building Loss Rate Expected building loss rate
</h3> </h3>
<div> <div>
Economic loss rate to buildings resulting from natural hazards each year. Percent of building value at risk from losses due to natural hazards. Calculated by dividing the
building value at risk in a census tract by the total building value in that census tract.
Fourteen natural hazards that have some link to climate change include: avalanche, coastal flooding,
cold wave, drought, hail, heat wave, hurricane, ice storm, landslide, riverine flooding, strong
wind, tornado, wildfire, and winter weather.
</div> </div>
<ul> <ul>
@ -151,18 +159,22 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
id="exp-pop-loss-rate" id="exp-pop-loss-rate"
> >
<h3> <h3>
Expected Population Loss Rate Expected population loss rate
</h3> </h3>
<div> <div>
Rate relative to the population in fatalities and injuries resulting from natural hazards each Rate relative to the population in fatalities and injuries due to natural hazards each year.
year. Population loss is defined as the Spatial Hazard Events and Losses or National Centers Fourteen natural hazards that have some link to climate change include: avalanche, coastal
for Environmental Informations reported number of fatalities and injuries caused by the flooding, cold wave, drought, hail, heat wave, hurricane, ice storm, landslide, riverine
hazard occurrence. To combine fatalities and injuries for the computation of population loss value, flooding, strong wind, tornado, wildfire, and winter weather.
an injury is counted as one-tenth (1/10) of a fatality. The NCEI Storm Events Database Population loss is defined as the Spatial Hazard Events and Losses or National Centers
classifies injuries and fatalities as direct or indirect. Both direct and indirect injuries for Environmental Informations (NCEI) reported number of fatalities and injuries caused by the
and fatalities are counted as population loss. This total number of injuries and fatalities is hazard occurrence. To combine fatalities and injuries for the computation of population loss value,
then divided by the population in the census tract to get a per-capita rate of population risk. an injury is counted as one-tenth (1/10) of a fatality. The NCEI Storm Events Database
classifies injuries and fatalities as direct or indirect. Both direct and indirect injuries
and fatalities are counted as population loss. This total number of injuries and fatalities
is then divided by the population in the census tract to get a per-capita rate of population risk.
</div> </div>
<ul> <ul>
@ -196,7 +208,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
id="energy-burden" id="energy-burden"
> >
<h3> <h3>
Energy burden Energy cost burden
</h3> </h3>
<div> <div>
Average annual energy cost ($) divided by household income. Average annual energy cost ($) divided by household income.
@ -232,7 +244,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
id="pm-25" id="pm-25"
> >
<h3> <h3>
PM2.5 PM2.5 in the air
</h3> </h3>
<div> <div>
Fine inhalable particles, with diameters that are generally Fine inhalable particles, with diameters that are generally
@ -270,7 +282,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
id="diesel-pm" id="diesel-pm"
> >
<h3> <h3>
Diesel particulate matter Diesel particulate matter exposure
</h3> </h3>
<div> <div>
Mixture of particles that is part of diesel exhaust in the air. Mixture of particles that is part of diesel exhaust in the air.
@ -347,8 +359,10 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
Housing cost burden Housing cost burden
</h3> </h3>
<div> <div>
Households that are low income and spend more than 30% of their
income to housing costs. The percent of households in a census tract that are both earning less than 80% of HUD Area Median
Family Income by county and are paying greater than 30% of their income to housing costs.
</div> </div>
<ul> <ul>
<li> <li>
@ -385,8 +399,9 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
Lead paint Lead paint
</h3> </h3>
<div> <div>
Percent of housing units built pre-1960, used as an
indicator of potential lead paint exposure in homes. Percent of housing units built pre-1960, used as an indicator of potential lead paint exposure in
tracts with median home values less than 90th percentile
</div> </div>
<ul> <ul>
<li> <li>
@ -419,10 +434,10 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
id="median-home" id="median-home"
> >
<h3> <h3>
Median home value Low median home value
</h3> </h3>
<div> <div>
Median home value of owner-occupied housing units in the area. Median home value of owner-occupied housing units in the census tract.
</div> </div>
<ul> <ul>
<li> <li>
@ -459,8 +474,8 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
</h3> </h3>
<div> <div>
Count of hazardous waste facilities (Treatment, Storage, and Disposal Facilities and Large Count of hazardous waste facilities (Treatment, Storage, and Disposal Facilities and Large
Quantity Generators) within 5 km (or nearest beyond 5 km), each divided by distance in kilometers. Quantity Generators) within 5 km (or nearest beyond 5 km), each divided by distance in kilometers.
</div> </div>
<ul> <ul>
@ -469,13 +484,14 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
Responsible Party: Responsible Party:
</span> </span>
<a <a
href="https://www.census.gov/programs-surveys/acs" href="https://enviro.epa.gov/facts/rcrainfo/search.html"
rel="noreferrer" rel="noreferrer"
target="_blank" target="_blank"
> >
Environmental Protection Agency (EPA) TSDF data calculated from EPA RCRAinfo database Environmental Protection Agency (EPA) Treatment Storage, and Disposal Facilities
as compiled by EPAs EJSCREEN (TSDF) data calculated from EPA RCRA info database as compiled by EPAs EJSCREEN
</a> </a>
</li> </li>
<li> <li>
@ -496,7 +512,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
id="prox-npl" id="prox-npl"
> >
<h3> <h3>
Proximity to National Priorities List (NPL) Sites Proximity to National Priorities List (NPL) sites
</h3> </h3>
<div> <div>
@ -534,7 +550,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
id="prox-rmp" id="prox-rmp"
> >
<h3> <h3>
Proximity to Risk Management Plan (RMP) Sites Proximity to Risk Management Plan (RMP) facilities
</h3> </h3>
<div> <div>
@ -613,7 +629,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
Asthma Asthma
</h3> </h3>
<div> <div>
Weighted number of respondents people who answer “yes” both Weighted percent of people who answer “yes” both
to both of the following questions: “Have you ever been told by a doctor, to both of the following questions: “Have you ever been told by a doctor,
nurse, or other health professional that you have asthma?” and the question nurse, or other health professional that you have asthma?” and the question
“Do you still have asthma?” “Do you still have asthma?”
@ -652,7 +668,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
Diabetes Diabetes
</h3> </h3>
<div> <div>
People ages 18 years and older who report having ever been Weighted percent of people ages 18 years and older who report having ever been
told by a doctor, nurse, or other health professionals that they have told by a doctor, nurse, or other health professionals that they have
diabetes other than diabetes during pregnancy. diabetes other than diabetes during pregnancy.
</div> </div>
@ -690,7 +706,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
Heart disease Heart disease
</h3> </h3>
<div> <div>
People ages 18 years and older who report ever having been told Weighted percent of people ages 18 years and older who report ever having been told
by a doctor, nurse, or other health professionals that they had angina or by a doctor, nurse, or other health professionals that they had angina or
coronary heart disease. coronary heart disease.
</div> </div>
@ -728,7 +744,14 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
Low life expectancy Low life expectancy
</h3> </h3>
<div> <div>
Average number of years of life a person who has attained a given age can expect to live.
Average number of years of life a person who has attained a given age can expect to live.
Note: Unlike most of the other datasets, high values of this indicator indicate low burdens.
For percentile calculations, the percentile is calculated in reverse order, so that the tract with
the highest median income relative to area median income (lowest burden on this measure) is at the
0th percentile, and the tract with the lowest median income relative to area median income
(highest burden on this measure) is at the 100th percentile.
</div> </div>
<ul> <ul>
<li> <li>
@ -758,7 +781,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
</ul> </ul>
</div> </div>
<div <div
id="median-income" id="low-med-inc"
> >
<h3> <h3>
Low median Income Low median Income
@ -800,8 +823,9 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
Linguistic Isolation Linguistic Isolation
</h3> </h3>
<div> <div>
Households in which no one age 14 and over speaks English only or also speaks
a language other than English The percent of limited speaking households, which are households where no one over age 14 speaks English well.
</div> </div>
<ul> <ul>
<li> <li>

View file

@ -12,14 +12,15 @@ exports[`rendering of the HowYouCanHelp checks if various text fields are visibl
<a <a
href="/en/methodology" href="/en/methodology"
> >
Methodology and data Methodology & data
</a> </a>
page and send us feedback. page and send us feedback.
</li> </li>
<li> <li>
Find communities of interest and Find communities of interest and
<a <a
href="mailto:screeningtool.feedback@usds.gov" href="mailto:Screeningtool-Support@omb.eop.gov"
target="blank"
> >
share your feedback share your feedback
</a> </a>
@ -29,6 +30,7 @@ exports[`rendering of the HowYouCanHelp checks if various text fields are visibl
Respond to our request for information on Respond to our request for information on
<a <a
href="https://www.federalregister.gov/" href="https://www.federalregister.gov/"
target="blank"
> >
federalregister.gov federalregister.gov
</a> </a>

View file

@ -21,8 +21,8 @@ const J40Footer = () => {
[ [
intl.formatMessage(COMMON_COPY.FOOTER.CONTACT), intl.formatMessage(COMMON_COPY.FOOTER.CONTACT),
<Address <Address
key={'footeraddress'}
className={'j40-footer-address'} className={'j40-footer-address'}
key={'footeraddress'}
size={'big'} size={'big'}
items={[ items={[
COMMON_COPY.FOOTER_CEQ_ADDRESS.NAME, COMMON_COPY.FOOTER_CEQ_ADDRESS.NAME,
@ -45,17 +45,17 @@ const J40Footer = () => {
</a>, </a>,
<a <a
key="foialink" key="foialink"
href={'https://www.whitehouse.gov/ceq/foia'}
target={'_blank'} target={'_blank'}
rel={'noreferrer'} rel={'noreferrer'}
href={'https://www.whitehouse.gov/ceq/foia'}
data-cy={hyphenizeString(COMMON_COPY.FOOTER.FOIA.defaultMessage)}> data-cy={hyphenizeString(COMMON_COPY.FOOTER.FOIA.defaultMessage)}>
{intl.formatMessage(COMMON_COPY.FOOTER.FOIA)} {intl.formatMessage(COMMON_COPY.FOOTER.FOIA)}
</a>, </a>,
<a <a
key={'privacylink'} key={'privacylink'}
href={intl.formatMessage(COMMON_COPY.FOOTER.PRIVACY_LINK)}
target={'_blank'} target={'_blank'}
rel={'noreferrer'} rel={'noreferrer'}
href={intl.formatMessage(COMMON_COPY.FOOTER.PRIVACY_LINK)}
data-cy={hyphenizeString(COMMON_COPY.FOOTER.PRIVACY.defaultMessage)}> data-cy={hyphenizeString(COMMON_COPY.FOOTER.PRIVACY.defaultMessage)}>
{intl.formatMessage(COMMON_COPY.FOOTER.PRIVACY)} {intl.formatMessage(COMMON_COPY.FOOTER.PRIVACY)}
</a>, </a>,
@ -66,6 +66,8 @@ const J40Footer = () => {
className={'footer-link-first-child'} className={'footer-link-first-child'}
key={'contactlink'} key={'contactlink'}
href={intl.formatMessage(COMMON_COPY.FOOTER.FIND_CONTACT_LINK)} href={intl.formatMessage(COMMON_COPY.FOOTER.FIND_CONTACT_LINK)}
target={'_blank'}
rel="noreferrer"
data-cy={hyphenizeString(COMMON_COPY.FOOTER.FIND_CONTACT.defaultMessage)}> data-cy={hyphenizeString(COMMON_COPY.FOOTER.FIND_CONTACT.defaultMessage)}>
{intl.formatMessage(COMMON_COPY.FOOTER.FIND_CONTACT)} {intl.formatMessage(COMMON_COPY.FOOTER.FIND_CONTACT)}
</a>, </a>,

View file

@ -33,6 +33,7 @@
@include u-padding-top('05'); @include u-padding-top('05');
@include u-margin-left(1); @include u-margin-left(1);
@include u-font("body", "2xs"); @include u-font("body", "2xs");
@include u-text('bold')
} }
.navLinks { .navLinks {

View file

@ -147,11 +147,11 @@ exports[`rendering of the J40Header checks if component renders 1`] = `
<div /> <div />
<div> <div>
<span> <span>
This is a Beta site. This is a beta site.
</span> </span>
<span> <span>
It is an early, in-progress version of the tool with limited data It is an early, in-progress version of the tool with limited datasets
sets that will be continuously updated. that will be continuously updated.
</span> </span>
</div> </div>
</div> </div>

View file

@ -14,9 +14,9 @@ exports[`rendering of the MapLegend checks if snapshots have changed 1`] = `
class="secondary" class="secondary"
> >
Communities identified for the purposes of Justice40 as disadvantaged have been Communities identified as disadvantaged for the purposes of Justice40 have been
historically marginalized, underserved, and overburdened by pollution. These communities historically marginalized, underserved, and overburdened by pollution. These communities meet
meet or exceed the criteria in one or more areas of focus. or exceed the criteria in one or more areas of focus.
</p> </p>

View file

@ -11,7 +11,7 @@ exports[`rendering of the SurveyButton checks if component renders 1`] = `
data-testid="button" data-testid="button"
type="button" type="button"
> >
Tell us how we're doing Help improve the site & data
</button> </button>
</div> </div>
</DocumentFragment> </DocumentFragment>

View file

@ -134,6 +134,8 @@ exports[`J40Footer renders correctly 1`] = `
class="footer-link-first-child" class="footer-link-first-child"
data-cy="find-a-contact-at-usa-gov" data-cy="find-a-contact-at-usa-gov"
href="https://www.usa.gov/" href="https://www.usa.gov/"
rel="noreferrer"
target="_blank"
> >
Find a contact at USA.gov Find a contact at USA.gov
</a> </a>
@ -185,7 +187,7 @@ exports[`J40Footer renders correctly 1`] = `
data-testid="button" data-testid="button"
type="button" type="button"
> >
Tell us how we're doing Help improve the site & data
</button> </button>
</div> </div>
</footer> </footer>

View file

@ -22,10 +22,10 @@ exports[`simulate app starting up, no click on map should match the snapshot of
</div> </div>
<cite> <cite>
A census tract is generally between 1,200 and 8,000 people, with an optimum size of 4,000 people. A census tract is generally between 1,200 and 8,000 people, with an average size of 4,000 people.
Census tracts are small, relatively permanent subdivisions of a county defined by the Census tracts are small, relatively permanent subdivisions of a county defined by the
U.S. Census Bureau and usually cover a contiguous area. The census tract level represents the U.S. Census Bureau and usually cover a contiguous area. The census tract level represents the
smallest geographical unity that can be presented in a statistically sound manner, given the smallest geographical unit that can be presented in a statistically sound manner, given the
datasets that are being used. datasets that are being used.
</cite> </cite>

View file

@ -4,6 +4,13 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<script async
type="text/javascript"
id="_fed_an_ua_tag"
src="https://dap.digitalgov.gov/Universal-Federated-Analytics-Min.js?agency=DOI&sitetopic=cejst&enhlink=true">
</script>
</head> </head>
<body> <body>

View file

@ -74,13 +74,17 @@ export const PROXIMITY_TSDF_SITES_PERCENTILE = 'TSDF_PFS';
// Category booleans (disadvantaged or not): // Category booleans (disadvantaged or not):
export const IS_CLIMATE_FACTOR_DISADVANTAGED_L = 'L_CLT'; export const IS_CLIMATE_FACTOR_DISADVANTAGED_L = 'L_CLT';
export const IS_WORKFORCE_FACTOR_DISADVANTAGED_L = 'L_WKFC';
export const IS_WATER_FACTOR_DISADVANTAGED_L = 'L_WTR';
export const IS_ENERGY_FACTOR_DISADVANTAGED_L = 'L_ENY'; export const IS_ENERGY_FACTOR_DISADVANTAGED_L = 'L_ENY';
export const IS_TRANSPORT_FACTOR_DISADVANTAGED_L = 'L_TRN'; export const IS_TRANSPORT_FACTOR_DISADVANTAGED_L = 'L_TRN';
export const IS_HOUSING_FACTOR_DISADVANTAGED_L = 'L_HSG'; export const IS_HOUSING_FACTOR_DISADVANTAGED_L = 'L_HSG';
export const IS_POLLUTION_FACTOR_DISADVANTAGED_L = 'L_PLN'; export const IS_POLLUTION_FACTOR_DISADVANTAGED_L = 'L_PLN';
export const IS_WATER_FACTOR_DISADVANTAGED_L = 'L_WTR';
export const IS_HEALTH_FACTOR_DISADVANTAGED_L = 'L_HLTH'; export const IS_HEALTH_FACTOR_DISADVANTAGED_L = 'L_HLTH';
export const IS_WORKFORCE_FACTOR_DISADVANTAGED_L = 'L_WKFC';
// Total indicators values:
export const TOTAL_NUMBER_OF_DISADVANTAGE_INDICATORS = 'TC';
export const TOTAL_NUMBER_OF_INDICATORS = 21;
// Indicator booleans (disadvangted or not): (GTE = greater than or equal) // Indicator booleans (disadvangted or not): (GTE = greater than or equal)
export const IS_GTE_90_EXP_POP_LOSS_AND_IS_LOW_INCOME = 'EPLRLI'; export const IS_GTE_90_EXP_POP_LOSS_AND_IS_LOW_INCOME = 'EPLRLI';
@ -109,7 +113,6 @@ export const TOTAL_THRESHOLD_CRITERIA = 'TC';
export const IS_GTE_90_ISLAND_AREA_UNEMPLOYMENT_AND_IS_LOW_HS_EDU_2009 = 'IAULHSE'; export const IS_GTE_90_ISLAND_AREA_UNEMPLOYMENT_AND_IS_LOW_HS_EDU_2009 = 'IAULHSE';
export const IS_GTE_90_ISLAND_AREA_BELOW_100_POVERTY_AND_IS_LOW_HS_EDU_2009 = 'ISPLHSE'; export const IS_GTE_90_ISLAND_AREA_BELOW_100_POVERTY_AND_IS_LOW_HS_EDU_2009 = 'ISPLHSE';
export const IS_GTE_90_ISLAND_AREA_LOW_MEDIAN_INCOME_AND_IS_LOW_HS_EDU_2009 = 'IALMILHSE'; export const IS_GTE_90_ISLAND_AREA_LOW_MEDIAN_INCOME_AND_IS_LOW_HS_EDU_2009 = 'IALMILHSE';
export type J40Properties = { [key: string]: any }; export type J40Properties = { [key: string]: any };
// The name of the layer within the tiles that contains the score // The name of the layer within the tiles that contains the score

View file

@ -2,7 +2,7 @@ import React from 'react';
import {defineMessages} from 'react-intl'; import {defineMessages} from 'react-intl';
import {FormattedMessage} from 'gatsby-plugin-intl'; import {FormattedMessage} from 'gatsby-plugin-intl';
export const EXEC_ORDER_LINK = 'https://www.federalregister.gov/documents/2021/02/01/2021-02177/tackling-the-climate-crisis-at-home-and-abroad#:~:text=Sec.%20223.%20Justice40,40-percent%20goal.'; export const EXEC_ORDER_LINK = 'https://www.whitehouse.gov/briefing-room/presidential-actions/2021/01/27/executive-order-on-tackling-the-climate-crisis-at-home-and-abroad/';
export const PAGE = defineMessages({ export const PAGE = defineMessages({
TILE: { TILE: {
@ -12,7 +12,7 @@ export const PAGE = defineMessages({
}, },
HEADING: { HEADING: {
id: 'index.heading.about.us', id: 'index.heading.about.us',
defaultMessage: 'About us', defaultMessage: 'About',
description: 'main heading for about page', description: 'main heading for about page',
}, },
HEADING_1: { HEADING_1: {
@ -20,19 +20,6 @@ export const PAGE = defineMessages({
defaultMessage: 'Screening tool', defaultMessage: 'Screening tool',
description: 'heading for about screening tool', description: 'heading for about screening tool',
}, },
HEADING1_DESCRIPTION1: {
id: 'about.page.sub.header.1.text.1',
defaultMessage: 'In Executive Order 14008 on Tackling the Climate Crisis at Home and Abroad'+
' Environmental Quality (CEQ) to create a climate and economic'+
' justice screening tool. The purpose of the tool is to help'+
' Federal agencies identify disadvantaged communities and provide'+
' socioeconomic, environmental, and climate information and data'+
' to inform decisions that may affect these communities. The tool'+
' identifies disadvantaged communities as communities of focus'+
' through publicly available, nationally consistent, high-quality'+
' data.',
description: 'about page sub header text',
},
HEADING1_DESCRIPTION2: { HEADING1_DESCRIPTION2: {
id: 'about.page.sub.header.1.text.2', id: 'about.page.sub.header.1.text.2',
defaultMessage: 'The current version of the tool is in a public beta form and'+ defaultMessage: 'The current version of the tool is in a public beta form and'+
@ -41,20 +28,21 @@ export const PAGE = defineMessages({
}, },
HEADING_2: { HEADING_2: {
id: 'index.heading.justice40', id: 'index.heading.justice40',
defaultMessage: 'Justice40 Initiative', defaultMessage: 'Justice40',
description: 'heading for about justice 40', description: 'heading for about justice 40',
}, },
HEADING2_DESCRIPTION1: { HEADING2_DESCRIPTION1: {
id: 'about.page.sub.header.2.text.1', id: 'about.page.sub.header.2.text.1',
defaultMessage: 'The tool will provide important information for the Justice40'+ defaultMessage: `
' Initiative. The goal of the Justice40 Initiative is to provide'+ The tool will provide important information for the Justice40 Initiative. The goal of the
' 40-percent of the overall benefits of certain federal'+ Justice40 Initiative is to provide 40 percent of the overall benefits of certain federal
' programs in seven key areas to disadvantaged communities.'+ programs in seven key areas to disadvantaged communities. These seven key areas are: climate
' These seven key areas are: climate change, clean energy and'+ change, clean energy and energy efficiency, clean transit, affordable and sustainable
' energy efficiency, clean transit, affordable and sustainable'+ housing, training and workforce development (related to climate, natural disasters, environment,
' housing, training and workforce development, the remediation'+ clean energy, clean transportation, affordable and sustainable housing, water and
' and reduction of legacy pollution, and the development of'+ wastewater infrastructure, and legacy pollution reduction, including in energy communities),
' critical clean water infrastructure.', the remediation and reduction of legacy pollution, and the development of critical clean water infrastructure.
`,
description: 'about page sub header text', description: 'about page sub header text',
}, },
}); });
@ -65,24 +53,19 @@ export const HEADING_1 = {
id={'about.page.sub.header.1.text.1'} id={'about.page.sub.header.1.text.1'}
description={'about page sub header text'} description={'about page sub header text'}
defaultMessage={` defaultMessage={`
In {eoLink} on Tackling the Climate Crisis at Home and Abroad, In {eoLink} on {tacklingItalics}, President Biden directed the Council on Environmental Quality (CEQ)
President Biden directed the Council on to create a Climate and Economic Justice Screening Tool. The purpose of the tool is to help
Environmental Quality (CEQ) to create a Climate and Economic Federal agencies identify disadvantaged communities that have been historically
Justice Screening Tool. The purpose of the tool is to help marginalized, underserved, and overburdened by pollution. The tool provides socioeconomic,
Federal agencies identify disadvantaged communities environmental, and climate information to inform decisions that may affect these communities. The
that have been historically marginalized, underserved, and tool identifies disadvantaged communities through publicly-available, nationally-consistent, and high-quality data.
overburdened by pollution. The tool provides
socioeconomic, environmental, and climate information
to inform decisions that may affect these communities. The tool
identifies disadvantaged communities
through publicly available, nationally consistent, high-quality
data.
`} `}
values={{ values={{
eoLink: eoLink:
<a href={EXEC_ORDER_LINK}> <a href={EXEC_ORDER_LINK} target={'blank'}>
Executive Order 14008 Executive Order 14008
</a>, </a>,
tacklingItalics: <i>Tackling the Climate Crisis at Home and Abroad</i>,
}} }}
/>, />,
}; };
@ -94,13 +77,14 @@ export const HEADING_2 = {
description={'about page sub header text'} description={'about page sub header text'}
defaultMessage={` defaultMessage={`
Read more about the Justice40 Initiative in President Bidens Read more about the Justice40 Initiative in President Bidens
{eoLink} on Tackling the Climate Crisis at Home and Abroad. {eoLink} on {tacklingItalics}.
`} `}
values={{ values={{
eoLink: eoLink:
<a href={EXEC_ORDER_LINK}> <a href={EXEC_ORDER_LINK} target={'blank'}>
Executive Order 14008 Executive Order 14008
</a>, </a>,
tacklingItalics: <i>Tackling the Climate Crisis at Home and Abroad</i>,
}} }}
/>, />,
}; };
@ -176,7 +160,7 @@ export const GET_INVOLVED = defineMessages({
JOIN_OSC_INFO: { JOIN_OSC_INFO: {
id: 'join.open.source.info', id: 'join.open.source.info',
defaultMessage: 'The screening tools code is open source, which means it is '+ defaultMessage: 'The screening tools code is open source, which means it is '+
' available for the public to view and contribute to. Anyone can view and contribute on GitHub.', ' available for the public to view and contribute to.',
description: 'info on joining open source community', description: 'info on joining open source community',
}, },
JOIN_OSC_LINK_TEXT: { JOIN_OSC_LINK_TEXT: {

View file

@ -4,13 +4,13 @@ import {defineMessages} from 'react-intl';
export const BETA_BANNER = defineMessages({ export const BETA_BANNER = defineMessages({
TITLE: { TITLE: {
id: 'banner.beta.title', id: 'banner.beta.title',
defaultMessage: 'This is a Beta site.', defaultMessage: 'This is a beta site.',
description: 'the main title of the beta banner', description: 'the main title of the beta banner',
}, },
INFO: { INFO: {
id: 'banner.beta.info', id: 'banner.beta.info',
defaultMessage: `It is an early, in-progress version of the tool with limited data defaultMessage: `It is an early, in-progress version of the tool with limited datasets
sets that will be continuously updated.`, that will be continuously updated.`,
description: 'the main info of the beta banner', description: 'the main info of the beta banner',
}, },
}); });

View file

@ -23,7 +23,7 @@ export const PAGE_INTRO = defineMessages({
}, },
SURVEY_TEXT: { SURVEY_TEXT: {
id: 'fab.survey.text', id: 'fab.survey.text',
defaultMessage: `Tell us how we're doing`, defaultMessage: `Help improve the site & data`,
description: 'text for floating action button', description: 'text for floating action button',
}, },
}); });
@ -31,7 +31,7 @@ export const PAGE_INTRO = defineMessages({
export const CONTACT_VIA_EMAIL = { export const CONTACT_VIA_EMAIL = {
ID: 'contact.general', ID: 'contact.general',
DESCRIPTION: 'Contact page body text', DESCRIPTION: 'Contact page body text',
DEFAULT_MESSAGE: `For general feedback, email {general_email_address}`, DEFAULT_MESSAGE: `For general feedback, email {general_email_address}.`,
}; };
export const FEEDBACK_EMAIL = 'screeningtool.feedback@usds.gov'; export const FEEDBACK_EMAIL = 'Screeningtool-Support@omb.eop.gov';

View file

@ -30,8 +30,8 @@ export const PAGE_DESCRIPTION = <FormattedMessage
`} `}
description={'page description'} description={'page description'}
values={{ values={{
methodologyLink: <Link to={'/methodology'}>methodology & data</Link>, methodologyLink: <Link to={'/methodology'}>Methodology & data</Link>,
methodologyLinkEs: <Link to={'/methodology'}>metodología y datos</Link>, methodologyLinkEs: <Link to={'/methodology'}>Metodología y datos</Link>,
}} }}
/>; />;
@ -44,9 +44,9 @@ export const LEGEND = defineMessages({
PRIORITY_DESCRIPT: { PRIORITY_DESCRIPT: {
id: 'legend.info.threshold.label', id: 'legend.info.threshold.label',
defaultMessage: ` defaultMessage: `
Communities identified for the purposes of Justice40 as disadvantaged have been Communities identified as disadvantaged for the purposes of Justice40 have been
historically marginalized, underserved, and overburdened by pollution. These communities historically marginalized, underserved, and overburdened by pollution. These communities meet
meet or exceed the criteria in one or more areas of focus. or exceed the criteria in one or more areas of focus.
`, `,
description: 'the label of the threshold community legend', description: 'the label of the threshold community legend',
@ -169,10 +169,10 @@ export const SIDE_PANEL_INITIAL_STATE = defineMessages({
CBG_DEFINITION: { CBG_DEFINITION: {
id: 'mapIntro.censusBlockGroupDefinition', id: 'mapIntro.censusBlockGroupDefinition',
defaultMessage: ` defaultMessage: `
A census tract is generally between 1,200 and 8,000 people, with an optimum size of 4,000 people. A census tract is generally between 1,200 and 8,000 people, with an average size of 4,000 people.
Census tracts are small, relatively permanent subdivisions of a county defined by the Census tracts are small, relatively permanent subdivisions of a county defined by the
U.S. Census Bureau and usually cover a contiguous area. The census tract level represents the U.S. Census Bureau and usually cover a contiguous area. The census tract level represents the
smallest geographical unity that can be presented in a statistically sound manner, given the smallest geographical unit that can be presented in a statistically sound manner, given the
datasets that are being used. datasets that are being used.
`, `,
description: 'cites the definition and helpful information about census groups', description: 'cites the definition and helpful information about census groups',
@ -244,7 +244,7 @@ export const SIDE_PANEL_CATEGORY = defineMessages({
}, },
CLEAN_ENERGY: { CLEAN_ENERGY: {
id: 'areaDetail.indicator.title.clean.energy', id: 'areaDetail.indicator.title.clean.energy',
defaultMessage: 'Clean, efficient energy ', defaultMessage: 'Clean energy and energy efficiency',
description: 'Clean, efficient energy title', description: 'Clean, efficient energy title',
}, },
CLEAN_TRANSPORT: { CLEAN_TRANSPORT: {
@ -264,7 +264,7 @@ export const SIDE_PANEL_CATEGORY = defineMessages({
}, },
CLEAN_WATER: { CLEAN_WATER: {
id: 'areaDetail.indicator.title.clean.water', id: 'areaDetail.indicator.title.clean.water',
defaultMessage: 'Clean water and waste', defaultMessage: 'Clean water and waste infrastructure',
description: 'Clean water and waste title', description: 'Clean water and waste title',
}, },
HEALTH_BURDEN: { HEALTH_BURDEN: {
@ -307,17 +307,17 @@ export const SIDE_PANEL_INDICATORS = defineMessages({
}, },
PM_2_5: { PM_2_5: {
id: 'areaDetail.indicator.pm25', id: 'areaDetail.indicator.pm25',
defaultMessage: 'PM2.5', defaultMessage: 'PM2.5 in the air',
description: 'Fine inhalable particles, with diameters that are generally 2.5 micrometers and smaller', description: 'Fine inhalable particles, with diameters that are generally 2.5 micrometers and smaller',
}, },
DIESEL_PARTICULATE_MATTER: { DIESEL_PARTICULATE_MATTER: {
id: 'areaDetail.indicator.dieselPartMatter', id: 'areaDetail.indicator.dieselPartMatter',
defaultMessage: 'Diesel particulate matter', defaultMessage: 'Diesel particulate matter exposure',
description: 'Diesel particulate matter level in air', description: 'Diesel particulate matter level in air',
}, },
TRAFFIC_VOLUME: { TRAFFIC_VOLUME: {
id: 'areaDetail.indicator.trafficVolume', id: 'areaDetail.indicator.trafficVolume',
defaultMessage: 'Traffic', defaultMessage: 'Traffic proximity and volume',
description: 'Count of vehicles (average annual daily traffic) at major roads within 500 meters,' + description: 'Count of vehicles (average annual daily traffic) at major roads within 500 meters,' +
' divided by distance in meters', ' divided by distance in meters',
}, },
@ -350,7 +350,7 @@ export const SIDE_PANEL_INDICATORS = defineMessages({
}, },
PROX_RMP: { PROX_RMP: {
id: 'areaDetail.indicator.prox.rmp', id: 'areaDetail.indicator.prox.rmp',
defaultMessage: 'Proximity to RMP sites', defaultMessage: 'Proximity to RMP facilities',
description: 'Count of proposed or listed RMP', description: 'Count of proposed or listed RMP',
}, },
WASTE_WATER: { WASTE_WATER: {
@ -422,7 +422,9 @@ export const SIDE_PANEL_INDICATOR_DESCRIPTION = defineMessages({
}, },
EXP_POP_LOSS: { EXP_POP_LOSS: {
id: 'areaDetail.indicator.description.exp.pop.loss', id: 'areaDetail.indicator.description.exp.pop.loss',
defaultMessage: 'Economic loss rate to the population in fatalities and injuries resulting from natural hazards', defaultMessage: `
Rate relative to the population in fatalities and injuries resulting from natural hazards each year
`,
description: 'Economic loss rate to the population in fatalities and injuries resulting from natural hazards', description: 'Economic loss rate to the population in fatalities and injuries resulting from natural hazards',
}, },
LOW_INCOME: { LOW_INCOME: {
@ -433,7 +435,7 @@ export const SIDE_PANEL_INDICATOR_DESCRIPTION = defineMessages({
ENERGY_BURDEN: { ENERGY_BURDEN: {
id: 'areaDetail.indicator.description.energyBurden', id: 'areaDetail.indicator.description.energyBurden',
defaultMessage: 'Energy costs divided by household income', defaultMessage: 'Average annual energy costs divided by household income',
description: 'Energy costs divided by household income', description: 'Energy costs divided by household income',
}, },
PM_2_5: { PM_2_5: {
@ -455,12 +457,12 @@ export const SIDE_PANEL_INDICATOR_DESCRIPTION = defineMessages({
LEAD_PAINT: { LEAD_PAINT: {
id: 'areaDetail.indicator.description.leadPaint', id: 'areaDetail.indicator.description.leadPaint',
defaultMessage: 'Pre-1960 housing', defaultMessage: 'Percent of pre-1960 housing with a median home value is at or below 90th',
description: 'Pre-1960 housing', description: 'Pre-1960 housing',
}, },
MED_HOME_VAL: { MED_HOME_VAL: {
id: 'areaDetail.indicator.description.med.home.val', id: 'areaDetail.indicator.description.med.home.val',
defaultMessage: 'Meidan home value in area', defaultMessage: 'Median home value in area',
description: 'Meidan home value in area', description: 'Meidan home value in area',
}, },
@ -494,17 +496,22 @@ export const SIDE_PANEL_INDICATOR_DESCRIPTION = defineMessages({
ASTHMA: { ASTHMA: {
id: 'areaDetail.indicator.description.asthma', id: 'areaDetail.indicator.description.asthma',
defaultMessage: 'Number of people who have been told they have asthma', defaultMessage: 'Weighted percent of people who have been told they have asthma',
description: 'Number of people who have been told they have asthma', description: 'Number of people who have been told they have asthma',
}, },
DIABETES: { DIABETES: {
id: 'areaDetail.indicator.description.diabetes', id: 'areaDetail.indicator.description.diabetes',
defaultMessage: 'People ages 18 years and older who have diabetes other than diabetes during pregnancy', defaultMessage: `
Weighted percent of people ages 18 years and older who have diabetes other than
diabetes during pregnancy
`,
description: 'People ages 18 years and older who have diabetes other than diabetes during pregnancy', description: 'People ages 18 years and older who have diabetes other than diabetes during pregnancy',
}, },
HEART_DISEASE: { HEART_DISEASE: {
id: 'areaDetail.indicator.description.heartDisease', id: 'areaDetail.indicator.description.heartDisease',
defaultMessage: 'People ages 18 years and older who have been told they have heart disease', defaultMessage: `
Weighted percent of people ages 18 years and older who have been told they have heart disease
`,
description: 'People ages 18 years and older who have been told they have heart disease', description: 'People ages 18 years and older who have been told they have heart disease',
}, },
LOW_LIFE_EXPECT: { LOW_LIFE_EXPECT: {
@ -520,8 +527,9 @@ export const SIDE_PANEL_INDICATOR_DESCRIPTION = defineMessages({
}, },
LING_ISO: { LING_ISO: {
id: 'areaDetail.indicator.description.ling.iso', id: 'areaDetail.indicator.description.ling.iso',
defaultMessage: `Households in which no one age 14 and over speaks English only or also speaks defaultMessage: `
a language other than English`, Percent of limited speaking households, which are households where no one over age 14 speaks English well
`,
description: `Households in which no one age 14 and over speaks English only or also speaks description: `Households in which no one age 14 and over speaks English only or also speaks
a language other than English`, a language other than English`,
}, },
@ -532,14 +540,18 @@ export const SIDE_PANEL_INDICATOR_DESCRIPTION = defineMessages({
}, },
POVERTY: { POVERTY: {
id: 'areaDetail.indicator.description.poverty', id: 'areaDetail.indicator.description.poverty',
defaultMessage: `Percent of individuals in households where the household income is at or defaultMessage: `
below 100% of the federal poverty level`, Percent of a tract's population in households where the household income is at or below
100% of the federal poverty level
`,
description: `Percent of individuals in households where the household income is at or description: `Percent of individuals in households where the household income is at or
below 100% of the federal poverty level`, below 100% of the federal poverty level`,
}, },
HIGH_SKL: { HIGH_SKL: {
id: 'areaDetail.indicator.description.high.school', id: 'areaDetail.indicator.description.high.school',
defaultMessage: 'Percent of people ages 25 years or older whose education level is less than a high school diploma', defaultMessage: `
Percent of people ages 25 years or older whose education level is less than a high school diploma
`,
description: 'Percent of people ages 25 years or older whose education level is less than a high school diploma', description: 'Percent of people ages 25 years or older whose education level is less than a high school diploma',
}, },
}); });
@ -585,11 +597,11 @@ export const NOTE_ON_TERRITORIES = {
PARA_1: <FormattedMessage PARA_1: <FormattedMessage
id={'explore.page.note.on.territories.para.1'} id={'explore.page.note.on.territories.para.1'}
defaultMessage={` defaultMessage={`
The data sources described on the {dataMethLink} page are used to The data sources described on the {dataMethLink} are used to
identify disadvantaged communities for all 50 states and the District of Columbia. However, not all identify disadvantaged communities for all fifty states and the District of Columbia. However, not all
of these data sources are currently available for the U.S. territories. The Census ACS data from of these data sources are currently available for the U.S. territories. The Census ACS data from
2015-2019 was used to identify disadvantaged communities for Puerto Rico. This uses the same methodology 2015-2019 was used to identify disadvantaged communities for Puerto Rico. This uses the same methodology
as all 50 states and the District of Columbia for which data is available, which is all fields in as all fifty states and the District of Columbia for which data is available, which is all fields in
the Training and Workforce Development category. the Training and Workforce Development category.
`} `}
description={`territories paragraph 1`} description={`territories paragraph 1`}
@ -624,7 +636,7 @@ export const HOW_YOU_CAN_HELP_LIST_ITEMS = {
values={{ values={{
dataMeth: dataMeth:
<Link to={'/methodology'}> <Link to={'/methodology'}>
{'Methodology and data'} {'Methodology & data'}
</Link>, </Link>,
dataMethEs: dataMethEs:
<Link to={'/methodology'}> <Link to={'/methodology'}>
@ -638,7 +650,7 @@ export const HOW_YOU_CAN_HELP_LIST_ITEMS = {
defaultMessage={`Find communities of interest and {shareFeedback}.`} defaultMessage={`Find communities of interest and {shareFeedback}.`}
values={{ values={{
shareFeedback: shareFeedback:
<a href={`mailto:${CONTACT_COPY.FEEDBACK_EMAIL}`}> <a href={`mailto:${CONTACT_COPY.FEEDBACK_EMAIL}`} target={'blank'}>
{'share your feedback'} {'share your feedback'}
</a>, </a>,
}} }}
@ -649,7 +661,7 @@ export const HOW_YOU_CAN_HELP_LIST_ITEMS = {
defaultMessage={`Respond to our request for information on {federalRegisterLink}.`} defaultMessage={`Respond to our request for information on {federalRegisterLink}.`}
values={{ values={{
federalRegisterLink: federalRegisterLink:
<a href={`https://www.federalregister.gov/`}> <a href={`https://www.federalregister.gov/`} target={'blank'}>
{'federalregister.gov'} {'federalregister.gov'}
</a>, </a>,
}} }}

View file

@ -5,7 +5,7 @@ import {FormattedMessage} from 'gatsby-plugin-intl';
export const PAGE = defineMessages({ export const PAGE = defineMessages({
TILE: { TILE: {
id: 'methodology.page.title.text', id: 'methodology.page.title.text',
defaultMessage: 'Data and Methodology', defaultMessage: 'Methodology & data',
description: 'methodology page title text', description: 'methodology page title text',
}, },
HEADING: { HEADING: {
@ -16,11 +16,10 @@ export const PAGE = defineMessages({
DESCRIPTION: { DESCRIPTION: {
id: 'methodology.page.paragraph', id: 'methodology.page.paragraph',
defaultMessage: ` defaultMessage: `
This tool identifies commmunities that are economically disadvantaged, overburdened by This tool identifies communities that are overburdened by pollution and other environmental exposures
certain environmental risks, and marginalized by legacies of historic underinvestment. and disadvantaged by underinvestment. A community qualifies as disadvantaged when a census tract
A community qualifies as 'disadvantaged' when a census tract is at or above a certain is at or above a certain threshold for a climate or environmental burden indicator and also above
threshold for a climate or environmental burden indicator and also above a certain a certain threshold for a socioeconomic indicator. Census tract geographical boundaries are
threshold for a socioeconomic indicator. Census tract geographical boundaries are
determined by the U.S. Census Bureau once every ten years. This tool untilizes the determined by the U.S. Census Bureau once every ten years. This tool untilizes the
census tract boundaries from 2010. census tract boundaries from 2010.
`, `,
@ -36,8 +35,8 @@ export const PAGE = defineMessages({
CATEGORY_TEXT: { CATEGORY_TEXT: {
id: 'methodology.page.categories.title', id: 'methodology.page.categories.title',
defaultMessage: ` defaultMessage: `
Communities will be defined as disadvantaged if they meet the qualifications under one Communities will be defined as disadvantaged for the purposes of Justice40 if they meet
or more of the 8 categories of criteria below. the qualifications under one or more of the eight categories of criteria below.
`, `,
description: 'methodology page explanation of the categories', description: 'methodology page explanation of the categories',
}, },
@ -73,7 +72,7 @@ export const FORMULA = {
}; };
// Download Package // Download Package
export const DOWNLOAD_FILE_SIZE = '111MB'; export const DOWNLOAD_FILE_SIZE = '73MB';
export const DOWNLOAD_LAST_UPDATED = '12/13/21'; export const DOWNLOAD_LAST_UPDATED = '12/13/21';
export const DOWNLOAD_LAST_UPDATED_ES = '13/12/21'; export const DOWNLOAD_LAST_UPDATED_ES = '13/12/21';
export const VERSION_NUMBER = '0.1'; export const VERSION_NUMBER = '0.1';
@ -97,7 +96,7 @@ export const DOWNLOAD_PACKAGE = {
DESCRIPTION: <FormattedMessage DESCRIPTION: <FormattedMessage
id={ 'downloadPacket.info.text'} id={ 'downloadPacket.info.text'}
defaultMessage= {` defaultMessage= {`
The package includes draft v{versionNumber} of the list of disadvantaged communities The download package includes draft v{versionNumber} of the list of disadvantaged communities
(.csv and .xlsx) and information (.pdf) about how to use the list. (.csv and .xlsx) and information (.pdf) about how to use the list.
`} `}
description= {'download packet info text'} description= {'download packet info text'}
@ -196,13 +195,13 @@ export const CATEGORIES = {
IF: <FormattedMessage IF: <FormattedMessage
id= {'indicator.categories.clean.energy.if'} id= {'indicator.categories.clean.energy.if'}
defaultMessage= {` defaultMessage= {`
{if} at or above 90th percentile for {energyCostBur} OR {pm25} {if} at or above 90th percentile for {energyCostBur} score OR {pm25}
`} `}
description= {'if portion of the formula'} description= {'if portion of the formula'}
values= {{ values= {{
if: <strong>IF</strong>, if: <strong>IF</strong>,
energyCostBur: <a href='#energy-burden'>energy cost burden score</a>, energyCostBur: <a href='#energy-burden'>energy cost burden</a>,
pm25: <a href='#pm-25'>PM2.5</a>, pm25: <a href='#pm-25'>PM2.5 in the air</a>,
}} }}
/>, />,
AND: <FormattedMessage AND: <FormattedMessage
@ -238,7 +237,7 @@ export const CATEGORIES = {
description= {'if portion of the formula'} description= {'if portion of the formula'}
values= {{ values= {{
if: <strong>IF</strong>, if: <strong>IF</strong>,
dieselPM: <a href='#diesel-pm'>diesel particulate matter</a>, dieselPM: <a href='#diesel-pm'>diesel particulate matter exposure</a>,
traffic: <a href='#traffic-vol'>traffic proximity and volume</a>, traffic: <a href='#traffic-vol'>traffic proximity and volume</a>,
}} }}
/>, />,
@ -270,14 +269,14 @@ export const CATEGORIES = {
IF: <FormattedMessage IF: <FormattedMessage
id= {'indicator.categories.afford.house.if'} id= {'indicator.categories.afford.house.if'}
defaultMessage= {` defaultMessage= {`
{if} at or above 90th percentile for {lead} AND {medianHomeVal} is less than {if} at or above 90th percentile for {lead} AND {medianHomeVal} is at or less than
90th percentile OR at or above the 90th percentile for the {houseBur} 90th percentile OR at or above the 10th percentile for the {houseBur}
`} `}
description= {'if portion of the formula'} description= {'if portion of the formula'}
values= {{ values= {{
if: <strong>IF</strong>, if: <strong>IF</strong>,
lead: <a href='#lead-paint'>lead paint</a>, lead: <a href='#lead-paint'>lead paint</a>,
medianHomeVal: <a href='#median-home'>the median home value</a>, medianHomeVal: <a href='#median-home'>low median home value</a>,
houseBur: <a href='#house-burden'>housing cost burden</a>, houseBur: <a href='#house-burden'>housing cost burden</a>,
}} }}
/>, />,
@ -315,8 +314,8 @@ export const CATEGORIES = {
values= {{ values= {{
if: <strong>IF</strong>, if: <strong>IF</strong>,
proxHaz: <a href='#prox-haz'>proximity to hazardous waste facilities</a>, proxHaz: <a href='#prox-haz'>proximity to hazardous waste facilities</a>,
proxNPL: <a href='#prox-npl'>proximity to NLP sites</a>, proxNPL: <a href='#prox-npl'>proximity to NPL sites</a>,
proxRMP: <a href='#prox-rmp'>proximity to RMP sites</a>, proxRMP: <a href='#prox-rmp'>proximity to RMP facilities</a>,
}} }}
/>, />,
AND: <FormattedMessage AND: <FormattedMessage
@ -422,15 +421,15 @@ export const CATEGORIES = {
IF: <FormattedMessage IF: <FormattedMessage
id= {'indicator.categories.work.dev.if'} id= {'indicator.categories.work.dev.if'}
defaultMessage= {` defaultMessage= {`
{if} at or above 90th percentile for {lowMedInc} OR {if} at or above the 90th percentile for {lowMedInc} as a percent of area median income OR
at or above the 90th percentile for {linIso} OR {linIso} OR
{unemploy} OR {unemploy} OR
for percentage individuals in households at or below 100% federal {poverty} level at or above 90% percent individuals in households at or below 100% federal {poverty} level
`} `}
description= {'if portion of the formula'} description= {'if portion of the formula'}
values= {{ values= {{
if: <strong>IF</strong>, if: <strong>IF</strong>,
lowMedInc: <a href='#low-med-inc'>low median income relative to area median income</a>, lowMedInc: <a href='#low-med-inc'>low median income</a>,
linIso: <a href='#ling-iso'>linguistic isolation</a>, linIso: <a href='#ling-iso'>linguistic isolation</a>,
unemploy: <a href='#unemploy'>unemployment</a>, unemploy: <a href='#unemploy'>unemployment</a>,
poverty: <a href='#poverty'>poverty</a>, poverty: <a href='#poverty'>poverty</a>,
@ -439,7 +438,7 @@ export const CATEGORIES = {
AND: <FormattedMessage AND: <FormattedMessage
id= {'indicator.categories.work.dev.and'} id= {'indicator.categories.work.dev.and'}
defaultMessage= {` defaultMessage= {`
{and} where {highSchool} for adults 25 years and older is less than 90% {and} where {highSchool} for adults 25 years and older is at or less than 90%
`} `}
description= {'and portion of the formula'} description= {'and portion of the formula'}
values= {{ values= {{
@ -507,7 +506,7 @@ export const DATASET_CARD_LABELS = defineMessages({
export const INDICATORS = [ export const INDICATORS = [
{ {
domID: 'low-income', domID: 'low-income',
indicator: 'Low Income', indicator: 'Low income',
description: ` description: `
Percent of a block group's population in households where household income is at or below Percent of a block group's population in households where household income is at or below
200% of the federal poverty level. 200% of the federal poverty level.
@ -532,9 +531,13 @@ export const INDICATORS = [
}, },
{ {
domID: 'exp-agr-loss-rate', domID: 'exp-agr-loss-rate',
indicator: 'Expected Agriculture Loss Rate', indicator: 'Expected agriculture loss rate',
description: ` description: `
Economic loss rate to agriculture resulting from natural hazards each year. Percent of agriculture value at risk from losses due to natural hazards. Calculated by dividing
the agriculture value at risk in a census tract by the total agriculture value in that census
tract. Fourteen natural hazards that have some link to climate change include: avalanche,
coastal flooding, cold wave, drought, hail, heat wave, hurricane, ice storm, landslide,
riverine flooding, strong wind, tornado, wildfire, and winter weather.
`, `,
usedIn: `Climate change methodology`, usedIn: `Climate change methodology`,
respPartyLabel: `Federal Emergency Management Agency (FEMA)`, respPartyLabel: `Federal Emergency Management Agency (FEMA)`,
@ -543,9 +546,13 @@ export const INDICATORS = [
}, },
{ {
domID: 'exp-bld-loss-rate', domID: 'exp-bld-loss-rate',
indicator: 'Expected Building Loss Rate', indicator: 'Expected building loss rate',
description: ` description: `
Economic loss rate to buildings resulting from natural hazards each year. Percent of building value at risk from losses due to natural hazards. Calculated by dividing the
building value at risk in a census tract by the total building value in that census tract.
Fourteen natural hazards that have some link to climate change include: avalanche, coastal flooding,
cold wave, drought, hail, heat wave, hurricane, ice storm, landslide, riverine flooding, strong
wind, tornado, wildfire, and winter weather.
`, `,
usedIn: `Climate change methodology`, usedIn: `Climate change methodology`,
respPartyLabel: `Federal Emergency Management Agency (FEMA)`, respPartyLabel: `Federal Emergency Management Agency (FEMA)`,
@ -554,16 +561,20 @@ export const INDICATORS = [
}, },
{ {
domID: 'exp-pop-loss-rate', domID: 'exp-pop-loss-rate',
indicator: 'Expected Population Loss Rate', indicator: 'Expected population loss rate',
description: ` description: `
Rate relative to the population in fatalities and injuries resulting from natural hazards each Rate relative to the population in fatalities and injuries due to natural hazards each year.
year. Population loss is defined as the Spatial Hazard Events and Losses or National Centers Fourteen natural hazards that have some link to climate change include: avalanche, coastal
for Environmental Informations reported number of fatalities and injuries caused by the flooding, cold wave, drought, hail, heat wave, hurricane, ice storm, landslide, riverine
hazard occurrence. To combine fatalities and injuries for the computation of population loss value, flooding, strong wind, tornado, wildfire, and winter weather.
an injury is counted as one-tenth (1/10) of a fatality. The NCEI Storm Events Database Population loss is defined as the Spatial Hazard Events and Losses or National Centers
classifies injuries and fatalities as direct or indirect. Both direct and indirect injuries for Environmental Informations (NCEI) reported number of fatalities and injuries caused by the
and fatalities are counted as population loss. This total number of injuries and fatalities is hazard occurrence. To combine fatalities and injuries for the computation of population loss value,
then divided by the population in the census tract to get a per-capita rate of population risk. an injury is counted as one-tenth (1/10) of a fatality. The NCEI Storm Events Database
classifies injuries and fatalities as direct or indirect. Both direct and indirect injuries
and fatalities are counted as population loss. This total number of injuries and fatalities
is then divided by the population in the census tract to get a per-capita rate of population risk.
`, `,
usedIn: `Climate change methodology`, usedIn: `Climate change methodology`,
respPartyLabel: `Federal Emergency Management Agency (FEMA)`, respPartyLabel: `Federal Emergency Management Agency (FEMA)`,
@ -572,7 +583,7 @@ export const INDICATORS = [
}, },
{ {
domID: 'energy-burden', domID: 'energy-burden',
indicator: 'Energy burden', indicator: 'Energy cost burden',
description: `Average annual energy cost ($) divided by household income.`, description: `Average annual energy cost ($) divided by household income.`,
usedIn: `Clean energy and energy efficiency methodology`, usedIn: `Clean energy and energy efficiency methodology`,
respPartyLabel: `Department of Energy (DOE) LEAD Score`, respPartyLabel: `Department of Energy (DOE) LEAD Score`,
@ -581,7 +592,7 @@ export const INDICATORS = [
}, },
{ {
domID: 'pm-25', domID: 'pm-25',
indicator: 'PM2.5', indicator: 'PM2.5 in the air',
description: `Fine inhalable particles, with diameters that are generally description: `Fine inhalable particles, with diameters that are generally
2.5 micrometers and smaller.`, 2.5 micrometers and smaller.`,
usedIn: `Clean energy and energy efficiency methodology`, usedIn: `Clean energy and energy efficiency methodology`,
@ -592,7 +603,7 @@ export const INDICATORS = [
}, },
{ {
domID: 'diesel-pm', domID: 'diesel-pm',
indicator: 'Diesel particulate matter', indicator: 'Diesel particulate matter exposure',
description: `Mixture of particles that is part of diesel exhaust in the air.`, description: `Mixture of particles that is part of diesel exhaust in the air.`,
usedIn: `Clean transportation methodology`, usedIn: `Clean transportation methodology`,
respPartyLabel: `Environmental Protection Agency (EPA) National Air Toxics Assessment (NATA) respPartyLabel: `Environmental Protection Agency (EPA) National Air Toxics Assessment (NATA)
@ -613,8 +624,10 @@ export const INDICATORS = [
{ {
domID: 'house-burden', domID: 'house-burden',
indicator: 'Housing cost burden', indicator: 'Housing cost burden',
description: `Households that are low income and spend more than 30% of their description: `
income to housing costs.`, The percent of households in a census tract that are both earning less than 80% of HUD Area Median
Family Income by county and are paying greater than 30% of their income to housing costs.
`,
usedIn: `Affordable and sustainable housing methodology`, usedIn: `Affordable and sustainable housing methodology`,
respPartyLabel: `Department of Housing & Urban Developments respPartyLabel: `Department of Housing & Urban Developments
(HUD) Comprehensive Housing Affordability Strategy dataset`, (HUD) Comprehensive Housing Affordability Strategy dataset`,
@ -624,8 +637,9 @@ export const INDICATORS = [
{ {
domID: 'lead-paint', domID: 'lead-paint',
indicator: 'Lead paint', indicator: 'Lead paint',
description: `Percent of housing units built pre-1960, used as an description: `
indicator of potential lead paint exposure in homes.`, Percent of housing units built pre-1960, used as an indicator of potential lead paint exposure in
tracts with median home values less than 90th percentile `,
usedIn: `Affordable and sustainable housing methodology`, usedIn: `Affordable and sustainable housing methodology`,
respPartyLabel: `Census's American Community Survey`, respPartyLabel: `Census's American Community Survey`,
dataSourceURL: `https://www.census.gov/programs-surveys/acs`, dataSourceURL: `https://www.census.gov/programs-surveys/acs`,
@ -633,8 +647,8 @@ export const INDICATORS = [
}, },
{ {
domID: 'median-home', domID: 'median-home',
indicator: 'Median home value', indicator: 'Low median home value',
description: `Median home value of owner-occupied housing units in the area.`, description: `Median home value of owner-occupied housing units in the census tract.`,
usedIn: `Affordable and sustainable housing methodology`, usedIn: `Affordable and sustainable housing methodology`,
respPartyLabel: `Census's American Community Survey`, respPartyLabel: `Census's American Community Survey`,
dataSourceURL: `https://www.census.gov/programs-surveys/acs`, dataSourceURL: `https://www.census.gov/programs-surveys/acs`,
@ -644,19 +658,20 @@ export const INDICATORS = [
domID: 'prox-haz', domID: 'prox-haz',
indicator: 'Proximity to hazardous waste facilities', indicator: 'Proximity to hazardous waste facilities',
description: ` description: `
Count of hazardous waste facilities (Treatment, Storage, and Disposal Facilities and Large Count of hazardous waste facilities (Treatment, Storage, and Disposal Facilities and Large
Quantity Generators) within 5 km (or nearest beyond 5 km), each divided by distance in kilometers. Quantity Generators) within 5 km (or nearest beyond 5 km), each divided by distance in kilometers.
`, `,
usedIn: `Reduction and remediation of legacy pollution methodology`, usedIn: `Reduction and remediation of legacy pollution methodology`,
respPartyLabel: ` respPartyLabel: `
Environmental Protection Agency (EPA) TSDF data calculated from EPA RCRAinfo database Environmental Protection Agency (EPA) Treatment Storage, and Disposal Facilities
as compiled by EPAs EJSCREEN`, (TSDF) data calculated from EPA RCRA info database as compiled by EPAs EJSCREEN
dataSourceURL: `https://www.census.gov/programs-surveys/acs`, `,
dataSourceURL: `https://enviro.epa.gov/facts/rcrainfo/search.html`,
dateRange: `2015-2020`, dateRange: `2015-2020`,
}, },
{ {
domID: 'prox-npl', domID: 'prox-npl',
indicator: 'Proximity to National Priorities List (NPL) Sites', indicator: 'Proximity to National Priorities List (NPL) sites',
description: ` description: `
Count of proposed or listed NPL - also known as superfund - sites within 5 km (or nearest one Count of proposed or listed NPL - also known as superfund - sites within 5 km (or nearest one
beyond 5 km), each divided by distance in kilometers.`, beyond 5 km), each divided by distance in kilometers.`,
@ -667,7 +682,7 @@ export const INDICATORS = [
}, },
{ {
domID: 'prox-rmp', domID: 'prox-rmp',
indicator: 'Proximity to Risk Management Plan (RMP) Sites', indicator: 'Proximity to Risk Management Plan (RMP) facilities',
description: ` description: `
Count of RMP (potential chemical accident management plan) facilities within 5 km (or nearest Count of RMP (potential chemical accident management plan) facilities within 5 km (or nearest
one beyond 5 km), each divided by distance in kilometers.`, one beyond 5 km), each divided by distance in kilometers.`,
@ -690,7 +705,7 @@ export const INDICATORS = [
{ {
domID: 'asthma', domID: 'asthma',
indicator: 'Asthma', indicator: 'Asthma',
description: `Weighted number of respondents people who answer “yes” both description: `Weighted percent of people who answer “yes” both
to both of the following questions: Have you ever been told by a doctor, to both of the following questions: Have you ever been told by a doctor,
nurse, or other health professional that you have asthma? and the question nurse, or other health professional that you have asthma? and the question
Do you still have asthma?`, Do you still have asthma?`,
@ -702,7 +717,7 @@ export const INDICATORS = [
{ {
domID: 'diabetes', domID: 'diabetes',
indicator: 'Diabetes', indicator: 'Diabetes',
description: `People ages 18 years and older who report having ever been description: `Weighted percent of people ages 18 years and older who report having ever been
told by a doctor, nurse, or other health professionals that they have told by a doctor, nurse, or other health professionals that they have
diabetes other than diabetes during pregnancy.`, diabetes other than diabetes during pregnancy.`,
usedIn: `Health burdens methodology`, usedIn: `Health burdens methodology`,
@ -713,7 +728,7 @@ export const INDICATORS = [
{ {
domID: 'heart-disease', domID: 'heart-disease',
indicator: 'Heart disease', indicator: 'Heart disease',
description: `People ages 18 years and older who report ever having been told description: `Weighted percent of people ages 18 years and older who report ever having been told
by a doctor, nurse, or other health professionals that they had angina or by a doctor, nurse, or other health professionals that they had angina or
coronary heart disease.`, coronary heart disease.`,
usedIn: `Health burdens methodology`, usedIn: `Health burdens methodology`,
@ -724,14 +739,21 @@ export const INDICATORS = [
{ {
domID: 'life-exp', domID: 'life-exp',
indicator: 'Low life expectancy', indicator: 'Low life expectancy',
description: `Average number of years of life a person who has attained a given age can expect to live.`, description: `
Average number of years of life a person who has attained a given age can expect to live.
Note: Unlike most of the other datasets, high values of this indicator indicate low burdens.
For percentile calculations, the percentile is calculated in reverse order, so that the tract with
the highest median income relative to area median income (lowest burden on this measure) is at the
0th percentile, and the tract with the lowest median income relative to area median income
(highest burden on this measure) is at the 100th percentile.
`,
usedIn: `Health burdens methodology`, usedIn: `Health burdens methodology`,
respPartyLabel: `CDCs U.S. Small-area Life Expectancy Estimates Project (USALEEP)`, respPartyLabel: `CDCs U.S. Small-area Life Expectancy Estimates Project (USALEEP)`,
dataSourceURL: `https://www.cdc.gov/nchs/nvss/usaleep/usaleep.html#data`, dataSourceURL: `https://www.cdc.gov/nchs/nvss/usaleep/usaleep.html#data`,
dateRange: `2010-2015`, dateRange: `2010-2015`,
}, },
{ {
domID: 'median-income', domID: 'low-med-inc',
indicator: 'Low median Income', indicator: 'Low median Income',
description: `Median income of the census tract calculated as a percent of the areas median income.`, description: `Median income of the census tract calculated as a percent of the areas median income.`,
usedIn: `Training and workforce development`, usedIn: `Training and workforce development`,
@ -742,8 +764,9 @@ export const INDICATORS = [
{ {
domID: 'ling-iso', domID: 'ling-iso',
indicator: 'Linguistic Isolation', indicator: 'Linguistic Isolation',
description: `Households in which no one age 14 and over speaks English only or also speaks description: `
a language other than English`, The percent of limited speaking households, which are households where no one over age 14 speaks English well.
`,
usedIn: `Training and workforce development`, usedIn: `Training and workforce development`,
respPartyLabel: `Census's American Community Survey`, respPartyLabel: `Census's American Community Survey`,
dataSourceURL: `https://www.census.gov/programs-surveys/acs`, dataSourceURL: `https://www.census.gov/programs-surveys/acs`,

View file

@ -147,11 +147,11 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
<div /> <div />
<div> <div>
<span> <span>
This is a Beta site. This is a beta site.
</span> </span>
<span> <span>
It is an early, in-progress version of the tool with limited data It is an early, in-progress version of the tool with limited datasets
sets that will be continuously updated. that will be continuously updated.
</span> </span>
</div> </div>
</div> </div>
@ -293,12 +293,13 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
<p> <p>
For general feedback, email For general feedback, email
<a <a
href="mailto:screeningtool.feedback@usds.gov" href="mailto:Screeningtool-Support@omb.eop.gov"
rel="noreferrer" rel="noreferrer"
target="_blank" target="_blank"
> >
screeningtool.feedback@usds.gov Screeningtool-Support@omb.eop.gov
</a> </a>
.
</p> </p>
</div> </div>
</div> </div>
@ -436,6 +437,8 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
class="footer-link-first-child" class="footer-link-first-child"
data-cy="find-a-contact-at-usa-gov" data-cy="find-a-contact-at-usa-gov"
href="https://www.usa.gov/" href="https://www.usa.gov/"
rel="noreferrer"
target="_blank"
> >
Find a contact at USA.gov Find a contact at USA.gov
</a> </a>
@ -487,7 +490,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
data-testid="button" data-testid="button"
type="button" type="button"
> >
Tell us how we're doing Help improve the site & data
</button> </button>
</div> </div>
</footer> </footer>

View file

@ -147,11 +147,11 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
<div /> <div />
<div> <div>
<span> <span>
This is a Beta site. This is a beta site.
</span> </span>
<span> <span>
It is an early, in-progress version of the tool with limited data It is an early, in-progress version of the tool with limited datasets
sets that will be continuously updated. that will be continuously updated.
</span> </span>
</div> </div>
</div> </div>
@ -279,7 +279,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
<h1 <h1
data-cy="about-page-heading" data-cy="about-page-heading"
> >
About us About
</h1> </h1>
<div <div
class="grid-row grid-gap-lg j40-aboutcard-container " class="grid-row grid-gap-lg j40-aboutcard-container "
@ -319,22 +319,21 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
In In
<a <a
href="https://www.federalregister.gov/documents/2021/02/01/2021-02177/tackling-the-climate-crisis-at-home-and-abroad#:~:text=Sec.%20223.%20Justice40,40-percent%20goal." href="https://www.whitehouse.gov/briefing-room/presidential-actions/2021/01/27/executive-order-on-tackling-the-climate-crisis-at-home-and-abroad/"
target="blank"
> >
Executive Order 14008 Executive Order 14008
</a> </a>
on Tackling the Climate Crisis at Home and Abroad, on
President Biden directed the Council on <i>
Environmental Quality (CEQ) to create a Climate and Economic Tackling the Climate Crisis at Home and Abroad
Justice Screening Tool. The purpose of the tool is to help </i>
Federal agencies identify disadvantaged communities , President Biden directed the Council on Environmental Quality (CEQ)
that have been historically marginalized, underserved, and to create a Climate and Economic Justice Screening Tool. The purpose of the tool is to help
overburdened by pollution. The tool provides Federal agencies identify disadvantaged communities that have been historically
socioeconomic, environmental, and climate information marginalized, underserved, and overburdened by pollution. The tool provides socioeconomic,
to inform decisions that may affect these communities. The tool environmental, and climate information to inform decisions that may affect these communities. The
identifies disadvantaged communities tool identifies disadvantaged communities through publicly-available, nationally-consistent, and high-quality data.
through publicly available, nationally consistent, high-quality
data.
</p> </p>
<p> <p>
@ -362,14 +361,14 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
data-testid="grid" data-testid="grid"
> >
<img <img
alt="Justice40 Initiative" alt="Justice40"
class="j40-aboutcard-image" class="j40-aboutcard-image"
src="test-file-stub" src="test-file-stub"
/> />
</div> </div>
<div <div
class="tablet:grid-col-9" class="tablet:grid-col-9"
data-cy="justice40-initiative-block" data-cy="justice40-block"
data-testid="grid" data-testid="grid"
> >
<div <div
@ -377,21 +376,35 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
data-testid="grid" data-testid="grid"
> >
<h2> <h2>
Justice40 Initiative Justice40
</h2> </h2>
<p> <p>
The tool will provide important information for the Justice40 Initiative. The goal of the Justice40 Initiative is to provide 40-percent of the overall benefits of certain federal programs in seven key areas to disadvantaged communities. These seven key areas are: climate change, clean energy and energy efficiency, clean transit, affordable and sustainable housing, training and workforce development, the remediation and reduction of legacy pollution, and the development of critical clean water infrastructure.
The tool will provide important information for the Justice40 Initiative. The goal of the
Justice40 Initiative is to provide 40 percent of the overall benefits of certain federal
programs in seven key areas to disadvantaged communities. These seven key areas are: climate
change, clean energy and energy efficiency, clean transit, affordable and sustainable
housing, training and workforce development (related to climate, natural disasters, environment,
clean energy, clean transportation, affordable and sustainable housing, water and
wastewater infrastructure, and legacy pollution reduction, including in energy communities),
the remediation and reduction of legacy pollution, and the development of critical clean water infrastructure.
</p> </p>
<p> <p>
Read more about the Justice40 Initiative in President Bidens Read more about the Justice40 Initiative in President Bidens
<a <a
href="https://www.federalregister.gov/documents/2021/02/01/2021-02177/tackling-the-climate-crisis-at-home-and-abroad#:~:text=Sec.%20223.%20Justice40,40-percent%20goal." href="https://www.whitehouse.gov/briefing-room/presidential-actions/2021/01/27/executive-order-on-tackling-the-climate-crisis-at-home-and-abroad/"
target="blank"
> >
Executive Order 14008 Executive Order 14008
</a> </a>
on Tackling the Climate Crisis at Home and Abroad. on
<i>
Tackling the Climate Crisis at Home and Abroad
</i>
.
</p> </p>
</div> </div>
@ -575,11 +588,11 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
> >
<a <a
class="j40-aboutcard-link" class="j40-aboutcard-link"
href="mailto:screeningtool.feedback@usds.gov" href="mailto:Screeningtool-Support@omb.eop.gov"
rel="noreferrer" rel="noreferrer"
target="_blank" target="_blank"
> >
Email: screeningtool.feedback@usds.gov Email: Screeningtool-Support@omb.eop.gov
</a> </a>
</div> </div>
</div> </div>
@ -623,7 +636,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
Join the open source community Join the open source community
</h3> </h3>
<p> <p>
The screening tools code is open source, which means it is available for the public to view and contribute to. Anyone can view and contribute on GitHub. The screening tools code is open source, which means it is available for the public to view and contribute to.
</p> </p>
<div <div
class="j40-aboutcard-sm-link" class="j40-aboutcard-sm-link"
@ -782,6 +795,8 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
class="footer-link-first-child" class="footer-link-first-child"
data-cy="find-a-contact-at-usa-gov" data-cy="find-a-contact-at-usa-gov"
href="https://www.usa.gov/" href="https://www.usa.gov/"
rel="noreferrer"
target="_blank"
> >
Find a contact at USA.gov Find a contact at USA.gov
</a> </a>
@ -833,7 +848,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
data-testid="button" data-testid="button"
type="button" type="button"
> >
Tell us how we're doing Help improve the site & data
</button> </button>
</div> </div>
</footer> </footer>

View file

@ -147,11 +147,11 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
<div /> <div />
<div> <div>
<span> <span>
This is a Beta site. This is a beta site.
</span> </span>
<span> <span>
It is an early, in-progress version of the tool with limited data It is an early, in-progress version of the tool with limited datasets
sets that will be continuously updated. that will be continuously updated.
</span> </span>
</div> </div>
</div> </div>
@ -290,11 +290,10 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
<section> <section>
<p> <p>
This tool identifies commmunities that are economically disadvantaged, overburdened by This tool identifies communities that are overburdened by pollution and other environmental exposures
certain environmental risks, and marginalized by legacies of historic underinvestment. and disadvantaged by underinvestment. A community qualifies as disadvantaged when a census tract
A community qualifies as 'disadvantaged' when a census tract is at or above a certain is at or above a certain threshold for a climate or environmental burden indicator and also above
threshold for a climate or environmental burden indicator and also above a certain a certain threshold for a socioeconomic indicator. Census tract geographical boundaries are
threshold for a socioeconomic indicator. Census tract geographical boundaries are
determined by the U.S. Census Bureau once every ten years. This tool untilizes the determined by the U.S. Census Bureau once every ten years. This tool untilizes the
census tract boundaries from 2010. census tract boundaries from 2010.
@ -330,8 +329,8 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
> >
<p> <p>
Communities will be defined as disadvantaged if they meet the qualifications under one Communities will be defined as disadvantaged for the purposes of Justice40 if they meet
or more of the 8 categories of criteria below. the qualifications under one or more of the eight categories of criteria below.
</p> </p>
</section> </section>
@ -348,11 +347,11 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
<div> <div>
<div> <div>
<div> <div>
Draft communities list v0.1 (111MB) Draft communities list v0.1 (73MB)
</div> </div>
<div> <div>
The package includes draft v0.1 of the list of disadvantaged communities The download package includes draft v0.1 of the list of disadvantaged communities
(.csv and .xlsx) and information (.pdf) about how to use the list. (.csv and .xlsx) and information (.pdf) about how to use the list.
<span> <span>
@ -485,13 +484,13 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
<a <a
href="#energy-burden" href="#energy-burden"
> >
energy cost burden score energy cost burden
</a> </a>
OR score OR
<a <a
href="#pm-25" href="#pm-25"
> >
PM2.5 PM2.5 in the air
</a> </a>
@ -526,7 +525,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
<a <a
href="#diesel-pm" href="#diesel-pm"
> >
diesel particulate matter diesel particulate matter exposure
</a> </a>
or or
<a <a
@ -573,10 +572,10 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
<a <a
href="#median-home" href="#median-home"
> >
the median home value low median home value
</a> </a>
is less than is at or less than
90th percentile OR at or above the 90th percentile for the 90th percentile OR at or above the 10th percentile for the
<a <a
href="#house-burden" href="#house-burden"
> >
@ -621,13 +620,13 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
<a <a
href="#prox-npl" href="#prox-npl"
> >
proximity to NLP sites proximity to NPL sites
</a> </a>
OR OR
<a <a
href="#prox-rmp" href="#prox-rmp"
> >
proximity to RMP sites proximity to RMP facilities
</a> </a>
@ -746,14 +745,14 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
<strong> <strong>
IF IF
</strong> </strong>
at or above 90th percentile for at or above the 90th percentile for
<a <a
href="#low-med-inc" href="#low-med-inc"
> >
low median income relative to area median income low median income
</a> </a>
OR as a percent of area median income OR
at or above the 90th percentile for
<a <a
href="#ling-iso" href="#ling-iso"
> >
@ -767,13 +766,13 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
unemployment unemployment
</a> </a>
OR OR
for percentage individuals in households at or below 100% federal percent individuals in households at or below 100% federal
<a <a
href="#poverty" href="#poverty"
> >
poverty poverty
</a> </a>
level at or above 90% level
</p> </p>
<p> <p>
@ -788,7 +787,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
> >
the high school degree achievement rates the high school degree achievement rates
</a> </a>
for adults 25 years and older is less than 90% for adults 25 years and older is at or less than 90%
</p> </p>
<p> <p>
@ -833,7 +832,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
id="low-income" id="low-income"
> >
<h3> <h3>
Low Income Low income
</h3> </h3>
<div> <div>
@ -872,11 +871,15 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
id="exp-agr-loss-rate" id="exp-agr-loss-rate"
> >
<h3> <h3>
Expected Agriculture Loss Rate Expected agriculture loss rate
</h3> </h3>
<div> <div>
Economic loss rate to agriculture resulting from natural hazards each year. Percent of agriculture value at risk from losses due to natural hazards. Calculated by dividing
the agriculture value at risk in a census tract by the total agriculture value in that census
tract. Fourteen natural hazards that have some link to climate change include: avalanche,
coastal flooding, cold wave, drought, hail, heat wave, hurricane, ice storm, landslide,
riverine flooding, strong wind, tornado, wildfire, and winter weather.
</div> </div>
<ul> <ul>
@ -910,11 +913,15 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
id="exp-bld-loss-rate" id="exp-bld-loss-rate"
> >
<h3> <h3>
Expected Building Loss Rate Expected building loss rate
</h3> </h3>
<div> <div>
Economic loss rate to buildings resulting from natural hazards each year. Percent of building value at risk from losses due to natural hazards. Calculated by dividing the
building value at risk in a census tract by the total building value in that census tract.
Fourteen natural hazards that have some link to climate change include: avalanche, coastal flooding,
cold wave, drought, hail, heat wave, hurricane, ice storm, landslide, riverine flooding, strong
wind, tornado, wildfire, and winter weather.
</div> </div>
<ul> <ul>
@ -948,18 +955,22 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
id="exp-pop-loss-rate" id="exp-pop-loss-rate"
> >
<h3> <h3>
Expected Population Loss Rate Expected population loss rate
</h3> </h3>
<div> <div>
Rate relative to the population in fatalities and injuries resulting from natural hazards each Rate relative to the population in fatalities and injuries due to natural hazards each year.
year. Population loss is defined as the Spatial Hazard Events and Losses or National Centers Fourteen natural hazards that have some link to climate change include: avalanche, coastal
for Environmental Informations reported number of fatalities and injuries caused by the flooding, cold wave, drought, hail, heat wave, hurricane, ice storm, landslide, riverine
hazard occurrence. To combine fatalities and injuries for the computation of population loss value, flooding, strong wind, tornado, wildfire, and winter weather.
an injury is counted as one-tenth (1/10) of a fatality. The NCEI Storm Events Database Population loss is defined as the Spatial Hazard Events and Losses or National Centers
classifies injuries and fatalities as direct or indirect. Both direct and indirect injuries for Environmental Informations (NCEI) reported number of fatalities and injuries caused by the
and fatalities are counted as population loss. This total number of injuries and fatalities is hazard occurrence. To combine fatalities and injuries for the computation of population loss value,
then divided by the population in the census tract to get a per-capita rate of population risk. an injury is counted as one-tenth (1/10) of a fatality. The NCEI Storm Events Database
classifies injuries and fatalities as direct or indirect. Both direct and indirect injuries
and fatalities are counted as population loss. This total number of injuries and fatalities
is then divided by the population in the census tract to get a per-capita rate of population risk.
</div> </div>
<ul> <ul>
@ -993,7 +1004,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
id="energy-burden" id="energy-burden"
> >
<h3> <h3>
Energy burden Energy cost burden
</h3> </h3>
<div> <div>
Average annual energy cost ($) divided by household income. Average annual energy cost ($) divided by household income.
@ -1029,7 +1040,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
id="pm-25" id="pm-25"
> >
<h3> <h3>
PM2.5 PM2.5 in the air
</h3> </h3>
<div> <div>
Fine inhalable particles, with diameters that are generally Fine inhalable particles, with diameters that are generally
@ -1067,7 +1078,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
id="diesel-pm" id="diesel-pm"
> >
<h3> <h3>
Diesel particulate matter Diesel particulate matter exposure
</h3> </h3>
<div> <div>
Mixture of particles that is part of diesel exhaust in the air. Mixture of particles that is part of diesel exhaust in the air.
@ -1144,8 +1155,10 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
Housing cost burden Housing cost burden
</h3> </h3>
<div> <div>
Households that are low income and spend more than 30% of their
income to housing costs. The percent of households in a census tract that are both earning less than 80% of HUD Area Median
Family Income by county and are paying greater than 30% of their income to housing costs.
</div> </div>
<ul> <ul>
<li> <li>
@ -1182,8 +1195,9 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
Lead paint Lead paint
</h3> </h3>
<div> <div>
Percent of housing units built pre-1960, used as an
indicator of potential lead paint exposure in homes. Percent of housing units built pre-1960, used as an indicator of potential lead paint exposure in
tracts with median home values less than 90th percentile
</div> </div>
<ul> <ul>
<li> <li>
@ -1216,10 +1230,10 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
id="median-home" id="median-home"
> >
<h3> <h3>
Median home value Low median home value
</h3> </h3>
<div> <div>
Median home value of owner-occupied housing units in the area. Median home value of owner-occupied housing units in the census tract.
</div> </div>
<ul> <ul>
<li> <li>
@ -1256,8 +1270,8 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
</h3> </h3>
<div> <div>
Count of hazardous waste facilities (Treatment, Storage, and Disposal Facilities and Large Count of hazardous waste facilities (Treatment, Storage, and Disposal Facilities and Large
Quantity Generators) within 5 km (or nearest beyond 5 km), each divided by distance in kilometers. Quantity Generators) within 5 km (or nearest beyond 5 km), each divided by distance in kilometers.
</div> </div>
<ul> <ul>
@ -1266,13 +1280,14 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
Responsible Party: Responsible Party:
</span> </span>
<a <a
href="https://www.census.gov/programs-surveys/acs" href="https://enviro.epa.gov/facts/rcrainfo/search.html"
rel="noreferrer" rel="noreferrer"
target="_blank" target="_blank"
> >
Environmental Protection Agency (EPA) TSDF data calculated from EPA RCRAinfo database Environmental Protection Agency (EPA) Treatment Storage, and Disposal Facilities
as compiled by EPAs EJSCREEN (TSDF) data calculated from EPA RCRA info database as compiled by EPAs EJSCREEN
</a> </a>
</li> </li>
<li> <li>
@ -1293,7 +1308,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
id="prox-npl" id="prox-npl"
> >
<h3> <h3>
Proximity to National Priorities List (NPL) Sites Proximity to National Priorities List (NPL) sites
</h3> </h3>
<div> <div>
@ -1331,7 +1346,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
id="prox-rmp" id="prox-rmp"
> >
<h3> <h3>
Proximity to Risk Management Plan (RMP) Sites Proximity to Risk Management Plan (RMP) facilities
</h3> </h3>
<div> <div>
@ -1410,7 +1425,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
Asthma Asthma
</h3> </h3>
<div> <div>
Weighted number of respondents people who answer “yes” both Weighted percent of people who answer “yes” both
to both of the following questions: “Have you ever been told by a doctor, to both of the following questions: “Have you ever been told by a doctor,
nurse, or other health professional that you have asthma?” and the question nurse, or other health professional that you have asthma?” and the question
“Do you still have asthma?” “Do you still have asthma?”
@ -1449,7 +1464,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
Diabetes Diabetes
</h3> </h3>
<div> <div>
People ages 18 years and older who report having ever been Weighted percent of people ages 18 years and older who report having ever been
told by a doctor, nurse, or other health professionals that they have told by a doctor, nurse, or other health professionals that they have
diabetes other than diabetes during pregnancy. diabetes other than diabetes during pregnancy.
</div> </div>
@ -1487,7 +1502,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
Heart disease Heart disease
</h3> </h3>
<div> <div>
People ages 18 years and older who report ever having been told Weighted percent of people ages 18 years and older who report ever having been told
by a doctor, nurse, or other health professionals that they had angina or by a doctor, nurse, or other health professionals that they had angina or
coronary heart disease. coronary heart disease.
</div> </div>
@ -1525,7 +1540,14 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
Low life expectancy Low life expectancy
</h3> </h3>
<div> <div>
Average number of years of life a person who has attained a given age can expect to live.
Average number of years of life a person who has attained a given age can expect to live.
Note: Unlike most of the other datasets, high values of this indicator indicate low burdens.
For percentile calculations, the percentile is calculated in reverse order, so that the tract with
the highest median income relative to area median income (lowest burden on this measure) is at the
0th percentile, and the tract with the lowest median income relative to area median income
(highest burden on this measure) is at the 100th percentile.
</div> </div>
<ul> <ul>
<li> <li>
@ -1555,7 +1577,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
</ul> </ul>
</div> </div>
<div <div
id="median-income" id="low-med-inc"
> >
<h3> <h3>
Low median Income Low median Income
@ -1597,8 +1619,9 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
Linguistic Isolation Linguistic Isolation
</h3> </h3>
<div> <div>
Households in which no one age 14 and over speaks English only or also speaks
a language other than English The percent of limited speaking households, which are households where no one over age 14 speaks English well.
</div> </div>
<ul> <ul>
<li> <li>
@ -1881,6 +1904,8 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
class="footer-link-first-child" class="footer-link-first-child"
data-cy="find-a-contact-at-usa-gov" data-cy="find-a-contact-at-usa-gov"
href="https://www.usa.gov/" href="https://www.usa.gov/"
rel="noreferrer"
target="_blank"
> >
Find a contact at USA.gov Find a contact at USA.gov
</a> </a>
@ -1932,7 +1957,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
data-testid="button" data-testid="button"
type="button" type="button"
> >
Tell us how we're doing Help improve the site & data
</button> </button>
</div> </div>
</footer> </footer>

View file

@ -120,7 +120,7 @@ _For example: `poetry run python3 data_pipeline/application.py etl-run -d ejscre
1. These data sets are merged into a single dataframe using their Census Block Group GEOID as a common key, and the data in each of the columns is standardized in two ways: 1. These data sets are merged into a single dataframe using their Census Block Group GEOID as a common key, and the data in each of the columns is standardized in two ways:
- Their [percentile rank](https://en.wikipedia.org/wiki/Percentile_rank) is calculated, which tells us what percentage of other Census Block Groups have a lower value for that particular column. - Their [percentile rank](https://en.wikipedia.org/wiki/Percentile_rank) is calculated, which tells us what percentage of other Census Block Groups have a lower value for that particular column.
- They are normalized using [min-max normalization](https://en.wikipedia.org/wiki/Feature_scaling), which adjusts the scale of the data so that the Census Block Group with the highest value for that column is set to 1, the Census Block Group with the lowest value is set to 0, and all of the other values are adjusted to fit within that range based on how close they were to the highest or lowest value. - They are normalized using [min-max normalization](https://en.wikipedia.org/wiki/Feature_scaling), which adjusts the scale of the data so that the Census Block Group with the highest value for that column is set to 1, the Census Block Group with the lowest value is set to 0, and all of the other values are adjusted to fit within that range based on how close they were to the highest or lowest value.
1. The standardized columns are then used to calculate each of the Justice40 score experiments described in greater detail below, and the results are exported to a `.csv` file in [`data/score/csv`](data/score/csv) 1. The standardized columns are then used to calculate each of the Justice40 score experiments described in greater detail below, and the results are exported to a `.csv` file in [`data_pipeline/data/score/csv`](data_pipeline/data/score/csv)
#### Step 4: Compare the Justice40 score experiments to other indices #### Step 4: Compare the Justice40 score experiments to other indices
@ -143,13 +143,13 @@ _NOTE:_ This may take several minutes or over an hour to fully execute and gener
### Data Sources ### Data Sources
- **[EJSCREEN](etl/sources/ejscreen):** TODO Add description of data source - **[EJSCREEN](data_pipeline/etl/sources/ejscreen):** TODO Add description of data source
- **[Census](etl/sources/census):** TODO Add description of data source - **[Census](data_pipeline/etl/sources/census):** TODO Add description of data source
- **[American Communities Survey](etl/sources/census_acs):** TODO Add description of data source - **[American Communities Survey](data_pipeline/etl/sources/census_acs):** TODO Add description of data source
- **[Housing and Transportation](etl/sources/housing_and_transportation):** TODO Add description of data source - **[Housing and Transportation](data_pipeline/etl/sources/housing_and_transportation):** TODO Add description of data source
- **[HUD Housing](etl/sources/hud_housing):** TODO Add description of data source - **[HUD Housing](data_pipeline/etl/sources/hud_housing):** TODO Add description of data source
- **[HUD Recap](etl/sources/hud_recap):** TODO Add description of data source - **[HUD Recap](data_pipeline/etl/sources/hud_recap):** TODO Add description of data source
- **[CalEnviroScreen](etl/scores/calenviroscreen):** TODO Add description of data source - **[CalEnviroScreen](data_pipeline/etl/sources/calenviroscreen):** TODO Add description of data source
## Running using Docker ## Running using Docker

View file

@ -8,6 +8,8 @@ from data_pipeline.utils import get_module_logger
logger = get_module_logger(__name__) logger = get_module_logger(__name__)
CENSUS_ACS_FIPS_CODES_TO_SKIP = ["60", "66", "69", "78"]
def _fips_from_censusdata_censusgeo(censusgeo: censusdata.censusgeo) -> str: def _fips_from_censusdata_censusgeo(censusgeo: censusdata.censusgeo) -> str:
"""Create a FIPS code from the proprietary censusgeo index.""" """Create a FIPS code from the proprietary censusgeo index."""
@ -22,32 +24,34 @@ def retrieve_census_acs_data(
tract_output_field_name: str, tract_output_field_name: str,
data_path_for_fips_codes: Path, data_path_for_fips_codes: Path,
acs_type="acs5", acs_type="acs5",
raise_errors: bool = False,
) -> pd.DataFrame: ) -> pd.DataFrame:
"""Retrieves and combines census ACS data for a given year.""" """Retrieves and combines census ACS data for a given year."""
dfs = [] dfs = []
for fips in get_state_fips_codes(data_path_for_fips_codes): for fips in get_state_fips_codes(data_path_for_fips_codes):
logger.info( if fips in CENSUS_ACS_FIPS_CODES_TO_SKIP:
f"Downloading data for state/territory with FIPS code {fips}" logger.info(
) f"Skipping download for state/territory with FIPS code {fips}"
try:
response = censusdata.download(
src=acs_type,
year=acs_year,
geo=censusdata.censusgeo(
[("state", fips), ("county", "*"), ("tract", "*")]
),
var=variables,
) )
dfs.append(response) else:
logger.info(
except ValueError as e: f"Downloading data for state/territory with FIPS code {fips}"
logger.error(
f"Could not download data for state/territory with FIPS code {fips}"
) )
if raise_errors: try:
response = censusdata.download(
src=acs_type,
year=acs_year,
geo=censusdata.censusgeo(
[("state", fips), ("county", "*"), ("tract", "*")]
),
var=variables,
)
dfs.append(response)
except ValueError as e:
logger.error(
f"Could not download data for state/territory with FIPS code {fips}"
)
raise e raise e
df = pd.concat(dfs) df = pd.concat(dfs)

View file

@ -50,7 +50,6 @@ class CensusACS2010ETL(ExtractTransformLoad):
] ]
self.EMPLOYMENT_LESS_THAN_HS_IN_LABOR_FORCE = ( self.EMPLOYMENT_LESS_THAN_HS_IN_LABOR_FORCE = (
# TODO: FIX!!!!!!
"B23006_005E" "B23006_005E"
# Estimate!!Total!!Less than high school graduate!!In labor force!!Civilian # Estimate!!Total!!Less than high school graduate!!In labor force!!Civilian
) )
@ -115,7 +114,6 @@ class CensusACS2010ETL(ExtractTransformLoad):
tract_output_field_name=self.GEOID_TRACT_FIELD_NAME, tract_output_field_name=self.GEOID_TRACT_FIELD_NAME,
data_path_for_fips_codes=self.DATA_PATH, data_path_for_fips_codes=self.DATA_PATH,
acs_type=self.ACS_TYPE, acs_type=self.ACS_TYPE,
raise_errors=False,
) )
def transform(self) -> None: def transform(self) -> None:

View file

@ -1,42 +1,7 @@
# Installation Prerequisites # Justice40 Project Documentation
1. [Install the latest docker](https://docs.docker.com/get-docker/) and you may want to install [docker desktop - latest](https://docs.docker.com/desktop/) If you are new to this project, check out the [top level README](/README.md) first.
2. [Install python 3.9.5 (latest) and](https://www.python.org/downloads/) [configure your environment](https://docs.python.org/3/tutorial/venv.html) to get data-platform source environment ready.
3. Install Visual Studio Code (python packages & typescript) <TODO: add .vscode>
4. [Installing nvm](https://github.com/nvm-sh/nvm#installing-and-updating) and then do:
```sh
nvm install 14.17.0
nvm use 14.17.0 The content under this directory should be more about conceptually understanding the project, such as [architecture diagrams](architecture), [decision logs](decisions), and the [Open Source Community Orientation](/docs/Justice40_Open_Source_Community_Orientation.pptx), rather than about specific installation steps.
```
and now when you do:
```sh
node -v
```
you should see:
```sh
v14.17.0
```
6. Install [node.js](https://nodejs.org/en/download/) and install all dependencies by `cd`ing into the `/client` directory and running:
```sh For documentation related to installation and getting set up as a developer or data scientist, see [For Developers and Data Scientists](/README.md#for-developers-and-data-scientists).
npm install
```
* Note: `npm install` will check the `package-lock.json` fill and restore all transitive dependencies that are in the lock.
# Build
<TODO: .vscode/task.json file with build commands for each backend>
# PR Process & Git Flow
[See Contributing.md](../CONTRIBUTING.md)
# Documentation
Here you'll find all Justice40 project documentation.
In particular:
- [Decisions](decisions) - Documentation of significant project decisions
- [Data Roadmap](data-roadmap.md) - a description of our process for adding new datasets to our backlog

View file

@ -159,7 +159,7 @@ Leaflet is a popular open-source mapping visualization library that has been aro
- Anecdotally, screen readers still struggle to read content without annotations - the onus is still on the map creator to ensure proper compliance. - Anecdotally, screen readers still struggle to read content without annotations - the onus is still on the map creator to ensure proper compliance.
- **Internationalization/Localization** : the API has its own `intl` module, described [here](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html) - **Internationalization/Localization** : the API has its own `intl` module, described [here](https://developers.arcgis.com/javascript/latest/api-reference/esri-intl.html)
- Note: The default ES6 `Intl` module appears to do all of the things described above without need for further modificaiton - Note: The default ES6 `Intl` module appears to do all of the things described above without need for further modificaiton
- **Name recognition** : Esri in general holds "approximately 43% of the global market share and estimated annual revenues of approximately $1.1 Billion, from roughly 300,000 customers" ([source](https://digital.hbs.edu/platform-digit/submission/esri-and-arcgis/])). Relatedly, Esri tools interoperate well with other Esri tools, and their ecosystem is large. - **Name recognition** : Esri in general holds "approximately 43% of the global market share and estimated annual revenues of approximately $1.1 Billion, from roughly 300,000 customers" ([source](https://digital.hbs.edu/platform-digit/submission/esri-and-arcgis/)). Relatedly, Esri tools interoperate well with other Esri tools, and their ecosystem is large.
- Note: according to [one analysis](https://www.datanyze.com/market-share/mapping-and-gis--121) specifically the ArcGIS Web API holds only 0.48% of the marketshare overall. - Note: according to [one analysis](https://www.datanyze.com/market-share/mapping-and-gis--121) specifically the ArcGIS Web API holds only 0.48% of the marketshare overall.
- **Modularity** : As seen in ArcGIS [documentation](https://developers.arcgis.com/documentation/), Esri interoperates with Leaflet (through a custom fork), Mapbox GL JS, and OpenLayers. - **Modularity** : As seen in ArcGIS [documentation](https://developers.arcgis.com/documentation/), Esri interoperates with Leaflet (through a custom fork), Mapbox GL JS, and OpenLayers.

25
mlc_config.json Normal file
View file

@ -0,0 +1,25 @@
{
"ignorePatterns": [
{
"pattern": "^http://localhost"
},
{
"pattern": "yyyymmdd-xxx.md"
},
{
"pattern": "https://support.gatsbyjs.com/hc/en-us/articles/360053096273-Why-did-I-hit-Out-of-Memory-errors-"
},
{
"pattern": "^http://www.datasciencetoolkit.org"
},
{
"pattern": "^https://github.com/usds/environmental-justice/"
}
],
"replacementPatterns": [
{
"pattern": "^/",
"replacement": "{{BASEURL}}/"
}
]
}