{
  "fields": [
    {
      "name": "id",
      "type": "string",
      "description": "Unique ID of this objection/correction record.",
      "constraints": {
        "required": true
      }
    },
    {
      "name": "vote_event_id",
      "type": "string",
      "description": "ID of the vote event this objection refers to.",
      "constraints": {
        "required": true
      }
    },
    {
      "name": "type",
      "type": "string",
      "description": "Type of objection. 'event_objection': challenge to the entire vote event on procedural or technical grounds (not tied to a specific MP's stated voting intent). 'vote_correction': an individual MP states they intended to vote differently; may remain a stenographic note (outcome=announced) or escalate to invalidation and a repeat vote (outcome=invalidated).",
      "constraints": {
        "required": true
      }
    },
    {
      "name": "raised_by_id",
      "type": "string",
      "description": "ID of the person or organization raising this objection/correction."
    },
    {
      "name": "raised_by_type",
      "type": "string",
      "description": "Disambiguates whether raised_by_id refers to a person or an organization."
    },
    {
      "name": "outcome",
      "type": "string",
      "description": "Result of the objection. 'invalidated': the vote event was declared invalid (and may be repeated; set status='invalid' on the vote-event). 'announced': objection/correction recorded for the minutes but the vote event result stands. 'rejected': the objection was formally considered and rejected."
    },
    {
      "name": "decision_vote_event_id",
      "type": "string",
      "description": "ID of the vote event that decided the outcome of this objection (i.e. the procedural vote on whether to repeat the original vote). Applicable when outcome is 'invalidated' or 'rejected' and a separate procedural vote was held."
    },
    {
      "name": "repeated_vote_event_id",
      "type": "string",
      "description": "ID of the new vote event that replaced the invalidated one. Only set when outcome is 'invalidated' and the vote was actually repeated."
    },
    {
      "name": "intended_option",
      "type": "string",
      "description": "For vote_correction: the vote option the MP states they intended to cast (e.g. 'yes', 'no'). Uses the same option vocabulary as votes.option."
    },
    {
      "name": "date",
      "type": "string",
      "description": "Date the objection was raised. YYYY-MM-DD or ISO datetime."
    },
    {
      "name": "note",
      "type": "string",
      "description": "Free-text description, verbatim quote, or transcript reference for the objection."
    },
    {
      "name": "sources",
      "type": "array",
      "description": "Source URLs (e.g. parliamentary minutes page)."
    },
    {
      "name": "extras",
      "type": "object",
      "description": "Additional metadata fields not covered by the core schema."
    }
  ]
}