{
  "retrievedDate": "2026-09-14",
  "provider": "Suruhanjaya Pilihan Raya Malaysia (SPR), official gazette published by Attorney General Chambers",
  "sources": {
    "election": "https://opendata.spr.gov.my/data/keputusan-pru.json",
    "stateElectionHistorical": "https://opendata.spr.gov.my/data/keputusan-pru-dun.json",
    "stateElection": "https://lom.agc.gov.my/ilims/upload/portal/akta/outputp/3615034/PUB%20246%20(2026).pdf",
    "dpi": "https://opendata.spr.gov.my/api/katalog?sheet=daftar-pemilih&negeri=JOHOR&tahun=2025&limit=1000",
    "dpi2026Check": "https://opendata.spr.gov.my/api/katalog?sheet=daftar-pemilih&negeri=JOHOR&tahun=2026&limit=1000",
    "dpiPaginationCheck": "https://opendata.spr.gov.my/api/katalog?sheet=daftar-pemilih&negeri=JOHOR&tahun=2025&limit=1000&page=2",
    "hierarchy": "https://opendata.spr.gov.my/data/senarai-bpr.json",
    "byElection": "https://opendata.spr.gov.my/data/keputusan-prk.json",
    "pulaiByElectionSchedule": "https://www.spr.gov.my/sites/default/files/KM182023.pdf",
    "stateElectionSchedule": "https://spr.gov.my/wp-content/uploads/2026/06/KM-BIL-18_2026-MESYUARAT-KHAS-PRU-DEWAN-NEGERI-JOHOR-NEGERI-SEMBILAN-KE-16-1.pdf",
    "currentAssembly": "https://dewannegeri.johor.gov.my/sad/",
    "currentParliament": "https://www.parlimen.gov.my/ahli-dewan.html?uweb=dr&p=All&parti=All&lang=en"
  },
  "electionScope": "25 Parliament PRU15 (19 November2022), P161 Pulai PRK (9 September2023), and all56 DUN PRN ke-16 (11 July2026). The 2023 Simpang Jeram and2024 Mahkota DUN by-elections are superseded by2026 state results.",
  "latestElectionVerification": {
    "asOf": "2026-09-14",
    "legacySprDunJsonLatestYear": 2022,
    "actualLatestStateElection": "2026-07-11",
    "gazette": "P.U. (B) 246/2026",
    "gazettePublishedOn": "2026-07-20",
    "note": "Legacy SPR JSON is stale for Johor; primary AGC gazette is used for all current assembly election records. Gazette downloaded and all Form16 values checked."
  },
  "dpiScope": "DPI 2025 is latest year available from endpoint; 2026 query has no data. Election-day 2026 register is a separate snapshot and must not overwrite DPI2025 totals.",
  "pdmScope": "949 official PDM; no invented polygon, PDM population or PDM election results.",
  "ageNote": "18 TAHUN is a subset of 18-20 TAHUN.",
  "cacheNote": "National PRU/PRN2022 and hierarchy caches reused from same-day Selangor research. Gazette and DPI queries fetched specifically for this state.",
  "fileHashes": {
    "dpi-api-page2-check.json": "eaeb95938d474265bbdf2a5731019398daf59ddaaedf8f2ccf49369673e0b1fa",
    "dpi-api-page1.json": "00a954c00747b28ab353dc411b02113f2a349910e42e1e20b875588d47c1fcd6",
    "keputusan-pru-dun.json": "7d035d331e239a695ec99827ce74cb20830eca28464b91bf14779cf9cd8241fb",
    "gazette-2026-parsed.json": "082fb8bb12163f402fccf37d43d69dc55259a17c03ba22c0bf9ba6a1f6c16304",
    "official-election-gazette-2026.pdf": "4481d13ad99bd4a879de0b3e2a8b1dd6b06ae20317d435c5d4b98577e648a25a",
    "keputusan-prk.json": "6b56ab8778cc6bd3942c359733199a99f8dee433c7e8bfd596e8125a89815d75",
    "dpi-api-2026-check.json": "34058b8e4b11fe195eff5e9f4811d0761808859a8335d1ed97e02bddb2ae3f7c",
    "official-election-gazette-2026.txt": "2d5b3f32694255212ec813a791aa48b75e1cd5ec2975c38bf6648d4ebb178f4c",
    "keputusan-pru.json": "886fd3235da1a331a0ce8356a4f592b4cec25b4348f5379420b7e8982c49a91d",
    "senarai-bpr.json": "5caa4a0e942982f2a340cfcbad446a9d0f5cb55d253b250ab498023aa5a99533"
  },
  "originalByElectionSourceSha256": "685b224b42a8e0c2210075e9c368e40ef9e417c6611632bf20d1bd795201497b",
  "hashNote": "Privacy-minimized PRK cache excludes national ID fields; none included in derived output.",
  "dpiPagination": {
    "total": 949,
    "totalPages": 1,
    "returnedRows": 949,
    "page2ReturnedRows": 0,
    "year2026ReturnedRows": 0
  },
  "latestAvailableDpiYears": [
    "2025",
    "2024",
    "2023",
    "2022",
    "2021",
    "2020",
    "2019",
    "2018",
    "2017",
    "2016",
    "2015",
    "2014",
    "2013",
    "2012"
  ],
  "validation": {
    "parliamentCount": 26,
    "dunCount": 56,
    "pdmCount": 949,
    "stateElectors": 2717495,
    "parliamentSeats": {
      "PH": 14,
      "PN": 2,
      "MUDA": 1,
      "BN": 9
    },
    "dunSeats": {
      "BN": 48,
      "PH": 8
    },
    "candidateCount": 268,
    "prn2026CandidateCount": 172,
    "prn2022CandidateCount": 239,
    "byElectionOverrideCount": 1,
    "majorityDiscrepancies": [],
    "dpiDiscrepancies": [],
    "dpiChecks": "All 949 PDM rows checked: age/sex/category sums, age18 subset, code and SPR hierarchy match; all aggregate totals reconcile.",
    "gazetteChecks": "All 56 DUN and 172 candidates extracted from primary AGC gazette; candidate sums, majority, ballot balance and turnout calculations reconcile; first schedule winner list checked separately.",
    "currentRepresentativeCount": 82,
    "currentAssemblyPages": 6,
    "gazetteFirstScheduleMatch": true,
    "hierarchyCorrectionCount": 1
  },
  "hierarchyCorrections": [
    {
      "sourceFile": "raw/hierarchy.csv",
      "state": "Johor",
      "dun": "N.30 Paloh",
      "field": "code_parlimen",
      "sourceValue": "P.032",
      "normalizedValue": "P.153",
      "basis": "The same raw row states parlimen=P.153 Sembrong. DOSM DUN population/geography and SPR DPI/hierarchy independently place N30 Paloh under P153. Only normalized hierarchy parent code corrected; all raw files and GeoJSON feature objects preserved unchanged.",
      "sourceUrl": "https://raw.githubusercontent.com/dosm-malaysia/data-open/main/datasets/geodata/state_parlimen_dun.csv",
      "corroboratingSourceUrl": "https://opendata.spr.gov.my/data/senarai-bpr.json"
    }
  ],
  "gazetteValidation": {
    "pages": 62,
    "dunCount": 56,
    "candidateCount": 172,
    "allFirstScheduleWinnersMatchForm16": true,
    "allCandidateVoteSumsReconcile": true,
    "allMajoritiesReconcile": true,
    "allBallotBalancesReconcile": true,
    "allTurnoutPercentagesReconcile": true,
    "mirrorBytesIdenticalToOfficial": true
  }
}
