概要

項目内容
案件 IDMAS-218
案件名タイムトラッキング(Toggl Track 等)導入 + R&D / クライアントワーク時間分離記録ルール整備
カテゴリ税務・運用
優先度P1 ★★★ADR-0009 Phase 1 アクション・R&D 税制 役員報酬按分の絶対条件)
所要時間約 0.5 ヶ月(運用ルール確立 + 軽量 import)+ 永続的な日次運用
対象ファイル(新規)500_import/503_toggl_importer.js(純粋関数 + CSV 取込・約 200 行)/ docs/_internal/biz/time_tracking_operation_guide.md(運用ガイド)
対象ファイル(変更)100_config/101_sys_config.js38_trn_time_entry + 39_kpi_rd_ratio DDL 追加)/ 200_data/202_repository.jsTimeEntryRepository + RdRatioRepository 追加)/ 000_infra/002_constants.jsMENU_DEFINITION + TOGGL_TAGS 定数追加)
新規シート38_trn_time_entry(時間記録 raw・タグ + 開始/終了 + 時間 + プロジェクト)/ 39_kpi_rd_ratio(月次 R&D 比率集計)
新規 03_sys_params キーN42_TOGGL_PROJECT_DEFAULT_FOLDER(default Drive: bizlp/time-tracking/)/ N42_RD_HIGH_LEVEL_THRESHOLD_RATIO(default 0.10 = 試験研究費 / 売上 10% 高水準要件)/ N42_RD_TARGET_MONTHLY_HOURS(default 16h = 役員報酬按分の基準月時間)/ N42_RETROACTIVE_GIT_HOURS_PER_COMMIT(default 1.5 = git commit 直前の R&D 推計時間)/ N42_REQUIRED_RD_ANNUAL_AMOUNT(default 1,500,000 = 高水準要件 150 万円閾値)/ N42_TOOL_NAME(default Toggl Track)の計 6 キー
前提案件ADR-0009(✅ 採用済 2026-04-20・Phase 1 アクション)/ R&D 税制試算 SSoT(✅ rd_tax_credit_estimation_2026.md
後続連携MAS-061 Cash ETR(R&D 控除エビデンスの自動エクスポート)/ MAS-062 PSF プロフィタビリティ(稼働率の分母 F-ClientWork 集計)/ MAS-141 節税シミュレーター(共済との複合節税試算)/ 顧問税理士協議資料
吸収・再定義対象なし(運用基盤の新規確立)

目的

bizlp の売上は 100% クライアントワーク(F)で発生しており(初年度 7 ヶ月で 1,000 万円)、bizlp-gas-accounting は売上ゼロの R&D 投資。この構造ゆえに、研究開発税制の役員報酬按分(Gemini A 派 積極算入)を主張するには F 時間の正確な分離記録が絶対条件

R&D 税制効果は 3 年累計 約 43 万 〜 205 万円(売上シナリオ × 賞与パターン次第)。基準ケース(売上 1,800 / 1,800 万 × 賞与 300 万)で累計 約 105 万円。記録がなければ A 派(積極算入)を主張できず B 派(保守除外・API 代のみ計上)しか選べず、累計 22 万円程度しか達成できない(差分 約 83 万円)。即時着手が合理的

加えて、MAS-062 PSF プロフィタビリティ拡張の稼働率(F-ClientWork ÷ 総労働時間)算出 + MAS-061 Cash ETR の R&D 控除エビデンス + MAS-141 節税シミュレーターの実時間ベース判断 など、複数 FP&A 案件の前提基盤となる。

現在のコード

本案件は新規確立の運用基盤のため、既存コードの利用箇所は薄い。新規実装は CSV 取込パイプライン + R&D 比率集計エンジンのみ。

ADR-0009 Phase 1 アクション #3(既決)

ADR-0009 §4-3 で「タイムトラッキング(Toggl Track 等)の導入」を Phase 1 アクション必須項目として明記済。本案件はその具体実装。

R&D 税制試算 SSoT(既存)の参照

docs/_internal/biz/rd_tax_credit_estimation_2026.md で 3 シナリオ × 4 賞与パターンのマトリクス + ケース C(R&D 50% 按分)の累計控除額を提示。本案件のタグ設計はこの試算前提と整合。

既存 Constants(既存)の利用関数

関数定義ファイル用途
Constants.getParam(key, default)000_infra/002_constants.js:167N42_* パラメータ取得
Utils.persistLog(level, message, context)000_infra/004_utils.js(既存)取込結果ログ記録

MAS-061 / MAS-062 連携先(仕様書完了・実装未)

  • MAS-061 Cash ETR: 本案件の RdRatioRepository.findByFiscalYear() を呼出して R&D 控除エビデンスを自動エクスポート
  • MAS-062 PSF: 本案件の TimeEntryRepository.findByTagAndPeriod('F-ClientWork', ...) を呼出して稼働率算出

修正方針

Step 1 — タグ体系 5 タグ確定(ADR-0009 §4-3 準拠)

タグ略称領域R&D 該当用途例
D-RnDDR&D(研究開発)新機能の実験・PoC・論文/技術書 reading・Claude API 検証
C-ProductDevCプロダクト開発✅(ケース C 50% 按分)bizlp-gas-accounting 機能実装・spec 起草・コードレビュー
B-SelfOpsB自社会計運用自社の月次決算・経費登録・税務手続き
A-CorporateA法人運営契約書作成・株主総会・社労士打合せ・法人銀行手続き
F-ClientWorkFクライアントワーク(受託)顧客貸与 PC での受託業務(売上発生源・R&D ではない

Constants.TOGGL_TAGS に 5 値を定数化。5 タグ以外を Toggl 上で使ったら 503_toggl_importer.js で WARN ログを出す(タグ体系の規律維持)。

Step 2 — Toggl Track 設定 + 日次運用

設定項目内容
個人プランFree(無料・5 プロジェクト制限内)or Starter(月 $9)
プロジェクトbizlp-gas-accounting / クライアント-XXX-受託 等の 2-5 プロジェクト
タグ上記 5 タグを Workspace 設定で固定
日次運用作業開始時にタイマー起動・終了時に停止
クライアントワーク記録顧客貸与 PC では bizlp ログイン不可のため、個人スマホ or 別 PC から Toggl で記録

運用ガイド: docs/_internal/biz/time_tracking_operation_guide.md を新設し、上記運用ルールを明文化(spec 起草と同 PR で作成)。

Step 3 — 月次 CSV エクスポート + 取込パイプライン

// 500_import/503_toggl_importer.js (純粋関数 + IIFE 名前空間)

var TogglImporter = (function () {

  /**
   * Toggl Track からエクスポートした CSV を 38_trn_time_entry にインポート
   * @param {string} csvContent  Toggl エクスポート CSV 全文
   * @param {Object} options
   * @returns {{importedCount, warnings, period}}
   */
  function importCsv(csvContent, options) {
    var rows = _parseTogglCsv_(csvContent);
    var validTags = Constants.TOGGL_TAGS;
    var warnings = [];

    var entries = rows.map(function (r) {
      // タグ検証: 5 タグ以外は WARN
      if (validTags.indexOf(r.tag) < 0) {
        warnings.push('Unknown tag: ' + r.tag + ' (row: ' + r.startTime + ')');
        r.tag = 'unknown';  // フィールド汚染を防ぐ
      }
      return {
        tag: r.tag,
        project: r.project,
        startTime: r.startTime,
        endTime: r.endTime,
        durationHours: r.durationHours,
        description: r.description,
      };
    });

    var importedCount = TimeEntryRepository.bulkInsert(entries);
    return {
      importedCount: importedCount,
      warnings: warnings,
      period: { from: rows[0].startTime, to: rows[rows.length-1].endTime },
    };
  }

  return { importCsv: importCsv };
})();

取込フロー:

  1. 月末に Toggl Track で CSV エクスポート(Reports → Detailed → Export CSV
  2. Drive 上の bizlp/time-tracking/YYYY-MM.csv に保存
  3. メニュー「⏱️ Toggl 月次取込」実行 → Drive 直接読込 + 38_trn_time_entry 更新
  4. 同時に RdRatioCalculator.calcMonthly() 実行 → 39_kpi_rd_ratio 更新

Step 4 — R&D 比率の月次集計

// 400_domain/4XX_rd_ratio_calculator.js (純粋関数・本案件で新設は最小限・主に Repository ラッパー)

var RdRatioCalculator = (function () {

  /**
   * @param {string} yearMonth   "2026-04"
   * @returns {{
   *   totalHours, rdHours, rdRatio,
   *   tagBreakdown: {D-RnD, C-ProductDev, B-SelfOps, A-Corporate, F-ClientWork},
   *   highLevelEligible
   * }}
   */
  function calcMonthly(yearMonth) {
    var entries = TimeEntryRepository.findByMonth(yearMonth);
    var tagBreakdown = _aggregateByTag_(entries);
    var totalHours = _sumAll_(tagBreakdown);
    var rdHours = tagBreakdown['D-RnD'] + tagBreakdown['C-ProductDev'] * 0.5;  // ケース C 按分
    var rdRatio = totalHours > 0 ? rdHours / totalHours : 0;

    // 試験研究費 / 売上 ≥ 10% で高水準要件該当(売上は別途集計値を引数で渡す)
    var threshold = Constants.getParam('N42_RD_HIGH_LEVEL_THRESHOLD_RATIO', 0.10);
    var highLevelEligible = rdRatio >= threshold;

    return {
      totalHours: totalHours,
      rdHours: rdHours,
      rdRatio: rdRatio,
      tagBreakdown: tagBreakdown,
      highLevelEligible: highLevelEligible,
    };
  }

  return { calcMonthly: calcMonthly };
})();

39_kpi_rd_ratio シートには月次集計結果を 1 行/月で蓄積(年累計 + 高水準要件到達フラグも併記)。

Step 5 — 過去分(2025-12〜2026-04)の遡及計上

記録開始前の約 4 ヶ月分は以下のエビデンスで推計:

種別推計方法
R&D 時間git log --author='ts_kuma' --since='2025-12-20' --pretty=format:'%ad %s' で bizlp-gas-accounting リポジトリの commit 時刻を抽出し、commit 直前 N42_RETROACTIVE_GIT_HOURS_PER_COMMIT(default 1.5h)を「R&D 従事」として推計。GitHub PR の作成・コメント・マージ時刻も合算
クライアントワーク時間受託契約書・月次請求書の稼働時間から機械的に確定(請求書ベースなので強い客観証拠)
税務調査時の主張強度Toggl 記録より弱いため、遡及計上の範囲は顧問税理士と事前協議して決定

遡及集計スクリプト: scripts/n42_retroactive_aggregator.mjs(Node.js)を新設して git log + 請求書 PDF/CSV を読み込み、推計値を 38_trn_time_entry に bulk insert。実行は spec 起草後 1 回のみ(冪等性確保のため source = 'retroactive_estimate' 列で識別)。

Step 6 — メニュー統合 + 月次運用フロー

000_infra/002_constants.jsMENU_DEFINITION:

📊 マート更新 カテゴリに追加:

{ label: '⏱️ Toggl 月次取込 + R&D 比率更新 (N-42)', funcName: 'importTogglMonthly', description: 'Drive 上の Toggl CSV を取込み 39_kpi_rd_ratio を更新 (N-42)' },

月次運用:

  1. 月初(前月分集計): Toggl Reports → CSV エクスポート → Drive 保存
  2. メニュー「⏱️ Toggl 月次取込」実行
  3. 39_kpi_rd_ratio の前月行を確認・税理士共有用に PDF エクスポート(年次決算期)

影響範囲

対象種別変更内容リスク
500_import/503_toggl_importer.js追加TogglImporter.importCsv() + 内部ヘルパ群(純粋関数・約 200 行)既存 import パイプラインに影響なし
400_domain/4XX_rd_ratio_calculator.js追加(任意)RdRatioCalculator.calcMonthly()(小規模・約 60 行)既存ロジックに影響なし。Repository に直接埋めても良い
200_data/202_repository.js変更TimeEntryRepository + RdRatioRepository 追加既存 Repository に影響なし
100_config/101_sys_config.js変更38_trn_time_entry + 39_kpi_rd_ratio DDL 追加 + setupAllSchemas に組込新規シートのため既存に影響なし
000_infra/002_constants.js変更TOGGL_TAGS 定数追加 + MENU_DEFINITION に「⏱️ Toggl 月次取込」追加既存メニュー / 定数に影響なし
03_sys_params変更6 キー追加(N42_*)。Constants.getParam 経由で読込・default fallback ありシード未実行でも default 値で動作
8XX_migration_n42_time_entry.js追加(任意)38_trn_time_entry シート初期化(DDL 実行で十分なら不要)optional
scripts/n42_retroactive_aggregator.mjs追加git log + 請求書 PDF/CSV から過去 4 ヶ月分を推計し 38_trn_time_entry に bulk insert(1 回限り・冪等)Node.js 実行のためローカル動作
docs/_internal/biz/time_tracking_operation_guide.md追加5 タグ体系 + 日次運用ルール + Toggl 設定手順spec 起草と同 PR で作成
900_test/901_test_runner.js変更MAS-218 単体テスト N42-01〜N42-13 追加(CSV パース + 5 タグ検証 + R&D 比率算出)既存テストへの影響なし
MAS-061 Cash ETR連携拡張RdRatioRepository.findByFiscalYear() を R&D 控除エビデンスとして呼出MAS-061 既存ロジック変更不要
MAS-062 PSF プロフィタビリティ連携拡張TimeEntryRepository.findByTagAndPeriod('F-ClientWork', ...) を稼働率算出に呼出MAS-062 既存ロジック変更不要
appsscript.json変更なしOAuth スコープ追加不要(既存 Drive スコープで CSV 読込可)failure_patterns #26 遵守

注意事項

  1. Toggl 個人プランの制約: Free プランは 5 プロジェクト・3 メンバーまで。一人法人なら Free で十分。商用化時にチームメンバーが増えたら Starter(月 $9)へ移行。spec は Free プラン前提で記述。

  2. クライアントワーク記録デバイスの制約: 顧客貸与 PC では bizlp ツール(Toggl も含む)の起動が NDA で禁止のケースあり。個人スマホ or 別 PC からの記録を必須運用ルール化。time_tracking_operation_guide.md で明示。

  3. タグ体系の規律維持: 5 タグ以外を Toggl 上で使ったら 503_toggl_importer.js で WARN ログ。運用が緩むと R&D 比率算出が破綻するため、月次取込時のレポートで未知タグを必ず確認。

  4. 過去分遡及計上の主張強度: Toggl 記録(リアルタイム)vs git log 推計(事後)で、税務調査時の主張強度に差がある。過去 4 ヶ月分の遡及計上範囲は顧問税理士と事前協議して決定。spec は推計手法のみ提供。

  5. タイマー記録漏れ時の事後記入ルール: 当日中の事後記入は許容、翌日以降の事後記入は WARN(記録信頼性低下)。38_trn_time_entryrecordedAt 列を追加し、エントリ実時刻と入力時刻の差を集計(5% 超で警告)。

  6. 税理士協議タイミング: 1 回目 = 本案件着手時(タグ体系 + 遡及計上範囲)/ 2 回目 = 初回決算期(2027 春想定)/ 3 回目 = 高水準要件到達見込み時(試験研究費 ≥ 売上 10%)。協議結果は docs/_internal/biz/ に時系列で保管。

  7. クライアントワーク案件別の粒度: Toggl Project 機能で「クライアント-A」「クライアント-B」と分けるか、Tag のみで対応するか。spec v1 は Tag のみ(5 プロジェクト制限内に収める)。商用化時の顧客別売上配賦が必要になったら v2 で Project 拡張。

  8. failure_patterns #25 遵守(並列実装対称性): 503_toggl_importer.js は既存の 502_bank_importer.js(CSV 取込)と並列対称。importCsv 関数命名・WARN ログパターン・bulk insert ロジックを揃える。

  9. failure_patterns #18-#20 遵守(命名造語禁止): 関数名 importCsv / calcMonthly / TogglImporter は既存命名と整合。「Toggl」は商品名・「R&D」は業界標準略称で新語ではない。Read で既存ファイルに同名関数がないことを着手時に裏取り。

  10. failure_patterns #26 遵守: appsscript.json の OAuth スコープは変更不要(既存 Drive スコープで CSV 読込可)。

  11. 試験研究費の勘定科目分離(ADR-0009 §4-4): API 利用料 / 開発ツール代は会計上「試験研究費」として独立集計し、通常の販管費と明確に分離。勘定科目マスタ(11_mst_account)にサブ分類「試験研究費」属性を追加するのは MAS-063 の営業外サブ分類拡張と同じパターン(別 PR 推奨)。

  12. 役員報酬按分の判断基準: A 派(積極算入・R&D 比率 × 役員報酬)vs B 派(保守・API 代のみ計上)vs C 派(中間 50% 按分)。spec は C 派 defaultrd_tax_credit_estimation_2026.md の基準ケース準拠)。税理士協議で A or B に切替可能。

  13. 高水準要件 150 万円閾値: 試験研究費 ≥ 売上 10% かつ ≥ 150 万円で高水準要件適用。N42_REQUIRED_RD_ANNUAL_AMOUNT で閾値管理。39_kpi_rd_ratio 月次集計でこの到達見込みをトラック。

  14. CSV エクスポート形式の依存: Toggl Track の Detailed Export CSV 形式に依存(列順・列名)。Toggl 側の仕様変更時は _parseTogglCsv_ の修正必要。spec v1 は 2026-04 時点の Toggl エクスポート形式準拠

  15. GAS 6 分制限対応: 月次 1 ヶ月分の CSV 取込(1 日数時間 × 30 日 = 約 100 entries)は GAS 6 分以内で完了想定。年次取込(1,200 entries)は 60 秒以内。bulkInsert で Range.setValues 一発書込みで最適化。

エッジケース

#条件期待される挙動理由・ログ出力
1CSV に 5 タグ以外のタグが含まれるtag = 'unknown' で取込 + WARN ログ注意事項 #3 のタグ規律維持
2CSV にタグなしエントリがあるtag = 'untagged' で取込 + WARN ログ記録漏れの早期検出
3同じ日時範囲で重複エントリ(誤記録)後勝ちで上書き + INFO ログ修正記録の自然な動作
4CSV パース失敗(不正形式)取込スキップ + ERROR ログToggl 側の仕様変更検出
5月次取込で前月分が既存(再取込)既存削除 → 再取込(冪等)月次データの最新化
6過去分遡及計上が複数回実行source = 'retroactive_estimate' の既存行を全削除 → 再取込冪等性確保
7git log 推計で commit 直前 1.5h が他の作業時間と重複重複時間は減算しない(粗推計)+ 集計コメント明示過去分は推計の限界を spec で明示
8クライアントワーク時間が請求書から確定tag = 'F-ClientWork', source = 'invoice_based' で確定値として登録客観証拠の最高ランク
9役員報酬按分計算で R&D 時間が総時間の 0%按分額ゼロ + 「R&D 従事ゼロのため按分不可」コメント起業初期の自然なケース
10試験研究費 / 売上比率 = 9.9%(高水準要件未達ジャスト)高水準要件 false + 「あと 0.1% で要件達成」アラートUI での到達促進
11Toggl Free プラン制限超過(5 プロジェクト超)インポート時に WARN + 「Starter プラン移行検討」コメントプラン制限の早期察知
1203_sys_params の N42_* キーが範囲外起動時バリデーション: 範囲外なら default で上書き + WARN ログユーザー誤設定対策
13月次取込時に「翌日以降の事後記入」エントリが 5% 超WARN + 「記録信頼性低下・日次運用見直し検討」アラート注意事項 #5 の品質維持

実データ検証

1. 基準ケース(売上 1,800 万 / 賞与 300 万)の R&D 比率期待値

rd_tax_credit_estimation_2026.md ケース C(R&D 50% 按分)の前提と整合させて検証:

月別タグ配分(想定)D-RnDC-ProductDevB-SelfOpsA-CorporateF-ClientWorkR&D 比率
クライアント業務月(受託 100h)5h20h5h5h100h(5 + 20×0.5) ÷ 135 = 11.1%
R&D 集中月(仕様書月)10h60h5h5h50h(10 + 60×0.5) ÷ 130 = 30.8%
平均月7h35h5h5h75h(7 + 35×0.5) ÷ 127 = 19.3%

平均 19.3% > 10% で高水準要件該当。

2. 遡及計上スクリプトの精度検証

過去 4 ヶ月分(2025-12〜2026-04)で git log から R&D 推計時間を算出し、後発 Toggl 記録(2026-05 以降)と比較。±20% 以内で一致を合格基準とする(推計の限界を考慮した広めの許容幅)。

3. 試験研究費 / 売上比率の月次推移

39_kpi_rd_ratio で 12 ヶ月分の推移を可視化し、年累計が 10% 超 + 150 万円超を維持できているか確認。基準ケースで年 R&D 時間 約 504h(42h × 12)→ 役員報酬 600 万 × 19.3% 按分 = 約 116 万 + API 代等 50 万 = 約 166 万 > 150 万達成。

4. MAS-062 PSF 稼働率算出との整合

TimeEntryRepository.findByTagAndPeriod('F-ClientWork', ...) の戻り値を MAS-062 PSF の稼働率分母と比較し、±1h 一致を合格基準とする。

5. エッジケース検証(単体テスト N42-01〜N42-13)

エッジケースセクションの 13 項目それぞれを 1 テストケースとして 901_test_runner.js に追加。

関連ドキュメント

カテゴリドキュメント関係
ADR-0009 分離戦略(最重要)009_separation_strategy.md §4-3本案件は ADR-0009 Phase 1 アクション #3 の具体実装
R&D 税制試算 SSoTrd_tax_credit_estimation_2026.mdケース C 50% 按分 + 累計控除額の試算前提
時間トラッキング運用ガイドtime_tracking_operation_guide.md本案件と同 PR で新設・5 タグ + 日次運用
MAS-061 Cash ETR トラッキングdev_mas-061_cash_etr_tracking.mdR&D 控除エビデンス(RdRatioRepository)の呼出元
MAS-062 PSF プロフィタビリティ拡張dev_mas-062_psf_profitability_extension.md稼働率分母(F-ClientWork)の呼出元
MAS-141 節税共済シミュレーターdev_mas-141_tax_saving_simulator.md共済 + R&D 税制の複合節税試算
MAS-049 賃上げ税制dev_mas-049_wage_increase_tax_credit_simulator.md並列の独立税制案件(給与増加軸)
502 bank importer500_import/502_bank_importer.jsCSV 取込パターンの先例(並列実装対称性)
PRD プロダクトポリシーprd.mdHuman-in-the-Loop 原則 + 税理士助言代替不可 Disclaimer
失敗パターンfailure_patterns.md特に #18-#20(命名造語)/ #25(並列実装対称性)/ #26(oauthScopes)
CLAUDE.mdCLAUDE.mdプロジェクトルール・GAS ファイル番号体系・コーディング規約

人間が検討すべき事項

  1. Toggl Track の選定(vs Clockify / Harvest 等): spec は Toggl default。Clockify は無料で多機能だが UI が複雑。Harvest は請求機能込みだが有料。個人スマホアプリの完成度で Toggl 推奨。最終判断はユーザーが実機テスト。

  2. タグ体系の粒度: 5 タグ採用したが、C-ProductDevC-Spec(仕様書)/ C-Code(実装)に分けるか。spec v1 は 5 タグで開始、運用 3 ヶ月後に細分化検討。

  3. クライアントワーク時間の記録デバイス: 個人スマホアプリ vs 別 PC。個人スマホアプリが運用負荷最小。顧客貸与 PC が制限されている前提で spec 記述。

  4. 過去 4 ヶ月分の遡及計上の強度: N42_RETROACTIVE_GIT_HOURS_PER_COMMIT の default 1.5h。保守的に 1.0h vs 積極的に 2.0h。税理士協議で確定

  5. タイマー記録漏れ時の事後記入ルール: 翌日以降の事後記入を許容するか禁止するか。spec は「許容するが WARN + 5% 超でアラート」を採用。商用化時のチームメンバー教育コンテンツ化。

  6. 税理士協議タイミング: 着手時 / 決算期 / 高水準要件到達見込み時の 3 回。協議費用(時給 1.5 万 × 1h × 3 回 = 4.5 万)を予算に織込。

  7. クライアントワーク案件別の粒度を Toggl Project 機能で管理するか: spec v1 は Tag のみ(Free プラン制限内)。商用化時の顧客別売上配賦が必要になったら v2 で Project 拡張。

  8. 役員報酬按分の判断(A / B / C 派): spec は C 派 default、税理士協議で A or B に切替可能。A 派採用なら累計 205 万円、B 派なら 22 万円、C 派なら 105 万円(試算 SSoT 参照)。

  9. 試験研究費の勘定科目分離(ADR-0009 §4-4)の実装タイミング: 本案件と同時 vs 別 PR。spec は別 PR 推奨(11_mst_account 拡張は MAS-063 営業外サブ分類と同パターンで統合)。

  10. 遡及計上スクリプトの言語選択: Node.js(scripts/n42_retroactive_aggregator.mjs)vs Python。spec は Node.js 採用(既存 scripts/ パターン整合)。

  11. 39_kpi_rd_ratio の DDL 管理 vs 動的生成: spec は DDL 管理を default(setupAllSchemas で再作成)。動的生成にすると履歴が消える危険あり。

  12. Toggl 仕様変更時の対応: CSV 形式変更時の _parseTogglCsv_ 修正フロー。テスト N42-04(CSV パース失敗)でリグレッション検出。

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

Claude Sonnet 4.6 推奨。CSV 取込 + 集計 + 運用ガイド作成の中難易度。税務的判断は人間レビュー必須。

## 案件
MAS-218 — タイムトラッキング導入 + R&D / クライアントワーク時間分離記録ルール整備

## 事前調査(必ず Read する)
1. `docs/dev/dev_mas-218_time_tracking.md` 全文(本仕様書)
2. `docs/adr/0009-separation-strategy.md` §4-3(Phase 1 アクション #3)
3. `docs/_internal/biz/rd_tax_credit_estimation_2026.md` 全文(税制試算 SSoT)
4. `500_import/502_bank_importer.js` 全文(並列実装の手本)
5. `200_data/202_repository.js` BankImporterRepository 実装パターン
6. `100_config/101_sys_config.js` DDL 定義パターン
7. `000_infra/002_constants.js` getParam / Constants 定数追加パターン
8. `docs/dev/dev_mas-061_cash_etr_tracking.md` / `dev_mas-062_psf_profitability_extension.md`
   — 連携先のデータ呼出 API 仕様
9. `docs/_internal/failure_patterns.md` #18-#20 / #25 / #26

## 実装対象

1. `500_import/503_toggl_importer.js` 新規(IIFE 名前空間 TogglImporter):
   - importCsv(csvContent, options) — メイン API
   - 内部ヘルパ: _parseTogglCsv_ / _validateTags_ / _normalizeEntry_

2. `100_config/101_sys_config.js` 拡張:
   - 38_trn_time_entry DDL 追加(列: tag, project, startTime, endTime, durationHours, description, source, recordedAt)
   - 39_kpi_rd_ratio DDL 追加(列: yearMonth, totalHours, rdHours, rdRatio, tagBreakdownJson, highLevelEligible)

3. `200_data/202_repository.js` 拡張:
   - TimeEntryRepository(findByMonth / findByTagAndPeriod / bulkInsert)
   - RdRatioRepository(findByYearMonth / findByFiscalYear / save)

4. `400_domain/4XX_rd_ratio_calculator.js` 新規(小規模・約 60 行):
   - RdRatioCalculator.calcMonthly(yearMonth)

5. `000_infra/002_constants.js` 拡張:
   - TOGGL_TAGS 定数追加(5 値)
   - MENU_DEFINITION に「⏱️ Toggl 月次取込」追加

6. `03_sys_params` の 6 キー追加(default は Constants.getParam の第 2 引数)

7. `scripts/n42_retroactive_aggregator.mjs` 新規(Node.js):
   - git log + 請求書 PDF/CSV から過去 4 ヶ月分を推計
   - source = 'retroactive_estimate' で bulk insert(冪等)

8. `docs/_internal/biz/time_tracking_operation_guide.md` 新規:
   - 5 タグ体系の用途定義
   - Toggl Track Free プラン設定手順
   - 日次運用ルール(タイマー起動 / 個人スマホ記録 / 5% 超事後記入アラート)

9. `900_test/901_test_runner.js` に N42-01〜N42-13 単体テスト

## 動作確認
1. サンプル CSV(10 entries)の取込で 38_trn_time_entry が正確に更新
2. 5 タグ以外を含む CSV で WARN ログ出力
3. 月次集計で R&D 比率算出(基準ケースで 19.3% ±5%)
4. 過去分遡及スクリプトで git log から推計値が ±20% 以内
5. MAS-062 PSF 稼働率算出との F-ClientWork 集計が ±1h 一致
6. エッジケース 13 項目すべて想定通り

## デプロイ
1. dev で push:dev → メニュー「⏱️ Toggl 月次取込」実行 → 38/39 シート確認
2. Go なら push:prod
3. コミット: feat(MAS-218): タイムトラッキング導入 (Toggl 取込 + R&D 比率月次集計 + 過去分遡及スクリプト)

## failure_patterns チェック
- #18-#20: TogglImporter / importCsv / RdRatioCalculator を Read で裏取り
- #25: 502_bank_importer と並列対称(CSV 取込 + bulk insert + WARN ログ)
- #26: appsscript.json は変更なし

推奨実行モデル

工程推奨モデル根拠
Phase 1 TogglImporter コア + CSV パースClaude Sonnet 4.6502_bank_importer パターン流用・中程度の判断
Phase 2 TimeEntryRepository + RdRatioRepositoryClaude Sonnet 4.6既存 Repository パターン適用
Phase 3 RdRatioCalculator + 月次集計Claude Sonnet 4.6パターン化された集計ロジック
Phase 4 過去分遡及スクリプト(Node.js)Claude Opus 4.7 (1M context)git log + PDF/CSV パース + 税務的推計の複合判断
Phase 5 運用ガイド(time_tracking_operation_guide.md)Claude Opus 4.7 (1M context)運用ルール設計 + 税務文脈の理解
単体テスト実装(N42-01〜N42-13)Claude Sonnet 4.6パターン化された期待値検証
DDL 拡張(38_trn_time_entry / 39_kpi_rd_ratio)Claude Haiku 4.5101_sys_config 既存パターン流用
仕様書レビューGemini 3 Pro Preview + Deep Think第三者視点での税務妥当性 + 遡及計上強度の検証 + 税理士協議準備

変更履歴

日時バージョン変更内容
2026-04-27v0.1 (骨組み)初版骨組み作成。全セクション見出し + 概要テーブルのみ。ai_agent_tips.md §6 の章単位生成方針を準用。
2026-04-27v0.2 (本体)現在のコード(ADR-0009 §4-3 / R&D 税制試算 SSoT / 既存 Constants / MAS-061・MAS-062 連携先)+ 修正方針 6 Step 本文(5 タグ体系確定 / Toggl Track 設定 + 日次運用 / 月次 CSV エクスポート + 取込パイプライン / R&D 比率月次集計 / 過去分遡及計上 / メニュー統合 + 月次運用フロー)。JavaScript 疑似コードで TogglImporter.importCsv / RdRatioCalculator.calcMonthly を提示。
2026-04-27v0.3 (堅牢化)影響範囲テーブル(新規 5 / 変更 4 / 変更なし 1)+ 注意事項 15 項目(Toggl Free プラン制約 / クライアント PC 記録不可 / タグ規律維持 / 遡及計上主張強度 / 事後記入ルール / 税理士協議タイミング / 案件別粒度 / failure_patterns #25/#26 / 試験研究費勘定科目分離 ADR-0009 §4-4 / 役員報酬按分 A/B/C 派 / 高水準要件 150 万 / Toggl 仕様変更 / GAS 6 分制限)+ エッジケース 13 パターン(未知タグ / タグなし / 重複エントリ / CSV パース失敗 / 月次再取込 / 遡及複数回 / git log 重複 / 請求書ベース確定 / 役員按分ゼロ / 高水準要件未達ジャスト / Free プラン超過 / 03_sys_params 範囲外 / 翌日以降事後記入)+ 実データ検証 5 本(基準ケース R&D 比率 / 遡及スクリプト精度 / 月次推移 / MAS-062 整合 / N42-01〜N42-13)。
2026-04-27v1.0 (仕様書完了)関連ドキュメント 11 件(ADR-0009 / R&D 税制 SSoT / 運用ガイド / MAS-061 / MAS-062 / MAS-141 / MAS-049 / 502 bank importer / PRD / failure_patterns / CLAUDE.md)+ 人間検討事項 12 項目(Toggl 選定 / タグ粒度 / 記録デバイス / 遡及強度 / 事後記入 / 税理士協議 / 案件粒度 / 役員按分 A/B/C / 試験研究費分離タイミング / Node.js 言語選択 / 39_kpi_rd_ratio DDL 管理 / Toggl 仕様変更)+ 実装プロンプト(Claude Sonnet 4.6 向け・事前調査 9 / 実装対象 9 / 動作確認 6 / failure_patterns チェック)+ 推奨実行モデル(Phase 1-5 + テスト + DDL + レビュー)。仕様書完了(v1.0)として昇格。ADR-0009 Phase 1 アクション #3 の即時着手推奨。Toggl 設定 + 運用ガイド作成のみ即日着手可、CSV 取込実装は 1 ヶ月以内に完了想定。MAS-061 / MAS-062 実装着手前に本案件を完了させるのが筋。