53 lines
2.2 KiB
Python
53 lines
2.2 KiB
Python
#!/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. または、複数の条件で検索されて、意図しない行が使用されている可能性")
|