1. 概要

焦点質問: どのデータ不整合を検知し、どう通知するか?

背景・課題

20番台 (予算・計画) と 30番台 (サブ元帳) のデータ入力ミス・不整合を検知し、 後続の RPA 起票・仕訳エンジン・データマート作成でのエラーを未然に防止する。

実行方法

GAS メニュー「⚙️ メンテナンス」→「✅ データ整合性チェック」から手動実行。


2. 設計判断

選択肢メリットデメリット選定
マスタ事前読込(Set/Map)全行 O(1) 参照・API 最小マスタ全量メモリ保持採用
オンデマンド都度参照メモリ低行数 × API・6 分制限抵触不採用
配列一括処理API 最小(20-30 コール)2D 配列メモリ確保採用
セル単位 getValue/setBackground実装が素朴API が桁違い・致命的遅さ不採用

マスタ事前読み込み一覧

検証前に以下のマスタを一括読み込みし、Object (Set 相当) に変換する:

変数名ソースキーフィルタ
acctSet11_mst_account科目名 (入力用科目名)有効フラグ=TRUE のみ。現金・預金 はハードコード追加
ordSet31_wrk_order発注ID(ORD)有効フラグ=TRUE
invSet32_wrk_invoice請求ID(INV)有効フラグ=TRUE
invMeta32_wrk_invoice請求ID(INV) → { date, shushi, dueDate }有効フラグ=TRUE
pjSet14_mst_projectプロジェクト名有効フラグ=TRUE
hcNameSet22_bud_headcount氏名・ポジション有効フラグ=TRUE

API コール数

操作コール数
データ読み込みシート数 × 1 (getValues)
マスタ読み込みマスタ数 × 1
背景色書き込みシート数 × 1 (setBackgrounds)
メモ書き込みシート数 × 1 (setNotes)
合計約 20〜30 コール (全シート合計)

3. 変更内容

3.1 スキーマ (検証対象タブ)

#対象タブ検証関数参照マスタ
121_bud_pipelinevalidatePipeline_acctSet
222_bud_headcountvalidateHeadcount_acctSet
323_bud_subscriptionvalidateSubscription_acctSet
424_bud_capex_loanvalidateCapex_acctSet
525_bud_financevalidateFinance_acctSet
626_bud_adhocvalidateAdhoc_acctSet
727_bud_resourcevalidateResource_pjSet, hcNameSet
831_wrk_ordervalidateOrder_(なし)
932_wrk_invoicevalidateInvoice_acctSet, ordSet
1033_wrk_bankvalidateBank_invSet, invMeta

3.2 ロジック (検証項目マトリクス)

全シート共通の前提:

  • 有効フラグ=FALSE の行はスキップ
  • 列参照はヘッダー名ベース (buildHeaderIndex_)。列が存在しない場合はチェックをスキップ
  • 各シートで管理ID列が空の場合は警告 (G01 相当)

3.2.1 21_bud_pipeline (パイプライン)

#対象列チェック内容重要度
P01計上開始年月必須。空欄NG致命的
P02確度(ヨミ)必須。空欄NG致命的
P03売上科目必須。11_mst_account に存在すること致命的
P04契約形態+継続月額契約形態が「継続」または「準委任」を含む場合、継続月額(MRR)が0はNG警告
P05契約形態+スポット売上契約形態が「スポット」を含む場合、スポット売上・初期費用が0はNG警告
P06継続月数契約形態が「継続」または「準委任」を含む場合、0はNG警告

3.2.2 22_bud_headcount (人件費)

#対象列チェック内容重要度
H01開始年月必須。空欄NG致命的
H02終了年月空でなければ、開始年月 以降であることエラー
H03月額給与・報酬0 はNGエラー
H04科目名必須。11_mst_account に存在すること致命的
H05源泉消費税額月額給与・報酬 を超えていないこと (月額>0の場合のみ)エラー
H06差引支給額マイナスはNG (税金・社保引きすぎ)エラー

3.2.3 23_bud_subscription (SaaS)

#対象列チェック内容重要度
S01開始・契約年月必須。空欄NG致命的
S02次回更新・終了年月空でなければ、開始・契約年月 以降であることエラー
S03税抜金額_計画0 はNGエラー
S04費用科目必須。11_mst_account に存在すること致命的
S05未定放置利用中で取引先名 or 決済手段に「未定」含 → NG警告

3.2.4 24_bud_capex_loan (設備投資・借入)

#対象列チェック内容重要度
C01発生日(P/L計上日)必須。空欄NG致命的
C02借入金額 vs 取得価額借入 > 取得価額 NG(取得価額>0 時)致命的
C03取得価額+資産科目取得価額 > 0 なのに資産科目が空はNGエラー
C04資産科目空でなければ、11_mst_account に存在すること致命的
C05借入金額+負債科目借入金額 > 0 なのに負債科目が空はNGエラー
C06負債科目空でなければ、11_mst_account に存在すること致命的
C07借入金額+返済借入>0 で開始年月空 or 返済月数=0 → NGエラー

3.2.5 25_bud_finance (財務取引)

#対象列チェック内容重要度
F01発生日(P/L計上日)必須。空欄NG致命的
F02金額0 はNGエラー
F03科目名必須。11_mst_account に存在すること致命的

3.2.6 26_bud_adhoc (単発予算)

#対象列チェック内容重要度
A01発生日(P/L計上日)必須。空欄NG致命的
A02税込金額0 はNGエラー
A03科目名必須。11_mst_account に存在すること致命的

3.2.7 27_bud_resource (要員稼働率)

#対象列チェック内容重要度
R01要員名必須。空欄NG致命的
R02要員名22_bud_headcount (氏名・ポジション) に存在することエラー
R03PJ・案件名必須。空欄NG致命的
R04PJ・案件名14_mst_project (プロジェクト名) に存在することエラー
R05対象年月必須。空欄または parseDateToYm 解析不能はNG致命的
R06稼働率(%)数値でなければNG (例: "5%")。0〜1の小数で入力致命的
R07稼働率(%)0以下はNGエラー
R08稼働率(%)1(100%)超えはNGエラー

3.2.8 31_wrk_order (発注台帳)

#対象列チェック内容重要度
O01発注残高(自動計算)マイナスはNG (INV過剰紐付け)警告
O02取引先名空欄NGエラー

3.2.9 32_wrk_invoice (請求台帳)

#対象列チェック内容重要度
I01発生日(P/L計上日)ステータスが「承認済」「決済完了」「部分決済」のとき必須致命的
I02親発注ID(ORD)空でなければ、31_wrk_order に存在することエラー
I03請求額計算税抜+消費税 ≠ 税込(差額 2 円超で警告)警告
I04税込金額_計画0 はNGエラー
I05科目名必須。11_mst_account に存在すること致命的
I06未決済残高(自動計算)マイナスはNG (消込やりすぎ)エラー

3.2.10 33_wrk_bank (入出金台帳)

#対象列チェック内容重要度
B01決済日_実績+ステータス決済ステータス=「消込済」なのに決済日が空致命的
B02消込対象請求ID(INV)空でなければ、32_wrk_invoice に存在することエラー
B03決済日_実績 vs 今日決済日が未来日警告
B04決済日 vs INV 発生日決済日 < 発生日 NG(前払い/収入 INV 除く)警告
B05税込金額_決済0 はNGエラー

3.3 UI (エラー通知 UX)

要素仕様
エラーセル背景色重要度に応じた3色 (付録B参照)
エラーセルメモエラー理由をセルノートに記載。接頭辞 [VAL] (例: [VAL] 科目名がマスタに存在しません)
正常化時背景色・メモを自動クリア (エラー色のみクリアし、既存の背景色は保持)
結果通知ダイアログでシート別エラー件数を表示

エラーセルの背景色とメモは、チェック実行時に全対象のエラー色 ([VAL] メモ) を一括クリア→検証→エラーのみ再設定。 既存の整合性チェック (checkInvStlConsistency) と同じパターン。


4. 影響範囲

影響対象影響内容対応
201_data_validator.jsバリデーション実行エンジン本体新規作成
101_sys_config.jsメニューに「✅ データ整合性チェック」を追加メニュー登録
20番台・30番台の全対象シートエラーセルに背景色・メモが書き込まれる既存の背景色は保持 (エラー色のみ上書き)

5. テスト仕様

テストIDテスト名前提条件期待結果
VAL-01必須項目未入力検知22タブの開始年月を空にする赤背景 + メモ「[VAL] 開始年月が未入力です」
VAL-02マスタ不存在検知23タブの費用科目をマスタにない値に変更赤背景 + メモに「致命的」相当の内容
VAL-03INV 発生日必須(連動)32 タブ承認済 INV の発生日を空にする赤背景 + 「承認済だが発生日未入力」メモ
VAL-04STL決済日必須 (消込済連動)33タブの消込済STLの決済日を空にする赤背景 + メモ「致命的」相当の内容
VAL-05エラー修正後クリアエラーを修正してから再実行背景色とメモがクリアされる
VAL-06全シートエラーなし全シートに問題がない状態で実行ダイアログ「全シートの整合性に問題はありません」
VAL-07パフォーマンス全シート対象で実行全シート合計30秒以内に完了

付録

付録A: 改修ファイル一覧

ファイル役割
201_data_validator.jsバリデーション実行エンジン本体
101_sys_config.jsメニュー登録

関数構成 (201_data_validator.js)

関数名用途
runDataValidation()メインエントリ。マスタ読み込み → シート別検証 → 結果ダイアログ
validatePipeline_(data, idx, acctSet, bg, notes)21_bud_pipeline 検証
validateHeadcount_(data, idx, acctSet, bg, notes)22_bud_headcount 検証
validateSubscription_(data, idx, acctSet, bg, notes)23_bud_subscription 検証
validateCapex_(data, idx, acctSet, bg, notes)24_bud_capex_loan 検証
validateFinance_(data, idx, acctSet, bg, notes)25_bud_finance 検証
validateAdhoc_(data, idx, acctSet, bg, notes)26_bud_adhoc 検証
validateResource_(data, idx, pjSet, hcNameSet, bg, notes)27_bud_resource 検証
validateOrder_(data, idx, acctSet, bg, notes)31_wrk_order 検証
validateInvoice_(data, idx, acctSet, ordSet, bg, notes)32_wrk_invoice 検証
validateBank_(data, idx, invSet, invMeta, bg, notes)33_wrk_bank 検証
applyValidationResults_(sheet, rowCount, colCount, bg, notes)一括適用 (エラー色クリア+再設定)
loadValidAccountNames_()科目マスタ Set 読み込み
loadIdSet_(ss, key, fb, headerName)汎用 ID Set 読み込み
loadInvMeta_(ss)INV メタ情報 Map 読み込み
loadValidPjNames_(ss)PJ マスタ Set 読み込み
loadHcNameSet_(ss)人件費氏名 Set 読み込み
setErr_(bg, notes, r, c, level, msg)エラー登録ヘルパー
isActiveRow_(data, r, idx)有効フラグ判定
parseAmt_(val)金額パース

付録B: エラーメッセージ接頭辞一覧

接頭辞重要度背景色意味
[致命的]CRITICAL#EA9999 (赤)RPA/仕訳が動かない
[エラー]ERROR#F4CCCC (薄赤)計算結果がおかしくなる
[警告]WARNING#FCE5CD (薄オレンジ)運用上の問題

実装上のメモ接頭辞は [VAL] 固定。上記の [致命的] 等はユーザー向けの分類名であり、実際のセルメモには具体的なエラーメッセージが [VAL] ... の形式で記載される。