• #会計基準
  • #JSON
  • #条文データ
  • #ASBJ
  • #URL検証
  • #agent-browser
開発eurekapu-nuxt4メモ

会計基準データベースの原文忠実化

CF計算書の基礎知識ページに会計基準の引用コンポーネント(BookkeepingStandardRef)を組み込もうとしたら、そもそもソースデータのJSONが原文と食い違っていた。修正を始めたら芋づる式にASBJのドメイン移行が見つかり、最終的にリンクページ198件のURL検証まで走ることになった1日。

発端: 引用コンポーネントの追加

CF計算書の基礎知識ページに、連結CF作成基準の条文を引用表示するBookkeepingStandardRefコンポーネントを追加した。ところが、コンポーネントが参照するJSONデータに第二一項や注解注1・注2が入っていない。条文テキストを表示しようにも、表示する中身がなかった。

JSONを直す前に: Codexからの指摘

最初はHTMLテンプレート側を修正しようとしたが、Codexレビューで方針を変えた。

HTMLは生成物であり、JSON(ソースデータ)を編集すべき

HTMLに条文テキストをベタ書きすると、他のコンポーネントから同じ条文を参照できなくなる。JSONを唯一のソースにして、HTMLはそこから生成する。この指摘でJSONファーストの方針が固まった。

provision_numberのフォーマット修正

条文番号の表示で「注解注1」が「第注1項」と表示される不具合を見つけた。formatProvisionNumber関数が全ての番号に「第○項」パターンを適用していたのが原因。

// Before: 全て「第○項」で表示
const formatProvisionNumber = (num: string) => `${num}`

// After: 「注」で始まる場合はそのまま表示
const formatProvisionNumber = (num: string) =>
  num.startsWith('') ? num : `${num}`

ASBJドメイン移行の発見

条文の原文を確認しようとASBJサイト(asb.or.jp)にアクセスしたら、ページが見つからない。調べてみると、ASBJが旧サイト(asb.or.jp)から新サイト(asb-j.jp)にドメインを移行していた。

旧URLでアクセスするとリダイレクトされるものもあるが、404を返すものもある。standards.jsonに登録していたsource_urlの多くが旧ドメインのままだった。

42基準のソース一括収集

ドメイン移行を発見したことで、全基準のソースを一度洗い直す判断をした。

  • ASBJ 24件: 新サイト(asb-j.jp)からHTMLで取得
  • JICPA 10件: PDFで取得
  • FSA(金融庁): PDFで取得
  • 合計42基準のソースを手元に確保

agent-browserでHTMLを取得し、html_to_json.pyスクリプトで条文JSON形式に変換した。31件が自動変換に成功し、残りは手動で調整した。

cf-jitsumu-shishin.jsonの原文照合

CF実務指針のJSONについて、Turso DBに格納済みのOCRテキストと突き合わせた。

照合の結果、既存JSONには53条文しか入っていなかったが、原文には61条文ある。欠落していた8条文を追加し、既存条文のテキストも原文に合わせて修正した。

JSONの上書き事故と復元

ここで事故が起きた。新しく取得した基準JSONを既存ファイルに上書きしてしまい、引用マッピング(citations.json)が壊れた。citations.jsonは各ページがどの条文を引用しているかの対応表で、条文IDが変わると全ての引用リンクが切れる。

# gitから復元
git checkout -- data/citations.json

復元後、新規ファイルのみを保持する方針に切り替えた。既存のcitations.jsonが参照しているIDは一切変更せず、新しい基準は新規ファイルとして追加する。上書きではなく追加。この原則を忘れると同じ事故を繰り返す。

リンクページ198件のURL検証

ASBJのドメイン移行がわかった以上、リンクページ(supports/link)に載せている全URLも検証が必要になった。198件のリンクを1件ずつチェックした。

対象件数内容
e-Gov19件法令URLの更新(パス構造変更)
JICPA6件リンク切れ修正
ASBJ55件asb.or.jp → asb-j.jp に更新
standards.json25件source_urlの旧→新ドメイン更新
その他残り変更なし(正常応答を確認)

合計で105件のURLを書き換えた。

今日の学び

JSONファーストの原則

HTMLにデータを埋め込むと、他のコンポーネントから参照できなくなる。Codexの指摘がなければHTMLを直接編集し続けて、後から引用コンポーネントを作るときに二重管理に陥っていた。

上書きではなく追加

既存のマッピングファイルが参照しているIDを変更すると、依存先が全て壊れる。パッケージマネージャのsemverと同じ発想で、既存IDは不変にして新規追加で対応する。gitからの復元で事なきを得たが、コミット前に気づけたのは運がよかった。

ドメイン移行は連鎖する

ASBJのドメイン移行1件を見つけたら、standards.jsonのURL、リンクページのURL、引用コンポーネントの参照先と、3箇所に波及した。1つの外部依存の変更がどこまで影響するかを洗い出す作業は、地味だが後回しにすると被害が広がる。