1. 概要

焦点質問: 今月および年度累計の損益はいくらか?

P/L(損益計算書)を 32_wrk_invoice(承認済INV)から直接集計し、単月推移(61_pl)と年度累計(62_pl_ytd)を出力する。 42_trn_journal は監査証跡であり、P/L集計のソースとしては使用しない。

項目内容
出力タブ61_pl(単月)/ 62_pl_ytd(累計)
関数dmCalcPl_, dmBuildPlOutput_
ファイル603_datamart_pl.js

旧 (V1) → 新 (V2) の変更

項目V1V2
実績ソース42_trn_journal32_wrk_invoice
金額列日本円金額 (税抜)税込金額_計画
対象判定ステータス = "計上済"請求ステータス = "承認済" or "決済完了"

2. データソース

ソース読み込み条件用途
32_wrk_invoice請求ステータス = "承認済" or "決済完了"実績P/L
41_trn_budget有効フラグ = TRUE, pYm >= boundary予算P/L
11_mst_accountacctMap(諸表区分・表示区分)科目分類

32_wrk_invoice から読み取る列

ヘッダー名P/Lでの用途
A有効フラグFALSE → SKIP
G発生日(P/L計上日)P/L計上月 (pYm)
H決済日_計画決済月 (sYm) → 期ずれ判定に使用
I請求ステータス"承認済" or "決済完了" のみ対象
J収支区分支出/収入 → 金額の符号判定に使用
M科目名P/Lセクション分類キー
R税込金額_計画集計金額
T決済手段noCash判定(仕訳振替→B/S cashPlug補正用)

3. 対象判定・フィルタ条件

#条件処理理由
F1有効フラグ = FALSESKIP論理削除行の除外
F2請求ステータス ∉ [承認済, 決済完了]SKIP未承認INVは計上対象外
F3発生日が空SKIP計上月が特定できない
F4科目の諸表区分 = B/SP/L対象外B/S科目はP/Lに含めない
F5科目名 = "指定なし" or "バッファ"buffer セクションへ未定予算の暫定配置
F6科目が11_mst_account に未登録エラーキーワード推測は禁止

P/L科目の例

科目名セクション備考
役員報酬販管費 (sga)
給料手当販管費 (sga)
支払手数料販管費 (sga)顧問料等
開発外注費販管費 (sga)業務委託
雑給販管費 (sga)アルバイト
法定福利費販管費 (sga)会社負担の社保
雑収入営業外収益 (non_op_inc)益税等

B/S科目の例(P/L対象外)

科目名B/Sセクション備考
預り金流動負債 (liab_cl)源泉所得税等の天引き
仮払消費税等流動資産 (asset_ca)課税事業者の仕入税額控除

4. 処理ロジック

※ 本セクションは技術実装の詳細を記述する(TDD)。業務ルールは §5 参照。

4.1 INV読み込み・変数算出

STEP処理入力出力条件
P1.1スキップ判定有効フラグ, 請求ステータス, 発生日 (32_wrk_invoice.A,I,G列)FALSE→SKIP、ステータス∉[承認済,決済完了]→SKIP、発生日空→SKIP
P1.2年月・金額算出発生日, 決済日_計画, 税込金額_計画, 決済手段 (32_wrk_invoice.G,H,R,T列)pYm, sYm, amt, noCashpYm = parseDateToYm(発生日), sYm = parseDateToYm(決済日_計画) || pYm, noCash = 決済手段==="仕訳振替"
P1.3P/L vs B/S分類科目名 (32_wrk_invoice.M列)secIdacctMap[科目名].stmtで判定。P/L→セクション分類へ、B/S→P/L対象外。マスタ未登録→エラー。"指定なし"→buffer

4.2 セクション分類 (dmGetPlSectionId_)

表示区分 (disp) のキーワードセクション
売上高 / 営業収益 / 売上sales
売上原価 / 原価 / 仕入cogs
販管 / 販売 / 管理 / 一般sga
営業外収益 / 外収益non_op_inc
営業外費用 / 外費用 / 支払利息non_op_exp
特別利益ext_inc
特別損失ext_exp
法人税 / 税金tax
(disp が空)エラー(表示区分の登録漏れ)

4.3 符号決定・期ずれイベント生成

STEP処理入力出力条件
P2.1符号決定収支区分, 税込金額_計画 (32_wrk_invoice.J,R列)amt (符号付き)支出→費用(マイナス方向)、収入→収益(プラス方向)
P2.2期ずれ判定pYm, sYmpYm ≠ sYm → 期ずれあり
P2.3後払い期ずれpYm < sYmB/Sイベント → martBspYmに未払金+(or未払費用+)/ sYmに未払金−。dmIsAccruedExpense_()で未払金/未払費用を判別
P2.4前払い期ずれsYm < pYmB/Sイベント → martBssYmに前払費用+ / pYmに前払費用−。収入前受け→前受金

4.4 セクション合計・利益行計算 (dmCalcPl_)

STEP処理入力出力条件
C1グループ集計martPl[secId] の全科目sectionTotalsPl[secId]type = 'group' の各セクションを月別合計
C2利益行算出定義済みの calc 配列sectionTotalsPl[profitId]type = 'profit': calc の各セクション合計に sign を乗じて加算
C3みなし法人税税引前利益YTD, 累進課税ブラケットsectionTotalsPl[auto_tax_*]type = 'auto_tax': 手動法人税あり→スキップ。月次差分 = max(0, 当月YTD税額 − 前月YTD税額)。地方税は均等割を加算

4.5 出力配列構築 (dmBuildPlOutput_)

STEP処理入力出力
O1ヘッダー行uiHeader, targetMonthsWithActBgtタイトル行 + ヘッダー行(P/L科目, 通期, 各月)
O2グループ行martPl, sectionTotalsPl■セクション名 → 科目明細 → 【計】小計
O3利益行sectionTotalsPl売上総利益, 営業利益, 経常利益, 税引前当期純利益, 当期純利益
O4YTD変換単月配列dmToYtdArray_ で累積配列に変換

4.6 境界月算出

STEP処理入力出力条件
B1境界月算出承認済INVの最大発生月boundaryMonthStr最大発生月 + 1ヶ月(当月を超えない)
B2実績/予算振り分けpYm, boundaryMonthStrpYm < boundary → 実績、pYm >= boundary → 予算(41_trn_budget)

5. 財務ロジック (FRD)

※ 本セクションは経理担当・CFOが検証可能な表現で記述。技術用語は使用しない。 → 技術詳細: §4 参照

5.1 P/Lセクション構造

損益計算書は以下のセクション構造で集計される。各利益行は上位セクションの合計から算出される。

売上高
売上原価
━━━━━━━━━━━━━━━━━━━
  売上総利益 = 売上高 − 売上原価

販売費及び一般管理費
未定・バッファ予算
━━━━━━━━━━━━━━━━━━━
  営業利益 = 売上総利益 − 販管費 − バッファ

営業外収益
営業外費用
━━━━━━━━━━━━━━━━━━━
  経常利益 = 営業利益 + 営業外収益 − 営業外費用

特別利益
特別損失
━━━━━━━━━━━━━━━━━━━
  税引前当期純利益 = 経常利益 + 特別利益 − 特別損失

法人税等(手動計上)
みなし法人税等・国税(自動計算)
みなし法人税等・地方税(自動計算)
━━━━━━━━━━━━━━━━━━━
  当期純利益 = 税引前当期純利益 − 法人税等 − みなし法人税等

5.2 符号ルール

収支区分P/Lへの影響
支出費用としてマイナス方向に計上役員報酬 −500,000
収入収益としてプラス方向に計上雑収入 +2,000

負の税込金額(預り金取崩し等)は B/S 科目のため P/L に影響しない。

5.3 期ずれ処理

P/L計上月(発生日ベース)と決済月が異なる場合、B/S に経過勘定を計上して期間帰属を正しく反映する。

パターン条件B/S処理根拠
後払い発生月 < 決済月発生月に未払金(or 未払費用)を計上、決済月に取崩し中小企業会計指針 第30項
前払い決済月 < 発生月決済月に前払費用を計上、発生月に取崩し中小企業会計指針 第31項
収入の前受け決済月 < 発生月 かつ 収入決済月に前受金を計上、発生月に取崩し中小企業会計指針 第32項

未払金と未払費用の区分: 給料・役員報酬・法定福利・支払利息・地代家賃など継続的役務提供の未払対価は「未払費用」、それ以外は「未払金」。

→ 技術詳細: §4.3 参照

期ずれの具体例

支払手数料 22,000:
  発生日 = 2025-11-30 (発生月 = 2025-11)
  支払期限 = 2025-12-25 (決済月 = 2025-12)
  → P/L: 2025-11 に 支払手数料 −22,000
  → B/S: 2025-11 に 未払金 +22,000 / 2025-12 に 未払金 −22,000

5.4 予実差異の定義

計画P/L (63/64タブ) における差異計算の定義は spec_plan — 予実差異の定義 を参照。

指標計算式符号の解釈
金額差異実績 − 計画収益科目: 正=好意的(実績超過)/ 費用科目: 正=不利(超過)
差異率金額差異 ÷計画

科目レベルの要因分解(レート差異・能率差異・数量差異等)は現行スコープ外。将来対応は TODO_future 参照。

5.5 みなし法人税の計算

手動で法人税等が計上されていない場合、システムが自動計算する。

  • 所得割: 税引前当期純利益の年度累計に累進課税ブラケットを適用し、月次差分を算出。赤字月はゼロにクランプ(マイナスにならない)
  • 均等割(地方税のみ): 年額を事業月数で按分し毎月定額計上。設立初年度は設立月から期末までの月数で按分(1ヶ月未満切上、100円未満切捨)。端数は最終月に加算
  • 手動計上された法人税等がある場合、みなし法人税の自動計算はスキップ

→ 技術詳細: §4.4 STEP C3 参照

5.6 境界月(実績 vs 予算の切り替え)

境界月 = 承認済INVの最大発生月 + 1ヶ月(当月を超えない)

発生月 < 境界月 → 実績(32_wrk_invoice から集計)
発生月 >= 境界月 → 予算(41_trn_budget から読み込み)

→ 技術詳細: §4.6 参照


6. 出力スキーマ

列構成

#列名内容
1P/L科目 (表示区分 > 勘定科目)セクション・科目ラベル
2通期(Total)12ヶ月合計
3〜14各月 (実績/予算)月別金額。ヘッダーに「実績」「予算」の区分を付記

行構成

行タイプ表示形式
グループヘッダー■ セクション名■ 販売費及び一般管理費
科目明細科目名支払手数料
小計【セクション名 計】【販売費及び一般管理費 計】
利益行セクション名売上総利益, 営業利益, ...
みなし法人税🤖 法人税等・国税/地方税(税率内訳)

P/Lセクション → 科目マッピング

セクション表示区分のキーワード科目例
売上高 (sales)売上高, 営業収益, 売上売上高
売上原価 (cogs)売上原価, 原価, 仕入仕入高
販管費 (sga)販管, 販売, 管理, 一般役員報酬, 給料手当, 支払手数料
未定・バッファ (buffer)指定なし, バッファ
営業外収益 (non_op_inc)営業外収益, 外収益雑収入
営業外費用 (non_op_exp)営業外費用, 外費用, 支払利息支払利息
特別利益 (ext_inc)特別利益
特別損失 (ext_exp)特別損失
法人税等 (tax)法人税, 税金法人税等

7. エッジケース・境界条件

ケース条件処理
noCash (仕訳振替)決済手段 = "仕訳振替"P/L・B/Sには通常通り計上。C/Fには含めない(現金移動なし)。cashPlug補正: P/L項目→未払金で相殺、B/S負債→立替未精算(資産)で相殺
赤字月のみなし法人税月次差分がマイナスゼロにクランプ(マイナスにならない)
手動法人税あり法人税等セクションに計上済み科目ありみなし法人税の自動計算をスキップ
設立初年度の均等割事業月数 < 12年額を事業月数で按分(100円未満切捨)
表示区分が空11_mst_account の表示区分が未設定エラー(セクション判定不可)
マスタ未登録科目acctMap にキーなしエラー(キーワード推測は禁止)

noCash の具体例

雑収入 2,000 (仕訳振替):
  → P/L: 2025-12 に 雑収入 +2,000 ← 計上する
  → C/F: SKIP(現金は動かない)
  → cashPlug: 未払金で相殺(現預金を増やさない)

預り金 +42 (仕訳振替):
  → B/S: 2025-12 に 預り金(流動負債) +42 ← 計上する
  → C/F: SKIP
  → cashPlug: 立替未精算(資産)で相殺

8. テスト仕様

入力: 4件のINV (EMP_0002 角会計事務所 2025-11月分)

INV科目名税込金額_計画収支区分発生日P/L or B/S
Row 1支払手数料22,000支出2025-11-30P/L
Row 1b雑収入2,000収入2025-12-25P/L
Row 2a預り金42支出2025-12-25B/S (P/L対象外)
Row 2預り金-42支出2026-01-10B/S (P/L対象外)

期待: P/L出力

セクション科目金額
2025-11販管費 (sga)支払手数料-22,000
2025-12営業外収益 (non_op_inc)雑収入+2,000

期待: 利益への影響

利益行2025-112025-12通期
営業利益-22,0000-22,000
経常利益-22,000+2,000-20,000

付録A: 実装変更の影響範囲

ファイル変更内容
601_datamart_ingest.js実績ソースを 42→32 に変更。INVヘッダーベースで読み込み
602_datamart_main.jsdmProcessAllEvents_ の入力を INV ベースに変更
603_datamart_pl.js変更なし(セクション分類・計算ロジックはそのまま)

付録B: 出力フォーマット (92_fs_pl)

項目仕様
列幅自動調整数値・日付列のみ(ラベル列は固定)
フィルタースキーマシートに自動設定
条件付き書式なし(現行)

付録C: 計画P/L

計画P/Lの生成ロジック・出力スキーマの詳細は spec_plan — 出力スキーマ を参照。