How this is calculated
"Any Permanency (0-18)" is the sum of Adoption (0-18), Guardianship (0-18), and Reunification (0-18) — every child who left foster care to one of these three outcomes and hasn't yet turned 18. It does not include children who aged out, were transferred, or whose case ended some other way, since those aren't a stable long-term placement outcome in the same sense.
The Adoption/Guardianship (18-21) and (21-26) lines track the same children later in life, once they've become young adults — not a subdivision of the 0-18 population, since a child moves from one line to the next as they age rather than being double-counted within a single line. They aren't included in "Any Permanency," which stays focused on the original under-18 child-welfare population. The age range in every category's name (e.g. "Adoption (18-21)") is that category's own window — new categories can use any range, it isn't fixed to these examples.
Each child's exact age at exit determines how many years they remain in the count. That age comes from Florida's FSFN case-level extract (which has real birthdates) for exits through August 2025, and from Florida DCF's public Power BI dashboard's reason-by-age breakdown for more recent exits. Where neither source has exact per-child ages for a given month, that month's total exits for a category are distributed across ages using the age mix from the most recent 24 months of exact data for that same category — an estimate, used only when necessary, not a guess pulled from nowhere.
Florida's case-level extract becomes reliably complete in 2002. The 21-26 bands need 26 years of history to be fully known, which wouldn't arrive until 2028 — two years from now — if the chart only used real data. Instead, 2000-2001 are backfilled: each category's age-at-exit mix and average annual volume from 2002-2004 (the earliest real years) are used to estimate what those two years likely looked like, on the assumption that conditions were similar just before the data begins — not a guess at a trend, since we have no way to know if things were rising, falling, or flat before 2002. This moves every category's full-data year two years earlier without waiting for the calendar to catch up. It's marked with a hatched pattern (in the category's own color) so it's never confused with real records.
Even with that backfill, a category isn't fully known the moment its data starts — a category counted through age 18 needs 18 years of data before every possible still-in-window person is captured (someone who exited at age 0 the year before the data starts would still be counted 18 years later). Until then, the true population is undercounted, since anyone who exited earlier than that and hadn't yet aged out is missing. That's the gray shaded region — real data, but structurally incomplete, not wrong. How many years that covers depends entirely on each category's own age_max (see CATEGORY_DEFS in build_impacted_population.py) — it isn't a fixed rule, just what each category's own window happens to require.