From 6256bace7742a9aa8c01744681ddbf98d474cc8b Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Tue, 21 Jul 2026 05:41:21 -0400 Subject: [PATCH] SSA SSI federal-payment recipients by age, December 2024 (populace#470) New ssa-ssi-monthly-statistics-2024-12 source package minting the SSA age-band recipient counts that populace hardcodes today as US_SSI_TAKE_UP_AGE_TARGETS, so populace can bind them as ordinary age-band count targets on the SSI take-up flag (PolicyEngine/populace#470) once the count-match assignment machinery is deleted (PolicyEngine/populace#469) in favor of characteristic-varying take-up priors (PolicyEngine/populace#473). Source of record: SSA "SSI Monthly Statistics, December 2024", Table 1 (Number of recipients, total payments, average monthly payment, and number of awards, by type of payment, eligibility category, and age, December 2024), row "Total with-- Federal payment" -- persons receiving a federal SSI payment in December 2024: https://www.ssa.gov/policy/docs/statcomps/ssi_monthly/2024-12/table01.html Under 18 1,001,922 18-64 3,905,779 65 or older 2,382,142 All ages 7,289,843 (= sum of the three bands) These byte-match the populace US_SSI_TAKE_UP_AGE_TARGETS constants, and the exported consumer facts reproduce all four values exactly. The publication is HTML-only, so per the existing ssa package convention the parsed artifact is the extracted long-form CSV (sha256 44438b49392c2a581a239c7490492152c408213f313f450a762d84281de98e40) and, beyond that convention, the verbatim page capture is committed alongside it (sha256 fa999c78ffac664b6c269e57b9a115a2fa3c74fe7d894ee137f966fa68d69ad6, hash-verified against the exact bytes the browser fetched from ssa.gov; the page embeds per-request Akamai analytics tokens, so refetched bytes differ inside one inline script block while the table content is stable). Record set ssa_ssi_monthly.month2024_12.ssi_federal_payment_recipients.by_age (period_type month, period 2024-12) carries census-S0101-style age constraints (>=0/<18, >=18/<65, >=65) that the agent-acceptance age-band evidence rules validate against the CSV's "Aged 0-17" / "Aged 18-64" / "Aged 65 and over" labels, plus an exact concept alignment to ssa.ssi_federal_payment_recipient_count whose evidence notes state the federal-payment universe (includes recipients also receiving state supplementation; excludes the 134,013 state-supplementation-only recipients; includes retroactive payments per footnote c) and the populace#470 binding. The manifest declares canonical ledger-raw locations; publish with `ledger publish-raw --root db/data` from a credentialed environment. Bundle pins move +4 facts / +1 package (ssa 422 -> 426, month:2024-12 260 -> 264, country:0100000US 2105 -> 2109, person 3684 -> 3688); a focused package test pins all four values, the constraint sets, and the alignment metadata. Co-Authored-By: Claude Fable 5 --- .../manifest.yaml | 52 ++++ .../ssi_monthly_2024_12_table01.csv | 5 + .../ssi_monthly_2024_12_table01.html | 259 ++++++++++++++++++ ledger/source_package.py | 1 + .../source_package.yaml | 163 +++++++++++ tests/test_ledger_bundle.py | 27 +- tests/test_ledger_source_package.py | 96 +++++++ 7 files changed, 593 insertions(+), 10 deletions(-) create mode 100644 db/data/ssa/ssi_monthly_statistics_2024_12/manifest.yaml create mode 100644 db/data/ssa/ssi_monthly_statistics_2024_12/ssi_monthly_2024_12_table01.csv create mode 100644 db/data/ssa/ssi_monthly_statistics_2024_12/ssi_monthly_2024_12_table01.html create mode 100644 packages/ssa/ssi_monthly_statistics_2024_12/source_package.yaml diff --git a/db/data/ssa/ssi_monthly_statistics_2024_12/manifest.yaml b/db/data/ssa/ssi_monthly_statistics_2024_12/manifest.yaml new file mode 100644 index 0000000..87c739f --- /dev/null +++ b/db/data/ssa/ssi_monthly_statistics_2024_12/manifest.yaml @@ -0,0 +1,52 @@ +source_id: ssa +package_id: ssa-ssi-monthly-statistics-2024-12 +dataset: ssa_ssi_monthly_statistics_2024_12 +source_page: https://www.ssa.gov/policy/docs/statcomps/ssi_monthly/2024-12/index.html +table: 'SSI Monthly Statistics, December 2024, Table 1' +files: + 2024: + filename: ssi_monthly_2024_12_table01.csv + source_url: https://www.ssa.gov/policy/docs/statcomps/ssi_monthly/2024-12/table01.html + sha256: 44438b49392c2a581a239c7490492152c408213f313f450a762d84281de98e40 + size_bytes: 475 + fetched_at: '2026-07-21T09:01:31+00:00' + source_table: 'SSI Monthly Statistics, December 2024, Table 1' + notes: >- + Extracted the "Total with— Federal payment" row of SSA SSI Monthly + Statistics, December 2024, Table 1 (Number of recipients, total + payments, average monthly payment, and number of awards, by type of + payment, eligibility category, and age, December 2024) into long-form + age-group rows: all ages 7,289,843; under 18 1,001,922; 18-64 + 3,905,779; 65 or older 2,382,142. The publication is HTML-only; the + companion file ssi_monthly_2024_12_table01.html in this directory is + the verbatim capture of the published page these values were + extracted from. R2 storage below declares the canonical + content-addressed location; publish with `ledger publish-raw --root + db/data` from a ledger-raw-credentialed environment. + storage: + r2: + provider: r2 + bucket: ledger-raw + key: raw/ssa/ssa-ssi-monthly-statistics-2024-12/2024/44438b49392c2a581a239c7490492152c408213f313f450a762d84281de98e40/ssi_monthly_2024_12_table01.csv + uri: r2://ledger-raw/raw/ssa/ssa-ssi-monthly-statistics-2024-12/2024/44438b49392c2a581a239c7490492152c408213f313f450a762d84281de98e40/ssi_monthly_2024_12_table01.csv + source_capture: + filename: ssi_monthly_2024_12_table01.html + source_url: https://www.ssa.gov/policy/docs/statcomps/ssi_monthly/2024-12/table01.html + sha256: fa999c78ffac664b6c269e57b9a115a2fa3c74fe7d894ee137f966fa68d69ad6 + size_bytes: 17616 + fetched_at: '2026-07-21T09:01:31+00:00' + notes: >- + Verbatim HTML capture of the published table page ("SSI Monthly + Statistics, December 2024 - Table 1"; DCTERMS dateCreated 2025-01, + dateCertified 2026-04-01). The three age-group counts (1,001,922 / + 3,905,779 / 2,382,142) and the 7,289,843 all-ages total appear + verbatim in the "Total with— Federal payment" row. The page embeds + per-request Akamai mPulse analytics tokens inside an inline script + block, so refetched bytes differ there while the table content is + stable; the recorded sha256 pins exactly this capture. + storage: + r2: + provider: r2 + bucket: ledger-raw + key: raw/ssa/ssa-ssi-monthly-statistics-2024-12/source_capture/fa999c78ffac664b6c269e57b9a115a2fa3c74fe7d894ee137f966fa68d69ad6/ssi_monthly_2024_12_table01.html + uri: r2://ledger-raw/raw/ssa/ssa-ssi-monthly-statistics-2024-12/source_capture/fa999c78ffac664b6c269e57b9a115a2fa3c74fe7d894ee137f966fa68d69ad6/ssi_monthly_2024_12_table01.html diff --git a/db/data/ssa/ssi_monthly_statistics_2024_12/ssi_monthly_2024_12_table01.csv b/db/data/ssa/ssi_monthly_statistics_2024_12/ssi_monthly_2024_12_table01.csv new file mode 100644 index 0000000..c91d1da --- /dev/null +++ b/db/data/ssa/ssi_monthly_statistics_2024_12/ssi_monthly_2024_12_table01.csv @@ -0,0 +1,5 @@ +payment_type,payment_type_label,geography_id,geography_level,geography_name,age,recipient_count +federal_payment,Total with federal payment,0100000US,country,United States,All ages,7289843 +federal_payment,Total with federal payment,0100000US,country,United States,Aged 0-17,1001922 +federal_payment,Total with federal payment,0100000US,country,United States,Aged 18-64,3905779 +federal_payment,Total with federal payment,0100000US,country,United States,Aged 65 and over,2382142 diff --git a/db/data/ssa/ssi_monthly_statistics_2024_12/ssi_monthly_2024_12_table01.html b/db/data/ssa/ssi_monthly_statistics_2024_12/ssi_monthly_2024_12_table01.html new file mode 100644 index 0000000..ee6af50 --- /dev/null +++ b/db/data/ssa/ssi_monthly_statistics_2024_12/ssi_monthly_2024_12_table01.html @@ -0,0 +1,259 @@ + + + + + + +SSI Monthly Statistics, December 2024 - Table 1 + + + + + + + + + + + + + + + + + +
+
+ +
+
+

SSI Monthly Statistics, December 2024

+
+
+
+ +
+

All Federally Administered Payments

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. Number of recipients, total payments, average monthly payment, and number of awards, by type of payment, eligibility category, and age, December 2024
Type of paymentAll recipientsEligibility categoryAge
AgedBlind and disabled aUnder 1818–6465 or older b
 Number of recipients c
Total7,423,8561,190,6606,233,1961,002,8873,951,8662,469,103
Federal payment only6,096,703788,5975,308,106893,9393,412,7771,789,987
Federal payment and state supplementation1,193,140350,587842,553107,983493,002592,155
State supplementation only134,01351,47682,53796546,08786,961
Total with— 
Federal payment7,289,8431,139,1846,150,6591,001,9223,905,7792,382,142
State supplementation1,327,153402,063925,090108,948539,089679,116
Also receiving OASDI benefits2,548,159679,5311,868,62856,7051,080,7901,410,664
 Total payments c (thousands of dollars)
Total5,528,062677,0974,850,966895,6813,200,9451,431,436
Federal payments5,233,633586,3974,647,236885,0883,072,1111,276,435
State supplementation294,43090,700203,73010,593128,835155,002
 Average monthly payment d (dollars)
Total696.70564.14722.06812.54743.12575.59
Federal payments670.65510.61700.35803.90721.22532.04
State supplementation212.86222.87208.5187.19222.14225.65
 Number of awards e
Total55,7069,92545,78113,99031,45710,259
SOURCE: Social Security Administration, Supplemental Security Record, 100 percent data.
a. Includes 6,169,449 disabled and 63,747 blind recipients.
b. Includes 1,265,326 disabled and 13,117 blind recipients aged 65 or older.
c. Includes retroactive payments.
d. Excludes retroactive payments.
e. Preliminary data. In the first 2 months after their release, numbers may be adjusted downward to reflect returned checks.
CONTACT: statistics@ssa.gov.
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/ledger/source_package.py b/ledger/source_package.py index 2851540..c18c9dd 100644 --- a/ledger/source_package.py +++ b/ledger/source_package.py @@ -179,6 +179,7 @@ "ssa-annual-statistical-supplement-2025": Path( "ssa/annual_statistical_supplement_2025" ), + "ssa-ssi-monthly-statistics-2024-12": Path("ssa/ssi_monthly_statistics_2024_12"), "ssa-ssi-table-7b1-2024": Path("ssa/ssi_table_7b1_2024"), "hhs-acf-tanf-caseload-2024": Path("hhs_acf/tanf_caseload_2024"), "hhs-acf-tanf-financial-2024": Path("hhs_acf/tanf_financial_2024"), diff --git a/packages/ssa/ssi_monthly_statistics_2024_12/source_package.yaml b/packages/ssa/ssi_monthly_statistics_2024_12/source_package.yaml new file mode 100644 index 0000000..314bdd9 --- /dev/null +++ b/packages/ssa/ssi_monthly_statistics_2024_12/source_package.yaml @@ -0,0 +1,163 @@ +schema_version: ledger.source_package.v1 +package_id: ssa-ssi-monthly-statistics-2024-12 +label: SSA SSI Monthly Statistics December 2024 Table 1 federal payment recipients by age +artifact: + source_name: ssa + source_table: 'SSI Monthly Statistics, December 2024, Table 1' + resource_package: db + resource_directory: data/ssa/ssi_monthly_statistics_2024_12 + manifest: manifest.yaml + vintage: ssi_monthly_statistics_2024_12 + extracted_at: '2026-07-21' + extraction_method: >- + manual table extraction from SSA SSI Monthly Statistics, December 2024, + Table 1 HTML ("Total with— Federal payment" row transcribed to long-form + age-group rows); the verbatim page capture is committed alongside the + extracted CSV in the manifest directory + parser: delimited_text_full_rows + artifact_year: 2024 + sheet_name: ssi_monthly_2024_12_table01 +record_sets: +- record_set_id: ssa_ssi_monthly.month2024_12.ssi_federal_payment_recipients.by_age + record_set_spec_id: ssa_ssi_monthly.ssi_federal_payment_recipients.by_age.v1 + source_record_id_prefix: ssa_ssi_monthly.month2024_12.ssi_federal_payment_recipients.by_age + sheet_name: ssi_monthly_2024_12_table01 + period_type: month + period: '2024-12' + geography_id: 0100000US + geography_level: country + geography_name: United States + geography_vintage: current + entity: person + entity_role: ssi_recipient + domain: social_security_and_ssi_payments + groupby_dimension: age + rows: + - value_id: all_ages + label: SSI federal payment recipients all ages + ordinal: 0 + row_number: 2 + expected_row_header_column: A + expected_row_header: federal_payment + filters: {} + constraints: [] + guard_cells: + - column: F + row: start + expected_value: All ages + label: age group + - column: B + row: start + expected_value: Total with federal payment + label: SSA Table 1 stub line + table_record_kind: total + - value_id: under_18 + label: SSI federal payment recipients under 18 + ordinal: 1 + row_number: 3 + expected_row_header_column: A + expected_row_header: federal_payment + constraints: + - variable: age + operator: '>=' + value: 0 + unit: years + label: Age lower bound + - variable: age + operator: < + value: 18 + unit: years + label: Age upper bound + guard_cells: + - column: F + row: start + expected_value: Aged 0-17 + label: age group + - column: B + row: start + expected_value: Total with federal payment + label: SSA Table 1 stub line + table_record_kind: detail + - value_id: age_18_to_64 + label: SSI federal payment recipients aged 18 to 64 + ordinal: 2 + row_number: 4 + expected_row_header_column: A + expected_row_header: federal_payment + constraints: + - variable: age + operator: '>=' + value: 18 + unit: years + label: Age lower bound + - variable: age + operator: < + value: 65 + unit: years + label: Age upper bound + guard_cells: + - column: F + row: start + expected_value: Aged 18-64 + label: age group + - column: B + row: start + expected_value: Total with federal payment + label: SSA Table 1 stub line + table_record_kind: detail + - value_id: age_65_or_older + label: SSI federal payment recipients aged 65 or older + ordinal: 3 + row_number: 5 + expected_row_header_column: A + expected_row_header: federal_payment + constraints: + - variable: age + operator: '>=' + value: 65 + unit: years + label: Age lower bound + guard_cells: + - column: F + row: start + expected_value: Aged 65 and over + label: age group + - column: B + row: start + expected_value: Total with federal payment + label: SSA Table 1 stub line + table_record_kind: detail + measures: + - measure_id: recipient_count + label: SSI federal payment recipients + ordinal: 0 + column: G + source_column_id: recipient_count + concept: ssa.ssi_federal_payment_recipient_count + source_concept: ssa_ssi_monthly.table_1.federal_payment_recipient_count + concept_relation: exact + concept_authority: ledger-us + concept_evidence_url: https://www.ssa.gov/policy/docs/statcomps/ssi_monthly/2024-12/table01.html + concept_evidence_notes: >- + SSA SSI Monthly Statistics, December 2024, Table 1 (Number of + recipients, total payments, average monthly payment, and number of + awards, by type of payment, eligibility category, and age, December + 2024), "Total with— Federal payment" row: persons receiving a federal + SSI payment in December 2024, by the three published age groups (under + 18 / 18-64 / 65 or older; all ages 7,289,843 = 1,001,922 + 3,905,779 + + 2,382,142). The line counts everyone whose federally administered + December 2024 payment included a federal SSI payment, with or without + state supplementation, and excludes the 134,013 people receiving + federally administered state supplementation only; counts include + retroactive payments per table footnote c. Populace binds these + age-group rows as age-band indicator count targets on the SSI take-up + flag (PolicyEngine/populace#470); they are the published table behind + the hardcoded US_SSI_TAKE_UP_AGE_TARGETS constants and, with the + count-match take-up assignment machinery removed in + PolicyEngine/populace#469, anchor the characteristic-varying take-up + priors of PolicyEngine/populace#473. + unit: count + aggregation: sum + expected_cell_type: number + expected_column_header_row: 1 + expected_column_header: recipient_count diff --git a/tests/test_ledger_bundle.py b/tests/test_ledger_bundle.py index 387338b..dd356da 100644 --- a/tests/test_ledger_bundle.py +++ b/tests/test_ledger_bundle.py @@ -27,19 +27,19 @@ def test_build_bundle_writes_merged_consumer_contract(tmp_path): "aggregate_duplicate_key_count": 0, "entity_count": 8, "error_count": 0, - "fact_count": 39215, + "fact_count": 39219, "geography_count": 1053, "period_count": 16, "semantic_duplicate_key_count": 12, "skipped_source_count": 9, "source_count": 29, - "source_package_count": 59, + "source_package_count": 60, "warning_count": 1, } - assert len(rows) == 39215 + assert len(rows) == 39219 assert rows[0]["aggregate_fact_key"].startswith("ledger.aggregate_fact.v2:") assert rows[0]["semantic_fact_key"].startswith("ledger.semantic_fact.v2:") - assert source_packages["source_package_count"] == 59 + assert source_packages["source_package_count"] == 60 assert source_packages["skipped_source_count"] == 9 assert sorted(item["source"] for item in source_packages["skipped_sources"]) == [ "census-acs-s0101-congressional-district-age-2024", @@ -52,7 +52,7 @@ def test_build_bundle_writes_merged_consumer_contract(tmp_path): "cms-aca-oep-state-level-2025", "jct-tax-expenditures-2024", ] - assert coverage["fact_count"] == 39215 + assert coverage["fact_count"] == 39219 assert coverage["counts"]["by_source"] == { "bea": 445, "bfp_economic_outlook": 5, @@ -79,13 +79,13 @@ def test_build_bundle_writes_merged_consumer_contract(tmp_path): "opgroeien_groeipakket": 11, "sfpd_pensions": 4, "spf_finances_pit": 1, - "ssa": 422, + "ssa": 426, "statbel_fiscal_income": 565, "statbel_population_structure": 18, "usda_snap": 216, } table_counts = coverage["counts"]["by_source_table"] - assert len(table_counts) == 54 + assert len(table_counts) == 55 assert table_counts["irs_soi:Congressional District Data 2022"] == 26880 assert ( table_counts[ @@ -94,6 +94,7 @@ def test_build_bundle_writes_merged_consumer_contract(tmp_path): ] == 2 ) + assert table_counts["ssa:SSI Monthly Statistics, December 2024, Table 1"] == 4 assert table_counts["irs_soi:Publication 1304 Table 1.1"] == 80 assert ( table_counts[ @@ -215,7 +216,7 @@ def test_build_bundle_writes_merged_consumer_contract(tmp_path): "calendar_year:2031": 2, "fiscal_year:2023": 48, "fiscal_year:2024": 520, - "month:2024-12": 260, + "month:2024-12": 264, "month:2025-12": 255, "tax_year:2022": 5886, "tax_year:2023": 28429, @@ -226,7 +227,7 @@ def test_build_bundle_writes_merged_consumer_contract(tmp_path): assert coverage["counts"]["by_geography"]["nuts1:BE2"] == 17 assert coverage["counts"]["by_geography"]["nuts1:BE3"] == 6 assert coverage["counts"]["by_geography"]["commune:11002"] == 1 - assert coverage["counts"]["by_geography"]["country:0100000US"] == 2105 + assert coverage["counts"]["by_geography"]["country:0100000US"] == 2109 assert coverage["counts"]["by_geography"]["state:0400000US06"] == 217 assert ( coverage["counts"]["by_geography"]["congressional_district:5001700US0601"] == 56 @@ -240,7 +241,7 @@ def test_build_bundle_writes_merged_consumer_contract(tmp_path): "household": 62, "institutional_sector": 13, "pension_plan": 2, - "person": 3684, + "person": 3688, "tax_unit": 33783, } assert not coverage["duplicates"]["aggregate_fact_keys"] @@ -330,6 +331,12 @@ def test_build_bundle_writes_merged_consumer_contract(tmp_path): assert ( output_dir / "sources" / "ssa-ssi-table-7b1-2024" / "consumer_facts.jsonl" ).exists() + assert ( + output_dir + / "sources" + / "ssa-ssi-monthly-statistics-2024-12" + / "consumer_facts.jsonl" + ).exists() assert ( output_dir / "sources" diff --git a/tests/test_ledger_source_package.py b/tests/test_ledger_source_package.py index b59a5aa..4b5f58a 100644 --- a/tests/test_ledger_source_package.py +++ b/tests/test_ledger_source_package.py @@ -1463,6 +1463,102 @@ def test_ssa_ssi_table_7b1_source_package_builds_area_category_facts(): assert ca_disabled_payments.geography.id == "0400000US06" +def test_ssa_ssi_monthly_2024_12_source_package_alias_validates_counts(): + report = validate_source_package("ssa-ssi-monthly-statistics-2024-12", year=2024) + + assert report.valid + assert report.counts == { + "record_set_count": 1, + "row_count": 4, + "measure_count": 1, + "source_record_count": 4, + "source_region_count": 1, + } + + +def test_ssa_ssi_monthly_2024_12_package_builds_federal_payment_age_facts(): + package = load_source_package("ssa-ssi-monthly-statistics-2024-12") + rows = package.build_source_rows(2024) + cells = package.build_source_cells(2024, source_rows=rows) + facts = package.build_facts(2024, cells=cells, source_rows=rows) + values_by_record = {fact.source_record_id: fact for fact in facts} + + assert package.package_id == "ssa-ssi-monthly-statistics-2024-12" + assert len(rows) == 4 + assert validate_source_rows(rows).valid + assert validate_source_cells(cells).valid + assert len(cells) == 35 + assert len(facts) == 4 + assert validate_facts(facts).valid + assert validate_consumer_fact_contract(facts).valid + assert all(fact.source.raw_r2_uri for fact in facts) + + prefix = "ssa_ssi_monthly.month2024_12.ssi_federal_payment_recipients.by_age." + all_ages = values_by_record[prefix + "all_ages.recipient_count"] + under_18 = values_by_record[prefix + "under_18.recipient_count"] + aged_18_to_64 = values_by_record[prefix + "age_18_to_64.recipient_count"] + aged_65_or_older = values_by_record[prefix + "age_65_or_older.recipient_count"] + + # SSA SSI Monthly Statistics, December 2024, Table 1, "Total with— + # Federal payment" row: persons receiving a federal SSI payment in + # December 2024, by the three published age groups. These are the + # PolicyEngine/populace#470 age-band take-up count targets. + assert all_ages.value == 7_289_843 + assert under_18.value == 1_001_922 + assert aged_18_to_64.value == 3_905_779 + assert aged_65_or_older.value == 2_382_142 + assert ( + under_18.value + aged_18_to_64.value + aged_65_or_older.value + == all_ages.value + ) + + assert all_ages.period.type == "month" + assert all_ages.period.value == "2024-12" + assert all_ages.geography.id == "0100000US" + assert all_ages.entity.name == "person" + assert all_ages.entity.role == "ssi_recipient" + assert all_ages.constraints == () + assert all_ages.layout.table_record_kind == "total" + + assert { + (item.variable, item.operator, item.value) + for item in under_18.constraints + } == {("age", ">=", 0), ("age", "<", 18)} + assert { + (item.variable, item.operator, item.value) + for item in aged_18_to_64.constraints + } == {("age", ">=", 18), ("age", "<", 65)} + assert { + (item.variable, item.operator, item.value) + for item in aged_65_or_older.constraints + } == {("age", ">=", 65)} + assert under_18.layout.groupby_dimension == "age" + assert under_18.layout.groupby_value_id == "under_18" + + measure = under_18.measure + assert measure.concept == "ssa.ssi_federal_payment_recipient_count" + assert measure.source_concept == ( + "ssa_ssi_monthly.table_1.federal_payment_recipient_count" + ) + assert measure.concept_relation == "exact" + assert measure.concept_authority == "ledger-us" + assert measure.concept_evidence_url == ( + "https://www.ssa.gov/policy/docs/statcomps/ssi_monthly/2024-12/table01.html" + ) + assert "federal SSI payment in December 2024" in measure.concept_evidence_notes + assert "PolicyEngine/populace#470" in measure.concept_evidence_notes + assert "PolicyEngine/populace#469" in measure.concept_evidence_notes + assert "PolicyEngine/populace#473" in measure.concept_evidence_notes + + assert under_18.source.source_file == "ssi_monthly_2024_12_table01.csv" + assert under_18.source.url == ( + "https://www.ssa.gov/policy/docs/statcomps/ssi_monthly/2024-12/table01.html" + ) + assert under_18.source.source_sha256 == ( + "44438b49392c2a581a239c7490492152c408213f313f450a762d84281de98e40" + ) + + def test_ons_uk_business_firm_targets_source_package_alias_validates_counts(): report = validate_source_package("ons-uk-business-firm-targets-2025", year=2025)