概要

項目内容
案件IDMAS-016
カテゴリシミュレーション
PhaseP3
優先度
所要時間2時間
実装ステータス📝 仕様書段階・実装未着手 (2026-04-28 監査時点)
対象ファイル600_report/601_datamart_ingest.js, 600_report/603_datamart_pl.js, 600_report/608_datamart_render.js
関連タブ21_bud_pipeline(入力), 63/64(P/L計画 出力先), 77_pj_raw(パイプライン明細ビュー)
前提案件なし(既存の確度加重ロジックを拡張)

目的

21_bud_pipeline の「確度(ヨミ)」を営業ファネルのフェーズとして活用し、フェーズ別コンバージョン率に基づく確率加重売上予測をP/L計画タブに表示する。

背景

現在のシステムには既に確度加重の仕組みが存在する:

  • RPA(401_bat_rpa.js): 確度(ヨミ) が「受注」の行のみ INV を生成(確定売上)
  • マート計画(601_datamart_ingest.js): dmIngestPipelinePlanData_() で未受注案件を確度加重して P/L 計画に合流

現在のフェーズ定義と加重率:

フェーズ確度現在の処理
受注/Sヨミ100%RPA → 32_wrk_invoice(確定。計画からスキップ)
内示90%計画に確度加重で合流
Aヨミ80%同上
Bヨミ50%同上
Cヨミ25%同上
Dヨミ10%同上
失注/保留スキップ

つまり営業ファネル連動型売上予測は既に実装されている。本案件は以下の拡張を行う:

  1. ファネル別集計ビューの追加: 確度フェーズ別の売上見込み内訳を可視化
  2. コンバージョン率の設定可能化: 03_sys_params でフェーズ別確度を設定可能にする
  3. ファネルサマリーの P/L 計画タブへの表示: 計画 P/L の末尾にファネル内訳セクションを追加

現在のコード

確度加重ロジック(601_datamart_ingest.js L396-421)

// 確度変換
var probStr = idxProb !== -1 ? String(row[idxProb]) : '';
var prob = 1.0;
if (probStr !== '') {
  if (probStr.includes('失注') || probStr.includes('保留')) {
    continue; // 失注・保留はスキップ
  } else if (probStr.includes('内示')) {
    prob = 0.90;
  } else if (probStr.includes('受注') || probStr.includes('S')) {
    continue; // 受注/Sヨミ = 確定 → 32タブINVで管理するためスキップ
  } else {
    var match = probStr.match(/(\d+)%/);
    if (match) {
      prob = Number(match[1]) / 100;
    } else if (probStr.includes('A')) {
      prob = 0.8;
    } else if (probStr.includes('B')) {
      prob = 0.5;
    } else if (probStr.includes('C')) {
      prob = 0.25;
    } else if (probStr.includes('D')) {
      prob = 0.10;
    }
  }
}

問題点

  1. 確度がハードコード: A=80%, B=50% 等がコード内に直書きされており、変更にはコード修正が必要
  2. ファネル別の内訳が見えない: 計画 P/L には確度加重後の合算値しか表示されず、「Aヨミがいくら、Bヨミがいくら」が見えない
  3. 77_pj_raw に確度列はあるがフェーズ別集計がない: 明細は見えるがサマリーがない

修正方針

Step 1: 確度マスタの 03_sys_params 化

03_sys_params シートに確度テーブルを追加。dmIngestPipelinePlanData_() がハードコードの代わりにこのテーブルを参照する。

// 03_sys_params に追加するパラメータ
PROB_S    = 1.00    // 受注/Sヨミ(計画からスキップ)
PROB_NAIJI = 0.90   // 内示
PROB_A    = 0.80    // Aヨミ
PROB_B    = 0.50    // Bヨミ
PROB_C    = 0.25    // Cヨミ
PROB_D    = 0.10    // Dヨミ

フォールバック: 03_sys_params に値がない場合は現在のハードコード値を使用。

Step 2: ファネル別集計の追加

dmIngestPipelinePlanData_() の戻り値に、フェーズ別の月次集計データを追加。

// 戻り値の拡張
return {
  planData: events,
  viewData: viewRows,
  funnelSummary: {
    // フェーズ別 × 月別の加重前・加重後金額
    '内示':  { raw: [0,0,...,0], weighted: [0,0,...,0] },
    'Aヨミ': { raw: [0,0,...,0], weighted: [0,0,...,0] },
    'Bヨミ': { raw: [0,0,...,0], weighted: [0,0,...,0] },
    'Cヨミ': { raw: [0,0,...,0], weighted: [0,0,...,0] },
    'Dヨミ': { raw: [0,0,...,0], weighted: [0,0,...,0] },
  }
};

Step 3: P/L 計画タブにファネルサマリーセクションを追加

dmBuildPlOutput_() の計画モード時(isActualOnly=false)に、P/L の末尾にファネル内訳セクションを追加。

■ パイプライン売上内訳(確度別)
  内示 (90%)          [加重後金額 × 12ヶ月]
  Aヨミ (80%)         [加重後金額 × 12ヶ月]
  Bヨミ (50%)         [加重後金額 × 12ヶ月]
  Cヨミ (25%)         [加重後金額 × 12ヶ月]
  Dヨミ (10%)         [加重後金額 × 12ヶ月]
 【パイプライン計】     [合計]
 (参考: 加重前合計)   [確度適用前の金額合計]

影響範囲

変更ファイル変更量内容
600_report/601_datamart_ingest.js約30行追加確度の sys_params 参照化 + funnelSummary 集計
600_report/603_datamart_pl.js約20行追加計画モード時のファネルサマリーセクション出力
600_report/608_datamart_render.js約5行追加ファネル行の書式定義

既存の P/L 実績タブ(61/62)には影響なし。計画タブ(63/64)の末尾に追加。

注意事項

  1. 受注/Sヨミは表示しない: 確定売上は 32_wrk_invoice 経由で実績 P/L に反映済み。ファネルサマリーには未確定フェーズのみ表示
  2. 確度 100% の扱い: PROB_S=1.00 でもファネルにはカウントしない(受注=確定なので)。if (prob >= 1.0) continue の既存ロジックを維持
  3. 03_sys_params の読み込み: Env モジュール経由ではなく、シートから直接読む既存パターン(ctx.sysParams)を使用
  4. 77_pj_raw との整合性: 77_pj_raw にはパイプライン明細が表示されている。ファネルサマリーはそのヘッダー集計版
  5. 実績タブへの影響なし: ファネルサマリーは計画モード(isActualOnly=false)でのみ表示

関連ドキュメント

仕様書関連箇所
パイプラインRPA21_bud_pipeline のスキーマ、確度フェーズの定義
P/L 仕様P/L 出力レイアウト
パイプライン計画dmIngestPipelinePlanData_() の設計
MAS-001 予実差異分析P/L 出力配列の拡張パターン(参考)

人間が検討すべき事項

  • ファネルのフェーズ定義と各フェーズの確率設定(現行の A/B/C/D/内示 で十分か、リード/商談 等を追加するか)
  • ファネルサマリーの表示位置(P/L 末尾 vs 別シート)
  • 加重前金額(参考値)の表示要否
  • 03_sys_params での確度変更が既存の計画P/Lに遡及的に影響する点の許容

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

あなたはGAS会計システム(bizlp-gas-accounting)のシニア開発者です。
案件 MAS-016「営業ファネル連動型売上予測」を実装してください。

## 背景

21_bud_pipeline の確度加重は既に dmIngestPipelinePlanData_() で実装済み。
本案件は3つの拡張を行う:
1. 確度のハードコードを 03_sys_params から読み込む方式に変更
2. フェーズ別の月次集計データ(funnelSummary)を戻り値に追加
3. P/L 計画タブ(63/64)の末尾にファネル内訳セクションを表示

## 実行前タスク

以下のファイルを読み込み、現状を把握すること:
- `600_report/601_datamart_ingest.js` — dmIngestPipelinePlanData_() L363-480
  特に確度変換ロジック L396-421
- `600_report/603_datamart_pl.js` — dmBuildPlOutput_() の出力配列構造
- `600_report/602_datamart_main.js` — pipeResult の使用箇所、ctx の構築
- `600_report/608_datamart_render.js` — 書式定義のパターン
- `docs/dev/dev_mas-016_funnel_forecast.md` — 本仕様書

## 修正対象ファイル

1. `600_report/601_datamart_ingest.js` — 確度の sys_params 参照化 + funnelSummary
2. `600_report/603_datamart_pl.js` — ファネルサマリーセクション追加
3. `600_report/608_datamart_render.js` — ファネル行の書式定義

## 実装内容

### Step 1: 確度の sys_params 化

dmIngestPipelinePlanData_() の冒頭で ctx.sysParams から確度値を読み込む。
キー: PROB_NAIJI, PROB_A, PROB_B, PROB_C, PROB_D
フォールバック: キーがなければ現行のハードコード値(0.90, 0.80, 0.50, 0.25, 0.10)

### Step 2: funnelSummary の集計

既存の events.push() ループ内で、フェーズ名ごとに月別の加重前金額・加重後金額を集計。
戻り値の funnelSummary プロパティに設定。

### Step 3: P/L 計画タブにファネルセクション追加

dmBuildPlOutput_() で isActualOnly=false(計画モード)の場合のみ、
P/L 出力配列の末尾にファネル内訳を追加:
- グループヘッダー「■ パイプライン売上内訳(確度別)」
- 各フェーズ行(内示/A/B/C/D × 加重後月次金額)
- 小計行
- 参考: 加重前合計行

## 制約

- 既存の dmIngestPipelinePlanData_() の戻り値 planData / viewData は変更しない(追加のみ)
- 実績タブ(61/62)には影響させない(計画モードのみ)
- 受注/Sヨミ(確定売上)はファネルに含めない
- 確度の数値解析(`NN%` パターンマッチ)の既存ロジックは維持

## 動作確認

1. 03_sys_params に PROB_A=0.80 等を設定
2. `npm run push:dev` → updateAllDatamarts() を実行
3. 63 タブ(P/L計画 単月)の末尾に「パイプライン売上内訳」セクションが表示されること
4. 各フェーズの金額が 21_bud_pipeline の該当行 × 確度と一致すること
5. 61 タブ(P/L実績)にはファネルセクションが表示されないこと
6. 03_sys_params の確度値を変更 → マート更新で金額が変わること
7. 03_sys_params に確度キーがない場合 → ハードコード値で動作すること

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

| フェーズ | 拡張思考 | 備考 |
|---------|:--------:|------|
| sys_params 読み込み | なし | 既存パターンの踏襲 |
| funnelSummary 集計 | あり | 既存ループ内でフェーズ別集計を追加する挿入位置の判断 |
| P/L ファネルセクション | あり | 計画モード判定、出力配列の末尾追加、書式の整合性 |

### 推奨実行モデル

| 工程 | 推奨モデル | 理由 |
|------|----------|------|
| 全工程 | **Claude Opus 4.6** | 既存の確度加重ロジックの理解とP/L出力構造の拡張に会計ロジックの理解が必要 |

推奨実行モデル

工程推奨モデル理由
仕様書作成Claude Opus 4.6既存コードの分析(確度加重が既に実装済みの発見)、拡張方針の設計
実装Claude Opus 4.6601/603/608 の3ファイル横断、計画モード判定、funnelSummary 集計

変更履歴

日付変更内容
2026-04-15初版作成。既存の確度加重ロジックを分析し、3段階の拡張を設計