Paper Dynasty Card Creation - Baseball card generation system
Go to file
Cal Corum a20348ef7d Fix switch hitter detection for Rollins, Posada, and all switch hitters
Two bugs were preventing switch hitters from being correctly identified:

1. Missing handedness indicator in player names
   - Player names need special characters appended (* for left, # for switch)
   - new_player_payload() now appends '#' for switch hitters

2. Overly strict threshold in get_bat_hand()
   - Required 10+ total PAs to classify as switch hitter
   - Now correctly identifies ANY player who batted from both sides as 'S'
   - Removes arbitrary PA threshold that caused misclassification

Impact: Fixes Jimmie Rollins and Jorge Posada showing as 'R' instead of 'S'
       Applies to all switch hitters in retrosheet-based cardsets

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 16:04:33 -06:00
.claude Code stabilization & retrosheet functionality 2025-11-08 16:57:35 -06:00
batters CLAUDE: Add default OPS constants and type hints to improve code clarity 2025-10-31 23:28:49 -05:00
card-output August '23 PotM Cards 2023-09-07 13:14:15 -05:00
data-input Code stabilization & retrosheet functionality 2025-11-08 16:57:35 -06:00
defenders CLAUDE: Make -6 and -5 arm ratings exceptionally rare 2025-11-09 13:38:20 -06:00
html work fielding and batting functional 2023-09-24 18:58:44 -05:00
logs intro run for 05 Live 2025-11-10 15:02:28 -06:00
pitchers CLAUDE: Add Retrosheet CSV transformer and fix data processing issues 2025-11-08 16:11:52 -06:00
scouting intro run for 05 Live 2025-11-10 15:02:28 -06:00
scripts CLAUDE: Fix outfield position assignment bug and add validation script 2025-11-09 11:38:36 -06:00
tests CLAUDE: Extract rarity cost adjustment logic into data-driven function 2025-10-31 22:49:35 -05:00
.gitignore Batter stat generation complete 2024-10-19 01:05:23 -05:00
analyze_cardset_rarity.py CLAUDE: Add S3 upload script and cardset analysis tools 2025-11-09 06:11:16 -06:00
automated_data_fetcher.py Claude introduction & Live Series Update 2025-07-22 09:24:34 -05:00
batter-deltas.csv intro run for 05 Live 2025-11-10 15:02:28 -06:00
batting_stats.csv Code stabilization & retrosheet functionality 2025-11-08 16:57:35 -06:00
check_cards_and_upload.py intro run for 05 Live 2025-11-10 15:02:28 -06:00
check_cards.py Claude introduction & Live Series Update 2025-07-22 09:24:34 -05:00
check_cardset_rarity.py Code stabilization & retrosheet functionality 2025-11-08 16:57:35 -06:00
CLAUDE.md CLAUDE: Fix DH showing on cards for players with defensive positions 2025-11-09 11:48:36 -06:00
creation_helpers.py CLAUDE: Add default OPS constants and type hints to improve code clarity 2025-10-31 23:28:49 -05:00
db_calls_card_creation.py Consolidated db preparation 2023-09-07 13:14:32 -05:00
db_calls.py intro run for 05 Live 2025-11-10 15:02:28 -06:00
exceptions.py Migrate to rotating file logger 2024-11-10 14:42:12 -06:00
live_series_update.py Code stabilization & retrosheet functionality 2025-11-08 16:57:35 -06:00
new-batters.csv intro run for 05 Live 2025-11-10 15:02:28 -06:00
new-pitchers.csv intro run for 05 Live 2025-11-10 15:02:28 -06:00
pitcher-deltas.csv intro run for 05 Live 2025-11-10 15:02:28 -06:00
pitching_stats.csv intro run for 05 Live 2025-11-10 15:02:28 -06:00
pkmn.json 1996 Data 2024-12-23 09:57:51 -06:00
post_raw_player_csv.py 1996 Data 2024-12-23 09:57:51 -06:00
PROMO_CARD_FIX.md CLAUDE: Refactor to reduce code fragility - extract business logic and add constants 2025-10-31 22:03:22 -05:00
pull_pitching_stats.py Claude introduction & Live Series Update 2025-07-22 09:24:34 -05:00
pybaseball_doodling.py Batter stat generation complete 2024-10-19 01:05:23 -05:00
pytest.ini Moving older scripts into holding cell 2024-10-17 09:28:02 -05:00
rank_pitching_staffs.py CLAUDE: Add S3 upload script and cardset analysis tools 2025-11-09 06:11:16 -06:00
RARITY_BUG_FIX_SUMMARY.md Code stabilization & retrosheet functionality 2025-11-08 16:57:35 -06:00
rarity_thresholds.py Code stabilization & retrosheet functionality 2025-11-08 16:57:35 -06:00
README.txt Migrate db calls to aiohttp 2023-11-19 12:27:40 -06:00
REFACTORING_COMPLETE.md CLAUDE: Add comprehensive documentation for refactoring session 2025-10-31 23:44:32 -05:00
REFACTORING_SUMMARY.md CLAUDE: Refactor to reduce code fragility - extract business logic and add constants 2025-10-31 22:03:22 -05:00
refresh_cards.py Refactor refresh_cards 2025-02-09 01:17:58 -06:00
requirements.txt Claude introduction & Live Series Update 2025-07-22 09:24:34 -05:00
RETROSHEET_2005_MIGRATION.md Code stabilization & retrosheet functionality 2025-11-08 16:57:35 -06:00
retrosheet_data.py Fix switch hitter detection for Rollins, Posada, and all switch hitters 2025-11-11 16:04:33 -06:00
retrosheet_transformer.py CLAUDE: Add Retrosheet CSV transformer and fix data processing issues 2025-11-08 16:11:52 -06:00
retrosheet.db Add retrosheet db 2024-10-17 09:28:59 -05:00
scouting_batters.py Claude introduction & Live Series Update 2025-07-22 09:24:34 -05:00
scouting_pitchers.py Claude introduction & Live Series Update 2025-07-22 09:24:34 -05:00
test_data_fetcher_demo.py Claude introduction & Live Series Update 2025-07-22 09:24:34 -05:00
test_nan_handling.py Code stabilization & retrosheet functionality 2025-11-08 16:57:35 -06:00
validate_negative_values.py intro run for 05 Live 2025-11-10 15:02:28 -06:00











#######
CARD CREATION PROCESS
#######

1) Download stats
    FanGraphs / https://www.fangraphs.com/leaders/splits-leaderboards
    - Batting
        - vL Standard / vlhp-basic.csv
        - vL Batted Balls / vlhp-rate.csv
        - vR Standard / vrhp-basic.csv
        - vR Batted Balls / vrhp-rate.csv
    - Pitching
        - vL Standard / vlhh-basic.csv
        - vL Batted Balls / vlhh-rate.csv
        - vR Standard / vrhh-basic.csv
        - vR Batted Balls / vrhh-rate.csv
    Baseball Reference
    - running.csv
        - https://www.baseball-reference.com/leagues/majors/2023-baserunning-batting.shtml
        - Remove header lines
    - pitching.csv
        - https://www.baseball-reference.com/leagues/majors/2023-standard-pitching.shtml
2) Run Card Updates (Python Configuration)
3) Check Card Validity (Python Configuration)



























#######
OLD DATA REQUIREMENTS
#######

- Add any new players to players.csv for import
- Create directory in /data-input in format `XXXX Season Cardset`
- Upload the following csv files:
    - baserunning-data.csv
        - https://www.baseball-reference.com/leagues/majors/2023-baserunning-batting.shtml
        - Remove header lines
    - batter-stats.csv
        - https://www.fangraphs.com/leaders/splits-leaderboards
        - Remove header lines
        - 20 PA vL / 40 PA vR for Live || 50 PA vL / 75 PA vR for legacy seasons
    - defense-X.csv (each position)
        - https://www.baseball-reference.com/leagues/majors/2023-specialpos_p-fielding.shtml
        - replace the `p` in `p-fielding` with 1b/2b/lf
        - Column Changes (pre-2013)
            - Catchers: add column between Rgood and RsbC
            - 1b/2b/3b/ss: add 3 columns between Rgood and Rbnt
    - defense-of.csv (don't forget combined OF)
        - https://www.baseball-reference.com/leagues/majors/2023-specialpos_of-fielding.shtml
        - replace the `p` in `p-fielding` with of
    - pitcher-data.csv
        - https://www.baseball-reference.com/leagues/majors/2023-standard-pitching.shtml
    - pitcher-stats.csv
        - https://www.fangraphs.com/leaders/splits-leaderboards
        - Remove header lines
        - 20 TBF vL / 40 TBF vR for Live || 50 TBF vL / 75 TBF vR for legacy seasons

#######
OLD CARD CREATION PROCESS
#######

1) Import new players for sba_id with `1. Import Players`
2) Confirm cardset exists; if not, create now
3) Create cards with `3. Card Creation`
4) Generate csv output with `4. Card Output`
5) Upload output files into Sheets for Component Studio import
6) Upload ratings output files into Sheets for PD Ratings Guide
7) Import cards into Component Studio
8) Export -> Download All from Component Studio
9) Rename image files to <first>.<last>.png