{
  "symbol": "EURJPY",
  "display": "EURJPY",
  "asset_class": "forex",
  "timeframe": "M1",
  "rows": 14946,
  "start": "2025.06.18 07:29:00",
  "end": "2025.12.24 21:58:00",
  "score": 79.2,
  "grade": "C",
  "critical_count": 0,
  "warning_count": 3,
  "checks": {
    "duplicates": 0,
    "out_of_order": 0,
    "ohlc_violations": 0,
    "nonpositive_prices": 0,
    "flat_bars": 20,
    "flat_bars_pct": 0.134,
    "zero_volume": 14946,
    "zero_volume_pct": 100.0,
    "zero_spread": 14946,
    "zero_spread_pct": 100.0,
    "negative_spread": 0,
    "extreme_returns": 0,
    "gaps": 9,
    "largest_gap_seconds": 360,
    "largest_gap_start": "2025.12.23 21:59:00",
    "weekend_bars": 0
  },
  "issues": [
    {
      "severity": "warning",
      "check": "gaps",
      "count": 9,
      "message": "Gap greater than 2x timeframe and under 24h"
    },
    {
      "severity": "warning",
      "check": "zero_volume",
      "count": 14946,
      "message": "Zero or missing tick volume"
    },
    {
      "severity": "warning",
      "check": "zero_spread",
      "count": 14946,
      "message": "Zero or missing spread"
    },
    {
      "severity": "info",
      "check": "flat_bars",
      "count": 20,
      "message": "Open=High=Low=Close"
    }
  ],
  "generated_at": "2026-11-01",
  "report_url": "/historical-data/data-quality/detail.php?symbol=EURJPY&tf=M1"
}