"""Ofsted renewed-framework (Nov 2025) report-card code translation. Scale labels are the live-sampled vocabulary from the Ofsted MI file (see pipeline/scripts/diagnose_compare_gaps.py, TASK 7 VALUE SAMPLE) — verified against real data, not the consultation draft. """ REPORT_CARD_GRADE_NAMES = { 1: "Exceptional", 2: "Strong standard", 3: "Expected standard", 4: "Needs attention", 5: "Urgent improvement", } # Graded evaluation areas only — safeguarding is a separate boolean # judgement and must never appear in grade counts or label maps. _RC_AREA_KEYS = ( "rc_inclusion", "rc_curriculum_teaching", "rc_achievement", "rc_attendance_behaviour", "rc_personal_development", "rc_leadership_governance", "rc_early_years", "rc_sixth_form", ) def report_card_labels(ofsted: dict) -> dict: """{area_key: {code, label}} for populated, known-valued rc_* areas.""" out = {} for key in _RC_AREA_KEYS: code = ofsted.get(key) label = REPORT_CARD_GRADE_NAMES.get(code) if code is not None and label is not None: out[key] = {"code": code, "label": label} return out def ofsted_page_url(urn: int) -> str: """The school's page on ofsted.gov.uk (all its reports live there — we never deep-link an individual report).""" return f"https://reports.ofsted.gov.uk/provider/21/{urn}"