diff --git a/CHANGELOG.md b/CHANGELOG.md index e2845b3..ca96908 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,18 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## [1.0.4] - 2024-08-16 + +### Added +- Added the top info session for IRA page [#309](https://github.com/policy-design-lab/pdl-frontend/issues/309) +- Added "Other CSP" statues and related categories to the CSP pages [#303](https://github.com/policy-design-lab/pdl-frontend/issues/303) +- Added null value handling for the latest CSP data [#301](https://github.com/policy-design-lab/pdl-frontend/issues/301) + +### Changed +- Changed the "Other Improvement" in the EQIP page categories to "Other Improvements" [#311](https://github.com/policy-design-lab/pdl-frontend/issues/311) +- Updated CSP category list to match latest data [#305](https://github.com/policy-design-lab/pdl-frontend/issues/305) +- Updated the color legends for the EQIP and CSP maps to match latest data [#304](https://github.com/policy-design-lab/pdl-frontend/issues/304) + ## [1.0.3] - 2024-08-01 ### Fixed @@ -268,6 +280,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Map data json [#12](https://github.com/policy-design-lab/pdl-frontend/issues/12) - Final landing page changes for initial milestone [#15](https://github.com/policy-design-lab/pdl-frontend/issues/15) +[1.0.4]: https://github.com/policy-design-lab/pdl-frontend/compare/1.0.3...1.0.4 [1.0.3]: https://github.com/policy-design-lab/pdl-frontend/compare/1.0.2...1.0.3 [1.0.2]: https://github.com/policy-design-lab/pdl-frontend/compare/1.0.1...1.0.2 [1.0.1]: https://github.com/policy-design-lab/pdl-frontend/compare/1.0.0...1.0.1 diff --git a/package-lock.json b/package-lock.json index af5e5c1..f2c263d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "policy-design-lab", - "version": "1.0.3", + "version": "1.0.4", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/package.json b/package.json index 8a65fb5..59e3653 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "policy-design-lab", - "version": "1.0.3", + "version": "1.0.4", "description": "the front end of policy design lab", "repository": "https://github.com/policy-design-lab/pdl-frontend", "main": "src/app.tsx", diff --git a/src/components/ProgramDrawer.tsx b/src/components/ProgramDrawer.tsx index b704ab7..1078db7 100644 --- a/src/components/ProgramDrawer.tsx +++ b/src/components/ProgramDrawer.tsx @@ -128,7 +128,7 @@ function EQIPCheckboxList({ setEQIPChecked, setShowPopUp, zeroCategory }) { "Structural", "Soil remediation", "Vegetative", - "Other improvement", + "Other improvements", "Soil testing", "Other planning", "Conservation planning assessment", @@ -297,6 +297,7 @@ function CSPCheckboxList({ setCSPChecked, setShowPopUp, zeroCategory }) { // Match PR89 suggestions const CSPList = [ "Total CSP Benefits", + "2018 Practices", "Structural", "Vegetative", @@ -304,17 +305,20 @@ function CSPCheckboxList({ setCSPChecked, setShowPopUp, zeroCategory }) { "Forest management", "Soil remediation", "Existing activity payments", - "Bundles", "Soil testing", - "Other improvement", + "Other improvements", "2014 Eligible Land", "Cropland", "Grassland", "Rangeland", "Pastureland", - "Non-industrial private forestland", - "Other: supplemental, adjustment & other" + "Non-Industrial Private Forestland (NIPF)", + + "Other CSP", + "Miscellaneous", + "Bundles", + "(6)(B) Planning" ]; const classes = useStyles(); return ( @@ -349,7 +353,8 @@ function CSPCheckboxList({ setCSPChecked, setShowPopUp, zeroCategory }) { if ( category !== "2018 Practices" && category !== "2014 Eligible Land" && - category !== "Total CSP Benefits" + category !== "Total CSP Benefits" && + category !== "Other CSP" ) { return ( @@ -400,7 +405,7 @@ function CSPCheckboxList({ setCSPChecked, setShowPopUp, zeroCategory }) { ); } - if (category === "2018 Practices" || category === "2014 Eligible Land") { + if (category === "2018 Practices" || category === "2014 Eligible Land" || category === "Other CSP") { return ( diff --git a/src/components/csp/CategoryMap.tsx b/src/components/csp/CategoryMap.tsx index ae7ddc5..0f26251 100644 --- a/src/components/csp/CategoryMap.tsx +++ b/src/components/csp/CategoryMap.tsx @@ -48,16 +48,25 @@ const MapChart = (props) => { const AArray = ACur.practiceCategories; const BCur = statuteRecord.find((s) => s.statuteName === "2014 Eligible Land"); const BArray = BCur.practiceCategories; - const TotalArray = AArray.concat(BArray); + const CCur = statuteRecord.find((s) => s.statuteName === "Other CSP"); + const CArray = CCur.practiceCategories; + const TotalArray = AArray.concat(BArray).concat(CArray); if (category === "2018 Practices") { categoryRecord = statuteRecord[0]; } else if (category === "2014 Eligible Land") { categoryRecord = statuteRecord[1]; + } else if (category === "Other CSP") { + categoryRecord = statuteRecord[2]; } else { categoryRecord = TotalArray.find((s) => s.practiceCategoryName === category); } + if (categoryRecord === undefined) { + return null; + } const categoryPayment = categoryRecord.totalPaymentInDollars; - const nationwidePercentage = categoryRecord.totalPaymentInPercentageNationwide; + const nationwidePercentage = categoryRecord.totalPaymentInPercentageNationwide + ? categoryRecord.totalPaymentInPercentageNationwide + : categoryRecord.totalPaymentInPercentage; const hoverContent = (
@@ -182,11 +191,15 @@ const CategoryMap = ({ const AArray = ACur.practiceCategories; const BCur = statuteRecord.find((s) => s.statuteName === "2014 Eligible Land"); const BArray = BCur.practiceCategories; - const TotalArray = AArray.concat(BArray); + const CCur = statuteRecord.find((s) => s.statuteName === "Other CSP"); + const CArray = CCur.practiceCategories; + const TotalArray = AArray.concat(BArray).concat(CArray); if (category === "2018 Practices") { categoryRecord = statuteRecord[0]; } else if (category === "2014 Eligible Land") { categoryRecord = statuteRecord[1]; + } else if (category === "Other CSP") { + categoryRecord = statuteRecord[2]; } else { categoryRecord = TotalArray.find((s) => s.practiceCategoryName === category); } @@ -201,7 +214,7 @@ const CategoryMap = ({ if (category === "Land management") legendCategory = "Land management-CSP"; if (category === "Forest management") legendCategory = "Forest management-CSP"; if (category === "Soil testing") legendCategory = "Soil testing-CSP"; - if (category === "Other improvement") legendCategory = "Other improvement-CSP"; + if (category === "Other improvements") legendCategory = "Other improvements-CSP"; const customScale = legendConfig[legendCategory]; const colorScale = d3.scaleThreshold(customScale, mapColor); const classes = useStyles(); diff --git a/src/components/csp/CategoryTable.tsx b/src/components/csp/CategoryTable.tsx index 1eae678..4740c09 100644 --- a/src/components/csp/CategoryTable.tsx +++ b/src/components/csp/CategoryTable.tsx @@ -148,11 +148,15 @@ function App({ const AArray = ACur.practiceCategories; const BCur = value.statutes.find((s) => s.statuteName === "2014 Eligible Land"); const BArray = BCur.practiceCategories; - const TotalArray = AArray.concat(BArray); + const CCur = value.statutes.find((s) => s.statuteName === "Other CSP"); + const CArray = CCur.practiceCategories; + const TotalArray = AArray.concat(BArray).concat(CArray); if (category === "2018 Practices") { categoryRecord = statuteRecord[0]; } else if (category === "2014 Eligible Land") { categoryRecord = statuteRecord[1]; + } else if (category === "Other CSP") { + categoryRecord = statuteRecord[2]; } else { categoryRecord = TotalArray.find((s) => s.practiceCategoryName === category); } @@ -171,7 +175,9 @@ function App({ categoryBenefit: `$${Number(totalPaymentInDollars).toLocaleString(undefined, { minimumFractionDigits: 2 })}`, - categoryPercentage: `${totalPaymentInPercentageWithinState.toString()}%`, + categoryPercentage: totalPaymentInPercentageWithinState + ? `${totalPaymentInPercentageWithinState.toString()}%` + : "0%", cspBenefit: `$${value.totalPaymentInDollars.toLocaleString(undefined, { minimumFractionDigits: 2 })}`, diff --git a/src/pages/CSPPage.tsx b/src/pages/CSPPage.tsx index 11b485a..afdb1fa 100644 --- a/src/pages/CSPPage.tsx +++ b/src/pages/CSPPage.tsx @@ -21,8 +21,10 @@ export default function CSPPage(): JSX.Element { const [totalChartData, setTotalChartData] = React.useState([{}]); const [old2014ChartData, setOld2014ChartData] = React.useState([{}]); const [new2018ChartData, setNew2018ChartData] = React.useState([{}]); + const [otherCSPChartData, setOtherCSPChartData] = React.useState([{}]); const [firstTotal, setFirstTotal] = React.useState(0); const [secondTotal, setSecondTotal] = React.useState(0); + const [thirdTotal, setThirdTotal] = React.useState(0); const [zeroCategories, setZeroCategories] = React.useState([]); const defaultTheme = createTheme(); @@ -35,14 +37,17 @@ export default function CSPPage(): JSX.Element { let structuralTotal = 0; let croplandTotal = 0; let rangelandTotal = 0; - let bundlesTotal = 0; let soilTestingTotal = 0; let NIPFTotal = 0; let pasturelandTotal = 0; - let SAOTotal = 0; + const SAOTotal = 0; let grasslandTotal = 0; + let bundlesTotal = 0; + let miscellaneousTotal = 0; + let sixBPlanningTotal = 0; let new2018Total = 0; let old2014Total = 0; + let otherCSPTotal = 0; const zeroCategory = []; const csp_year = "2018-2022"; @@ -80,48 +85,53 @@ export default function CSPPage(): JSX.Element { // eslint-disable-next-line const cur1 = chartData.statutes.find((s) => s.statuteName === "2018 Practices"); const cur2 = chartData.statutes.find((s) => s.statuteName === "2014 Eligible Land"); + const cur3 = chartData.statutes.find((s) => s.statuteName === "Other CSP"); new2018Total = cur1.totalPaymentInDollars; old2014Total = cur2.totalPaymentInDollars; + otherCSPTotal = cur3.totalPaymentInDollars; setFirstTotal(new2018Total); setSecondTotal(old2014Total); + setThirdTotal(otherCSPTotal); const ACur = cur1.practiceCategories; const BCur = cur2.practiceCategories; + const CCur = cur3.practiceCategories; - const landManagementCur = ACur.find((s) => s.practiceCategoryName === "Land management"); - const otherImprovementCur = ACur.find((s) => s.practiceCategoryName === "Other improvement"); - const existingAPCur = ACur.find((s) => s.practiceCategoryName === "Existing activity payments"); + const structuralCur = ACur.find((s) => s.practiceCategoryName === "Structural"); const vegetativeCur = ACur.find((s) => s.practiceCategoryName === "Vegetative"); + const landManagementCur = ACur.find((s) => s.practiceCategoryName === "Land management"); const forestManagementCur = ACur.find((s) => s.practiceCategoryName === "Forest management"); const soilRemediationCur = ACur.find((s) => s.practiceCategoryName === "Soil remediation"); - const structuralCur = ACur.find((s) => s.practiceCategoryName === "Structural"); - const bundlesCur = ACur.find((s) => s.practiceCategoryName === "Bundles"); + const existingAPCur = ACur.find((s) => s.practiceCategoryName === "Existing activity payments"); const soilTestingCur = ACur.find((s) => s.practiceCategoryName === "Soil testing"); + const otherImprovementCur = ACur.find((s) => s.practiceCategoryName === "Other improvements"); const croplandCur = BCur.find((s) => s.practiceCategoryName === "Cropland"); const rangelandCur = BCur.find((s) => s.practiceCategoryName === "Rangeland"); const pasturelandCur = BCur.find((s) => s.practiceCategoryName === "Pastureland"); - const SAOCur = BCur.find((s) => s.practiceCategoryName === "Other: supplemental, adjustment & other"); - const NIPFCur = BCur.find((s) => s.practiceCategoryName === "Non-industrial private forestland"); + const NIPFCur = BCur.find((s) => s.practiceCategoryName === "Non-Industrial Private Forestland (NIPF)"); const grasslandCur = BCur.find((s) => s.practiceCategoryName === "Grassland"); - landManagementTotal += Number(landManagementCur.totalPaymentInDollars); - if (landManagementTotal === 0) zeroCategory.push("Land management"); - otherImprovementTotal += Number(otherImprovementCur.totalPaymentInDollars); - if (otherImprovementTotal === 0) zeroCategory.push("Other improvement"); - existingAPTotal += Number(existingAPCur.totalPaymentInDollars); - if (existingAPTotal === 0) zeroCategory.push("Existing activity payments"); + const miscellaneousCur = CCur.find((s) => s.practiceCategoryName === "Miscellaneous"); + const bundlesCur = CCur.find((s) => s.practiceCategoryName === "Bundles"); + const sixBlanningCur = CCur.find((s) => s.practiceCategoryName === "(6)(B) Planning"); + + structuralTotal += Number(structuralCur.totalPaymentInDollars); + if (structuralTotal === 0) zeroCategory.push("Structural"); + if (soilRemediationTotal === 0) zeroCategory.push("Soil remediation"); vegetativeTotal += Number(vegetativeCur.totalPaymentInDollars); if (vegetativeTotal === 0) zeroCategory.push("Vegetative"); + landManagementTotal += Number(landManagementCur.totalPaymentInDollars); + if (landManagementTotal === 0) zeroCategory.push("Land management"); forestManagementTotal += Number(forestManagementCur.totalPaymentInDollars); if (forestManagementTotal === 0) zeroCategory.push("Forest management"); soilRemediationTotal += Number(soilRemediationCur.totalPaymentInDollars); if (soilRemediationTotal === 0) zeroCategory.push("Soil remediation"); - structuralTotal += Number(structuralCur.totalPaymentInDollars); - if (structuralTotal === 0) zeroCategory.push("Structural"); - bundlesTotal += Number(bundlesCur.totalPaymentInDollars); - if (bundlesTotal === 0) zeroCategory.push("Bundles"); + existingAPTotal += Number(existingAPCur.totalPaymentInDollars); + if (existingAPTotal === 0) zeroCategory.push("Existing activity payments"); soilTestingTotal = Number(soilTestingCur.totalPaymentInDollars); if (soilTestingTotal === 0) zeroCategory.push("Soil testing"); + otherImprovementTotal += Number(otherImprovementCur.totalPaymentInDollars); + if (otherImprovementTotal === 0) zeroCategory.push("Other improvements"); croplandTotal += Number(croplandCur.totalPaymentInDollars); if (croplandTotal === 0) zeroCategory.push("Cropland"); @@ -129,63 +139,68 @@ export default function CSPPage(): JSX.Element { if (rangelandTotal === 0) zeroCategory.push("Rangeland"); pasturelandTotal += Number(pasturelandCur.totalPaymentInDollars); if (pasturelandTotal === 0) zeroCategory.push("Pastureland"); - SAOTotal += Number(SAOCur.totalPaymentInDollars); - if (SAOTotal === 0) zeroCategory.push("Other: supplemental, adjustment & other"); NIPFTotal += Number(NIPFCur.totalPaymentInDollars); - if (NIPFTotal === 0) zeroCategory.push("Non-industrial private forestland"); + if (NIPFTotal === 0) zeroCategory.push("Non-Industrial Private Forestland (NIPF)"); if (grasslandCur !== undefined) grasslandTotal += Number(grasslandCur.totalPaymentInDollars); if (grasslandTotal === 0) zeroCategory.push("Grassland"); + miscellaneousTotal += Number(miscellaneousCur.totalPaymentInDollars); + if (miscellaneousTotal === 0) zeroCategory.push("Miscellaneous"); + sixBPlanningTotal += Number(sixBlanningCur.totalPaymentInDollars); + if (sixBPlanningTotal === 0) zeroCategory.push("(6)(B) Planning"); + bundlesTotal += Number(bundlesCur.totalPaymentInDollars); + if (bundlesTotal === 0) zeroCategory.push("Bundles"); + setNew2018ChartData([ - { name: "Land management", value: landManagementTotal, color: "#2F7164" }, - { - name: "Other Improvement", - value: otherImprovementTotal, - color: "#4D847A" - }, { name: "Existing activity payments", value: existingAPTotal, - color: "#749F97" + color: "#2F7164" + }, + { name: "Structural", value: structuralTotal, color: "#4D847A" }, + { name: "Land management", value: landManagementTotal, color: "#749F97" }, + { + name: "Other Improvements", + value: otherImprovementTotal, + color: "#9CBAB4" }, - { name: "Vegetative", value: vegetativeTotal, color: "#9CBAB4" }, + { name: "Vegetative", value: vegetativeTotal, color: "#B9CDC9" }, { name: "Forest management", value: forestManagementTotal, - color: "#B9CDC9" + color: "#CDDBD8" }, { name: "Soil remediation", value: soilRemediationTotal, - color: "#CDDBD8" + color: "#E2E8E7" }, - { name: "Structural", value: structuralTotal, color: "#E2E8E7" }, - { name: "Bundles", value: bundlesTotal, color: "#C3C5C4" }, - { name: "Soil Testing", value: soilTestingTotal, color: "#CAD4C5" } + { name: "Soil Testing", value: soilTestingTotal, color: "#F3F6F5" } ]); setOld2014ChartData([ { name: "Cropland", value: croplandTotal, color: "#2F7164" }, - { name: "Rangeland", value: rangelandTotal, color: "#4D847A" }, - { name: "Pastureland", value: pasturelandTotal, color: "#749F97" }, { - name: "Other: supplemental, adjustment & other", - value: SAOTotal, - color: "#9CBAB4" - }, - { - name: "Non-industrial private forestland", + name: "Non-Industrial Private Forestland (NIPF)", value: NIPFTotal, - color: "#B9CDC9" + color: "#4D847A" }, - { name: "Grassland", value: grasslandTotal, color: "#CDDBD8" } + { name: "Rangeland", value: rangelandTotal, color: "#749F97" }, + { name: "Pastureland", value: pasturelandTotal, color: "#B9CDC9" }, + { name: "Grassland", value: grasslandTotal, color: "#CAD4C5" } + ]); + + setOtherCSPChartData([ + { name: "Miscellaneous", value: miscellaneousTotal, color: "#2F7164" }, + { name: "Bundles", value: bundlesTotal, color: "#9CBAB4" }, + { name: "(6)(B) Planning", value: sixBPlanningTotal, color: "#CAD4C5" } ]); setTotalChartData([ { name: "2018 Practices", value: new2018Total, color: "#2F7164" }, - { name: "2014 Eligible Land", value: old2014Total, color: "#9CBAB4" } + { name: "2014 Eligible Land", value: old2014Total, color: "#9CBAB4" }, + { name: "Other CSP", value: otherCSPTotal, color: "#B9CDC9" } ]); - if (zeroCategory.length > 0) setZeroCategories(zeroCategory); else setZeroCategories(["None"]); }; @@ -334,6 +349,7 @@ export default function CSPPage(): JSX.Element { stateCodes={stateCodesData} /> + - + + + + + + - {firstTotal >= 0 || secondTotal >= 0 ? ( + {firstTotal >= 0 || secondTotal >= 0 || thirdTotal >= 0 ? (
= 1 && checked <= 10 ? "block" : "none" + display: checked >= 1 && checked < 10 ? "block" : "none" }} > - = 11 ? "block" : "none" }}> + = 10 && checked < 16 ? "block" : "none" }}> + = 16 ? "block" : "none" }}> + +
) : null} @@ -606,9 +660,10 @@ export default function CSPPage(): JSX.Element { stateCodes={stateCodesArray} /> + + - + - + + + + + + s.practiceCategoryName === "Vegetative"); const forestManagementCur = ACur.find((s) => s.practiceCategoryName === "Forest management"); const soilRemediationCur = ACur.find((s) => s.practiceCategoryName === "Soil remediation"); - const other6ACur = ACur.find((s) => s.practiceCategoryName === "Other improvement"); + const other6ACur = ACur.find((s) => s.practiceCategoryName === "Other improvements"); const soilTestingCur = ACur.find((s) => s.practiceCategoryName === "Soil testing"); const otherPlanningCur = BCur.find((s) => s.practiceCategoryName === "Other planning"); @@ -112,7 +112,7 @@ export default function EQIPPage(): JSX.Element { soilRemediationTotal += Number(soilRemediationCur.totalPaymentInDollars); if (soilRemediationTotal === 0) zeroCategory.push("Soil remediation"); other6ATotal += Number(other6ACur.totalPaymentInDollars); - if (other6ATotal === 0) zeroCategory.push("Other improvement"); + if (other6ATotal === 0) zeroCategory.push("Other improvements"); soilTestingTotal += Number(soilTestingCur.totalPaymentInDollars); if (soilTestingTotal === 0) zeroCategory.push("Soil testing"); @@ -132,7 +132,7 @@ export default function EQIPPage(): JSX.Element { { name: "Land management", value: landManagementTotal, color: "#4D847A" }, { name: "Vegetative", value: vegetativeTotal, color: "#749F97" }, { name: "Forest management", value: forestManagementTotal, color: "#9CBAB4" }, - { name: "Other improvement", value: other6ATotal, color: "#B9CDC9" }, + { name: "Other improvements", value: other6ATotal, color: "#B9CDC9" }, { name: "Soil remediation; Soil testing", value: soilRemediationTotal + soilTestingTotal, color: "#CDDBD8" } ]); @@ -248,7 +248,7 @@ export default function EQIPPage(): JSX.Element { sx={{ width: "85%", m: "auto", display: checked !== 6 ? "none" : "block" }} > { - // setModalOpen(true); // #306: Block the model to be auto-opened due to the size of iframe - }, []); const handleOpen = () => { setModalOpen(true); }; @@ -82,7 +78,82 @@ export default function IRAPage(): JSX.Element { - + + + + + + Inflation Reduction Act Conservation; Policy Design Lab + + + On August 16, 2022, President Joe Biden signed into law the Inflation Reduction + Act of 2022 (P.L. + + 117-169 + + ). Among other things, the Inflation Reduction Act (IRA) included an $18 billion + investment of additional funds appropriated to four Farm Bill Conservation + programs: Environmental Quality Incentives Program ( + + EQIP + + ); Conservation Stewardship Program ( + + CSP + + ); Agricultural Conservation Easement Program ( + + ACEP + + ); and Regional Conservation Partnership Program ( + + RCPP + + )... + + + + + + + + RCPP} customSx={tabStyle} selectedSX={selectedStyle} /> ACEP} customSx={tabStyle} selectedSX={selectedStyle} /> */} - - - diff --git a/src/pages/PolicyLab/PolicyLabPage.tsx b/src/pages/PolicyLab/PolicyLabPage.tsx index 83e4390..9b37430 100644 --- a/src/pages/PolicyLab/PolicyLabPage.tsx +++ b/src/pages/PolicyLab/PolicyLabPage.tsx @@ -53,27 +53,7 @@ export default function PolicyLabPage(): JSX.Element { - {/* Based on Jun 10 meeting, moving IRA out of Policy Lab page. Leave the code frame here so that it can be re-used for other model predictions. */} - {/* - - - - - - - - */} - {/* */} - {/* */} ); } diff --git a/src/utils/legendConfig.json b/src/utils/legendConfig.json index 7f9654d..52944fa 100644 --- a/src/utils/legendConfig.json +++ b/src/utils/legendConfig.json @@ -27,38 +27,40 @@ "lossRatio":[0.5, 0.75, 1, 1.5], "averageInsuredAreaInAcres":[10000, 5000000, 10000000, 20000000], - "Total EQIP": [10000000, 50000000, 100000000, 200000000], - "Land management": [1000000, 10000000, 30000000, 50000000], + "Total EQIP": [50000000, 100000000, 150000000, 200000000], + "Land management": [5000000, 10000000, 30000000, 50000000], "Forest management": [500000, 1000000, 3000000,10000000], "Structural":[10000000, 50000000, 80000000, 100000000], "Soil remediation":[100000, 500000, 1000000, 5000000], "Vegetative":[1000000, 5000000, 10000000, 20000000], - "Other improvement":[100000, 1000000, 5000000, 10000000], + "Other improvements":[100000, 1000000, 5000000, 10000000], "Soil testing":[100, 500, 1000, 3000], "Other planning":[10000, 100000, 500000, 1000000], "Conservation planning assessment":[5000, 100000, 500000, 1000000], "Resource-conserving crop rotation":[500, 1000, 5000, 10000], "Soil health":[10000, 100000, 500000, 1000000], - "Comprehensive Nutrient Mgt.":[1000, 10000, 100000, 1000000], + "Comprehensive Nutrient Mgt.":[10000, 100000, 500000, 1000000], - "Total CSP": [10000000, 50000000, 100000000, 200000000], - "2018 Practices": [1000000, 5000000, 10000000, 80000000], - "2014 Eligible Land": [5000000, 10000000, 80000000, 150000000], + "Total CSP": [5000000, 10000000, 50000000, 100000000], + "2018 Practices": [1000000, 5000000, 10000000, 30000000], + "2014 Eligible Land": [10000000, 50000000, 100000000, 150000000], + "Other CSP": [500000, 1000000, 8000000, 15000000], "Forest management-CSP": [100000, 500000, 1000000, 10000000], "Land management-CSP": [10000, 1000000, 5000000, 10000000], - "Existing activity payments": [100000, 1000000, 3000000, 5000000], + "Existing activity payments": [1000000, 8000000, 15000000, 30000000], "Vegetative-CSP": [500000, 1000000, 5000000, 10000000], - "Other improvement-CSP": [5000, 1000000, 5000000, 10000000], + "Other improvements-CSP": [5000, 1000000, 5000000, 10000000], "Soil remediation": [100000, 500000, 1000000, 3000000], - "Structural-CSP": [50000, 100000, 500000, 1000000], - "Bundles": [50000, 100000, 300000, 800000], + "Structural-CSP": [50000, 100000, 1000000, 10000000], "Soil testing-CSP": [100000, 500000, 1000000, 10000000], - "Cropland": [1000000, 10000000, 100000000, 200000000], - "Non-industrial private forestland": [500000, 1000000, 3000000, 8000000], - "Pastureland": [1000000, 5000000, 8000000, 10000000], + "Cropland": [100000, 1000000, 10000000, 20000000], + "Non-Industrial Private Forestland (NIPF)": [50000, 100000, 1000000, 5000000 ], + "Pastureland": [100000, 500000, 800000, 1000000], "Grassland": [5000, 100000, 400000, 8000000], - "Other: supplemental, adjustment & other": [500000, 1000000, 5000000, 10000000], - "Rangeland": [100000, 5000000, 10000000, 30000000], + "Rangeland": [10000, 500000, 1000000, 3000000], + "Miscellaneous": [100000, 500000, 1000000, 5000000], + "(6)(B) Planning": [100000, 500000, 1000000, 5000000], + "Bundles": [50000, 100000, 300000, 800000], "Total CRP": [100000, 10000000, 100000000, 500000000], "Total General Sign-Up":[10000, 100000, 10000000, 100000000],