{
  "league": {
    "id": "bill-league-2026",
    "name": "Bill's fantasy football league",
    "recorded_on": "2026-09-04",
    "provenance_status": "verified against 11 league-app Scoring Settings screenshots supplied by the league owner; a numeric league API export is not archived",
    "source": "Eleven Scoring Settings screenshots covering Passing, Rushing, Receiving, Kicking, Team Defense, IDP, and Misc; transcription is archived in audit-GPT/SCORING_RULES_SCREENSHOTS.md",
    "style_summary": "Full PPR, plus 1 point per pass completion, 4-point passing touchdowns, tiered kicking, tiered team defense, and individual defensive players (IDP).",
    "platform": "Sleeper (identified from exact option labels: 'Pass Completed', 'Hit on QB', '200+ Combined Rush + Rec Yards', 'Less Than 100 Total Yards Allowed', 'Special Teams Player Solo Tackle'). Not ESPN: ESPN uses -2 for interceptions thrown, different field-goal bands, and has no 'Hit on QB' category."
  },
  "conventions": {
    "yardage_is_continuous": true,
    "yardage_note": "The app shows a divisor (for example 25 for passing yards). Points accrue per yard, not in whole blocks: 137 passing yards = 137 x 0.04 = 5.48 points. Use points_per_unit, not the divisor.",
    "rule_types": {
      "count": "points = points_per_unit x number of times the stat happened",
      "rate": "points = points_per_unit x number of yards (fractional, continuous)",
      "event_bonus": "points = points_per_unit x number of qualifying events in the game (for example each touchdown of 40 or more yards)",
      "game_bonus": "points added once per game when the condition is met",
      "band": "look up the one band the stat falls into and add its points; for field goals the band applies to each kick"
    },
    "unlisted_bands_score_zero": true
  },
  "categories": {
    "passing": [
      {
        "key": "pass_yd",
        "label": "Passing Yards",
        "group": "Primary",
        "type": "rate",
        "unit": "yard",
        "points_per_unit": 0.04,
        "app_display": 25,
        "app_display_meaning": "1 point every 25 yards"
      },
      {
        "key": "pass_td",
        "label": "Passing TD",
        "group": "Primary",
        "type": "count",
        "points_per_unit": 4
      },
      {
        "key": "pass_2pt",
        "label": "2-Pt Conversion (passing)",
        "group": "Primary",
        "type": "count",
        "points_per_unit": 2
      },
      {
        "key": "pass_int",
        "label": "Pass Intercepted",
        "group": "Negative plays",
        "type": "count",
        "points_per_unit": -1
      },
      {
        "key": "pass_td_40plus",
        "label": "40+ Yard Pass TD Bonus",
        "group": "Bonuses",
        "type": "event_bonus",
        "points_per_unit": 2,
        "condition": "each passing touchdown of 40 or more yards",
        "stacks_with": "pass_td"
      },
      {
        "key": "pass_completion",
        "label": "Pass Completed",
        "group": "Efficiency",
        "type": "count",
        "points_per_unit": 1,
        "note": "A full point per completion. This is the single largest driver of quarterback scoring in this league."
      }
    ],
    "rushing": [
      {
        "key": "rush_yd",
        "label": "Rushing Yards",
        "group": "Primary",
        "type": "rate",
        "unit": "yard",
        "points_per_unit": 0.1,
        "app_display": 10,
        "app_display_meaning": "1 point every 10 yards"
      },
      {
        "key": "rush_td",
        "label": "Rushing TD",
        "group": "Primary",
        "type": "count",
        "points_per_unit": 6
      },
      {
        "key": "rush_2pt",
        "label": "2-Pt Conversion (rushing)",
        "group": "Primary",
        "type": "count",
        "points_per_unit": 2
      },
      {
        "key": "rush_td_40plus",
        "label": "40+ Yard Rush TD Bonus",
        "group": "Bonuses",
        "type": "event_bonus",
        "points_per_unit": 2,
        "condition": "each rushing touchdown of 40 or more yards",
        "stacks_with": "rush_td"
      }
    ],
    "receiving": [
      {
        "key": "reception",
        "label": "Reception",
        "group": "Primary",
        "type": "count",
        "points_per_unit": 1
      },
      {
        "key": "rec_yd",
        "label": "Receiving Yards",
        "group": "Primary",
        "type": "rate",
        "unit": "yard",
        "points_per_unit": 0.1,
        "app_display": 10,
        "app_display_meaning": "1 point every 10 yards"
      },
      {
        "key": "rec_td",
        "label": "Receiving TD",
        "group": "Primary",
        "type": "count",
        "points_per_unit": 6
      },
      {
        "key": "rec_2pt",
        "label": "2-Pt Conversion (receiving)",
        "group": "Primary",
        "type": "count",
        "points_per_unit": 2
      },
      {
        "key": "rec_td_40plus",
        "label": "40+ Yard Reception TD Bonus",
        "group": "Big-play bonuses",
        "type": "event_bonus",
        "points_per_unit": 2,
        "condition": "each receiving touchdown of 40 or more yards",
        "stacks_with": "rec_td"
      }
    ],
    "kicking": [
      {
        "key": "pat_made",
        "label": "PAT Made",
        "group": "Primary",
        "type": "count",
        "points_per_unit": 1
      },
      {
        "key": "fg_made",
        "label": "FG Made",
        "group": "Distance bonuses",
        "type": "band",
        "band_stat": "field goal distance in yards",
        "applies": "each field goal made",
        "bands": [
          {
            "min": 0,
            "max": 19,
            "points": 3,
            "label": "FG Made (0-19 yards)"
          },
          {
            "min": 20,
            "max": 29,
            "points": 3,
            "label": "FG Made (20-29 yards)"
          },
          {
            "min": 30,
            "max": 39,
            "points": 3,
            "label": "FG Made (30-39 yards)"
          },
          {
            "min": 40,
            "max": 49,
            "points": 4,
            "label": "FG Made (40-49 yards)"
          },
          {
            "min": 50,
            "max": null,
            "points": 5,
            "label": "FG Made (50+ yards)"
          }
        ]
      },
      {
        "key": "pat_missed",
        "label": "PAT Missed",
        "group": "Misses",
        "type": "count",
        "points_per_unit": -1
      },
      {
        "key": "fg_missed",
        "label": "FG Missed",
        "group": "Misses",
        "type": "band",
        "band_stat": "field goal distance in yards",
        "applies": "each field goal missed",
        "bands": [
          {
            "min": 0,
            "max": 19,
            "points": -1,
            "label": "FG Missed (0-19 yards)"
          },
          {
            "min": 20,
            "max": null,
            "points": 0,
            "label": "FG Missed (20+ yards)",
            "note": "Zero-valued continuation bands are omitted from the app's active-rule summary; only the nonzero 0-19 miss band appears."
          }
        ],
        "note": "The screenshots establish that the settings view lists nonzero rules and omits zero-valued bands: the 21-27 points-allowed tier is likewise absent between visible 14-20 and 28-34 tiers."
      }
    ],
    "team_defense": [
      {
        "key": "dst_int",
        "label": "Interceptions",
        "group": "Turnovers",
        "type": "count",
        "points_per_unit": 2
      },
      {
        "key": "dst_fumble_recovery",
        "label": "Fumble Recovery",
        "group": "Turnovers",
        "type": "count",
        "points_per_unit": 2
      },
      {
        "key": "dst_forced_fumble",
        "label": "Forced Fumble",
        "group": "Turnovers",
        "type": "count",
        "points_per_unit": 1
      },
      {
        "key": "dst_safety",
        "label": "Safety",
        "group": "Turnovers",
        "type": "count",
        "points_per_unit": 2
      },
      {
        "key": "dst_blocked_kick",
        "label": "Blocked Kick",
        "group": "Turnovers",
        "type": "count",
        "points_per_unit": 2
      },
      {
        "key": "dst_td",
        "label": "Defense TD",
        "group": "Touchdowns",
        "type": "count",
        "points_per_unit": 6
      },
      {
        "key": "dst_sack",
        "label": "Sacks",
        "group": "Pressure",
        "type": "count",
        "points_per_unit": 1
      },
      {
        "key": "dst_points_allowed",
        "label": "Points Allowed",
        "group": "Points allowed",
        "type": "band",
        "band_stat": "points allowed by the defense in the game",
        "applies": "once per game",
        "bands": [
          {
            "min": 0,
            "max": 0,
            "points": 10,
            "label": "Points Allowed 0"
          },
          {
            "min": 1,
            "max": 6,
            "points": 7,
            "label": "Points Allowed 1-6"
          },
          {
            "min": 7,
            "max": 13,
            "points": 4,
            "label": "Points Allowed 7-13"
          },
          {
            "min": 14,
            "max": 20,
            "points": 1,
            "label": "Points Allowed 14-20"
          },
          {
            "min": 21,
            "max": 27,
            "points": 0,
            "label": "Points Allowed 21-27",
            "note": "Confirmed zero by its omission between the visible nonzero 14-20 and 28-34 bands in the active-rule summary."
          },
          {
            "min": 28,
            "max": 34,
            "points": -1,
            "label": "Points Allowed 28-34"
          },
          {
            "min": 35,
            "max": null,
            "points": -4,
            "label": "Points Allowed 35+"
          }
        ]
      },
      {
        "key": "dst_yards_allowed",
        "label": "Total Yards Allowed",
        "group": "Yardage allowed",
        "type": "band",
        "band_stat": "total yards allowed by the defense in the game",
        "applies": "once per game",
        "bands": [
          {
            "min": 0,
            "max": 99,
            "points": 5,
            "label": "Less Than 100 Total Yards Allowed"
          },
          {
            "min": 100,
            "max": 499,
            "points": 0,
            "label": "100-499 Total Yards Allowed (six Sleeper rows collapsed)",
            "note": "The six continuation rows are collapsed because each is zero and therefore omitted from the app's active-rule summary."
          },
          {
            "min": 500,
            "max": 549,
            "points": -1,
            "label": "500-549 Total Yards Allowed"
          },
          {
            "min": 550,
            "max": null,
            "points": -4,
            "label": "550+ Total Yards Allowed"
          }
        ]
      },
      {
        "key": "dst_st_td",
        "label": "Special teams TD",
        "group": "Special teams",
        "type": "count",
        "points_per_unit": 6
      },
      {
        "key": "dst_st_forced_fumble",
        "label": "Special Teams Forced Fumble",
        "group": "Special teams",
        "type": "count",
        "points_per_unit": 1
      },
      {
        "key": "dst_st_fumble_recovery",
        "label": "Special Teams Fumble Recovery",
        "group": "Special teams",
        "type": "count",
        "points_per_unit": 1
      }
    ],
    "idp": [
      {
        "key": "idp_solo_tackle",
        "label": "Solo Tackle",
        "group": "Tackles",
        "type": "count",
        "points_per_unit": 1
      },
      {
        "key": "idp_assisted_tackle",
        "label": "Assisted Tackle",
        "group": "Tackles",
        "type": "count",
        "points_per_unit": 0.5
      },
      {
        "key": "idp_sack",
        "label": "Sack",
        "group": "Pressure",
        "type": "count",
        "points_per_unit": 2,
        "note": "Half sacks score 1 point if the stat feed reports 0.5."
      },
      {
        "key": "idp_qb_hit",
        "label": "Hit on QB",
        "group": "Pressure",
        "type": "count",
        "points_per_unit": 0.5
      },
      {
        "key": "idp_int",
        "label": "Interception",
        "group": "Turnovers",
        "type": "count",
        "points_per_unit": 2
      },
      {
        "key": "idp_fumble_recovery",
        "label": "Fumble Recovery",
        "group": "Turnovers",
        "type": "count",
        "points_per_unit": 2
      },
      {
        "key": "idp_forced_fumble",
        "label": "Forced Fumble",
        "group": "Turnovers",
        "type": "count",
        "points_per_unit": 1
      },
      {
        "key": "idp_safety",
        "label": "Safety",
        "group": "Turnovers",
        "type": "count",
        "points_per_unit": 2
      },
      {
        "key": "idp_blocked_kick",
        "label": "Blocked Punt, PAT or FG",
        "group": "Turnovers",
        "type": "count",
        "points_per_unit": 2
      },
      {
        "key": "idp_td",
        "label": "IDP TD",
        "group": "Touchdowns",
        "type": "count",
        "points_per_unit": 6
      },
      {
        "key": "idp_pass_defended",
        "label": "Pass Defended",
        "group": "Coverage",
        "type": "count",
        "points_per_unit": 1
      },
      {
        "key": "idp_10plus_tackles",
        "label": "10+ Tackle Bonus",
        "group": "Bonuses",
        "type": "game_bonus",
        "points_per_unit": 2,
        "condition": "10 or more tackles in the game",
        "condition_stat": "idp_solo_tackle + idp_assisted_tackle",
        "note": "Interpreted as total tackles (solo plus assisted); the screen separately labels the component tackle types and labels this threshold simply 'Tackle'.",
        "threshold": 10
      },
      {
        "key": "idp_2plus_sacks",
        "label": "2+ Sack Bonus",
        "group": "Bonuses",
        "type": "game_bonus",
        "points_per_unit": 2,
        "condition": "2 or more sacks in the game",
        "condition_stat": "idp_sack",
        "threshold": 2
      }
    ],
    "misc": [
      {
        "key": "st_player_td",
        "label": "Special teams player TD",
        "group": "Special teams",
        "type": "count",
        "points_per_unit": 6
      },
      {
        "key": "st_player_forced_fumble",
        "label": "Special Teams Player Forced Fumble",
        "group": "Special teams",
        "type": "count",
        "points_per_unit": 1
      },
      {
        "key": "st_player_fumble_recovery",
        "label": "Special Teams Player Fumble Recovery",
        "group": "Special teams",
        "type": "count",
        "points_per_unit": 1
      },
      {
        "key": "st_player_solo_tackle",
        "label": "Special Teams Player Solo Tackle",
        "group": "Special teams",
        "type": "count",
        "points_per_unit": 1
      },
      {
        "key": "punt_return_yd",
        "label": "Player Punt Return Yards",
        "group": "Special teams",
        "type": "rate",
        "unit": "yard",
        "points_per_unit": 0.1,
        "app_display": 10,
        "app_display_meaning": "1 point every 10 yards"
      },
      {
        "key": "kick_return_yd",
        "label": "Player Kick Return Yards",
        "group": "Special teams",
        "type": "rate",
        "unit": "yard",
        "points_per_unit": 0.1,
        "app_display": 10,
        "app_display_meaning": "1 point every 10 yards"
      },
      {
        "key": "fumble_lost",
        "label": "Fumble Lost",
        "group": "Fumbles",
        "type": "count",
        "points_per_unit": -2
      },
      {
        "key": "fumble_recovery_td",
        "label": "Fumble Recovery TD",
        "group": "Fumbles",
        "type": "count",
        "points_per_unit": 6
      },
      {
        "key": "rush_200_game",
        "label": "200+ Yard Rushing Game",
        "group": "Yardage milestones",
        "type": "game_bonus",
        "points_per_unit": 2,
        "condition": "200 or more rushing yards",
        "condition_stat": "rush_yd",
        "threshold": 200
      },
      {
        "key": "rec_200_game",
        "label": "200+ Yard Receiving Game",
        "group": "Yardage milestones",
        "type": "game_bonus",
        "points_per_unit": 2,
        "condition": "200 or more receiving yards",
        "condition_stat": "rec_yd",
        "threshold": 200
      },
      {
        "key": "pass_400_game",
        "label": "400+ Yard Passing Game",
        "group": "Yardage milestones",
        "type": "game_bonus",
        "points_per_unit": 2,
        "condition": "400 or more passing yards",
        "condition_stat": "pass_yd",
        "threshold": 400
      },
      {
        "key": "combined_200_game",
        "label": "200+ Combined Rush + Rec Yards",
        "group": "Yardage milestones",
        "type": "game_bonus",
        "points_per_unit": 2,
        "condition": "rushing yards plus receiving yards is 200 or more",
        "condition_stat": "rush_yd + rec_yd",
        "threshold": 200
      },
      {
        "key": "pass_25_completions",
        "label": "25+ pass completions",
        "group": "Volume milestones",
        "type": "game_bonus",
        "points_per_unit": 2,
        "condition": "25 or more completions",
        "condition_stat": "pass_completion",
        "threshold": 25
      }
    ]
  },
  "open_questions": []
}
