feat: /fins/summary の自己資本とROEを取りこぼさないようにする - #10
Merged
Merged
Conversation
get_fin_summary は最後に df[FIN_SUMMARY_COLUMNS_V2] で列を絞るため、 リストに無いフィールドは黙って捨てられる。API が末尾に追加した ShEq / NCShEq / ROE / NCROE の4つがこれに該当していた。 2026-05-15 の応答で確認したところ、ShEq は120行中114行、ROE は74行が 値を持っており、四半期中心の日 (2026-07-31) では ShEq のみ埋まっていた。 本決算で報告される項目なので、四半期しか見ないと存在に気付けない。 ShEq は Eq とは別物である点に注意。Eq は非支配株主持分を含む純資産で、 ShEq は親会社株主に帰属する自己資本。ROE の分母はこの ShEq にあたるため、 NP / Eq で自作した値とは一致しない。 公式仕様 (https://jpx-jquants.com/ja/spec/fin-summary) の111項目と 実際の応答を突き合わせ、この4つ以外に取りこぼしが無いこと、および 既知の列は順序まで一致することを確認済み。仕様書は106番目を NxFNCNp と 表記しているが応答は NxFNCNP で、こちらは仕様書側の誤記。 uv.lock は 0.2.0 への版上げ時に更新され忘れていたぶんを含む。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0186EgG5fS8z9ERLr2upyE7Z
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
何が起きていたか
get_fin_summaryは最後にdf[FIN_SUMMARY_COLUMNS_V2]で列を絞ります。この固定リストに載っていないフィールドは、API が返していても黙って捨てられます。API が末尾に追加した4つがこれに該当していました。
ShEqNCShEqROENCROE実際の応答で確認したこと
2026-05-15(本決算の多い日)の応答120行:
ShEq… 114行に値ありROE… 74行に値あり(0.07のような小数)NCShEq… 60行NCROE… 0行2026-07-31(四半期中心の日)では
ShEqのみが埋まり、ROEは全行空欄でした。本決算で報告される項目なので、四半期の応答だけを見ていると存在に気付けません。ShEqはEqとは別物ですEqは非支配株主持分を含む純資産、ShEqは親会社株主に帰属する自己資本です。ROEの分母はこのShEqにあたるので、NP / Eqで自作した値とは一致しません。利用側が取り違えないよう、定数にコメントを添えました。取りこぼしが他に無いことの確認
公式仕様(ja/spec/fin-summary)の111項目と、実際の応答のキーを突き合わせました。
差異は1つだけで、仕様書側の誤記でした。ドキュメントは106番目を
NxFNCNp(小文字p)と表記していますが、API が返すのはNxFNCNP(大文字)です。このリストは元から大文字なので変更不要です。(NxFNp/NxFNp2Qのほうは本当に小文字で、API が連結/非連結で表記を揺らしています。)追加位置は応答の並び順と同じ末尾にしたので、既知の列の順序は変わりません。
テスト
test_get_fin_summary_keeps_shareholders_equity_and_roeを追加しました。定数から4つを取り除くとKeyError: 'ShEq'で落ちることを確認済みです。uv run pytest57 passed /ruff check/ruff format --check/mypy src/すべて通ります。補足
uv.lockの1行は、0.2.0 への版上げ時に更新され忘れていたぶんです(uv syncで更新されます)。別途検討したいこと(本PRの範囲外)
今回の根本原因は「固定リストに無い列は黙って捨てる」実装で、同じ形が7エンドポイントにあります。今後 API が項目を追加するたび同じことが起きます。順序の契約を保ったまま未知の列を末尾に残す(
df[cols + [c for c in df.columns if c not in cols]])という手はありますが、全エンドポイントの応答形状に影響するので分けました。🤖 Generated with Claude Code