概要

項目内容
案件 IDMAS-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.jsMENU_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_ROW000_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.jsDDL 定義に列追加:

// 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 遵守

注意事項

  1. bizlp 規模では「正常 = 一致」: 戦略メモ §5 の運用方針通り、bizlp 規模では営業外損益が小さい(雑収入・振込手数料・わずかな受取利息)ため、営業利益率と経常利益率がほぼ一致するのが正常状態。乖離 ±0.5% 超で警告するアラート指標として運用する。閾値妥当性は四半期ごとに再確認。

  2. 公庫融資申請時に v1.1 昇格: 新規開業・スタートアップ支援資金など借入活用フェーズに入ったら、F63_ENABLED_METRICSinterest_coverage を追加して ICR を表示。融資契約書に financial covenant が明記された場合は F63_COVENANT_ICR_FLOOR を契約値に合わせる。

  3. banking covenant としての ICR 運用: 日本の銀行融資(特に長期)では財務制限条項に ICR ≥ 1.5 や 2.0 が含まれるケースあり。自動モニタリングは spec が提供するが、契約書確認 + 実際の covenant 値の手動入力は必須(spec 外)。

  4. 昇格タイミングの自動 vs 手動判断: 借入金残高 > 0 で自動 v1.1 昇格にすると過剰反応のリスク(一時的な短期借入)あり。v1.1 への昇格は手動を default とし、自動化は「借入金残高が 3 ヶ月連続 > 0」等の二重条件で v2 で検討。

  5. 為替差損益処理は MAS-064 候補連携: 多通貨対応は §5 Out of Scope の MAS-064 候補に派生(戦略メモ §9 / TODO §5 MAS-262 派生)。本案件 v1 では fx_gain_loss サブ分類のみ提供し、円換算ロジックは MAS-064 が採用されたタイミングで連携。

  6. 事業利益率は v2 で SZ-3 以降: 持分法投資利益が発生するのは関連会社設立時(SZ-3〜SZ-4)。それまで事業利益率は営業利益率とほぼ同値で表示する意味が薄い。v2 昇格は関連会社設立時のトリガーとする。

  7. 海外指標との対応関係(戦略メモ §7): 経常利益率 ≒ EBIT Margin / 事業利益 = Operating income + Equity in earnings of affiliates / ICR は同名。海外顧客が増えたら IFRS 軸切替を検討する場面が来る可能性あり(多通貨対応 MAS-064 と連動)。spec はあくまで日本式(経常利益軸)で記述。

  8. failure_patterns #25 遵守(並列実装対称性): MAS-024 BEP / MAS-062 PSF と完全に対称な構造を保つ。renderPlBepSection_renderPlPsfSection_renderPlNonOperatingSection_ の 3 関数で命名統一。

  9. failure_patterns #18-#20 遵守(命名造語禁止): 関数名 computeNonOpMetrics / renderPlNonOperatingSection_ は既存命名と整合(動詞 + 目的語)。ICR / EBIT は業界標準略称で新語ではない。Read で既存ファイルに同名関数がないことを着手時に裏取り。

  10. failure_patterns #26 遵守: appsscript.json の OAuth スコープは変更不要(既存スコープ内で完結)。

  11. 支払利息ゼロでの ICR 算出: 分母ゼロのため Infinity を防ぎ、UI 上は 「N/A(無借金)」 と明示表示。F63_ENABLED_METRICSinterest_coverage 含まれていても、支払利息ゼロなら ICR セクション全体を非表示にする(v1 状態と等価表示)。

  12. 営業利益マイナスでの ICR 算出: 分子マイナスのため ICR < 0 になる。「赤字 + 借入あり = 危機的」 として 🔴 + 「営業赤字につきカバレッジ算出不能」コメント自動付加。

  13. 戦略メモ更新時の MAS-063 spec 同期フロー: docs/_internal/biz/pl_metrics_non_operating_strategy.md が更新されたら、本 spec の §目的・§注意事項 #1-#7 を再点検。戦略メモは経営者本人の SSoT・spec はそれを実装に落とした派生物 という関係性を保つ。

エッジケース

#条件期待される挙動理由・ログ出力
1revenue = 0(売上ゼロ月)営業外損益率 = null(NaN 回避)+ 「データ不足」表示創業初期・受注ギャップ月
2operatingProfit < 0(営業赤字)+ ICR 有効ICR < 0、🔴 + 「営業赤字につきカバレッジ算出不能」コメント危機的状態の検出シグナル
3interestExpense = 0(無借金)+ ICR 有効ICR セクションを非表示 + 「N/A(無借金)」セル表示無借金期の混乱回避
411_mst_account に営業外サブ分類が未付与の科目「その他」扱いで集計 + 月次ログ「未分類営業外科目: X 件」マイグレーション未実行 / 新規科目追加時の検出
5為替差益が分解の 50% 超パターン 1 コメントに「為替差益主因・一時上振れ警戒」を追加戦略メモ §3-1 の警戒ケース
6為替差損が分解の 50% 超パターン 2 コメントに「為替差損主因・本業好調でも財務面注意」を追加戦略メモ §3-2 の注意ケース
7営業外損益率が ±0.5% を超えるが分解未集計警告 🔴 + 「サブ分類未整備により内訳分析不能」コメントデータ整備の促進シグナル
8covenant ICR floor < 実 ICR「covenant 維持」🟢 表示通常ケース
9covenant ICR floor > 実 ICR「covenant 違反リスク」🔴 + アラート融資契約違反リスクの早期検出
1003_sys_params の F63_ICR_THRESHOLD_* キーが範囲外(負値・順序逆転)起動時バリデーション: 範囲外なら default で上書き + WARN ログユーザー誤設定対策・MAS-058/MAS-062 と同パターン
11F63_ENABLED_METRICS 未設定default "operating_non_op_diff" で動作(v1 のみ)初期セットアップ時の自然な挙動
12持分法投資が発生した最初の月(v2 未昇格)「持分法投資が検出されました。F63_ENABLED_METRICSbusiness_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.md93_kpi_dashboard 拡張先。営業外損益率 + ICR + covenant 維持セルを追加
MAS-008 Cash Runwaydev_mas-008_cash_runway.mdICR 連動で 13 週 CF 予測の精度向上(v1.1 連携)
MAS-017 資金調達シミュレーションTODO_future.md の MAS-017 行借入判断時に ICR と DSCR の二重判定
MAS-024 BEP 分析dev_mas-024_bep_analysis.mdP/L 末尾拡張パターンの先例。renderPlBepSection_renderPlNonOperatingSection_ 並列対称
MAS-058 必要年商シミュレーターdev_mas-058_required_revenue_solver.md借入返済余力(ICR 維持)を制約条件として組込検討
MAS-062 PSF プロフィタビリティ拡張dev_mas-062_psf_profitability_extension.mdP/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-X8use_cases.md月次レビュー時の P/L 拡張指標確認
PRD プロダクトポリシーprd.mdHuman-in-the-Loop 原則(指標は提案・最終判断はユーザー)
失敗パターンfailure_patterns.md特に #18-#20(命名造語)/ #25(並列実装対称性)/ #26(oauthScopes)
CLAUDE.mdCLAUDE.mdプロジェクトルール・GAS ファイル番号体系・コーディング規約

人間が検討すべき事項

  1. 営業外損益サブ分類の DDL 拡張判断: 11_mst_account への 1 列追加で対応するか、別マスタ 12_mst_tax_classification(MAS-061 と統合)で扱うか。両者を 1 つの「科目属性」として統合するか別管理にするか。

  2. アラート閾値 ±0.5% の妥当性: 業種・規模で変える可能性。SaaS(粗利高)と物販(粗利低)で意味が異なる。商用化時にテナント別 default を持つか。

  3. ICR 昇格タイミングの自動化: 公庫融資申請時に手動有効化 vs 借入金残高 > 0 で自動有効化。短期借入の頻発を考慮すると 借入金残高 > 0 が 3 ヶ月連続 等の二重条件が現実的。

  4. パターン診断の自動コメント生成 UI: テンプレート文字列(決定論的・spec 採用)vs LLM 生成(自然言語の自由度)。LLM 採用時は MAS-056 / MAS-059 経由で Tool 化が筋。

  5. 為替差損益が出始めた時の処理: MAS-063 サブ分類の 1 つとして扱うか、MAS-064 多通貨対応(候補)に移譲するか。MAS-064 候補が起票されたタイミングで MAS-063 v1.1 → MAS-064 v1.0 への移管を spec で明示するか。

  6. 関連会社設立時の事業利益率昇格と MAS-065 連結会計起票のトリガー条件: 持分法投資が出た時点で v2 自動昇格か、MAS-065 連結会計起票時に手動昇格か。SZ-3〜SZ-4 で持株会社化する経営判断と直結するため、自動化は控えめに。

  7. 海外顧客が増えた場合の IFRS 軸切替判断: multi-currency = MAS-064 連動。海外顧客比率の閾値(例: 海外売上比率 ≥ 30%)で警告 + IFRS 軸切替の検討促進アドバイスを出すか。

  8. 公庫融資申請時の covenant ICR floor 取得方法: 契約書から手動入力 vs 自動 OCR(MAS-173 複合機スキャン連携)。融資契約書管理(MAS-253 候補)と統合検討。

  9. MAS-008 Cash Runway との連携深度(v1.1 以降): ICR 維持月数を Runway 派生指標として MAS-008 に追加するか、MAS-063 内で完結するか。Runway 拡張は MAS-008 spec への変更が必要なため別 PR 推奨。

  10. 戦略メモ更新時の 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.6MAS-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_subcategoryClaude Haiku 4.5800_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-27v0.1 (骨組み)初版骨組み作成。全セクション見出し + 概要テーブルのみ。ai_agent_tips.md §6 の章単位生成方針を準用。
2026-04-27v0.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-27v0.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-27v1.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 昇格の本格実装をキックオフ。