{
 "$schema": "https://json-schema.org/draft/07/schema#",
 "$id": "https://datalibertarian.in/babuwatch/data/schema.json",
 "title": "Babuwatch court-adjudicated cases — record schema",
 "description": "2,443 court-adjudicated records against public servants — 522 civil servants and 1,921 police records, from 1168 Supreme Court / High Court judgments and 1275 trial-court convictions. A further 22 trial-court convictions later set aside on appeal are kept out of the counts. One object per judgment in cases.json; one object per conviction in tier2.json. Officer names are gated: use officers[].display, never officers[].name, unless officers[].publish_grade is 'named_safe'.",
 "type": "array",
 "items": {
  "type": "object",
  "required": [
   "merged_id"
  ],
  "properties": {
   "admin_category": {
    "type": "string",
    "description": "Compiler admin category (workflow copy of category)."
   },
   "admin_subcategory": {
    "type": "string",
    "description": "Compiler admin sub-category (workflow copy)."
   },
   "adversarial": {
    "type": "null",
    "description": "Adversarial-review marker from the compiler, if any."
   },
   "alias_merged_ids": {
    "type": "array",
    "description": "Older IDs merged into this record after dedup."
   },
   "allegations": {
    "type": "array",
    "description": "Structured allegation/position items from verification."
   },
   "anonymised": {
    "type": "boolean",
    "description": "True when the record has been through anonymisation."
   },
   "authenticity_check": {
    "type": "null",
    "description": "Authenticity-check record, when present."
   },
   "bench": {
    "type": "string",
    "description": "Bench strength / composition notes, if recorded."
   },
   "case_number": {
    "type": "string",
    "description": "Court case number (appeal / petition / suit number)."
   },
   "case_title": {
    "type": "string",
    "description": "Full case title as given in the judgment."
   },
   "category": {
    "type": "string",
    "description": "Site category: Bribery & extortion | Disproportionate assets | Fraud & misappropriation | Violence & unlawful detention | Other misconduct.",
    "enum": [
     "Bribery & extortion",
     "Disproportionate assets",
     "Fraud & misappropriation",
     "Violence & unlawful detention",
     "Other misconduct"
    ]
   },
   "citation": {
    "type": "string",
    "description": "Law-report citation (SCC / AIR / other neutral cite)."
   },
   "city_town": {
    "type": "string",
    "description": "City / town / village, if recorded."
   },
   "compensation_inr": {
    "type": "integer",
    "description": "Compensation ordered in rupees (ordered, not shown paid)."
   },
   "compensation_ordered": {
    "type": "boolean",
    "description": "Observed in data; no curated description yet."
   },
   "confidence": {
    "type": "string",
    "description": "Verifier confidence: high | medium.",
    "enum": [
     "high",
     "medium"
    ]
   },
   "corrections": {
    "type": "null",
    "description": "Published corrections to this record, when present."
   },
   "court": {
    "type": "string",
    "description": "Deciding court (Supreme Court of India or a High Court)."
   },
   "court_as_verified": {
    "type": "string",
    "description": "Court name as the verifier recorded it, when it differs."
   },
   "court_quote": {
    "type": "string",
    "description": "Verbatim extract from the judgment."
   },
   "court_quote_para": {
    "type": "string",
    "description": "Paragraph number of the verbatim extract, if known."
   },
   "date_precision": {
    "type": "string",
    "description": "'day' normally; 'month' where only month is known.",
    "enum": [
     "day",
     "month"
    ]
   },
   "display_title": {
    "type": "string",
    "description": "Short human-readable case title used on the site."
   },
   "display_title_redacted": {
    "type": "string",
    "description": "Redacted display title safe for publication."
   },
   "district": {
    "type": "string",
    "description": "Present-day district of the incident, if known."
   },
   "district_at_time": {
    "type": "string",
    "description": "District name at the time, when it differs."
   },
   "editor_notes": {
    "type": "null",
    "description": "Internal editor notes, when present."
   },
   "fidelity_changes": {
    "type": "null",
    "description": "What the fidelity check reconciled, when present."
   },
   "fidelity_checked": {
    "type": "boolean",
    "description": "True once a fidelity check re-read the judgment (V3)."
   },
   "fidelity_from": {
    "type": "null",
    "description": "Fidelity-check source reference, when present."
   },
   "final_outcome_url": {
    "type": "string",
    "description": "Observed in data; no curated description yet."
   },
   "flagged": {
    "type": "null",
    "description": "True if the record needs review (excluded from v1)."
   },
   "followup_history": {
    "type": "array",
    "description": "Dated follow-up checks, when present."
   },
   "followup_status": {
    "type": "string",
    "description": "Follow-up state (e.g. never_checked)."
   },
   "force": {
    "type": "string",
    "description": "Police force (e.g. state police, special cell), if recorded."
   },
   "incident_date": {
    "type": "string",
    "description": "Date of the underlying incident, ISO 8601, if known."
   },
   "incident_year": {
    "type": "integer",
    "description": "Calendar year of the underlying incident, if known."
   },
   "institutional_response": {
    "type": "array",
    "description": "Structured institutional-action items."
   },
   "judges": {
    "type": "array",
    "description": "Judges on the bench, if recorded."
   },
   "judgment_date": {
    "type": "string",
    "description": "Date of judgment, ISO 8601 (YYYY-MM-DD)."
   },
   "judgment_year": {
    "type": "integer",
    "description": "Calendar year of the judgment."
   },
   "last_checked": {
    "type": "string",
    "description": "Date of the latest follow-up check, when present."
   },
   "later_proceedings": {
    "type": "array",
    "description": "Observed in data; no curated description yet."
   },
   "legal_review": {
    "type": "null",
    "description": "Legal-review record, when present."
   },
   "link_checked_per_url": {
    "type": "array",
    "description": "Per-URL link-check results."
   },
   "merged_case_id": {
    "type": "string",
    "description": "Internal compiler case key, usually equal to merged_id."
   },
   "merged_id": {
    "type": "string",
    "description": "Compiler record key (CWC-NNNN). One record per judgment; kept for traceability, not used in public URLs."
   },
   "officer_count": {
    "type": "integer",
    "description": "Number of officers in the record."
   },
   "officers": {
    "type": "array",
    "description": "Police personnel in the record. Raw 'name' is gated: consumers must use 'display' (safe label) and 'name_public' (name only when publish_grade is named_safe).",
    "items": {
     "type": "object",
     "properties": {
      "display": {
       "type": "string",
       "description": "Gated safe label: name (+rank) when named_safe, else rank + unit only."
      },
      "gate_reasons": {
       "type": "array",
       "description": "Why the officer was unnamed, if applicable."
      },
      "grok": {
       "type": "string",
       "description": "Observed in data; no curated description yet."
      },
      "jev_p_culpable": {
       "type": "number",
       "description": "Observed in data; no curated description yet."
      },
      "jev_risk": {
       "type": "number",
       "description": "Observed in data; no curated description yet."
      },
      "key2": {
       "type": "string",
       "description": "Second-key confirmation answer used by the gate."
      },
      "key2_agy": {
       "type": "string",
       "description": "Observed in data; no curated description yet."
      },
      "key2_claude": {
       "type": "string",
       "description": "Observed in data; no curated description yet."
      },
      "key2_gemapi": {
       "type": "string",
       "description": "Observed in data; no curated description yet."
      },
      "key2_gpt": {
       "type": "string",
       "description": "Observed in data; no curated description yet."
      },
      "key2_gpt56": {
       "type": "string",
       "description": "Observed in data; no curated description yet."
      },
      "key2_openrouter": {
       "type": "string",
       "description": "Observed in data; no curated description yet."
      },
      "key2_union": {
       "type": "string",
       "description": "Observed in data; no curated description yet."
      },
      "later_outcome": {
       "type": "string",
       "description": "Later appellate outcome, if any."
      },
      "ledger_role": {
       "type": "string",
       "description": "Ledger role_in_judgment used by the gate."
      },
      "name": {
       "type": "string",
       "description": "Raw officer name as recorded. GATED: do not publish unless publish_grade is 'named_safe'; use 'display'."
      },
      "name_public": {
       "type": "string",
       "description": "Officer name when publish_grade is named_safe, else null."
      },
      "note": {
       "type": "string",
       "description": "Observed in data; no curated description yet."
      },
      "publish_grade": {
       "type": "string",
       "description": "'named_safe' or 'unnamed' (officer-naming gate)."
      },
      "rank": {
       "type": "string",
       "description": "Officer rank, if recorded."
      },
      "role": {
       "type": "string",
       "description": "Observed in data; no curated description yet."
      },
      "unit": {
       "type": "string",
       "description": "Officer unit / posting; may carry 'role' instead."
      },
      "unit_note": {
       "type": "string",
       "description": "Observed in data; no curated description yet."
      }
     }
    }
   },
   "officers_named_public": {
    "type": "integer",
    "description": "How many officers are graded named_safe."
   },
   "outcome_type": {
    "type": "string",
    "description": "One of five controlled outcome values.",
    "enum": [
     "adverse_finding_compensation",
     "conviction_upheld",
     "conviction_by_hc",
     "conviction_by_sc",
     "disciplinary_upheld"
    ]
   },
   "police_station_or_unit": {
    "type": "string",
    "description": "Police station or unit involved, if recorded."
   },
   "primary_source_url": {
    "type": "string",
    "description": "Primary source: judgment text URL."
   },
   "privacy_review": {
    "type": "null",
    "description": "Privacy-review record, when present."
   },
   "protest_override_heuristic": {
    "type": "boolean",
    "description": "Compiler heuristic marker, if set."
   },
   "publication_basis": {
    "type": "null",
    "description": "Publication-basis record, when present."
   },
   "record_flag": {
    "type": "null",
    "description": "Gate record flag (e.g. review_remove), if any."
   },
   "record_id": {
    "type": "string",
    "description": "Public record ID (CW-YYYY-NNNN). Record URLs are /incident/CW-YYYY-NNNN."
   },
   "retracted": {
    "type": "object",
    "description": "True if the record was withdrawn."
   },
   "reviews": {
    "type": "array",
    "description": "Review records attached to the case, when present."
   },
   "secondary_sources": {
    "type": "array",
    "description": "Further source URLs (judgment mirrors, newsroom)."
   },
   "sections": {
    "type": "array",
    "description": "Statutes / sections invoked, as recorded."
   },
   "sentence_max_years": {
    "type": [
     "integer",
     "number"
    ],
    "description": "Maximum sentence length in years, if applicable."
   },
   "sentence_type": {
    "type": "string",
    "description": "Sentence imposed on convicted personnel, if any."
   },
   "service": {
    "type": "string",
    "description": "Observed in data; no curated description yet."
   },
   "source_assessment": {
    "type": "object",
    "description": "Source-reliability assessment object."
   },
   "state": {
    "type": "string",
    "description": "State / union territory of the incident (present-day)."
   },
   "status": {
    "type": "string",
    "description": "Observed in data; no curated description yet."
   },
   "subcategory": {
    "type": "string",
    "description": "Internal house sub-category code (twelve values).",
    "enum": [
     "custodial_death",
     "custodial_torture",
     "custodial_rape_sexual_assault",
     "fake_encounter_extrajudicial_killing",
     "enforced_disappearance",
     "disproportionate_force",
     "illegal_detention_false_imprisonment",
     "false_implication_fabrication",
     "dereliction_evidence_tampering",
     "bribery_pc_act",
     "extortion",
     "other"
    ]
   },
   "subcategory_display": {
    "type": "string",
    "description": "Display label for the sub-category."
   },
   "summary": {
    "type": "string",
    "description": "Verified summary text of the case."
   },
   "summary_verified": {
    "type": "string",
    "description": "Verifier-approved summary text."
   },
   "tier": {
    "type": "string",
    "description": "Publication tier label (Tier A / Tier B)."
   },
   "tier_badge": {
    "type": "string",
    "description": "Observed in data; no curated description yet."
   },
   "tier_history": {
    "type": "array",
    "description": "Tier changes over time."
   },
   "title_party": {
    "type": "string",
    "description": "Observed in data; no curated description yet."
   },
   "v3_basis": {
    "type": "null",
    "description": "Basis recorded for V3 status, when present."
   },
   "verdict": {
    "type": "string",
    "description": "Resolved verification verdict (accept for all published)."
   },
   "verdict_note": {
    "type": "string",
    "description": "Note explaining the verification verdict."
   },
   "verification_badge": {
    "type": "string",
    "description": "Observed in data; no curated description yet."
   },
   "verification_note": {
    "type": "null",
    "description": "Verifier holding: what the court found."
   },
   "verification_status": {
    "type": "string",
    "description": "Verification level (V2, or V3 once checked)."
   },
   "verified_by": {
    "type": "array",
    "description": "Verification agent IDs that reviewed the record."
   },
   "victim_count": {
    "type": "integer",
    "description": "Number of victims in the record."
   },
   "victims": {
    "type": "array",
    "description": "Victims as recorded in the judgment (name/age/gender).",
    "items": {
     "type": "object",
     "properties": {
      "age": {
       "type": "integer",
       "description": "Victim age, if stated."
      },
      "descriptor": {
       "type": "string",
       "description": "Observed in data; no curated description yet."
      },
      "gender": {
       "type": "string",
       "description": "Victim gender, if stated."
      },
      "name": {
       "type": "null",
       "description": "Victim name as recorded, if stated."
      }
     }
    }
   },
   "victims_redacted": {
    "type": "array",
    "description": "Redacted victim descriptors safe for publication."
   },
   "watch": {
    "type": "string",
    "description": "Observed in data; no curated description yet."
   }
  }
 },
 "tier2": {
  "description": "Trial-court conviction record shape (data/tier2.json, one object per conviction; record URLs /trial-court/<case_id>).",
  "type": "array",
  "items": {
   "type": "object",
   "required": [
    "case_id"
   ],
   "properties": {
    "alias_case_ids": {
     "type": "array",
     "description": "Older IDs merged into this record after dedup."
    },
    "appeal_status": {
     "type": "string",
     "description": "One of upheld | set_aside | pending | none_known | unknown, as known from the cited sources."
    },
    "appeal_url": {
     "type": "string",
     "description": "Appeal judgment URL, when located."
    },
    "case_id": {
     "type": "string",
     "description": "Public trial-court record ID. Record URLs are /trial-court/<case_id>."
    },
    "case_number": {
     "type": "string",
     "description": "Court case number, if stated."
    },
    "case_title": {
     "type": "string",
     "description": "Case title as given in the source."
    },
    "case_title_or_number": {
     "type": "string",
     "description": "Display title / case reference used on site."
    },
    "category": {
     "type": "string",
     "description": "Site category (usually Other for trial convictions)."
    },
    "confidence": {
     "type": "string",
     "description": "Verifier confidence: high | medium."
    },
    "conviction_date": {
     "type": "string",
     "description": "Date of conviction as stated in the source (prose or ISO; normalised to ISO in index.json)."
    },
    "conviction_date_note": {
     "type": "string",
     "description": "Observed in data; no curated description yet."
    },
    "conviction_date_source_order": {
     "type": "string",
     "description": "Observed in data; no curated description yet."
    },
    "conviction_year": {
     "type": "integer",
     "description": "Calendar year of the conviction."
    },
    "corrections": {
     "type": "array",
     "description": "Observed in data; no curated description yet."
    },
    "court": {
     "type": "string",
     "description": "Convicting court as recorded in the source."
    },
    "court_level": {
     "type": "string",
     "description": "One of special_acb | cbi_court | sessions | magistrate | lokayukta_court."
    },
    "court_quote": {
     "type": "string",
     "description": "Verbatim extract, when recorded."
    },
    "date_precision": {
     "type": "string",
     "description": "'day' normally; 'month'/'year' where less is known."
    },
    "department": {
     "type": "string",
     "description": "Observed in data; no curated description yet."
    },
    "district": {
     "type": "string",
     "description": "Present-day district, if known."
    },
    "followup_history": {
     "type": "array",
     "description": "Observed in data; no curated description yet."
    },
    "followup_status": {
     "type": "string",
     "description": "Observed in data; no curated description yet."
    },
    "gate_status": {
     "type": "string",
     "description": "Officer-gate status for this record."
    },
    "government": {
     "type": "string",
     "description": "Observed in data; no curated description yet."
    },
    "incident_date": {
     "type": "string",
     "description": "Date of the underlying incident, if known."
    },
    "incident_year": {
     "type": "integer",
     "description": "Calendar year of the underlying incident, if known."
    },
    "last_checked": {
     "type": "string",
     "description": "Observed in data; no curated description yet."
    },
    "officers": {
     "type": "array",
     "description": "Convicted police personnel. Gated like tier 1: consumers must use 'display' and 'name_public' (name only when publish_grade is named_safe)."
    },
    "outcome_type": {
     "type": "string",
     "description": "Always trial_court_conviction for this tier."
    },
    "post": {
     "type": "string",
     "description": "Observed in data; no curated description yet."
    },
    "primary_source_url": {
     "type": "string",
     "description": "Primary source URL."
    },
    "r8_check": {
     "type": "object",
     "description": "Observed in data; no curated description yet."
    },
    "raw_subcategory": {
     "type": "string",
     "description": "Observed in data; no curated description yet."
    },
    "report_date": {
     "type": "string",
     "description": "Observed in data; no curated description yet."
    },
    "secondary_sources": {
     "type": "array",
     "description": "Further source URLs."
    },
    "sections": {
     "type": "array",
     "description": "Statutes / sections of conviction, as recorded."
    },
    "sentence": {
     "type": "string",
     "description": "Sentence as stated in the source."
    },
    "sentence_date": {
     "type": "string",
     "description": "Observed in data; no curated description yet."
    },
    "sentence_max_years": {
     "type": [
      "integer",
      "number"
     ],
     "description": "Maximum sentence length in years, if coded."
    },
    "sentence_type": {
     "type": "string",
     "description": "Sentence type, if coded."
    },
    "service": {
     "type": "string",
     "description": "Observed in data; no curated description yet."
    },
    "source_agency": {
     "type": "string",
     "description": "Observed in data; no curated description yet."
    },
    "source_job": {
     "type": "string",
     "description": "Observed in data; no curated description yet."
    },
    "source_kind": {
     "type": "string",
     "description": "Kind of the primary source: press_release | judgment | list | news."
    },
    "state": {
     "type": "string",
     "description": "State / union territory of the case (present-day)."
    },
    "subcategory": {
     "type": "string",
     "description": "House sub-category code (e.g. bribery_pc_act)."
    },
    "subcategory_display": {
     "type": "string",
     "description": "Observed in data; no curated description yet."
    },
    "summary": {
     "type": "string",
     "description": "Verified summary text of the conviction."
    },
    "tier": {
     "type": "string",
     "description": "Publication tier label for this record."
    },
    "tier_badge": {
     "type": "string",
     "description": "Observed in data; no curated description yet."
    },
    "trial_court_name": {
     "type": "string",
     "description": "Full name of the convicting trial court."
    },
    "verdict_note": {
     "type": "string",
     "description": "Observed in data; no curated description yet."
    },
    "verification_badge": {
     "type": "string",
     "description": "Observed in data; no curated description yet."
    },
    "verification_status": {
     "type": "string",
     "description": "Verification level (V1, V1+, or V2). Trial-court records verify to a lower standard than High Court / Supreme Court records."
    },
    "verified_at": {
     "type": "string",
     "description": "Observed in data; no curated description yet."
    },
    "verified_by": {
     "type": "string",
     "description": "Observed in data; no curated description yet."
    },
    "verify_passes": {
     "type": "object",
     "description": "Observed in data; no curated description yet."
    },
    "victims": {
     "type": "array",
     "description": "Victims / complainants as recorded, if stated."
    },
    "watch": {
     "type": "string",
     "description": "Observed in data; no curated description yet."
    }
   }
  }
 },
 "tracker_index": {
  "description": "Slim tracker rows (data/index.json, both tiers; data/index-trial.json carries the trial-court slice). Short keys; every row carries a tier field.",
  "tier": {
   "type": "string",
   "enum": [
    "hc_sc",
    "trial"
   ],
   "description": "Court tier of the row: hc_sc for High Court / Supreme Court judgments, trial for trial-court convictions."
  }
 },
 "combined": {
  "description": "Every published record as one JSON array (data/all-cases.json: HC/SC gated records + trial-court current + set-aside, full record shapes). Rows carry a tier field with the tracker_index vocabulary (hc_sc or trial); the verification Tier A/B string is replaced by it and stays derivable from verification_status.",
  "tier": {
   "type": "string",
   "enum": [
    "hc_sc",
    "trial"
   ],
   "description": "Dataset origin of the row: hc_sc for High Court / Supreme Court records, trial for trial-court convictions (including appeal_status=set_aside)."
  }
 },
 "controlled_vocabularies": {
  "category": {
   "values": [
    "Bribery & extortion",
    "Disproportionate assets",
    "Fraud & misappropriation",
    "Violence & unlawful detention",
    "Other misconduct"
   ],
   "counts": {
    "Bribery & extortion": 0,
    "Disproportionate assets": 0,
    "Fraud & misappropriation": 0,
    "Violence & unlawful detention": 0,
    "Other misconduct": 0
   }
  },
  "outcome_type": {
   "values": [
    "adverse_finding_compensation",
    "conviction_upheld",
    "conviction_by_hc",
    "conviction_by_sc",
    "disciplinary_upheld"
   ],
   "counts": {
    "adverse_finding_compensation": 499,
    "conviction_upheld": 222,
    "conviction_by_hc": 43,
    "conviction_by_sc": 14,
    "disciplinary_upheld": 359
   }
  },
  "subcategory": {
   "values": [
    "custodial_death",
    "custodial_torture",
    "custodial_rape_sexual_assault",
    "fake_encounter_extrajudicial_killing",
    "enforced_disappearance",
    "disproportionate_force",
    "illegal_detention_false_imprisonment",
    "false_implication_fabrication",
    "dereliction_evidence_tampering",
    "bribery_pc_act",
    "extortion",
    "other"
   ],
   "counts": {
    "custodial_death": 254,
    "custodial_torture": 74,
    "custodial_rape_sexual_assault": 21,
    "fake_encounter_extrajudicial_killing": 42,
    "enforced_disappearance": 21,
    "disproportionate_force": 46,
    "illegal_detention_false_imprisonment": 144,
    "false_implication_fabrication": 41,
    "dereliction_evidence_tampering": 61,
    "bribery_pc_act": 144,
    "extortion": 30,
    "other": 290
   }
  },
  "confidence": {
   "values": [
    "high",
    "medium"
   ],
   "counts": {
    "high": 1052,
    "medium": 116
   }
  },
  "date_precision": {
   "values": [
    "day",
    "month"
   ],
   "counts": {
    "day": 1167,
    "month": 1
   }
  }
 },
 "generated": "2026-10-06"
}
