[
  {
    "id": "ff6feb89-9aa6-4fda-a669-c372ac00712d",
    "competition_id": "da6a4e88-4ffe-4550-ac21-5653ed99bf82",
    "competition": "K League 1",
    "season_id": "05cb17d5-76f7-49d4-8d2a-60ee866bd25a",
    "season": "2026",
    "provider": "sportmonks-football",
    "policy_version": "data-readiness-v1",
    "calculated_at": "2026-08-08 12:59:55.065198+00:00",
    "readiness_score": 62.41,
    "readiness_label": "PARTIALLY READY",
    "ready_for_training": false,
    "sample_size": 120,
    "metrics": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 0.916031,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 0.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 0.0,
      "data_freshness": 0.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 0.0,
      "correction_late_arriving_rate": 0.0
    },
    "metric_scores": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 0.916031,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 1.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 1.0,
      "data_freshness": 0.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 1.0,
      "correction_late_arriving_rate": 1.0
    },
    "weights": {
      "fixture_completeness": 12.0,
      "player_completeness": 7.0,
      "lineup_completeness": 7.0,
      "injury_completeness": 4.0,
      "odds_completeness": 12.0,
      "xg_completeness": 8.0,
      "feature_completeness": 12.0,
      "duplicate_rate": 6.0,
      "timestamp_consistency": 6.0,
      "point_in_time_leakage_risk": 8.0,
      "data_freshness": 5.0,
      "provider_confidence": 5.0,
      "unresolved_entity_mapping_rate": 4.0,
      "correction_late_arriving_rate": 4.0
    },
    "thresholds": {
      "ready_score": 85.0,
      "partial_score": 60.0,
      "minimum_fixture_completeness": 0.99,
      "minimum_odds_completeness": 0.8,
      "minimum_feature_completeness": 0.95,
      "minimum_data_freshness": 0.95,
      "minimum_provider_confidence": 0.9,
      "maximum_unresolved_rate": 0.01,
      "maximum_duplicate_rate": 0.005,
      "maximum_timestamp_error_rate": 0.005,
      "maximum_leakage_risk": 0.0,
      "minimum_sample_size": 100
    },
    "hard_blockers": [
      "historical_odds_coverage_below_threshold",
      "required_model_features_unavailable",
      "data_freshness_failed"
    ],
    "reasons": [
      {
        "metric": "lineup_completeness",
        "value": 0.916031,
        "weight": 7.0,
        "points_lost": 0.59
      },
      {
        "metric": "odds_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "xg_completeness",
        "value": 0.0,
        "weight": 8.0,
        "points_lost": 8.0
      },
      {
        "metric": "feature_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "data_freshness",
        "value": 0.0,
        "weight": 5.0,
        "points_lost": 5.0
      },
      {
        "metric": "hard_blocker",
        "value": "historical_odds_coverage_below_threshold",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "required_model_features_unavailable",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "data_freshness_failed",
        "weight": 0.0,
        "points_lost": 0.0
      }
    ],
    "evidence": {
      "competition_name": "K League 1",
      "season_name": "2026",
      "event_count": 198,
      "completed_event_count": 120,
      "past_event_count": 131,
      "expected_missing_fixture_count": 0,
      "required_feature_names": [],
      "provider_validated": true,
      "latest_import_run_id": "fb59e97c-8eee-4414-a79d-553e0f9f43cd",
      "quality_report_id": "95a8dc80-c327-45ee-9840-661c42ec7d5f",
      "unresolved_entity_count": 0,
      "duplicate_excess_count": 0,
      "timestamp_error_count": 0,
      "leakage_error_count": 0,
      "late_or_corrected_count": 0,
      "production_data": true,
      "fixture_only_test_data": false
    },
    "source_quality_report_id": "95a8dc80-c327-45ee-9840-661c42ec7d5f"
  },
  {
    "id": "e31bec51-84f8-4c98-b131-a315e2da79e9",
    "competition_id": "949cdaa0-a420-4650-bd90-3474407d5654",
    "competition": "J1 League",
    "season_id": "6d7b2a81-a4a7-4833-a7cc-45d9e9fa9985",
    "season": "2026/2027",
    "provider": "sportmonks-football",
    "policy_version": "data-readiness-v1",
    "calculated_at": "2026-08-08 10:20:07.076191+00:00",
    "readiness_score": 49.0,
    "readiness_label": "NOT READY",
    "ready_for_training": false,
    "sample_size": 0,
    "metrics": {
      "fixture_completeness": 1.0,
      "player_completeness": 0.0,
      "lineup_completeness": 0.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 0.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 0.0,
      "data_freshness": 0.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 0.0,
      "correction_late_arriving_rate": 0.0
    },
    "metric_scores": {
      "fixture_completeness": 1.0,
      "player_completeness": 0.0,
      "lineup_completeness": 0.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 1.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 1.0,
      "data_freshness": 0.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 1.0,
      "correction_late_arriving_rate": 1.0
    },
    "weights": {
      "fixture_completeness": 12.0,
      "player_completeness": 7.0,
      "lineup_completeness": 7.0,
      "injury_completeness": 4.0,
      "odds_completeness": 12.0,
      "xg_completeness": 8.0,
      "feature_completeness": 12.0,
      "duplicate_rate": 6.0,
      "timestamp_consistency": 6.0,
      "point_in_time_leakage_risk": 8.0,
      "data_freshness": 5.0,
      "provider_confidence": 5.0,
      "unresolved_entity_mapping_rate": 4.0,
      "correction_late_arriving_rate": 4.0
    },
    "thresholds": {
      "ready_score": 85.0,
      "partial_score": 60.0,
      "minimum_fixture_completeness": 0.99,
      "minimum_odds_completeness": 0.8,
      "minimum_feature_completeness": 0.95,
      "minimum_data_freshness": 0.95,
      "minimum_provider_confidence": 0.9,
      "maximum_unresolved_rate": 0.01,
      "maximum_duplicate_rate": 0.005,
      "maximum_timestamp_error_rate": 0.005,
      "maximum_leakage_risk": 0.0,
      "minimum_sample_size": 100
    },
    "hard_blockers": [
      "historical_odds_coverage_below_threshold",
      "required_model_features_unavailable",
      "data_freshness_failed",
      "sample_size_below_configured_minimum"
    ],
    "reasons": [
      {
        "metric": "player_completeness",
        "value": 0.0,
        "weight": 7.0,
        "points_lost": 7.0
      },
      {
        "metric": "lineup_completeness",
        "value": 0.0,
        "weight": 7.0,
        "points_lost": 7.0
      },
      {
        "metric": "odds_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "xg_completeness",
        "value": 0.0,
        "weight": 8.0,
        "points_lost": 8.0
      },
      {
        "metric": "feature_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "data_freshness",
        "value": 0.0,
        "weight": 5.0,
        "points_lost": 5.0
      },
      {
        "metric": "hard_blocker",
        "value": "historical_odds_coverage_below_threshold",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "required_model_features_unavailable",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "data_freshness_failed",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "sample_size_below_configured_minimum",
        "weight": 0.0,
        "points_lost": 0.0
      }
    ],
    "evidence": {
      "competition_name": "J1 League",
      "season_name": "2026/2027",
      "event_count": 380,
      "completed_event_count": 0,
      "past_event_count": 8,
      "expected_missing_fixture_count": 0,
      "required_feature_names": [],
      "provider_validated": true,
      "latest_import_run_id": "fb59e97c-8eee-4414-a79d-553e0f9f43cd",
      "quality_report_id": "c64f6005-e007-42af-99e4-cced281ba7e6",
      "unresolved_entity_count": 0,
      "duplicate_excess_count": 0,
      "timestamp_error_count": 0,
      "leakage_error_count": 0,
      "late_or_corrected_count": 0,
      "production_data": true,
      "fixture_only_test_data": false
    },
    "source_quality_report_id": "c64f6005-e007-42af-99e4-cced281ba7e6"
  },
  {
    "id": "6519872b-d0ff-4756-92ec-be95ed848e9c",
    "competition_id": "3157e865-351e-45df-98f8-ec14b38523d5",
    "competition": "Ligue 1",
    "season_id": "be6f6cf5-ceac-4740-825f-dd795b346fe1",
    "season": "2026/2027",
    "provider": "sportmonks-football",
    "policy_version": "data-readiness-v1",
    "calculated_at": "2026-08-08 07:52:25.268738+00:00",
    "readiness_score": 49.0,
    "readiness_label": "NOT READY",
    "ready_for_training": false,
    "sample_size": 0,
    "metrics": {
      "fixture_completeness": 1.0,
      "player_completeness": 0.0,
      "lineup_completeness": 0.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 0.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 0.0,
      "data_freshness": 0.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 0.0,
      "correction_late_arriving_rate": 0.0
    },
    "metric_scores": {
      "fixture_completeness": 1.0,
      "player_completeness": 0.0,
      "lineup_completeness": 0.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 1.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 1.0,
      "data_freshness": 0.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 1.0,
      "correction_late_arriving_rate": 1.0
    },
    "weights": {
      "fixture_completeness": 12.0,
      "player_completeness": 7.0,
      "lineup_completeness": 7.0,
      "injury_completeness": 4.0,
      "odds_completeness": 12.0,
      "xg_completeness": 8.0,
      "feature_completeness": 12.0,
      "duplicate_rate": 6.0,
      "timestamp_consistency": 6.0,
      "point_in_time_leakage_risk": 8.0,
      "data_freshness": 5.0,
      "provider_confidence": 5.0,
      "unresolved_entity_mapping_rate": 4.0,
      "correction_late_arriving_rate": 4.0
    },
    "thresholds": {
      "ready_score": 85.0,
      "partial_score": 60.0,
      "minimum_fixture_completeness": 0.99,
      "minimum_odds_completeness": 0.8,
      "minimum_feature_completeness": 0.95,
      "minimum_data_freshness": 0.95,
      "minimum_provider_confidence": 0.9,
      "maximum_unresolved_rate": 0.01,
      "maximum_duplicate_rate": 0.005,
      "maximum_timestamp_error_rate": 0.005,
      "maximum_leakage_risk": 0.0,
      "minimum_sample_size": 100
    },
    "hard_blockers": [
      "historical_odds_coverage_below_threshold",
      "required_model_features_unavailable",
      "data_freshness_failed",
      "sample_size_below_configured_minimum"
    ],
    "reasons": [
      {
        "metric": "player_completeness",
        "value": 0.0,
        "weight": 7.0,
        "points_lost": 7.0
      },
      {
        "metric": "lineup_completeness",
        "value": 0.0,
        "weight": 7.0,
        "points_lost": 7.0
      },
      {
        "metric": "odds_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "xg_completeness",
        "value": 0.0,
        "weight": 8.0,
        "points_lost": 8.0
      },
      {
        "metric": "feature_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "data_freshness",
        "value": 0.0,
        "weight": 5.0,
        "points_lost": 5.0
      },
      {
        "metric": "hard_blocker",
        "value": "historical_odds_coverage_below_threshold",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "required_model_features_unavailable",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "data_freshness_failed",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "sample_size_below_configured_minimum",
        "weight": 0.0,
        "points_lost": 0.0
      }
    ],
    "evidence": {
      "competition_name": "Ligue 1",
      "season_name": "2026/2027",
      "event_count": 306,
      "completed_event_count": 0,
      "past_event_count": 0,
      "expected_missing_fixture_count": 0,
      "required_feature_names": [],
      "provider_validated": true,
      "latest_import_run_id": "fb59e97c-8eee-4414-a79d-553e0f9f43cd",
      "quality_report_id": "8512f936-1414-427f-927f-d1ef056b56e6",
      "unresolved_entity_count": 0,
      "duplicate_excess_count": 0,
      "timestamp_error_count": 0,
      "leakage_error_count": 0,
      "late_or_corrected_count": 0,
      "production_data": true,
      "fixture_only_test_data": false
    },
    "source_quality_report_id": "8512f936-1414-427f-927f-d1ef056b56e6"
  },
  {
    "id": "b59403ad-f43f-4e3f-8627-59c7f2c195e8",
    "competition_id": "94c99b4f-0aa2-47dd-84ee-b68a04f795ce",
    "competition": "Liga MX",
    "season_id": "a8d55156-9105-410d-a942-e480cad99fdd",
    "season": "2026/2027",
    "provider": "sportmonks-football",
    "policy_version": "data-readiness-v1",
    "calculated_at": "2026-08-08 07:52:24.950151+00:00",
    "readiness_score": 54.67,
    "readiness_label": "NOT READY",
    "ready_for_training": false,
    "sample_size": 18,
    "metrics": {
      "fixture_completeness": 0.5,
      "player_completeness": 1.0,
      "lineup_completeness": 0.666667,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 0.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 0.0,
      "data_freshness": 0.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 0.0,
      "correction_late_arriving_rate": 0.0
    },
    "metric_scores": {
      "fixture_completeness": 0.5,
      "player_completeness": 1.0,
      "lineup_completeness": 0.666667,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 1.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 1.0,
      "data_freshness": 0.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 1.0,
      "correction_late_arriving_rate": 1.0
    },
    "weights": {
      "fixture_completeness": 12.0,
      "player_completeness": 7.0,
      "lineup_completeness": 7.0,
      "injury_completeness": 4.0,
      "odds_completeness": 12.0,
      "xg_completeness": 8.0,
      "feature_completeness": 12.0,
      "duplicate_rate": 6.0,
      "timestamp_consistency": 6.0,
      "point_in_time_leakage_risk": 8.0,
      "data_freshness": 5.0,
      "provider_confidence": 5.0,
      "unresolved_entity_mapping_rate": 4.0,
      "correction_late_arriving_rate": 4.0
    },
    "thresholds": {
      "ready_score": 85.0,
      "partial_score": 60.0,
      "minimum_fixture_completeness": 0.99,
      "minimum_odds_completeness": 0.8,
      "minimum_feature_completeness": 0.95,
      "minimum_data_freshness": 0.95,
      "minimum_provider_confidence": 0.9,
      "maximum_unresolved_rate": 0.01,
      "maximum_duplicate_rate": 0.005,
      "maximum_timestamp_error_rate": 0.005,
      "maximum_leakage_risk": 0.0,
      "minimum_sample_size": 100
    },
    "hard_blockers": [
      "fixture_completeness_below_threshold",
      "historical_odds_coverage_below_threshold",
      "required_model_features_unavailable",
      "data_freshness_failed",
      "sample_size_below_configured_minimum"
    ],
    "reasons": [
      {
        "metric": "fixture_completeness",
        "value": 0.5,
        "weight": 12.0,
        "points_lost": 6.0
      },
      {
        "metric": "lineup_completeness",
        "value": 0.666667,
        "weight": 7.0,
        "points_lost": 2.33
      },
      {
        "metric": "odds_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "xg_completeness",
        "value": 0.0,
        "weight": 8.0,
        "points_lost": 8.0
      },
      {
        "metric": "feature_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "data_freshness",
        "value": 0.0,
        "weight": 5.0,
        "points_lost": 5.0
      },
      {
        "metric": "hard_blocker",
        "value": "fixture_completeness_below_threshold",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "historical_odds_coverage_below_threshold",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "required_model_features_unavailable",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "data_freshness_failed",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "sample_size_below_configured_minimum",
        "weight": 0.0,
        "points_lost": 0.0
      }
    ],
    "evidence": {
      "competition_name": "Liga MX",
      "season_name": "2026/2027",
      "event_count": 153,
      "completed_event_count": 18,
      "past_event_count": 27,
      "expected_missing_fixture_count": 153,
      "required_feature_names": [],
      "provider_validated": true,
      "latest_import_run_id": "fb59e97c-8eee-4414-a79d-553e0f9f43cd",
      "quality_report_id": "4c86ce5d-957d-42f9-b355-1fcb160e011d",
      "unresolved_entity_count": 0,
      "duplicate_excess_count": 0,
      "timestamp_error_count": 0,
      "leakage_error_count": 0,
      "late_or_corrected_count": 0,
      "production_data": true,
      "fixture_only_test_data": false
    },
    "source_quality_report_id": "4c86ce5d-957d-42f9-b355-1fcb160e011d"
  },
  {
    "id": "e0ffbc10-0e0d-4b1d-bfe1-26796143d8de",
    "competition_id": "84433983-dff1-4b9c-892b-1caad9743951",
    "competition": "Eredivisie",
    "season_id": "8574fb4b-4807-480a-8b8d-ca41f6ce9861",
    "season": "2026/2027",
    "provider": "sportmonks-football",
    "policy_version": "data-readiness-v1",
    "calculated_at": "2026-08-08 07:52:21.362366+00:00",
    "readiness_score": 49.0,
    "readiness_label": "NOT READY",
    "ready_for_training": false,
    "sample_size": 0,
    "metrics": {
      "fixture_completeness": 1.0,
      "player_completeness": 0.0,
      "lineup_completeness": 0.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 0.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 0.0,
      "data_freshness": 0.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 0.0,
      "correction_late_arriving_rate": 0.0
    },
    "metric_scores": {
      "fixture_completeness": 1.0,
      "player_completeness": 0.0,
      "lineup_completeness": 0.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 1.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 1.0,
      "data_freshness": 0.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 1.0,
      "correction_late_arriving_rate": 1.0
    },
    "weights": {
      "fixture_completeness": 12.0,
      "player_completeness": 7.0,
      "lineup_completeness": 7.0,
      "injury_completeness": 4.0,
      "odds_completeness": 12.0,
      "xg_completeness": 8.0,
      "feature_completeness": 12.0,
      "duplicate_rate": 6.0,
      "timestamp_consistency": 6.0,
      "point_in_time_leakage_risk": 8.0,
      "data_freshness": 5.0,
      "provider_confidence": 5.0,
      "unresolved_entity_mapping_rate": 4.0,
      "correction_late_arriving_rate": 4.0
    },
    "thresholds": {
      "ready_score": 85.0,
      "partial_score": 60.0,
      "minimum_fixture_completeness": 0.99,
      "minimum_odds_completeness": 0.8,
      "minimum_feature_completeness": 0.95,
      "minimum_data_freshness": 0.95,
      "minimum_provider_confidence": 0.9,
      "maximum_unresolved_rate": 0.01,
      "maximum_duplicate_rate": 0.005,
      "maximum_timestamp_error_rate": 0.005,
      "maximum_leakage_risk": 0.0,
      "minimum_sample_size": 100
    },
    "hard_blockers": [
      "historical_odds_coverage_below_threshold",
      "required_model_features_unavailable",
      "data_freshness_failed",
      "sample_size_below_configured_minimum"
    ],
    "reasons": [
      {
        "metric": "player_completeness",
        "value": 0.0,
        "weight": 7.0,
        "points_lost": 7.0
      },
      {
        "metric": "lineup_completeness",
        "value": 0.0,
        "weight": 7.0,
        "points_lost": 7.0
      },
      {
        "metric": "odds_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "xg_completeness",
        "value": 0.0,
        "weight": 8.0,
        "points_lost": 8.0
      },
      {
        "metric": "feature_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "data_freshness",
        "value": 0.0,
        "weight": 5.0,
        "points_lost": 5.0
      },
      {
        "metric": "hard_blocker",
        "value": "historical_odds_coverage_below_threshold",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "required_model_features_unavailable",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "data_freshness_failed",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "sample_size_below_configured_minimum",
        "weight": 0.0,
        "points_lost": 0.0
      }
    ],
    "evidence": {
      "competition_name": "Eredivisie",
      "season_name": "2026/2027",
      "event_count": 306,
      "completed_event_count": 0,
      "past_event_count": 1,
      "expected_missing_fixture_count": 0,
      "required_feature_names": [],
      "provider_validated": true,
      "latest_import_run_id": "fb59e97c-8eee-4414-a79d-553e0f9f43cd",
      "quality_report_id": "4011d8b1-6103-4578-a578-d6af2f98f7cf",
      "unresolved_entity_count": 0,
      "duplicate_excess_count": 0,
      "timestamp_error_count": 0,
      "leakage_error_count": 0,
      "late_or_corrected_count": 0,
      "production_data": true,
      "fixture_only_test_data": false
    },
    "source_quality_report_id": "4011d8b1-6103-4578-a578-d6af2f98f7cf"
  },
  {
    "id": "ca07ad22-6db2-4a87-a49d-5e92b31da1bb",
    "competition_id": "898c5cf8-1936-4ab4-9e9a-97054b882c62",
    "competition": "Premier League",
    "season_id": "e7d2da0e-7904-4dbe-84df-44ff988f9fe6",
    "season": "2026/2027",
    "provider": "sportmonks-football",
    "policy_version": "data-readiness-v1",
    "calculated_at": "2026-08-08 07:52:21.285795+00:00",
    "readiness_score": 49.0,
    "readiness_label": "NOT READY",
    "ready_for_training": false,
    "sample_size": 0,
    "metrics": {
      "fixture_completeness": 1.0,
      "player_completeness": 0.0,
      "lineup_completeness": 0.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 0.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 0.0,
      "data_freshness": 0.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 0.0,
      "correction_late_arriving_rate": 0.0
    },
    "metric_scores": {
      "fixture_completeness": 1.0,
      "player_completeness": 0.0,
      "lineup_completeness": 0.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 1.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 1.0,
      "data_freshness": 0.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 1.0,
      "correction_late_arriving_rate": 1.0
    },
    "weights": {
      "fixture_completeness": 12.0,
      "player_completeness": 7.0,
      "lineup_completeness": 7.0,
      "injury_completeness": 4.0,
      "odds_completeness": 12.0,
      "xg_completeness": 8.0,
      "feature_completeness": 12.0,
      "duplicate_rate": 6.0,
      "timestamp_consistency": 6.0,
      "point_in_time_leakage_risk": 8.0,
      "data_freshness": 5.0,
      "provider_confidence": 5.0,
      "unresolved_entity_mapping_rate": 4.0,
      "correction_late_arriving_rate": 4.0
    },
    "thresholds": {
      "ready_score": 85.0,
      "partial_score": 60.0,
      "minimum_fixture_completeness": 0.99,
      "minimum_odds_completeness": 0.8,
      "minimum_feature_completeness": 0.95,
      "minimum_data_freshness": 0.95,
      "minimum_provider_confidence": 0.9,
      "maximum_unresolved_rate": 0.01,
      "maximum_duplicate_rate": 0.005,
      "maximum_timestamp_error_rate": 0.005,
      "maximum_leakage_risk": 0.0,
      "minimum_sample_size": 100
    },
    "hard_blockers": [
      "historical_odds_coverage_below_threshold",
      "required_model_features_unavailable",
      "data_freshness_failed",
      "sample_size_below_configured_minimum"
    ],
    "reasons": [
      {
        "metric": "player_completeness",
        "value": 0.0,
        "weight": 7.0,
        "points_lost": 7.0
      },
      {
        "metric": "lineup_completeness",
        "value": 0.0,
        "weight": 7.0,
        "points_lost": 7.0
      },
      {
        "metric": "odds_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "xg_completeness",
        "value": 0.0,
        "weight": 8.0,
        "points_lost": 8.0
      },
      {
        "metric": "feature_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "data_freshness",
        "value": 0.0,
        "weight": 5.0,
        "points_lost": 5.0
      },
      {
        "metric": "hard_blocker",
        "value": "historical_odds_coverage_below_threshold",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "required_model_features_unavailable",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "data_freshness_failed",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "sample_size_below_configured_minimum",
        "weight": 0.0,
        "points_lost": 0.0
      }
    ],
    "evidence": {
      "competition_name": "Premier League",
      "season_name": "2026/2027",
      "event_count": 380,
      "completed_event_count": 0,
      "past_event_count": 0,
      "expected_missing_fixture_count": 0,
      "required_feature_names": [],
      "provider_validated": true,
      "latest_import_run_id": "fb59e97c-8eee-4414-a79d-553e0f9f43cd",
      "quality_report_id": "65e11e08-3eb2-49b1-b750-c734c8547053",
      "unresolved_entity_count": 0,
      "duplicate_excess_count": 0,
      "timestamp_error_count": 0,
      "leakage_error_count": 0,
      "late_or_corrected_count": 0,
      "production_data": true,
      "fixture_only_test_data": false
    },
    "source_quality_report_id": "65e11e08-3eb2-49b1-b750-c734c8547053"
  },
  {
    "id": "efc670c8-852b-4d1a-bf45-763f79d4668f",
    "competition_id": "d1cbbef8-bdf8-437d-b44b-cd5a5e876db3",
    "competition": "La Liga",
    "season_id": "f0bd9acc-cb0e-4556-853d-11c92f1a2479",
    "season": "2026/2027",
    "provider": "sportmonks-football",
    "policy_version": "data-readiness-v1",
    "calculated_at": "2026-08-08 07:52:16.772865+00:00",
    "readiness_score": 49.0,
    "readiness_label": "NOT READY",
    "ready_for_training": false,
    "sample_size": 0,
    "metrics": {
      "fixture_completeness": 1.0,
      "player_completeness": 0.0,
      "lineup_completeness": 0.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 0.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 0.0,
      "data_freshness": 0.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 0.0,
      "correction_late_arriving_rate": 0.0
    },
    "metric_scores": {
      "fixture_completeness": 1.0,
      "player_completeness": 0.0,
      "lineup_completeness": 0.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 1.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 1.0,
      "data_freshness": 0.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 1.0,
      "correction_late_arriving_rate": 1.0
    },
    "weights": {
      "fixture_completeness": 12.0,
      "player_completeness": 7.0,
      "lineup_completeness": 7.0,
      "injury_completeness": 4.0,
      "odds_completeness": 12.0,
      "xg_completeness": 8.0,
      "feature_completeness": 12.0,
      "duplicate_rate": 6.0,
      "timestamp_consistency": 6.0,
      "point_in_time_leakage_risk": 8.0,
      "data_freshness": 5.0,
      "provider_confidence": 5.0,
      "unresolved_entity_mapping_rate": 4.0,
      "correction_late_arriving_rate": 4.0
    },
    "thresholds": {
      "ready_score": 85.0,
      "partial_score": 60.0,
      "minimum_fixture_completeness": 0.99,
      "minimum_odds_completeness": 0.8,
      "minimum_feature_completeness": 0.95,
      "minimum_data_freshness": 0.95,
      "minimum_provider_confidence": 0.9,
      "maximum_unresolved_rate": 0.01,
      "maximum_duplicate_rate": 0.005,
      "maximum_timestamp_error_rate": 0.005,
      "maximum_leakage_risk": 0.0,
      "minimum_sample_size": 100
    },
    "hard_blockers": [
      "historical_odds_coverage_below_threshold",
      "required_model_features_unavailable",
      "data_freshness_failed",
      "sample_size_below_configured_minimum"
    ],
    "reasons": [
      {
        "metric": "player_completeness",
        "value": 0.0,
        "weight": 7.0,
        "points_lost": 7.0
      },
      {
        "metric": "lineup_completeness",
        "value": 0.0,
        "weight": 7.0,
        "points_lost": 7.0
      },
      {
        "metric": "odds_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "xg_completeness",
        "value": 0.0,
        "weight": 8.0,
        "points_lost": 8.0
      },
      {
        "metric": "feature_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "data_freshness",
        "value": 0.0,
        "weight": 5.0,
        "points_lost": 5.0
      },
      {
        "metric": "hard_blocker",
        "value": "historical_odds_coverage_below_threshold",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "required_model_features_unavailable",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "data_freshness_failed",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "sample_size_below_configured_minimum",
        "weight": 0.0,
        "points_lost": 0.0
      }
    ],
    "evidence": {
      "competition_name": "La Liga",
      "season_name": "2026/2027",
      "event_count": 380,
      "completed_event_count": 0,
      "past_event_count": 0,
      "expected_missing_fixture_count": 0,
      "required_feature_names": [],
      "provider_validated": true,
      "latest_import_run_id": "fb59e97c-8eee-4414-a79d-553e0f9f43cd",
      "quality_report_id": "a0a42aeb-5e86-47b1-9f8e-f017357d22e6",
      "unresolved_entity_count": 0,
      "duplicate_excess_count": 0,
      "timestamp_error_count": 0,
      "leakage_error_count": 0,
      "late_or_corrected_count": 0,
      "production_data": true,
      "fixture_only_test_data": false
    },
    "source_quality_report_id": "a0a42aeb-5e86-47b1-9f8e-f017357d22e6"
  },
  {
    "id": "346184fa-ed19-4ce4-af8a-6ef8bcc7f37b",
    "competition_id": "968116cf-dd3c-4a59-ad14-45a140305335",
    "competition": "Bundesliga",
    "season_id": "4d9972d4-1b69-48aa-95b8-06893a58d128",
    "season": "2026/2027",
    "provider": "sportmonks-football",
    "policy_version": "data-readiness-v1",
    "calculated_at": "2026-08-08 07:52:15.685051+00:00",
    "readiness_score": 49.0,
    "readiness_label": "NOT READY",
    "ready_for_training": false,
    "sample_size": 0,
    "metrics": {
      "fixture_completeness": 1.0,
      "player_completeness": 0.0,
      "lineup_completeness": 0.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 0.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 0.0,
      "data_freshness": 0.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 0.0,
      "correction_late_arriving_rate": 0.0
    },
    "metric_scores": {
      "fixture_completeness": 1.0,
      "player_completeness": 0.0,
      "lineup_completeness": 0.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 1.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 1.0,
      "data_freshness": 0.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 1.0,
      "correction_late_arriving_rate": 1.0
    },
    "weights": {
      "fixture_completeness": 12.0,
      "player_completeness": 7.0,
      "lineup_completeness": 7.0,
      "injury_completeness": 4.0,
      "odds_completeness": 12.0,
      "xg_completeness": 8.0,
      "feature_completeness": 12.0,
      "duplicate_rate": 6.0,
      "timestamp_consistency": 6.0,
      "point_in_time_leakage_risk": 8.0,
      "data_freshness": 5.0,
      "provider_confidence": 5.0,
      "unresolved_entity_mapping_rate": 4.0,
      "correction_late_arriving_rate": 4.0
    },
    "thresholds": {
      "ready_score": 85.0,
      "partial_score": 60.0,
      "minimum_fixture_completeness": 0.99,
      "minimum_odds_completeness": 0.8,
      "minimum_feature_completeness": 0.95,
      "minimum_data_freshness": 0.95,
      "minimum_provider_confidence": 0.9,
      "maximum_unresolved_rate": 0.01,
      "maximum_duplicate_rate": 0.005,
      "maximum_timestamp_error_rate": 0.005,
      "maximum_leakage_risk": 0.0,
      "minimum_sample_size": 100
    },
    "hard_blockers": [
      "historical_odds_coverage_below_threshold",
      "required_model_features_unavailable",
      "data_freshness_failed",
      "sample_size_below_configured_minimum"
    ],
    "reasons": [
      {
        "metric": "player_completeness",
        "value": 0.0,
        "weight": 7.0,
        "points_lost": 7.0
      },
      {
        "metric": "lineup_completeness",
        "value": 0.0,
        "weight": 7.0,
        "points_lost": 7.0
      },
      {
        "metric": "odds_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "xg_completeness",
        "value": 0.0,
        "weight": 8.0,
        "points_lost": 8.0
      },
      {
        "metric": "feature_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "data_freshness",
        "value": 0.0,
        "weight": 5.0,
        "points_lost": 5.0
      },
      {
        "metric": "hard_blocker",
        "value": "historical_odds_coverage_below_threshold",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "required_model_features_unavailable",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "data_freshness_failed",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "sample_size_below_configured_minimum",
        "weight": 0.0,
        "points_lost": 0.0
      }
    ],
    "evidence": {
      "competition_name": "Bundesliga",
      "season_name": "2026/2027",
      "event_count": 306,
      "completed_event_count": 0,
      "past_event_count": 0,
      "expected_missing_fixture_count": 0,
      "required_feature_names": [],
      "provider_validated": true,
      "latest_import_run_id": "fb59e97c-8eee-4414-a79d-553e0f9f43cd",
      "quality_report_id": "dc6bab74-60d7-41c1-bd80-b2dd0fde8fd0",
      "unresolved_entity_count": 0,
      "duplicate_excess_count": 0,
      "timestamp_error_count": 0,
      "leakage_error_count": 0,
      "late_or_corrected_count": 0,
      "production_data": true,
      "fixture_only_test_data": false
    },
    "source_quality_report_id": "dc6bab74-60d7-41c1-bd80-b2dd0fde8fd0"
  },
  {
    "id": "249089f3-0c16-474b-aa62-e376560365fa",
    "competition_id": "0e142394-d4c0-4ecd-a966-939ad62a6e9f",
    "competition": "Serie A",
    "season_id": "c2859f7e-4b0d-448c-b2dc-6df6ebadef78",
    "season": "2026/2027",
    "provider": "sportmonks-football",
    "policy_version": "data-readiness-v1",
    "calculated_at": "2026-08-08 07:52:11.335379+00:00",
    "readiness_score": 49.0,
    "readiness_label": "NOT READY",
    "ready_for_training": false,
    "sample_size": 0,
    "metrics": {
      "fixture_completeness": 1.0,
      "player_completeness": 0.0,
      "lineup_completeness": 0.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 0.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 0.0,
      "data_freshness": 0.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 0.0,
      "correction_late_arriving_rate": 0.0
    },
    "metric_scores": {
      "fixture_completeness": 1.0,
      "player_completeness": 0.0,
      "lineup_completeness": 0.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 1.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 1.0,
      "data_freshness": 0.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 1.0,
      "correction_late_arriving_rate": 1.0
    },
    "weights": {
      "fixture_completeness": 12.0,
      "player_completeness": 7.0,
      "lineup_completeness": 7.0,
      "injury_completeness": 4.0,
      "odds_completeness": 12.0,
      "xg_completeness": 8.0,
      "feature_completeness": 12.0,
      "duplicate_rate": 6.0,
      "timestamp_consistency": 6.0,
      "point_in_time_leakage_risk": 8.0,
      "data_freshness": 5.0,
      "provider_confidence": 5.0,
      "unresolved_entity_mapping_rate": 4.0,
      "correction_late_arriving_rate": 4.0
    },
    "thresholds": {
      "ready_score": 85.0,
      "partial_score": 60.0,
      "minimum_fixture_completeness": 0.99,
      "minimum_odds_completeness": 0.8,
      "minimum_feature_completeness": 0.95,
      "minimum_data_freshness": 0.95,
      "minimum_provider_confidence": 0.9,
      "maximum_unresolved_rate": 0.01,
      "maximum_duplicate_rate": 0.005,
      "maximum_timestamp_error_rate": 0.005,
      "maximum_leakage_risk": 0.0,
      "minimum_sample_size": 100
    },
    "hard_blockers": [
      "historical_odds_coverage_below_threshold",
      "required_model_features_unavailable",
      "data_freshness_failed",
      "sample_size_below_configured_minimum"
    ],
    "reasons": [
      {
        "metric": "player_completeness",
        "value": 0.0,
        "weight": 7.0,
        "points_lost": 7.0
      },
      {
        "metric": "lineup_completeness",
        "value": 0.0,
        "weight": 7.0,
        "points_lost": 7.0
      },
      {
        "metric": "odds_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "xg_completeness",
        "value": 0.0,
        "weight": 8.0,
        "points_lost": 8.0
      },
      {
        "metric": "feature_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "data_freshness",
        "value": 0.0,
        "weight": 5.0,
        "points_lost": 5.0
      },
      {
        "metric": "hard_blocker",
        "value": "historical_odds_coverage_below_threshold",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "required_model_features_unavailable",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "data_freshness_failed",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "sample_size_below_configured_minimum",
        "weight": 0.0,
        "points_lost": 0.0
      }
    ],
    "evidence": {
      "competition_name": "Serie A",
      "season_name": "2026/2027",
      "event_count": 380,
      "completed_event_count": 0,
      "past_event_count": 0,
      "expected_missing_fixture_count": 0,
      "required_feature_names": [],
      "provider_validated": true,
      "latest_import_run_id": "fb59e97c-8eee-4414-a79d-553e0f9f43cd",
      "quality_report_id": "0cca2468-003c-47bd-9997-267b51d98fea",
      "unresolved_entity_count": 0,
      "duplicate_excess_count": 0,
      "timestamp_error_count": 0,
      "leakage_error_count": 0,
      "late_or_corrected_count": 0,
      "production_data": true,
      "fixture_only_test_data": false
    },
    "source_quality_report_id": "0cca2468-003c-47bd-9997-267b51d98fea"
  },
  {
    "id": "932f52c4-3fda-46ae-9908-28388fbdad33",
    "competition_id": "84433983-dff1-4b9c-892b-1caad9743951",
    "competition": "Eredivisie",
    "season_id": "5da751da-e491-4513-98cd-5908edfd3ee1",
    "season": "2025/2026",
    "provider": "sportmonks-football",
    "policy_version": "data-readiness-v1",
    "calculated_at": "2026-08-01 10:20:25.733306+00:00",
    "readiness_score": 68.0,
    "readiness_label": "PARTIALLY READY",
    "ready_for_training": false,
    "sample_size": 309,
    "metrics": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 0.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 0.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 0.0,
      "correction_late_arriving_rate": 0.0
    },
    "metric_scores": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 1.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 1.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 1.0,
      "correction_late_arriving_rate": 1.0
    },
    "weights": {
      "fixture_completeness": 12.0,
      "player_completeness": 7.0,
      "lineup_completeness": 7.0,
      "injury_completeness": 4.0,
      "odds_completeness": 12.0,
      "xg_completeness": 8.0,
      "feature_completeness": 12.0,
      "duplicate_rate": 6.0,
      "timestamp_consistency": 6.0,
      "point_in_time_leakage_risk": 8.0,
      "data_freshness": 5.0,
      "provider_confidence": 5.0,
      "unresolved_entity_mapping_rate": 4.0,
      "correction_late_arriving_rate": 4.0
    },
    "thresholds": {
      "ready_score": 85.0,
      "partial_score": 60.0,
      "minimum_fixture_completeness": 0.99,
      "minimum_odds_completeness": 0.8,
      "minimum_feature_completeness": 0.95,
      "minimum_data_freshness": 0.95,
      "minimum_provider_confidence": 0.9,
      "maximum_unresolved_rate": 0.01,
      "maximum_duplicate_rate": 0.005,
      "maximum_timestamp_error_rate": 0.005,
      "maximum_leakage_risk": 0.0,
      "minimum_sample_size": 100
    },
    "hard_blockers": [
      "historical_odds_coverage_below_threshold",
      "required_model_features_unavailable"
    ],
    "reasons": [
      {
        "metric": "odds_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "xg_completeness",
        "value": 0.0,
        "weight": 8.0,
        "points_lost": 8.0
      },
      {
        "metric": "feature_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "hard_blocker",
        "value": "historical_odds_coverage_below_threshold",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "required_model_features_unavailable",
        "weight": 0.0,
        "points_lost": 0.0
      }
    ],
    "evidence": {
      "competition_name": "Eredivisie",
      "season_name": "2025/2026",
      "event_count": 309,
      "completed_event_count": 309,
      "past_event_count": 309,
      "expected_missing_fixture_count": 0,
      "required_feature_names": [],
      "provider_validated": true,
      "latest_import_run_id": "fb59e97c-8eee-4414-a79d-553e0f9f43cd",
      "quality_report_id": "d2e50722-4912-488e-aa08-62e081fd6812",
      "unresolved_entity_count": 0,
      "duplicate_excess_count": 0,
      "timestamp_error_count": 0,
      "leakage_error_count": 0,
      "late_or_corrected_count": 0,
      "production_data": true,
      "fixture_only_test_data": false
    },
    "source_quality_report_id": "d2e50722-4912-488e-aa08-62e081fd6812"
  },
  {
    "id": "aa080335-14db-4d7e-9b68-8d9e087e0974",
    "competition_id": "94c99b4f-0aa2-47dd-84ee-b68a04f795ce",
    "competition": "Liga MX",
    "season_id": "d967d491-644b-4de1-a0e3-9c0834cc0cd8",
    "season": "2025/2026",
    "provider": "sportmonks-football",
    "policy_version": "data-readiness-v1",
    "calculated_at": "2026-08-01 10:20:23.244735+00:00",
    "readiness_score": 68.0,
    "readiness_label": "PARTIALLY READY",
    "ready_for_training": false,
    "sample_size": 337,
    "metrics": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 0.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 0.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 0.0,
      "correction_late_arriving_rate": 0.0
    },
    "metric_scores": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 1.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 1.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 1.0,
      "correction_late_arriving_rate": 1.0
    },
    "weights": {
      "fixture_completeness": 12.0,
      "player_completeness": 7.0,
      "lineup_completeness": 7.0,
      "injury_completeness": 4.0,
      "odds_completeness": 12.0,
      "xg_completeness": 8.0,
      "feature_completeness": 12.0,
      "duplicate_rate": 6.0,
      "timestamp_consistency": 6.0,
      "point_in_time_leakage_risk": 8.0,
      "data_freshness": 5.0,
      "provider_confidence": 5.0,
      "unresolved_entity_mapping_rate": 4.0,
      "correction_late_arriving_rate": 4.0
    },
    "thresholds": {
      "ready_score": 85.0,
      "partial_score": 60.0,
      "minimum_fixture_completeness": 0.99,
      "minimum_odds_completeness": 0.8,
      "minimum_feature_completeness": 0.95,
      "minimum_data_freshness": 0.95,
      "minimum_provider_confidence": 0.9,
      "maximum_unresolved_rate": 0.01,
      "maximum_duplicate_rate": 0.005,
      "maximum_timestamp_error_rate": 0.005,
      "maximum_leakage_risk": 0.0,
      "minimum_sample_size": 100
    },
    "hard_blockers": [
      "historical_odds_coverage_below_threshold",
      "required_model_features_unavailable"
    ],
    "reasons": [
      {
        "metric": "odds_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "xg_completeness",
        "value": 0.0,
        "weight": 8.0,
        "points_lost": 8.0
      },
      {
        "metric": "feature_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "hard_blocker",
        "value": "historical_odds_coverage_below_threshold",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "required_model_features_unavailable",
        "weight": 0.0,
        "points_lost": 0.0
      }
    ],
    "evidence": {
      "competition_name": "Liga MX",
      "season_name": "2025/2026",
      "event_count": 337,
      "completed_event_count": 337,
      "past_event_count": 337,
      "expected_missing_fixture_count": 0,
      "required_feature_names": [],
      "provider_validated": true,
      "latest_import_run_id": "fb59e97c-8eee-4414-a79d-553e0f9f43cd",
      "quality_report_id": "424ca220-542a-4365-b4ba-35a0b9a5e121",
      "unresolved_entity_count": 0,
      "duplicate_excess_count": 0,
      "timestamp_error_count": 0,
      "leakage_error_count": 0,
      "late_or_corrected_count": 0,
      "production_data": true,
      "fixture_only_test_data": false
    },
    "source_quality_report_id": "424ca220-542a-4365-b4ba-35a0b9a5e121"
  },
  {
    "id": "41dbb90a-0333-42e9-8c00-8a8df3430ff8",
    "competition_id": "968116cf-dd3c-4a59-ad14-45a140305335",
    "competition": "Bundesliga",
    "season_id": "9d37812f-319b-41b7-a286-8b37ffdb7374",
    "season": "2025/2026",
    "provider": "sportmonks-football",
    "policy_version": "data-readiness-v1",
    "calculated_at": "2026-08-01 10:20:22.884512+00:00",
    "readiness_score": 68.0,
    "readiness_label": "PARTIALLY READY",
    "ready_for_training": false,
    "sample_size": 306,
    "metrics": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 0.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 0.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 0.0,
      "correction_late_arriving_rate": 0.0
    },
    "metric_scores": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 1.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 1.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 1.0,
      "correction_late_arriving_rate": 1.0
    },
    "weights": {
      "fixture_completeness": 12.0,
      "player_completeness": 7.0,
      "lineup_completeness": 7.0,
      "injury_completeness": 4.0,
      "odds_completeness": 12.0,
      "xg_completeness": 8.0,
      "feature_completeness": 12.0,
      "duplicate_rate": 6.0,
      "timestamp_consistency": 6.0,
      "point_in_time_leakage_risk": 8.0,
      "data_freshness": 5.0,
      "provider_confidence": 5.0,
      "unresolved_entity_mapping_rate": 4.0,
      "correction_late_arriving_rate": 4.0
    },
    "thresholds": {
      "ready_score": 85.0,
      "partial_score": 60.0,
      "minimum_fixture_completeness": 0.99,
      "minimum_odds_completeness": 0.8,
      "minimum_feature_completeness": 0.95,
      "minimum_data_freshness": 0.95,
      "minimum_provider_confidence": 0.9,
      "maximum_unresolved_rate": 0.01,
      "maximum_duplicate_rate": 0.005,
      "maximum_timestamp_error_rate": 0.005,
      "maximum_leakage_risk": 0.0,
      "minimum_sample_size": 100
    },
    "hard_blockers": [
      "historical_odds_coverage_below_threshold",
      "required_model_features_unavailable"
    ],
    "reasons": [
      {
        "metric": "odds_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "xg_completeness",
        "value": 0.0,
        "weight": 8.0,
        "points_lost": 8.0
      },
      {
        "metric": "feature_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "hard_blocker",
        "value": "historical_odds_coverage_below_threshold",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "required_model_features_unavailable",
        "weight": 0.0,
        "points_lost": 0.0
      }
    ],
    "evidence": {
      "competition_name": "Bundesliga",
      "season_name": "2025/2026",
      "event_count": 306,
      "completed_event_count": 306,
      "past_event_count": 306,
      "expected_missing_fixture_count": 0,
      "required_feature_names": [],
      "provider_validated": true,
      "latest_import_run_id": "fb59e97c-8eee-4414-a79d-553e0f9f43cd",
      "quality_report_id": "087b759b-c7bc-4268-8169-b7f9ae53c82f",
      "unresolved_entity_count": 0,
      "duplicate_excess_count": 0,
      "timestamp_error_count": 0,
      "leakage_error_count": 0,
      "late_or_corrected_count": 0,
      "production_data": true,
      "fixture_only_test_data": false
    },
    "source_quality_report_id": "087b759b-c7bc-4268-8169-b7f9ae53c82f"
  },
  {
    "id": "1f4c4728-c487-4546-ba1c-d796f1e5b867",
    "competition_id": "898c5cf8-1936-4ab4-9e9a-97054b882c62",
    "competition": "Premier League",
    "season_id": "70cfdb05-c397-417c-9dc8-4ac7b1a90461",
    "season": "2025/2026",
    "provider": "sportmonks-football",
    "policy_version": "data-readiness-v1",
    "calculated_at": "2026-08-01 10:20:22.083792+00:00",
    "readiness_score": 76.0,
    "readiness_label": "PARTIALLY READY",
    "ready_for_training": false,
    "sample_size": 380,
    "metrics": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 1.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 0.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 0.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 0.0,
      "correction_late_arriving_rate": 0.0
    },
    "metric_scores": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 1.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 1.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 1.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 1.0,
      "correction_late_arriving_rate": 1.0
    },
    "weights": {
      "fixture_completeness": 12.0,
      "player_completeness": 7.0,
      "lineup_completeness": 7.0,
      "injury_completeness": 4.0,
      "odds_completeness": 12.0,
      "xg_completeness": 8.0,
      "feature_completeness": 12.0,
      "duplicate_rate": 6.0,
      "timestamp_consistency": 6.0,
      "point_in_time_leakage_risk": 8.0,
      "data_freshness": 5.0,
      "provider_confidence": 5.0,
      "unresolved_entity_mapping_rate": 4.0,
      "correction_late_arriving_rate": 4.0
    },
    "thresholds": {
      "ready_score": 85.0,
      "partial_score": 60.0,
      "minimum_fixture_completeness": 0.99,
      "minimum_odds_completeness": 0.8,
      "minimum_feature_completeness": 0.95,
      "minimum_data_freshness": 0.95,
      "minimum_provider_confidence": 0.9,
      "maximum_unresolved_rate": 0.01,
      "maximum_duplicate_rate": 0.005,
      "maximum_timestamp_error_rate": 0.005,
      "maximum_leakage_risk": 0.0,
      "minimum_sample_size": 100
    },
    "hard_blockers": [
      "historical_odds_coverage_below_threshold",
      "required_model_features_unavailable"
    ],
    "reasons": [
      {
        "metric": "odds_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "feature_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "hard_blocker",
        "value": "historical_odds_coverage_below_threshold",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "required_model_features_unavailable",
        "weight": 0.0,
        "points_lost": 0.0
      }
    ],
    "evidence": {
      "competition_name": "Premier League",
      "season_name": "2025/2026",
      "event_count": 380,
      "completed_event_count": 380,
      "past_event_count": 380,
      "expected_missing_fixture_count": 0,
      "required_feature_names": [],
      "provider_validated": true,
      "latest_import_run_id": "fb59e97c-8eee-4414-a79d-553e0f9f43cd",
      "quality_report_id": "5d1fb606-8c66-4611-be41-a0be7113196a",
      "unresolved_entity_count": 0,
      "duplicate_excess_count": 0,
      "timestamp_error_count": 0,
      "leakage_error_count": 0,
      "late_or_corrected_count": 0,
      "production_data": true,
      "fixture_only_test_data": false
    },
    "source_quality_report_id": "5d1fb606-8c66-4611-be41-a0be7113196a"
  },
  {
    "id": "5e63e87f-7dbb-48b8-9d47-0bdfc7711d27",
    "competition_id": "d1cbbef8-bdf8-437d-b44b-cd5a5e876db3",
    "competition": "La Liga",
    "season_id": "5661cc64-f3f0-425f-8887-ffa433d8061b",
    "season": "2025/2026",
    "provider": "sportmonks-football",
    "policy_version": "data-readiness-v1",
    "calculated_at": "2026-08-01 10:20:20.928278+00:00",
    "readiness_score": 68.0,
    "readiness_label": "PARTIALLY READY",
    "ready_for_training": false,
    "sample_size": 380,
    "metrics": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 0.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 0.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 0.0,
      "correction_late_arriving_rate": 0.0
    },
    "metric_scores": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 1.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 1.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 1.0,
      "correction_late_arriving_rate": 1.0
    },
    "weights": {
      "fixture_completeness": 12.0,
      "player_completeness": 7.0,
      "lineup_completeness": 7.0,
      "injury_completeness": 4.0,
      "odds_completeness": 12.0,
      "xg_completeness": 8.0,
      "feature_completeness": 12.0,
      "duplicate_rate": 6.0,
      "timestamp_consistency": 6.0,
      "point_in_time_leakage_risk": 8.0,
      "data_freshness": 5.0,
      "provider_confidence": 5.0,
      "unresolved_entity_mapping_rate": 4.0,
      "correction_late_arriving_rate": 4.0
    },
    "thresholds": {
      "ready_score": 85.0,
      "partial_score": 60.0,
      "minimum_fixture_completeness": 0.99,
      "minimum_odds_completeness": 0.8,
      "minimum_feature_completeness": 0.95,
      "minimum_data_freshness": 0.95,
      "minimum_provider_confidence": 0.9,
      "maximum_unresolved_rate": 0.01,
      "maximum_duplicate_rate": 0.005,
      "maximum_timestamp_error_rate": 0.005,
      "maximum_leakage_risk": 0.0,
      "minimum_sample_size": 100
    },
    "hard_blockers": [
      "historical_odds_coverage_below_threshold",
      "required_model_features_unavailable"
    ],
    "reasons": [
      {
        "metric": "odds_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "xg_completeness",
        "value": 0.0,
        "weight": 8.0,
        "points_lost": 8.0
      },
      {
        "metric": "feature_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "hard_blocker",
        "value": "historical_odds_coverage_below_threshold",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "required_model_features_unavailable",
        "weight": 0.0,
        "points_lost": 0.0
      }
    ],
    "evidence": {
      "competition_name": "La Liga",
      "season_name": "2025/2026",
      "event_count": 380,
      "completed_event_count": 380,
      "past_event_count": 380,
      "expected_missing_fixture_count": 0,
      "required_feature_names": [],
      "provider_validated": true,
      "latest_import_run_id": "fb59e97c-8eee-4414-a79d-553e0f9f43cd",
      "quality_report_id": "9b2a32d1-453a-496b-b5d1-ffbefbd90343",
      "unresolved_entity_count": 0,
      "duplicate_excess_count": 0,
      "timestamp_error_count": 0,
      "leakage_error_count": 0,
      "late_or_corrected_count": 0,
      "production_data": true,
      "fixture_only_test_data": false
    },
    "source_quality_report_id": "9b2a32d1-453a-496b-b5d1-ffbefbd90343"
  },
  {
    "id": "1f2b6600-dd2f-4e35-8a59-427a32c33e88",
    "competition_id": "3157e865-351e-45df-98f8-ec14b38523d5",
    "competition": "Ligue 1",
    "season_id": "3d4d1bd7-c0cc-491e-839c-6d25cd592233",
    "season": "2025/2026",
    "provider": "sportmonks-football",
    "policy_version": "data-readiness-v1",
    "calculated_at": "2026-08-01 10:20:20.470474+00:00",
    "readiness_score": 68.0,
    "readiness_label": "PARTIALLY READY",
    "ready_for_training": false,
    "sample_size": 305,
    "metrics": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 0.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 0.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 0.0,
      "correction_late_arriving_rate": 0.0
    },
    "metric_scores": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 1.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 1.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 1.0,
      "correction_late_arriving_rate": 1.0
    },
    "weights": {
      "fixture_completeness": 12.0,
      "player_completeness": 7.0,
      "lineup_completeness": 7.0,
      "injury_completeness": 4.0,
      "odds_completeness": 12.0,
      "xg_completeness": 8.0,
      "feature_completeness": 12.0,
      "duplicate_rate": 6.0,
      "timestamp_consistency": 6.0,
      "point_in_time_leakage_risk": 8.0,
      "data_freshness": 5.0,
      "provider_confidence": 5.0,
      "unresolved_entity_mapping_rate": 4.0,
      "correction_late_arriving_rate": 4.0
    },
    "thresholds": {
      "ready_score": 85.0,
      "partial_score": 60.0,
      "minimum_fixture_completeness": 0.99,
      "minimum_odds_completeness": 0.8,
      "minimum_feature_completeness": 0.95,
      "minimum_data_freshness": 0.95,
      "minimum_provider_confidence": 0.9,
      "maximum_unresolved_rate": 0.01,
      "maximum_duplicate_rate": 0.005,
      "maximum_timestamp_error_rate": 0.005,
      "maximum_leakage_risk": 0.0,
      "minimum_sample_size": 100
    },
    "hard_blockers": [
      "historical_odds_coverage_below_threshold",
      "required_model_features_unavailable"
    ],
    "reasons": [
      {
        "metric": "odds_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "xg_completeness",
        "value": 0.0,
        "weight": 8.0,
        "points_lost": 8.0
      },
      {
        "metric": "feature_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "hard_blocker",
        "value": "historical_odds_coverage_below_threshold",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "required_model_features_unavailable",
        "weight": 0.0,
        "points_lost": 0.0
      }
    ],
    "evidence": {
      "competition_name": "Ligue 1",
      "season_name": "2025/2026",
      "event_count": 306,
      "completed_event_count": 305,
      "past_event_count": 306,
      "expected_missing_fixture_count": 0,
      "required_feature_names": [],
      "provider_validated": true,
      "latest_import_run_id": "fb59e97c-8eee-4414-a79d-553e0f9f43cd",
      "quality_report_id": "05bee9b1-75a4-452c-b153-2dcd609e798d",
      "unresolved_entity_count": 0,
      "duplicate_excess_count": 0,
      "timestamp_error_count": 0,
      "leakage_error_count": 0,
      "late_or_corrected_count": 0,
      "production_data": true,
      "fixture_only_test_data": false
    },
    "source_quality_report_id": "05bee9b1-75a4-452c-b153-2dcd609e798d"
  },
  {
    "id": "4be06b5b-59f7-47cb-b342-9a51301c99be",
    "competition_id": "0e142394-d4c0-4ecd-a966-939ad62a6e9f",
    "competition": "Serie A",
    "season_id": "0816dfe8-4ce2-4375-9fa4-e56c3b92c739",
    "season": "2025/2026",
    "provider": "sportmonks-football",
    "policy_version": "data-readiness-v1",
    "calculated_at": "2026-08-01 10:20:20.036773+00:00",
    "readiness_score": 68.0,
    "readiness_label": "PARTIALLY READY",
    "ready_for_training": false,
    "sample_size": 380,
    "metrics": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 0.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 0.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 0.0,
      "correction_late_arriving_rate": 0.0
    },
    "metric_scores": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 1.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 1.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 1.0,
      "correction_late_arriving_rate": 1.0
    },
    "weights": {
      "fixture_completeness": 12.0,
      "player_completeness": 7.0,
      "lineup_completeness": 7.0,
      "injury_completeness": 4.0,
      "odds_completeness": 12.0,
      "xg_completeness": 8.0,
      "feature_completeness": 12.0,
      "duplicate_rate": 6.0,
      "timestamp_consistency": 6.0,
      "point_in_time_leakage_risk": 8.0,
      "data_freshness": 5.0,
      "provider_confidence": 5.0,
      "unresolved_entity_mapping_rate": 4.0,
      "correction_late_arriving_rate": 4.0
    },
    "thresholds": {
      "ready_score": 85.0,
      "partial_score": 60.0,
      "minimum_fixture_completeness": 0.99,
      "minimum_odds_completeness": 0.8,
      "minimum_feature_completeness": 0.95,
      "minimum_data_freshness": 0.95,
      "minimum_provider_confidence": 0.9,
      "maximum_unresolved_rate": 0.01,
      "maximum_duplicate_rate": 0.005,
      "maximum_timestamp_error_rate": 0.005,
      "maximum_leakage_risk": 0.0,
      "minimum_sample_size": 100
    },
    "hard_blockers": [
      "historical_odds_coverage_below_threshold",
      "required_model_features_unavailable"
    ],
    "reasons": [
      {
        "metric": "odds_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "xg_completeness",
        "value": 0.0,
        "weight": 8.0,
        "points_lost": 8.0
      },
      {
        "metric": "feature_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "hard_blocker",
        "value": "historical_odds_coverage_below_threshold",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "required_model_features_unavailable",
        "weight": 0.0,
        "points_lost": 0.0
      }
    ],
    "evidence": {
      "competition_name": "Serie A",
      "season_name": "2025/2026",
      "event_count": 380,
      "completed_event_count": 380,
      "past_event_count": 380,
      "expected_missing_fixture_count": 0,
      "required_feature_names": [],
      "provider_validated": true,
      "latest_import_run_id": "fb59e97c-8eee-4414-a79d-553e0f9f43cd",
      "quality_report_id": "9766b106-736a-473e-89f0-9cbad0d904ac",
      "unresolved_entity_count": 0,
      "duplicate_excess_count": 0,
      "timestamp_error_count": 0,
      "leakage_error_count": 0,
      "late_or_corrected_count": 0,
      "production_data": true,
      "fixture_only_test_data": false
    },
    "source_quality_report_id": "9766b106-736a-473e-89f0-9cbad0d904ac"
  },
  {
    "id": "da3b1168-aaa4-4065-946b-c268e69f9658",
    "competition_id": "3157e865-351e-45df-98f8-ec14b38523d5",
    "competition": "Ligue 1",
    "season_id": "730e2656-13de-449d-8192-569d4d9eeb30",
    "season": "2024/2025",
    "provider": "sportmonks-football",
    "policy_version": "data-readiness-v1",
    "calculated_at": "2026-08-01 07:21:32.034946+00:00",
    "readiness_score": 68.0,
    "readiness_label": "PARTIALLY READY",
    "ready_for_training": false,
    "sample_size": 305,
    "metrics": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 0.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 0.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 0.0,
      "correction_late_arriving_rate": 0.0
    },
    "metric_scores": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 1.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 1.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 1.0,
      "correction_late_arriving_rate": 1.0
    },
    "weights": {
      "fixture_completeness": 12.0,
      "player_completeness": 7.0,
      "lineup_completeness": 7.0,
      "injury_completeness": 4.0,
      "odds_completeness": 12.0,
      "xg_completeness": 8.0,
      "feature_completeness": 12.0,
      "duplicate_rate": 6.0,
      "timestamp_consistency": 6.0,
      "point_in_time_leakage_risk": 8.0,
      "data_freshness": 5.0,
      "provider_confidence": 5.0,
      "unresolved_entity_mapping_rate": 4.0,
      "correction_late_arriving_rate": 4.0
    },
    "thresholds": {
      "ready_score": 85.0,
      "partial_score": 60.0,
      "minimum_fixture_completeness": 0.99,
      "minimum_odds_completeness": 0.8,
      "minimum_feature_completeness": 0.95,
      "minimum_data_freshness": 0.95,
      "minimum_provider_confidence": 0.9,
      "maximum_unresolved_rate": 0.01,
      "maximum_duplicate_rate": 0.005,
      "maximum_timestamp_error_rate": 0.005,
      "maximum_leakage_risk": 0.0,
      "minimum_sample_size": 100
    },
    "hard_blockers": [
      "historical_odds_coverage_below_threshold",
      "required_model_features_unavailable"
    ],
    "reasons": [
      {
        "metric": "odds_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "xg_completeness",
        "value": 0.0,
        "weight": 8.0,
        "points_lost": 8.0
      },
      {
        "metric": "feature_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "hard_blocker",
        "value": "historical_odds_coverage_below_threshold",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "required_model_features_unavailable",
        "weight": 0.0,
        "points_lost": 0.0
      }
    ],
    "evidence": {
      "competition_name": "Ligue 1",
      "season_name": "2024/2025",
      "event_count": 306,
      "completed_event_count": 305,
      "past_event_count": 306,
      "expected_missing_fixture_count": 0,
      "required_feature_names": [],
      "provider_validated": true,
      "latest_import_run_id": "a5aab886-7c17-468d-91de-1e0e915924c9",
      "quality_report_id": "fbca1d6e-59d4-4d30-a0d3-b930fea5468e",
      "unresolved_entity_count": 0,
      "duplicate_excess_count": 0,
      "timestamp_error_count": 0,
      "leakage_error_count": 0,
      "late_or_corrected_count": 0,
      "production_data": true,
      "fixture_only_test_data": false
    },
    "source_quality_report_id": "fbca1d6e-59d4-4d30-a0d3-b930fea5468e"
  },
  {
    "id": "44953416-32ed-4dd4-90c5-36690e0c58f3",
    "competition_id": "84433983-dff1-4b9c-892b-1caad9743951",
    "competition": "Eredivisie",
    "season_id": "befe02ae-e993-45f7-a28c-74bed31477f2",
    "season": "2024/2025",
    "provider": "sportmonks-football",
    "policy_version": "data-readiness-v1",
    "calculated_at": "2026-08-01 07:21:31.613809+00:00",
    "readiness_score": 68.0,
    "readiness_label": "PARTIALLY READY",
    "ready_for_training": false,
    "sample_size": 309,
    "metrics": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 0.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 0.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 0.0,
      "correction_late_arriving_rate": 0.0
    },
    "metric_scores": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 1.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 1.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 1.0,
      "correction_late_arriving_rate": 1.0
    },
    "weights": {
      "fixture_completeness": 12.0,
      "player_completeness": 7.0,
      "lineup_completeness": 7.0,
      "injury_completeness": 4.0,
      "odds_completeness": 12.0,
      "xg_completeness": 8.0,
      "feature_completeness": 12.0,
      "duplicate_rate": 6.0,
      "timestamp_consistency": 6.0,
      "point_in_time_leakage_risk": 8.0,
      "data_freshness": 5.0,
      "provider_confidence": 5.0,
      "unresolved_entity_mapping_rate": 4.0,
      "correction_late_arriving_rate": 4.0
    },
    "thresholds": {
      "ready_score": 85.0,
      "partial_score": 60.0,
      "minimum_fixture_completeness": 0.99,
      "minimum_odds_completeness": 0.8,
      "minimum_feature_completeness": 0.95,
      "minimum_data_freshness": 0.95,
      "minimum_provider_confidence": 0.9,
      "maximum_unresolved_rate": 0.01,
      "maximum_duplicate_rate": 0.005,
      "maximum_timestamp_error_rate": 0.005,
      "maximum_leakage_risk": 0.0,
      "minimum_sample_size": 100
    },
    "hard_blockers": [
      "historical_odds_coverage_below_threshold",
      "required_model_features_unavailable"
    ],
    "reasons": [
      {
        "metric": "odds_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "xg_completeness",
        "value": 0.0,
        "weight": 8.0,
        "points_lost": 8.0
      },
      {
        "metric": "feature_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "hard_blocker",
        "value": "historical_odds_coverage_below_threshold",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "required_model_features_unavailable",
        "weight": 0.0,
        "points_lost": 0.0
      }
    ],
    "evidence": {
      "competition_name": "Eredivisie",
      "season_name": "2024/2025",
      "event_count": 309,
      "completed_event_count": 309,
      "past_event_count": 309,
      "expected_missing_fixture_count": 0,
      "required_feature_names": [],
      "provider_validated": true,
      "latest_import_run_id": "a5aab886-7c17-468d-91de-1e0e915924c9",
      "quality_report_id": "99848a18-abd1-4b06-86b0-f4f35500f8bb",
      "unresolved_entity_count": 0,
      "duplicate_excess_count": 0,
      "timestamp_error_count": 0,
      "leakage_error_count": 0,
      "late_or_corrected_count": 0,
      "production_data": true,
      "fixture_only_test_data": false
    },
    "source_quality_report_id": "99848a18-abd1-4b06-86b0-f4f35500f8bb"
  },
  {
    "id": "0ddc9ad3-50b3-4b9b-a8cc-12ea8380d31f",
    "competition_id": "d1cbbef8-bdf8-437d-b44b-cd5a5e876db3",
    "competition": "La Liga",
    "season_id": "f2c67b12-ba55-447c-a5ef-e196c30d004d",
    "season": "2024/2025",
    "provider": "sportmonks-football",
    "policy_version": "data-readiness-v1",
    "calculated_at": "2026-08-01 07:21:31.229636+00:00",
    "readiness_score": 68.0,
    "readiness_label": "PARTIALLY READY",
    "ready_for_training": false,
    "sample_size": 380,
    "metrics": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 0.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 0.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 0.0,
      "correction_late_arriving_rate": 0.0
    },
    "metric_scores": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 1.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 1.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 1.0,
      "correction_late_arriving_rate": 1.0
    },
    "weights": {
      "fixture_completeness": 12.0,
      "player_completeness": 7.0,
      "lineup_completeness": 7.0,
      "injury_completeness": 4.0,
      "odds_completeness": 12.0,
      "xg_completeness": 8.0,
      "feature_completeness": 12.0,
      "duplicate_rate": 6.0,
      "timestamp_consistency": 6.0,
      "point_in_time_leakage_risk": 8.0,
      "data_freshness": 5.0,
      "provider_confidence": 5.0,
      "unresolved_entity_mapping_rate": 4.0,
      "correction_late_arriving_rate": 4.0
    },
    "thresholds": {
      "ready_score": 85.0,
      "partial_score": 60.0,
      "minimum_fixture_completeness": 0.99,
      "minimum_odds_completeness": 0.8,
      "minimum_feature_completeness": 0.95,
      "minimum_data_freshness": 0.95,
      "minimum_provider_confidence": 0.9,
      "maximum_unresolved_rate": 0.01,
      "maximum_duplicate_rate": 0.005,
      "maximum_timestamp_error_rate": 0.005,
      "maximum_leakage_risk": 0.0,
      "minimum_sample_size": 100
    },
    "hard_blockers": [
      "historical_odds_coverage_below_threshold",
      "required_model_features_unavailable"
    ],
    "reasons": [
      {
        "metric": "odds_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "xg_completeness",
        "value": 0.0,
        "weight": 8.0,
        "points_lost": 8.0
      },
      {
        "metric": "feature_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "hard_blocker",
        "value": "historical_odds_coverage_below_threshold",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "required_model_features_unavailable",
        "weight": 0.0,
        "points_lost": 0.0
      }
    ],
    "evidence": {
      "competition_name": "La Liga",
      "season_name": "2024/2025",
      "event_count": 380,
      "completed_event_count": 380,
      "past_event_count": 380,
      "expected_missing_fixture_count": 0,
      "required_feature_names": [],
      "provider_validated": true,
      "latest_import_run_id": "a5aab886-7c17-468d-91de-1e0e915924c9",
      "quality_report_id": "a40d4e11-eb27-4af3-9437-cf0518deb51d",
      "unresolved_entity_count": 0,
      "duplicate_excess_count": 0,
      "timestamp_error_count": 0,
      "leakage_error_count": 0,
      "late_or_corrected_count": 0,
      "production_data": true,
      "fixture_only_test_data": false
    },
    "source_quality_report_id": "a40d4e11-eb27-4af3-9437-cf0518deb51d"
  },
  {
    "id": "947b60c2-5630-41d2-90b4-dc74e6efbef3",
    "competition_id": "94c99b4f-0aa2-47dd-84ee-b68a04f795ce",
    "competition": "Liga MX",
    "season_id": "049c8976-0cc3-44c3-a6c5-13a762b0cb51",
    "season": "2024/2025",
    "provider": "sportmonks-football",
    "policy_version": "data-readiness-v1",
    "calculated_at": "2026-08-01 07:21:29.851282+00:00",
    "readiness_score": 68.0,
    "readiness_label": "PARTIALLY READY",
    "ready_for_training": false,
    "sample_size": 340,
    "metrics": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 0.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 0.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 0.0,
      "correction_late_arriving_rate": 0.0
    },
    "metric_scores": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 1.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 1.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 1.0,
      "correction_late_arriving_rate": 1.0
    },
    "weights": {
      "fixture_completeness": 12.0,
      "player_completeness": 7.0,
      "lineup_completeness": 7.0,
      "injury_completeness": 4.0,
      "odds_completeness": 12.0,
      "xg_completeness": 8.0,
      "feature_completeness": 12.0,
      "duplicate_rate": 6.0,
      "timestamp_consistency": 6.0,
      "point_in_time_leakage_risk": 8.0,
      "data_freshness": 5.0,
      "provider_confidence": 5.0,
      "unresolved_entity_mapping_rate": 4.0,
      "correction_late_arriving_rate": 4.0
    },
    "thresholds": {
      "ready_score": 85.0,
      "partial_score": 60.0,
      "minimum_fixture_completeness": 0.99,
      "minimum_odds_completeness": 0.8,
      "minimum_feature_completeness": 0.95,
      "minimum_data_freshness": 0.95,
      "minimum_provider_confidence": 0.9,
      "maximum_unresolved_rate": 0.01,
      "maximum_duplicate_rate": 0.005,
      "maximum_timestamp_error_rate": 0.005,
      "maximum_leakage_risk": 0.0,
      "minimum_sample_size": 100
    },
    "hard_blockers": [
      "historical_odds_coverage_below_threshold",
      "required_model_features_unavailable"
    ],
    "reasons": [
      {
        "metric": "odds_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "xg_completeness",
        "value": 0.0,
        "weight": 8.0,
        "points_lost": 8.0
      },
      {
        "metric": "feature_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "hard_blocker",
        "value": "historical_odds_coverage_below_threshold",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "required_model_features_unavailable",
        "weight": 0.0,
        "points_lost": 0.0
      }
    ],
    "evidence": {
      "competition_name": "Liga MX",
      "season_name": "2024/2025",
      "event_count": 340,
      "completed_event_count": 340,
      "past_event_count": 340,
      "expected_missing_fixture_count": 0,
      "required_feature_names": [],
      "provider_validated": true,
      "latest_import_run_id": "a5aab886-7c17-468d-91de-1e0e915924c9",
      "quality_report_id": "396c8887-cd36-461a-9d51-8279403ff2d6",
      "unresolved_entity_count": 0,
      "duplicate_excess_count": 0,
      "timestamp_error_count": 0,
      "leakage_error_count": 0,
      "late_or_corrected_count": 0,
      "production_data": true,
      "fixture_only_test_data": false
    },
    "source_quality_report_id": "396c8887-cd36-461a-9d51-8279403ff2d6"
  },
  {
    "id": "dd42fab1-4c2e-4420-90b0-7c9da8cc6637",
    "competition_id": "0e142394-d4c0-4ecd-a966-939ad62a6e9f",
    "competition": "Serie A",
    "season_id": "7cd68e44-5129-4afa-84c4-8cba1e9c370c",
    "season": "2024/2025",
    "provider": "sportmonks-football",
    "policy_version": "data-readiness-v1",
    "calculated_at": "2026-08-01 07:21:24.799801+00:00",
    "readiness_score": 68.0,
    "readiness_label": "PARTIALLY READY",
    "ready_for_training": false,
    "sample_size": 380,
    "metrics": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 0.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 0.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 0.0,
      "correction_late_arriving_rate": 0.0
    },
    "metric_scores": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 1.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 1.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 1.0,
      "correction_late_arriving_rate": 1.0
    },
    "weights": {
      "fixture_completeness": 12.0,
      "player_completeness": 7.0,
      "lineup_completeness": 7.0,
      "injury_completeness": 4.0,
      "odds_completeness": 12.0,
      "xg_completeness": 8.0,
      "feature_completeness": 12.0,
      "duplicate_rate": 6.0,
      "timestamp_consistency": 6.0,
      "point_in_time_leakage_risk": 8.0,
      "data_freshness": 5.0,
      "provider_confidence": 5.0,
      "unresolved_entity_mapping_rate": 4.0,
      "correction_late_arriving_rate": 4.0
    },
    "thresholds": {
      "ready_score": 85.0,
      "partial_score": 60.0,
      "minimum_fixture_completeness": 0.99,
      "minimum_odds_completeness": 0.8,
      "minimum_feature_completeness": 0.95,
      "minimum_data_freshness": 0.95,
      "minimum_provider_confidence": 0.9,
      "maximum_unresolved_rate": 0.01,
      "maximum_duplicate_rate": 0.005,
      "maximum_timestamp_error_rate": 0.005,
      "maximum_leakage_risk": 0.0,
      "minimum_sample_size": 100
    },
    "hard_blockers": [
      "historical_odds_coverage_below_threshold",
      "required_model_features_unavailable"
    ],
    "reasons": [
      {
        "metric": "odds_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "xg_completeness",
        "value": 0.0,
        "weight": 8.0,
        "points_lost": 8.0
      },
      {
        "metric": "feature_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "hard_blocker",
        "value": "historical_odds_coverage_below_threshold",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "required_model_features_unavailable",
        "weight": 0.0,
        "points_lost": 0.0
      }
    ],
    "evidence": {
      "competition_name": "Serie A",
      "season_name": "2024/2025",
      "event_count": 380,
      "completed_event_count": 380,
      "past_event_count": 380,
      "expected_missing_fixture_count": 0,
      "required_feature_names": [],
      "provider_validated": true,
      "latest_import_run_id": "a5aab886-7c17-468d-91de-1e0e915924c9",
      "quality_report_id": "68582c3e-d667-4c3d-80ff-b9cfbf5158b3",
      "unresolved_entity_count": 0,
      "duplicate_excess_count": 0,
      "timestamp_error_count": 0,
      "leakage_error_count": 0,
      "late_or_corrected_count": 0,
      "production_data": true,
      "fixture_only_test_data": false
    },
    "source_quality_report_id": "68582c3e-d667-4c3d-80ff-b9cfbf5158b3"
  },
  {
    "id": "4233d176-f4cb-43b9-80c8-af446b6f8e04",
    "competition_id": "898c5cf8-1936-4ab4-9e9a-97054b882c62",
    "competition": "Premier League",
    "season_id": "ccb7ca7b-4731-4f54-bef2-5699d689be5b",
    "season": "2024/2025",
    "provider": "sportmonks-football",
    "policy_version": "data-readiness-v1",
    "calculated_at": "2026-08-01 07:21:23.913651+00:00",
    "readiness_score": 68.0,
    "readiness_label": "PARTIALLY READY",
    "ready_for_training": false,
    "sample_size": 380,
    "metrics": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 0.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 0.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 0.0,
      "correction_late_arriving_rate": 0.0
    },
    "metric_scores": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 1.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 1.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 1.0,
      "correction_late_arriving_rate": 1.0
    },
    "weights": {
      "fixture_completeness": 12.0,
      "player_completeness": 7.0,
      "lineup_completeness": 7.0,
      "injury_completeness": 4.0,
      "odds_completeness": 12.0,
      "xg_completeness": 8.0,
      "feature_completeness": 12.0,
      "duplicate_rate": 6.0,
      "timestamp_consistency": 6.0,
      "point_in_time_leakage_risk": 8.0,
      "data_freshness": 5.0,
      "provider_confidence": 5.0,
      "unresolved_entity_mapping_rate": 4.0,
      "correction_late_arriving_rate": 4.0
    },
    "thresholds": {
      "ready_score": 85.0,
      "partial_score": 60.0,
      "minimum_fixture_completeness": 0.99,
      "minimum_odds_completeness": 0.8,
      "minimum_feature_completeness": 0.95,
      "minimum_data_freshness": 0.95,
      "minimum_provider_confidence": 0.9,
      "maximum_unresolved_rate": 0.01,
      "maximum_duplicate_rate": 0.005,
      "maximum_timestamp_error_rate": 0.005,
      "maximum_leakage_risk": 0.0,
      "minimum_sample_size": 100
    },
    "hard_blockers": [
      "historical_odds_coverage_below_threshold",
      "required_model_features_unavailable"
    ],
    "reasons": [
      {
        "metric": "odds_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "xg_completeness",
        "value": 0.0,
        "weight": 8.0,
        "points_lost": 8.0
      },
      {
        "metric": "feature_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "hard_blocker",
        "value": "historical_odds_coverage_below_threshold",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "required_model_features_unavailable",
        "weight": 0.0,
        "points_lost": 0.0
      }
    ],
    "evidence": {
      "competition_name": "Premier League",
      "season_name": "2024/2025",
      "event_count": 380,
      "completed_event_count": 380,
      "past_event_count": 380,
      "expected_missing_fixture_count": 0,
      "required_feature_names": [],
      "provider_validated": true,
      "latest_import_run_id": "a5aab886-7c17-468d-91de-1e0e915924c9",
      "quality_report_id": "7957fa2e-e932-4681-a8f1-14458e59578e",
      "unresolved_entity_count": 0,
      "duplicate_excess_count": 0,
      "timestamp_error_count": 0,
      "leakage_error_count": 0,
      "late_or_corrected_count": 0,
      "production_data": true,
      "fixture_only_test_data": false
    },
    "source_quality_report_id": "7957fa2e-e932-4681-a8f1-14458e59578e"
  },
  {
    "id": "51f199ed-ed9a-42c9-af60-9ec7152bb8d4",
    "competition_id": "968116cf-dd3c-4a59-ad14-45a140305335",
    "competition": "Bundesliga",
    "season_id": "6e58c8d5-5225-49b5-8b30-69d0624bd6ec",
    "season": "2024/2025",
    "provider": "sportmonks-football",
    "policy_version": "data-readiness-v1",
    "calculated_at": "2026-08-01 07:21:21.820535+00:00",
    "readiness_score": 68.0,
    "readiness_label": "PARTIALLY READY",
    "ready_for_training": false,
    "sample_size": 305,
    "metrics": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 0.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 0.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 0.0,
      "correction_late_arriving_rate": 0.0
    },
    "metric_scores": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 1.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 1.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 1.0,
      "correction_late_arriving_rate": 1.0
    },
    "weights": {
      "fixture_completeness": 12.0,
      "player_completeness": 7.0,
      "lineup_completeness": 7.0,
      "injury_completeness": 4.0,
      "odds_completeness": 12.0,
      "xg_completeness": 8.0,
      "feature_completeness": 12.0,
      "duplicate_rate": 6.0,
      "timestamp_consistency": 6.0,
      "point_in_time_leakage_risk": 8.0,
      "data_freshness": 5.0,
      "provider_confidence": 5.0,
      "unresolved_entity_mapping_rate": 4.0,
      "correction_late_arriving_rate": 4.0
    },
    "thresholds": {
      "ready_score": 85.0,
      "partial_score": 60.0,
      "minimum_fixture_completeness": 0.99,
      "minimum_odds_completeness": 0.8,
      "minimum_feature_completeness": 0.95,
      "minimum_data_freshness": 0.95,
      "minimum_provider_confidence": 0.9,
      "maximum_unresolved_rate": 0.01,
      "maximum_duplicate_rate": 0.005,
      "maximum_timestamp_error_rate": 0.005,
      "maximum_leakage_risk": 0.0,
      "minimum_sample_size": 100
    },
    "hard_blockers": [
      "historical_odds_coverage_below_threshold",
      "required_model_features_unavailable"
    ],
    "reasons": [
      {
        "metric": "odds_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "xg_completeness",
        "value": 0.0,
        "weight": 8.0,
        "points_lost": 8.0
      },
      {
        "metric": "feature_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "hard_blocker",
        "value": "historical_odds_coverage_below_threshold",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "required_model_features_unavailable",
        "weight": 0.0,
        "points_lost": 0.0
      }
    ],
    "evidence": {
      "competition_name": "Bundesliga",
      "season_name": "2024/2025",
      "event_count": 306,
      "completed_event_count": 305,
      "past_event_count": 306,
      "expected_missing_fixture_count": 0,
      "required_feature_names": [],
      "provider_validated": true,
      "latest_import_run_id": "a5aab886-7c17-468d-91de-1e0e915924c9",
      "quality_report_id": "65c94c28-c5d7-44f9-a1e6-ddbacd238f47",
      "unresolved_entity_count": 0,
      "duplicate_excess_count": 0,
      "timestamp_error_count": 0,
      "leakage_error_count": 0,
      "late_or_corrected_count": 0,
      "production_data": true,
      "fixture_only_test_data": false
    },
    "source_quality_report_id": "65c94c28-c5d7-44f9-a1e6-ddbacd238f47"
  },
  {
    "id": "17295c68-99d7-4c8a-a16c-9c24a11f5a85",
    "competition_id": "da6a4e88-4ffe-4550-ac21-5653ed99bf82",
    "competition": "K League 1",
    "season_id": "fa9b2195-59c5-4ba7-8fa2-0d05287af8f8",
    "season": "2024",
    "provider": "sportmonks-football",
    "policy_version": "data-readiness-v1",
    "calculated_at": "2026-07-29 16:20:10.628789+00:00",
    "readiness_score": 68.0,
    "readiness_label": "PARTIALLY READY",
    "ready_for_training": false,
    "sample_size": 228,
    "metrics": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 0.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 0.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 0.0,
      "correction_late_arriving_rate": 0.0
    },
    "metric_scores": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 1.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 1.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 1.0,
      "correction_late_arriving_rate": 1.0
    },
    "weights": {
      "fixture_completeness": 12.0,
      "player_completeness": 7.0,
      "lineup_completeness": 7.0,
      "injury_completeness": 4.0,
      "odds_completeness": 12.0,
      "xg_completeness": 8.0,
      "feature_completeness": 12.0,
      "duplicate_rate": 6.0,
      "timestamp_consistency": 6.0,
      "point_in_time_leakage_risk": 8.0,
      "data_freshness": 5.0,
      "provider_confidence": 5.0,
      "unresolved_entity_mapping_rate": 4.0,
      "correction_late_arriving_rate": 4.0
    },
    "thresholds": {
      "ready_score": 85.0,
      "partial_score": 60.0,
      "minimum_fixture_completeness": 0.99,
      "minimum_odds_completeness": 0.8,
      "minimum_feature_completeness": 0.95,
      "minimum_data_freshness": 0.95,
      "minimum_provider_confidence": 0.9,
      "maximum_unresolved_rate": 0.01,
      "maximum_duplicate_rate": 0.005,
      "maximum_timestamp_error_rate": 0.005,
      "maximum_leakage_risk": 0.0,
      "minimum_sample_size": 100
    },
    "hard_blockers": [
      "historical_odds_coverage_below_threshold",
      "required_model_features_unavailable"
    ],
    "reasons": [
      {
        "metric": "odds_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "xg_completeness",
        "value": 0.0,
        "weight": 8.0,
        "points_lost": 8.0
      },
      {
        "metric": "feature_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "hard_blocker",
        "value": "historical_odds_coverage_below_threshold",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "required_model_features_unavailable",
        "weight": 0.0,
        "points_lost": 0.0
      }
    ],
    "evidence": {
      "competition_name": "K League 1",
      "season_name": "2024",
      "event_count": 228,
      "completed_event_count": 228,
      "past_event_count": 228,
      "expected_missing_fixture_count": 0,
      "required_feature_names": [],
      "provider_validated": true,
      "latest_import_run_id": "aa18a852-8f32-4cd5-a398-eaa4270a13fd",
      "quality_report_id": "62ae127d-eb06-4bb0-a008-64c6341051d9",
      "unresolved_entity_count": 0,
      "duplicate_excess_count": 0,
      "timestamp_error_count": 0,
      "leakage_error_count": 0,
      "late_or_corrected_count": 0,
      "production_data": true,
      "fixture_only_test_data": false
    },
    "source_quality_report_id": "62ae127d-eb06-4bb0-a008-64c6341051d9"
  },
  {
    "id": "eda68f41-d305-4f77-abde-ce540f4de930",
    "competition_id": "da6a4e88-4ffe-4550-ac21-5653ed99bf82",
    "competition": "K League 1",
    "season_id": "3d2f389f-daea-4b7b-8ced-518794984dfc",
    "season": "2025",
    "provider": "sportmonks-football",
    "policy_version": "data-readiness-v1",
    "calculated_at": "2026-07-29 16:20:10.440273+00:00",
    "readiness_score": 68.0,
    "readiness_label": "PARTIALLY READY",
    "ready_for_training": false,
    "sample_size": 228,
    "metrics": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 0.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 0.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 0.0,
      "correction_late_arriving_rate": 0.0
    },
    "metric_scores": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 1.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 1.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 1.0,
      "correction_late_arriving_rate": 1.0
    },
    "weights": {
      "fixture_completeness": 12.0,
      "player_completeness": 7.0,
      "lineup_completeness": 7.0,
      "injury_completeness": 4.0,
      "odds_completeness": 12.0,
      "xg_completeness": 8.0,
      "feature_completeness": 12.0,
      "duplicate_rate": 6.0,
      "timestamp_consistency": 6.0,
      "point_in_time_leakage_risk": 8.0,
      "data_freshness": 5.0,
      "provider_confidence": 5.0,
      "unresolved_entity_mapping_rate": 4.0,
      "correction_late_arriving_rate": 4.0
    },
    "thresholds": {
      "ready_score": 85.0,
      "partial_score": 60.0,
      "minimum_fixture_completeness": 0.99,
      "minimum_odds_completeness": 0.8,
      "minimum_feature_completeness": 0.95,
      "minimum_data_freshness": 0.95,
      "minimum_provider_confidence": 0.9,
      "maximum_unresolved_rate": 0.01,
      "maximum_duplicate_rate": 0.005,
      "maximum_timestamp_error_rate": 0.005,
      "maximum_leakage_risk": 0.0,
      "minimum_sample_size": 100
    },
    "hard_blockers": [
      "historical_odds_coverage_below_threshold",
      "required_model_features_unavailable"
    ],
    "reasons": [
      {
        "metric": "odds_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "xg_completeness",
        "value": 0.0,
        "weight": 8.0,
        "points_lost": 8.0
      },
      {
        "metric": "feature_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "hard_blocker",
        "value": "historical_odds_coverage_below_threshold",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "required_model_features_unavailable",
        "weight": 0.0,
        "points_lost": 0.0
      }
    ],
    "evidence": {
      "competition_name": "K League 1",
      "season_name": "2025",
      "event_count": 228,
      "completed_event_count": 228,
      "past_event_count": 228,
      "expected_missing_fixture_count": 0,
      "required_feature_names": [],
      "provider_validated": true,
      "latest_import_run_id": "a5aab886-7c17-468d-91de-1e0e915924c9",
      "quality_report_id": "508258d0-e498-4d18-bdc3-8115ede26d87",
      "unresolved_entity_count": 0,
      "duplicate_excess_count": 0,
      "timestamp_error_count": 0,
      "leakage_error_count": 0,
      "late_or_corrected_count": 0,
      "production_data": true,
      "fixture_only_test_data": false
    },
    "source_quality_report_id": "508258d0-e498-4d18-bdc3-8115ede26d87"
  },
  {
    "id": "5b5a0625-3d67-4832-a34a-780b4b62d6a7",
    "competition_id": "949cdaa0-a420-4650-bd90-3474407d5654",
    "competition": "J1 League",
    "season_id": "a16f845d-875b-4840-a235-99642ca8c792",
    "season": "2025",
    "provider": "sportmonks-football",
    "policy_version": "data-readiness-v1",
    "calculated_at": "2026-07-29 16:20:08.011995+00:00",
    "readiness_score": 68.0,
    "readiness_label": "PARTIALLY READY",
    "ready_for_training": false,
    "sample_size": 380,
    "metrics": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 0.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 0.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 0.0,
      "correction_late_arriving_rate": 0.0
    },
    "metric_scores": {
      "fixture_completeness": 1.0,
      "player_completeness": 1.0,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 1.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 1.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 1.0,
      "correction_late_arriving_rate": 1.0
    },
    "weights": {
      "fixture_completeness": 12.0,
      "player_completeness": 7.0,
      "lineup_completeness": 7.0,
      "injury_completeness": 4.0,
      "odds_completeness": 12.0,
      "xg_completeness": 8.0,
      "feature_completeness": 12.0,
      "duplicate_rate": 6.0,
      "timestamp_consistency": 6.0,
      "point_in_time_leakage_risk": 8.0,
      "data_freshness": 5.0,
      "provider_confidence": 5.0,
      "unresolved_entity_mapping_rate": 4.0,
      "correction_late_arriving_rate": 4.0
    },
    "thresholds": {
      "ready_score": 85.0,
      "partial_score": 60.0,
      "minimum_fixture_completeness": 0.99,
      "minimum_odds_completeness": 0.8,
      "minimum_feature_completeness": 0.95,
      "minimum_data_freshness": 0.95,
      "minimum_provider_confidence": 0.9,
      "maximum_unresolved_rate": 0.01,
      "maximum_duplicate_rate": 0.005,
      "maximum_timestamp_error_rate": 0.005,
      "maximum_leakage_risk": 0.0,
      "minimum_sample_size": 100
    },
    "hard_blockers": [
      "historical_odds_coverage_below_threshold",
      "required_model_features_unavailable"
    ],
    "reasons": [
      {
        "metric": "odds_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "xg_completeness",
        "value": 0.0,
        "weight": 8.0,
        "points_lost": 8.0
      },
      {
        "metric": "feature_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "hard_blocker",
        "value": "historical_odds_coverage_below_threshold",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "required_model_features_unavailable",
        "weight": 0.0,
        "points_lost": 0.0
      }
    ],
    "evidence": {
      "competition_name": "J1 League",
      "season_name": "2025",
      "event_count": 380,
      "completed_event_count": 380,
      "past_event_count": 380,
      "expected_missing_fixture_count": 0,
      "required_feature_names": [],
      "provider_validated": true,
      "latest_import_run_id": "a5aab886-7c17-468d-91de-1e0e915924c9",
      "quality_report_id": "e370f8fc-2f65-4f70-95f2-1824506ee907",
      "unresolved_entity_count": 0,
      "duplicate_excess_count": 0,
      "timestamp_error_count": 0,
      "leakage_error_count": 0,
      "late_or_corrected_count": 0,
      "production_data": true,
      "fixture_only_test_data": false
    },
    "source_quality_report_id": "e370f8fc-2f65-4f70-95f2-1824506ee907"
  },
  {
    "id": "700123c7-5f82-4609-b055-6aad2fc9a149",
    "competition_id": "949cdaa0-a420-4650-bd90-3474407d5654",
    "competition": "J1 League",
    "season_id": "9df4b883-3d28-4efb-a25b-83fc63914dc2",
    "season": "2024",
    "provider": "sportmonks-football",
    "policy_version": "data-readiness-v1",
    "calculated_at": "2026-07-29 16:20:07.674608+00:00",
    "readiness_score": 67.96,
    "readiness_label": "PARTIALLY READY",
    "ready_for_training": false,
    "sample_size": 380,
    "metrics": {
      "fixture_completeness": 1.0,
      "player_completeness": 0.994737,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 0.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 0.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 0.0,
      "correction_late_arriving_rate": 0.0
    },
    "metric_scores": {
      "fixture_completeness": 1.0,
      "player_completeness": 0.994737,
      "lineup_completeness": 1.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 1.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 1.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 1.0,
      "correction_late_arriving_rate": 1.0
    },
    "weights": {
      "fixture_completeness": 12.0,
      "player_completeness": 7.0,
      "lineup_completeness": 7.0,
      "injury_completeness": 4.0,
      "odds_completeness": 12.0,
      "xg_completeness": 8.0,
      "feature_completeness": 12.0,
      "duplicate_rate": 6.0,
      "timestamp_consistency": 6.0,
      "point_in_time_leakage_risk": 8.0,
      "data_freshness": 5.0,
      "provider_confidence": 5.0,
      "unresolved_entity_mapping_rate": 4.0,
      "correction_late_arriving_rate": 4.0
    },
    "thresholds": {
      "ready_score": 85.0,
      "partial_score": 60.0,
      "minimum_fixture_completeness": 0.99,
      "minimum_odds_completeness": 0.8,
      "minimum_feature_completeness": 0.95,
      "minimum_data_freshness": 0.95,
      "minimum_provider_confidence": 0.9,
      "maximum_unresolved_rate": 0.01,
      "maximum_duplicate_rate": 0.005,
      "maximum_timestamp_error_rate": 0.005,
      "maximum_leakage_risk": 0.0,
      "minimum_sample_size": 100
    },
    "hard_blockers": [
      "historical_odds_coverage_below_threshold",
      "required_model_features_unavailable"
    ],
    "reasons": [
      {
        "metric": "player_completeness",
        "value": 0.994737,
        "weight": 7.0,
        "points_lost": 0.04
      },
      {
        "metric": "odds_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "xg_completeness",
        "value": 0.0,
        "weight": 8.0,
        "points_lost": 8.0
      },
      {
        "metric": "feature_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "hard_blocker",
        "value": "historical_odds_coverage_below_threshold",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "required_model_features_unavailable",
        "weight": 0.0,
        "points_lost": 0.0
      }
    ],
    "evidence": {
      "competition_name": "J1 League",
      "season_name": "2024",
      "event_count": 380,
      "completed_event_count": 380,
      "past_event_count": 380,
      "expected_missing_fixture_count": 0,
      "required_feature_names": [],
      "provider_validated": true,
      "latest_import_run_id": "aa18a852-8f32-4cd5-a398-eaa4270a13fd",
      "quality_report_id": "eb2b240e-ed66-4817-8b1a-60ee5959edab",
      "unresolved_entity_count": 0,
      "duplicate_excess_count": 0,
      "timestamp_error_count": 0,
      "leakage_error_count": 0,
      "late_or_corrected_count": 0,
      "production_data": true,
      "fixture_only_test_data": false
    },
    "source_quality_report_id": "eb2b240e-ed66-4817-8b1a-60ee5959edab"
  },
  {
    "id": "341396f0-d328-48e3-9d61-733e6571624a",
    "competition_id": "80194fab-c7ff-4b1c-aeb1-5051b866ea6c",
    "competition": "Primeira Liga",
    "season_id": "08aa8485-6ab0-436f-9e12-33adc0e25a4b",
    "season": "2017",
    "provider": "sportmonks-football",
    "policy_version": "data-readiness-v1",
    "calculated_at": "2026-07-29 16:20:05.616186+00:00",
    "readiness_score": 43.55,
    "readiness_label": "NOT READY",
    "ready_for_training": false,
    "sample_size": 31,
    "metrics": {
      "fixture_completeness": 0.129167,
      "player_completeness": 0.0,
      "lineup_completeness": 0.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 0.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 0.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 0.0,
      "correction_late_arriving_rate": 0.0
    },
    "metric_scores": {
      "fixture_completeness": 0.129167,
      "player_completeness": 0.0,
      "lineup_completeness": 0.0,
      "injury_completeness": 1.0,
      "odds_completeness": 0.0,
      "xg_completeness": 0.0,
      "feature_completeness": 0.0,
      "duplicate_rate": 1.0,
      "timestamp_consistency": 1.0,
      "point_in_time_leakage_risk": 1.0,
      "data_freshness": 1.0,
      "provider_confidence": 1.0,
      "unresolved_entity_mapping_rate": 1.0,
      "correction_late_arriving_rate": 1.0
    },
    "weights": {
      "fixture_completeness": 12.0,
      "player_completeness": 7.0,
      "lineup_completeness": 7.0,
      "injury_completeness": 4.0,
      "odds_completeness": 12.0,
      "xg_completeness": 8.0,
      "feature_completeness": 12.0,
      "duplicate_rate": 6.0,
      "timestamp_consistency": 6.0,
      "point_in_time_leakage_risk": 8.0,
      "data_freshness": 5.0,
      "provider_confidence": 5.0,
      "unresolved_entity_mapping_rate": 4.0,
      "correction_late_arriving_rate": 4.0
    },
    "thresholds": {
      "ready_score": 85.0,
      "partial_score": 60.0,
      "minimum_fixture_completeness": 0.99,
      "minimum_odds_completeness": 0.8,
      "minimum_feature_completeness": 0.95,
      "minimum_data_freshness": 0.95,
      "minimum_provider_confidence": 0.9,
      "maximum_unresolved_rate": 0.01,
      "maximum_duplicate_rate": 0.005,
      "maximum_timestamp_error_rate": 0.005,
      "maximum_leakage_risk": 0.0,
      "minimum_sample_size": 100
    },
    "hard_blockers": [
      "fixture_completeness_below_threshold",
      "historical_odds_coverage_below_threshold",
      "required_model_features_unavailable",
      "sample_size_below_configured_minimum"
    ],
    "reasons": [
      {
        "metric": "fixture_completeness",
        "value": 0.129167,
        "weight": 12.0,
        "points_lost": 10.45
      },
      {
        "metric": "player_completeness",
        "value": 0.0,
        "weight": 7.0,
        "points_lost": 7.0
      },
      {
        "metric": "lineup_completeness",
        "value": 0.0,
        "weight": 7.0,
        "points_lost": 7.0
      },
      {
        "metric": "odds_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "xg_completeness",
        "value": 0.0,
        "weight": 8.0,
        "points_lost": 8.0
      },
      {
        "metric": "feature_completeness",
        "value": 0.0,
        "weight": 12.0,
        "points_lost": 12.0
      },
      {
        "metric": "hard_blocker",
        "value": "fixture_completeness_below_threshold",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "historical_odds_coverage_below_threshold",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "required_model_features_unavailable",
        "weight": 0.0,
        "points_lost": 0.0
      },
      {
        "metric": "hard_blocker",
        "value": "sample_size_below_configured_minimum",
        "weight": 0.0,
        "points_lost": 0.0
      }
    ],
    "evidence": {
      "competition_name": "Primeira Liga",
      "season_name": "2017",
      "event_count": 31,
      "completed_event_count": 31,
      "past_event_count": 31,
      "expected_missing_fixture_count": 209,
      "required_feature_names": [],
      "provider_validated": true,
      "latest_import_run_id": "8f141321-0505-4963-805d-aa8b1bb15614",
      "quality_report_id": "c8fe290c-26e2-4897-b0f6-6b182dd4b2c3",
      "unresolved_entity_count": 0,
      "duplicate_excess_count": 0,
      "timestamp_error_count": 0,
      "leakage_error_count": 0,
      "late_or_corrected_count": 0,
      "production_data": true,
      "fixture_only_test_data": false
    },
    "source_quality_report_id": "c8fe290c-26e2-4897-b0f6-6b182dd4b2c3"
  }
]