diff --git a/backend/app/config/common_x_check_tables.py b/backend/app/config/common_x_check_tables.py index 186f2f9..ef3888d 100644 --- a/backend/app/config/common_x_check_tables.py +++ b/backend/app/config/common_x_check_tables.py @@ -161,16 +161,256 @@ CF_ERROR_CHART: dict[int, dict[str, List[int]]] = { } # Infield Error Charts -# TODO: Add P, C, 1B, 2B, 3B, SS error charts -# Structure same as OF charts above -# Placeholder for now - to be filled with actual data +# Note: Infield charts do not use E3 (unlike outfield charts) +# Structure: same as OF but E3 is always empty -PITCHER_ERROR_CHART: dict[int, dict[str, List[int]]] = {} # TODO -CATCHER_ERROR_CHART: dict[int, dict[str, List[int]]] = {} # TODO -FIRST_BASE_ERROR_CHART: dict[int, dict[str, List[int]]] = {} # TODO -SECOND_BASE_ERROR_CHART: dict[int, dict[str, List[int]]] = {} # TODO -THIRD_BASE_ERROR_CHART: dict[int, dict[str, List[int]]] = {} # TODO -SHORTSTOP_ERROR_CHART: dict[int, dict[str, List[int]]] = {} # TODO +# Catcher Error Chart +CATCHER_ERROR_CHART: dict[int, dict[str, List[int]]] = { + 0: {'RP': [5], 'E1': [], 'E2': [], 'E3': []}, + 1: {'RP': [5], 'E1': [17], 'E2': [], 'E3': []}, + 2: {'RP': [5], 'E1': [3, 17, 18], 'E2': [], 'E3': []}, + 3: {'RP': [5], 'E1': [3, 16, 10], 'E2': [], 'E3': []}, + 4: {'RP': [5], 'E1': [16, 17], 'E2': [18], 'E3': []}, + 5: {'RP': [5], 'E1': [4, 16, 17], 'E2': [18], 'E3': []}, + 6: {'RP': [5], 'E1': [14], 'E2': [18], 'E3': []}, + 7: {'RP': [5], 'E1': [3, 15, 16], 'E2': [18], 'E3': []}, + 8: {'RP': [5], 'E1': [6, 15], 'E2': [18], 'E3': []}, + 9: {'RP': [5], 'E1': [3, 13], 'E2': [18], 'E3': []}, + 10: {'RP': [5], 'E1': [12], 'E2': [18], 'E3': []}, + 11: {'RP': [5], 'E1': [3, 11], 'E2': [18], 'E3': []}, + 12: {'RP': [5], 'E1': [6, 15, 16, 17], 'E2': [3, 18], 'E3': []}, + 13: {'RP': [5], 'E1': [4, 6, 15, 16, 17], 'E2': [3, 18], 'E3': []}, + 14: {'RP': [5], 'E1': [12, 16, 17], 'E2': [3, 18], 'E3': []}, + 15: {'RP': [5], 'E1': [11, 15], 'E2': [3, 18], 'E3': []}, + 16: {'RP': [5], 'E1': [7, 14, 16, 17], 'E2': [3, 18], 'E3': []}, +} + +# First Base Error Chart +FIRST_BASE_ERROR_CHART: dict[int, dict[str, List[int]]] = { + 0: {'RP': [5], 'E1': [], 'E2': [], 'E3': []}, + 1: {'RP': [5], 'E1': [17, 18], 'E2': [], 'E3': []}, + 2: {'RP': [5], 'E1': [3, 16, 18], 'E2': [], 'E3': []}, + 3: {'RP': [5], 'E1': [3, 15], 'E2': [18], 'E3': []}, + 4: {'RP': [5], 'E1': [14], 'E2': [18], 'E3': []}, + 5: {'RP': [5], 'E1': [14, 17], 'E2': [18], 'E3': []}, + 6: {'RP': [5], 'E1': [3, 13], 'E2': [18], 'E3': []}, + 7: {'RP': [5], 'E1': [3, 9], 'E2': [18], 'E3': []}, + 8: {'RP': [5], 'E1': [6, 15, 16, 17], 'E2': [3, 18], 'E3': []}, + 9: {'RP': [5], 'E1': [7, 14, 17], 'E2': [3, 18], 'E3': []}, + 10: {'RP': [5], 'E1': [11, 15], 'E2': [3, 18], 'E3': []}, + 11: {'RP': [5], 'E1': [6, 8, 15], 'E2': [3, 18], 'E3': []}, + 12: {'RP': [5], 'E1': [6, 9, 15], 'E2': [3, 18], 'E3': []}, + 13: {'RP': [5], 'E1': [11, 13], 'E2': [17], 'E3': []}, + 14: {'RP': [5], 'E1': [3, 9, 12], 'E2': [17], 'E3': []}, + 15: {'RP': [5], 'E1': [7, 12, 14], 'E2': [17], 'E3': []}, + 16: {'RP': [5], 'E1': [3, 11, 12, 16], 'E2': [17], 'E3': []}, + 17: {'RP': [5], 'E1': [3, 6, 11, 12], 'E2': [17], 'E3': []}, + 18: {'RP': [5], 'E1': [11, 12, 14], 'E2': [17], 'E3': []}, + 19: {'RP': [5], 'E1': [10, 11, 15, 16], 'E2': [17, 18], 'E3': []}, + 20: {'RP': [5], 'E1': [6, 10, 11, 15], 'E2': [17, 18], 'E3': []}, + 21: {'RP': [5], 'E1': [3, 9, 10, 12], 'E2': [17, 18], 'E3': []}, + 22: {'RP': [5], 'E1': [7, 11, 12, 14], 'E2': [17, 18], 'E3': []}, + 23: {'RP': [5], 'E1': [10, 11, 12, 16], 'E2': [17, 18], 'E3': []}, + 24: {'RP': [5], 'E1': [11, 12, 13, 14], 'E2': [3, 17, 18], 'E3': []}, + 25: {'RP': [5], 'E1': [9, 11, 12, 14], 'E2': [3, 17, 18], 'E3': []}, + 26: {'RP': [5], 'E1': [9, 12, 13, 14, 15], 'E2': [3, 17, 18], 'E3': []}, + 27: {'RP': [5], 'E1': [7, 8, 11, 13, 14], 'E2': [3, 17, 18], 'E3': []}, + 28: {'RP': [5], 'E1': [7, 11, 12, 13, 14], 'E2': [3, 17, 18], 'E3': []}, + 29: {'RP': [5], 'E1': [9, 10, 11, 12, 17], 'E2': [16], 'E3': []}, + 30: {'RP': [5], 'E1': [10, 11, 12, 13, 15, 18], 'E2': [16], 'E3': []}, +} + +# Second Base Error Chart +SECOND_BASE_ERROR_CHART: dict[int, dict[str, List[int]]] = { + 0: {'RP': [5], 'E1': [], 'E2': [], 'E3': []}, + 1: {'RP': [5], 'E1': [18], 'E2': [], 'E3': []}, + 2: {'RP': [5], 'E1': [3, 18], 'E2': [], 'E3': []}, + 3: {'RP': [5], 'E1': [3, 17], 'E2': [], 'E3': []}, + 4: {'RP': [5], 'E1': [3, 17], 'E2': [18], 'E3': []}, + 5: {'RP': [5], 'E1': [16], 'E2': [18], 'E3': []}, + 6: {'RP': [5], 'E1': [3, 16], 'E2': [18], 'E3': []}, + 8: {'RP': [5], 'E1': [16, 17], 'E2': [18], 'E3': []}, + 10: {'RP': [5], 'E1': [4, 16, 17], 'E2': [18], 'E3': []}, + 11: {'RP': [5], 'E1': [15, 17], 'E2': [18], 'E3': []}, + 12: {'RP': [5], 'E1': [15, 17], 'E2': [3, 18], 'E3': []}, + 13: {'RP': [5], 'E1': [14], 'E2': [3, 18], 'E3': []}, + 14: {'RP': [5], 'E1': [15, 16], 'E2': [3, 18], 'E3': []}, + 15: {'RP': [5], 'E1': [14, 17], 'E2': [3, 18], 'E3': []}, + 16: {'RP': [5], 'E1': [15, 16, 17], 'E2': [3, 18], 'E3': []}, + 17: {'RP': [5], 'E1': [6, 15], 'E2': [3, 18], 'E3': []}, + 18: {'RP': [5], 'E1': [13], 'E2': [3, 18], 'E3': []}, + 19: {'RP': [5], 'E1': [6, 15, 17], 'E2': [3, 18], 'E3': []}, + 20: {'RP': [5], 'E1': [3, 13, 18], 'E2': [17], 'E3': []}, + 21: {'RP': [5], 'E1': [4, 13], 'E2': [17], 'E3': []}, + 22: {'RP': [5], 'E1': [12, 18], 'E2': [17], 'E3': []}, + 23: {'RP': [5], 'E1': [11], 'E2': [17], 'E3': []}, + 24: {'RP': [5], 'E1': [11, 18], 'E2': [17], 'E3': []}, + 25: {'RP': [5], 'E1': [3, 11, 18], 'E2': [17], 'E3': []}, + 26: {'RP': [5], 'E1': [13, 15], 'E2': [17], 'E3': []}, + 27: {'RP': [5], 'E1': [13, 15, 18], 'E2': [17], 'E3': []}, + 28: {'RP': [5], 'E1': [3, 13, 15], 'E2': [17, 18], 'E3': []}, + 29: {'RP': [5], 'E1': [3, 11, 16], 'E2': [17, 18], 'E3': []}, + 30: {'RP': [5], 'E1': [12, 15], 'E2': [17, 18], 'E3': []}, + 32: {'RP': [5], 'E1': [11, 15], 'E2': [17, 18], 'E3': []}, + 34: {'RP': [5], 'E1': [12, 14], 'E2': [17, 18], 'E3': []}, + 37: {'RP': [5], 'E1': [11, 15, 18], 'E2': [3, 17, 18], 'E3': []}, + 39: {'RP': [5], 'E1': [12, 13], 'E2': [3, 17, 18], 'E3': []}, + 41: {'RP': [5], 'E1': [11, 13], 'E2': [3, 17, 18], 'E3': []}, + 44: {'RP': [5], 'E1': [9, 12, 18], 'E2': [16], 'E3': []}, + 47: {'RP': [5], 'E1': [7, 12, 14], 'E2': [16], 'E3': []}, + 50: {'RP': [5], 'E1': [11, 13, 15, 18], 'E2': [16], 'E3': []}, + 53: {'RP': [5], 'E1': [11, 12, 15], 'E2': [16, 18], 'E3': []}, + 56: {'RP': [5], 'E1': [6, 12, 13, 15], 'E2': [16, 18], 'E3': []}, + 59: {'RP': [5], 'E1': [6, 11, 13, 15], 'E2': [3, 16, 18], 'E3': []}, + 62: {'RP': [5], 'E1': [6, 11, 12, 15], 'E2': [3, 16, 18], 'E3': []}, + 65: {'RP': [5], 'E1': [7, 12, 13, 14], 'E2': [3, 16, 18], 'E3': []}, + 68: {'RP': [5], 'E1': [10, 11, 12], 'E2': [16, 17], 'E3': []}, + 71: {'RP': [5], 'E1': [11, 12, 13, 15], 'E2': [16, 17], 'E3': []}, +} + +# Third Base Error Chart +THIRD_BASE_ERROR_CHART: dict[int, dict[str, List[int]]] = { + 0: {'RP': [5], 'E1': [], 'E2': [], 'E3': []}, + 1: {'RP': [5], 'E1': [3], 'E2': [18], 'E3': []}, + 2: {'RP': [5], 'E1': [3, 4], 'E2': [18], 'E3': []}, + 3: {'RP': [5], 'E1': [3, 4], 'E2': [17], 'E3': []}, + 4: {'RP': [5], 'E1': [3, 16], 'E2': [17], 'E3': []}, + 5: {'RP': [5], 'E1': [15], 'E2': [17], 'E3': []}, + 6: {'RP': [5], 'E1': [4, 15], 'E2': [17], 'E3': []}, + 8: {'RP': [5], 'E1': [3, 15, 16], 'E2': [17, 18], 'E3': []}, + 10: {'RP': [5], 'E1': [13], 'E2': [3, 17, 18], 'E3': []}, + 11: {'RP': [5], 'E1': [6, 15, 17], 'E2': [16], 'E3': []}, + 12: {'RP': [5], 'E1': [12], 'E2': [16], 'E3': []}, + 13: {'RP': [5], 'E1': [11], 'E2': [16, 18], 'E3': []}, + 14: {'RP': [5], 'E1': [3, 4, 14, 15], 'E2': [16, 18], 'E3': []}, + 15: {'RP': [5], 'E1': [13, 15], 'E2': [3, 16, 18], 'E3': []}, + 16: {'RP': [5], 'E1': [4, 7, 14], 'E2': [3, 16, 18], 'E3': []}, + 17: {'RP': [5], 'E1': [12, 15], 'E2': [16, 17], 'E3': []}, + 18: {'RP': [5], 'E1': [3, 11, 15], 'E2': [16, 17], 'E3': []}, + 19: {'RP': [5], 'E1': [7, 14, 16, 17], 'E2': [15], 'E3': []}, + 20: {'RP': [5], 'E1': [11, 14], 'E2': [15], 'E3': []}, + 21: {'RP': [5], 'E1': [6, 11, 16], 'E2': [15, 18], 'E3': []}, + 22: {'RP': [5], 'E1': [12, 14, 16], 'E2': [15, 18], 'E3': []}, + 23: {'RP': [5], 'E1': [11, 13], 'E2': [3, 15, 18], 'E3': []}, + 24: {'RP': [5], 'E1': [9, 12], 'E2': [3, 15, 18], 'E3': []}, + 25: {'RP': [5], 'E1': [6, 8, 13], 'E2': [15, 17], 'E3': []}, + 26: {'RP': [5], 'E1': [10, 11], 'E2': [15, 17], 'E3': []}, + 27: {'RP': [5], 'E1': [9, 12, 16], 'E2': [15, 17, 18], 'E3': []}, + 28: {'RP': [5], 'E1': [11, 13, 15], 'E2': [14], 'E3': []}, + 29: {'RP': [5], 'E1': [9, 12, 15], 'E2': [14], 'E3': []}, + 30: {'RP': [5], 'E1': [6, 8, 13, 15], 'E2': [14, 18], 'E3': []}, + 31: {'RP': [5], 'E1': [10, 11, 15], 'E2': [14, 18], 'E3': []}, + 32: {'RP': [5], 'E1': [11, 13, 14, 17], 'E2': [15, 16, 18], 'E3': []}, + 33: {'RP': [5], 'E1': [8, 11, 13], 'E2': [15, 16, 18], 'E3': []}, + 34: {'RP': [5], 'E1': [6, 9, 12, 15], 'E2': [14, 17], 'E3': []}, + 35: {'RP': [5], 'E1': [11, 12, 13], 'E2': [14, 17], 'E3': []}, + 37: {'RP': [5], 'E1': [9, 11, 12], 'E2': [15, 16, 17], 'E3': []}, + 39: {'RP': [5], 'E1': [7, 9, 12, 14, 18], 'E2': [6, 15], 'E3': []}, + 41: {'RP': [5], 'E1': [10, 11, 12, 16], 'E2': [13], 'E3': []}, + 44: {'RP': [5], 'E1': [4, 11, 12, 13, 14], 'E2': [6, 15, 17], 'E3': []}, + 47: {'RP': [5], 'E1': [8, 9, 11, 12], 'E2': [13, 17], 'E3': []}, + 50: {'RP': [5], 'E1': [9, 10, 11, 12], 'E2': [14, 15, 18], 'E3': []}, + 53: {'RP': [5], 'E1': [6, 8, 9, 10, 11], 'E2': [13, 16], 'E3': []}, + 56: {'RP': [5], 'E1': [8, 9, 10, 15, 14, 17], 'E2': [3, 11, 18], 'E3': []}, + 59: {'RP': [5], 'E1': [4, 7, 9, 10, 11, 12], 'E2': [13, 15], 'E3': []}, + 62: {'RP': [5], 'E1': [7, 8, 9, 10, 11, 14], 'E2': [12, 16, 18], 'E3': []}, + 65: {'RP': [5], 'E1': [7, 8, 9, 10, 12, 13], 'E2': [11, 16, 18], 'E3': []}, +} + +# Shortstop Error Chart +SHORTSTOP_ERROR_CHART: dict[int, dict[str, List[int]]] = { + 0: {'RP': [5], 'E1': [], 'E2': [], 'E3': []}, + 1: {'RP': [5], 'E1': [18], 'E2': [], 'E3': []}, + 2: {'RP': [5], 'E1': [3, 18], 'E2': [], 'E3': []}, + 3: {'RP': [5], 'E1': [17], 'E2': [], 'E3': []}, + 4: {'RP': [5], 'E1': [17], 'E2': [18], 'E3': []}, + 5: {'RP': [5], 'E1': [3, 17], 'E2': [18], 'E3': []}, + 6: {'RP': [5], 'E1': [16], 'E2': [18], 'E3': []}, + 7: {'RP': [5], 'E1': [3, 16], 'E2': [18], 'E3': []}, + 8: {'RP': [5], 'E1': [16, 17], 'E2': [18], 'E3': []}, + 10: {'RP': [5], 'E1': [6, 17], 'E2': [3, 18], 'E3': []}, + 12: {'RP': [5], 'E1': [15], 'E2': [3, 18], 'E3': []}, + 14: {'RP': [5], 'E1': [4, 15], 'E2': [17], 'E3': []}, + 16: {'RP': [5], 'E1': [14], 'E2': [17], 'E3': []}, + 17: {'RP': [5], 'E1': [15, 16], 'E2': [17], 'E3': []}, + 18: {'RP': [5], 'E1': [15, 16, 18], 'E2': [17], 'E3': []}, + 19: {'RP': [5], 'E1': [4, 14], 'E2': [17], 'E3': []}, + 20: {'RP': [5], 'E1': [4, 15, 16], 'E2': [17], 'E3': []}, + 21: {'RP': [5], 'E1': [6, 15], 'E2': [17], 'E3': []}, + 22: {'RP': [5], 'E1': [6, 15], 'E2': [17, 18], 'E3': []}, + 23: {'RP': [5], 'E1': [3, 13], 'E2': [17, 18], 'E3': []}, + 24: {'RP': [5], 'E1': [4, 6, 15], 'E2': [17, 18], 'E3': []}, + 25: {'RP': [5], 'E1': [4, 13], 'E2': [17, 18], 'E3': []}, + 26: {'RP': [5], 'E1': [12], 'E2': [17, 18], 'E3': []}, + 27: {'RP': [5], 'E1': [3, 12], 'E2': [17, 18], 'E3': []}, + 28: {'RP': [5], 'E1': [6, 15, 16], 'E2': [3, 17, 18], 'E3': []}, + 29: {'RP': [5], 'E1': [11], 'E2': [3, 17, 18], 'E3': []}, + 30: {'RP': [5], 'E1': [4, 12], 'E2': [3, 17, 18], 'E3': []}, + 31: {'RP': [5], 'E1': [4, 6, 15, 16], 'E2': [3, 17, 18], 'E3': []}, + 32: {'RP': [5], 'E1': [13, 15], 'E2': [3, 17, 18], 'E3': []}, + 33: {'RP': [5], 'E1': [13, 15], 'E2': [16], 'E3': []}, + 34: {'RP': [5], 'E1': [13, 15, 18], 'E2': [16], 'E3': []}, + 36: {'RP': [5], 'E1': [13, 15, 17], 'E2': [16], 'E3': []}, + 38: {'RP': [5], 'E1': [13, 14], 'E2': [16], 'E3': []}, + 40: {'RP': [5], 'E1': [11, 15], 'E2': [16, 18], 'E3': []}, + 42: {'RP': [5], 'E1': [12, 14], 'E2': [16, 18], 'E3': []}, + 44: {'RP': [5], 'E1': [8, 13], 'E2': [16, 18], 'E3': []}, + 48: {'RP': [5], 'E1': [6, 12, 15], 'E2': [3, 18, 18], 'E3': []}, + 52: {'RP': [5], 'E1': [11, 13, 18], 'E2': [16, 17], 'E3': []}, + 56: {'RP': [5], 'E1': [11, 12, 18], 'E2': [16, 17], 'E3': []}, + 60: {'RP': [5], 'E1': [7, 11, 14], 'E2': [15], 'E3': []}, + 64: {'RP': [5], 'E1': [6, 9, 12], 'E2': [15, 18], 'E3': []}, + 68: {'RP': [5], 'E1': [9, 12, 14], 'E2': [15, 18], 'E3': []}, + 72: {'RP': [5], 'E1': [6, 11, 13, 15], 'E2': [4, 16, 17], 'E3': []}, + 76: {'RP': [5], 'E1': [9, 12, 13], 'E2': [15, 17], 'E3': []}, + 80: {'RP': [5], 'E1': [4, 11, 12, 13], 'E2': [15, 17], 'E3': []}, + 84: {'RP': [5], 'E1': [10, 11, 12], 'E2': [3, 15, 17], 'E3': []}, + 88: {'RP': [5], 'E1': [9, 11, 12, 16], 'E2': [14], 'E3': []}, +} + +# Pitcher Error Chart +PITCHER_ERROR_CHART: dict[int, dict[str, List[int]]] = { + 0: {'RP': [5], 'E1': [], 'E2': [], 'E3': []}, + 4: {'RP': [5], 'E1': [14], 'E2': [18], 'E3': []}, + 6: {'RP': [5], 'E1': [3, 13], 'E2': [18], 'E3': []}, + 7: {'RP': [5], 'E1': [3, 12], 'E2': [18], 'E3': []}, + 8: {'RP': [5], 'E1': [6, 15, 16, 17], 'E2': [3, 18], 'E3': []}, + 10: {'RP': [5], 'E1': [11, 15], 'E2': [3, 18], 'E3': []}, + 11: {'RP': [5], 'E1': [12, 15, 16], 'E2': [3, 18], 'E3': []}, + 12: {'RP': [5], 'E1': [6, 12, 15], 'E2': [3, 18], 'E3': []}, + 13: {'RP': [5], 'E1': [11, 13], 'E2': [17], 'E3': []}, + 14: {'RP': [5], 'E1': [7, 13, 14], 'E2': [17], 'E3': []}, + 15: {'RP': [5], 'E1': [4, 11, 12], 'E2': [17], 'E3': []}, + 16: {'RP': [5], 'E1': [4, 9, 12, 16], 'E2': [17], 'E3': []}, + 17: {'RP': [5], 'E1': [3, 6, 11, 12], 'E2': [17], 'E3': []}, + 18: {'RP': [5], 'E1': [11, 12, 14], 'E2': [17], 'E3': []}, + 19: {'RP': [5], 'E1': [6, 9, 12, 15], 'E2': [17, 18], 'E3': []}, + 20: {'RP': [5], 'E1': [6, 10, 11, 15], 'E2': [17, 18], 'E3': []}, + 21: {'RP': [5], 'E1': [7, 11, 13, 14], 'E2': [17, 18], 'E3': []}, + 22: {'RP': [5], 'E1': [8, 12, 13, 14], 'E2': [17, 18], 'E3': []}, + 23: {'RP': [5], 'E1': [10, 11, 12, 16], 'E2': [17, 18], 'E3': []}, + 24: {'RP': [5], 'E1': [10, 11, 12, 15], 'E2': [17, 18], 'E3': []}, + 26: {'RP': [5], 'E1': [9, 12, 13, 14, 15], 'E2': [3, 17, 18], 'E3': []}, + 27: {'RP': [5], 'E1': [10, 11, 12, 13], 'E2': [3, 17, 18], 'E3': []}, + 28: {'RP': [5], 'E1': [9, 10, 11, 12], 'E2': [3, 17, 18], 'E3': []}, + 30: {'RP': [5], 'E1': [3, 10, 11, 12, 13, 15], 'E2': [16], 'E3': []}, + 31: {'RP': [5], 'E1': [10, 11, 12, 13, 14], 'E2': [16], 'E3': []}, + 33: {'RP': [5], 'E1': [3, 8, 10, 11, 12, 13], 'E2': [16], 'E3': []}, + 34: {'RP': [5], 'E1': [9, 10, 11, 12, 13], 'E2': [16, 18], 'E3': []}, + 35: {'RP': [5], 'E1': [9, 10, 11, 12, 14, 15], 'E2': [16, 18], 'E3': []}, + 36: {'RP': [5], 'E1': [3, 4, 6, 7, 9, 10, 11, 12], 'E2': [16, 18], 'E3': []}, + 38: {'RP': [5], 'E1': [6, 8, 10, 11, 12, 13, 15], 'E2': [16, 18], 'E3': []}, + 39: {'RP': [5], 'E1': [6, 7, 8, 9, 10, 12, 13], 'E2': [3, 16, 18], 'E3': []}, + 40: {'RP': [5], 'E1': [4, 6, 9, 10, 11, 12, 13, 15], 'E2': [3, 16, 18], 'E3': []}, + 42: {'RP': [5], 'E1': [7, 9, 10, 11, 12, 13, 14], 'E2': [3, 16, 18], 'E3': []}, + 43: {'RP': [5], 'E1': [6, 7, 8, 9, 10, 12, 13, 14], 'E2': [3, 16, 18], 'E3': []}, + 44: {'RP': [5], 'E1': [3, 7, 8, 9, 10, 11, 12, 13], 'E2': [16, 17], 'E3': []}, + 46: {'RP': [5], 'E1': [6, 8, 9, 10, 11, 12, 13, 15], 'E2': [16, 17, 18], 'E3': []}, + 47: {'RP': [5], 'E1': [7, 8, 9, 10, 11, 12, 13, 15], 'E2': [16, 17, 18], 'E3': []}, + 48: {'RP': [5], 'E1': [7, 8, 9, 10, 11, 12, 13, 14], 'E2': [16, 17, 18], 'E3': []}, + 50: {'RP': [5], 'E1': [7, 8, 9, 10, 11, 12, 13, 14], 'E2': [15, 17], 'E3': []}, + 51: {'RP': [5], 'E1': [7, 8, 9, 10, 11, 12, 13, 14], 'E2': [15, 16], 'E3': []}, +} # ============================================================================ # HOLDING RUNNER RESPONSIBILITY CHART diff --git a/backend/tests/unit/config/test_x_check_tables.py b/backend/tests/unit/config/test_x_check_tables.py index e82c06c..cd66042 100644 --- a/backend/tests/unit/config/test_x_check_tables.py +++ b/backend/tests/unit/config/test_x_check_tables.py @@ -137,14 +137,22 @@ class TestErrorCharts: assert 'E2' in chart assert 'E3' in chart - def test_infield_error_charts_are_placeholder(self): - """Infield error charts should be empty placeholders for now.""" - assert len(PITCHER_ERROR_CHART) == 0 - assert len(CATCHER_ERROR_CHART) == 0 - assert len(FIRST_BASE_ERROR_CHART) == 0 - assert len(SECOND_BASE_ERROR_CHART) == 0 - assert len(THIRD_BASE_ERROR_CHART) == 0 - assert len(SHORTSTOP_ERROR_CHART) == 0 + def test_infield_error_charts_complete(self): + """Infield error charts should now have data (Phase 3B completed).""" + # Verify all infield charts now have data (not empty placeholders) + assert len(PITCHER_ERROR_CHART) > 0 + assert len(CATCHER_ERROR_CHART) > 0 + assert len(FIRST_BASE_ERROR_CHART) > 0 + assert len(SECOND_BASE_ERROR_CHART) > 0 + assert len(THIRD_BASE_ERROR_CHART) > 0 + assert len(SHORTSTOP_ERROR_CHART) > 0 + + # Verify structure matches outfield charts (has E3 even if empty) + for rating_dict in CATCHER_ERROR_CHART.values(): + assert 'RP' in rating_dict + assert 'E1' in rating_dict + assert 'E2' in rating_dict + assert 'E3' in rating_dict def test_error_rating_0_has_minimal_errors(self): """Error rating 0 should have fewest error opportunities."""