MAS-044: ポジション別 HC テンプレートマスタ(MAS-011 What-if 補完基盤・HC 限定)
概要
| 項目 | 内容 |
|---|---|
| 案件 ID | MAS-044 |
| カテゴリ | FP&A・シミュレーション(基盤整備) |
| 対象ファイル(変更あり) | 100_config/101_sys_config.js(schemas に MST_HC_TMPL 追加 + existKeys + setVali)200_data/202_repository.js(末尾に PositionTemplateRepository 追記)400_domain/430_what_if_simulator.js(getWhatIfDefaults に HC テンプレ参照ロジック追加)templates/what_if_sidebar.html(HC_ADD ブロックにテンプレート選択 dropdown 追加・onChange で全フィールド自動入力) |
| 新規シート | 18_tmpl_hc_position(ポジションテンプレ・DDL 管理) |
| 前提案件 | MAS-011 MVP(PR #315 + #320 polish、完了済) |
| 後続案件 | MAS-045(予算転記:テンプレ ID を転記行に記録する列追加の可能性)、MAS-048(採用 TCO シミュレーター:テンプレから標準月額給与を参照)、MAS-055(SaaS カタログマスタ・2026-04-23 に本案件から切り出し独立起票) |
MAS-011 What-if シミュレーションで「人員追加(HC_ADD)」を検討する際、毎回手入力していた給与水準・採用費・PC 費・想定月次売上貢献等を ポジション単位でテンプレート化 する。MAS-011 polish で追加された「実績平均プリロード」(22_bud_headcount の有効行平均から自動補完)を補完する位置付け — 実績ゼロ期(創業直後・新ポジション)でもデフォルト値が出る状態を実現する。
ポジション例: 営業 Jr / 営業 Sr / エンジニア Jr/Mid/Sr / CSM / Manager / Executive。
2026-04-23 スコープ縮小
本案件は当初 HC(18_tmpl_hc_position)+ SaaS(19_tmpl_saas_catalog)の 2 タブを一括対象としていたが、main スペースの採用判断機能群への注力方針を反映し、SaaS カタログ部分を MAS-055(SaaS カタログマスタ)として独立起票。本案件は HC テンプレに限定した。
目的
- 毎回手入力する手間を削減(複数ポジションパターンを比較する時に効果大)
- 社内基準の標準化(Sr Eng の想定給与レンジ等を属人性排除)
- 実績ゼロ時のフォールバック(MAS-011 polish の実績平均プリロードが機能しない創業直後・新ポジションでもデフォルト値提供)
- MAS-048 採用 TCO シミュレーターへの入力源(採用検討 → 採用 TCO 試算 → MAS-045 予算転記の直線フローを可能にする)
現在のコード
100_config/101_sys_config.js(DDL スキーマ)
setupAllSchemas() 関数内 const schemas = {...}(L879 起点)でシート毎の headers / color / validations を宣言的に定義。本案件では L880 付近に 'MST_HC_TMPL' を追加する。
existKeys 設定(L832 付近)にも MST_HC_TMPL のシステムキー登録を追加し、initConfigs() で 01_sys_config に自動登録されるようにする。
200_data/202_repository.js(Repository パターン)
AccountRepository(L304-350)/ PartnerRepository(L356-406)/ HurdleRateRepository(MAS-042 で追加済、PR #336)と同じキャッシュパターンを採用。readSheetAsDtos_(sheet)(L19、ファイルスコープのプライベート関数)を流用し、findAsMap() では有効フラグ FALSE 行スキップ + 重複キー先着採用 + _cache キャッシュ。
400_domain/430_what_if_simulator.js(MAS-011 MVP 実装)
getWhatIfDefaults(driver) 関数(MAS-011 polish で実装済)は現在 22_bud_headcount の実績平均から月額給与・想定月次売上・初期費用等のデフォルト値を算出。本案件ではこの関数を拡張し、以下の優先順位で値を返す:
- ユーザーが選択したテンプレート値(MAS-044 新規)
- 実績平均(MAS-011 polish 既実装)
Constants.getParamのシステム既定値(ハードコードフォールバック)
templates/what_if_sidebar.html(MAS-011 MVP 実装)
432 行。<select id="driver"> で HC_ADD / SAAS_ADD を切替え、<div class="driver-form"> 内にフォーム項目を配置。本案件では HC_ADD ドライバーフォームの冒頭に「ポジションテンプレート選択」dropdown を追加し、選択時に google.script.run.getTemplateValues(templateId) を呼んで全フィールドに反映する。SAAS_ADD 側の同等機能は MAS-055 で対応。
修正方針
Step 1: DDL 追加(101_sys_config.js)
schemas 配列に 1 エントリ追加:
'MST_HC_TMPL': {
headers: ["有効フラグ", "管理ID", "ポジション名", "想定雇用形態", "標準月額給与", "想定月次売上貢献", "想定変動費比率", "採用費デフォルト", "PC費デフォルト", "備考"],
color: "#c90076", // BUD_HC と同系統色
validations: {
"想定変動費比率": { type: 'range', min: 0, max: 1, helpText: '0〜1 の小数で入力(例: 0.3 = 30%)' },
"標準月額給与": { type: 'range', min: 0, max: 10000000 },
"採用費デフォルト": { type: 'range', min: 0, max: 10000000 },
"PC費デフォルト": { type: 'range', min: 0, max: 1000000 }
}
},
existKeys 追加(L830 付近):
if (!existKeys.includes('MST_HC_TMPL')) confSheet.appendRow(['MST_HC_TMPL', '', '18_tmpl_hc_position', 'ポジション別テンプレート']);
setVali プルダウン設定(L1491 付近、既存 MST_PROJ 等と同パターン):
MST_HC_TMPLの想定雇用形態列:15_mst_dictionaryのUI雇用形態カテゴリを参照MST_HC_TMPLのポジション名列: フリーテキスト(バリデーション不要)
Step 2: Repository 新設(202_repository.js 末尾)
// =====================================================================
// PositionTemplateRepository — 18_tmpl_hc_position (読み取り専用マスタ)
// =====================================================================
var PositionTemplateRepository = {
_getSheet: function() {
return Utils.getSheetByKey('MST_HC_TMPL', '18_tmpl_hc_position');
},
findAll: function() {
return readSheetAsDtos_(PositionTemplateRepository._getSheet());
},
findAsMap: function() {
if (PositionTemplateRepository._cache) return PositionTemplateRepository._cache;
var result = PositionTemplateRepository.findAll();
var map = {};
for (var i = 0; i < result.dtos.length; i++) {
var dto = result.dtos[i];
var flag = dto['有効フラグ'];
if (flag === false || String(flag).toUpperCase() === 'FALSE') continue;
var id = String(dto['管理ID'] || '').trim();
if (!id || map[id]) continue; // 重複は先着採用
map[id] = {
positionName: String(dto['ポジション名'] || '').trim(),
employmentType: String(dto['想定雇用形態'] || '').trim(),
monthlySalary: Number(dto['標準月額給与']) || 0,
monthlyRevenue: Number(dto['想定月次売上貢献']) || 0,
variableCostRate: Number(dto['想定変動費比率']) || 0,
defaultRecruitFee: Number(dto['採用費デフォルト']) || 0,
defaultPcCost: Number(dto['PC費デフォルト']) || 0,
note: String(dto['備考'] || '').trim(),
};
}
PositionTemplateRepository._cache = map;
return map;
},
_cache: null,
resetCache: function() { PositionTemplateRepository._cache = null; },
};
Step 3: 430_what_if_simulator.js の getWhatIfDefaults 拡張
MAS-011 polish で実装済の getWhatIfDefaults(driver) を拡張し、引数に templateId(optional)を追加:
function getWhatIfDefaults(driver, templateId) {
if (driver === 'HC_ADD' && templateId) {
var tmpl = PositionTemplateRepository.findAsMap()[templateId];
if (tmpl) {
return {
monthlySalary: tmpl.monthlySalary,
monthlyRevenue: tmpl.monthlyRevenue,
variableCostRate: tmpl.variableCostRate,
recruitFee: tmpl.defaultRecruitFee,
pcCost: tmpl.defaultPcCost,
source: 'TEMPLATE',
templateName: tmpl.positionName,
};
}
}
// (既存 F-11 polish の実績平均プリロードロジックにフォールバック)
// ...
// SAAS_ADD 側のテンプレート参照は F-55(SaaS カタログマスタ)で実装
}
新規関数 getHcTemplateList() を公開(サイドバーの dropdown 初期化用):
function getHcTemplateList() {
var map = PositionTemplateRepository.findAsMap();
return Object.keys(map).map(function(id) {
return { id: id, name: map[id].positionName };
});
}
Step 4: サイドバー UI 拡張(what_if_sidebar.html)
HC_ADD ドライバーフォーム冒頭に dropdown を挿入:
<div class="driver-form" id="form-hc-add">
<label for="hc-template">ポジションテンプレート(任意・選択すると自動入力)</label>
<select id="hc-template">
<option value="">-- 手動入力 --</option>
<!-- onload で getHcTemplateList() の結果を動的挿入 -->
</select>
<!-- 既存フォーム項目 -->
</div>
JavaScript:
- ページロード時に
google.script.run.getHcTemplateList()で<option>を動的挿入 - dropdown の
onchangeでgoogle.script.run.getWhatIfDefaults('HC_ADD', templateId)を呼び、返り値で全フィールドを更新 source: 'TEMPLATE'のときはフォーム上部に「📋 テンプレート「{{templateName}}」を適用」のヒント表示
SAAS_ADD ドライバー側の同等機能は MAS-055(SaaS カタログマスタ)で別途実装。
影響範囲
変更ファイル一覧
| ファイル | 変更種別 | 内容 |
|---|---|---|
100_config/101_sys_config.js | 追加のみ | schemas に 1 エントリ / existKeys に 1 行 / setVali に数行 |
200_data/202_repository.js | 追加のみ | 末尾に PositionTemplateRepository(約 40 行) |
400_domain/430_what_if_simulator.js | 変更 | getWhatIfDefaults 拡張 + getHcTemplateList 新設(約 20 行) |
templates/what_if_sidebar.html | 変更 | HC_ADD ブロックに dropdown 追加 + JS 修正(約 30 行) |
docs/_config.json | 追加のみ | nav に仕様書登録 |
既存動作への影響
- MAS-011 MVP 動作(#315 / #320):
templateId未指定時は既存の実績平均プリロードにフォールバック → 完全後方互換 - MAS-048 採用 TCO: 本案件完成後、MAS-048 は
PositionTemplateRepository.findAsMap()を入力源として使用可能 - MAS-045 予算転記: 本案件完成後、MAS-045 は転記行に
templateId列を追加する拡張余地あり - MAS-055 SaaS カタログマスタ: 並列実装可能。MAS-044 の
PositionTemplateRepositoryパターンを踏襲したSaasTemplateRepositoryを MAS-055 で実装
運用・デプロイ手順
npm run push:dev→ サイドバー🔧 開発・設定 → DDL 全更新 (Full)(setupAllSchemas)実行 →18_tmpl_hc_position生成initConfigs実行 →01_sys_configにMST_HC_TMPL登録- ユーザーが初期データ投入(ポジション例 7-10 件を手動入力 or MCP
add_rows) - What-if サイドバー起動 → HC_ADD 選択 → dropdown が有効化されたことを確認
npm run push:prod→ 同手順
注意事項
- ⚠️ failure_patterns #18-#20(命名造語禁止): システムキー
MST_HC_TMPL・シート名18_tmpl_hc_position・関数名getHcTemplateList/getWhatIfDefaults・Repository 名PositionTemplateRepositoryを記述前に必ず Read で実在確認 or 新設予定として明示 - ⚠️ failure_patterns #3(DDL コード値 vs 実データ乖離):
想定雇用形態プルダウンは15_mst_dictionaryのUI雇用形態カテゴリを参照するが、カテゴリ実在確認が必要 - ⚠️ シート番号衝突監査:
18_*が既存他案件で予約されていないことをgrep -rn "18_" docs/で確認済(MAS-046 投資カタログマスタは P2.5 で競合する可能性あり → MAS-044 を先行実装)。19_*は MAS-055 で確保 - ⚠️
Constants.RPA_DEFAULTS/Constants.SHEET_DEFAULTSとの住み分け:Constants.RPA_DEFAULTS(002_constants.jsL169 実在)は会社固有のデフォルト値({'税務署': '武生税務署', ...})。Constants.SHEET_DEFAULTS(002_constants.jsL73 実在)はシート行追加時の既定値。本案件は「ポジション単位の標準値」で粒度が異なる - ⚠️ Human-in-the-Loop: テンプレート選択は「一括入力」であり確定ではない。選択後もユーザーは各フィールドを手動修正可能。転記 (MAS-045) 時点で最終確定する設計
- ⚠️ キャッシュ無効化:
PositionTemplateRepository._cacheは GAS 実行単位でリセットされるため通常問題ないが、サイドバー起動中にマスタ編集した場合は再起動が必要(仕様書にユーザー向け注意として明記)
エッジケース
| # | 条件 | 検知方法 | 期待される挙動 | ログ出力 |
|---|---|---|---|---|
| 1 | 18_tmpl_hc_position シート未作成(DDL 未実行) | Utils.getSheetByKey('MST_HC_TMPL', ...) が null | getHcTemplateList が空配列返却 → サイドバー dropdown に「-- 手動入力 --」のみ表示 | Utils.logInfo('getHcTemplateList', 'MST_HC_TMPL 未作成') |
| 2 | マスタ空(ヘッダー行のみ) | findAsMap() が {} 返却 | 空配列返却(dropdown 選択肢なし) | ログ出力なし(正常系) |
| 3 | 管理 ID が空欄 | `id = String(dto['管理ID'] | '').trim()` が空 | |
| 4 | 同一管理 ID の重複 | map[id] 既存検知 | 先着行採用 | Utils.persistLog('WARN', 'findAsMap', '重複ID: ' + id, '先着採用') |
| 5 | 有効フラグ FALSE 行 | `flag === false | String(flag).toUpperCase() === 'FALSE'` | |
| 6 | 標準月額給与が負値 | Number(dto[...]) が負数 | そのまま格納(計算時にシミュレーター側でエラー or 警告) | 格納時はログなし、使用時に警告 |
| 7 | 想定変動費比率が 1 超(例: 1.5) | Number 値が 1 超 | バリデーション側でブロックする想定だが、DDL 未適用シートでは通る。シミュレーター側で Math.min(rate, 1) で防御 | Utils.persistLog('WARN', ...) |
| 8 | サイドバー dropdown 選択後にマスタ編集 → 再選択 | キャッシュ未更新 | 古い値が返却される可能性 | ユーザーに「再読込してください」の案内をヒントで表示 |
| 9 | getHcTemplateList() 呼び出し時にシート未作成 | Repository が空マップ返却 | 空配列返却 | ログ出力なし |
| 10 | テンプレート適用後にユーザーが手動で値を変更 | フォーム側の input / change イベント | source: 'TEMPLATE' ヒントを非表示化し source: 'MANUAL' に切替 | ログ出力なし(UX の一部) |
| 11 | テンプレート名に絵文字・全角記号が含まれる | プルダウン表示 | そのまま表示(サニタイズ不要)。失敗パターン #24 ラベル解決脆弱性の影響なし(値は ID で管理) | ログ出力なし |
| 12 | 初期データ投入前に MAS-011 サイドバー起動 | dropdown 選択肢 0 件 | 「-- 手動入力 --」のみ → MAS-011 polish の実績平均プリロードにフォールバック | ログ出力なし(正常系・MAS-044 の存在価値 = 実績ゼロ時の補完) |
冪等性・再実行の設計
本案件は読み取り専用マスタ + UI 拡張。シート書き込みは setupAllSchemas 実行時のみ(既存 DDL と同じ冪等性)。サイドバー起動時の getHcTemplateList / getWhatIfDefaults は副作用なし(読み取りのみ)で何度呼んでも安全。
Human-in-the-Loop
テンプレート選択は一括入力の補助であり確定ではない。ユーザーは選択後にすべてのフィールドを自由に修正可能。MAS-045(予算転記)実行時点で最終確定する位置付け。
テスト要件(900_test/901_test_runner.js への追加)
| テスト関数 | 合格基準 |
|---|---|
test_PositionTemplateRepository_findAsMap_emptyMaster | 空マスタで {} 返却 |
test_PositionTemplateRepository_findAsMap_disabledFlag | 有効フラグ=FALSE 行が除外される |
test_PositionTemplateRepository_findAsMap_duplicateId | 重複 ID で先着行採用 |
test_getWhatIfDefaults_withHcTemplate | templateId 指定時に HC テンプレ値が優先される |
test_getWhatIfDefaults_withoutTemplate_fallback | templateId 未指定時に実績平均プリロード動作(MAS-011 polish 後方互換) |
実データ検証
実装前に MCP で以下を確認:
18_tmpl_hc_positionシートの有無(DDL 実行前は存在しない)22_bud_headcountの現行ヘッダー構成(BUD_HCschema と一致確認)15_mst_dictionaryのUI雇用形態カテゴリの値域(正社員 / 契約社員 / 業務委託 / 副業 / パート 等の定義確認)01_sys_configにMST_HC_TMPLキーが未登録であること- MAS-011 サイドバーの現状 UI(HC_ADD ドライバー dropdown 挿入位置の確定)
関連ドキュメント
| 仕様書・ドキュメント | 関連箇所 |
|---|---|
| dev_mas-011_what_if_simulation.md | 本案件の UI 拡張対象(MAS-011 MVP 完成済、polish で実績平均プリロード実装済)。MAS-044 は実績ゼロ時の補完として機能 |
| dev_mas-055_saas_catalog_master.md | 本案件から切り出した姉妹案件。SaaS 側のテンプレートマスタを担当 |
| dev_mas-045_whatif_to_budget_transfer.md | 後続案件。MAS-045 の予算転記行にテンプレ ID 列を追加する拡張余地あり |
| dev_mas-048_hiring_tco_bep_simulator.md | MAS-048 採用 TCO シミュレーターの入力源。PositionTemplateRepository を参照して想定年収・採用費等を取得 |
| CLAUDE.md | コーディング規約(ヘッダー名ベース列参照・有効フラグスキップ・キャッシュ付きマスタ) |
| failure_patterns.md | #18-#20 命名造語禁止 / #3 DDL コード値 vs 実データ乖離 |
人間が検討すべき事項
- テンプレートの粒度(単一値 or 給与レンジ): 現案は単一値。レンジ採用の場合は Low / Mid / High の 3 倍化。判断基準: 業務委託採用でレンジ提示が必要になった時点で拡張
- ポジション階層(Junior / Mid / Senior)を行 or 列で表現: 現案は行(別管理 ID)。列での表現は Repository インターフェースを大きく変える必要があるため非推奨
- マスタ未登録時のフォールバック: 現状どおり手入力可(MAS-011 MVP 挙動を維持)。テンプレ選択は任意機能
22_bud_headcountの有効行から自動生成する機能: 現案は未実装。運用実績がたまってきた時点で「テンプレ候補提案」機能として追加検討(半年後)Constants.RPA_DEFAULTSとの住み分け運用ルール:RPA_DEFAULTSは会社固有デフォルト(税務署名・振込口座名等)、本案件は「職種単位の標準値」。混同防止のため仕様書に明記- テンプレート ID の採番規則:
POS_001,POS_002等のプレフィックス採番 or 自由文字列。現案はID_PREFIX_MAP(002_constants.js)に追記する前提だが、手動採番でも動作する - 多言語対応: 現案は日本語のみ。SaaS 展開時に英語ポジション名を別列として持つか、管理 ID を英数字化するか
- テンプレート更新時のキャッシュ反映: サイドバー起動中の更新は再起動が必要。自動再読込は実装しない方針(パフォーマンス優先)
- MAS-046(投資カタログマスタ)との統合: MAS-046 は 8 大投資カテゴリーを管理、本案件はポジション単位で粒度が異なる。将来的に統合する場合は MAS-046 の上位マスタ化を検討
- MAS-055(SaaS カタログ)との運用統合: HC と SaaS のテンプレートを同じ UI から探索できるよう、MAS-044 / MAS-055 双方完成後に統合ダッシュボード(
📋 全テンプレート一覧)を検討
実装プロンプト(Claude Code 用)
あなたは GAS 会計システム (bizlp-gas-accounting) のシニア開発者です。
案件 MAS-044「ポジション別 HC テンプレートマスタ」を以下の 4 Step で実装してください。
## 実行前タスク(必須・4 件)
1. `200_data/202_repository.js` の `AccountRepository`(L304-350)/ `PartnerRepository`(L356-406)を Read し Repository パターンを確認
2. `100_config/101_sys_config.js` の `schemas` 配列(L879 起点)と `existKeys` / `setVali` を Read し追加位置を確定
3. `400_domain/430_what_if_simulator.js` の `getWhatIfDefaults` 実装を Read し拡張箇所を特定
4. `templates/what_if_sidebar.html` を Read し HC_ADD ドライバーフォーム構造と dropdown 挿入位置を確定
## Step 1: DDL 追加(`101_sys_config.js`、推奨モデル: Haiku)
- `schemas` に `MST_HC_TMPL` エントリ追加(列定義・validations)
- `existKeys` に 1 行追加
- `setVali` で `想定雇用形態` → `UI雇用形態` のプルダウンを設定
- `npm run push:dev` → `setupAllSchemas` 実行 → `18_tmpl_hc_position` 生成確認
- `initConfigs` 実行 → `01_sys_config` に `MST_HC_TMPL` 登録確認
## Step 2: Repository 新設(`202_repository.js`、推奨モデル: Sonnet)
- 末尾に `PositionTemplateRepository` を追加
- `AccountRepository.findAsMap` パターン完全準拠(`_cache` + 有効フラグスキップ + 重複キー先着採用)
- JSDoc(`@returns {{ headers, dtos }}`)を付記
## Step 3: `430_what_if_simulator.js` の拡張(推奨モデル: Sonnet)
- `getWhatIfDefaults(driver, templateId)` に `templateId` 引数追加
- `templateId` 指定時は Repository から取得 → 実績平均プリロードを上書き
- 新規公開関数 `getHcTemplateList()`: テンプレ ID リストを返す
- SAAS_ADD 側は MAS-055 で別途実装のため、本案件では HC_ADD 分岐のみ
## Step 4: サイドバー UI 拡張(`what_if_sidebar.html`、推奨モデル: Sonnet)
- HC_ADD ドライバーフォーム冒頭に「テンプレート選択」dropdown 追加
- ページロード時に `google.script.run.getHcTemplateList()` で選択肢を動的挿入
- dropdown `onchange` で `getWhatIfDefaults('HC_ADD', templateId)` を呼び全フィールド更新
- `source: 'TEMPLATE'` のときは「📋 テンプレート「{{name}}」を適用」のヒント表示
## 制約
- `appsscript.json` の `oauthScopes` を変更しない(failure_patterns #26)
- 列番号ハードコード禁止(`headers.indexOf` で動的取得)
- 架空の関数名・シート名を使わない(failure_patterns #18-#20)
- MAS-011 MVP の既存動作を破壊しない(`templateId` 未指定時は実績平均プリロードにフォールバック)
- **SAAS_ADD 関連は本案件で実装しない**(MAS-055 で対応)
## 動作確認
1. サイドバー起動 → HC_ADD ドライバー選択 → dropdown に登録済ポジションが表示
2. テンプレート選択 → 全フィールドが自動入力される
3. 「📋 テンプレート「Sr エンジニア」を適用」ヒント表示
4. フィールドを手動変更 → ヒント非表示化
5. `01_sys_config` に `MST_HC_TMPL` が登録されている
推奨実行モデル
| 工程 | 推奨モデル | 理由 |
|---|---|---|
| Step 1: DDL 追加 | Claude Haiku 4.5 | 既存パターンの単純追記、判断要素なし |
| Step 2: Repository 新設 | Claude Sonnet 4.6 | AccountRepository パターン流用だが JSDoc・エッジケース考慮が必要 |
Step 3: getWhatIfDefaults 拡張 | Claude Sonnet 4.6 | 既存関数への非侵襲拡張(後方互換確保)の判断 |
| Step 4: サイドバー UI 拡張 | Claude Sonnet 4.6 | HTML + JavaScript + google.script.run 連携の実装 |
変更履歴
| 日付 | 変更内容 |
|---|---|
| 2026-04-23 | 初版作成。MAS-011 MVP(PR #315 + #320 polish)の後継基盤として、ポジション別 / SaaS 別テンプレートマスタを DDL + Repository + サイドバー dropdown で実装する 4 Step 仕様。新規シート 18_tmpl_hc_position / 19_tmpl_saas_catalog、新規 Repository PositionTemplateRepository / SaasTemplateRepository、getWhatIfDefaults の後方互換拡張、getTemplateList 公開。エッジケース 12 件・人間検討事項 10 件・推奨実行モデル 4 工程(Haiku×1 / Sonnet×3)を定義。後続 MAS-048(採用 TCO)・MAS-045(予算転記)が本案件の Repository を入力源として活用する |
| 2026-04-23 | Gemini レビュー(PR #335)指摘を反映。🟡 Major 対応: getWhatIfDefaults の Step 3 実装例に SAAS_ADD 分岐を追記(failure_patterns #25 並列実装対称性漏れ回避)。🟢 Minor 対応: Constants.RPA_DEFAULTS との住み分け記述を明確化(RPA_DEFAULTS は L169 実在、SHEET_DEFAULTS は L73 実在、本案件マスタと 3 者の役割分離を明記)。Gemini の誤指摘(Constants.RPA_DEFAULTS を「誤記」と判定 → 実在する)は訂正せず、記述明確化で混乱防止 |
| 2026-04-23 | SaaS カタログ部分を MAS-055(SaaS カタログマスタ)として独立起票し、本案件は HC テンプレ限定に縮小(main スペースの採用判断機能群への注力方針を反映)。ファイル名を dev_F-44_hc_saas_template_master.md → dev_mas-044_hc_template_master.md に git mv でリネーム(履歴保持)。削除対象: 19_tmpl_saas_catalog / MST_SAAS_TMPL / SaasTemplateRepository / 23_bud_subscription 補完言及 / SAAS_ADD dropdown 拡張。保持対象: 18_tmpl_hc_position / MST_HC_TMPL / PositionTemplateRepository / 22_bud_headcount 補完 / HC_ADD dropdown。Gemini レビュー指摘の SAAS_ADD 対称性論点は MAS-055 側に移譲 |