MAS-063: P/L 営業外損益指標拡張(営業外損益率 + Interest Coverage Ratio + 段階的昇格機構)
概要
| 項目 | 内容 |
|---|---|
| 案件 ID | MAS-063 |
| 案件名 | P/L 営業外損益指標拡張(営業外損益率 + Interest Coverage Ratio + 段階的昇格機構) |
| カテゴリ | FP&A・財務体質 |
| 優先度 | P2 ★★(v1 即時着手可・公庫融資申請時に v1.1 昇格・SZ-3 以降に v2 昇格) |
| 所要時間 | 約 1.0 ヶ月(v1 のみなら 0.5 ヶ月) |
| 実装ステータス | 📝 仕様書段階・実装未着手 (2026-04-28 監査時点) |
| 対象ファイル(新規) | 400_domain/450_pl_non_operating_engine.js(純粋関数・営業外損益分解 + ICR 算出 + パターン診断) |
| 対象ファイル(変更) | 600_report/603_datamart_pl.js(P/L 末尾に新セクション追加)/ 100_config/101_sys_config.js(11_mst_account に「営業外損益サブ分類」属性追加)/ 000_infra/002_constants.js(MENU_DEFINITION + 信号機閾値追加) |
| 新規シート | なし(既存 11_mst_account / 92_fs_pl / 93_kpi_dashboard に列追加のみ) |
新規 03_sys_params キー | F63_ENABLED_METRICS(default "operating_non_op_diff")/ F63_NON_OP_RATIO_THRESHOLD(default 0.005 = 0.5%)/ F63_ICR_THRESHOLD_DANGER(default 1.0)/ F63_ICR_THRESHOLD_WARN(default 3.0)/ F63_ICR_THRESHOLD_EXCELLENT(default 10.0)/ F63_COVENANT_ICR_FLOOR(default 1.5)の計 6 キー |
| 前提案件 | MAS-003 KPI ダッシュボード(✅ 完了)/ MAS-024 BEP 分析(✅ 完了・P/L 末尾拡張パターン先例)/ MAS-073 法人税(✅ 完了・経常利益から先で連動) |
| 後続連携 | MAS-008 Cash Runway(ICR で 13 週 CF 予測精度向上)/ MAS-017 資金調達シミュレーション(ICR と DSCR の二重判定)/ MAS-058 必要年商シミュレーター(借入返済余力を制約条件として組込検討)/ MAS-062 PSF(P/L 末尾拡張ブロックの 2 つ目として並列共存) |
| 吸収・再定義対象 | なし(既存 KPI 体系の拡張領域) |
目的
経常利益率と営業利益率の乖離を P/L 上で可視化し、財務体質の異常検知 + 借入返済余力モニタリングを段階的に拡充する。
既存の MAS-003(KPI ダッシュボード ✅)/ MAS-008(Cash Runway)はランウェイと一般 KPI を扱うが、「営業外損益の構造分解 + Interest Coverage の段階的昇格機構」を扱う仕様は空白。bizlp 規模(PH-1 + SZ-1 + BZ-5)では営業外損益が小さく営業利益率と経常利益率がほぼ一致するのが正常な状態であり、乖離 ±0.5% 超で異常検知アラートを行うのが実用的。借入活用フェーズに入ったら Interest Coverage Ratio を昇格して銀行 covenant モニタリング指標として運用する段階的アプローチが筋。MAS-062 PSF(売上構造の差別化)/ MAS-061 Cash ETR(税務最適化)/ MAS-063 営業外損益(財務体質)の 3 軸で P/L 拡張ブロックが完成し、bizlp 経営者が「本業 vs 財務外 vs 税務」を月次 P/L 1 枚で全把握できる体験を提供する。
現在のコード
本案件は MAS-024 BEP 分析が確立した「P/L 末尾拡張ブロック」パターンに 3 つ目(MAS-062 PSF と並列)として追加する。新規ロジックは営業外損益分解 + ICR 算出 + パターン診断のみで、P/L 集計・MAS-003 描画は既存関数を流用する。
MAS-024 BEP 分析(✅ 完了)の P/L 末尾拡張パターン
| 関数 | 定義ファイル | 用途 |
|---|---|---|
renderPlBepSection_(sheet, plData) | 600_report/603_datamart_pl.js(既存) | P/L 末尾に BEP セクションを描画 |
Constants.PL_EXTENSION_ANCHOR_ROW | 000_infra/002_constants.js(既存) | BEP 直下の追加先行を計算するアンカー |
11_mst_account(既存)の現状
現状は科目名 / 区分(収益/費用/資産/負債/純資産)/ 表示順 のみ。本案件で 「営業外損益サブ分類」属性(6 区分: 受取利息 / 受取配当金 / 支払利息 / 為替差損益 / 持分法投資損益 / その他)を 1 列追加する。営業外区分外の科目は空欄で互換性維持。
MAS-073 法人税(✅ 完了)
経常利益から先(法人税等)の計算は既存。本案件は 経常利益までの集計を扱い、MAS-073 とは演算範囲が重複しない。
MAS-008 Cash Runway(既存)
ランウェイ計算は既存。本案件 v1.1 で ICR が昇格したら、ICR 維持月数(≥3.0 を割り込むまでの月数)を Runway 派生指標として MAS-008 側に追加する将来連携を見込む。
修正方針
Step 1 — 営業外損益サブ分類の整備(11_mst_account 拡張)
100_config/101_sys_config.js の DDL 定義に列追加:
// 11_mst_account の DDL(既存 + 1 列追加)
{ name: '有効FLG', type: 'boolean' },
{ name: '科目ID', type: 'string' },
{ name: '科目名', type: 'string' },
{ name: '区分', type: 'enum', values: ['収益','費用','資産','負債','純資産'] },
{ name: '表示順', type: 'number' },
{ name: '営業外サブ分類', type: 'enum', values: ['','interest_income','dividend_income','interest_expense','fx_gain_loss','equity_method','other'] }, // ← 新規(v1)
既存科目への割当はマイグレーション 8XX_migration_f63_non_op_subcategory.js を新設して冪等実行(既知の典型科目: 受取利息→interest_income / 受取配当金→dividend_income / 支払利息→interest_expense / 為替差益・差損→fx_gain_loss / 持分法投資損益→equity_method / 雑収入・雑損失→other)。未知の科目はサブ分類空欄で残す(手動レビュー対象)。
Step 2 — 営業外損益率の算出 + 信号機(v1)
// 400_domain/450_pl_non_operating_engine.js (純粋関数 + IIFE 名前空間)
var PlNonOperatingEngine = (function () {
/**
* @param {Object} plData
* @param {number} plData.revenue 売上高
* @param {number} plData.operatingProfit 営業利益
* @param {number} plData.ordinaryProfit 経常利益
* @param {Object} plData.nonOpBreakdown {interest_income, dividend_income, interest_expense, fx_gain_loss, equity_method, other}
* @param {number} [plData.borrowingBalance] 借入金残高(v1.1 で必須)
* @param {Object} [params] 03_sys_params override
* @returns {{operatingMargin, ordinaryMargin, nonOpRatio, signal,
* interestCoverage, icrSignal, pattern, comment}}
*/
function computeNonOpMetrics(plData, params) {
var p = params || _loadParamsFromSysParams_();
var enabled = (p.enabledMetrics || 'operating_non_op_diff').split(',');
var operatingMargin = plData.operatingProfit / plData.revenue;
var ordinaryMargin = plData.ordinaryProfit / plData.revenue;
var nonOpRatio = ordinaryMargin - operatingMargin;
var signal = Math.abs(nonOpRatio) <= p.nonOpRatioThreshold ? 'GREEN' : 'RED';
var result = {
operatingMargin: operatingMargin,
ordinaryMargin: ordinaryMargin,
nonOpRatio: nonOpRatio,
signal: signal,
breakdown: plData.nonOpBreakdown,
pattern: _diagnosePattern_(operatingMargin, ordinaryMargin, plData.nonOpBreakdown),
};
// v1.1: ICR 基本版
if (enabled.indexOf('interest_coverage') >= 0) {
result.interestCoverage = _calcIcrBasic_(plData);
result.icrSignal = _classifyIcr_(result.interestCoverage, p);
}
// v1.2: ICR 厳密版(事業利益ベース)
if (enabled.indexOf('interest_coverage_strict') >= 0) {
result.interestCoverageStrict = _calcIcrStrict_(plData);
}
// v2: 事業利益率 + 財務収支比率 + 営業外損益依存度
if (enabled.indexOf('business_profit_margin') >= 0) {
result.businessProfitMargin = _calcBusinessProfitMargin_(plData);
result.financialBalanceRatio = _calcFinancialBalanceRatio_(plData);
result.nonOpDependency = _calcNonOpDependency_(plData);
}
result.comment = _generatePatternComment_(result.pattern, result);
return result;
}
return { computeNonOpMetrics: computeNonOpMetrics };
})();
Step 3 — ICR 算出 + 4 段階信号機(v1.1 / v1.2)
| 計算式 | 名称 | 段階 |
|---|---|---|
営業利益 ÷ 支払利息 | ICR 基本版 | v1.1 |
(営業利益 + 受取利息 + 受取配当金) ÷ 支払利息 | ICR 厳密版(事業利益ベース) | v1.2 |
信号機(4 段階):
| 信号 | 範囲 | 評価 |
|---|---|---|
| 🔴 | < 1.0 | 危険(本業利益で利息カバー不能) |
| 🟡 | 1.0 - 3.0 | 注意 |
| 🟢 | ≥ 3.0 | 健全 |
| 💎 | ≥ 10.0 | 借入余力あり |
加えて covenant 維持可否(ICR ≥ F63_COVENANT_ICR_FLOOR を満たすか)を別セルで判定。融資契約書に financial covenant が含まれる際の自動モニタリングに使う。
Step 4 — 段階的昇格機構(F63_ENABLED_METRICS)
03_sys_params キー F63_ENABLED_METRICS で表示指標を段階制御:
| 値 | フェーズ | 表示指標 |
|---|---|---|
"operating_non_op_diff" | v1(現在・無借金) | 営業外損益率のみ |
"operating_non_op_diff,interest_coverage" | v1.1(公庫融資後) | + ICR 基本版 |
"operating_non_op_diff,interest_coverage,interest_coverage_strict" | v1.2(投資収益が出始め) | + ICR 厳密版 |
"operating_non_op_diff,interest_coverage,interest_coverage_strict,business_profit_margin" | v2(SZ-3 以降) | + 事業利益率 + 財務収支比率 + 営業外損益依存度 |
昇格は手動(03_sys_params セル直接編集)。注意事項 #4 で自動昇格の判断基準を整理。
Step 5 — パターン診断(経常 >/=/< 営業)+ 自動コメント
戦略メモ §3 の「乖離パターン 3 種」を spec 内アルゴリズム化:
| パターン | 条件 | 自動コメント例 |
|---|---|---|
| パターン 1: 経常 > 営業 | 営業外プラス | 「営業外プラス。受取利息 X / 配当 Y で構成。為替差益が主因なら一時上振れ警戒」(為替差益が分解の 50% 超なら警戒コメント追加) |
| パターン 2: 経常 < 営業 | 営業外マイナス | 「営業外マイナス(典型: 支払利息)。ICR 維持を継続モニタリング」(ICR 有効化済みならその値を併記) |
| パターン 3: 経常 ≒ 営業 | 乖離 ±0.5% 以内 | 「営業外損益ほぼゼロ。中小企業の理想的パターン」 |
UI 上で「この期はパターン X です」をテンプレート文字列で自動生成(LLM 不要・決定論的)。MAS-056 対話 UI 接続時の Tool 化はオプション。
影響範囲
| 対象 | 種別 | 変更内容 | リスク |
|---|---|---|---|
400_domain/450_pl_non_operating_engine.js | 追加 | PlNonOperatingEngine.computeNonOpMetrics() + 内部ヘルパ群(純粋関数・約 200 行) | 既存ロジックへの影響なし |
600_report/603_datamart_pl.js | 変更 | renderPlNonOperatingSection_() 追加 + refreshPlDatamart() から呼出 | MAS-024 BEP / MAS-062 PSF の直下に並列追加・既存描画への影響なし |
100_config/101_sys_config.js | 変更 | 11_mst_account DDL に「営業外サブ分類」列追加 + setupAllSchemas の既存 sheet 再作成挙動の確認 | 既存科目は空欄で初期化・後方互換性維持 |
000_infra/002_constants.js | 変更 | MENU_DEFINITION + F03_NON_OP_THRESHOLDS 信号機閾値追加 | 既存メニューに影響なし |
93_kpi_dashboard | 変更 | 営業外損益率 + ICR + covenant 維持可否の 3 セル追加 + 条件付き書式 | MAS-003 既存セルに影響なし |
92_fs_pl | 変更 | P/L 末尾に新セクション(営業外損益分解テーブル + ICR ブロック) | MAS-024 BEP / MAS-062 PSF の直下・既存セクションに影響なし |
03_sys_params | 変更 | 6 キー追加(F63_*)。Constants.getParam 経由で読込・default fallback あり | シード未実行でも default 値で動作 |
8XX_migration_f63_non_op_subcategory.js | 追加 | 既存 11_mst_account の典型科目に営業外サブ分類を一括付与(冪等) | 一度実行すればスキップ・未知科目は空欄維持 |
900_test/901_test_runner.js | 変更 | MAS-063 単体テスト F63-01〜F63-13 追加 | 既存テストへの影響なし |
| MAS-008 Cash Runway | 連携拡張(v1.1) | ICR 維持月数を派生指標として呼び出し(任意) | MAS-008 既存ロジック変更不要 |
| appsscript.json | 変更なし | OAuth スコープ追加不要 | failure_patterns #26 遵守 |
注意事項
bizlp 規模では「正常 = 一致」: 戦略メモ §5 の運用方針通り、bizlp 規模では営業外損益が小さい(雑収入・振込手数料・わずかな受取利息)ため、営業利益率と経常利益率がほぼ一致するのが正常状態。乖離 ±0.5% 超で警告するアラート指標として運用する。閾値妥当性は四半期ごとに再確認。
公庫融資申請時に v1.1 昇格: 新規開業・スタートアップ支援資金など借入活用フェーズに入ったら、
F63_ENABLED_METRICSにinterest_coverageを追加して ICR を表示。融資契約書に financial covenant が明記された場合はF63_COVENANT_ICR_FLOORを契約値に合わせる。banking covenant としての ICR 運用: 日本の銀行融資(特に長期)では財務制限条項に ICR ≥ 1.5 や 2.0 が含まれるケースあり。自動モニタリングは spec が提供するが、契約書確認 + 実際の covenant 値の手動入力は必須(spec 外)。
昇格タイミングの自動 vs 手動判断: 借入金残高 > 0 で自動 v1.1 昇格にすると過剰反応のリスク(一時的な短期借入)あり。v1.1 への昇格は手動を default とし、自動化は「借入金残高が 3 ヶ月連続 > 0」等の二重条件で v2 で検討。
為替差損益処理は MAS-064 候補連携: 多通貨対応は §5 Out of Scope の MAS-064 候補に派生(戦略メモ §9 / TODO §5 MAS-262 派生)。本案件 v1 では
fx_gain_lossサブ分類のみ提供し、円換算ロジックは MAS-064 が採用されたタイミングで連携。事業利益率は v2 で SZ-3 以降: 持分法投資利益が発生するのは関連会社設立時(SZ-3〜SZ-4)。それまで事業利益率は営業利益率とほぼ同値で表示する意味が薄い。v2 昇格は関連会社設立時のトリガーとする。
海外指標との対応関係(戦略メモ §7): 経常利益率 ≒ EBIT Margin / 事業利益 = Operating income + Equity in earnings of affiliates / ICR は同名。海外顧客が増えたら IFRS 軸切替を検討する場面が来る可能性あり(多通貨対応 MAS-064 と連動)。spec はあくまで日本式(経常利益軸)で記述。
failure_patterns #25 遵守(並列実装対称性): MAS-024 BEP / MAS-062 PSF と完全に対称な構造を保つ。
renderPlBepSection_↔renderPlPsfSection_↔renderPlNonOperatingSection_の 3 関数で命名統一。failure_patterns #18-#20 遵守(命名造語禁止): 関数名
computeNonOpMetrics/renderPlNonOperatingSection_は既存命名と整合(動詞 + 目的語)。ICR / EBIT は業界標準略称で新語ではない。Read で既存ファイルに同名関数がないことを着手時に裏取り。failure_patterns #26 遵守:
appsscript.jsonの OAuth スコープは変更不要(既存スコープ内で完結)。支払利息ゼロでの ICR 算出: 分母ゼロのため
Infinityを防ぎ、UI 上は 「N/A(無借金)」 と明示表示。F63_ENABLED_METRICSにinterest_coverage含まれていても、支払利息ゼロなら ICR セクション全体を非表示にする(v1 状態と等価表示)。営業利益マイナスでの ICR 算出: 分子マイナスのため ICR < 0 になる。「赤字 + 借入あり = 危機的」 として 🔴 + 「営業赤字につきカバレッジ算出不能」コメント自動付加。
戦略メモ更新時の MAS-063 spec 同期フロー:
docs/_internal/biz/pl_metrics_non_operating_strategy.mdが更新されたら、本 spec の §目的・§注意事項 #1-#7 を再点検。戦略メモは経営者本人の SSoT・spec はそれを実装に落とした派生物 という関係性を保つ。
エッジケース
| # | 条件 | 期待される挙動 | 理由・ログ出力 |
|---|---|---|---|
| 1 | revenue = 0(売上ゼロ月) | 営業外損益率 = null(NaN 回避)+ 「データ不足」表示 | 創業初期・受注ギャップ月 |
| 2 | operatingProfit < 0(営業赤字)+ ICR 有効 | ICR < 0、🔴 + 「営業赤字につきカバレッジ算出不能」コメント | 危機的状態の検出シグナル |
| 3 | interestExpense = 0(無借金)+ ICR 有効 | ICR セクションを非表示 + 「N/A(無借金)」セル表示 | 無借金期の混乱回避 |
| 4 | 11_mst_account に営業外サブ分類が未付与の科目 | 「その他」扱いで集計 + 月次ログ「未分類営業外科目: X 件」 | マイグレーション未実行 / 新規科目追加時の検出 |
| 5 | 為替差益が分解の 50% 超 | パターン 1 コメントに「為替差益主因・一時上振れ警戒」を追加 | 戦略メモ §3-1 の警戒ケース |
| 6 | 為替差損が分解の 50% 超 | パターン 2 コメントに「為替差損主因・本業好調でも財務面注意」を追加 | 戦略メモ §3-2 の注意ケース |
| 7 | 営業外損益率が ±0.5% を超えるが分解未集計 | 警告 🔴 + 「サブ分類未整備により内訳分析不能」コメント | データ整備の促進シグナル |
| 8 | covenant ICR floor < 実 ICR | 「covenant 維持」🟢 表示 | 通常ケース |
| 9 | covenant ICR floor > 実 ICR | 「covenant 違反リスク」🔴 + アラート | 融資契約違反リスクの早期検出 |
| 10 | 03_sys_params の F63_ICR_THRESHOLD_* キーが範囲外(負値・順序逆転) | 起動時バリデーション: 範囲外なら default で上書き + WARN ログ | ユーザー誤設定対策・MAS-058/MAS-062 と同パターン |
| 11 | F63_ENABLED_METRICS 未設定 | default "operating_non_op_diff" で動作(v1 のみ) | 初期セットアップ時の自然な挙動 |
| 12 | 持分法投資が発生した最初の月(v2 未昇格) | 「持分法投資が検出されました。F63_ENABLED_METRICS に business_profit_margin 追加で v2 昇格できます」アドバイスを月次ログに出力 | v2 昇格促進シグナル |
| 13 | 経常利益率と営業利益率の差が乖離 ±0.5% を継続 3 ヶ月超 | パターン診断結果に「3 ヶ月連続乖離・恒常的構造」コメント追加 | 一時的異常 vs 構造的異常の区別 |
実データ検証
1. bizlp 自身の現状値(戦略メモ §5 をテストフィクスチャ化)
実装完了後に以下を 901_test_runner.js で自動検証し、正常範囲内であることを合格基準とする:
| 軸 | 現状期待値(戦略メモ §5) | 信号機 | パターン |
|---|---|---|---|
| 営業利益率 | 算出値 X% | — | — |
| 経常利益率 | 算出値 ≒ X%(雑収入数千円程度の差) | — | — |
| 営業外損益率 | ±0.5% 以内 | 🟢 | パターン 3(理想的) |
| ICR | 支払利息ゼロにつき N/A | — | — |
2. 公庫融資想定時の ICR シミュレーション
仮想的な借入条件(借入金 1,000 万 / 実効金利 2% / 月次支払利息 16,667 円 / 年間 200,000 円)を入力し、現状の営業利益で ICR ≥ 3.0 を満たすことを検証。
| 借入条件 | 月次支払利息 | 想定 ICR | 信号機 |
|---|---|---|---|
| 1,000 万 / 2% | 16,667 円 | 営業利益 2,400 万なら 120 倍 | 💎 |
| 5,000 万 / 2% | 83,333 円 | 営業利益 2,400 万なら 24 倍 | 💎 |
| 1 億 / 2% | 166,667 円 | 営業利益 2,400 万なら 12 倍 | 💎 |
bizlp 規模では現状の営業利益水準が維持される限り ICR は 💎 領域で推移する想定。
3. パターン診断の網羅検証
3 パターン × 為替差益/差損主因の有無 = 5 ケースを単体テスト F63-05〜F63-09 で網羅。
4. MAS-024 BEP / MAS-062 PSF との並列共存検証
refreshPlDatamart() 実行後の 92_fs_pl で 3 セクション(BEP / PSF / 営業外損益)が指定順に描画されること、相互の行範囲が重複しないことを spec 上の expected 行範囲と照合。
5. エッジケース検証(単体テスト F63-01〜F63-13)
エッジケースセクションの 13 項目それぞれを 1 テストケースとして 901_test_runner.js に追加。
関連ドキュメント
| カテゴリ | ドキュメント | 関係 |
|---|---|---|
| 戦略 SSoT(最重要) | pl_metrics_non_operating_strategy.md | 経営者本人の分析・本案件の起票根拠資料。段階的昇格機構(v1 → v1.1 → v1.2 → v2)の SSoT |
| MAS-003 KPI ダッシュボード | dev_mas-003_kpi_dashboard.md | 93_kpi_dashboard 拡張先。営業外損益率 + ICR + covenant 維持セルを追加 |
| MAS-008 Cash Runway | dev_mas-008_cash_runway.md | ICR 連動で 13 週 CF 予測の精度向上(v1.1 連携) |
| MAS-017 資金調達シミュレーション | TODO_future.md の MAS-017 行 | 借入判断時に ICR と DSCR の二重判定 |
| MAS-024 BEP 分析 | dev_mas-024_bep_analysis.md | P/L 末尾拡張パターンの先例。renderPlBepSection_ ↔ renderPlNonOperatingSection_ 並列対称 |
| MAS-058 必要年商シミュレーター | dev_mas-058_required_revenue_solver.md | 借入返済余力(ICR 維持)を制約条件として組込検討 |
| MAS-062 PSF プロフィタビリティ拡張 | dev_mas-062_psf_profitability_extension.md | P/L 末尾拡張ブロック 2 つ目として並列共存 |
| MAS-064 多通貨対応(候補) | TODO_future.md §5 MAS-262 派生 | 為替差損益処理の本格対応で本案件と連携 |
| MAS-065 連結会計(候補) | TODO_future.md §5 MAS-263 派生 | 関連会社設立時の事業利益率昇格と連動 |
| MAS-073 法人税 | dev_mas-073_corporate_tax.md | 経常利益から先(法人税等)の計算で連動 |
| use_cases.md OP-X8 | use_cases.md | 月次レビュー時の P/L 拡張指標確認 |
| PRD プロダクトポリシー | prd.md | Human-in-the-Loop 原則(指標は提案・最終判断はユーザー) |
| 失敗パターン | failure_patterns.md | 特に #18-#20(命名造語)/ #25(並列実装対称性)/ #26(oauthScopes) |
| CLAUDE.md | CLAUDE.md | プロジェクトルール・GAS ファイル番号体系・コーディング規約 |
人間が検討すべき事項
営業外損益サブ分類の DDL 拡張判断: 11_mst_account への 1 列追加で対応するか、別マスタ
12_mst_tax_classification(MAS-061 と統合)で扱うか。両者を 1 つの「科目属性」として統合するか別管理にするか。アラート閾値 ±0.5% の妥当性: 業種・規模で変える可能性。SaaS(粗利高)と物販(粗利低)で意味が異なる。商用化時にテナント別 default を持つか。
ICR 昇格タイミングの自動化: 公庫融資申請時に手動有効化 vs 借入金残高 > 0 で自動有効化。短期借入の頻発を考慮すると 借入金残高 > 0 が 3 ヶ月連続 等の二重条件が現実的。
パターン診断の自動コメント生成 UI: テンプレート文字列(決定論的・spec 採用)vs LLM 生成(自然言語の自由度)。LLM 採用時は MAS-056 / MAS-059 経由で Tool 化が筋。
為替差損益が出始めた時の処理: MAS-063 サブ分類の 1 つとして扱うか、MAS-064 多通貨対応(候補)に移譲するか。MAS-064 候補が起票されたタイミングで MAS-063 v1.1 → MAS-064 v1.0 への移管を spec で明示するか。
関連会社設立時の事業利益率昇格と MAS-065 連結会計起票のトリガー条件: 持分法投資が出た時点で v2 自動昇格か、MAS-065 連結会計起票時に手動昇格か。SZ-3〜SZ-4 で持株会社化する経営判断と直結するため、自動化は控えめに。
海外顧客が増えた場合の IFRS 軸切替判断: multi-currency = MAS-064 連動。海外顧客比率の閾値(例: 海外売上比率 ≥ 30%)で警告 + IFRS 軸切替の検討促進アドバイスを出すか。
公庫融資申請時の covenant ICR floor 取得方法: 契約書から手動入力 vs 自動 OCR(MAS-173 複合機スキャン連携)。融資契約書管理(MAS-253 候補)と統合検討。
MAS-008 Cash Runway との連携深度(v1.1 以降): ICR 維持月数を Runway 派生指標として MAS-008 に追加するか、MAS-063 内で完結するか。Runway 拡張は MAS-008 spec への変更が必要なため別 PR 推奨。
戦略メモ更新時の MAS-063 spec 同期フロー: SSoT 更新の検知方法(git hook / 手動レビュー)。
docs/_internal/biz/全般の同期ルール化が必要(MAS-062 と共通課題)。
実装プロンプト(Claude Code 用)
Claude Sonnet 4.6 推奨。MAS-024 BEP セクションの拡張パターンに MAS-058 spec の純粋関数 + 4 段階信号機を組合せる中難易度。v1 のみなら半月で完了可能。
## 案件
MAS-063 — P/L 営業外損益指標拡張(営業外損益率 + ICR 段階的昇格)
## 事前調査(必ず Read する)
1. `docs/dev/dev_mas-063_pl_non_operating_metrics.md` 全文(本仕様書)
2. `docs/_internal/biz/pl_metrics_non_operating_strategy.md` 全文(戦略 SSoT)
3. `docs/dev/dev_mas-024_bep_analysis.md` — P/L 末尾拡張パターンの先例
4. `docs/dev/dev_mas-062_psf_profitability_extension.md` — 並列実装の対称性手本
5. `docs/dev/dev_mas-058_required_revenue_solver.md` — 純粋関数 + 信号機ロジックの手本
6. `docs/dev/dev_mas-003_kpi_dashboard.md` — 93_kpi_dashboard 拡張方法
7. `100_config/101_sys_config.js` — 11_mst_account DDL 拡張箇所
8. `600_report/603_datamart_pl.js` — `renderPlBepSection_` 実装確認
9. `docs/_internal/failure_patterns.md` #18-#20 / #25 / #26
## 実装対象(v1 = 営業外損益率のみで MVP リリース可)
1. `400_domain/450_pl_non_operating_engine.js` 新規(IIFE 名前空間 PlNonOperatingEngine):
- computeNonOpMetrics(plData, params) — メイン API
- 内部ヘルパ: _loadParamsFromSysParams_ / _diagnosePattern_ / _generatePatternComment_
- v1.1 用: _calcIcrBasic_ / _classifyIcr_
- v1.2 用: _calcIcrStrict_
- v2 用: _calcBusinessProfitMargin_ / _calcFinancialBalanceRatio_ / _calcNonOpDependency_
2. `600_report/603_datamart_pl.js` 拡張:
- renderPlNonOperatingSection_(sheet, plData) を `renderPlPsfSection_` 直下に追加
- refreshPlDatamart() から呼出
3. `100_config/101_sys_config.js` 拡張:
- 11_mst_account DDL に 営業外サブ分類 列追加(6 値 + 空欄)
4. `8XX_migration_f63_non_op_subcategory.js` 新規(番号は `ls 800_ops/` で次番取得):
- 既存 11_mst_account 既知科目に営業外サブ分類を一括付与(冪等)
5. `93_kpi_dashboard` セル追加(MAS-003 既存セルの右隣)+ 条件付き書式
- 営業外損益率 / ICR / covenant 維持可否
6. `03_sys_params` の 6 キー追加(default は Constants.getParam の第 2 引数)
7. `900_test/901_test_runner.js` に F63-01〜F63-13 単体テスト
## 動作確認
1. bizlp 現状データで営業外損益率が ±0.5% 以内 → 🟢 + パターン 3 表示
2. 仮想借入条件で ICR が 💎 領域
3. パターン診断 5 ケース網羅
4. エッジケース 13 項目すべて想定通り
## デプロイ
1. dev で push:dev → メニュー「📊 マート更新」実行 → 92_fs_pl 末尾の営業外損益セクション目視確認
2. Go なら push:prod
3. コミット: feat(MAS-063 v1): P/L 営業外損益指標拡張 (営業外損益率 + パターン診断)
## failure_patterns チェック
- #18-#20: computeNonOpMetrics / renderPlNonOperatingSection_ を Read で裏取り
- #25: MAS-024 BEP / MAS-062 PSF と対称構造
- #26: appsscript.json は変更なし
推奨実行モデル
| 工程 | 推奨モデル | 根拠 |
|---|---|---|
| Phase 1 (v1) PlNonOperatingEngine コア + 営業外損益率 + パターン診断 | Claude Sonnet 4.6 | MAS-058/MAS-062 のパターン適用・中程度の判断 |
| Phase 2 (v1.1) ICR 基本版 + 4 段階信号機 + covenant 判定 | Claude Sonnet 4.6 | 公庫融資フェーズで起動・追加実装は小規模 |
| Phase 3 (v1.2) ICR 厳密版(事業利益ベース) | Claude Sonnet 4.6 | 計算式追加のみ |
| Phase 4 (v2) 事業利益率 + 財務収支比率 + 営業外損益依存度 | Claude Opus 4.7 (1M context) | 関連会社設立時の指標再設計・SZ-3 以降の経営判断と直結する複合判断 |
| マイグレーション 8XX_migration_f63_non_op_subcategory | Claude Haiku 4.5 | 800_ops 既存パターン流用・パターン化された冪等処理 |
| 単体テスト実装(F63-01〜F63-13) | Claude Haiku 4.5 | パターン化された期待値検証 |
| 戦略メモ更新時の spec 同期レビュー | Claude Opus 4.7 (1M context) | SSoT 整合性の判断は domain 知識必須 |
| 仕様書レビュー | Gemini 3 Pro Preview + Deep Think | 第三者視点での閾値妥当性検証 |
変更履歴
| 日時 | バージョン | 変更内容 |
|---|---|---|
| 2026-04-27 | v0.1 (骨組み) | 初版骨組み作成。全セクション見出し + 概要テーブルのみ。ai_agent_tips.md §6 の章単位生成方針を準用。 |
| 2026-04-27 | v0.2 (本体) | 現在のコード(MAS-024 拡張パターン / 11_mst_account 拡張 / MAS-073 連動範囲 / MAS-008 連携)+ 修正方針 5 Step 本文(11_mst_account サブ分類整備 / 営業外損益率算出 + 信号機 / ICR 4 段階 + covenant / 段階的昇格機構 F63_ENABLED_METRICS / パターン診断 + 自動コメント)を追記。JavaScript 疑似コードで PlNonOperatingEngine の computeNonOpMetrics を提示。 |
| 2026-04-27 | v0.3 (堅牢化) | 影響範囲テーブル(新規 2 / 変更 7 / 変更なし 2)+ 注意事項 13 項目(bizlp 規模で正常一致 / 公庫融資 v1.1 昇格 / banking covenant 運用 / 昇格自動 vs 手動 / 為替 MAS-064 連携 / 事業利益率は v2 SZ-3 以降 / 海外指標 IFRS 軸 / failure_patterns #25/#26 / 支払利息ゼロ / 営業赤字 ICR 等)+ エッジケース 13 パターン(売上ゼロ / 営業赤字 / 無借金 / サブ分類未付与 / 為替主因 / covenant 違反 / 持分法初検出 / 3 ヶ月連続乖離 等)+ 実データ検証 5 本(bizlp 現状 / 公庫融資 ICR シミュレーション / パターン診断網羅 / MAS-024/MAS-062 並列共存 / 単体テスト F63-01〜F63-13)。 |
| 2026-04-27 | v1.0 (仕様書完了) | 関連ドキュメント 14 件(戦略 SSoT を最上位 / MAS-003 / MAS-008 / MAS-017 / MAS-024 / MAS-058 / MAS-062 / MAS-064-65 候補 / MAS-073 / use_cases.md / PRD / failure_patterns / CLAUDE.md)+ 人間検討事項 10 項目(DDL 拡張判断 / 閾値妥当性 / ICR 昇格自動化 / パターンコメント UI / 為替 MAS-064 連携 / 関連会社 MAS-065 / IFRS 切替 / covenant OCR / MAS-008 連携深度 / 戦略メモ同期)+ 実装プロンプト(Claude Sonnet 4.6 向け・事前調査 9 / 実装対象 7 / 動作確認 4 / failure_patterns チェック)+ 推奨実行モデル(Phase 1-4 + マイグレーション + テスト + レビュー)。仕様書完了(v1.0)として昇格。v1(営業外損益率のみ)は前提案件揃っているため即時着手可能。MAS-017 仕様書起票または公庫融資申請の意思決定タイミングで v1.1 ICR 昇格の本格実装をキックオフ。 |