建設OCR見積
監査レポート

長津田外構工事 OCR 適合監査

本ページは、添付の図面 (11p)・内訳書 (3p)・OCR 精度文献レポート に基づいて 本アプリの実用適合度を監査した結果と、コードに組み込んだ改善のまとめです。 本文は research/audit/長津田外構_OCR適合監査.md に保存。

0. エグゼクティブサマリ

結論判定根拠
内訳書 30 行をそのまま実用 OCR 可不可(部分的)PDF→画像未対応・90°回転未補正・表セル抽出なし・語彙不足
README と計算式の一致不一致粗利ステップ欠落・内部モード税抜 → 本コミットで修正
図面から造成土量自動算出安全ゲート停止設計通り。座標表・平均地盤面の専用パーサが今後必要
材料マスタ → 内訳書カバー率100%17 → 32 グループに拡張(本コミット)
文献レポートの改善レバー取込部分→拡張用語集注入・後補正・スコープ別プロンプト・回転補正指示を実装

1. 内訳書 30 行と派生計算

長津田外構数量表に記載された全行を、OCR 期待値として保存しました (research/audit/breakdown_expected.json)。 下表は数量計算ヘルパーで派生量(コン体積・鉄筋重量・アスコン量 等)を即時計算したサンプルです。

#工種種別数量単位摘要派生計算
1CBブロック積工4段基礎W450×t200 鉄筋D13ダブル61.15m土工事共
  • base_concrete: 5.5 m3 (推奨発注 5.78)
  • rebar_weight: 121.7 kg (推奨発注 127.8)
2CBブロック積工3段基礎W250×t150 鉄筋シングル55.09m土工事共
  • base_concrete: 2.07 m3 (推奨発注 2.17)
3縁石工縁石 □10024.13m土工事共
4車止工車 3台6.00箇所
5コーナーガード杉田エースCPL902010.00箇所
6スリット側溝カネソウ ステンレスVSMQ-1020-BKIS-2E-15204.03m土工事共
7U字溝 スチールグレーチング付きT-2 スチールグレーチング58.49m土工事共
8横断側溝 車出入り部ボルト固定 横断側溝U300 スチールグレーチング8.35m土工事共
9CO土間工CO+RC=150+100 D10@200 タイル下地共251.40m2土工事共
  • concrete_volume: 37.71 m3 (推奨発注 39.6)
  • subbase_volume: 25.14 m3 (推奨発注 27.65)
10玉砂利t=502.40m2土工事共
  • gravel_volume: 0.12 m3 (推奨発注 0.13)
  • gravel_tons: 0.19 t
11駐輪ラック基礎工1.00
12機械回送費1.00
13集水桝φ300 防護蓋2.00箇所
14二項道路アスファルト舗装RC+AS=150+50程度28.80m2土工事共
  • asphalt_tons: 3.38 t (推奨発注 3.55)
  • subbase_volume: 4.32 m3 (推奨発注 4.75)
15CO土間上防塵塗装1.00別途
16CO土間カッター目地、コーキング1.00別途
17植栽1.00別途
18〃客土 整地、土工事1.00別途
19タイル場内1.00別途
20駐輪場施設、盗難防止パイプ1.00別途
21メッシュフェンス1.00別途
22目隠しフェンス1.00別途
23見切り材SUS製15.00m
24区画線 白線工車 3台1.00
25駐車場 ナンバリング150角 2ヶ所1.00
26バイク置場 白線引きW=100 31.5m1.00
27バイク置場 ナンバリング150角 6ヶ所1.00
28バイク置場 区画番号7ヶ所1.00
29分離桝φ300×H5116 樹脂製 / 格子蓋:φ300用 T-2 ダクタイル鋳鉄製2.00箇所
30盗難防止パイプSUSφ42.7H300×L70001.00

2. 現状ギャップ(C1〜C9)

C1致命

PDF が画像化されずに送信されている

OpenAI Chat Completions の image_url は PNG/JPEG しか受けない。サーバ側でラスタライズが必要。

C2致命

90°回転 PDF を補正しない

長津田内訳書はまさに横向き保存。プロンプトに「内部で正立化」明示を追加(暫定対応済)

C3

テーブル構造化抽出のスキーマ未強制

本コミットで scope=quantity_table 用 JSON スキーマを追加

C4

材料語彙が17件しかない

内訳書27〜30行のうち6件しか既存マスタにヒットしない。本コミットで32グループに拡張

C5

数量正規表現が単純

"CO+RC=150+100" や "VSMQ-1020-BKIS-2E-1520" を誤って数量と認識する。本コミットで parseBreakdownSpec を追加

C6

語彙集を後補正に注入していない

文献レポート §後補正二桁改善。本コミットで glossary.ts + postCorrect.ts を追加

C7

ページ毎スコープ別プロンプト無し

図面・数量表・特記仕様書を同じプロンプトで OCR していた。本コミットで scopePrompt.ts を追加

C8

複数ページ PDF の各ページ処理

11ページ図面の2ページ目以降を読まない。ラスタライザ実装後に対応

C9

手書き赤入れの分離なし

指示変更(「FH-FL=470」「VE案ホスト 〇」)を見落とすリスク。プロンプトで is_handwritten フラグを返すよう指示済

3. 計算式の検証(README ⇄ 実装)

README に記載された数式と、lib/buildingEstimateCalc.ts の実装を 1 ステップずつ照合しました。本コミットで「粗利」と「内部モード税込」を修正済。

ステップREADME実装判定
直接工事費Σ(数量×単価)Σ section.subtotalOK
管理費直接工事費 × managementRateconstructionCost × managementRateOK
粗利(直接工事費+管理費) × profitRate(本コミット前) なし → 修正済: 社内モードで明示加算修正済
値引- discount- discountOK
消費税(直接工事費+管理費+粗利-値引) × taxRate(subTotal+管理費+粗利-値引) × taxRate ※別途・オプションも課税対象OK (拡張)
見積合計直接工事費+管理費+粗利-値引+消費税taxBase + taxOK
社内モード合計同上(税込)(本コミット前) 税抜だった → 修正済: 内部税込修正済

4. 必要な知識と外部システム

4.1 積算知識

領域内容状況
土量計算平均断面法・メッシュ法(造成)雛形あり (calcAverageGroundLevel)
コン体積面積×厚さ÷1000 + ロス1.05実装済 (calcSlabConcreteVolume)
ブロック積基礎W×t×L + 鉄筋ダブル/シングル実装済 (calcBlockBaseConcrete + calcRebarWeight)
配筋D10=0.560, D13=0.995, D16=1.56 kg/m実装済 (REBAR_UNIT_WEIGHT_KG_PER_M)
舗装密粒13: 2.35 t/m³実装済 (calcAsphaltTons)
カタログカネソウ・杉田エース・JIS二次製品部分実装 (CATALOG_PRODUCTS)
残土ほぐし1.20×, 4tダンプ実積3.5m³実装済 (calcDumpsFromVolume)
安全アスベスト・E票マニフェスト既存 safety_gate
法規建蔽60%/容積200%(第1種中高層)未実装 (P2)

4.2 必要な外部システム

システム用途推奨実装
ページラスタライザPDF→PNG 高解像度 (300dpi+)pdfjs-dist (純JS) or pdfiumOSS
画像前処理回転/Dewarp/コントラスト/二値化sharp / OpenCV.jsOSS
堅牢 OCR エンジンGPT-4o の単価/レート対策Google Document AI / Azure DI / PaddleOCR-VL$1.5/1000ページ
用語集 (建設マスタ)後補正の決め手国交省 公共建築積算基準 + 自社マスタ工数
カタログDBカネソウ等の型番→単価CSV化+定期更新工数
DB / ストレージ履歴/テンプレート/監査Supabase / Postgres + R2/S3月数千円
認証クライアント別データ分離Clerk / NextAuth月千円〜
帳票PDF出力見積書最終提出@react-pdf/rendererOSS

5. 改善ロードマップ

優先施策期待 KPI
P0PDF→画像ラスタライズ + 自動回転PDF が「通る/通らない」二値解消
P0スコープ別プロンプト + JSON Schema 強制(実装済)数量表 27行中20行以上を構造化
P0用語集注入の後補正(実装済)CER -10〜30% (文献§後補正)
P1材料マスタ拡張 17→32(実装済)カバー率 22% → 100%
P1数量計算ヘルパー(実装済)体積誤差 < 1%
P1計算式の修正(実装済)README と一致
P2カタログ品DB単価候補自動提示
P2図面の座標表/平均地盤面 専用パーサ平均地盤面 ±0.01m
P3OSS OCR (PaddleOCR-VL) 切替月額OCR費 ~80%減
P3帳票 PDF 出力完成度

6. 実 PDF を OCR → 期待値差分(本番動線)

長津田外構工事の 数量内訳書 PDF をそのままアップロードすると、/api/ocr がスコープ別プロンプト+後補正を適用し、breakdown_expected.json の正解 30 行と差分照合します。 ファイル名に「長津田」「外構数量」「nagat」のいずれかが含まれている場合、API キーがなくてもモックで結果を確認できます。

PDF / PNG をドロップ または クリックして選択

推奨: 長津田外構数量表.pdf

7. ライブデモ: テキスト → 後補正 → 工種抽出 → 数量計算

OCR 結果を手で貼り付けて、本コミットで実装した「規則ベース後補正」「最長一致の工種抽出」 「派生量計算」がどう動くか確認できます。1 行 = 1 工種の前提で記述してください。

※ デフォルトには長津田案件から代表 5 行を入れています。"l00" や "H5116" 等のよくある誤読を含めて挙動を確認してください。

後補正結果

  • 入力: CBブロック積工4段 基礎W450×t200 鉄筋D13ダブル 61.15 m

    出力: CBブロック積工4段 基礎W450xt200 鉄筋D13ダブル 61.15 m

    適用ルール: fullwidth→halfwidth

  • 入力: CO土間工 CO+RC=150+l00 D10@200 タイル下地共 251.40 ㎡

    出力: CO土間工 CO+RC=150+100 D10@200 タイル下地共 251.40 m2

    適用ルール: unit-normalize, OIl→01

  • 入力: 玉砂利 t=50 2.40 ㎡

    出力: 玉砂利 t=50 2.40 m2

    適用ルール: unit-normalize

  • 入力: 分離桝 φ300×H5116 樹脂製 2.00 か所

    出力: 分離桝 φ300xH5116 樹脂製 2.00 箇所

    適用ルール: fullwidth→halfwidth, unit-normalize

    候補: 分離桝 φ300xH511.6 樹脂製 2.00 箇所

  • 入力: 盗難防止パイプ SUSφ42.7H300×L7000 1.00 本

    出力: 盗難防止パイプ SUSφ42.7H300xL7000 1.00 本

    適用ルール: fullwidth→halfwidth

工種抽出 + 派生量

  • CBブロック積 61.15 m conf 85%

    解釈: {"W_mm":450,"t_mm":200,"rebar":{"diameter":"D13","layer":2}}

    • base_concrete: 5.5 m3 (発注 5.78)450/1000 × 200/1000 × 61.15m = 5.50 m3
    • rebar_weight: 121.7 kg (発注 127.8)D13: 0.995kg/m × 61.15m × 2層 = 121.7 kg
  • タイル 251.4 m2 conf 85%

    解釈: {"W_mm":450,"t_mm":200,"rebar":{"diameter":"D13","layer":2}}

  • 玉砂利 2.4 m2 conf 85%

    解釈: {"W_mm":450,"t_mm":200,"rebar":{"diameter":"D13","layer":2}}

  • 分離桝 2 箇所 conf 85%

    解釈: {"W_mm":450,"t_mm":200,"rebar":{"diameter":"D13","layer":2}}

  • 盗難防止パイプ 1 conf 85%

    解釈: {"W_mm":450,"t_mm":200,"rebar":{"diameter":"D13","layer":2}}

関連リンク

全文(Markdown 版)は research/audit/長津田外構_OCR適合監査.md に保存されています。