この日やったこと
朝、有形固定資産(Q3-9)の仮説検証Excelを1ファイルだけパースするところから始めた。夜には42論点すべてのExcelが--allモードで一括生成され、上半分check行が全て0を返していた。さらにTurso DBから書籍の解説テキストを引いてExcelに流し込むパイプラインまでつないだ。Phase 1のプロトタイプからPhase 4のDB連携まで、1日で駆け抜けた記録。
Phase 1: Q3-9(有形固定資産)プロトタイプ
仕訳パーサーの構築
仮説検証用のExcelファイルには、会計ソフトAの仕訳フォーマットでサンプル取引が入っている。qa_journal_parser.pyでこのシートをパースし、日付・勘定科目・金額をPythonの辞書に変換する仕組みを組んだ。
3シート構成Excel生成
split_qa_to_cfws.pyが生成するExcelは3シート構成にした。
- MF仕訳シート: パースした仕訳データを時系列で並べる
- 年次推移表: BS/PL科目の期首残高・当期増減・期末残高を年度別に集計
- CFWS: 年次推移表のBS増減を営業・投資・財務の各CF区分に配賦する精算表
Codexレビュー3回で叩き直す
Codex(GPT-5.4)にレビューを3回投げた。返ってきた指摘のうち致命的なもの:
- ハードコード値を数式ベースに: 年次推移表の期末残高を数値で埋めていた箇所を、
=期首+増減の数式に切り替え - 開始残高のSUMIFS混入防止: 期首残高をSUMIFSで集計すると、前年度の仕訳まで拾ってしまう。開始残高は前期末残高からのセル参照に固定した
試行錯誤: SUMIFSと科目名の罠
SUMIFSの日付テキスト問題
SUMIFSの条件列に日付を入れていたが、Excelのセルが文字列型の「2026/4/1」になっていて、date型の条件値とマッチしない。Python側でdatetimeオブジェクトをセルに書き込むように修正し、Excel側もdate型で統一して解決した。
ログを睨みながら「なぜ合計が0なのか」を追い続けて、セルの書式設定を開いた瞬間に「文字列」の表示を見つけた。地味だが30分持っていかれた。
科目名の不一致
教科書の科目名と会計ソフトAの科目名がずれている箇所が3つ見つかった。
| 教科書 | 会計ソフトA |
|---|---|
| 備品 | 工具器具備品 |
| 有形固定資産売却益 | 固定資産売却益 |
| 減価償却累計額 | 建物減価償却累計額 etc. |
ACCOUNT_DBにエイリアスフィールドを追加し、どちらの名前で来てもマッチするようにした。
繰越利益剰余金にPL利益が反映されない
年次推移表で繰越利益剰余金の期末残高を計算すると、当期純利益が加算されていなかった。BS科目の増減だけを見ていて、PL利益の振替仕訳が抜けていた。繰越利益剰余金の行に=前期末+当期純利益の加算式を追加して解消。
IBフォーマットとレイアウト調整
全セルMeiryo UI統一
IBスタイル(投資銀行モデル書式)のルール:
- 青: ハードコード値(手入力の数値)
- 黒: 数式(他セル参照・計算式)
フォント定数をF_BASE / F_BOLD / F_BLUE等に一本化し、xlsx_helpersモジュールから呼び出す形にした。全シートのフォントがMeiryo UIに揃い、手動で個別設定する箇所がゼロになった。
ユーザーのExcel画像をもとにレイアウト修正
参考Excel画像をもとに、CFWSの下半分(CF計算書エリア)のレイアウトを修正した。
- 配賦ロジック: 上半分の調整列合計が下半分のCF区分に流れる導線を整理
- PL検証エリア: 売上高〜当期純利益までの検算行を追加
- 日本基準様式(連結キャッシュフロー計算書の会計基準 注7)に準拠した科目順序
MF仕訳シートの日付表示
取引日のセル表示をISO形式(2026-04-01)からスラッシュ区切り(2026/4/1)に変更。会計ソフトAの画面表示と揃えることで、目視チェック時の認知負荷を下げた。
Phase 2: 42論点を--allモードで一括生成
ACCOUNT_DBの大量拡張
残り36論点を通すと、未登録の勘定科目が次々にエラーを吐いた。ACCOUNT_DBに科目を大量追加し、エイリアスや特殊科目(建設仮勘定、のれん、社債発行費等)の分類を設定した。
マッピングテーブルの大幅拡張
一括生成を通すために拡張したテーブル群:
_PL_ADJ_MAP: PL科目をCFWSのどの調整列にマッピングするか_TOPIC_CF_MAP: 論点ごとのCF区分デフォルト_OP_SORT: 営業CF内の科目並び順_classify_cf_label: CF区分の自動分類関数
フォールバック列の自動生成
マッピングテーブルにない科目が来たとき、エラーで止めずにフォールバック列を自動生成するロジックを追加した。未知の科目は「その他」列に集約し、後から手動で正しい列に移せる。
上半分check: 42/42全OK
42論点すべてでCFWSの上半分check行が0を返した。BS増減と調整列合計の整合が全論点で取れている。
下半分(CF計算書エリア)は5件WARNが残った。CF区分ラベルの正規化が追いついていない論点がある。
CFラベル正規化
短縮ラベル(「有証売却」)と正式名(「有価証券の売却による収入」)の不一致を解消するため正規化関数を追加した。短縮ラベルが来たら正式名に変換してから、CF計算書の行にマッチさせる。
PL調整項目の符号修正
下半分CF値の計算で、PL調整項目の符号が逆になるケースがあった。上半分check行の符号反転ベースに変更し、「上半分でcheck=0ならば下半分も自動的に整合する」という設計に統一した。
Phase 4: Turso DB連携
書籍解説テキストの自動挿入
book-knowledge-base DBに格納されている参考書の解説テキストをTursoのHTTP APIで取得し、生成Excelの追加シートに挿入するパイプラインを構築した。Q番号をキーにして対応する解説を引く。
Excelを開いた時点で仕訳データ・精算表・解説テキストが1ファイルに揃っている状態を作りたかった。「あのページの説明は何だっけ」とPDFを探しに行く手間が消えた。
cfws_registryテーブル(コンテキストブリッジ)
TursoにCFWS管理テーブルを新設した。
- Q番号(論点ID)
- 生成Excelファイルパス
- check状態(OK / WARN / ERROR)
別のセッションやエージェントが「Q3-9のCFWSはどこにある?checkは通っているか?」と問い合わせできるコンテキストブリッジとして機能する。Tursoスキルにローカルレプリカのパス情報も追記した。
学んだこと
- SUMIFSは型に厳格で、文字列と日付が混在した瞬間に黙って0を返す。エラーを出さない分、発見に時間がかかる
- 科目名のエイリアスは最初から設計に入れておくべきだった。教科書と実務ソフトの命名規則は、ほぼ確実にずれる
- Codexレビューを「致命的な指摘だけ」に絞るとノイズが減り、レビューサイクルが3回で収束した
- check行の設計は「上半分が0なら下半分も自動で整合する」という単方向依存にすると、デバッグ対象が半減する
明日やること
- 下半分WARNの残り5件を解消する(CFラベル正規化の追加パターン)
- 3600行のスクリプトをモジュール分割する(前日の計画書ベース)
- cfws_registryのcheck状態を生成スクリプト完了時に自動更新するフックを追加