概要

項目内容
案件IDMAS-073
カテゴリ経費・仕訳
PhaseP1
優先度★★
所要時間1〜2時間
対象ファイル600_report/602_datamart_main.js, 600_report/604_datamart_bs.js
前提案件spec_corporate_tax.md(累進課税・国税/地方税分離: 実装済み)

目的

みなし法人税(auto_tax による月次自動見積)から、確定申告後の正式な税金仕訳への移行を可能にする。具体的には、手動で法人税INVを計上した際にB/Sの経過勘定が「未払金」ではなく「未払法人税等」に正しく分類されるようコードを修正し、確定申告後の納付フローを既存の Action AAction B パイプラインで処理できるようにする。

現在のコード

1. みなし法人税の自動計算(603_datamart_pl.js L133-184)

// L133-137: 手動計上チェック
} else if (sec.type === 'auto_tax') {
  const taxMonthly = Array(13).fill(0);
  let hasManualTax = false;
  if (martPl['tax']) for (const a in martPl['tax']) if (martPl['tax'][a][0] !== 0) hasManualTax = true;

  if (!hasManualTax) {
    // ... 累進課税ブラケットに基づくYTD差分方式で月次税額を自動計算
  }
  sectionTotalsPl[sec.id] = taxMonthly;
}

ポイント: hasManualTax=true(42_trn_journal に法人税科目の手動仕訳が存在)の場合、auto_tax_national / auto_tax_local は全月ゼロになる。→ この仕組み自体は正しく動作する。

2. B/S 未払法人税等の自動計上(604_datamart_bs.js L44-49)

// 法人税等(国税+地方税)をB/S未払法人税等(流動負債)に自動計上
var autoTaxNat = sectionTotalsPl['auto_tax_national'] || Array(13).fill(0);
var autoTaxLoc = sectionTotalsPl['auto_tax_local'] || Array(13).fill(0);
if (!martBs['liab_cl']['未払法人税等']) martBs['liab_cl']['未払法人税等'] = Array(13).fill(0);
for (var ti = 1; ti <= 12; ti++) martBs['liab_cl']['未払法人税等'][ti] += autoTaxNat[ti] + autoTaxLoc[ti];

問題: hasManualTax=true の場合、autoTaxNat / autoTaxLoc はゼロ → B/S に未払法人税等が計上されない。

3. 期ずれの経過勘定マッピング(602_datamart_main.js L94-101)

// L94-101: 実績INVの期ずれ処理
if (pYm !== sYm && !acc.includes('減価償却') && (!isBs || secIdBs === 'asset_nca')) {
  if (isActual) {
    const isSalesActual = (!isBs && (secIdPl === 'sales' || secIdPl === 'non_op_inc' || secIdPl === 'ext_inc'));
    const lagAccId = isSalesActual ? 'asset_ca' : 'liab_cl';
    const lagAccName = isSalesActual ? '売掛金' : dmIsAccruedExpense_(acc) ? '未払費用' : '未払金';
    // ★ 問題箇所: 法人税もここに来るが「未払金」に分類される

核心的問題: 手動で法人税INVを計上し期ずれがある場合(P/L計上日と決済日が異なる月)、B/S上の経過勘定が「未払金」に分類される。正しくは「未払法人税等」(科目コード 212)であるべき。

現在のデータフロー(手動法人税INVの場合)

手動INV (科目=法人税、住民税及び事業税)
  ├─ P/L: martPl['tax']['法人税、住民税及び事業税'] に計上 ✅
  ├─ hasManualTax=true → auto_tax スキップ ✅
  ├─ B/S auto_tax → 0 (未払法人税等に計上されない) ❌
  └─ 期ずれ → B/S '未払金' に分類 ❌ (→ '未払法人税等' であるべき)

修正方針

Step 1: 期ずれの経過勘定マッピング修正(602_datamart_main.js)

processEvent 内の期ずれ経過勘定マッピング(L101)に、P/L 'tax' セクションの判定を追加する。

修正前(L101):

const lagAccName = isSalesActual ? '売掛金' : dmIsAccruedExpense_(acc) ? '未払費用' : '未払金';

修正後:

const lagAccName = isSalesActual ? '売掛金'
  : secIdPl === 'tax' ? '未払法人税等'
  : dmIsAccruedExpense_(acc) ? '未払費用' : '未払金';

Step 2: B/S 未払法人税等の計上ロジック拡張(604_datamart_bs.js)

dmCalcBs_ の auto_tax ブロック(L44-49)を拡張し、hasManualTax=true の場合は P/L tax セクション合計を使って未払法人税等を計上する。

修正後(L44-49 を置換):

// 法人税等のB/S未払法人税等(流動負債)計上
// (A) auto_tax(みなし法人税)の計上
var autoTaxNat = sectionTotalsPl['auto_tax_national'] || Array(13).fill(0);
var autoTaxLoc = sectionTotalsPl['auto_tax_local'] || Array(13).fill(0);
if (!martBs['liab_cl']['未払法人税等']) martBs['liab_cl']['未払法人税等'] = Array(13).fill(0);
for (var ti = 1; ti <= 12; ti++) martBs['liab_cl']['未払法人税等'][ti] += autoTaxNat[ti] + autoTaxLoc[ti];

// (B) 手動計上された法人税があり、かつ期ずれなし(pYm=sYm)の場合の補完
// 期ずれありの場合は Step 1 で '未払法人税等' にマッピング済み。
// 期ずれなし(同月決済)の場合は cashPlug で処理されるため追加計上不要。

設計判断: 期ずれなし(P/L計上月 = 決済月)の手動法人税INVは、cashPlug(現預金の逆算)で自動的にバランスされるため、B/S 側の追加処理は不要。期ずれあり(決算月に計上・翌期に納付)の場合のみ Step 1 の修正で「未払法人税等」が正しく計上される。

確定申告後の納付フロー(運用手順)

フロー全体像

① 決算: auto_tax が月次みなし法人税を見積(現行動作)
    ↓
② 確定申告: 正式な税額が確定
    ↓
③ 手動INV作成: 32_wrk_invoice に法人税INVを登録
    ↓
④ Action A: INV → 42_trn_journal に自動仕訳(hasManualTax=true で auto_tax 停止)
    ↓
⑤ 納付: 銀行で法人税を納付
    ↓
⑥ STL登録: 33_wrk_bank に決済レコードを登録
    ↓
⑦ Action B: STL → INV消込 → 未払法人税等が解消

③ 手動INV作成の入力ガイド

列名入力値備考
科目名法人税、住民税及び事業税科目マスタ(11_mst_account)に登録済み(コード 800)
収支区分支出
申請種別請求書受領(AP)デフォルト値
取引先名税務署 / 都道府県税事務所国税・地方税で分けるのが望ましい
発生日(P/L計上日)決算月末日(例: 2026-07-31)期末に費用計上
決済日_計画納付期限日(例: 2026-09-30)確定申告期限=決算日から2ヶ月以内
税区分対象外法人税に消費税は課されない
税抜金額_実績確定税額
消費税額_実績0
税込金額_実績確定税額税抜=税込
決済手段銀行振込口座振替でも可
摘要第1期 法人税(国税)/ 第1期 法人住民税・事業税(地方税)

推奨: 国税と地方税で 2行 に分けてINVを作成する。理由:

  • 納付先が異なる(税務署 vs 都道府県税事務所)
  • 納付タイミングが異なる場合がある
  • 内訳の追跡が容易

hasManualTax の挙動

状態auto_taxB/S 未払法人税等
手動INVなし(通常)月次自動見積auto_tax 合計を累積
手動INVあり(確定申告後)全月ゼロ期ずれ経由で手動INV金額を計上

注意: hasManualTax は年間を通じて全月に影響する(all-or-nothing)。手動INVを1件でも作成すると、全月の auto_tax が停止する。月次P/Lでは法人税が手動INVの計上月にのみ集中する形になるが、通期では正しい合計になる。

影響範囲

ファイル変更箇所変更量
600_report/602_datamart_main.jsprocessEvent 内 L101 の経過勘定マッピング1行修正
600_report/604_datamart_bs.jsdmCalcBs_ L44-49 にコメント追記コメント追加のみ
  • 既存ロジックへの影響: processEvent の期ずれ処理に1条件を追加するだけ。secIdPl === 'tax' に該当するのは「法人税等」表示区分の科目のみで、通常の経費INVには影響しない
  • P/L: 変更なし(hasManualTax の動作は既存通り)
  • B/S: 手動法人税INVの期ずれが「未払金」→「未払法人税等」に正しく分類される
  • C/F: 変更なし(sectionTotalsPl['tax'] + auto_tax の合算で正しく動作)

注意事項

  1. hasManualTax は通期の合計値(martPl['tax'][a][0] !== 0)でチェックされるため、1件でも手動法人税INVがあると全月の auto_tax が停止する。将来的に月次精度が必要な場合は、月別の切替ロジックへの拡張を検討(本案件のスコープ外)
  2. 手動INVの科目名は 法人税、住民税及び事業税 の完全一致が必要(科目マスタ 11_mst_account にコード 800 として登録済み)
  3. 法人税は消費税対象外のため、税区分は「対象外」、消費税額は 0 とする
  4. 中間納付(予定納税)がある場合は、各納付時点で別INVとして計上する。中間納付のINVも hasManualTax をトリガーするため、中間納付を入力するタイミングには注意が必要
  5. dmIsAccruedExpense_ は法人税に対して false を返すため、修正前は「未払金」に分類される。修正後は secIdPl === 'tax' の判定が先に評価され「未払法人税等」に分類される

エッジケース

条件動作理由
手動INV金額 = 0auto_tax が動作martPl['tax'][a][0] !== 0 のチェックで 0 は false
手動INVの期ずれなし(pYm = sYm)B/S 未払法人税等に計上されない同月決済は cashPlug で処理。未払法人税等は発生しない(即納付)
年度途中で手動INVを追加全月の auto_tax が停止hasManualTax は通期チェック。月次P/Lは手動INV計上月に集中
auto_tax 動作中に「法人税等」グループの手動INVが存在auto_tax 停止 + 手動金額が P/L に計上二重計上は発生しない(hasManualTax で排他制御)
赤字決算(確定税額 = 均等割のみ)均等割分のINVを手動作成auto_tax 停止。国税は 0 円INV不要、地方税の均等割のみINV作成
科目マスタに「未払法人税等」が未登録processEvent で例外スロー科目マスタにコード 212 として登録済みのため通常は発生しない

実データ検証(MCP でのデータ確認が必要な場合)

確認項目確認方法期待値
11_mst_account に「法人税、住民税及び事業税」が存在するかMCP: get_sheet_data(11_mst_account)コード 800, 諸表区分=PL, 表示区分=法人税等
11_mst_account に「未払法人税等」が存在するかMCP: get_sheet_data(11_mst_account)コード 212, 諸表区分=BS, 表示区分=未払税金
現在の auto_tax 出力を確認MCP: get_sheet_data(61_pl_monthly)国税行・地方税行が存在し、通期列に非ゼロ値
B/S 未払法人税等の現在値MCP: get_sheet_data(71_bs)auto_tax 合計と一致

関連ドキュメント

仕様書関連箇所
spec_corporate_tax.md累進課税ブラケット・auto_tax の設計判断
CLAUDE.md会計ロジック: 科目マスタ未登録の禁止、期ずれ処理ルール
mst_account.md科目コード 212(未払法人税等)、800(法人税、住民税及び事業税)

人間が検討すべき事項

  1. 税理士との確認: 納付タイミング・仕訳パターン(国税と地方税の分割粒度、中間納付の要否)を税理士と確認する(TODO_future.md 記載事項)
  2. 中間納付の運用: 中間納付(予定納税)が発生する場合、hasManualTax の全月停止を許容するか、中間納付は別の仕組みで管理するかを決定する必要がある
  3. 月次P/Lの見え方: 手動INV計上後は全月の auto_tax が停止し、法人税が計上月に集中する。管理会計としてこれを許容するか、月次按分の仕組みが必要かを判断する

実装プロンプト(Claude Code 用)

あなたはGAS会計システム(bizlp-gas-accounting)のシニア開発者です。
案件 MAS-073「未払法人税等の適切な処理」を実装してください。

## 実行前タスク

以下のファイルを読み込んでください:
1. `600_report/602_datamart_main.js` — `processEvent` 関数(L40-137)。特にL94-101の期ずれ経過勘定マッピングを確認
2. `600_report/603_datamart_pl.js` — `dmCalcPl_` 関数(L115-189)。L133-137の `hasManualTax` チェックを確認
3. `600_report/604_datamart_bs.js` — `dmCalcBs_` 関数(L38-49)。auto_tax の B/S 計上ロジックを確認
4. `CLAUDE.md` — コーディング規約・会計ロジックルール
5. `docs/dev/dev_mas-073_corporate_tax_formal.md` — 本仕様書

## 修正対象ファイル

`600_report/602_datamart_main.js` のみ。

## 実装内容

### A: 期ずれ経過勘定マッピングの修正(L101)

`processEvent` 内の期ずれ経過勘定名(lagAccName)の決定ロジックに、P/L 'tax' セクションの判定を追加する。

**修正前(L101):**
```js
const lagAccName = isSalesActual ? '売掛金' : dmIsAccruedExpense_(acc) ? '未払費用' : '未払金';
```

**修正後:**
```js
const lagAccName = isSalesActual ? '売掛金'
  : secIdPl === 'tax' ? '未払法人税等'
  : dmIsAccruedExpense_(acc) ? '未払費用' : '未払金';
```

これにより、法人税科目(P/L section = 'tax')のINVに期ずれがある場合、B/Sの経過勘定が「未払金」ではなく「未払法人税等」に正しく分類される。

## 制約

- `processEvent` の期ずれ処理(L94-134)の構造を変更しない(条件分岐の追加のみ)
- `604_datamart_bs.js` の auto_tax ブロック(L44-49)は変更しない
- `603_datamart_pl.js` の hasManualTax ロジック(L133-137)は変更しない
- 他ファイルの変更は行わない

## 動作確認

`npm run push:dev` 後:
1. 現在の状態でマート更新を実行し、71_bs の「未払法人税等」行に auto_tax 由来の値が表示されることを確認(既存動作の維持)
2. 32_wrk_invoice に以下のテスト用INVを追加:
   - 科目名: 法人税、住民税及び事業税
   - 発生日: 決算月末(例: 2026-07-31)
   - 決済日_計画: 納付期限(例: 2026-09-30)
   - 税込金額_実績: 任意の金額(例: 100000)
   - 請求ステータス: 承認済
3. Action A を実行 → 42_trn_journal に仕訳が作成されることを確認
4. マート更新を再実行し、以下を確認:
   - 61_pl_monthly: auto_tax行が0になり、「法人税等」グループに手動金額が表示される
   - 71_bs: 「未払法人税等」行に手動INVの金額が表示される(「未払金」ではない)
   - B/S貸借差額 = 0(テストランナー T4-06 で検証)
5. テスト用INVを削除し、元の状態に戻す

### 拡張思考の使用状況

| フェーズ | 拡張思考 | 備考 |
|---------|:--------:|------|
| 期ずれマッピング修正 | なし | 1行の条件追加のみ |

推奨実行モデル

工程推奨モデル理由
仕様書作成(本ドキュメント)Claude Opus 4.6会計ロジック(期ずれ・cashPlug・hasManualTax)の相互作用の分析
実装Claude Haiku 4.51行の条件追加のみ。仕様書でコードが完全定義済み
動作確認人間実データでの検証。テスト用INV作成→マート更新→B/S確認の手動操作が必要

変更履歴

日付変更内容
2026-04-16初版作成。期ずれ経過勘定マッピング修正 + 確定申告後の納付フロー設計