最終更新: 2026/06/22 18:56
MAS-076: isDuplicate_ 冪等性バグ修正
概要
| 項目 | 内容 |
|---|---|
| 案件ID | MAS-076 |
| カテゴリ | 経費・仕訳 |
| Phase | P1 |
| 優先度 | ★★★ |
| 所要時間 | 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 用)を追加 |