---
id: sm-e-tax
name: "e-tax"
url: https://skills.yangsir.net/skill/sm-e-tax
author: kazukinagata
domain: finance
tags: ["e-tax", "tax-declaration", "financial-compliance", "digital-tax-filing", "tax-software"]
install_count: 296
rating: 4.10 (20 reviews)
github: https://github.com/kazukinagata/shinkoku
---

# e-tax

> 此技能用于用户通过 Claude 在 Chrome、Antigravity Browser Sub-Agent 或 Playwright CLI (备用) 访问確定申告書等作成コーナー (NTA Tax Return Preparation Corner) 进行电子报税。它指导在浏览器中输入计算好的税务数据。触发短语

**Stats**: 296 installs · 4.1/5 (20 reviews)

## Before / After 对比

### 电子税务申报效率与准确性对比

| Metric | Before | After | Change |
|---|---|---|---|
| - | - | - | - |
| - | - | - | - |
| - | - | - | - |

## Readme

# e-Tax 電子申告 — ブラウザ自動化による確定申告書等作成コーナー入力

shinkoku で計算した確定申告データを、確定申告書等作成コーナー（https://www.keisan.nta.go.jp/）に
Claude in Chrome を使ってブラウザ上で入力・提出するためのスキル。

## 前提条件

- `/income-tax` スキルで所得税の計算が完了していること
- `/settlement` スキルで決算書（PL/BS）の作成が完了していること
- `/consumption-tax` スキルで消費税の計算が完了していること（該当者のみ）
- `shinkoku.config.yaml` が設定済みであること
- **ブラウザ自動化ツール**がいずれか利用可能であること（下記「ブラウザ自動化方式の選択」参照）

## ブラウザ自動化方式の選択

確定申告書等作成コーナーへの入力には、以下の3つの方式がある。

### 方式 A: Claude in Chrome（推奨）

| 項目 | 内容 |
|-----|------|
| 対象環境 | Windows / macOS のネイティブ Chrome |
| 前提 | Claude in Chrome 拡張機能がインストール済み |
| 利点 | OS 検出の問題なし。追加設定不要 |

### 方式 B: Antigravity Browser Sub-Agent

| 項目 | 内容 |
|-----|------|
| 対象環境 | Windows / macOS / Linux（Antigravity IDE） |
| 前提 | Antigravity IDE がインストール済みで `browser_subagent` ツールが利用可能 |
| 利点 | ネイティブ Chrome を使用するため OS 偽装不要。Linux でも動作 |

### 方式 C: Playwright CLI（フォールバック）

| 項目 | 内容 |
|-----|------|
| 対象環境 | WSL / Linux、または Claude in Chrome・Antigravity が利用できない環境 |
| 前提 | `@playwright/cli` + Playwright CLI スキル + `etax-stealth.js`（OS 偽装スクリプト） |
| 制限 | headed モード必須（QR コード認証に物理操作が必要） |

### 判定ロジック

```
1. Claude in Chrome のツール（browser_navigate 等）が利用可能か？
   → はい: 方式 A を使用
   → いいえ: 次へ

2. Antigravity の browser_subagent ツールが利用可能か？
   → はい: 方式 B を使用
   → いいえ: 次へ

3. Bash ツールで `playwright-cli` コマンドが利用可能か？
   → はい: 方式 C を使用（headed モードで起動）
   → いいえ: エラー表示

   エラーメッセージ:
   「確定申告書等作成コーナーへの入力には、Claude in Chrome、
    Antigravity Browser Sub-Agent、または Playwright CLI が必要です。
    セットアップ方法は README.md の『ブラウザ自動化』セクションを参照してください。」
```

### 方式 B 使用時の操作方法

Antigravity の `browser_subagent` は高レベルなタスク記述で操作する。
各ステップの入力操作を自然言語で記述し、`browser_subagent` に委任する。

例:
- 「https://www.keisan.nta.go.jp/kyoutu/ky/sm/top_web#bsctrl を開く」
- 「『マイナンバーカードをお持ちですか』で『はい』のラジオボタンをクリック」
- 「name='sonekiKeisansyoFromMonth' の入力欄に '1' を入力」

※ Antigravity はネイティブ Chrome を使用するため、`etax-stealth.js` による OS 偽装は不要。

### 方式 C 使用時のセッション開始手順

Playwright CLI でブラウザを開く際の手順:

1. 環境変数を設定: `PLAYWRIGHT_MCP_INIT_SCRIPT=skills/e-tax/scripts/etax-stealth.js`
2. ブラウザ起動: `playwright-cli -s=etax open <url> --headed --browser=chrome`
3. 以降のコマンドは `-s=etax` セッション指定で実行

## 設定の読み込み（最初に実行）

1. `shinkoku.config.yaml` を Read ツールで読み込む
2. ファイルが存在しない場合は `/setup` スキルの実行を案内して終了する
3. 設定値を把握する:
   - 納税者プロファイル（氏名・住所・マイナンバー等）
   - 事業情報（屋号・業種等）
   - 申告方法（e-Tax/郵送/窓口）

## 進捗情報の読み込み

1. `.shinkoku/progress/progress-summary.md` を Read ツールで読み込む（存在する場合）
2. 以下の引継書を Read ツールで読み込む（存在する場合）:
   - `.shinkoku/progress/06-settlement.md` — 決算結果（PL/BS データ）
   - `.shinkoku/progress/07-income-tax.md` — 所得税計算結果
   - `.shinkoku/progress/08-consumption-tax.md` — 消費税計算結果
   - `.shinkoku/progress/02-assess.md` — 課税判定結果
3. `.shinkoku/progress/10-etax.md` の `status` を確認する:
   - `status: interrupted` の場合 → 下記「中断・再開プロトコル」の **再開手順** に従う
   - `status: completed` の場合 → ユーザーに完了済みである旨を伝え、再実行の意図を確認する
4. 計算結果がまだ存在しない場合は、先に `/income-tax` や `/settlement` の実行を案内する

## 中断・再開プロトコル

全ステップ共通のルール。ユーザーが中断を要求した場合（「中断したい」「今日はここまで」「また続きから」等）、以下の手順に従う。

### 中断手順

1. **現在のステップの入力内容を確認する** — 未保存の入力がないか確認
2. **.data ファイルのダウンロードを案内する** — AskUserQuestion で以下を表示:

```
作成コーナーの入力データを .data ファイルとして保存することを推奨します。
画面上部の「入力データの一時保存」ボタン（またはページ下部の「ここまでの入力データを保存する」リンク）
をクリックし、ファイルをダウンロードしてください。

ダウンロードが完了したら「ダウンロード済み」を選択してください。
```

- 選択肢: 「ダウンロード済み」 / 「スキップ（保存しない）」
- 「スキップ」が選ばれた場合は、次回は最初からやり直しになる可能性がある旨を警告する

3. **進捗ファイルを記録する** — `.shinkoku/progress/10-etax.md` に以下の形式で Write ツールで出力:

```
---
step: 10
skill: e-tax
status: interrupted
last_completed_step: "{最後に完了したステップ番号（例: 3）}"
last_url: "{中断時のブラウザURL}"
data_file_saved: {true/false}
interrupted_at: "{当日日付 YYYY-MM-DD}"
fiscal_year: {tax_year}
---

# e-Tax 電子申告（中断）

## 中断時点の状況

- 最後に完了したステップ: ステップ{N}
- 中断時のURL: {URL}
- .data ファイル保存: {済/未}

## 次回の再開方法

1. `/e-tax` スキルを再実行する
2. .data ファイルがある場合は「保存データを利用して作成」から再開する
3. .data ファイルがない場合はステップ0からやり直す
```

4. **ユーザーに中断完了を報告** — 次回の再開方法を案内して終了する

### 再開手順

`.shinkoku/progress/10-etax.md` で `status: interrupted` を検出した場合:

1. 中断時の情報（`last_completed_step`, `data_file_saved`）を読み取る
2. AskUserQuestion で以下を表示:

```
前回の e-Tax 入力はステップ{N}で中断されています。

再開方法を選択してください。
```

- 選択肢:
  - 「.data ファイルから再開する」（`data_file_saved: true` の場合のみ表示）
  - 「最初からやり直す」
  - 「中断記録を破棄して終了する」

3. **.data ファイルから再開する場合**:
   - 確定申告書等作成コーナーのトップページにアクセス
   - 「保存データを利用して作成」→「作成再開」を選択
   - `.data` ファイルのアップロードを案内
   - 読み込み完了後、`last_completed_step` の次のステップから再開する

4. **最初からやり直す場合**:
   - ステップ0 から通常通り開始する

## ステップ0: 必須データの検証

確定申告書等作成コーナーへの入力に必要なデータが揃っているか検証する。

### 検証項目

```
[1] 税額計算済み
    - .shinkoku/progress/07-income-tax.md が存在し、status: completed であること

[2] プロファイル完備
    - 氏名（姓・名）が登録されているか
    - 住所が登録されているか
    - 所轄税務署名が登録されているか

[3] 決算書データ
    - PL/BS の計算結果が取得可能であること

[4] 消費税（該当者のみ）
    - .shinkoku/progress/08-consumption-tax.md が存在し、status: completed であること

[5] サニティチェック
    - `tax_calc.py sanity-check` を実行する
    - error > 0 の場合: 入力を中止し、`/income-tax` スキルで修正を促す
    - warning > 0 の場合: ユーザーに確認してから続行する
```

---

## 画面遷移フロー全体像

```
┌─────────────────────────────────────────────────────┐
│ CC-AA-010 税務署への提出方法の選択                      │
│   マイナンバーカード: はい → スマホ: はい               │
│   → 「スマートフォンを使用する」                        │
└──────────────┬──────────────────────────────────────┘
               ▼
┌─────────────────────────────────────────────────────┐
│ CC-AE-090 作成する申告書等の選択                        │
│   「決算書・収支内訳書（＋所得税）」を選択              │
│   → doSubmitCMW0900(2,'25')                           │
│                                                         │
│   ※ 消費税のみ別途作成する場合:                        │
│   → doSubmitCMW0900(3,'25')                           │
└──────────────┬──────────────────────────────────────┘
               ▼
┌─────────────────────────────────────────────────────┐
│ CC-AE-600 マイナポータル連携の選択                      │
│   → 「マイナポータル連携を利用しない」                  │
└──────────────┬──────────────────────────────────────┘
               ▼
┌─────────────────────────────────────────────────────┐
│ CC-AA-024 e-Taxを行う前の確認                           │
│   → 「利用規約に同意して次へ」                          │
└──────────────┬──────────────────────────────────────┘
               ▼
┌─────────────────────────────────────────────────────┐
│ CC-AA-440 QRコード認証                                  │
│   ★ ユーザーの物理的認証が必要                         │
│   スマートフォンでQRコード読み取り                      │
│   → マイナンバーカード認証完了後、自動遷移              │
└──────────────┬──────────────────────────────────────┘
               ▼
       ┌───────┴───────┐
       ▼               ▼
  決算書コーナー    所得税コーナー
  (事業所得あり)    (給与のみ等)
```

### 決算書コーナーのフロー

```
/kessan/ac/r7/top → ac0300（種類選択）→ aa0200（P/L入力）
  → aa0100（青色特別控除）→ preAoiroCalc（B/S入力）
  → aa0700（所得確認）→ ac0500（住所氏名）→ 印刷/保存
  → 所得税コーナーへ遷移
```

### 所得税コーナーのフロー

```
SS-AA-010a（所得選択）→ SS-AA-050（収入入力ハブ）
  → SS-CA-010（給与入力） / SS-CB-xxx（事業所得） / 雑所得
  → SS-AA-070a（控除1/2）→ SS-AA-080（控除2/2）
  → SS-AA-090（計算結果確認）
  → SS-AC-010a（納付方法）→ SS-AC-020a（住民税等）
  → SS-AC-030（基本情報）→ SS-AC-040（マイナンバー）
  → ステップ5.5（意思決定ゲート）→ ステップ6（電子署名・送信プロトコル）
```

### 消費税コーナーのフロー（所得税完了後）

```
所得税完了 → 「消費税の申告書作成はこちら」

2割特例:
  ac0100(条件判定) → ac0250(所得区分選択) → 売上入力hub → 売上入力detail
  → 売上入力hub → 中間納付 → ac0300(計算結果) → 納税地等
  → ステップ6.5（電子署名・送信プロトコル）

簡易課税:
  ac0100(条件判定) → ac0250(所得区分・事業区分選択) → 売上入力hub → 売上入力detail
  → 売上入力hub → ak2140(仕入税額控除方式選択)※ → 中間納付 → ac0300(計算結果)
  → 納税地等 → ステップ6.5（電子署名・送信プロトコル）
  ※ 2種以上の事業がある場合のみ

一般課税:
  ac0100(条件判定) → ac0250(所得区分選択) → 売上・仕入入力hub → 売上入力detail
  → ai3610(決算額テーブル)※ → 売上・仕入入力hub → 中間納付 → ac0300(計算結果)
  → 納税地等 → ステップ6.5（電子署名・送信プロトコル）
  ※ 積上げ計算選択時のみ
```

---

## ステップ1: 確定申告書等作成コーナーへのアクセス

### 開始URL

**https://www.keisan.nta.go.jp/kyoutu/ky/sm/top_web#bsctrl**

### CC-AA-010: 税務署への提出方法の選択

画面番号: CC-AA-010

1. 「マイナンバーカードをお持ちですか」→ **「はい」** ラジオボタンをクリック
2. 「マイナンバーカード読み取りに対応したスマートフォン又はICカードリーダライタをお持ちですか」→ **「はい」** をクリック
3. **「スマートフォンを使用する」** をクリック
   - JS: `doSubmitCSW0100('1','3','/ky/sm/csw0100_myno_qr')`

### CC-AE-090: 作成する申告書等の選択

画面番号: CC-AE-090

選択肢（令和7年分）:
- **所得税** → `doSubmitCMW0900(1,'25')`
- **決算書・収支内訳書（＋所得税）** → `doSubmitCMW0900(2,'25')` ← 事業所得ありの場合
- **消費税** → `doSubmitCMW0900(3,'25')`
- **贈与税** → `doSubmitCMW0900(4,'25')`

**判断基準**:
- 事業所得あり → 「決算書・収支内訳書（＋所得税）」
- 事業所得なし（給与のみ等）→ 「所得税」
- 消費税は所得税完了後に別途作成

### CC-AE-600: マイナポータル連携の選択

→ **「マイナポータル連携を利用しない」** をクリック

### CC-AA-024: e-Taxを行う前の確認

→ **「利用規約に同意して次へ」** をクリック

※ 環境チェック `termnalInfomationCheckOS_myNumberLinkage()` が実行される。
Windows/macOS の Chrome/Edge であれば問題なし。

### CC-AA-440: QRコード認証

**★ ユーザー操作待ち — ブラウザ操作を一時停止**

この画面ではエージェントがブラウザを操作してはならない。
**AskUserQuestion ツールで一時停止**し、ユーザーが認証完了を報告するまで**絶対に次のステップに進まない**こと。

AskUserQuestion で以下を表示する:

```
QRコード認証画面が表示されました。
スマートフォンのマイナポータルアプリでQRコードを読み取り、
マイナンバーカードで認証してください。

認証が完了したら「認証完了」を選択してください。
```

- 選択肢: 「認証完了」 / 「QRコードが表示されない」
- 「QRコードが表示されない」が選ばれた場合は下記の ⚠️ Playwright CLI 使用時の注意 を参照して対処する
- **ユーザーが「認証完了」を選択するまで、一切のブラウザ操作・画面遷移を行わない**

認証完了後、自動的に次の画面に遷移する。

**⚠️ Playwright CLI 使用時の注意**: `PLAYWRIGHT_MCP_INIT_SCRIPT` 環境変数で `etax-stealth.js` を指定することで
サーバーベイク関数パッチが自動適用されるが、QR コードが表示されない場合はコンソールで `getClientOS()` の
戻り値を確認し、`'Windows'` でなければ以下を手動実行する:
```javascript
window.getClientOS = function() { return 'Windows'; };
displayQrcode();
```

---

## ステップ2: 青色申告決算書の入力（事業所得がある場合）

> ⚠️ **ネイティブダイアログ注意**: 「次へ」クリック後に画面が遷移しない場合、ネイティブダイアログ（alert/confirm）が表示されている可能性がある。技術的な知見の「ネイティブダイアログの検知と対処」を参照。

### /kessan/ac/pre/ac0300: 決算書の種類選択

ラジオボタン:
- **青色申告決算書** ← 青色申告の場合
- 収支内訳書（白色申告の場合）
- 青色申告決算書（現金主義用）

### /kessan/ac/aa0200: 損益計算書（P/L）の入力

URL: `https://www.keisan.nta.go.jp/kessan/ac/aa0200#bsctrl`

#### 期間の入力

| フィールド | name | デフォルト |
|-----------|------|-----------|
| 開始月 | `sonekiKeisansyoFromMonth` | 1 |
| 開始日 | `sonekiKeisansyoFromDay` | 1 |
| 終了月 | `sonekiKeisansyoToMonth` | 12 |
| 終了日 | `sonekiKeisansyoToDay` | 31 |

#### 売上（収入）金額

「入力」ボタン → `/kessan/ac/aa0201` 売上仕入月別入力サブページに遷移。

aa0201 のフィールド:
- `uriageKingaku1`〜`uriageKingaku12`: 月別売上
- `siireKingaku1`〜`siireKingaku12`: 月別仕入
- `kajisyohi`: 家事消費等
- `zatusyunyu`: 雑収入

合計: `uriageKingakuGokei`, `siireKingakuGokei`

#### 経費（行8〜31）

| 行 | 科目 | name（直接入力） | 備考 |
|----|------|-------------------|------|
| 8 | 租税公課 | `sozeiKoka` | |
| 9 | 荷造運賃 | `nidukuriUntin` | |
| 10 | 水道光熱費 | `suidoKonetuhi` | |
| 11 | 旅費交通費 | `ryohiKotuhi` | |
| 12 | 通信費 | `tusinhi` | |
| 13 | 広告宣伝費 | `kokokuSendenhi` | |
| 14 | 接待交際費 | `settaiKosaihi` | |
| 15 | 損害保険料 | `songaiHokenryo` | |
| 16 | 修繕費 | `syuzenhi` | |
| 17 | 消耗品費 | `syomohinhi` | |
| 18 | 減価償却費 | — | 「入力」→ `/kessan/ac/init/aa0203` |
| 19 | 福利厚生費 | `fukuriKoseihi` | |
| 20 | 給料賃金 | — | 「入力」→ `/kessan/ac/aa0205` |
| 21 | 外注工賃 | `gaichukotin` | |
| 22 | 利子割引料 | — | 「入力」→ `/kessan/ac/aa0206` |
| 23 | 地代家賃 | — | 「入力」→ `/kessan/ac/aa0207` |
| 24 | 貸倒金 | `kasidaorekin` | |
| 25 | 税理士等の報酬 | `keihiNiniKingaku1` | 科目名: `keihiNiniKamoku1` |
| 26 | 震災関連経費 | `keihiNiniKingaku2` | 科目名: `keihiNiniKamoku2` |
| 27-30 | 任意科目 | `keihiNiniKingaku3`〜`6` | 科目名: `keihiNiniKamoku3`〜`6` |
| 31 | 雑費 | `zappi` | |

集計 hidden フィールド: `keihiSannyugakuGokei`, `kyuryoTinginTotalGokei`, `risiWaribikiryoGokei`, `tidaiYatinGokei`

#### 繰戻額等

- `kurimodosiNiniKamoku1`/`kurimodosiNiniKingaku1`
- `kurimodosiNiniKamoku2`/`kurimodosiNiniKingaku2`

#### 専従者給与

- `senjusyaKyuyoTotalGokei` (hidden、「入力」ボタンで別画面)
- `kasidaoreKuriireGokei` (hidden)

#### 計算結果（自動）

- `disp_aoiroKojomaeSyotokuKingaku` = 売上 - 売上原価 - 経費 + 繰戻額 - 専従者給与等

### /kessan/ac/submit/aa0100: 青色申告特別控除

Q&A形式で控除額を選択:

| 選択肢 | value | 条件 |
|--------|-------|------|
| 10万円 | 2 | |
| 55万円 | 3 | |
| 65万円 | 1 | **e-Tax送信が必須**。書面提出ではエラー KS-E10089 |

フィールド: `aoiroTokubetuKojoSentakugaku`

65万円を選択する場合、電子帳簿保存または e-Tax 送信が条件。

> ⚠️ **ネイティブダイアログ注意**: 65万円を選択して次へ進むと、書面提出の場合は **KS-E10089**（e-Tax送信が必要）のネイティブダイアログが表示される。画面が遷移しない場合はダイアログの有無をユーザーに確認すること。

### 貸借対照表（B/S）の入力

URL: `/kessan/ac/preAoiroCalc`

#### 資産の部

配列形式: `sisannobuTaisyohyoDetailDataList[N].kisyuKingaku` / `.kimatuKingaku`

| index | 勘定科目 |
|-------|----------|
| 0 | 現金 |
| 1 | 当座預金 |
| 2 | 定期預金 |
| 3 | その他の預金 |
| 4 | 受取手形 |
| 5 | 売掛金 |
| 6 | 有価証券 |
| 7 | 棚卸資産 |
| 8 | 前払金 |
| 9 | 貸付金 |
| 10 | 建物 |
| 11 | 建物附属設備 |
| 12 | 機械装置 |
| 13 | 車両運搬具 |
| 14 | 工具器具備品 |
| 15 | 土地 |
| 16-23 | 任意科目 |

#### 負債・資本の部

配列形式: `fusainobuTaisyohyoDetailDataList[N].kisyuKingaku` / `.kimatuKingaku`

| index | 勘定科目 |
|-------|----------|
| 0 | 支払手形 |
| 1 | 買掛金 |
| 2 | 借入金 |
| 3 | 未払金 |
| 4 | 前受金 |
| 5 | 預り金 |
| 6 | 貸倒引当金 |
| 7-15 | 任意科目 |
| 16 | 元入金 |
| 17 | 事業主借 |
| 18 | 事業主貸 |
| 19 | 青色申告特別控除前の所得金額（P/Lから自動） |

**重要**: 資産期末合計 = 負債期末合計 が必須（KS-E40003）

> ⚠️ **ネイティブダイアログ注意**: 資産期末合計と負債期末合計が一致しない状態で「次へ」を押すと、**KS-E40003** のネイティブダイアログが表示される。画面が遷移しない場合はダイアログの有無をユーザーに確認すること。

### /kessan/ac/ac0500: 住所・氏名等の入力

| フィールド | name |
|-----------|------|
| 郵便番号 | `jitakuZip` |
| 都道府県 | `jitakuPrefectureId` |
| 市区町村以下 | `jitakuAddress` |
| 事業所住所（該当者） | `jimusyoAddress` |
| 提出先税務署 | `zeimusyoName` |
| 氏名漢字（姓） | `nameKanjiSei` |
| 氏名漢字（名） | `nameKanjiMei` |
| 業種名 | `gyosyuName` |
| 屋号 | `yago` |
| 提出年月日 | `teisyutuYear`/`teisyutuMonth`/`teisyutuDay` |

### 決算書完了 → 所得税コーナーへ

印刷・データ保存画面（`/kessan/ac/submit/ac0600`）の
「所得税の申告書作成はこちら」ボタンで所得税コーナーに遷移（住所氏名引継ぎ）。

> ⚠️ **ネイティブダイアログ注意**: このボタンをクリックすると **KS-W10035**（印刷を確認したか）のネイティブダイアログが表示される場合がある。画面が遷移しない場合はダイアログの有無をユーザーに確認し、「OK」をクリックするよう案内すること。

---

## ステップ3: 所得税の申告書入力

> ⚠️ **ネイティブダイアログ注意**: 「次へ」クリック後に画面が遷移しない場合、ネイティブダイアログ（alert/confirm）が表示されている可能性がある。技術的な知見の「ネイティブダイアログの検知と対処」を参照。

### SS-AA-010a: 申告する所得の選択等

URL: `https://www.keisan.nta.go.jp/r7/syotoku/taM010a40_doInitialDisplay#bbctrl`

#### 生年月日

| フィールド | name |
|-----------|------|
| 年 | `inOutDto.shnkkBirthymdYy` |
| 月 | `inOutDto.shnkkBirthymdMm` |
| 日 | `inOutDto.shnkkBirthymdDd` |

#### 所得種類の選択（チェックボックス）

| 所得 | name | 典型的な選択 |
|------|------|-------------|
| 給与 | `inOutDto.kyuy` | 会社員: checked |
| 事業（営業等） | `inOutDto.jgyoEgyoTo` | 個人事業主: checked |
| 事業（農業） | `inOutDto.jgyoNogyo` | |
| 不動産 | `inOutDto.fdosn` | |
| 雑（業務・その他） | `inOutDto.ztsGyomSnt` | 暗号資産等: checked |
| 公的年金等 | `inOutDto.kotkNnknKgyoNnknEtc` | |
| 退職金 | `inOutDto.tasyku` | |
| 株式等 | `inOutDto.hatoKbshkJyotRsh` | |
| 先物取引 | `inOutDto.skmnTrhk` | |
| 一時 | `inOutDto.ichj` | |

**shinkoku 対象の典型パターン**:
- 会社員＋副業（事業所得）: `kyuy` + `jgyoEgyoTo` + `ztsGyomSnt`（暗号資産あれば）
- 給与所得のみ: `kyuy`

### SS-AA-050: 収入・所得の入力ハブ

選択した所得種類ごとに入力リンクが表示される。各リンクをクリックして個別入力画面へ遷移。

### SS-CA-010: 給与所得の源泉徴収票の入力

> **物理的な源泉徴収票との対応**: 年末調整済みと年末調整未済で**別フォーム・別ラベル体系**。
> 年末調整済み = A〜L（12項目）、年末調整未済 = A〜E（5項目）。
> 物理的な源泉徴収票の「給与所得控除後の金額」「所得控除の額の合計額」欄は、
> 年末調整済みフォームでは入力不要だが、年末調整未済フォームでは B(自動)・C(入力) として存在する。

#### 年末調整済みフォーム

URL: `https://www.keisan.nta.go.jp/r7/syotoku/taS510a10_doAdd_nncyzm#bbctrl`

##### 主要入力フィールド

| ラベル | name | 備考 |
|--------|------|------|
| A: 支払金額 | `inOutDto.shhraKngk` | 必須 |
| B: 源泉徴収税額 | `inOutDto.gnsnTyosyuZegk` | 2段記載時は下段 |
| E: 社会保険料等の金額 | `inOutDto.sykaHknryoToKngk` | |
| K: 支払者の住所 | `inOutDto.shhrasyJysyKysyOrSyzach` | 28文字以内 |
| L: 支払者の氏名又は名称 | `inOutDto.shhrasyNameOrMesyo` | 28文字以内 |

##### ラジオボタン（記載有無の選択）

| フィールド | ラベル | name | 値 |
|-----------|--------|------|-----|
| 控除対象配偶者の記載 | C | `inOutDto.kojyTashoHagsyKsaUm` | 1(あり)/2(なし) |
| 控除対象扶養親族の記載 | D | `inOutDto.kojyTashoFyoShnzkKsaUm` | 1(あり)/2(なし) |
| 生命保険料控除額の記載 | F※ | `inOutDto.semeHknryoKojygkKsaUm` | 1(あり)/2(なし) |
| 地震保険料控除額の記載 | G※ | `inOutDto.jshnHknryoKojygkKsaUm` | 1(あり)/2(なし) |
| 住宅借入金等特別控除額の記載 | H※ | `inOutDto.jyutkKrirknToTkbtsKojyGkKsaUm` | 1(あり)/0(なし) |
| 所得金額調整控除額の記載 | I※ | `inOutDto.sytkKngkTyoseKojygkKsaUm` | 1(あり)/0(なし) |
| 本人が障害者・寡婦等 | J※ | `inOutDto.hnninSygsyKfHtriyKnroGkseKsaUm` | 1(あり)/2(なし) |

> ※ F〜J のラベルはフォーム上の並び順からの推定（スクリーンショット未確認）

##### 条件付きフィールド（ラジオ/チェックで「記載あり」選択時に表示）

| ラベル | name | 表示条件 |
|--------|------|----------|
| B': 源泉徴収税額（内書き） | `inOutDto.gnsnTyosyuZegkUchgk` | チェック時 |
| 社会保険料等（内書き） | `inOutDto.sykaHknryoToUchgk` | チェック時 |
| 生命保険料控除額 | `inOutDto.semeHknryoKojygk` | F「記載あり」時 |
| 新生命保険料金額 | `inOutDto.shnSemeHknryoKngk` | F「記載あり」時 |
| 旧生命保険料金額 | `inOutDto.kyuSemeHknryoKngk` | F「記載あり」時 |
| 介護医療保険料金額 | `inOutDto.kagIryoHknryoKngk` | F「記載あり」時 |
| 新個人年金保険料金額 | `inOutDto.shnKjnNnknHknryoKngk` | F「記載あり」時 |
| 旧個人年金保険料金額 | `inOutDto.kyuKjnNnknHknryoKngk` | F「記載あり」時 |
| 地震保険料控除額 | `inOutDto.jshnHknryoKojygk` | G「記載あり」時 |
| 旧長期損害保険料金額 | `inOutDto.kyuCyokSngaHknryoKngk` | G「記載あり」時 |
| H: 住宅借入金等特別控除額 | `inOutDto.jyutkKrirknToTkbtsKojyGk` | H「記載あり」時 |
| H': 住宅借入金等特別控除可能額 | `inOutDto.jyutkKrirknToTkbtsKojyknoGk` | H「記載あり」時 |
| H'': 住宅借入金年末残高1回目 | `inOutDto.jyutkKrirknToNnmtszndkIkkam` | H「記載あり」時 |
| H''': 住宅借入金年末残高2回目 | `inOutDto.jyutkKrirknToNnmtszndkNkam` | チェック時 |
| 寡婦チェック | `inOutDto.ksaArKforkf` | J「記載あり」時 |
| 勤労学生チェック | `inOutDto.ksaArKnroGkse` | J「記載あり」時 |

#### 年末調整未済フォーム

URL: 要確認

##### 入力フィールド

| ラベル | name | 備考 |
|--------|------|------|
| A: 支払金額 | `inOutDto.shhraKngk` | 必須 |
| B: 給与所得控除後の金額 | （自動計算） | 入力不可。A から自動算出 |
| C: 所得控除の額の合計額 | 要確認 | **入力欄あり。源泉徴収票に記載があれば入力** |
| D: 源泉徴収税額 | `inOutDto.gnsnTyosyuZegk` | |
| E: 住宅借入金等特別控除額 | `inOutDto.jyutkKrirknToTkbtsKojyGk` | |

### SS-AA-070a: 控除の入力（1/2）— 支出系控除

入力リンクのハブ画面。各控除をクリックして個別入力画面に遷移。

対応控除:
- 社会保険料控除（源泉徴収票入力済みの場合「入力あり」表示）
- 小規模企業共済等掛金控除（iDeCo等）
- 生命保険料控除
- 地震保険料控除
- 雑損控除・災害減免
- 医療費控除
- 寄附金控除（ふるさと納税含む — ワンストップ特例分も要入力）

### SS-AA-080: 控除の入力（2/2）— 人的控除・住宅控除等

対応控除:
- 配偶者（特別）控除
- 扶養控除・特定親族特別控除
- 寡婦・ひとり親控除
- 勤労学生控除
- 障害者控除
- 基礎控除（自動計算表示）
- 住宅借入金等特別控除
- 住宅耐震改修特別控除等
- 予定納税額
- 繰越損失額

### SS-AA-090: 計算結果の確認

入力内容から計算された所得税額の確認画面。

表示項目:
- 収入金額・所得金額（所得種類別）
- 所得控除合計
- 課税される所得金額（1,000円未満切捨て）
- 上記に対する税額（速算表適用）
- 差引所得税額
- 復興特別所得税額（基準所得税額の2.1%）
- 所得税及び復興特別所得税の額
- 源泉徴収税額
- 申告納税額（100円未満切捨て）/ 還付される税金

**ここで shinkoku の計算結果と照合する**（後述「ステップ5: 申告内容の確認」参照）。

各セクションに「訂正する」ボタンがあり、前画面に戻れる。

### SS-AC-010a: 納付方法等の入力

納付金額が発生した場合に表示。還付の場合は還付口座入力画面（SS-AB-010a）が表示される。

| フィールド | type | name | 備考 |
|-----------|------|------|------|
| 延納を届け出る | checkbox | — | 利子税がかかる旨の注意あり |
| 納付方法 | select | `inOutDto.nofHoho` | 必須 |

納付方法の選択肢:

| value | 方法 |
|-------|------|
| 1 | 振替納税（期限内申告の場合に利用可） |
| 2 | 電子納税（ダイレクト納付/インターネットバンキング） |
| 3 | クレジットカード納付 |
| 5 | コンビニ納付 |
| 6 | 金融機関等での窓口納付 |

還付の場合は還付口座情報の入力:
- 金融機関名、支店名、口座番号、口座名義

### SS-AC-020a: 財産債務・住民税等

住民税に関する設定（給与からの特別徴収 or 自分で納付 等）。

### SS-AC-030: 基本情報の入力

| ラベル | name | 備考 |
|--------|------|------|
| 氏名フリガナ（姓） | `inOutDto.nameKnSe` | 11文字以内 |
| 氏名フリガナ（名） | `inOutDto.nameKnMe` | |
| 氏名漢字（姓） | `inOutDto.nameKnjSe` | 10文字以内 |
| 氏名漢字（名） | `inOutDto.nameKnjMe` | |
| 電話番号（種別） | `inOutDto.rnrkSkKbn` | 自宅/勤務先/携帯 |
| 電話番号（市外） | `inOutDto.shgaKykbn` | |
| 電話番号（市内） | `inOutDto.shnaKykbn` | |
| 電話番号（番号） | `inOutDto.knyusyBngo` | |
| 納税地区分 | `inOutDto.nozeCh` | 1=住所地, 2=事業所等 |
| 郵便番号 | `inOutDto.yubnBngoGnzaAddress` | 7桁 |
| 都道府県 | `inOutDto.tdofknGnzaAddress` | select |
| 市区町村 | `inOutDto.shkcyosnGnzaAddress` | 都道府県連動 select |
| 丁目番地等 | `inOutDto.cyomBnchToGnzaAddress` | 28文字以内 |
| 建物名 | `inOutDto.ttmnMeGoshtsGnzaAddress` | 28文字以内 |
| 提出先税務署（県） | `inOutDto.tesytSkZemsyTdofkn` | select |
| 提出先税務署 | `inOutDto.tesytSkZemsyZemsy` | 県連動 select |
| 職業 | `inOutDto.job` | 11文字以内 |
| 屋号・雅号 | `inOutDto.ygoGgo` | 30文字以内 |
| 世帯主の氏名 | `inOutDto.stanshNameKnj` | |
| 続柄 | `inOutDto.stanshKrTsdkgr` | select |
| 提出年月日 | `inOutDto.tesytYmdYy`/`Mm`/`Dd` | |

### SS-AC-040: マイナンバーの入力

マイナンバー（12桁）を入力する画面。チェックディジットアルゴリズムによる検証あり。

---

## ステップ4: 消費税の申告書入力（該当者のみ）

> ⚠️ **ネイティブダイアログ注意**: 「次へ」クリック後に画面が遷移しない場合、ネイティブダイアログ（alert/confirm）が表示されている可能性がある。技術的な知見の「ネイティブダイアログの検知と対処」を参照。

所得税申告書の完了後、「他の申告書等を作成する」→ `doSubmitCSW0900(3,'25')` で消費税コーナーに遷移。

### ac0100: 条件判定等

URL: `https://www.keisan.nta.go.jp/syouhi/ac0100/submit.htmj#bsctrl`

| フィールド | name | 備考 |
|-----------|------|------|
| 基準期間の課税売上高 | `kijunKazeiUriage` | R5年分 |
| インボイス発行事業者 | `invoice` | true/false |
| 簡易課税制度選択 | `kani` | true/false |
| 経理方式 | `zeikomi` | 税込/税抜 |

#### インボイス=はい の場合に追加表示

| フィールド | name | 備考 |
|-----------|------|------|
| 新たに課税事業者か | `newKazeiJigyosya` | true/false |
| 2割特例を適用するか | `niwariTokurei` | true/false |

#### 一般課税の場合に追加表示

| フィールド | name | 備考 |
|-----------|------|------|
| 仕入税額の計算方法 | `siireKeisanHouhou` | warimodosi/tumiage |

#### 条件判定画面の表示ロジック（基準期間による分岐）

`kijunKazeiUriage`（基準期間の課税売上高）の値によって表示される選択肢が変化する:

| 条件 | 新規課税事業者? | 2割特例? | 簡易課税? |
|------|---------------|---------|---------|
| 基準期間=0, invoice=はい | 表示 | 表示 | 非表示 |
| 基準期間=3,000,000, invoice=はい | 表示 | 表示 | 表示 |
| 基準期間=60,000,000, invoice=はい | 非表示 | 非表示 | 表示 |

**一般課税のみ**: 「税額の計算方法として積上げ計算を選択する方」ボタン（折りたたみセクション内）

#### 分岐ロジック

| 条件 | 遷移先ルート |
|------|-------------|
| インボイス=はい & 2割特例=はい | **2割特例** |
| 簡易課税=はい | **簡易課税** |
| 上記以外 | **一般課税** |

### ac0250: 所得区分の選択

URL: `https://www.keisan.nta.go.jp/syouhi/ac0250/submit.htmj#bsctrl`

該当する所得区分を全て選択する。ヘッダに課税方式（一般課税/簡易課税）と経理方式（税込/税抜）が表示される。

| ラベル | name | 備考 |
|--------|------|------|
| 事業所得（営業等） | `jigyoSyotokuEigyo` | メインターゲット |
| 事業所得（農業） | `jigyoSyotokuNogyo` | |
| 不動産所得 | `fudosanSyotoku` | |
| 雑所得（原稿料等） | `zatuSyotoku` | |
| 業務用固定資産等の譲渡所得 | `jotoSyotoku` | 一般課税のみ表示 |

#### 簡易課税のみ: 事業区分の選択

簡易課税の場合、各所得区分に対して事業区分（第1種〜第6種）のサブ選択がある:

| フィールド | name | 備考 |
|-----------|------|------|
| 事業区分（第1種） | `jigyoSyotokuEigyoJigyoKubun1` | 卸売業 |
| 事業区分（第2種） | `jigyoSyotokuEigyoJigyoKubun2` | 小売業 |
| 事業区分（第3種） | `jigyoSyotokuEigyoJigyoKubun3` | 製造業等 |
| 事業区分（第4種） | `jigyoSyotokuEigyoJigyoKubun4` | その他 |
| 事業区分（第5種） | `jigyoSyotokuEigyoJigyoKubun5` | サービス業等 |
| 事業区分（第6種） | `jigyoSyotokuEigyoJigyoKubun6` | 不動産業 |

#### 一般課税のみ: 業務用固定資産等

| フィールド | name | 備考 |
|-----------|------|------|
| 業務用固定資産等の購入がある | `gyomuyosisanKonyu` | checkbox |

### 売上入力（全ルート共通フォーム）

URL パターン:
- 2割特例: `/syouhi/at3600/inputEigyo.htmj`
- 簡易課税: `/syouhi/ak3600/inputEigyo.htmj`
- 一般課税: `/syouhi/ai3600/inputEigyo.htmj`

| フィールド | name | 備考 |
|-----------|------|------|
| 売上（収入）金額 | `uriageWari` | 必須。税込総額 |
| 免税売上 | `menzeiUriageWari` | |
| 非課税売上 | `hikazeiUriageWari` | |
| 不課税取引 | `jigyoFukazeiUriageWari` | |
| 軽減税率（6.24%）適用分 | `kazeiUriage624PercentWari` | |
| 返還等対価（軽減） | `uriageTaikaKeigen.uriageTaika624Percent` | |
| 返還等対価（標準） | `uriageTaikaKeigen.uriageTaika78Percent` | |
| 貸倒れ発生（軽減） | `kasidaoreKeigen.occurredKasidaore624Percent` | 2割特例・簡易課税のみ |
| 貸倒れ発生（標準） | `kasidaoreKeigen.occurredKasidaore78Percent` | 2割特例・簡易課税のみ |
| 貸倒れ回収（軽減） | `kasidaoreKeigen.recoveredKasidaore624Percent` | 2割特例・簡易課税のみ |
| 貸倒れ回収（標準） | `kasidaoreKeigen.recoveredKasidaore78Percent` | 2割特例・簡易課税のみ |
| 貸倒れ発生有無 | `kasidaore.occurredKasidaoreAns` | 2割特例・簡易課税のみ (radio) |

#### 一般課税のみの追加フィールド

| フィールド | name | 備考 |
|-----------|------|------|
| 非課税返還 | `uriageTaikaKeigen.hikazeiHenkan` | |
| 非課税資産の輸出等返還 | `uriageTaikaKeigen.hikazeiSisanHenkan` | |

### 中間納付税額等の入力（全ルート共通）

| name | 備考 |
|------|------|
| `chukanNofuZei` | 中間納付消費税額 |
| `chukanNofuJotoWari` | 中間納付譲渡割額 |

### 一般課税（積上げ計算）専用: 決算額テーブル

URL: `/syouhi/ai3610/submit.htmj`

積上げ計算選択時のみ表示される大規模フォーム（194項目）。
青色申告決算書の各勘定科目に対して、決算額・課税取引金額・軽減税率分・免税事業者等取引分を入力。

フィールド名パターン: `{科目略称}{列略称}Wari` (割戻し) / `{科目略称}{列略称}Tumi` (積上げ)

列略称: `Kessan`(決算額), `KazeiIgai`(課税取引にならないもの), `Keigen624`(軽減税率分), `MenzeiKeigen`(免税事業者等/軽減), `Menzei`(免税事業者等/標準)

| 科目 | プレフィックス |
|------|---------------|
| 仕入金額 | `siire` |
| 租税公課 | `sozeiKoka` |
| 荷造運賃 | `nidukuri` |
| 水道光熱費 | `suido` |
| 旅費交通費 | `ryohi` |
| 通信費 | `tusin` |
| 広告宣伝費 | `kokoku` |
| 接待交際費 | `settai` |
| 損害保険料 | `songai` |
| 修繕費 | `syuzen` |
| 消耗品費 | `syomohin` |
| 減価償却費 | `genkasyokyaku` |
| 福利厚生費 | `fukurikosei` |
| 給料賃金 | `kyuryo` |
| 外注工賃 | `gaichu` |
| 利子割引料 | `risiWaribiki` |
| 地代家賃 | `jidai` |
| 貸倒金 | `kasidaore` |
| 任意科目 | `niniKamoku25`〜`30` |
| 雑費 | `zappi` |

#### テーブル下の Yes/No 質問（一般課税のみ）

| フィールド | name | 内容 |
|-----------|------|------|
| 発生した貸倒金 | `kasidaoreKeigen.occurredKasidaoreAns` | radio |
| 回収した貸倒金 | `kasidaoreKeigen.recoveredKasidaoreAns` | radio |
| 保税地域からの引取貨物 | `hozeiKeigenIppan.hozeiAns` | radio |
| 課税仕入れに係る対価の返還等 | `siireTaikaKeigenIppan.siireTaikaAns` | radio |
| 課税事業者になった方の棚卸高調整 | `tanaorosiKeigenIppan.oldMenzeiJigyoshaAns` | radio |
| 免税事業者になる方の棚卸高調整 | `tanaorosiKeigenIppan.newMenzeiJigyoshaAns` | radio |

### 簡易課税のみ: 仕入税額控除の控除方式の選択

URL: `/syouhi/ak2140/submit.htmj`

2種以上の事業を営む場合に表示される。以下から選択:
- 原則計算
- 特例計算（2種特例/3種特例/75%特例）

### ac0300: 消費税計算結果の確認

全ルート共通の結果画面。ヘッダ部で「2割特例」「簡易課税」「一般課税」を表示。

表示項目:
- 課税標準額
- 消費税額
- 控除税額小計
- **差引税額**（100円未満切捨て）
- 中間納付税額
- 納付税額
- **地方消費税 譲渡割額**（= 差引税額 × 22/78、100円未満切捨て）
- 中間納付譲渡割額
- **合計納付税額**

#### 一般課税のみの追加表示項目

- 「控除過大調整税額」
- 「課税売上割合」セクション（課税資産の譲渡等の対価の額 / 資産の譲渡等の対価の額）

### 消費税 納税地等の入力

URL パターン（ルートごとに異なる）:
- 2割特例: `/syouhi/at1400/submit.htmj`
- 簡易課税: `/syouhi/ak1400/submit.htmj`
- 一般課税: `/syouhi/ai1400/submit.htmj`

画面は全ルートで同一構造（pageId=ac0400）。

| フィールド | name | type | 備考 |
|-----------|------|------|------|
| 納付方法 | `nofuHohoType` | select | |
| 納税地区分 | `nozeitiKubun` | radio | |
| 郵便番号1 | `nozeitiZipCode1` | text | |
| 郵便番号2 | `nozeitiZipCode2` | text | |
| 都道府県 | `nozeitiPrefectureCode` | select | **住所用コード: 13=東京都** |
| 市区町村 | `municipalityCode` | select | |
| 丁目番地等 | `nozeiti1ElaseMunicipal` | text | |
| 税務署都道府県 | `prefectureCode` | select | **税務署用コード: 15=東京都** ← 住所と異なるコード体系! |
| 税務署 | `sinkokuZeimusyoCode` | select | |
| 氏名カナ（姓） | `simeiKanaSei` | text | |
| 氏名カナ（名） | `simeiKanaMei` | text | |
| 氏名漢字（姓） | `simeiKanjiSei` | text | |
| 氏名漢字（名） | `simeiKanjiMei` | text | |
| マイナンバー1 | `myNumber1` | password | |
| マイナンバー2 | `myNumber2` | password | |
| マイナンバー3 | `myNumber3` | password | |
| 電話番号1 | `telNumber1` | text | |
| 電話番号2 | `telNumber2` | text | |
| 電話番号3 | `telNumber3` | text | |

**⚠️ 注意**: 住所の都道府県コード（`nozeitiPrefectureCode`: 13=東京都）と税務署の都道府県コード（`prefectureCode`: 15=東京都）で**異なるコード体系**が使用されている。

### 消費税 計算結果のテストデータ

| 項目 | 2割特例 (売上5M) | 簡易課税 第5種 (売上5M) | 一般課税 (売上66M, 仕入0) |
|-----|----------------|----------------------|------------------------|
| 課税標準額 | 4,545,000円 | 4,545,000円 | 60,000,000円 |
| 消費税額 | 354,510円 | 354,510円 | 4,680,000円 |
| 控除税額 | 283,608円 (×80%) | 177,255円 (×50%) | 0円 |
| 差引税額 | 70,900円 | 177,200円 | 4,680,000円 |
| 地方消費税譲渡割額 | 19,900円 | 49,900円 | 1,320,000円 |
| **合計納付** | **90,800円** | **227,100円** | **6,000,000円** |

### 3ルートの計算方式の違い

| 項目 | 2割特例 | 簡易課税 | 一般課税 |
|------|---------|----------|----------|
| 控除税額 | 消費税額×80% | みなし仕入率 | 実額（割戻し or 積上げ） |
| 仕入入力 | 不要 | 不要 | 割戻し: 不要 / 積上げ: 決算額テーブル |
| URL prefix | /at**** | /ak**** | /ai**** |

> ⚠️ **ネイティブダイアログ注意**: 消費税コーナー終了時は **2段階のネイティブダイアログ**が表示される — `#otherTax`（他の申告書等を作成しますか？）と `#end`（終了してもよろしいですか？）。画面が遷移しない場合はダイアログの有無をユーザーに確認し、それぞれ適切にクリックするよう案内すること。

---

## ステップ5: 申告内容の確認

作成コーナーの確認画面で、shinkoku の計算結果と一致しているか検証する。

### 検証項目

```
□ 合計所得金額が一致するか
□ 所得控除合計が一致するか
□ 課税所得金額が一致するか
□ 算出税額が一致するか
□ 税額控除が一致するか
□ 復興特別所得税が一致するか
□ 申告納税額（または還付額）が一致するか
□ 消費税の納付税額が一致するか（該当者のみ）
```

不一致がある場合は、差異の原因を調査し、ユーザーに報告する。

---

## ステップ5.5: .data ファイルの保存と次ステップの選択（意思決定ゲート）

**★ ユーザー確認待ち — 明示的な指示なくステップ6（電子署名・送信）に進んではならない**

> **2段階ゲート構造**: ステップ5.5 は「送信フェーズに進むかどうかの意思決定ゲート」。
> ステップ6-3 は「送信ボタン直前の操作ゲート（AI は送信しない、ユーザーが手動で送信する）」。
> 両方のゲートを通過しない限り、送信は実行されない。

申告内容の確認が完了した時点で、以下の手順を実行する。

### .data ファイルのダウンロード案内

ユーザーに .data ファイルの保存を案内する:

```
申告内容の入力と確認が完了しました。

電子署名・送信に進む前に、入力データを .data ファイルとして保存することを強く推奨します。
画面上部の「入力データの一時保存」ボタン（またはページ下部の「ここまでの入力データを保存する」リンク）
をクリックし、ファイルをダウンロードしてください。
```

### 次の操作の選択

AskUserQuestion で以下を表示する:

```
次の操作を選択してください。
```

- 選択肢:
  - 「電子署名・送信に進む」→ ステップ6 へ
  - 「入力内容を見直す」→ 見直したいステップを確認し、該当ステップに戻る
  - 「ここで中断する」→ 中断・再開プロトコルの中断手順に従い終了する

**重要**: ユーザーが「電子署名・送信に進む」を明示的に選択するまで、絶対にステップ6に進まないこと。

---

## ステップ6: 電子署名と送信（所得税）

**前提**: ステップ5.5 でユーザーが「電子署名・送信に進む」を選択済みであること。この前提が満たされていない場合はステップ5.5 に戻る。

### 6-1: 電子署名（ユーザーの手動操作）

マイナンバーカードで電子署名する。署名用パスワード（6〜16桁の英数字）が必要。

**★ ユーザー操作待ち — ブラウザ操作を一時停止**

AskUserQuestion で以下を表示する:

```
電子署名の画面に進みます。
マイナンバーカードで電子署名を行ってください。

署名が完了したら「署名完了」を選択してください。
```

- 選択肢: 「署名完了」 / 「署名で問題が発生した」
- **ユーザーが「署名完了」を選択するまで、一切のブラウザ操作を行わない**

### 6-2: 送信前確認ページでの一次確認

電子署名完了後、送信前の最終確認ページが表示される。

1. ブラウザ上の確認ページの内容を読み取る
2. 主要項目をユーザーに報告する（収入・所得・税額・納付/還付額など）
3. shinkoku の計算結果との照合結果を報告する

### 6-3: ブラウザ操作の一時停止（送信はユーザー操作）

**★★★ 絶対に AI が送信ボタンをクリックしてはならない ★★★**
**★★★ ユーザーが「送信完了」を選択するまで、一切のブラウザ操作を行わない ★★★**

**★ ユーザー操作待ち — ブラウザ操作を一時停止**

AskUserQuestion で以下を表示する:

```
送信前の申告内容確認ページが表示されています。
上記の内容をご確認ください。

問題がなければ、ご自身の操作で画面上の「送信を実行する」ボタンを
クリックしてください。

送信が完了したら「送信完了」を選択してください。
```

- 選択肢: 「送信完了」 / 「入力内容を見直したい」
- 「入力内容を見直したい」が選ばれた場合は、見直したい箇所を確認し、該当ステップに戻る

### 6-4: 送信後の処理（Claude 再開）

ユーザーが「送信完了」を選択したら:

1. **受付番号の記録** — 画面から受付番号を読み取って記録する
2. **受信通知の確認** — メッセージボックスで受信通知を確認する
3. **消費税の申告** — 消費税の申告が必要な場合はステップ6.5 に進む。不要な場合はステップ7 に進む

### 注意事項

- 送信後の修正は「修正申告」として再提出が必要
- ★★★ 送信操作は必ずユーザーの手動操作で行う — エージェントが送信ボタンを自動クリックすることは絶対に禁止 ★★★

## ステップ6.5: 消費税の電子署名と送信（該当者のみ）

消費税の申告が必要な場合、所得税の送信完了後に消費税コーナーで申告書を作成する（ステップ4）。
消費税の入力・確認が完了したら、以下の送信プロトコルに従う。

### 6.5-1: 消費税の送信フェーズに進む前の確認

消費税の計算結果確認（ac0300）と納税地等の入力が完了した時点で、以下を実行する。

**★ ユーザー確認待ち — 明示的な指示なく電子署名・送信に進んではならない**

AskUserQuestion で以下を表示する:

```
消費税の申告内容の入力と確認が完了しました。

電子署名・送信に進む前に、入力データを .data ファイルとして保存することを強く推奨します。
画面上部の「入力データの一時保存」ボタンをクリックし、ファイルをダウンロードしてください。

次の操作を選択してください。
```

- 選択肢:
  - 「電子署名・送信に進む」→ 6.5-2 へ
  - 「入力内容を見直す」→ 見直したい箇所を確認し、該当ステップに戻る
  - 「ここで中断する」→ 中断・再開プロトコルの中断手順に従い終了する

**重要**: ユーザーが「電子署名・送信に進む」を明示的に選択するまで、絶対に送信フェーズに進まないこと。

### 6.5-2: 電子署名（ユーザーの手動操作）

マイナンバーカードで電子署名する。

**★ ユーザー操作待ち — ブラウザ操作を一時停止**

AskUserQuestion で以下を表示する:

```
消費税の電子署名の画面に進みます。
マイナンバーカードで電子署名を行ってください。

署名が完了したら「署名完了」を選択してください。
```

- 選択肢: 「署名完了」 / 「署名で問題が発生した」
- **ユーザーが「署名完了」を選択するまで、一切のブラウザ操作を行わない**

### 6.5-3: 送信前確認ページでの一次確認

電子署名完了後、送信前の最終確認ページが表示される。

1. ブラウザ上の確認ページの内容を読み取る
2. 主要項目をユーザーに報告する（課税標準額・消費税額・差引税額・地方消費税・合計納付税額など）
3. shinkoku の計算結果との照合結果を報告する

### 6.5-4: ブラウザ操作の一時停止（送信はユーザー操作）

**★★★ 絶対に AI が送信ボタンをクリックしてはならない ★★★**
**★★★ ユーザーが「送信完了」を選択するまで、一切のブラウザ操作を行わない ★★★**

**★ ユーザー操作待ち — ブラウザ操作を一時停止**

AskUserQuestion で以下を表示する:

```
消費税の送信前確認ページが表示されています。
上記の内容をご確認ください。

問題がなければ、ご自身の操作で画面上の「送信を実行する」ボタンを
クリックしてください。

送信が完了したら「送信完了」を選択してください。
```

- 選択肢: 「送信完了」 / 「入力内容を見直したい」
- 「入力内容を見直したい」が選ばれた場合は、見直したい箇所を確認し、該当ステップに戻る

### 6.5-5: 送信後の処理（Claude 再開）

ユーザーが「送信完了」を選択したら:

1. **受付番号の記録** — 画面から受付番号を読み取って記録する
2. **受信通知の確認** — メッセージボックスで受信通知を確認する
3. ステップ7 の .data ファイル保存案内に進む

---

## ステップ7: .data ファイルの保存案内

作成コーナーでは申告データを `.data` ファイルとして保存できる。

### 送信後の .data ファイル再保存（推奨）

送信完了後の `.data` ファイルには受付番号・送信日時等の追加情報が含まれる。
ステップ5.5 で保存済みであっても、**送信後に改めて .data ファイルを再保存する**ことを推奨する。

AskUserQuestion で以下を表示する:

```
送信が完了しました。送信後の .data ファイルには受付番号等の情報が追加されています。
「入力データを保存する」で .data ファイルを再度ダウンロードすることを推奨します。

ダウンロードが完了したら「ダウンロード済み」を選択してください。
```

- 選択肢: 「ダウンロード済み」 / 「スキップ」

### .data ファイルの用途

- `.data` ファイルがあれば、次回は「保存データを利用して作成」から途中再開できる
- 控えとしても有用（来年の申告時に前年データとして参照可能）
- 修正申告が必要になった場合、`.data` ファイルから入力データを復元できる

---

## 技術的な知見

### SPA構造

- jQuery 3 + jQuery UI ベース
- ページ遷移はフォーム POST（`document.forms[formName].submit()`）
- ハッシュ `#bsctrl`（決算書コーナー）/ `#bbctrl`（所得税コーナー）はページ管理用
- `<input type="button">` が多用されており、`id="input_xxx"` で JS `.click()` 操作

### URL体系

| コーナー | URL パターン |
|---------|-------------|
| 共通（認証等） | `/kyoutu/ky/sm/***` |
| 決算書 | `/kessan/ac/***` |
| 所得税 | `/r7/syotoku/***` |
| 消費税（共通） | `/syouhi/ac****` |
| 消費税（2割特例） | `/syouhi/at****` |
| 消費税（一般課税） | `/syouhi/ai****` |
| 消費税（簡易課税） | `/syouhi/ak****` |

### 主要ナビゲーション関数

- `doSubmitCSW0100(qrCodeReadingFlag, reportType, url)` — 認証方法選択
- `doSubmitCMW0900(zeimokuType, year)` — 申告書種類選択（1=所得税, 2=決算書, 3=消費税, 4=贈与税）

### 確認ダイアログ

| コード | 内容 | 対応 |
|--------|------|------|
| KS-W90011 | 入力データが初期化される | OK で続行 |
| KS-W90006 | 入力データをクリアする | OK で続行 |
| KS-W10035 | 印刷を確認したか | OK で続行 |
| KS-E10089 | e-Tax送信が必要（65万円控除） | e-Tax ルートで再実行 |
| KS-E10001 | 必須入力チェック | 入力漏れを修正 |
| KS-E40003 | B/S 資産期末合計 ≠ 負債期末合計 | 金額を修正 |

### 終了ダイアログフロー

消費税コーナー終了時は2段階のダイアログが表示される:
1. `#otherTax` — 「他の申告書等を作成しますか？」
2. `#end` — 「終了してもよろしいですか？」

※ 書面提出選択時はサーベイダイアログが毎回表示される（セッション間で記憶されない）

### ネイティブダイアログの検知と対処

Claude in Chrome は `alert()` / `confirm()` / `prompt()` によるネイティブダイアログを**検知できない**。
ダイアログが表示されている間、ブラウザの DOM 操作はブロックされるため、エージェントの操作が無応答になる。

#### 検知ヒューリスティック

ボタンクリック後に以下の状態が続く場合、ネイティブダイアログが表示されている可能性がある:

- URL が変化しない
- DOM の内容が変化しない（新しい画面に遷移しない）
- ボタンのクリックが何も起こさないように見える

#### 対処手順

1. ダイアログの可能性を検知したら、AskUserQuestion で以下を表示する:

```
ボタンをクリックしましたが、画面が遷移しません。
ブラウザにポップアップ（確認ダイアログ）が表示されていませんか？

表示されている場合は、ダイアログの内容（コード番号がある場合はそれも）を教えてください。
```

- 選択肢: 「ダイアログが表示されている」 / 「ダイアログは表示されていない」

2. ダイアログが表示されている場合:
   - ユーザーにダイアログのメッセージ内容を確認する
   - 既知のコード（上記「確認ダイアログ」テーブルの KS-W*, KS-E* 等）に該当するか照合する
   - KS-W 系（警告）: ユーザーに「OK」をクリックするよう案内
   - KS-E 系（エラー）: エラー内容に応じた修正を案内
   - 不明なダイアログ: ユーザーにメッセージ全文を共有してもらい、対処を判断

3. ダイアログが表示されていない場合:
   - ネットワークエラーやページ読み込み中の可能性を調査する
   - ページの再読み込みを試みる

#### ダイアログが発生しやすい操作

| 操作 | 想定ダイアログ | ステップ |
|------|--------------|---------|
| 「次へ進む」クリック全般 | KS-E10001（必須入力チェック） | 2, 3, 4 |
| 65万円控除の選択 | KS-E10089（e-Tax送信必須） | 2 |
| B/S 入力後の「次へ」 | KS-E40003（資産≠負債） | 2 |
| 決算書完了→所得税遷移 | KS-W10035（印刷確認） | 2→3 |
| 消費税コーナー終了 | `#otherTax` + `#end`（2段階） | 4 |
| データクリア・初期化操作 | KS-W90011, KS-W90006 | 全般 |

### 環境チェック（参考）

確定申告書等作成コーナーの推奨環境:
- Windows 11 + Chrome / Edge
- macOS + Safari

Linux は公式非対応。OS 検出は **2層** で行われるため、回避にも2層の偽装が必要:

1. **クライアントサイド検出**: CC-AA-024 の画面遷移時に `termnalInfomationCheckOS_myNumberLinkage()` が
   `navigator.platform` / `navigator.userAgent` を検査し、Linux 環境では `isTransition=false` となり
   QR コード認証画面（CC-AA-440）への遷移がブロックされる。

2. **サーバーサイド OS ベイク**: サーバーが HTTP リクエストの `User-Agent` / `sec-ch-ua-platform` ヘッダ
   から OS を判定し、レスポンス内の `getClientOS()` 関数に `const os = "Linux"` のようにハードコードする
   （サーバーサイドレンダリング）。`addInitScript` による navigator プロパティ偽装ではこのベイク値は変わらない。
   CC-AA-440 の `displayQrcode()` でも `getClientOS()` が呼ばれ、`oStUseType` を決定する
   （Win=`'3'`, Mac=`'4'`）。Linux だと `undefined` になり QR コードが描画されない。

#### `etax-stealth.js` の2層偽装

`PLAYWRIGHT_MCP_INIT_SCRIPT` 環境変数で `etax-stealth.js` を指定して回避可能:

```bash
PLAYWRIGHT_MCP_INIT_SCRIPT=skills/e-tax/scripts/etax-stealth.js \
  playwright-cli -s=etax open https://www.keisan.nta.go.jp/ --headed --browser=chrome
```

**層 1: navigator プロパティ偽装**（`addInitScript` で実行、ページ読み込み前）

| プロパティ | 偽装値 |
|-----------|--------|
| `navigator.platform` | `'Win32'` |
| `navigator.userAgent` | Windows Chrome 131 UA |
| `navigator.userAgentData` | Windows Chrome Client Hints |
| `navigator.webdriver` | `false` |
| `navigator.plugins` | Chrome 標準プラグイン |
| `navigator.languages` | `['ja', 'en-US', 'en']` |

**層 2: サーバーベイク関数のパッチ**（`DOMContentLoaded` で実行、ページスクリプト後）

| パッチ対象 | 偽装値 | 目的 |
|-----------|--------|------|
| `getClientOS()` | `'Windows'` | サーバーベイク値の上書き |
| `getClientOSVersionAsync()` | `'Windows 11'` | OS バージョン判定の回避 |
| `isRecommendedOsAsEtaxAsync()` | `true` | 推奨 OS 判定の回避 |
| `isRecommendedBrowserAsEtaxAsync()` | `'OK'` | 推奨ブラウザ判定の回避 |

#### トラブルシューティング: QR コードが表示されない

CC-AA-440 で QR コードが表示されない場合、`displayQrcode()` 内で `getClientOS()` が `'Linux'` 等を返し、
`oStUseType` が `undefined` になっている可能性がある。

**確認方法**: ブラウザコンソールで `getClientOS()` の戻り値を確認。`'Windows'` でなければパッチが適用されていない。

**手動対処**（Playwright CLI の場合）:
```bash
playwright-cli -s=etax run-code 'window.getClientOS = function() { return "Windows"; }; displayQrcode();'
```

#### 検証済み画面遷移フロー

CC-AA-010 → CC-AE-090 → CC-AE-600 → CC-AA-024 → CC-AA-440（QR 表示確認済み）

詳細は `docs/wsl-os-detection-workaround.md` を参照。

---

## 引継書の出力

全ステップ完了後、以下のファイルを Write ツールで出力する。

### ステップ別ファイルの出力

`.shinkoku/progress/10-etax.md` に以下の形式で出力する:

```
---
step: 10
skill: e-tax
status: completed
completed_at: "{当日日付 YYYY-MM-DD}"
fiscal_year: {tax_year}
---

# e-Tax 電子申告の結果

## 提出方法

- 確定申告書等作成コーナー（Claude in Chrome 入力代行）

## 税額サマリー

- 事業所得: {金額}円
- 課税所得: {金額}円
- 所得税額: {金額}円
- 申告納税額: {金額}円（{納付/還付}）
- 消費税納付額: {金額}円（該当者のみ）

## 送信結果

- 受付番号: {受付番号}
- 送信日時: {日時}

## 次のステップ

/submit で提出後のチェックリストを確認する
```

### 進捗サマリーの更新

`.shinkoku/progress/progress-summary.md` を更新する（存在しない場合は新規作成）:

- YAML frontmatter: fiscal_year、last_updated（当日日付）、current_step: e-tax
- テーブル: 全ステップの状態を更新（e-tax を completed に）

---

## 免責事項

- 確定申告書等作成コーナーの画面構成・フォーム要素は国税庁の更新により変更される可能性がある
- Claude in Chrome の入力代行はユーザーの目視確認を前提とする — 自動送信は行わない
- マイナンバーカードの操作（電子署名）はユーザーの手動操作が必要
- 最終的な申告内容は税理士等の専門家に確認することを推奨する

## 調査資料

詳細なセレクタ情報・スクリーンショットは `skills/e-tax/research/` ディレクトリを参照:
- `00-screen-flow-summary.md` — 画面遷移マップ
- `01`〜`05` — 認証フロー画面
- `06`〜`14` — 決算書コーナー画面
- `30`〜`41` — 所得税コーナー画面
- `50`〜`55` — 消費税コーナー画面（初期調査）
- `84`〜`87` — 消費税 2割特例（条件判定、売上入力、計算結果）
- `89`〜`93` — 消費税 簡易課税（条件判定、事業区分、売上入力、控除方式、計算結果）
- `94`〜`98` — 消費税 一般課税（条件判定、所得区分、売上入力、決算額テーブル、計算結果）


---
*Source: https://skills.yangsir.net/skill/sm-e-tax*
*Markdown mirror: https://skills.yangsir.net/api/skill/sm-e-tax/markdown*