{
  "engine": "android_mlkit",
  "recognition_timing_note": "Android includes decode and task wait; desktop measures provider call. Cold first call included; initialization excluded.",
  "summary": {
    "receipt_count": 2,
    "date_accuracy": 1.0,
    "amount_accuracy": 1.0,
    "merchant_accuracy": 1.0,
    "all_fields_accuracy": 1.0,
    "first_pass_success_rate": 0.5,
    "fallback_frequency": 0.5,
    "failure_rate": 0.0,
    "average_passes": 3,
    "mean_ms": 1790.9896050114185,
    "median_ms": 1790.9896050114185,
    "p95_ms": 3270.4653749242425
  },
  "receipts": [
    {
      "image": "2026-06-02_10.76_Jugo_Juice.jpeg",
      "date_ok": true,
      "amount_ok": true,
      "merchant_ok": true,
      "all_ok": true,
      "extraction_failed": false,
      "latency_ms": 311.5138350985944,
      "preprocessing_ms": 0.0,
      "recognition_ms": 300.1369230914861,
      "parsing_ms": 11.123046977445483,
      "passes": 1
    },
    {
      "image": "2026-06-03_94.80_Uber.png",
      "date_ok": true,
      "amount_ok": true,
      "merchant_ok": true,
      "all_ok": true,
      "extraction_failed": false,
      "latency_ms": 3270.4653749242425,
      "preprocessing_ms": 1898.9755869843066,
      "recognition_ms": 1314.826823072508,
      "parsing_ms": 54.96138590388,
      "passes": 5
    }
  ]
}
