#!/usr/bin/env python3 """ 扶養人数の検索ロジック検証 日本の所得税表では、扶養人数が多いほど税額が低くなります。 しかし、「3人」という記録が、実際には「3人以上」を意味しているかもしれません。 """ # 仮想的な所得税テーブルの状態 sample_table = [ # (From, To, 扶養人数, 税額) (355000, 360000, 0, 7450), # ← もしかしてこれが使われている? (355000, 360000, 1, 6700), (355000, 360000, 2, 6100), (355000, 360000, 3, 5840), # ← これが正しい (355000, 360000, 999, 3500), # または「3以上」という意味で大きい番号を使用? ] monthly_income = 356600 dependents_count = 3 print("=== 扶養人数の検索ロジック検証 ===\n") print(f"検索条件: 月収 {monthly_income:,}, 扶養人数 {dependents_count}\n") # シナリオ1: 完全一致検索 print("[シナリオ1] WHERE dependents_count = %s") matches = [tax for from_v, to_v, dep, tax in sample_table if from_v <= monthly_income < to_v and dep == dependents_count] print(f"マッチ数: {len(matches)}") for tax in matches: print(f" → ¥{tax}") # シナリオ2: >= 検索(3人以上は3人の行を使う) print("\n[シナリオ2] WHERE dependents_count <= %s (DESC)") matches = [tax for from_v, to_v, dep, tax in sample_table if from_v <= monthly_income < to_v and dep <= dependents_count] matches_sorted = sorted(matches, reverse=True) print(f"マッチ数: {len(matches_sorted)}") for tax in matches_sorted[:3]: print(f" → ¥{tax}") # シナリオ3: テーブルに0人の行が検索される場合 print("\n[シナリオ3] もし扶養人数3が見つからず、0が返される場合") for from_v, to_v, dep, tax in sample_table: if from_v <= monthly_income < to_v and dep == 0: print(f" → ¥{tax} (0人扶養の税額が使用される)") print("\n=== 推察 ===") print("実際に 7,450円 が計算されているということは...") print("1. 扶養人数が 0 人として計算されている可能性") print("2. または、テーブルの月収範囲の定義が異なる可能性") print("3. または、複数の条件で検索されて、意図しない行が使用されている可能性")