feat: add financial-data-collector skill for US equity data collection

New skill that collects real financial data for any US publicly traded company
via yfinance. Outputs structured JSON with market data, historical financials,
WACC inputs, and analyst estimates. Includes 9-check validation script and
reference docs for yfinance pitfalls (NaN years, field aliases, FCF mismatch).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
daymade
2026-03-02 19:40:52 +08:00
parent 11b7539f10
commit 2896870061
11 changed files with 1045 additions and 9 deletions

View File

@@ -0,0 +1,84 @@
# Output Schema — financial-data-collector
All monetary values in millions USD unless noted. Null means "not available from source."
## Top-Level Fields
| Field | Type | Description |
|-------|------|-------------|
| `ticker` | string | Stock ticker symbol (e.g., "META") |
| `company_name` | string | Full company name from yfinance |
| `data_date` | string | ISO date when data was collected |
| `currency` | string | Always "USD" for US equities |
| `unit` | string | Always "millions_usd" |
| `data_sources` | object | Attribution for each data section |
## market_data
| Field | Type | Source | Notes |
|-------|------|--------|-------|
| `current_price` | float | `yf.Ticker.info["currentPrice"]` | USD per share |
| `shares_outstanding_millions` | float | `info["sharesOutstanding"] / 1e6` | Diluted if available |
| `market_cap_millions` | float | `info["marketCap"] / 1e6` | |
| `beta_5y_monthly` | float\|null | `info["beta"]` | May be null for recent IPOs |
## income_statement (keyed by year string)
| Field | Type | Source Row Index |
|-------|------|-----------------|
| `revenue` | float\|null | "Total Revenue" or "Revenue" |
| `ebit` | float\|null | "Operating Income" or "EBIT" |
| `ebitda` | float\|null | "EBITDA" (if available) |
| `tax_expense` | float\|null | "Tax Provision" or "Income Tax Expense" |
| `net_income` | float\|null | "Net Income" |
| `sbc` | float\|null | "Stock Based Compensation" (in cash_flow) |
| `_source` | string | Data provenance |
## cash_flow (keyed by year string)
| Field | Type | Source Row Index | Sign |
|-------|------|-----------------|------|
| `operating_cash_flow` | float\|null | "Operating Cash Flow" | Positive = inflow |
| `capex` | float\|null | "Capital Expenditure" | **Negative = outflow** |
| `depreciation_amortization` | float\|null | "Depreciation And Amortization" | Positive |
| `free_cash_flow` | float\|null | "Free Cash Flow" | yfinance definition (see metadata) |
| `change_in_nwc` | float\|null | "Change In Working Capital" | Negative = use of cash |
| `_source` | string | | |
## balance_sheet (latest year only by default)
| Field | Type | Source Row Index |
|-------|------|-----------------|
| `total_debt` | float\|null | "Total Debt" or "Long Term Debt" + "Short Long Term Debt" |
| `cash_and_equivalents` | float\|null | "Cash And Cash Equivalents" + "Other Short Term Investments" |
| `net_debt` | float\|null | Computed: total_debt - cash_and_equivalents |
| `current_assets` | float\|null | "Current Assets" |
| `current_liabilities` | float\|null | "Current Liabilities" |
| `total_assets` | float\|null | "Total Assets" |
| `total_equity` | float\|null | "Stockholders Equity" |
| `_source` | string | |
## wacc_inputs
| Field | Type | Source |
|-------|------|--------|
| `risk_free_rate` | float\|null | yfinance ^TNX (10Y Treasury) |
| `beta` | float\|null | Same as market_data.beta_5y_monthly |
| `credit_rating` | string\|null | Not available from yfinance — null unless user provides |
## analyst_estimates
| Field | Type | Source |
|-------|------|--------|
| `revenue_next_fy` | float\|null | `yf.Ticker.analyst_price_targets` or `revenue_estimate` |
| `revenue_fy_after` | float\|null | Same |
| `eps_next_fy` | float\|null | `yf.Ticker.analyst_price_targets` or `eps_trend` |
## metadata
| Field | Value |
|-------|-------|
| `_capex_convention` | "negative = cash outflow (yfinance convention)" |
| `_fcf_note` | "yfinance FCF = OperatingCF + CapEx. Does NOT deduct SBC." |
| `_nan_years` | List of years where yfinance returned NaN |
| `_collection_duration_seconds` | Time taken to collect all data |