{
  "template_count": 7,
  "templates": [
    {
      "family": "schedule",
      "label": "Game Metadata",
      "primary_provider_hint": "nflverse/nflreadpy schedules",
      "cadence": "weekly slate plus game-window refresh",
      "required_fields": [
        "game_id",
        "season",
        "week",
        "kickoff_time",
        "home_team",
        "away_team",
        "game_window"
      ],
      "optional_fields": [
        "venue",
        "surface",
        "roof",
        "international_or_holiday"
      ],
      "template_record": {
        "game_id": "2026_01_DAL_PHI",
        "season": 2026,
        "week": 1,
        "kickoff_time": "2026-09-10T20:20:00-04:00",
        "home_team": "PHI",
        "away_team": "DAL",
        "game_window": "Thursday",
        "venue": "<venue>",
        "surface": "<surface>",
        "roof": "<roof>",
        "international_or_holiday": "<international_or_holiday>"
      },
      "notes": "",
      "template_only": true,
      "approved_provider_required": true
    },
    {
      "family": "odds",
      "label": "Market Lines",
      "primary_provider_hint": "odds API",
      "cadence": "pre-publish and publish-time refresh",
      "required_fields": [
        "game_id",
        "market",
        "side",
        "line",
        "odds",
        "sportsbook",
        "odds_updated_at"
      ],
      "optional_fields": [
        "over_odds",
        "under_odds",
        "book_count",
        "best_book",
        "best_line",
        "best_odds"
      ],
      "template_record": {
        "game_id": "2026_01_DAL_PHI",
        "market": "receiving_yards",
        "side": "Over",
        "line": 50.5,
        "odds": -110,
        "sportsbook": "ExampleBook",
        "odds_updated_at": "2026-09-10T19:55:00-04:00",
        "over_odds": "<over_odds>",
        "under_odds": "<under_odds>",
        "book_count": "<book_count>",
        "best_book": "<best_book>",
        "best_line": "<best_line>",
        "best_odds": "<best_odds>"
      },
      "notes": "Best-line shopping is an active gate, so publish-time odds must be refreshable.",
      "template_only": true,
      "approved_provider_required": true
    },
    {
      "family": "usage",
      "label": "Usage and Role",
      "primary_provider_hint": "nflverse/nflreadpy participation where available",
      "cadence": "weekly after games, with depth-chart overrides before kickoff",
      "required_fields": [
        "player_id",
        "player_name",
        "team",
        "position",
        "role_context_available"
      ],
      "optional_fields": [
        "snap_share",
        "route_share",
        "target_share",
        "rush_share",
        "red_zone_role",
        "goal_line_role"
      ],
      "template_record": {
        "player_id": "00-001",
        "player_name": "Example Player",
        "team": "DAL",
        "position": "WR",
        "role_context_available": true,
        "snap_share": "<snap_share>",
        "route_share": "<route_share>",
        "target_share": "<target_share>",
        "rush_share": "<rush_share>",
        "red_zone_role": "<red_zone_role>",
        "goal_line_role": "<goal_line_role>"
      },
      "notes": "",
      "template_only": true,
      "approved_provider_required": true
    },
    {
      "family": "injuries",
      "label": "Injuries and Inactives",
      "primary_provider_hint": "official team reports and 90-minute inactive report",
      "cadence": "daily practice reports, final status, and per-window 90-minute inactives",
      "required_fields": [
        "inactive_state",
        "injury_news_timestamp",
        "projection_includes_injury_news"
      ],
      "optional_fields": [
        "player_injury_status",
        "player_injury_designation",
        "teammate_absence_boost",
        "next_man_up_role"
      ],
      "template_record": {
        "inactive_state": "POST_INACTIVES_CONFIRMED",
        "injury_news_timestamp": "2026-09-10T18:50:00-04:00",
        "projection_includes_injury_news": true,
        "player_injury_status": "<player_injury_status>",
        "player_injury_designation": "<player_injury_designation>",
        "teammate_absence_boost": "<teammate_absence_boost>",
        "next_man_up_role": "<next_man_up_role>"
      },
      "notes": "Projection timestamps must be compared against official inactives.",
      "template_only": true,
      "approved_provider_required": true
    },
    {
      "family": "team_context",
      "label": "Team Context",
      "primary_provider_hint": "derived from market, nflverse/nflreadpy, and baseline model inputs",
      "cadence": "pre-slate and publish-time refresh",
      "required_fields": [
        "team_context_available",
        "team_total",
        "spread",
        "game_total",
        "implied_team_points"
      ],
      "optional_fields": [
        "pace",
        "proe",
        "efficiency",
        "rest_days",
        "travel_spot",
        "off_bye"
      ],
      "template_record": {
        "team_context_available": true,
        "team_total": 22.5,
        "spread": 3.5,
        "game_total": 48.5,
        "implied_team_points": 22.5,
        "pace": "<pace>",
        "proe": "<proe>",
        "efficiency": "<efficiency>",
        "rest_days": "<rest_days>",
        "travel_spot": "<travel_spot>",
        "off_bye": "<off_bye>"
      },
      "notes": "Team totals can anchor context but cannot be the sole source of graded edge.",
      "template_only": true,
      "approved_provider_required": true
    },
    {
      "family": "matchup",
      "label": "Defensive Matchup",
      "primary_provider_hint": "nflverse/nflreadpy plus optional PFF/FTN enrichment",
      "cadence": "weekly season-long and recent-window refresh",
      "required_fields": [
        "defensive_rank",
        "matchup_sample_games"
      ],
      "optional_fields": [
        "sos_adjusted",
        "defensive_injury_matchup_delta",
        "opponent_secondary_injury_count"
      ],
      "template_record": {
        "defensive_rank": 9,
        "matchup_sample_games": 5,
        "sos_adjusted": "<sos_adjusted>",
        "defensive_injury_matchup_delta": "<defensive_injury_matchup_delta>",
        "opponent_secondary_injury_count": "<opponent_secondary_injury_count>"
      },
      "notes": "",
      "template_only": true,
      "approved_provider_required": true
    },
    {
      "family": "weather",
      "label": "Weather",
      "primary_provider_hint": "weather API",
      "cadence": "daily, then same-day window refresh",
      "required_fields": [
        "game_id",
        "wind_speed",
        "wind_direction",
        "precipitation",
        "temperature"
      ],
      "optional_fields": [
        "roof_status",
        "field_condition"
      ],
      "template_record": {
        "game_id": "2026_01_DAL_PHI",
        "wind_speed": 8,
        "wind_direction": "NW",
        "precipitation": 0.0,
        "temperature": 68,
        "roof_status": "<roof_status>",
        "field_condition": "<field_condition>"
      },
      "notes": "Wind is the primary NFL weather input, especially for passing and kicking context.",
      "template_only": true,
      "approved_provider_required": true
    }
  ]
}