1. 基本情報

焦点質問: パイプライン案件からどのような売上INVを自動生成するか?

21_bud_pipeline(売上パイプラインマスタ)の受注確定行に対し、契約形態(スポット/継続/準委任/請負)・入金ラグ・入金日を考慮して 最終起票年月日までの未起票分を一括で売上 INV 行に展開 する。スポット売上は1回きり、MRR(継続月額)は月ループで月数分のINVを生成する。全INVの収支区分は「収入」(売上側)。

項目内容
関数名generatePipelineInvoices(targetOverride, _silent)
ファイル401_bat_rpa.js
入力21_bud_pipeline
出力32_wrk_invoice + 31_wrk_order
メニュー「🤖 RPA・自動化 > 📊 パイプライン受注の自動起票」

2. 前提条件・依存関係

項目内容
SSOT32_wrk_invoice(起票先), 31_wrk_order(発注先)
マスタ依存11_mst_account(writeInvRows_ 内で諸表区分・大分類を科目マスタから自動付与)
前提有効フラグ=TRUEの行のみ処理対象
前提確度(ヨミ)に「受注」を含む行のみ対象(内示・Aヨミ等は対象外)
前提計上開始年月が空(parseDateToYm = null)の行はスキップ
ヘルパーINV/ORD ヘルパー 9 関数(400_rpa_common.js 参照)
後続処理Action ATRN/STL 自動作成 → Action B消込・決済仕訳

3. 入力スキーマ

21_bud_pipeline カラム定義

#列名入力/自動説明制約
1有効フラグcheckbox入力FALSE→SKIP空セルもFALSE扱い
2管理IDstring自動(RPA)PIP_NNNN(自動発番)空の場合RPAが自動採番して書き戻し
3PJ・案件名string入力摘要・ORD件名に使用
4契約形態string入力(pulldown)スポット/継続/準委任/請負MRR展開ロジックに影響
5売上科目string入力(pulldown)INVの科目名空→「売上高」がデフォルト
6確度(ヨミ)string入力(pulldown)受注/内示(90%)/Aヨミ(80%)/Bヨミ(50%)/Cヨミ(25%)/Dヨミ(10%)/保留/失注「受注」を含む行のみ対象
7計上開始年月date入力INV発生日の起点空→SKIP
8スポット売上・初期費用number入力1回きりの売上金額0/空→スポットINV生成なし
9継続月額(MRR)number入力月額売上金額0/空→MRR INV生成なし
10継続月数number入力MRR展開の月数0/空→契約形態で判定(後述)
11取引先名string入力(pulldown)INV・ORDの取引先
12決済手段string入力(pulldown)INVの決済手段
13入金ラグ(月)number入力計上月→入金月のオフセット空→1(翌月)。全角数字→半角変換
14入金日number入力入金予定日(日)。0/空=月末月末日より大きい場合キャップ
15組織名string入力(pulldown)INV・ORDに転記
16最終起票年月日date入力(手動)「ここまで起票する」を示す。RPAは書き戻さない
17備考string入力自由記述

4. 処理ロジック(マトリクス)

共通INVフィールド(buildInvRow_ が自動設定): 有効フラグ=true, 請求ID=INV_YYYYMMDD_NNNN(自動発番), 起票日時=now, 起票者="RPA自動起票", 請求ステータス="未処理", 通貨="JPY", 税区分="対象外", 消費税額_計画=0, 申請種別="請求書発行(AR)", 収支区分="収入"

項番処理フェーズ入力(論理名)入力(物理名: タブ.列)処理詳細 / 変換ロジック出力(論理名)出力(物理名: タブ.列)例外処理
S1.1初期化: 対象年月算出最終起票年月日(全有効行)21_bud_pipeline.最終起票年月日列全有効行の最終起票年月日の最大値を targetYm とする。targetOverride が指定されていればそちらを優先targetYm変数: targetYm (YYYY-MM)⚠️ 全行が空かつtargetOverride未指定 → 当月(YYYY-MM)をフォールバック
S1.2初期化: INV重複チェック用データ読込32_wrk_invoice全データ32_wrk_invoice摘要列ベースで重複判定するため全行を読み込むinvData, invHeaders変数
S1.3初期化: ORD/ID準備31_wrk_order全データ31_wrk_orderbuildOrdMap_() で既存ORDマップを構築 + 管理IDの最大番号(PIP_)取得ordMap, mgrIdMax変数⚠️ 31タブが存在しない場合はORD作成をスキップ
S2.1ループ開始21_bud_pipeline 全行FOR EACH 行 — 以下を各行に対して実行
S2.2スキップ判定(1)有効フラグ21_bud_pipeline.A列= FALSESKIP⚠️ 空セルもFALSE扱い
S2.3スキップ判定(2)確度(ヨミ)21_bud_pipeline.確度(ヨミ)列"受注" を含まない → SKIP※1
S2.4スキップ判定(3)計上開始年月21_bud_pipeline.計上開始年月列parseDateToYm が null → SKIPstartYm変数: startYm
S3.1変数: 基本情報取得PJ名, 契約形態, 売上科目, 取引先名, 決済手段, 組織名21_bud_pipeline 各列各列からtrim取得各変数変数: pjName, typeStr, acc, vendorName, payMethod, orgName⚠️ 売上科目空→"売上高"
S3.2変数: 入金ラグ/入金日入金ラグ(月), 入金日21_bud_pipeline.入金ラグ列, 入金日列全角→半角変換後パースlag, payDayRaw変数⚠️ ラグ空→1, 入金日空/0→月末
S3.3変数: 行別ループ上限最終起票年月日, lag21_bud_pipeline.最終起票年月日列rowTargetYm = addMonths(最終起票年月日, -lag)。ラグ分戻して利用月ベースに変換rowTargetYm変数: rowTargetYm⚠️ 最終起票年月日空→targetYm使用。⚠️ rowTargetYm < startYm → SKIP
S3.4管理ID自動発番管理ID21_bud_pipeline.管理ID列空 → PIP_ + (mgrIdMax+1) を4桁ゼロ埋め。書き戻しキューに追加管理ID21_bud_pipeline.管理ID列 (書き戻し)
O1.1ORD: キー生成/検索管理ID, 計上開始年月変数ordKey = pipeMgrId + "|" + startYm → ordMapで検索ordId変数: ordId⚠️ mgrId空→ORDスキップ
O1.2ORD: 新規作成ordKey不存在時参照元区分="PIPE", 参照元ID=管理ID, 契約形態=21タブ値, 税抜金額_発注=spot + mrr * dur, PJ名=pjName, 発注ステータス="発注済"ordId31_wrk_order (新規行)⚠️ 継続月数0かつ契約形態に'継続'含む→dur=120 ※2
P1.1INV-スポット: 条件判定スポット売上21_bud_pipeline.スポット売上列spot > 0 AND startYm <= rowTargetYm の場合のみ
P1.2INV-スポット: 重複チェック摘要32_wrk_invoice.摘要列"【RPA:PIPE】{startYm} {PJ名} スポット" → 有効行に存在すれば SKIP
P1.3INV-スポット: 行生成spot, acc, vendorName, payMethod変数発生日=startYmの月末, 決済日_計画=calcSettleDate(startYm), 税抜金額_計画=spot, 税込金額_計画=spot, 未決済残高=spot, PJ名=pjNameINV行32_wrk_invoice (新規行)
P2.1INV-MRR: 条件判定継続月額(MRR)21_bud_pipeline.MRR列mrr > 0 の場合、月ループを開始dur変数: dur⚠️ 継続月数0→契約形態'継続'含む=120ヶ月, 他=1ヶ月 ※2
P2.2INV-MRR: 月ループcurYm変数curYm = addMonths(startYm, m) (m=0..dur-1)。curYm > rowTargetYmBREAK
P2.3INV-MRR: 重複チェック摘要32_wrk_invoice.摘要列"【RPA:PIPE】{curYm} {PJ名} MRR {m+1}/{dur}ヶ月目" → 有効行に存在すれば SKIP
P2.4INV-MRR: 行生成mrr, acc, vendorName, payMethod変数発生日=curYmの月末, 決済日_計画=calcSettleDate(curYm), 税抜金額_計画=mrr, 税込金額_計画=mrr, 未決済残高=mrr, PJ名=pjNameINV行32_wrk_invoice (新規行)
W1.1一括書き込みdrafts, newOrdRows, pipeUpdatesORD→31タブ一括追記、INV→32タブ末尾追記(writeInvRows_)、管理ID→21タブ書き戻し31/32/21タブ

脚注:

  • ※1: 確度に「受注」を含む行のみ対象。「Aヨミ (確度80%)」等は含まれない。「内示(90%)」も「受注」を含まないためSKIP
  • ※2: 継続月数が0/空の場合、契約形態に'継続'を含むなら120ヶ月(10年分)をデフォルトとしてMRRを展開。含まなければ1ヶ月分のみ

5. 出力サマリー

生成されるINV行パターン

パターン条件生成行数摘要フォーマット発生日決済日_計画
スポット売上spot > 0 かつ startYm <= rowTargetYm1行【RPA:PIPE】{startYm} {PJ名} スポットstartYmの月末addMonths(startYm, lag)の入金日 or 月末
MRR(月額)mrr > 0 かつ curYm <= rowTargetYm最大dur行【RPA:PIPE】{curYm} {PJ名} MRR {n}/{dur}ヶ月目curYmの月末addMonths(curYm, lag)の入金日 or 月末

生成されるORD行

条件生成行数税抜金額_発注参照元区分
管理ID + startYm の組み合わせが31タブに未登録1行/案件spot + mrr * durPIPE

calcSettleDate ロジック

決済日_計画 = addMonths(curYm, lag) の月に対し:

  • 入金日 > 0 の場合: 当該月の入金日(月末日より大きい場合はキャップ)
  • 入金日 = 0 or 空の場合: 当該月の月末日

6. 業務ルール

6.1 売上INVの性質

パイプラインRPAが生成するINVはすべて 収入側(申請種別: 請求書発行(AR)、収支区分: 収入)である。SaaS/HC/CAPEXのRPAが支出INVを生成するのとは逆方向。

6.2 スポット売上 vs MRR

  • スポット売上: 初期費用や一括売上。計上開始年月に1回だけINVを生成
  • MRR(月額売上): 継続月額 x 継続月数分のINVを月ループで生成

両方に金額が設定されている場合、1案件からスポットINV + MRR INV(複数行)が同時に生成される。

6.3 継続月数のデフォルト

継続月数が0/空の場合:

  • 契約形態に「継続」を含む → 120ヶ月(10年分)をデフォルト展開
  • それ以外 → 1ヶ月分のみ

6.4 入金ラグと最終起票年月日の関係

最終起票年月日は 入金予定日ベース で入力する。RPAは内部で入金ラグ分を差し引いて利用月ベースに変換し、月ループの上限とする。

算出式: 行別ループ上限 = 最終起票年月日 - 入金ラグ(月) — rowTargetYm = addMonths(最終起票年月日, -lag)


7. 冪等性(二重起票防止)

保証項目メカニズム詳細
INV重複防止摘要の完全一致チェック (isDuplicate_)32_wrk_invoiceの 有効行 (有効フラグ=TRUE) に同一摘要文字列が存在する場合はSKIP
ORD重複防止ordMap キーチェック管理ID + "|" + startYm の組み合わせで既存ORDを検索。存在すれば新規作成しない
管理ID一意性既存最大番号からの連番PIP_ プレフィックス + 4桁ゼロ埋め。既存最大値+1から採番

注意: 有効フラグ=FALSEの行は重複チェックの対象外。一度無効化したINVと同じ摘要のINVは再生成される。


8. エラーハンドリング

エラー条件処理ユーザー通知
21_bud_pipeline タブが存在しない処理中断アラートダイアログ: 「21_bud_pipeline が見つかりません。」
パイプラインデータが空(ヘッダのみ)処理中断アラートダイアログ: 「パイプラインデータがありません。」
起票対象なし(受注確定行なし or 全件重複)正常終了(0件)アラートダイアログ: 「受注確定のパイプラインで新たに起票すべき行はありませんでした。」
処理中の例外(catch節)処理中断、Utils.logError でログ出力アラートダイアログ: 「generatePipelineInvoices でエラーが発生しました」+ エラーメッセージ
_silent=true の場合ダイアログ非表示一括実行(generateAllRpaInvoices)からの呼び出し時。戻り値のみ返却

9. テスト仕様

テストIDテスト名前提条件期待結果
PIPE-T01スポット案件の起票テスト案件X: スポット, 受注, 2026-04, spot=100,000, lag=1, 入金日=10ORD 1行 + INV 1行。発生日=2026-04-30, 決済日=2026-05-10, 売上高 100,000, 収入
PIPE-T02MRR案件の起票テスト案件Y: 継続, 受注, 2026-04, MRR=50,000, 3ヶ月, lag=2, 入金日=10, 最終起票年月日=2026-07-10ORD 1行(発注総額=150,000)+ INV 3行。2026-04: 発生日=04-30/決済日=06-10, 2026-05: 発生日=05-31/決済日=07-10, 2026-06: 発生日=06-30/決済日=08-10。各50,000
PIPE-T03二重起票防止PIPE-T01実行済の状態で再実行新規INV=0件。既存INVと摘要が一致するためSKIP
PIPE-T04未受注案件のスキップ確度=Aヨミ(80%)INV/ORD生成なし
PIPE-T05有効フラグFALSEのスキップ有効フラグ=FALSE, 確度=受注INV/ORD生成なし
PIPE-T06継続月数0+契約形態「継続」MRR=10,000, 継続月数=0, 契約形態=継続dur=120ヶ月としてMRR展開(rowTargetYmまで)
PIPE-T07管理ID自動発番管理ID空の受注案件PIP_NNNN が自動採番されて21タブに書き戻し

テストデータ

PJ・案件名契約形態確度計上開始年月スポットMRR継続月数入金ラグ入金日
テスト案件Xスポット受注2026-04100,00000110
テスト案件Y継続受注2026-04050,0003210

付録

付録A: 最終起票年月日の運用

  • 手入力(RPAは書き戻さない)
  • 21タブの最終起票年月日列に 入金予定日ベース の日付を入力する
  • 入金ラグがある場合、RPA内部で利用月に変換してループ上限とする(S3.3参照)
  • 他のRPA(24_bud_hc等)と同じ方式

付録B: 確度(ヨミ)プルダウン一覧

確度RPA対象備考
受注対象"受注" を含むため
内示(90%)対象外"受注" を含まない
Aヨミ(80%)対象外同上
Bヨミ(50%)対象外同上
Cヨミ(25%)対象外同上
Dヨミ(10%)対象外同上
保留対象外同上
失注対象外同上

付録C: 変更履歴

日付内容
2026-04-12 16:06Template A (RPA/バッチ処理) 構成に全面リライト。セクション2(前提条件), 8(エラーハンドリング)を新規追加