{"main_topic":"education","sub_topic":"gosa","topic":"student_mobility_rate","key":"education/gosa/student_mobility_rate","version":"1.0.0","year_min":2012,"year_max":2024,"year_gaps":[],"update_frequency":"annual","detail_levels":["districts","schools"],"default_detail":"schools","path_template":"education/student_mobility_rate/year={year}/{detail}.parquet","grain":["year","district_code","school_code"],"title":"Student Mobility Rates","summary":"How often students change schools in each Georgia public school and district, as an annual churn rate, 2012-2024 (no 2014 district rows).","description":"Annual student mobility (churn) rate for Georgia public schools and districts, published by GOSA for school years 2011-12 through 2023-24 (filename year = ending calendar year, e.g. 2024 = 2023-24). Mobility is the share of students enrolled at any point during the school year but not for the full year; GOSA computes it as a churn rate — student entries plus withdrawals between the fall count date and May 1, over the fall-count enrollment — so it counts moves rather than movers and can legitimately exceed 100%. One fact table at two detail levels: school (one row per school) and district (one row per district / system). No demographic breakdowns. Merges the formerly separate student_mobility_rates_school and student_mobility_rates_district topics.","source":"GOSA","source_url":"https://gosa.georgia.gov/dashboards-data-report-card/downloadable-data","endpoint":"/api/v1/education/student_mobility_rate","columns":[{"name":"year","type":"integer","role":"year","nullable":false,"label":"Year","short_description":"","description":"Ending (spring) calendar year of the school year (e.g. 2024 for 2023-24), taken from the bronze filename — no in-file year column exists in either family.","valid_values":null,"example":2024,"unit":null,"value_min":null,"value_max":null,"null_meaning":null,"key_metric_grain_contributor":false,"metric_component":null},{"name":"district_code","type":"string","role":"fk_district","nullable":true,"label":"District Code","short_description":"","description":"GOSA district code (FK to districts dimension), zero-padded to 3 digits for standard county/city districts (codes 601-793) and the 799 state-schools authorizer; 7-digit state/commission-charter authorizer codes (782xxxx/783xxxx, school rows only) are preserved unchanged. On district-detail rows it is the bronze school_district_cd; on school-detail rows it is the first 3 (or 7) characters of the compound sys_sch code. Never NULL.","valid_values":null,"example":"601","unit":null,"value_min":null,"value_max":null,"null_meaning":"Never NULL — neither family publishes a statewide aggregate, so every school and district row carries a populated district_code.","key_metric_grain_contributor":false,"metric_component":null},{"name":"school_code","type":"string","role":"fk_school","nullable":true,"label":"School Code","short_description":"","description":"GOSA school code, zero-padded to 4 characters (composite FK to schools dimension with district_code; not globally unique on its own). Populated on school rows only — district rows carry NULL. Extracted from the compound bronze sys_sch code: chars after the 3-char district prefix for regular districts ('601103' -> '0103'), chars 4-7 for 799 state-school codes (both the 11-char 2012-2019 form '79918931893' and the 7-char 2020-2024 form '7991893' -> '1893'), or the last 3 chars for 10-char charter codes ('7820108108' -> '0108').","valid_values":null,"example":"0103","unit":null,"value_min":null,"value_max":null,"null_meaning":"Populated only on school-detail rows; NULL on every district-detail row (the district level has no school code). The column is shared across the education key shape.","key_metric_grain_contributor":false,"metric_component":null},{"name":"mobility_rate","type":"number","role":"metric","nullable":true,"label":"Mobility Rate","short_description":"Student churn rate (0-1 scale): student moves per fall enrollment; counts moves, so it can exceed 1.0.","description":"Student mobility (churn) rate on the 0-1 scale (0.214 = 21.4%): student entries plus withdrawals between the fall count date and May 1, divided by fall-count enrollment. Bronze publishes 0-100; divided by 100 per data-cleaning-standards §4. A ratio, not a bounded proportion: the metric counts student moves rather than distinct students, so values above 1.0 are legitimate and preserved — at the school level 33-59 rows per year exceed 1.0 at alternative schools, DJJ facilities, and residential treatment centers (e.g. 5.333 = 533.3% at Lighthouse Care Center of Augusta, 2024). District-level values stay below 1.0 in all published years (max 0.59 in 2016). One school value is a suspected source defect preserved per §4b (extreme-but-conceivable): 2020 district_code=701 / school_code=0298 (Eagle's Landing Academy) publishes 115.0 (raw 11500), ~17x that year's next extreme (657.9); it is retained, not capped, and flagged by the transform's sanity warning. Bronze column name: mobility_rate (2012-2020), renamed to mobility (2021-2024) in both families, semantically identical.","valid_values":null,"example":0.214,"unit":"ratio","value_min":null,"value_max":null,"null_meaning":"The source cell was genuinely blank (no rate published for that school that year) — NOT small-cell suppression. Exactly four such blanks exist, all school-detail: one each in 2019, 2020, 2021, and 2024. District rows are never NULL.","key_metric_grain_contributor":false,"metric_component":null}],"key_metric":"mobility_rate","usage":"Star-schema fact table. Join the districts dimension on district_code; the schools dimension on district_code + school_code. Read directly with DuckDB over Parquet.","limitations":"Two detail levels (school, district) in one fact table, split by parquet filename; school_code is NULL on district rows. No statewide rollup is published in either family, so state figures cannot be read from this table. The district level has a documented 2014 gap: GOSA published the 2014 district file at the school level only (a file byte-identical to the school family's 2014 file), with no enrollment counts from which to reconstruct the district rate, so the district 2014 rows are omitted; 2014 school-level rows are present (from the school family). The school-level and district-level rows come from two independent GOSA downloads — the district rate rolls up entry/withdrawal counts rather than averaging the school rates — so school rows are NOT guaranteed to reconcile with their district row. Mobility is a churn ratio, not a bounded proportion: it counts moves rather than movers, so school-level values above 1.0 are legitimate and preserved (one suspected 2020 source defect, Eagle's Landing Academy at 115.0, is retained per §4b). No suppression exists in this topic — the only NULLs are four genuinely blank school cells (2019, 2020, 2021, 2024); NULL never means suppressed.","null_semantics":{"suppressed_to_null":false,"zero_is_real":true},"available_years":[2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024],"schema_hash":"1881f49ef6adc087096645d77f71733135080b53052ab453e0d0c21d3ff4c07b","tags":["education","gosa","student_mobility_rate"],"granularity_description":"One row per year, district_code, school_code (geography columns are NULL at higher aggregation levels).","example_queries":[{"description":"Latest year (2024), schools detail","query":"SELECT * FROM student_mobility_rate WHERE year = 2024 LIMIT 100"},{"description":"District 601 in 2024","query":"SELECT * FROM student_mobility_rate WHERE district_code = '601' AND year = 2024 LIMIT 100"}],"foreign_keys":[{"column":"district_code","target_object":"districts","target_columns":["district_code"],"attribute_columns_added":["district_name","district_census_id","district_type"],"scope":"domain"},{"column":"school_code","target_object":"schools","target_columns":["district_code","school_code"],"attribute_columns_added":["school_name"],"scope":"domain"}],"filters":[{"param":"year","kind":"year_exact","type":"integer","multi_value":false,"enum_enforced":false,"values":null},{"param":"year_min","kind":"year_range","type":"integer","multi_value":false,"enum_enforced":false,"values":null},{"param":"year_max","kind":"year_range","type":"integer","multi_value":false,"enum_enforced":false,"values":null},{"param":"detail","kind":"detail","type":"string","multi_value":false,"enum_enforced":true,"values":["districts","schools"],"default":"schools"},{"param":"district_code","kind":"foreign_key","column":"district_code","type":"string","multi_value":true,"enum_enforced":false,"values":null},{"param":"school_code","kind":"foreign_key","column":"school_code","type":"string","multi_value":true,"enum_enforced":false,"values":null},{"param":"district_type","kind":"dimension_attribute","dimension":"districts","column":"district_type","type":"string","multi_value":true,"enum_enforced":true,"values":["commission_charter","resa","standard","state_agency","state_charter","state_school","state_special"]}],"filter_hints":[]}