{
  "api_version": "v1",
  "title": "SAPD ZIP-Year Public Safety Outcomes",
  "records": 298,
  "years": [
    2023,
    2024,
    2025,
    2026
  ],
  "latest_complete_year": 2025,
  "partial_year": 2026,
  "unique_zips": 78,
  "by_year": {
    "2026": {
      "row_count": 72,
      "unique_zips": 72,
      "total_calls": 539281,
      "total_arrests": 20707,
      "total_offenses": 43272,
      "arrests_per_100_calls": 3.84,
      "offenses_per_100_calls": 8.02,
      "arrests_per_100_offenses": 47.85,
      "profile_counts": {
        "high_arrest_to_offense": 6,
        "standard": 39,
        "high_offense_low_arrest": 18,
        "calls_without_offenses": 9
      }
    },
    "2025": {
      "row_count": 76,
      "unique_zips": 76,
      "total_calls": 1662210,
      "total_arrests": 59155,
      "total_offenses": 135285,
      "arrests_per_100_calls": 3.56,
      "offenses_per_100_calls": 8.14,
      "arrests_per_100_offenses": 43.73,
      "profile_counts": {
        "high_arrest_to_offense": 6,
        "standard": 41,
        "high_offense_low_arrest": 17,
        "calls_without_offenses": 12
      }
    },
    "2024": {
      "row_count": 75,
      "unique_zips": 75,
      "total_calls": 1678020,
      "total_arrests": 52061,
      "total_offenses": 152531,
      "arrests_per_100_calls": 3.1,
      "offenses_per_100_calls": 9.09,
      "arrests_per_100_offenses": 34.13,
      "profile_counts": {
        "standard": 39,
        "high_offense_low_arrest": 24,
        "calls_without_offenses": 12
      }
    },
    "2023": {
      "row_count": 75,
      "unique_zips": 75,
      "total_calls": 1673560,
      "total_arrests": 48857,
      "total_offenses": 158156,
      "arrests_per_100_calls": 2.92,
      "offenses_per_100_calls": 9.45,
      "arrests_per_100_offenses": 30.89,
      "profile_counts": {
        "standard": 32,
        "high_offense_low_arrest": 32,
        "calls_without_offenses": 9,
        "high_arrest_to_offense": 2
      }
    }
  },
  "source_audit_2025": {
    "api_version": "v1",
    "year": 2025,
    "audit_status": "verified_from_user-run PowerShell audit on 2026-07-29",
    "zip_analysis": {
      "zip_areas": 76,
      "aggregate_calls": 1662210,
      "arrest_source_rows_represented": 59155,
      "offense_source_rows_represented": 135285,
      "arrests_per_100_offenses": 43.7,
      "ratio_type": "aggregate row-count ratio",
      "clearance_rate": false
    },
    "original_source_files": {
      "arrests": {
        "path": "E:\\SAPD\\pubsafedash_arrests.csv",
        "all_rows": 191724,
        "rows_2025": 59505,
        "unique_report_ids_2025": 37247,
        "rows_not_represented_in_zip_outcome": 350,
        "percent_not_represented": 0.59
      },
      "offenses": {
        "path": "E:\\SAPD\\pubsafedash_offenses.csv",
        "all_rows": 516255,
        "rows_2025": 136708,
        "unique_report_ids_2025": 125125,
        "rows_not_represented_in_zip_outcome": 1423,
        "percent_not_represented": 1.04
      },
      "zip_outcomes": {
        "path": "E:\\SAPD\\sapd_safety_outcomes.csv",
        "all_zip_year_rows": 298,
        "rows_2025": 76
      },
      "raw_calls_file_in_audit": false
    },
    "interpretation_statement": "The 2025 ZIP analysis includes 59,155 arrest-source rows and 135,285 offense-source rows assigned to 76 ZIP areas. The original source files contain 59,505 arrest rows and 136,708 offense rows for 2025. Approximately 0.59% of arrest rows and 1.04% of offense rows were not represented in the ZIP-level outcome table. Source rows are not equivalent to unique reports: the arrest data contains 37,247 unique Report IDs, while the offense data contains 125,125 unique Report IDs. The arrests-per-100-offenses measure is an aggregate row-count ratio and must not be interpreted as a clearance rate."
  },
  "interpretation_statement": "The 2025 ZIP analysis includes 59,155 arrest-source rows and 135,285 offense-source rows assigned to 76 ZIP areas. The original source files contain 59,505 arrest rows and 136,708 offense rows for 2025. Approximately 0.59% of arrest rows and 1.04% of offense rows were not represented in the ZIP-level outcome table. Source rows are not equivalent to unique reports: the arrest data contains 37,247 unique Report IDs, while the offense data contains 125,125 unique Report IDs. The arrests-per-100-offenses measure is an aggregate row-count ratio and must not be interpreted as a clearance rate.",
  "source_note": "National Data System analytical alignment of SAPD calls, arrest-source rows, and offense-source rows by ZIP code and year.",
  "generated_utc": "2026-07-29T07:09:00Z"
}
