Temporary Assistance for Needy Families (TANF)#

TANF is a state-level benefit program run by the Department of Health and Human Services, part of which funds cash assistance.

From benefits.gov:

The Temporary Assistance for Needy Families (TANF) program provides grant funds to states and territories to provide families with financial assistance and related support services. State-administered programs may include childcare assistance, job preparation, and work assistance.

General formula#

To calculate TANF entitlement, we use the general computation tree below (may vary depending on state and county):

  • tanf: TANF entitlement

    • tanf_amount_if_eligible: amount if eligible

      • Definition: tanf_max_amount - tanf_countable_income

      • tanf_max_amount: maximum amount

        • Parameters: the maximum amount defined by different state TANF programs may vary due to these factors:

          • Household size: How many people live in the household.

          • “Region”: Some states may define a “region”-level distinction for maximum amounts; for example, California (CalWORKS) defines two regions based on what county the household resides in.

          • Individual household properties such as caregiver or disability status.

          • Example: California (CalWORKS) has different maximum amounts based on these factors, which they define as “exempt/non-exempt”.

          • State-specific policies.

      • tanf_countable_income: Amount deducted from TANF maximum amount based on income.

        • tanf_gross_earned_income: earned income.

          • Parameter: list of earned income sources summed.

        • tanf_gross_unearned_income: unearned income. (ADD DEF HERE)

          • Parameter: list of unearned income sources summed.

        • deductions: deductions from assessed income.

          • earnings_deduction: deduction amount based on earnings.

            • Parameter: percentage of earnings deducted from gross earned income.

            • Parameter: flat amount deducted from the household’s gross earned income.

            • Parameter: flat amount deducted from each earner’s gross earned income.

    • is_tanf_eligible: whether eligible for TANF

      • is_tanf_enrolled: whether a family is already enrolled in TANF.

      • is_tanf_demographically_eligible: demographic definition of TANF eligibility, which is mostly constant across the US.

        • Definition: If there are children (ages 0-17) present in the household, pregnant people, or there are people aged 18 years old that are currently enrolled in a school, the family is demographically eligible for TANF.

      • is_tanf_economically_eligible: Whether the family has sufficiently low income to qualify for eligibility.

        • is_tanf_enrolled: whether a family is already enrolled in TANF.

        • is_tanf_continuous_eligible:

          • tanf_eligibility_income: income measure used to assess eligibility for TANF.

            • Parameters: income definition varies depending on state policies:

              • Parameter: deductions from income per earner

              • Parameter: deductions from income per household

          • tanf_max_amount (defined above)

        • is_tanf_initial_eligible:

          • This variable is very similar to is_continuous_eligible, except for the initial employment deductions that are applied to determininig initial eligibility.

          • tanf_eligibility_income: income measure used to assess eligibility for TANF.

            • Parameters: income definition varies depending on state policies:

              • Parameter: deductions from income per earner

              • Parameter: deductions from income per household

          • tanf_max_amount (defined above)

from policyengine_us import IndividualSim
import pandas as pd
import plotly.express as px

sim_emp = IndividualSim(year=2022)
sim_emp.add_person(name="adult", age=30, employment_income=250 * 12)
sim_emp.add_person(name="child", age=10)
sim_emp.add_spm_unit(name="spm_unit", members=["adult", "child"])
sim_emp.add_household(
    name="household", members=["adult", "child"], state_code="IL"
)

print("TANF: ", sim_emp.calc("tanf") / 12)
TANF:  [372.5]

Their benefit falls steadily with earnings, until they earn $430 per month, at which point they no longer qualify (assuming they are already enrolled).

LABELS = dict(
    employment_income="Monthly employment income",
    dividend_income="Monthly dividend income",
    monthly_income="Monthly income",
    income_source="Income source",
    monthly_tanf="Monthly TANF allotment",
    mtr="Marginal tax rate from TANF?",
    allotment="TANF allotment",
    state_code="State",
)


def make_df(state_code, enrolled, vary_var):
    sim = IndividualSim(year=2022)
    sim.add_person(name="adult", age=30)
    sim.add_person(name="child", age=10)
    sim.add_spm_unit(
        name="spm_unit", members=["adult", "child"], is_tanf_enrolled=enrolled
    )
    sim.add_household(
        name="household", members=["adult", "child"], state_code=state_code
    )

    sim.vary(vary_var, max=1500 * 12, step=120)

    return pd.DataFrame(
        dict(
            monthly_income=sim.calc(vary_var)[0] / 12,
            enrolled="Enrolled" if enrolled else "Not Enrolled",
            state_code=state_code,
            monthly_tanf=sim.calc("tanf")[0] / 12,
            vary_var=vary_var,
            # mtr=-sim.deriv("tanf", "employment_income"),
        )
    )


fig = px.line(
    make_df("IL", True, "employment_income"),
    "monthly_income",
    "monthly_tanf",
    labels=LABELS,
    title="TANF allotment for a two-person household in Illinois",
)

fig.update_layout(xaxis_tickformat="$,", yaxis_tickformat="$,")
fig.show()

This household’s TANF benefit would vary depending on their state and whether they are already enrolled.

emp_df_combined = pd.concat(
    [
        make_df("IL", True, "employment_income"),
        make_df("IL", False, "employment_income"),
        make_df("CA", True, "employment_income"),
        make_df("CA", False, "employment_income"),
    ]
)

fig = px.line(
    emp_df_combined,
    "monthly_income",
    "monthly_tanf",
    color="enrolled",
    labels=LABELS,
    animation_frame="state_code",
    title="TANF allotment for a two-person household",
)

fig.update_layout(
    xaxis_tickformat="$,",
    yaxis_tickformat="$,",
    yaxis_range=[0, emp_df_combined.monthly_tanf.max() * 1.1],
    legend_title=None,
)
fig.show()

If the household’s income is from Social Security instead of employment income, their TANF benefit phases out differently, and prior enrollment doesn’t affect the benefit.

ss_df_combined = pd.concat(
    [
        make_df("IL", True, "social_security_disability"),
        make_df("IL", False, "social_security_disability"),
        make_df("CA", True, "social_security_disability"),
        make_df("CA", False, "social_security_disability"),
    ]
)

fig_ss = px.line(
    ss_df_combined,
    "monthly_income",
    "monthly_tanf",
    color="enrolled",
    labels=LABELS,
    animation_frame="state_code",
    title="TANF allotment for a two-person household as Social Security income varies",
)

fig_ss.update_layout(
    xaxis_tickformat="$,",
    yaxis_tickformat="$,",
    yaxis_range=[0, ss_df_combined.monthly_tanf.max() * 1.1],
    legend_title=None,
)
fig_ss.show()

Examples#

A single parent of one in Illinois with earnings of $250 per month will receive $372.50 per month in TANF benefits.