$npx -y skills add kazukinagata/shinkoku --skill income-taxThis skill should be used when the user needs to calculate their income tax (所得税), compute deductions, or import withholding slips. Trigger phrases include: "所得税を計算", "確定申告書を作成", "控除を計算", "源泉徴収票を取り込む", "所得税額", "納付額を計算", "還付額を計算", "第一表", "第二表", "申告書B", "所得控除", "税額控除".
| 1 | # 所得税計算(Income Tax Calculation) |
| 2 | |
| 3 | 事業所得・各種控除から所得税額を計算するスキル。 |
| 4 | settlement スキルで決算書の作成が完了していることを前提とする。 |
| 5 | 計算結果は `/e-tax` スキル(Claude in Chrome)で確定申告書等作成コーナーに入力する。 |
| 6 | |
| 7 | ## 設定の読み込み(最初に実行) |
| 8 | |
| 9 | 1. `shinkoku.config.yaml` を Read ツールで読み込む |
| 10 | 2. ファイルが存在しない場合は `/setup` スキルの実行を案内して終了する |
| 11 | 3. 設定値を把握し、相対パスは CWD を基準に絶対パスに変換する: |
| 12 | - `db_path`: CLI スクリプトの `--db-path` 引数に使用 |
| 13 | - `output_dir`: 進捗ファイル等の出力先ベースディレクトリ |
| 14 | - 各ディレクトリ: ファイル参照時に使用 |
| 15 | |
| 16 | ### パス解決の例 |
| 17 | |
| 18 | config の `db_path` が `./shinkoku.db` で CWD が `/home/user/tax-2025/` の場合: |
| 19 | - `shinkoku tax calc-income --input /home/user/tax-2025/output/income_input.json` |
| 20 | |
| 21 | ## 進捗情報の読み込み |
| 22 | |
| 23 | 設定の読み込み後、引継書ファイルを読み込んで前ステップの結果を把握する。 |
| 24 | |
| 25 | 1. `.shinkoku/progress/progress-summary.md` を Read ツールで読み込む(存在する場合) |
| 26 | 2. 以下の引継書を Read ツールで読み込む(存在する場合): |
| 27 | - `.shinkoku/progress/06-settlement.md` |
| 28 | - `.shinkoku/progress/02-assess.md` |
| 29 | - `.shinkoku/progress/05-furusato.md` |
| 30 | 3. 読み込んだ情報を以降のステップで活用する(ユーザーへの再質問を避ける) |
| 31 | 4. ファイルが存在しない場合はスキップし、ユーザーに必要情報を直接確認する |
| 32 | |
| 33 | ## 基本方針 |
| 34 | |
| 35 | - settlement スキルで青色申告決算書が完成しているか確認してから開始する |
| 36 | - 所得の計算 → 控除の計算 → 税額の計算 の順序で進める |
| 37 | - 各ステップの計算結果をユーザーに提示し、確認を得る |
| 38 | - references/form-b-fields.md の各欄に正しく値を設定する |
| 39 | - 端数処理ルールを厳守する: |
| 40 | - 課税所得: 1,000円未満切捨て(国税通則法118条) |
| 41 | - 復興特別所得税: 1円未満切捨て(復興財源確保法13条) |
| 42 | - ㊺ 所得税及び復興特別所得税の額: 端数処理なし |
| 43 | - 申告納税額(納付の場合のみ): 100円未満切捨て(国税通則法119条) |
| 44 | - 還付金: 1円単位・切捨てなし(国税通則法120条) |
| 45 | |
| 46 | ## 前提条件の確認 |
| 47 | |
| 48 | 所得税計算を開始する前に以下を確認する: |
| 49 | |
| 50 | 1. **青色申告決算書が完成しているか**: settlement スキルの出力を確認する |
| 51 | 2. **納税者プロファイルの読み込み**: `uv run shinkoku profile --config {config_path}` で config から納税者情報を取得する |
| 52 | - 氏名・住所・税務署名 → 確定申告書等作成コーナーへの入力に使用 |
| 53 | - 寡婦/ひとり親・障害者・勤労学生の状態 → 人的控除の計算に使用 |
| 54 | 3. **事業所得以外の所得**: 給与所得・雑所得・配当所得・一時所得等がある場合は情報を収集する |
| 55 | 4. **源泉徴収票**: 給与所得がある場合は取り込みを案内する |
| 56 | 5. **各種控除の適用状況**: 適用可能な控除を網羅的に確認する |
| 57 | 6. **予定納税額**: assess で確認済みの予定納税額を取得する |
| 58 | - 未確認の場合は、前年の確定申告書(㊺欄)から判定する |
| 59 | - 予定納税額は源泉徴収税額とは別に管理する |
| 60 | 7. **分離課税の確認**: 株式・FX の分離課税(第三表)は対象外。該当する場合は税理士への相談を案内する |
| 61 | |
| 62 | ## 必須確認チェックリスト(スキップ不可) |
| 63 | |
| 64 | 所得税計算を開始する前に、以下の項目が**すべて確認済み**であることを検証する。 |
| 65 | config・引継書に記載がない項目は、ユーザーに直接確認してから先に進む。 |
| 66 | |
| 67 | - [ ] **家族構成**: 配偶者の有無・扶養親族の有無を確認済みか? |
| 68 | - 未確認 → ユーザーに確認し、ステップ1.5 で詳細を登録する |
| 69 | - 確認済み(該当なし)→ ステップ1.5 をスキップ可 |
| 70 | - [ ] **住宅ローン控除**: 適用有無を確認済みか? |
| 71 | - 未確認 → ユーザーに確認する |
| 72 | - 適用あり(初年度)→ ステップ3.7 で明細書を作成する |
| 73 | - [ ] **予定納税**: 有無・金額を確認済みか? |
| 74 | - 未確認 → 前年の確定申告書(㊺欄)から判定するようユーザーに確認する |
| 75 | - 金額未確定 → `estimated_tax_payment` パラメータに正しい値を設定できるまで進まない |
| 76 | |
| 77 | ## ステップ1: 源泉徴収票の取り込み |
| 78 | |
| 79 | 給与所得がある場合、源泉徴収票からデータを取り込む。 |
| 80 | |
| 81 | ### `import_data.py import-withholding` の呼び出し |
| 82 | |
| 83 | ```bash |
| 84 | shinkoku import import-withholding --input withholding_input.json |
| 85 | ``` |
| 86 | 入力 JSON: |
| 87 | ```json |
| 88 | { |
| 89 | "file_path": "path/to/withholding_slip.pdf" |
| 90 | } |
| 91 | ``` |
| 92 | 出力: |
| 93 | ```json |
| 94 | { |
| 95 | "payer_name": "支払者名", |
| 96 | "payment_amount": 5000000, |
| 97 | "deduction_amount": 3560000, |
| 98 | "income_tax_withheld": 100000, |
| 99 | "social_insurance": 700000, |
| 100 | "life_insurance": 50000, |
| 101 | "spouse_deduction": 0 |
| 102 | } |
| 103 | ``` |
| 104 | |
| 105 | #### 画像ファイルの場合: OCR 読み取り |
| 106 | |
| 107 | `extracted_text` が空の場合(画像ファイルまたはスキャン PDF)、画像の読み取りは `/reading-withholding` スキルを使用する。 |
| 108 | スキルの指示に従い、デュアル検証(2つの独立した読み取り結果の照合)を行って結果を取得する。 |
| 109 | |
| 110 | **結果照合:** 両方の読み取り結果から `payment_amount`, `withheld_tax`, `social_insurance` を比較する |
| 111 | |
| 112 | **一致の場合:** そのまま採用。「2つの独立した読み取りで結果が一致しました」と報告 |
| 113 | |
| 114 | **不一致の場合:** ユーザーに元画像パスと両方の結果を提示し、正しい方を選択してもらう: |
| 115 | - 差異のあるフィールドを明示する |
| 116 | - A を採用 / B を採用 / 手動入力 の3択を AskUserQuestion で提示する |
| 117 | |
| 118 | **取り込み後の検算(必須):** |
| 119 | |
| 120 | OCR 結果の整合性を検証するため、「所得控除の額の合計額」と各内訳の合計を照合する: |
| 121 | |
| 122 | ``` |
| 123 | 検算: 所得控除の額の合計額 ≟ 社会保険料等の金額 ← 小規模企業共済等掛金を含む(内数) |
| 124 | + 生命保険料の控除額 |
| 125 | + 地震保険料の控除額 |
| 126 | + 配偶者(特別)控除の額 |
| 127 | + 扶養控除額 ← 人数×単価から算出(特定63万/老人48万or58万/その他38万) |
| 128 | + 障害者控除 ← 人数×単価から算出(一般27万/特別40万/同居特別75万) |
| 129 | + 寡婦控除(27万)またはひとり親控除(35万) ← 該当時 |
| 130 | + 勤労学生控除(27万) ← 該当時 |
| 131 | + 基礎控除の額 ← 源泉徴収票の記載額を使用。未記載なら所得と年度から算出 |
| 132 | ``` |
| 133 | |
| 134 | 注意: |
| 135 | - 「(うち小規模企業共済等掛金の額)」は社会保険料等の金額の**内数**。別途加算すると二重計上になる |
| 136 | - 扶養控除・障害者控除は金額欄ではなく人数欄で記載されるため、人数×単価で算出する |
| 137 | - 基礎控除の額は源泉徴収票に記載があればその値を使う。未記載の場合は合計所得と年度に応じて算出する(令和7・8年は特例加算あり、令和9年以降は一律58万) |
| 138 | |
| 139 | - **一致の場合:** 各フィールドの OCR 精度が確認できたものとして採用する |
| 140 | - **不一致の場合:** 差額を明示し、どのフィールドが誤読の可能性があるかユーザーに提示する。元画像と突き合わせて修正する |
| 141 | |
| 142 | **その他の確認事項:** |
| 143 | |
| 144 | 1. 複数の勤務先がある場合は各社分を取り込む |
| 145 | 2. 年末調整済みの控除を確認し、追加控除の有無を判定する |
| 146 | |
| 147 | ## ステップ1.5: 扶養親族・配偶者情報の確認 |
| 148 | |
| 149 | 所得控除の計算前に、扶養親族の情報を収集する。 |
| 150 | まず DB に登録済みのデータを確認し、不足があれば追加入力する。 |
| 151 | |
| 152 | ### DB からの読み込み |
| 153 | |
| 154 | 1. `ledger.py get-spouse --db-path DB_PATH` で配偶者情報を取得する(登録済みの場合) |
| 155 | 2. `ledger.py list-dependents --db-path DB_PATH` で扶養親族のリストを取得する(登録済みの場合) |
| 156 | |
| 157 | ### 未登録の場合の確認項目 |
| 158 | |
| 159 | 1. **配偶者**: 配偶者の有無と年間所得金額を確認する |
| 160 | - 所得48万円以下 → 配偶者控除(38万円) |
| 161 | - 所得48万円超133万円以下 → 配偶者特別控除(段階的) |
| 162 | - 納税者の所得が1,000万円超 → 配偶者控除なし |
| 163 | - 確認後 `ledger.py set-spouse --db-path DB_PATH --input spouse.json` で DB に登録する |
| 164 | |
| 165 | 2. **扶養親族**: 以下の情報を収集する |
| 166 | - 氏名、続柄、生年月日、年間所得、障害の有無、同居の有無 |
| 167 | - 16歳未満: 扶養控除なし(児童手当対象) |
| 168 | - 16歳以上: 一般扶養38万円 |
| 169 | - 19歳以上23歳未満: 特定扶養63万円 |
| 170 | - 70歳以上: 老人扶養48万円(同居58万円 |