#!/usr/bin/env python3 """ 所得税テーブルの詳細確認スクリプト 月収356,600円で対応する所得税を確認 """ import sys import os sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'backend')) from decimal import Decimal from datetime import date # テスト用の簡単なクエリシミュレーション sample_rows_3 = [ # (From, To, 扶養3人の税額) (350000, 355000, 5600), (355000, 360000, 5840), # ← 356,600はここに該当するはず (360000, 365000, 6080), (365000, 370000, 6320), ] monthly_income = 356600 dependents_count = 3 print("=== テスト: 月収 356,600円、扶養3人の所得税 ===\n") # ケース1: monthly_income_to > monthly_income 条件 print("[ケース1] WHERE monthly_income_from <= %s AND monthly_income_to > %s") print(f"条件: {monthly_income} >= From AND {monthly_income} < To\n") found = False for from_val, to_val, tax in sample_rows_3: match = from_val <= monthly_income < to_val status = "✓ MATCH" if match else "✗ NO" print(f" {from_val:,} ~ {to_val:,}: {status} (tax={tax})") if match: found = True result = tax if found: print(f"\n✓ 見つかりました: ¥{result}") else: print(f"\n✗ 見つかりませんでした") # ケース2: monthly_income_to >= monthly_income 条件(元の間違ったロジック) print("\n[ケース2(元のバグ)] WHERE monthly_income_from <= %s AND monthly_income_to >= %s") print(f"条件: {monthly_income} >= From AND {monthly_income} <= To\n") matches = [] for from_val, to_val, tax in sample_rows_3: match = from_val <= monthly_income <= to_val status = "✓ MATCH" if match else "✗ NO" print(f" {from_val:,} ~ {to_val:,}: {status} (tax={tax})") if match: matches.append(tax) if matches: print(f"\n✓ 見つかりました: {len(matches)}件") for i, tax in enumerate(matches, 1): print(f" {i}. ¥{tax}") else: print(f"\n✗ 見つかりませんでした") print("\n=== 比較 ===") print("正しいロジック (To > income): 5,840円") print("バグロジック (To >= income): 複数マッチまたはマッチなし") print(f"実際の計算結果: 7,450円 ← これはどこから来ているのか?")