• #debugging
  • #database
  • #financial-data
未分類

AZN だけ「No data」になる原因(2025-12-14)

結論

AZN はEAC(Actuals and Consensus)データ自体は取得・保存できている一方で、出力/判定側のスクリプトが参照しているのが**financial_data_annual / financial_data_quarterly(= v_annual_dataのみのため、AZN が「No data」扱い**になっています。

つまり「取得に失敗した」のではなく、**参照テーブルの不一致(EAC と Financial の別系統)**が原因です。

事象

  • TSV は存在する
    • C:\Users\numbe\Downloads\actual-and-consensus\2025-12-14\AZN_EAC_20251214.tsv(サイズ: 40458 bytes)
  • DB に companies は登録済み
    • companies: AZN が存在(company_id=102
  • しかし Financial 系テーブルが空
    • financial_data_annual / financial_data_quarterly に AZN の行が 0
  • 一方、EAC 系テーブルは埋まっている
    • eac_annual に 1078 行
    • eac_quarterly に 4851 行

直接確認(このリポジトリ内のDB)

※ メモで言及されていた apps/web/data/koyfin.db はこの環境では存在せず、実体は scraper/data/koyfin.db でした。

scraper/data/koyfin.db で確認した値:

  • companies (AZN): [(102, 'AZN')]
  • financial_data_annual (AZN): 0
  • financial_data_quarterly (AZN): 0
  • eac_annual (AZN): 1078
  • eac_quarterly (AZN): 4851
  • v_annual_data (AZN): 0
  • v_eac_annual (AZN): 1078
  • v_eac_annual の例(Sales-Adjusted):
    • FY 2015A = 24,708, FY 2016A = 23,002, ...

参考(他銘柄は Financial が入っている例):

  • MSFT financial_data_annual: 3012v_annual_data3012

なぜ AZN だけこうなるのか(推測を含む)

  • EACのインポートは eac_* に入る(今回 AZN は入っている)
  • 一方で Financial(ハイライト/PL/BS/CF等)のインポートが AZN だけ走っていない/元TSVが無い/対象外になっている可能性が高い
    • その結果、financial_data_annual が空のまま
  • 出力/判定側が v_annual_data(= financial_data_annual ベース)しか見ない設計だと、AZN は常に「No data」になる

対処案

A. AZN の Financial データをインポートする(王道)

  • AZN の財務TSV(EACではない方)を financial_data_annual(必要なら financial_data_quarterly)へ取り込む
  • 取り込み後、出力/判定は v_annual_data 経由で自然に通る

B. 出力/判定スクリプト側にフォールバックを入れる(最小改修)

  • v_annual_data が 0 件のときだけ v_eac_annual(必要なら v_eac_quarterly)も参照する
  • ただし Financial と EAC は 指標体系が別物なので、出したい指標が EAC 側に存在するか(名称/単位)を合わせる必要あり

C. 出力側で AZN を除外する(運用で回避・当面の方針)

  • 方針: DBからAZNは削除しない(EACは取得できており、Financialが取れた時に整合させられるため)
  • 出力/判定(v_annual_data 前提の処理)では、Financialが未取得の銘柄が混ざると「No data」扱いでノイズになるため、当面は 出力側で AZN を除外する
    • 例: WHERE ticker <> 'AZN' を追加、または「v_annual_data の行数が0の銘柄はスキップ」など
  • Financial側の取得(TSVダウンロード/インポート)が成功したタイミングで、この除外は解除する

いまのDBのままだとどうなるか

  • financial_data_annual が空のままなので、v_annual_data を参照する処理からは AZN が「No data」判定され、出力されません。