💻 システム開発

SCALE_Finance_最新基準点

最終更新 2026年06月23日 / 31_システム開発部/_SCALE_Finance_最新基準点.md

SCALE Finance 最新基準点

最新スタンプ: 2026-06-15 08:37 / 最新baseline: scale-finance_2026-06-15_083748_fixed-sort.tar.gz稼働中の固定費を決済日順(1日→月末)自動ソート:見出しに「決済日順」を明示・未指定は末尾)


:LiZap クイックアクセス

項目
本番URL https://finance.scale-group.co.jp/
Cloudflare project scale-finance
ローカル正本 /Users/oogushiyuuki/Library/CloudStorage/GoogleDrive-y-ogushi@scale-group.co.jp/マイドライブ/AI/scale-finance/
バックアップ ~/scale-finance-backups/ (tar.gz)
デプロイ cd <ローカル> && bash scripts/deploy.sh

:LiList 全ナビ構成(2026-05-09時点・全15ページ)

全体

  • ~~ダッシュボード~~ → / は 302 で /revenue/ へリダイレクト(2026-05-09 削除)
  • タスク管理 /tasks
  • 期別サマリー /periods

売上・請求

  • 売上予測 /forecast(NEW・必達/目標シミュレーション)
  • 売上管理 /revenue
  • 着金管理 /payments(月次リニューアル・入金チェック)
  • 請求書(発行)/invoices-issued(PDF添付対応)
  • 請求書(受領)/invoices-received(PDF添付対応)
  • 請求カレンダー /calendar(経費・タスク自動連携)

顧客・パートナー

  • クライアント管理 /clients(個人顧客統合・担当メンバー複数選択)
  • 顧客レポート /customer-reports(NEW・LTV/継続率分析)
  • パートナー管理 /partners(休止中セクション・契約条件)
  • メンバー別収支 /members(複数事業部・税抜税込・DnD)
  • 報酬管理 /compensation(事業部タブ・目標利益率)

経費・CF

  • 経費管理 /expenses(フィルタ・モーダル)
  • 経費マスタ /expenses-master
  • キャッシュフロー /cashflow(口座マスタ・freee連携準備)

法務・設定

  • 契約書管理 /contracts
  • 税務・法務 /tax-legal
  • レポート /reports(経理レポート・税理士向け)
  • 使い方ガイド /guide(Q&A 8章)
  • 設定 /settings

:LiShield 保護資産(絶対に消さない・変えない)

コアモジュール

  • lib/finance-store.ts — useFinanceData/useFinanceArray + notifyStoreUpdated(カスタムイベント再読込)
  • lib/month-context.tsx — 月切替Context + addMonth で前月複製+可変フィールドリセット
  • lib/finance-data.ts — 全初期データ + 型定義(Forecast/Compensation/Tasks/BankAccount/BusinessTarget 等)
  • lib/expense-utils.tsisActiveForMonth / isFutureForMonth / isAnnualContract / nextAnnualBillingMonth / monthlyEquivalent(4ファイル expenses / fixed-costs / revenue / forecast で共通使用・ここを変えると全画面の月別集計に波及
  • lib/business-day.tsisHoliday / isWeekend / isBusinessDay / lastBusinessDayOf(year,month) / lastBusinessDayOfMonthKey(yyyymm) / lastDayOf / thisMonthLastBusinessDay。日本祝日テーブル 2026-2030 をハードコード(春分/秋分/ハッピーマンデーは公式予定値・毎年内閣府カレンダーで確認して延長)。タスク管理の最終営業日期日 + 将来の経費系営業日判定で使用
  • 月別オーバーライド機構(2026-06-15):lib/expense-utils.tsExpenseMonthlyOverride / ExpenseMonthlyOverrideMap / effectiveAmount / effectivePdfUrl / effectivePdfFilename / updateMonthlyOverridefixed-cost-monthly-${month} KV キーに {[rowId]: {amount?, pdf_url?, pdf_filename?}} で月別保存。マスタの monthly_estimate/pdf_url/pdf_filename は「初期値(fallback)」扱い。5ページ(fixed-costs/expenses/revenue/forecast/cashflow)で集計はすべて effectiveAmount 経由に統一・PDF storageKey も expense-pdf-${month}-${id} で月別化(IndexedDB 別物保存)

コンポーネント

  • components/finance/EditableCell.tsx — options ありは常に select 表示(ワンタップ)
  • components/finance/ComputedValueCell.tsx — 計算ロジック tooltip
  • components/finance/MultiSelectCell.tsx — 複数選択チップ
  • components/finance/PdfAttachment.tsx — IndexedDB PDF保存
  • components/finance/RowActions.tsx — リセットボタンは「リセット」入力確認モーダル
  • components/finance/ClientEditModal.tsx / PartnerEditModal.tsx / ExpenseEditModal.tsx / InvoiceEditModal.tsx / ForecastEditModal.tsx

データ構造の不変ルール

  • monthlyRevenueData のフィールド名 ligl は維持(互換性・表示は「SCALE Lead」)
  • business_type'LIGL' は bizLabels で 'SCALE Lead' に変換(旧データ互換)
  • business_type: 'SCALE' のラベルは「SCALE全体」(事業部に属さない全体共通用)
  • partners-masterbusiness_types: string[] を優先(複数事業部対応)
  • 月切替時の複製ルールは MONTH_COPY_RULES(partner-pay/forecast/invoices等)

Chrome タブアイコン

  • app/icon.png / app/apple-icon.png — SCALEロゴ(Sマークのみ・黒背景)
  • metadata.icons で明示指定

:LiCalendarClock 2026-05-07 大規模改修まとめ

20以上の機能追加・改修を1日で実施。本セッションでの完了ブロック:

1. 月切替インフラ

  • 月セレクタの「+」で前月から自動複製+可変フィールドリセット
  • 各 useFinanceArray にカスタムイベント再読込
  • 複製ルール定義: partner-pay / forecast / invoices-issued / invoices-received / payment-status / client-status / task-status / cashflow

2. リブランド & 新事業

  • LIGL → SCALE Lead 全画面表示置換
  • TERASU 新規HP制作事業を3つ目の収益源として追加
  • フィールド名は ligl のまま維持(互換性)

3. 主要セクション(NEW)

  • 売上予測 /forecast:必達(低)/目標(高) 2パターン・固定費連動
  • 顧客レポート /customer-reports:継続月数・LTV・解約率
  • タスク管理 /tasks:経理特化10タスク・月次チェック
  • 報酬管理 /compensation:事業部タブ・目標利益率・モーダル
  • メンバー別収支 /members:複数事業部・税抜税込・DnD・一括取込
  • 使い方ガイド /guide:Q&A 8章

4. データ構造拡張

  • demoClients: case_type / assigned_members[] / contract_date
  • demoPartners: business_types[] / 契約条件(時給/成果報酬/固定月額)
  • 月別キー: partner-pay-${month} / payment-status-${month} / forecast-${month} / task-status-${month} / cashflow-${month} / invoices-*-${month}
  • BankAccount / FreeeConfig(口座マスタ + freee連携準備)
  • BusinessTarget(事業部別目標利益率)
  • FiscalPeriod(期定義・第3期/第4期 のみ)

5. UX改善

  • リセットボタン:「リセット」入力確認モーダル(誤操作防止)
  • プルダウン:常に select 表示でワンタップ起動
  • 計算値クリックで計算式表示(ComputedValueCell
  • 主要キークリックで一括編集モーダル(クライアント/パートナー/経費/請求書/予測)
  • ステータス英語廃止(active → 稼働中、submitted → 提出済 等)
  • 月セレクタ全ページ連動

6. 連携・自動化

  • 売上管理 ← メンバー別収支から自動集計
  • 着金管理 ← メンバー別収支から請求額自動取得
  • 顧客レポート ← クライアント契約日 + 全期間 partner-pay 集計
  • 請求カレンダー ← 経費マスタの payment_day + タスクの due_day 自動表示
  • メンバー別収支 ← クライアント管理から「案件一括取込」+ 担当メンバーで複数行展開

7. PDF添付(請求書)

  • IndexedDB 保存(最大30MB)+ Drive URL 貼付
  • 空セルクリックで即ファイル選択ダイアログ
  • 発行/受領モーダル内で完結

8. Chrome タブアイコン

  • app/icon.svg 削除(手書き「S」廃止)
  • 本物SCALEロゴ → SCALE文字crop → app/icon.png に置換
  • 黒背景 + 翼型「S」マーク

:LiHistory 当日の実施詳細(時系列)

時刻帯 ブロック バックアップID
09:47 月切替・SCALE Leadリブランド・TERASU追加 before-month-switcher
10:02 クライアント・期別サマリー・報酬管理 before-rename-terasu
10:09 クライアント担当・モーダル before-clients-modal-members
10:18 フィルタ・モーダル・黒アイコン before-filters-modal-blackicon
10:25 個人顧客統合・期別サマリー・報酬管理 before-clients-merge-periods-comp
10:36 案件タイプ・複数事業部・自動反映 before-casetype-multibiz-autorev
10:43 ロゴ・タブ化・タスク管理・PDF before-logo-tabs-tasks-pdf
10:50 カレンダー・キャッシュフロー・AI廃止 before-calendar-clients-cf-ai
12:16 ワンタップ・グルーピング・月複製 before-onetap-grouping-monthcopy
12:20 経費モーダル・着金管理・PDF直接 before-modal-payments-pdf
12:27 売上予測 before-forecast
12:31 目標利益率・一括取込・DnD before-targets-bulk-dnd
12:37 休止パートナー・契約条件・SCALE全体 before-partners-section-comp-label
12:42 カレンダー連携・担当メンバー before-cal-link-assigned
12:48 計算式表示・売上予測モーダル before-formula-forecast-modal
12:53 クライアントモーダル・顧客レポート before-clients-modal-customer-reports
13:08 クライアント管理:担当メンバーをチェックボックス式選択に・契約開始日をネイティブdate picker直起動・月額/支払方法/請求サイクル列削除 before-clients-checkbox-datepicker
13:13 パートナー管理:一覧から契約タイプ/報酬条件列削除・モーダルから請求書送付メール削除・契約タイプを記載式に・時給/固定月額を「報酬(円・税込)」1欄に統合(旧データは互換表示) before-partners-simplify
13:18 MultiSelectCell ドロップダウンを portal+fixed で overflow 切れ解消(候補が見えない問題修正)。パートナー管理一覧を直接編集化(事業部チップ/法人個人プルダウン/会社名/支払サイクル) before-dropdown-fix-inline-edit
13:21 パートナー管理:上部サマリーを2枚に削減(報酬合計・利益率削除)/status='active'等の旧形式を稼働中扱いにマイグレーション(normalizeStatus)/支払サイクル列削除/解約セクション常時表示/モーダルに契約開始日追加/MultiSelectCellにformat対応で事業部ラベル正しく表示 before-partners-summary-cleanup
13:25 パートナー管理:所属事業部に「幹部」追加/モーダルから支払サイクル削除/報酬欄をtextareaの自由記述に(数字以外も可)/一覧の個人選択時に会社名placeholderを非表示 before-executive-and-comp-text
13:39 パートナー管理:事業部チップを6色配色(SCALE Lead=cyan / Clue・Next=pink / TERASU=amber / 幹部=purple / SCALE全体=blue / その他=slate)/フィルタバー追加(事業部・ステータス・名前検索・件数表示・クリア)/ステータスフィルタ選択時は該当セクションのみ表示/MultiSelectCellに chipStyle prop追加 before-partners-color-filter
13:48 パートナー管理:DnDで行の並び替え可能に(GripVerticalハンドル)/ResetDataButton を赤系スタイルに変更(共通コンポーネント・他ページにも適用、確認モーダルは既存維持) before-partners-dnd
13:54 パートナー:上部サマリーを3カードに分割(稼働中/休止中/解約済み)+「稼働期間」列追加(contract_dateから自動計算)。クライアント:事業部セルを色付きselect化(パートナーと統一配色)/担当メンバー候補を normalizeStatus 対応で旧'active'データも全員候補に・解約以外を全員表示。MultiSelectCell:セル全体クリックでドロップダウン展開可能に(ボタンクリック不要) before-period-and-bizcolor-clients
14:01 クライアント:パートナーと同じステータス別セクション(稼働中/休止中/解約済み)に分割/「契約期間」「次回契約更新日」列追加/モーダルに「契約期間(月)」「自動更新の契約期間(月)」「初回契約更新日」3項目追加(青系の契約更新セクション)/calcNextRenewalDate でループ加算による次回更新日自動算出(finance-data.ts に export) before-clients-sections-renewal
14:08 顧客レポート大幅拡張:上部KPIを8カードに増強(稼働中/解約率/平均継続月数/平均LTV/累計売上/累計利益/平均月間売上ARPU/平均月間粗利)。SVGグラフ6種追加(月別売上/利益推移エリア・事業部別ドーナツ・LTV TOP10横棒・継続月数分布・利益率分布・月別アクティブ顧客数)。テーブル列「月平均売上」「月平均粗利」追加。事業部チップを色分け対応。クライアント:担当メンバー候補を稼働中のみに戻す before-customer-report-charts
14:13 クライアントモーダル:「請求書送付手段」「連絡手段」プルダウン追加(Chatwork/Slack/LINE/メール/その他)/着金確認方法削除/請求サイクルをプルダウン化(月末締め翌月末払い/事前支払い)。MultiSelectCellドロップダウン:portal経由のReact合成イベント伝播を止め、項目クリック時にドロップダウンが閉じない問題修正+名前テキストクリックでもチェックON/OFF反映+選択中ハイライト。クライアント担当メンバーのチップ色をインディゴに変更(SCALE Lead事業部のシアンと被りを解消) before-clients-modal-channels
14:18 クライアント↔パートナー双方向同期:パートナーモーダルに「担当案件」セクション追加(クライアント管理から逆引き)。保存時に各クライアントの assigned_members を自動更新。Single source of truth は clients.assigned_members(クライアント側を正本)でパートナーモーダルは表示・編集だけ提供。これでどっちから編集しても同じ状態が保たれる before-bidirectional-sync
14:23 クライアント一覧:「請求書送付先」列を「請求書の送付手段」プルダウン(Chatwork/Slack/LINE/メール/その他)に置換。インライン編集可(モーダル経由不要) before-clients-table-delivery
14:27 クライアントモーダル:「解約日」フィールド追加(赤系セクション)。クライアントページの useEffect で解約日が今日以下になった稼働中クライアントを自動で status='解約' に切替(無限ループ防止のため変更必要な行のみ更新) before-churn-date
14:58 クライアント:(1)モーダルに契約書PDF添付欄追加(PdfAttachment 共通コンポーネント・IndexedDB+外部URL)/(2)一覧テーブルにDnDハンドル追加(GripVerticalで順序入替)/(3)新規追加時の固定文言廃止:name=空・invoice_delivery_method/contact_method=null・select に「— 未選択 —」追加/(4)個人顧客の着金タイミングを <input type="date"> に変更(カレンダー+直接入力可) before-clients-pdf-dnd-defaults
15:06 個人顧客の着金タイミングを「毎月◯日」の select 式に変更(1〜31日+月末)。年指定不要のため date input は不適切だった。旧データ(YYYY-MM-DD形式)は日部分だけ抽出して自動マイグレーション before-payment-timing-day
15:18 ComputedValueCell(計算式tooltip)を全ページに展開:(1)ダッシュボード stats 4枚+P/L売上総利益+営業利益+累計サマリー利益率/(2)売上管理 着金合計/未着金/クライアント税抜→税込/(3)着金管理 KPI 4枚+請求税込+残高/(4)期別サマリー StatCard 5枚+SummarySection 合計+月別売上計/利益/利益率/(5)キャッシュフロー KPI 4枚/(6)請求書発行 KPI 4枚+税込/(7)請求書受領 KPI 4枚/(8)経費管理 絞込合計/(9)レポート 利益。事業全体で「クリックすると計算式が見える」UX が統一された before-computed-cell-rollout
15:30 メンバー別収支 大規模改修:(1)担当未設定の partner='' でも「(担当未設定)」select で選べるように/(2)業種判定で partner='' のときは fromClient(クライアント.business_type)を尊重→Clue_Next クライアントが正しく Clue・Next 事業部に括られる/(3)タブ追加「案件ごと/パートナーごと」、パートナーごとは同名集計で総合評価表示/(4)Clue_Next 月額自動行(useEffect で稼働中Clue_Nextクライアント×assigned_members を summary='月額'/数量1/単価=monthly_amount で自動生成・重複防止)/(5)テーブルに「摘要」「数量」「単価」列追加・数量×単価が両方>0なら revenue 自動計算+ComputedValueCell 表示/全KPIにComputedValueCell適用 before-members-major-refactor
15:43 メンバー別収支:Clue・Next 事業部だけ「revenue=税込として保存」する仕様に切替。toExcl/toIncl ヘルパー導入で事業部ごとに税抜/税込換算を自動分岐。Clue・Next の月額(monthly_amount)が税込み入力なので、税抜列は ÷1.1 の逆算表示・税込列はそのまま。集計(grandRev/subRev/byPartner)は税抜統一(_finalRevExcl)で計算。利益・利益率も税抜ベース。他事業部は従来通り(×1.1で税込)。 before-clue-next-tax-inclusive
16:08 (1)メンバー別収支:「その他」混入バグ修正(normalizeBiz でクライアント側を最優先・LIGL→SCALE_Lead 正規化・無効キーは Other フォールバック)/列順を 案件→メンバー→摘要 に並べ替え/案件名の右に「詳細」リンク(クライアント管理ページへ遷移)/メンバーセルの「詳細」リンク廃止/摘要 placeholder を空欄に。(2)クライアント管理:契約期間入力を契約開始日〜契約終了日の日付ペアに変更。契約期間/自動更新期間は数字+ヶ月suffix。calcNextRenewalDate を contract_end_date 起点に変更(first_renewal_date は互換維持)。(3)売上予測モーダル全面書き直し:売上/人件費 セット配列(partners チェック式・摘要・単価・数量(低)・数量(高))→ 自動で low_revenue/high_revenue/low_cost/high_cost 算出 before-multi-fixes
16:13 メンバー別収支:(1)Clue・Next 月額自動行生成 useEffect を完全廃止(実態データを上書きしないため)。importClientsAsRows ボタン押下時のみ取り込み。(2)単価セルの「(税込)」suffix を削除。(3)既に蓄積された auto_clue 行を一掃するボタン追加(auto_clue:true な行のみ削除・手動入力分には影響なし)。 before-stop-auto-clue

2026-05-09 ダッシュボード削除+AGENTS.md削除

時刻帯 ブロック バックアップID
05:39 (1)ダッシュボード / 削除:app/page.tsxuseRouter().replace('/revenue') のクライアントリダイレクトに置換(旧FinanceDashboard全329行→14行)/SystemSidebar.tsx から「ダッシュボード」項目削除+未使用 LayoutDashboard import 削除/public/_redirects 新設で Cloudflare Pages のサーバーサイド 302 を併用(/ /revenue/ 302)。本番 / → 302 → /revenue/ (200) 動作確認済。月次全体管理 /revenue に全機能統合済のためナビ整理完了。(2)AGENTS.md 削除:プロンプトインジェクションパターン(「This is NOT the Next.js you know / Read the relevant guide in node_modules/next/dist/docs/」)の指示を排除。CLAUDE.md@AGENTS.md 参照のみから簡潔なまともな指示書に置換(クイック情報・必読リンク・退化禁止フロー・isActiveForMonth重複定義/EditableCell空入力/D1同期/認証なし運用の保守注意点)。 after-dashboard-removed

2026-06-15 改修ブロック

時刻帯 ブロック バックアップID
08:37 「稼働中の固定費」を決済日順自動ソートactiveRowspayment_day 昇順(未指定=999で末尾)にソート。セクション見出しに「決済日順」を明示。DnDロジック自体は残すが表示はソート優先のため実質無効 fixed-sort
08:22 経費管理:月別金額/PDFオーバーライド導入(バグ根治):ユーザーFB「5月分が16,000円→6月で10,000円に書き換えたら5月分も10,000円に変わってしまう」のバグ報告に対応。原因=fixed-cost-mastermonthly_estimate を1つ持っているだけで月別差分の保持機構がなかった。修正:(1)lib/expense-utils.tsExpenseMonthlyOverride/Map 型、effectiveAmount/effectivePdfUrl/effectivePdfFilename/updateMonthlyOverride 追加/(2)fixed-cost-monthly-${month} KV を月別オーバーライドストアとして導入({[rowId]: {amount?, pdf_url?, pdf_filename?}})/(3)/fixed-costs:金額セルとPDF添付の onSave をオーバーライドに書き込み、モーダルも {monthly_estimate, pdf_url, pdf_filename} だけ抜いて月別ストアに保存・残りはマスタ更新。年次契約一覧セクションも effectiveAmount で表示。PDF storageKey を expense-pdf-${selectedMonth}-${id} に変更(IndexedDB別物保存)。tooltip追加:「当月の金額(変更しても他月には影響しません)」「領収書PDFは月別に保存されます」/(4)/expenses/revenue/forecast:当月オーバーライドを useFinanceData 経由で読み込み、fixedMaster.rows.reduceeffectiveAmount 経由に/(5)/cashflow:複数月ループのため useFinanceMultifixed-cost-monthly-${m} 全月分を取得・各月の集計で対応する override を適用/(6)後方互換:オーバーライド未設定の月はマスタ値で fallback。既存データを開いても表示は変わらない(次に金額編集したときから月別記録が始まる)。ただし、過去にバグで上書きされてしまった月の金額は手動で正しい値に再入力する必要あり(システムは過去履歴を持っていない) monthly-override

2026-06-01 改修ブロック

時刻帯 ブロック バックアップID
10:09 経理タスク管理 大規模リニューアル:(1)lib/business-day.tsnthBusinessDayOf(year,month,n) / nthBusinessDayOfMonthKey(yyyymm,n) 追加:月初から N 営業日目を計算(土日祝除く・月外にあふれたら最終営業日 fallback)/(2)FinanceTask.due_type を 5択に拡張:day / nth_business_day(N営業日目)/ last_business_day / last_day / adhoc(随時)/(3)demoFinanceTasks を 10件→16件に完全入れ替え:定例13(メンバー別収支記載=1営業日 / 請求書発行=2営業日 / 請求書送付=3営業日 / 請求金額案内幹部=3営業日 / 入金チェック期日超過=3営業日 / 売上予測更新=毎月5日 / パートナー請求書チェック=5営業日 / パートナー請求書催促=7営業日 / freee会計更新=10営業日 / 社会保険支払=毎月1日 / 入金チェック期日内=最終営業日 / 個人支払い=最終営業日 / 月次振込=最終営業日)+ 随時3(パートナー管理更新 / クライアント管理更新 / 経費管理更新)/(4)強制マイグレーション:finance-tasks-renewal KV キーで v2-2026-06-01 バージョン管理・既存ユーザーは初回ロードで自動で新タスクリストに置換/(5)リスト表示:随時は紫「随時」ラベル+日付なし・他はラベル+実日(N営業日のときは「N営業日 / 4日」のような形)/(6)モーダル:select 5択 + 数字入力は day/nth_business_day のみ・他はガイドメッセージ表示 task-renewal
09:56 経理タスク管理に「最終営業日」期日サポート:(1)lib/business-day.ts 新設:日本祝日テーブル 2026-2030(春分/秋分/ハッピーマンデーは公式予定値)+ isHoliday/isWeekend/isBusinessDay/lastBusinessDayOf/lastBusinessDayOfMonthKey/lastDayOf を export/(2)FinanceTask 型に due_type?: 'day' \| 'last_business_day' \| 'last_day' 追加(未指定=day で後方互換)/(3)app/tasks/page.tsx :編集モーダルの「毎月の期日」を select 化(3択:毎月◯日 / 最終営業日 / 最終日)、数字入力は due_type='day' のときだけ表示・他は説明文表示。リスト表示は effectiveDueDay(t, selectedMonth) で月セレクタ連動の実日を表示(最終営業日タイプは cyan ラベル)、ソートも実日順に。title ホバーで「最終営業日(◯月の自動計算)」と説明。動作:「請求書発行」を最終営業日に変更すると 6月→6/30、7月→7/31、5月→5/29(5/30土・5/31日のため)と自動で正しい日付が計算される task-business-day

2026-05-29 改修ブロック

時刻帯 ブロック バックアップID
15:38 請求書受領/発行の済/未ステータスをバッジ色分け:旧(plain text の EditableCell options=['済','未'])は背景色なしで「済」「未」が地味な文字色のみ→どっちか判別しづらい問題を修正。components/finance/StatusBadgeCell.tsx を新設して「済=緑 or シアン背景+枠+濃いテキスト/未=黄背景+枠+濃黄テキスト」のバッジ風セルを共通コンポーネント化。doneTone='green'(受領済・送付済 等の業務「完了」)vs 'cyan'(振込・着金 等の「金銭の受渡し完了」)の2トーンで意味を視覚分離。クリック→ select でステータス切替は維持(EditableCell ラップ)。適用箇所4つ:請求書受領 received(緑) / paid(シアン)、請求書発行 issued(緑) / paid(シアン)。ユーザー要件は「受領の振込欄」だが、同パターンの請求書発行も同時適用で UX 一貫性確保 status-badge
13:45 請求書(発行)に「担当者」列追加:(1)Item 型に partner: string 追加・items 生成時に r.partner を含める/(2)テーブルヘッダの「摘要」の左に「担当者」を挿入(12列→13列)・textAlign 条件は i >= 6 && i <= 9 に更新(数量/単価/税抜/税込)・empty colSpan 12→13・minWidth 1700→1800/(3)内訳行に各 item の partner を表示(未設定は薄色「—」・tooltipで「メンバー別収支で担当者が未設定です」)/(4)小計行に担当者列追加し「N名」(partner ユニーク数・空除外)。partner-pay-${month}partner フィールドから自動取得・手動入力一切不要 invoice-partner-col
13:40 着金管理:請求0クライアントのチェック対応バグ修正:旧ロジックは if (st.paid_amount === 0) a.status = '未入金' で先に判定していたため、請求0(revenueIncl=0)の行はチェックボタンを押しても paid_amount=0 のままで永遠に「未入金」表示・チェックマークもつかなかった。新ロジックは fullyPaid = st.paid_amount >= a.revenueIncl && (a.revenueIncl > 0 \|\| !!st.paid_date) を先に判定して、「請求0 + paid_date あり → 入金済」「請求0 + paid_date なし → 未入金」を実現。toggleFullyPaid は変更不要(既に paid_date を保存していたが判定側で無視していたのが原因)。請求0クライアントの「対応済み管理」が漏れなく機能するように payment-zero-check

2026-05-25 改修ブロック

時刻帯 ブロック バックアップID
13:19 年次契約モード追加:(1)ExpenseRow 型に billing_cycle?: 'monthly' \| 'annual' 追加(未指定=monthly・後方互換)/(2)lib/expense-utils.ts 新設で isActiveForMonth / isFutureForMonth / isAnnualContract / nextAnnualBillingMonth / monthlyEquivalent を共通化(旧:4ファイルで重複定義 → wrapper 経由に統一)/(3)ExpenseEditModal に「請求サイクル」select(月次/年次・color トグルボタン)追加、年次選択時は「月額目安」→「年額」・「開始」→「年次決済月(必須)」にラベル動的切替、月割換算プレビュー表示、警告メッセージ出し分け/(4)/fixed-costs 末尾に「年次契約一覧(漏れ防止)」セクション新設:billing_cycle='annual' な全 is_active=true 行を一覧表示・列「経費名/事業/決済月/次回決済/年額/月割/状態/削除」・当月決済中は緑「当月決済中」バッジ・年額合計+月割換算サマリー・「年次契約を追加」専用ボタン/(5)renderRow で年次行に紫「年次」バッジ表示(badge-purple 風)。動作:start_date='2026-04' + billing_cycle='annual' → 4月のみ「稼働中の固定費」に出る・5〜3月は「年次契約一覧」のみに出る・churn_date の翌月から除外も継続適用 annual-contracts

2026-05-09 改修ブロック

時刻帯 ブロック バックアップID
05:39 ダッシュボード / 削除+/revenue への 302 リダイレクト確定(public/_redirects)。AGENTS.md(プロンプトインジェクション)削除・CLAUDE.md 整理 after-dashboard-removed

2026-05-08 大規模改修ブロック

時刻帯 ブロック バックアップID
(前セッション) メンバー別収支:税込統一・色分け・確定列・全体グループ追加・自動計算ロジック完備/売上・着金・人件費管理:5タブ化(全体/売上/着金/人件費/経費)+ 双方向同期/請求書発行:件名・送付手段・ファイル名(月0埋め)列追加・緑文字最小化/請求書受領:内訳行表示・緑文字最小化/売上予測:税込統一・事業部別グルーピング・ドラッグ&ドロップ・前月引き継ぎ/経費管理:4タブ化(全体/固定費/人件費/突発経費)・モーダル・ドラッグ&ドロップ/借金管理(新ページ)/debts 新設・3タブ(全体/個人/法人) 各種
14:30 期別サマリー(/periods)に SVG チャート4種を追加(pure SVG・依存ライブラリなし):(1)MonthlyStackBarChart 月別売上推移の事業部別積み上げ縦棒(SCALE Lead/Clue・Next/TERASU 3色・凡例付き)/(2)MonthlyTrendChart 月別 売上 vs 経費 vs 利益の折れ線+エリア(マイナス対応・ゼロ線描画)/(3)PaidProgressBar 着金進捗バー(着金率%・売上/着金/未着金 3指標)/(4)RevenueDonutChart 売上構成比ドーナツ(中央に合計表示・1セグメント時は完全リング描画 evenodd 対応)/全コンポーネント 0データ時のフォールバック付き/前セッション中断(参照エラー)からビルド復旧 before-periods-charts
14:35 (1)/forecast クラッシュ修正:fmtY(r.low_revenue) 等で r.low_revenue/low_cost/high_revenue/high_cost が undefined のとき undefined.toLocaleString() で TypeError 発生・案件行のレンダリングが死んでセクションごと開けなくなる症状。r._lowRev/_lowCost/_highRev/_highCost(必ず number)に置換して解消。(2)components/finance/Charts.tsx 新設・5チャート集約(MonthlyStackBarChart / MonthlyTrendChart / PaidProgressBar / RevenueDonutChart / BalanceTrendChart / CashflowInOutBars)。(3)/periods のローカル定義を削除して import に切替。(4)ダッシュボード / に「直近6ヶ月 売上 vs 経費 vs 利益」「当月 売上構成比ドーナツ」「直近6ヶ月 事業部別積み上げ」3チャート追加。(5)キャッシュフロー /cashflow に「残高推移ライン(警戒ライン50万)」「口座別 入金 vs 出金 縦棒」2チャート追加。 before-charts-rollout
14:38 ダッシュボード / 全面リニューアル:手入力 KV monthly-revenue 依存をやめ、当月の数字を partner-pay-${month} / payment-status-${month} / monthly-expense / expense-spot-${month} から完全自動集計に切替(メンバー別収支ページと同じ集計ロジック・Clue・Next 税込保存対応・clientBizMap で事業部自動補完)。構成:(1)KPIカード4枚(売上/着金/営業利益/未着金・各クリックで計算式表示)/(2)着金進捗バー+ハイライト(未着金>50万・赤字・着金率<50% で警告/健全時は緑のSparkles)/(3)月別トレンド3チャート(当月だけ自動集計値で上書き表示)/(4)TOP 5 案件テーブル(売上順・事業部チップ・粗利色分け)/(5)クイックアクセス(メンバー別収支/着金管理/売上予測/期別サマリーへの導線)。削除:旧月次P/Lテーブル、累計サマリー(手入力・/periodsで自動計算)、アラートリスト(自動ハイライトに置換)。 before-dashboard-rebuild
14:48 (1)請求書発行ページ /invoices-issued:列ヘッダ「請求書発行」→「請求書送付」に改名/KPIラベル「発行済」→「送付済」(formula含む)。(2)売上予測 /forecast 全面リニューアル:単一テーブル+事業部見出し行から、事業部ごとの独立ブロックに再構成。各ブロックは色付き左ボーダー+色付きヘッダ(事業部名/件数チップ)+必達/目標2段ヘッダのテーブル+フッタ(必達/目標サブトータル+案件追加ボタン)の構造。最下段に全体合計セクション。(3)ForecastEditModal:「事業部(ブロック分け)」セレクト追加(左ボーダー色=事業部色)/案件名と横並び2カラム配置/saveに business_type を含めるように変更。これでモーダルから事業部間の移動が可能に。 before-forecast-blocks
14:51 請求書ファイル名テンプレから拡張子 .pdf を削除:(1)app/invoices-issued/page.tsx line 77 のデフォルトテンプレ 株式会社SCALE_{year}年{month}月分請求書({client} 御中) から末尾 .pdf 削除/(2)lib/finance-data.tsdemoClients 4社(アイデアム/INTERMIND/HackCamp/RYS)の invoice_filename_pattern から .pdf 削除。理由:保存時に拡張子が二重付与される問題を回避+ファイル形式は別管理にしたいため。 before-strip-pdf-ext
14:58 経費管理 /expenses 大規模リニューアル:(1)ExpenseRow 型に pdf_url / pdf_filename 追加(領収書PDF添付対応)。(2)固定費タブ(FixedCostsContent)のテーブル列を新仕様に:「確定 / 経費名 / 事業 / 種別 / 金額 / 決済日 / 領収書 / 領収書PDF / 削除」(#・備考・ステータス列を削除、種別/領収書方法/PDF添付列を追加)。PDF添付は PdfAttachment コンポーネント+IndexedDB(storageKey=expense-pdf-${id})で領収書ファイル保存。(3)全体タブから「💡 月固定で発生する経費は固定費管理ページで管理/固定費を取込」のヒント文と importFixedToMaster 関数を削除(取込は不要・代わりに集約表示で全部見える設計に)。(4)全体タブを集約版に再構成:個別タブの表示条件を (activeTab === 'all' || activeTab === '個別') に変更し、活性が all の時は各セクションの先頭に SectionDivider(アイコン+タイトル+関連ページへのリンク)を表示。これで全体タブで「月次サマリー&経費精算 → 固定費管理 → 人件費 → 突発経費」が縦に1ページで全部見える集約ビューに。コード重複ゼロ。 before-expenses-rebuild
15:08 経費管理 数字入力ゼロ強制バグ修正+解約日機能追加:(1)EditableCell.commit で空入力時に 0 を強制保存していた挙動を修正、空文字 '' を返すように変更(呼び出し元で null 化可能に)。(2)経費管理3タブ+固定費の monthly_estimate / amount の onSave を v === '' ? null : Number(v) パターンに統一(placeholder=- 表示)。(3)ExpenseRow 型に churn_date?: string \| null 追加。(4)ExpenseEditModal を更新:amount を string state 化(空欄保持)/赤系「解約」セクション追加(<input type="date">・クライアントモーダルと同じ仕様)/月額目安placeholderを「未入力」に。(5)/expenses/fixed-costsuseEffect 追加:解約日が今日以下の稼働中行を自動で is_active=false に切替(無限ループ防止のため変更必要な行のみ更新)。(6)経費精算(master)に解約済みセクションを追加(fixedMaster と同じパターン・グレー左ボーダー+透明度0.7):列「経費名 / 事業 / 種別 / 金額 / 決済日 / 領収書 / 解約日 / 削除」、上部経費合計には含まれない(r.is_active !== false で集計除外)。 before-churn-date
15:18 経費管理 /expenses 全体タブを純粋集約版に:(1)経費精算(master)ブロック全削除:旧テーブル+フィルタバー+解約済みセクション+ExpenseEditModal呼び出し+FilterSelect関数+関連state(bizFilter/typeFilter/activeOnly/modalIdx/modalRow/dragIdx/dragOverIdx/handleDrop)+master useFinanceArray+useFinanceData('monthly-expense')createMonthRowexp 月次データ表示分岐 を全て削除。(2)KPI 4枚再構成:「経費合計 / 人件費(税込) / 固定費 / 突発経費」(旧『freee未提出』削除)。(3)経費合計ロジック修正autoExpenseTotal = autoPersonnel + autoFixed + autoSpot(人件費+固定費+突発経費の和・計算式表示)。(4)autoPersonnel を税抜換算(calcExclLocal)から税込のままに変更(人件費タブの『人件費合計(税込)』と整合)。(5)autoSpot 新規(spotExpenses.amount 合計)。(6)useEffect の churn_date マイグレーションは fixedMaster のみに簡略化。これで全体タブ=「KPI 4枚+📋固定費+💼人件費+⚡突発経費」のクリーンな集約ビューに。 before-expense-master-removal
15:25 売上予測 /forecast 一覧を1テーブル統合 + デザイン整理:(1)旧『事業部ごとに独立テーブル』構造(列幅が事業部ごとにバラついていた)を解消し、1つの <table> + <colgroup>(列幅を130px固定)+ 事業部ごとに <tbody>に統合。これで「必達ライン(低) / 目標ライン(高)」ヘッダが全事業部で完璧に縦揃い。(2)色を大幅控えめ化:必達/目標ヘッダの背景色(黄系/緑系)削除→var(--bg3) 統一、文字色も var(--yellow)/var(--green) から var(--text2) に。(3)事業部色は <tbody> 上部の2px borderTop と見出し行の薄い背景(${color}14)のみで表現。(4)各 tbody 末尾に小計行追加(数値だけ・色は利益のみ緑/赤・他はモノクロ)。(5)案件追加ボタンも tr/td 内に統合。フッタの display: flex レイアウト(縦揃わないやつ)廃止。 before-forecast-unified-table
15:32 経費管理 解約仕様:「解約日(YYYY-MM-DD)」→「解約月(YYYY-MM)」に変更し、解約月の翌月から経費除外するロジックに:(1)ExpenseEditModal<input type="date"><input type="month"> に。churnDate.slice(0, 7) で表示・保存(旧YYYY-MM-DD互換)。注意書きを「解約月の当月までは経費に反映、翌月から除外」に。(2)expenses/page.tsx と fixed-costs/page.tsx の useEffect(自動 is_active=false マイグレーション)を削除し、動的判定 isActiveForMonth(r) に置換:r.is_active !== false && (!r.churn_date \|\| r.churn_date.slice(0,7) >= selectedMonthYM)。これで月セレクタ切替に応じて『5月時点では稼働中』『6月時点では解約済み』が自動で振り分けられる。(3)固定費の autoFixed 集計と activeIdxs/inactiveIdxs 分割も isActiveForMonth ベースに変更。例:5/14解約 → 当月(5月)の経費合計に含む、翌月(6月)から自動除外&解約セクションへ移動。 before-churn-month
15:42 月次全体管理(旧 売上・着金・人件費管理/revenue 大規模リニューアル:(1)ナビ + h1 を「月次全体管理」に改名(SystemSidebar.tsx も更新)。(2)固定費連動バグ修正:手入力 monthly-expense.fixed 依存を廃止し、fixed-cost-master から isActiveForMonth で当月集計(解約月の翌月から自動除外)。(3)KPI 整理:1行目4枚(売上 / 人件費合計(旧『報酬合計』改名)/ 固定費(経費連動) / 突発経費(経費連動) 新規)/2行目2枚(利益(暫定)=amber/dashed/dimmed控えめ + 利益(最終)=green/red メイン強調)/3行目2枚(売上着金済 / 人件費支払済)。「最終利益」は 売上 − 人件費 − 固定費 − 突発経費 で正確に。(4)事業部別テーブル拡充:旧5列(事業部/売上/報酬/利益/利益率)→ 新10列(事業部/案件数/取引先数/売上(税込)/構成比/人件費/利益/利益率/着金額/着金率)。(5)ダッシュボードの全機能を全体タブに統合:着金進捗バー+ハイライト(未着金>50万・赤字・着金率<50% で警告/健全時は緑Sparkles)+月別トレンド3チャート(売上vs経費vs利益・売上構成比ドーナツ・事業部別積み上げ)+TOP 5 案件テーブル。これでダッシュボード / 削除しても全部この1ページで完結。 before-revenue-monthly-mgmt
15:48 売上予測 /forecast 上部の固定費 KPI を経費管理から自動連動:(1)ラベル「固定費」→「固定費(人件費を除く)」に改名。(2)旧 手入力 monthly-expense.fixed 依存を廃止し、fixed-cost-masterisActiveForMonthで当月集計・解約月の翌月から自動除外)+ expense-spot-${month} から自動取得:fixedCost = autoFixedActive + autoSpot。(3)サブテキストに内訳「固定費 ¥XX + 突発経費 ¥XX」を表示。(4)formulaProfit の計算式表示にも内訳を含める。これで売上予測の利益計算が経費管理の実態と完全連動。 before-forecast-fixed-link
15:55 経費管理 固定費に「開始月」フィールド追加(未来予定の登録に対応):(1)ExpenseRow 型に start_date?: string \| null 追加。(2)ExpenseEditModal の「解約」セクション上に緑系「開始」セクション追加(<input type="month">・「前月以前は経費合計に含まれない・未指定なら即時から有効」)。(3)isActiveForMonth ヘルパーを 4ファイル(expenses / fixed-costs / revenue / forecast)で拡張:r.is_active !== false && (!r.start_date \|\| r.start_date.slice(0,7) <= selectedMonthYM) && (!r.churn_date \|\| r.churn_date.slice(0,7) >= selectedMonthYM)。(4)isFutureForMonth 新ヘルパー:r.is_active !== false && !!r.start_date && r.start_date.slice(0,7) > selectedMonthYM。(5)固定費管理 /fixed-costs3セクション分割:稼働中(既存)/今後の経費予定(新規・緑系左ボーダー)/解約済み(既存)。(6)解約済みセクションのthead列も新仕様(種別・領収書・領収書PDF)に揃えてズレ修正。例:SalesNow を「開始月: 2026-05」で登録→4月の月セレクタでは「今後の経費予定」、5月の月セレクタから自動的に「稼働中」に移動&経費合計に算入。 before-start-date
16:00 売上予測 /forecast 上部の全 Stat / アップサイドに自動計算ロジック(クリックで内訳)追加:(1)Stat コンポーネントに formula? prop 追加(ComputedValueCell で表示)。(2)必達/目標 各3項目に formula:売上(税込) は rowsWithProfit 各案件の内訳+合計/人件費(税込) も同様/固定費(人件費を除く)は「固定費 ¥XX + 突発経費 ¥XX = 合計」内訳+経費管理連動の説明。(3)アップサイドの「売上+¥XX」「利益+¥XX」も ComputedValueCell 化:売上は 目標 − 必達 = 増分、利益は 目標利益 − 必達利益(売上差・人件費差の補足)。これで上部のすべての数値がクリックで内訳・計算式が見える状態に。 before-forecast-stat-formula
17:00 D1 サーバーサイド化(複数端末同期):(1)functions/api/kv/[key].ts 新設・GET/PUT/DELETE エンドポイント+ Cf-Access-Authenticated-User-Email / JWT フォールバックの認証ロジック。(2)functions/api/debug.ts 新設(リクエストヘッダ確認用)。(3)wrangler.toml 新設(scale-finance-db D1 バインディング DB、ID a45145d8-e4b1-4fea-80c1-441b024ee0e8ALLOWED_EMAILS空=認証なし運用)。(4)migrations/0001_init_kv_store.sqlkv_store(key TEXT PK, value TEXT, updated_at INTEGER))。(5)lib/finance-store.ts を fetch ベースに改造:localStorage キャッシュ即時表示+fetch GET でサーバー値上書き+ writes は localStorage + サーバーPUT 両方(last-write-wins・fire-and-forget)/オフライン時は localStorage のみ運用(serverEnabled フラグ)/useFinanceMulti(keys, default) 新フック(複数キー一括取得・cashflow タイムラインで使用)/migrateLocalToServer() 新規(既存 localStorage を D1 に一括 push)。(6)/settings に「⬆ この端末のデータを D1 にアップロード」ボタン追加。(7)Cloudflare Access は試したが API パスへヘッダ未付与のトラブルがあり一旦認証なし運用に切替。キャッシュフロー全面リニューアル:(8)/cashflow7ヶ月タイムライン(過去3+当月+未来3)追加:入金予測(前月の partner-pay 売上(税込)・月末締め翌月末払い前提)/入金実績(payment-status + cashflow 手入力 inflow)/出金予測(前月の compensation 翌月末払い + 当月固定費 isActiveExpense判定 + 当月突発経費)/出金実績(cashflow 手入力 outflow)/月末累積残高(予測・実績)/差分。(9)残高推移チャート(BalanceTrendChart・警戒ライン50万円)。(10)上部に警告サマリー(赤字予測月・残高低下警告/健全時は緑Sparkles)。 before-cashflow-7m
17:30 D1 同期トラブルシュート + 完了:(1)別アカウント端末で「5月分が見えない」問題発覚 → 原因特定:lib/month-context.tsx が localStorage 直接読み書きで D1 と同期していなかった(MonthProvider の useEffect で fetch を呼んでいない)。(2)month-context.tsx を fetch 対応に改造:useEffectfetchKv('selected-month')fetchKv('extra-months') を非同期取得して setState /setSelectedMonth / addMonthpushKv してサーバーへ非同期PUT。(3)public/_headers 新設で HTML キャッシュ制御強化(Cache-Control: public, max-age=0, must-revalidate / Next.js 静的ファイルは immutable/api/*no-store)。(4)Cloudflare Access 設定はトラブル(API パスへヘッダ未付与)で断念し、ALLOWED_EMAILS="" で認証なし運用に確定(URL秘匿前提・将来トークン認証 or Access 再挑戦の余地)。(5)別アカウント端末で4月・5月・6月のデータが全部見えることを確認(最終承認)。 d1-final

全ブロック後: HTTP 200 確認 ✅ / 退化なし ✅


:LiAlertTriangle 残課題

  1. ~~AGENTS.md の不審な指示~~ → 2026-05-09 削除済
  2. scripts/deploy.sh のバックアップ握り潰しバグtar -C "$ROOT" . が日本語パスで失敗するが || true で隠蔽 → ロールバック不能リスク)。回避:当面は手動 cd <ROOT> && tar -czf ~/scale-finance-backups/...tar.gz . で取得。修正タスクは別途 spawn 済
  3. ComputedValueCell は /members /forecast /customer-reports に適用済。他ページ(/revenue /payments /periods 等)への展開は段階的に
  4. scale-finance-manual.pages.dev 構築(外部マニュアルサイト・別途HP制作)
  5. freee API 本番接続(裏側のデータモデルは準備完了・OAuth/取引取込は次フェーズ)
  6. 既存ユーザーの localStorage に古いデータがある場合:bizLabels で互換表示中、新フィールドは ?? 0 補完