概要

項目内容
案件IDMAS-076
カテゴリ経費・仕訳
PhaseP1
優先度★★★
所要時間30分
対象ファイル400_domain/401_bat_rpa.js

問題

isDuplicate_() 関数は、RPA起票の冪等性を担保するために「同じ摘要のINVが既に存在するか」をチェックする。しかし、現在の実装では 有効フラグ=FALSE の行をスキップ しているため、ユーザーが誤起票されたINVを論理削除(有効フラグ=FALSE)した後にRPAを再実行すると、同一の摘要で二重登録が発生する。

現在のコード(401_bat_rpa.js L146-157)

function isDuplicate_(invData, headers, memoPattern) {
  const memoCol = headers.indexOf('摘要');
  const flagCol = headers.indexOf('有効フラグ');
  if (memoCol === -1) return false;
  for (let i = 1; i < invData.length; i++) {
    if (flagCol !== -1) {
      const flag = invData[i][flagCol];
      if (flag === false || String(flag).toUpperCase() === 'FALSE') continue; // ← 問題箇所
    }
    if (String(invData[i][memoCol]) === memoPattern) return true;
  }
  return false;
}

修正方針

有効フラグに関わらず、摘要が一致する行が存在すれば true を返すように変更する。つまり、有効フラグのフィルタリング(L151-153 の continue)を削除する。

影響範囲

  • isDuplicate_() は6つのRPA関数(SaaS, HC, CAPEX, Finance, Adhoc, Pipeline)から合計25箇所で呼び出されている
  • 修正は関数本体のみ。呼び出し側の変更は不要
  • 既に 200_data/202_repository.js にも isDuplicate メソッドがあるが、こちらも同様のロジックのため合わせて修正する

関連ドキュメント

仕様書関連箇所
4.3.1 HC(人件費)HC RPA での isDuplicate_ 呼び出し(給与・源泉・社保等 10箇所以上)
4.3.2 SaaS・サブスクSaaS RPA での isDuplicate_ 呼び出し
4.3.3 CAPEX(設備投資・借入)CAPEX RPA での isDuplicate_ 呼び出し(資産計上・減価償却・返済等)
4.3.4 パイプライン売上Pipeline RPA での isDuplicate_ 呼び出し
4.3.5 財務イベントFinance RPA での isDuplicate_ 呼び出し
4.3.6 Adhoc(経費・その他)Adhoc RPA での isDuplicate_ 呼び出し
B.3 統合テスト手順T7 冪等性テストケース(本修正の検証手順)

人間が検討すべき事項

なし(明確なバグ。即修正可)

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

以下のプロンプトを Claude Code に入力して実装を実行する。

S-04: isDuplicate_ 冪等性バグ修正

背景: 401_bat_rpa.js の isDuplicate_() 関数(L146-158)は、RPA の二重実行を防ぐ冪等性ガードだが、有効フラグ=FALSE
の行をスキップするバグがある。ユーザーが INV を無効化(FALSE)した後に RPA を再実行すると、同一の摘要パターンを持つ INV
が再作成されてしまう。

修正内容:

1. isDuplicate_() の修正 (401_bat_rpa.js L145-158)
   - L151-153 の有効フラグフィルタを削除。全行(TRUE/FALSE問わず)を対象に摘要の重複チェックを行う
   - JSDoc コメントも「有効行のみ」→「全行(無効化済み含む)」に修正
2. テストの確認 (901_test_runner.js L1102-1149)
   - 既存の T7-01〜T7-06(冪等性テスト)が PASS することを確認
   - 可能であれば、「有効フラグ=FALSE にした INV がある状態で RPA 再実行→0件追加」のテストケースを T7 セクションに追加
3. 手順:
   - fix/s04-idempotency ブランチを作成
   - コード修正
   - npm run push:dev → dev で動作確認(RPA 実行 → INV 1件を FALSE → 再実行 → 追加されないこと)
   - テストランナー実行
   - git push → PR → main マージ

影響範囲: isDuplicate_() の呼び出し元は6つのRPA関数・計25箇所だが、関数シグネチャは変更しないため呼び出し元の修正は不要。

作成者: Claude Code

拡張思考(ultrathink)の使用状況

フェーズultrathink備考
プロンプト作成なし通常の推論で作成
実装あり「この内容で進めて」のリクエスト時に ultrathink で実行。ただし修正が3行削除+テスト追加とシンプルだったため、実質的な差は出ていない

変更履歴

日付変更内容
2026-04-14 10:33初版作成
2026-04-14実装プロンプト(Claude Code 用)を追加