diff --git a/api/intelligence.py b/api/intelligence.py
index fa093f9..908d3d7 100644
--- a/api/intelligence.py
+++ b/api/intelligence.py
@@ -263,6 +263,8 @@ def intelligence_status():
"bank_health": True, # never 503s -- returns data: null for a ticker with no FDIC-mapped lead subsidiary
"agriculture": True, # never 503s -- returns data: null for a ticker with no USDA commodity linkage
"real_estate": True, # never 503s -- returns data: null for a ticker with no housing-market linkage
+ "supply_chain": True, # never 503s -- returns data: null for a ticker with no freight/logistics linkage
+ "consumer_demand": True, # never 503s -- returns data: null for a ticker with no consumer-spending linkage
"webhooks": True, # management endpoints, never 503 -- Pro-tier gated (403 for free keys), see services/webhook_service.py
})
@@ -278,6 +280,14 @@ def intelligence_status():
# changes programmatically) and rendered on intelligence-api.html#changelog.
# ---------------------------------------------------------------------------
INTELLIGENCE_CHANGELOG = [
+ {
+ "date": "2026-08-31",
+ "changes": [
+ {"type": "added", "text": "GET /v1/supply-chain/{ticker} -- FRED inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, and manufacturing employment for freight/logistics-linked tickers (carriers, railroads, transportation ETFs). Second of 3 cross-industry expansion candidates."},
+ {"type": "added", "text": "GET /v1/consumer-demand/{ticker} -- FRED retail sales, personal consumption expenditures, and durable goods consumption for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs). Third of 3 cross-industry expansion candidates -- not Google Trends search-interest data, see that endpoint's docs for why."},
+ {"type": "fixed", "text": "News search (/v1/events, /v1/sentiment) now resolves bare ticker queries to their real company name before searching headlines, and widens the GDELT lookback window -- fixes zero-results for well-known large-cap tickers whose headlines almost never contain the bare ticker symbol."},
+ ],
+ },
{
"date": "2026-08-30",
"changes": [
@@ -1221,6 +1231,60 @@ def intelligence_real_estate(
return _envelope(data=result, meta={"ticker": ticker})
+@router.get("/intelligence/v1/supply-chain/{ticker}")
+def intelligence_supply_chain(
+ response: Response,
+ ticker: str,
+ x_api_key: str = Header(None, alias="X-API-Key"),
+):
+ """FRED US manufacturing/supply-chain context for `ticker` (services/
+ supply_chain_service.py -- inventory/sales ratio, manufacturing new
+ orders, durable goods orders, industrial production, manufacturing
+ employment). Only populated for tickers with a real freight/logistics
+ linkage (carriers, railroads, transportation ETFs -- see that
+ module's _TICKER_TO_NAME) -- any other ticker returns `data: null`,
+ never a fabricated reading for an unrelated symbol."""
+ auth = _require_api_key(x_api_key)
+ _check_and_spend_quota(x_api_key, auth["tier"], "supply_chain", response, ticker=ticker.upper())
+
+ from services.supply_chain_service import get_supply_chain_context_for_ticker
+
+ ticker = ticker.upper().strip()
+ result = get_supply_chain_context_for_ticker(ticker)
+ if not result:
+ return _envelope(data=None, error=f"No supply-chain linkage for {ticker}")
+
+ return _envelope(data=result, meta={"ticker": ticker})
+
+
+@router.get("/intelligence/v1/consumer-demand/{ticker}")
+def intelligence_consumer_demand(
+ response: Response,
+ ticker: str,
+ x_api_key: str = Header(None, alias="X-API-Key"),
+):
+ """FRED US consumer-spending context for `ticker` (services/
+ consumer_demand_service.py -- retail sales, personal consumption
+ expenditures, durable goods consumption). NOT Google Trends search-
+ interest data -- see that module's docstring for why (no officially
+ licensed, commercial-use-safe search-trends API exists). Only
+ populated for tickers with a real consumer-spending linkage (large
+ retailers, e-commerce, consumer-discretionary ETFs -- see that
+ module's _TICKER_TO_NAME) -- any other ticker returns `data: null`,
+ never a fabricated reading for an unrelated symbol."""
+ auth = _require_api_key(x_api_key)
+ _check_and_spend_quota(x_api_key, auth["tier"], "consumer_demand", response, ticker=ticker.upper())
+
+ from services.consumer_demand_service import get_consumer_demand_context_for_ticker
+
+ ticker = ticker.upper().strip()
+ result = get_consumer_demand_context_for_ticker(ticker)
+ if not result:
+ return _envelope(data=None, error=f"No consumer-spending linkage for {ticker}")
+
+ return _envelope(data=result, meta={"ticker": ticker})
+
+
@router.get("/intelligence/v1/exchange/{ticker}")
def intelligence_exchange(
response: Response,
@@ -1435,6 +1499,8 @@ def intelligence_webhooks_unsubscribe(
"/intelligence/v1/bank-health/{ticker}",
"/intelligence/v1/agriculture/{ticker}",
"/intelligence/v1/real-estate/{ticker}",
+ "/intelligence/v1/supply-chain/{ticker}",
+ "/intelligence/v1/consumer-demand/{ticker}",
"/intelligence/v1/webhooks/subscribe",
"/intelligence/v1/webhooks",
"/intelligence/v1/webhooks/{webhook_id}",
diff --git a/backend/main.py b/backend/main.py
index b902b72..6f8d4ea 100644
--- a/backend/main.py
+++ b/backend/main.py
@@ -542,6 +542,48 @@ def _run_real_estate_refresh_job():
)
+# 2026-08-31 -- same pre-warm reasoning as _run_real_estate_refresh_job
+# above, for services/supply_chain_service.py's 5 series.
+def _run_supply_chain_refresh_job():
+ try:
+ from services import supply_chain_service
+ if supply_chain_service.is_available():
+ for meta in supply_chain_service._SERIES.values():
+ supply_chain_service._fetch_series(meta["series_id"], n_obs=1)
+ except Exception:
+ pass
+
+_push_scheduler.add_job(
+ _run_supply_chain_refresh_job,
+ "cron",
+ hour=3,
+ minute=20,
+ id="supply_chain_refresh",
+ replace_existing=True,
+)
+
+
+# 2026-08-31 -- same pre-warm reasoning as _run_real_estate_refresh_job
+# above, for services/consumer_demand_service.py's 4 series.
+def _run_consumer_demand_refresh_job():
+ try:
+ from services import consumer_demand_service
+ if consumer_demand_service.is_available():
+ for meta in consumer_demand_service._SERIES.values():
+ consumer_demand_service._fetch_series(meta["series_id"], n_obs=1)
+ except Exception:
+ pass
+
+_push_scheduler.add_job(
+ _run_consumer_demand_refresh_job,
+ "cron",
+ hour=3,
+ minute=25,
+ id="consumer_demand_refresh",
+ replace_existing=True,
+)
+
+
def _run_cftc_cot_refresh_job():
try:
from services.cftc_cot_service import get_snapshot
diff --git a/intelligence-api.html b/intelligence-api.html
index b24f629..ad5c8a7 100644
--- a/intelligence-api.html
+++ b/intelligence-api.html
@@ -179,7 +179,7 @@
EARLY ACCESS
Real market intelligence, structured for developers
-
Seven JSON endpoints — market events, FinBERT sentiment, multi-agent AI debate, structured intelligence feed, technical/market-structure analysis, Monte Carlo stress testing, and regime-aware signals — built on the same real data and anti-fabrication principles behind XFINLAB's own product. Free tier keys are issued instantly and automatically; Pro/Enterprise are still set up personally.
+
20+ JSON endpoints — market events, FinBERT sentiment, multi-agent AI debate, company network intelligence, fundamentals, and cross-industry macro context (energy, agriculture, real estate, supply chain, consumer demand) — built on the same real data and anti-fabrication principles behind XFINLAB's own product. Free tier keys are issued instantly and automatically; Pro/Enterprise are still set up personally.
Real market intelligence, structured for developer
+
+
+
GET /v1/events
@@ -710,6 +713,71 @@
Real market intelligence, structured for developer
A subscription auto-deactivates after 5 consecutive delivery failures (check GET /webhooks for fail_count) -- re-subscribe once your endpoint is back up. Delivery is best-effort and fire-and-forget: a slow/dead receiver never blocks or retries indefinitely.
+
+
+
+
+ 2x
+
+ GET /v1/real-estate/{ticker}
+
Real Estate
+
FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).
data.indicatorsobject -- dynamically keyed (mortgage_rate_30y_pct, home_price_index, housing_starts_thousands, existing_home_sales_thousands), each value or null
+
label, unit, datestring
+
valuenumber
+
meta.tickerstring
+
+
Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.
+
+
+
+
+
+ 2x
+
+ GET /v1/supply-chain/{ticker}
+
Supply Chain
+
FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).
data.indicatorsobject -- dynamically keyed (inventory_sales_ratio, manufacturing_new_orders_musd, durable_goods_orders_musd, industrial_production_manufacturing_index, manufacturing_employment_thousands), each value or null
+
label, unit, datestring
+
valuenumber
+
meta.tickerstring
+
+
Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.
+
+
+
+
+
+ 2x
+
+ GET /v1/consumer-demand/{ticker}
+
Consumer Demand
+
FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).
data.indicatorsobject -- dynamically keyed (retail_sales_total_musd, retail_sales_goods_only_musd, personal_consumption_expenditures_busd, durable_goods_consumption_busd), each value or null
+
label, unit, datestring
+
valuenumber
+
meta.tickerstring
+
+
Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.
+
+
@@ -1062,6 +1130,11 @@
Real market intelligence, structured for developer
'vix-term-structure':{ method: 'GET', needsTicker: false, needsAmount: false, path: function() { return '/intelligence/v1/vix-term-structure'; } },
'bank-health': { method: 'GET', needsTicker: true, needsAmount: false, path: function(tk) { return '/intelligence/v1/bank-health/' + encodeURIComponent(tk); } },
'agriculture': { method: 'GET', needsTicker: true, needsAmount: false, path: function(tk) { return '/intelligence/v1/agriculture/' + encodeURIComponent(tk); } },
+ // 2026-08-30/31 cross-industry expansion -- all three are simple
+ // GET-by-ticker, same shape as energy/agriculture above.
+ 'real-estate': { method: 'GET', needsTicker: true, needsAmount: false, path: function(tk) { return '/intelligence/v1/real-estate/' + encodeURIComponent(tk); } },
+ 'supply-chain': { method: 'GET', needsTicker: true, needsAmount: false, path: function(tk) { return '/intelligence/v1/supply-chain/' + encodeURIComponent(tk); } },
+ 'consumer-demand': { method: 'GET', needsTicker: true, needsAmount: false, path: function(tk) { return '/intelligence/v1/consumer-demand/' + encodeURIComponent(tk); } },
};
function tryUpdateFields() {
diff --git a/sdk/js/xfinlab.js b/sdk/js/xfinlab.js
index 6a821e0..211bfc4 100644
--- a/sdk/js/xfinlab.js
+++ b/sdk/js/xfinlab.js
@@ -219,6 +219,20 @@
return this._get('/intelligence/v1/agriculture/' + encodeURIComponent(ticker));
};
+ // 2026-08-30/31: cross-industry expansion -- real estate, supply
+ // chain, consumer demand. Same shape as agriculture()/energy() above.
+ XfinlabClient.prototype.realEstate = function (ticker) {
+ return this._get('/intelligence/v1/real-estate/' + encodeURIComponent(ticker));
+ };
+
+ XfinlabClient.prototype.supplyChain = function (ticker) {
+ return this._get('/intelligence/v1/supply-chain/' + encodeURIComponent(ticker));
+ };
+
+ XfinlabClient.prototype.consumerDemand = function (ticker) {
+ return this._get('/intelligence/v1/consumer-demand/' + encodeURIComponent(ticker));
+ };
+
// 2026-08-28: Pro-tier webhooks (push instead of polling). See
// services/webhook_service.py's VALID_EVENT_TYPES for the exact
// eventType values ('vix_regime_change' market-wide, 'new_13d_filing'
diff --git a/sdk/python/xfinlab_intelligence/__init__.py b/sdk/python/xfinlab_intelligence/__init__.py
index fa63bad..8a51c9d 100644
--- a/sdk/python/xfinlab_intelligence/__init__.py
+++ b/sdk/python/xfinlab_intelligence/__init__.py
@@ -248,6 +248,30 @@ def agriculture(self, ticker: str) -> dict:
populated for CORN/WEAT/SOYB."""
return self._get(f"/intelligence/v1/agriculture/{ticker}")
+ # 2026-08-30/31: cross-industry expansion -- real estate, supply
+ # chain, consumer demand. Same shape as agriculture()/energy() above.
+ def real_estate(self, ticker: str) -> dict:
+ """FRED US housing-market context (30-year mortgage rate,
+ Case-Shiller home price index, housing starts, existing home
+ sales) -- only populated for homebuilders, REITs, a mortgage
+ originator, and housing-sector ETFs."""
+ return self._get(f"/intelligence/v1/real-estate/{ticker}")
+
+ def supply_chain(self, ticker: str) -> dict:
+ """FRED US manufacturing/supply-chain context (inventory/sales
+ ratio, manufacturing new orders, durable goods orders, industrial
+ production, manufacturing employment) -- only populated for
+ freight carriers, railroads, and transportation ETFs."""
+ return self._get(f"/intelligence/v1/supply-chain/{ticker}")
+
+ def consumer_demand(self, ticker: str) -> dict:
+ """FRED US consumer-spending context (retail sales, personal
+ consumption expenditures, durable goods consumption) -- only
+ populated for large retailers, e-commerce, and consumer-
+ discretionary ETFs. Not Google Trends data -- see the endpoint
+ docs for why."""
+ return self._get(f"/intelligence/v1/consumer-demand/{ticker}")
+
# 2026-08-28: Pro-tier webhooks (push instead of polling). See
# services/webhook_service.py's VALID_EVENT_TYPES for the exact
# event_type values ("vix_regime_change" market-wide, "new_13d_filing"
diff --git a/services/consumer_demand_service.py b/services/consumer_demand_service.py
new file mode 100644
index 0000000..4beaae1
--- /dev/null
+++ b/services/consumer_demand_service.py
@@ -0,0 +1,246 @@
+"""
+Consumer Demand Intelligence -- 2026-08-31, Company Network cross-industry
+expansion #3 (AJ: "由1開始順住做" -- real estate was #1, supply chain was
+#2, this closes out the originally-scoped "search trends/consumer"
+candidate).
+
+Scoping note, stated honestly up front: this is NOT literal Google
+Trends search-volume data. Google Trends has no official, stable,
+commercially-licensed API -- the only ways to pull it programmatically
+are unofficial scrapers (e.g. pytrends) hitting an undocumented Google
+endpoint with no ToS grant for commercial redistribution. That fails
+this codebase's already-established bar for what gets built against
+(see services/license_registry.py's rejections of bbc_rss pending
+verification, reddit_unauthenticated, stocktwits, and oilpriceapi_
+baltic_dry_index -- the consistent rule here is "don't build a paid
+feature on a data path that isn't verified-legal to redistribute").
+Instead this module covers the same underlying question ("is consumer
+demand strengthening or weakening") with real, government-published,
+public-domain aggregate spending/retail-sales data -- a strictly more
+reliable signal than search-interest proxies anyway, at zero legal risk.
+
+Same shape as services/real_estate_service.py and services/
+supply_chain_service.py -- national consumer-spending indicators paired
+with the specific tickers they're actually relevant to (large retailers,
+e-commerce, consumer-discretionary ETFs), never presented as a reading
+for an unrelated symbol.
+
+Series chosen (all verified live on FRED, U.S. Census Bureau / BEA
+source, "Public Domain: Citation Requested" tag -- deliberately
+excluding University of Michigan: Consumer Sentiment (UMCSENT), which
+IS on FRED but is marked with a third-party copyright notice requiring
+the data owner's permission before non-personal use per FRED's own
+terms; see services/license_registry.py's "fred" entry for that rule):
+- RSAFS: Advance Retail Sales, Retail Trade and Food Services -- the
+ headline monthly retail-spending figure.
+- RSXFS: Advance Retail Sales, Retail Trade (excludes food services) --
+ the goods-only slice, closer to what a retailer/e-commerce ticker
+ actually sells.
+- PCE: Personal Consumption Expenditures -- broader than retail alone,
+ covers services spending too.
+- PCEDG: Personal Consumption Expenditures, Durable Goods -- the most
+ cyclical/discretionary slice, most sensitive to demand swings.
+
+Zero new API integration, zero new signup: reuses FRED (services/
+fred_macro_service.py already established the dormant-until-FRED_API_KEY
+convention and the attribution text this module copies verbatim).
+Keeps its own independent _fetch_series()/cache/persistence, per this
+codebase's per-collector-module-independence convention (see services/
+sec_form4_service.py's module docstring for why) -- NOT a shared import
+from fred_macro_service.py, real_estate_service.py, or supply_chain_
+service.py.
+
+Honesty contract, same as the rest of this family: FRED's "." (missing
+observation) is dropped, never coerced to 0 or interpolated. A ticker not
+in _TICKER_TO_NAME below gets `None` from get_consumer_demand_context_
+for_ticker(), not a fabricated "no data" reading dressed up as a real one.
+"""
+import logging
+import os
+import sqlite3
+from datetime import datetime, timezone
+from typing import Dict, Optional
+
+from services.outbound_http import get_with_backoff
+from services.data_source_registry import (
+ register_source, is_source_enabled, record_run_start,
+ record_run_success, record_run_error,
+)
+
+logger = logging.getLogger(__name__)
+
+FRED_API_KEY_ENV = "FRED_API_KEY"
+FRED_BASE_URL = "https://api.stlouisfed.org/fred/series/observations"
+ATTRIBUTION = "This product uses the FRED® API but is not endorsed or certified by the Federal Reserve Bank of St. Louis."
+
+SOURCE_KEY = "consumer_demand_fred"
+register_source(SOURCE_KEY, "FRED US Consumer Spending/Retail", "consumer_demand")
+
+_DB_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "xfinlab.db")
+
+
+def _init_persistence_table():
+ conn = sqlite3.connect(_DB_PATH)
+ conn.execute("""
+ CREATE TABLE IF NOT EXISTS consumer_demand_observations (
+ series_id TEXT NOT NULL,
+ date TEXT NOT NULL,
+ value REAL NOT NULL,
+ fetched_at TEXT DEFAULT (datetime('now')),
+ PRIMARY KEY (series_id, date)
+ )
+ """)
+ conn.commit()
+ conn.close()
+
+
+_init_persistence_table()
+
+
+def _persist_observations(series_id: str, observations: list):
+ if not observations:
+ return
+ try:
+ conn = sqlite3.connect(_DB_PATH)
+ conn.executemany(
+ """
+ INSERT INTO consumer_demand_observations (series_id, date, value, fetched_at)
+ VALUES (?, ?, ?, datetime('now'))
+ ON CONFLICT(series_id, date) DO UPDATE SET value=excluded.value, fetched_at=excluded.fetched_at
+ """,
+ [(series_id, o["date"], o["value"]) for o in observations],
+ )
+ conn.commit()
+ conn.close()
+ except Exception as e:
+ logger.info("consumer_demand_service: failed to persist %s: %s", series_id, e)
+
+
+def _load_persisted(series_id: str, n_obs: int) -> Optional[list]:
+ try:
+ conn = sqlite3.connect(_DB_PATH)
+ rows = conn.execute(
+ "SELECT date, value FROM consumer_demand_observations WHERE series_id=? ORDER BY date DESC LIMIT ?",
+ (series_id, n_obs),
+ ).fetchall()
+ conn.close()
+ if not rows:
+ return None
+ return [{"date": d, "value": v} for d, v in reversed(rows)]
+ except Exception:
+ return None
+
+
+_SERIES = {
+ "retail_sales_total_musd": {"series_id": "RSAFS", "label": "Advance Retail Sales: Retail Trade and Food Services", "unit": "$ millions"},
+ "retail_sales_goods_only_musd": {"series_id": "RSXFS", "label": "Advance Retail Sales: Retail Trade", "unit": "$ millions"},
+ "personal_consumption_expenditures_busd": {"series_id": "PCE", "label": "Personal Consumption Expenditures", "unit": "$ billions, SAAR"},
+ "durable_goods_consumption_busd": {"series_id": "PCEDG", "label": "Personal Consumption Expenditures: Durable Goods", "unit": "$ billions, SAAR"},
+}
+
+_CACHE_TTL_SECONDS = 6 * 3600
+_cache: Dict[str, Dict] = {}
+
+
+def is_available() -> bool:
+ return bool(os.getenv(FRED_API_KEY_ENV))
+
+
+def _fetch_series(series_id: str, n_obs: int = 1) -> Optional[list]:
+ """Returns up to n_obs most recent observations, oldest-first. Same
+ in-memory-cache -> persisted-table -> None fallback chain as
+ fred_macro_service.py's _fetch_series; kept as an independent copy
+ here per this codebase's per-collector-module-independence
+ convention."""
+ now = datetime.now(timezone.utc).timestamp()
+ cached = _cache.get(series_id)
+ if cached and (now - cached["fetched_at"]) < _CACHE_TTL_SECONDS:
+ return cached["observations"]
+
+ if not is_source_enabled(SOURCE_KEY):
+ return (cached["observations"] if cached else None) or _load_persisted(series_id, n_obs)
+
+ params = {
+ "series_id": series_id,
+ "api_key": os.getenv(FRED_API_KEY_ENV),
+ "file_type": "json",
+ "sort_order": "desc",
+ "limit": n_obs,
+ }
+ record_run_start(SOURCE_KEY)
+ try:
+ res = get_with_backoff(FRED_BASE_URL, params=params, timeout=10)
+ if res.status_code != 200:
+ record_run_error(SOURCE_KEY, f"{series_id}: HTTP {res.status_code}")
+ return (cached["observations"] if cached else None) or _load_persisted(series_id, n_obs)
+ payload = res.json()
+ except Exception as e:
+ logger.info("consumer_demand_service: failed to fetch %s: %s", series_id, e)
+ record_run_error(SOURCE_KEY, f"{series_id}: {e}")
+ return (cached["observations"] if cached else None) or _load_persisted(series_id, n_obs)
+
+ rows = payload.get("observations") or []
+ observations = []
+ for row in reversed(rows):
+ raw_value = row.get("value")
+ if raw_value in (None, ".", ""):
+ continue
+ try:
+ observations.append({"date": row.get("date"), "value": round(float(raw_value), 3)})
+ except (TypeError, ValueError):
+ continue
+
+ if observations:
+ _cache[series_id] = {"fetched_at": now, "observations": observations}
+ _persist_observations(series_id, observations)
+ record_run_success(SOURCE_KEY)
+ return observations
+ record_run_error(SOURCE_KEY, f"{series_id}: fetch returned zero usable observations")
+ return (cached["observations"] if cached else None) or _load_persisted(series_id, n_obs)
+
+
+# Large retailers, e-commerce, and 2 consumer-discretionary ETFs --
+# tickers whose revenue is directly, mechanically exposed to aggregate
+# US consumer spending. Deliberately NOT every ticker with "consumer"
+# anywhere in its business description -- same conservative-linkage
+# reasoning as eia_energy_service.py's USO/UNG-only scope.
+_TICKER_TO_NAME = {
+ "WMT": "Walmart", "TGT": "Target", "COST": "Costco Wholesale",
+ "HD": "The Home Depot", "LOW": "Lowe's Companies", "AMZN": "Amazon.com",
+ "BBY": "Best Buy", "TJX": "The TJX Companies", "ROST": "Ross Stores",
+ "XRT": "SPDR S&P Retail ETF", "XLY": "Consumer Discretionary Select Sector SPDR Fund",
+}
+
+
+def get_consumer_demand_context_for_ticker(ticker: str) -> Optional[Dict]:
+ """Returns {"matched_ticker": "WMT", "matched_name": "Walmart",
+ "attribution": "...", "indicators": {series_key: {...} or None}}
+ or None if this ticker has no consumer-spending linkage at all
+ (never a fabricated reading for an unrelated symbol)."""
+ ticker = (ticker or "").upper().strip()
+ name = _TICKER_TO_NAME.get(ticker)
+ if not name:
+ return None
+ if not is_available():
+ return {"matched_ticker": ticker, "matched_name": name, "available": False,
+ "message": f"{FRED_API_KEY_ENV} 未設定,消費數據暫時未開放。"}
+
+ indicators: Dict[str, Optional[Dict]] = {}
+ for key, meta in _SERIES.items():
+ obs = _fetch_series(meta["series_id"], n_obs=1)
+ indicators[key] = (
+ {"label": meta["label"], "unit": meta["unit"], "date": obs[-1]["date"], "value": obs[-1]["value"]}
+ if obs else None
+ )
+
+ return {
+ "matched_ticker": ticker,
+ "matched_name": name,
+ "attribution": ATTRIBUTION,
+ "indicators": indicators,
+ }
+
+
+if __name__ == "__main__":
+ import json
+ print(json.dumps(get_consumer_demand_context_for_ticker("WMT"), indent=2, ensure_ascii=False))
diff --git a/services/i18n.py b/services/i18n.py
index 76a3a42..295644a 100644
--- a/services/i18n.py
+++ b/services/i18n.py
@@ -79,7 +79,7 @@
"ia_nav_back": "← Back to XFINLAB",
"ia_badge": "EARLY ACCESS",
"ia_hero_title": "Real market intelligence, structured for developers",
- "ia_hero_p": "Seven JSON endpoints — market events, FinBERT sentiment, multi-agent AI debate, structured intelligence feed, technical/market-structure analysis, Monte Carlo stress testing, and regime-aware signals — built on the same real data and anti-fabrication principles behind XFINLAB's own product. Free tier keys are issued instantly and automatically; Pro/Enterprise are still set up personally.",
+ "ia_hero_p": "20+ JSON endpoints — market events, FinBERT sentiment, multi-agent AI debate, company network intelligence, fundamentals, and cross-industry macro context (energy, agriculture, real estate, supply chain, consumer demand) — built on the same real data and anti-fabrication principles behind XFINLAB's own product. Free tier keys are issued instantly and automatically; Pro/Enterprise are still set up personally.",
"ia_cta_quickstart": "Quickstart →",
"ia_cta_access": "Request Early Access",
"ia_cta_endpoints": "See the endpoints",
@@ -135,6 +135,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -1913,6 +1922,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -3690,6 +3708,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -5467,6 +5494,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -7244,6 +7280,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -9021,6 +9066,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -10798,6 +10852,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -12575,6 +12638,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -14352,6 +14424,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -16129,6 +16210,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -17906,6 +17996,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -19683,6 +19782,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -21404,7 +21512,7 @@
"ia_nav_back": "← 返回 XFINLAB",
"ia_badge": "搶先體驗",
"ia_hero_title": "真實市場情報,為開發者結構化",
- "ia_hero_p": "七個 JSON 端點——市場事件、FinBERT 情緒分析、多代理人 AI 辯論、結構化情報摘要、技術/市場結構分析、蒙地卡羅壓力測試,以及考慮市場機制的訊號——建立在與 XFINLAB 自家產品相同的真實數據與反捏造原則之上。免費方案金鑰即時自動發放;Pro/Enterprise 仍由專人設定。",
+ "ia_hero_p": "20+ 個 JSON 端點——市場事件、FinBERT 情緒分析、多代理人 AI 辯論、企業關係網絡情報、基本面數據,以及跨行業宏觀背景資訊(能源、農業、地產、供應鏈、消費需求)——建立在與 XFINLAB 自家產品相同的真實數據與反捏造原則之上。免費方案金鑰即時自動發放;Pro/Enterprise 仍由專人設定。",
"ia_cta_quickstart": "快速開始 →",
"ia_cta_access": " 申請搶先體驗",
"ia_cta_endpoints": "查看端點",
@@ -21460,6 +21568,15 @@
"ia_ep15_desc": "主要銀行控股公司主要子銀行的 FDIC 監理報告健康指標(ROA、ROE、資產、股東權益、淨利潤)。目前涵蓋 JPM、BAC、WFC、C、USB、PNC、TFC。",
"ia_ep16_name": "農產品價格",
"ia_ep16_desc": "USDA 玉米、小麥、大豆的農民實收價格數據——與 CORN/WEAT/SOYB 配對,方式如同 /v1/energy 與 USO/UNG 的配對。",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "缺少某個概念欄位代表該公司從未在 10-K 申報過那個 XBRL 標籤——絕不會用捏造的零值或 null 混入真實數據中。",
"ia_schema_note_vix": "逆價差(近月波動率高於中期)歷史上常與市場壓力事件同時出現——這是市場狀態判讀,不是價格預測。",
"ia_schema_note_bank_health": "反映受監管子銀行本身的監理報告,並非控股公司股票的合併 GAAP 財務數據——如需後者請使用 /v1/fundamentals。",
@@ -23182,7 +23299,7 @@
"ia_nav_back": "← 返回 XFINLAB",
"ia_badge": "搶先體驗",
"ia_hero_title": "真實市場情報,為開發者度身結構化",
- "ia_hero_p": "七個 JSON 端點——市場事件、FinBERT 情緒分析、多代理人 AI 辯論、結構化情報摘要、技術/市場結構分析、蒙地卡羅壓力測試,同埋考慮市場機制嘅訊號——建立喺同 XFINLAB 自家產品一樣嘅真實數據同反捏造原則之上。免費方案key即時自動發放;Pro/Enterprise 就仍然由專人設定。",
+ "ia_hero_p": "20+ 個 JSON 端點——市場事件、FinBERT 情緒分析、多代理人 AI 辯論、企業關係網絡情報、基本面數據,同埋跨行業宏觀背景資訊(能源、農業、地產、供應鏈、消費需求)——建立喺同 XFINLAB 自家產品一樣嘅真實數據同反捏造原則之上。免費方案key即時自動發放;Pro/Enterprise 就仍然由專人設定。",
"ia_cta_quickstart": "快速開始 →",
"ia_cta_access": " 申請搶先體驗",
"ia_cta_endpoints": "睇下啲端點",
@@ -23238,6 +23355,15 @@
"ia_ep15_desc": "主要銀行控股公司旗下主要子銀行嘅FDIC監管報告健康指標(ROA、ROE、資產、股東權益、淨利潤)。而家涵蓋JPM、BAC、WFC、C、USB、PNC、TFC。",
"ia_ep16_name": "農產品價格",
"ia_ep16_desc": "USDA粟米、小麥、大豆嘅農民實收價格數據——同CORN/WEAT/SOYB配對,方式同/v1/energy同USO/UNG配對一樣。",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "缺少某個概念欄位即係嗰間公司從未喺10-K申報過嗰個XBRL標籤——絕對唔會用捏造嘅零值或null混入真實數據入面。",
"ia_schema_note_vix": "倒掛(近月波動率高過中期)歷史上經常同市場壓力事件一齊出現——呢個係市場狀態判讀,唔係價格預測。",
"ia_schema_note_bank_health": "反映受監管子銀行本身嘅監理報告,唔係控股公司股票嘅合併GAAP財務數據——如果要後者請用/v1/fundamentals。",
@@ -24960,7 +25086,7 @@
"ia_nav_back": "← 返回 XFINLAB",
"ia_badge": "抢先体验",
"ia_hero_title": "真实市场情报,为开发者结构化",
- "ia_hero_p": "七个 JSON 端点——市场事件、FinBERT 情绪分析、多代理人 AI 辩论、结构化情报摘要、技术/市场结构分析、蒙特卡洛压力测试,以及考虑市场机制的信号——建立在与 XFINLAB 自家产品相同的真实数据与反捏造原则之上。免费方案密钥即时自动发放;Pro/Enterprise 仍由专人设置。",
+ "ia_hero_p": "20+ 个 JSON 端点——市场事件、FinBERT 情绪分析、多代理人 AI 辩论、企业关系网络情报、基本面数据,以及跨行业宏观背景信息(能源、农业、房地产、供应链、消费需求)——建立在与 XFINLAB 自家产品相同的真实数据与反捏造原则之上。免费方案密钥即时自动发放;Pro/Enterprise 仍由专人设置。",
"ia_cta_quickstart": "快速开始 →",
"ia_cta_access": " 申请抢先体验",
"ia_cta_endpoints": "查看端点",
@@ -25016,6 +25142,15 @@
"ia_ep15_desc": "主要银行控股公司旗下主要子银行的FDIC监管报告健康指标(ROA、ROE、资产、股东权益、净利润)。目前覆盖JPM、BAC、WFC、C、USB、PNC、TFC。",
"ia_ep16_name": "农产品价格",
"ia_ep16_desc": "USDA玉米、小麦、大豆的农民实收价格数据——与CORN/WEAT/SOYB配对,方式与/v1/energy与USO/UNG配对相同。",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "缺少某个概念字段代表该公司从未在10-K中申报过那个XBRL标签——绝不会用捏造的零值或null混入真实数据中。",
"ia_schema_note_vix": "倒挂(近月波动率高于中期)历史上常与市场压力事件同时出现——这是市场状态判读,不是价格预测。",
"ia_schema_note_bank_health": "反映受监管子银行本身的监管报告,并非控股公司股票的合并GAAP财务数据——如需后者请使用/v1/fundamentals。",
@@ -26794,6 +26929,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -28571,6 +28715,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -30348,6 +30501,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -32125,6 +32287,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -33902,6 +34073,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -35679,6 +35859,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -37456,6 +37645,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -39233,6 +39431,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -41010,6 +41217,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -42787,6 +43003,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -44564,6 +44789,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -46341,6 +46575,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -48118,6 +48361,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -49895,6 +50147,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -51672,6 +51933,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -53449,6 +53719,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -55226,6 +55505,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -57003,6 +57291,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -58780,6 +59077,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -60557,6 +60863,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -62334,6 +62649,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -64111,6 +64435,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -65888,6 +66221,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -67665,6 +68007,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -69442,6 +69793,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -71219,6 +71579,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -72996,6 +73365,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -74773,6 +75151,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -76550,6 +76937,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -78327,6 +78723,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -80104,6 +80509,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
@@ -81881,6 +82295,15 @@
"ia_ep15_desc": "FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.",
"ia_ep16_name": "Agriculture Prices",
"ia_ep16_desc": "USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.",
+ "ia_ep18_name": "Real Estate",
+ "ia_ep18_desc": "FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).",
+ "ia_ep19_name": "Supply Chain",
+ "ia_ep19_desc": "FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).",
+ "ia_ep20_name": "Consumer Demand",
+ "ia_ep20_desc": "FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).",
+ "ia_schema_note_real_estate": "Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.",
+ "ia_schema_note_supply_chain": "Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.",
+ "ia_schema_note_consumer_demand": "Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.",
"ia_schema_note_fundamentals": "A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.",
"ia_schema_note_vix": "Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.",
"ia_schema_note_bank_health": "Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.",
diff --git a/services/intelligence_quota_service.py b/services/intelligence_quota_service.py
index c1a780d..a8837f3 100644
--- a/services/intelligence_quota_service.py
+++ b/services/intelligence_quota_service.py
@@ -173,6 +173,12 @@
# same cost shape as agriculture/energy -- 4 small FRED series fetches
# against an explicit ticker map, 6h server-side cached. Priced the same.
"real_estate": 2,
+ # same shape/cost as real_estate above -- 5 small FRED series fetches
+ # against an explicit ticker map, 6h server-side cached.
+ "supply_chain": 2,
+ # same shape/cost as real_estate above -- 4 small FRED series fetches
+ # against an explicit ticker map, 6h server-side cached.
+ "consumer_demand": 2,
}
diff --git a/services/supply_chain_service.py b/services/supply_chain_service.py
new file mode 100644
index 0000000..3dc5850
--- /dev/null
+++ b/services/supply_chain_service.py
@@ -0,0 +1,239 @@
+"""
+Supply Chain Intelligence -- 2026-08-31, Company Network cross-industry
+expansion #2 (AJ: "由1開始順住做" -- real estate was #1, this is #2,
+search-trends/consumer is #3).
+
+What this is: same shape as services/real_estate_service.py and
+services/eia_energy_service.py -- national supply-chain/manufacturing-
+throughput indicators paired with the specific tickers they're actually
+relevant to (freight/logistics carriers, railroads, transportation
+ETFs), never presented as a reading for an unrelated symbol.
+
+Series chosen (all verified live on FRED, U.S. Census Bureau source,
+public-domain-citation-requested, no proprietary/subscription data):
+- ISRATIO: Total Business Inventories/Sales Ratio -- a rising ratio
+ means goods are piling up relative to sales (demand-side slack or
+ supply-side overproduction); a falling ratio into multi-year lows can
+ signal restocking pressure / tight availability.
+- AMTMNO: Manufacturers' New Orders, Total Manufacturing -- forward-
+ looking demand signal for the whole production chain.
+- DGORDER: Manufacturers' New Orders, Durable Goods -- same signal,
+ durable-goods slice (more volatile, more cyclical).
+- IPMAN: Industrial Production, Manufacturing (NAICS) -- actual output,
+ not just orders.
+- MANEMP: All Employees, Manufacturing -- headcount-side capacity signal.
+
+None of these are a literal "supply chain pressure index" (the NY Fed's
+GSCPI is published as a standalone spreadsheet, not a FRED series with a
+stable API-fetchable series_id, so it's deliberately excluded here --
+same "don't fabricate a data path that doesn't reliably exist" standard
+applied throughout this codebase) but together they're a real, honestly-
+sourced read on manufacturing throughput and inventory tightness, which
+is what actually moves freight/logistics-ticker fundamentals.
+
+Zero new API integration, zero new signup: reuses FRED (services/
+fred_macro_service.py already established the dormant-until-FRED_API_KEY
+convention and the attribution text this module copies verbatim).
+Keeps its own independent _fetch_series()/cache/persistence, per this
+codebase's per-collector-module-independence convention (see services/
+sec_form4_service.py's module docstring for why) -- NOT a shared import
+from fred_macro_service.py or real_estate_service.py.
+
+Honesty contract, same as fred_macro_service.py: FRED's "." (missing
+observation) is dropped, never coerced to 0 or interpolated. A ticker not
+in _TICKER_TO_NAME below gets `None` from get_supply_chain_context_for_
+ticker(), not a fabricated "no data" reading dressed up as a real one.
+"""
+import logging
+import os
+import sqlite3
+from datetime import datetime, timezone
+from typing import Dict, Optional
+
+from services.outbound_http import get_with_backoff
+from services.data_source_registry import (
+ register_source, is_source_enabled, record_run_start,
+ record_run_success, record_run_error,
+)
+
+logger = logging.getLogger(__name__)
+
+FRED_API_KEY_ENV = "FRED_API_KEY"
+FRED_BASE_URL = "https://api.stlouisfed.org/fred/series/observations"
+ATTRIBUTION = "This product uses the FRED® API but is not endorsed or certified by the Federal Reserve Bank of St. Louis."
+
+SOURCE_KEY = "supply_chain_fred"
+register_source(SOURCE_KEY, "FRED US Manufacturing/Supply Chain", "supply_chain")
+
+_DB_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "xfinlab.db")
+
+
+def _init_persistence_table():
+ conn = sqlite3.connect(_DB_PATH)
+ conn.execute("""
+ CREATE TABLE IF NOT EXISTS supply_chain_observations (
+ series_id TEXT NOT NULL,
+ date TEXT NOT NULL,
+ value REAL NOT NULL,
+ fetched_at TEXT DEFAULT (datetime('now')),
+ PRIMARY KEY (series_id, date)
+ )
+ """)
+ conn.commit()
+ conn.close()
+
+
+_init_persistence_table()
+
+
+def _persist_observations(series_id: str, observations: list):
+ if not observations:
+ return
+ try:
+ conn = sqlite3.connect(_DB_PATH)
+ conn.executemany(
+ """
+ INSERT INTO supply_chain_observations (series_id, date, value, fetched_at)
+ VALUES (?, ?, ?, datetime('now'))
+ ON CONFLICT(series_id, date) DO UPDATE SET value=excluded.value, fetched_at=excluded.fetched_at
+ """,
+ [(series_id, o["date"], o["value"]) for o in observations],
+ )
+ conn.commit()
+ conn.close()
+ except Exception as e:
+ logger.info("supply_chain_service: failed to persist %s: %s", series_id, e)
+
+
+def _load_persisted(series_id: str, n_obs: int) -> Optional[list]:
+ try:
+ conn = sqlite3.connect(_DB_PATH)
+ rows = conn.execute(
+ "SELECT date, value FROM supply_chain_observations WHERE series_id=? ORDER BY date DESC LIMIT ?",
+ (series_id, n_obs),
+ ).fetchall()
+ conn.close()
+ if not rows:
+ return None
+ return [{"date": d, "value": v} for d, v in reversed(rows)]
+ except Exception:
+ return None
+
+
+_SERIES = {
+ "inventory_sales_ratio": {"series_id": "ISRATIO", "label": "Total Business Inventories/Sales Ratio", "unit": "ratio"},
+ "manufacturing_new_orders_musd": {"series_id": "AMTMNO", "label": "Manufacturers' New Orders: Total Manufacturing", "unit": "$ millions"},
+ "durable_goods_orders_musd": {"series_id": "DGORDER", "label": "Manufacturers' New Orders: Durable Goods", "unit": "$ millions"},
+ "industrial_production_manufacturing_index": {"series_id": "IPMAN", "label": "Industrial Production: Manufacturing (NAICS)", "unit": "index (2017=100)"},
+ "manufacturing_employment_thousands": {"series_id": "MANEMP", "label": "All Employees: Manufacturing", "unit": "thousand persons"},
+}
+
+_CACHE_TTL_SECONDS = 6 * 3600
+_cache: Dict[str, Dict] = {}
+
+
+def is_available() -> bool:
+ return bool(os.getenv(FRED_API_KEY_ENV))
+
+
+def _fetch_series(series_id: str, n_obs: int = 1) -> Optional[list]:
+ """Returns up to n_obs most recent observations, oldest-first. Same
+ in-memory-cache -> persisted-table -> None fallback chain as
+ fred_macro_service.py's _fetch_series; kept as an independent copy
+ here per this codebase's per-collector-module-independence
+ convention."""
+ now = datetime.now(timezone.utc).timestamp()
+ cached = _cache.get(series_id)
+ if cached and (now - cached["fetched_at"]) < _CACHE_TTL_SECONDS:
+ return cached["observations"]
+
+ if not is_source_enabled(SOURCE_KEY):
+ return (cached["observations"] if cached else None) or _load_persisted(series_id, n_obs)
+
+ params = {
+ "series_id": series_id,
+ "api_key": os.getenv(FRED_API_KEY_ENV),
+ "file_type": "json",
+ "sort_order": "desc",
+ "limit": n_obs,
+ }
+ record_run_start(SOURCE_KEY)
+ try:
+ res = get_with_backoff(FRED_BASE_URL, params=params, timeout=10)
+ if res.status_code != 200:
+ record_run_error(SOURCE_KEY, f"{series_id}: HTTP {res.status_code}")
+ return (cached["observations"] if cached else None) or _load_persisted(series_id, n_obs)
+ payload = res.json()
+ except Exception as e:
+ logger.info("supply_chain_service: failed to fetch %s: %s", series_id, e)
+ record_run_error(SOURCE_KEY, f"{series_id}: {e}")
+ return (cached["observations"] if cached else None) or _load_persisted(series_id, n_obs)
+
+ rows = payload.get("observations") or []
+ observations = []
+ for row in reversed(rows):
+ raw_value = row.get("value")
+ if raw_value in (None, ".", ""):
+ continue
+ try:
+ observations.append({"date": row.get("date"), "value": round(float(raw_value), 3)})
+ except (TypeError, ValueError):
+ continue
+
+ if observations:
+ _cache[series_id] = {"fetched_at": now, "observations": observations}
+ _persist_observations(series_id, observations)
+ record_run_success(SOURCE_KEY)
+ return observations
+ record_run_error(SOURCE_KEY, f"{series_id}: fetch returned zero usable observations")
+ return (cached["observations"] if cached else None) or _load_persisted(series_id, n_obs)
+
+
+# Freight carriers, railroads, logistics operators, and 2 transportation
+# ETFs -- tickers whose fundamentals are directly, mechanically exposed
+# to manufacturing throughput and inventory cycles (they physically move
+# the goods these indicators measure). Deliberately NOT every ticker
+# with "supply chain" in its business description -- same conservative-
+# linkage reasoning as eia_energy_service.py's USO/UNG-only scope.
+_TICKER_TO_NAME = {
+ "FDX": "FedEx", "UPS": "United Parcel Service", "XPO": "XPO Inc",
+ "JBHT": "J.B. Hunt Transport Services", "CHRW": "C.H. Robinson Worldwide",
+ "ODFL": "Old Dominion Freight Line", "GXO": "GXO Logistics",
+ "EXPD": "Expeditors International of Washington",
+ "CSX": "CSX Corporation", "UNP": "Union Pacific Corporation", "NSC": "Norfolk Southern Corporation",
+ "IYT": "iShares Transportation Average ETF", "XTN": "SPDR S&P Transportation ETF",
+}
+
+
+def get_supply_chain_context_for_ticker(ticker: str) -> Optional[Dict]:
+ """Returns {"matched_ticker": "FDX", "matched_name": "FedEx",
+ "attribution": "...", "indicators": {series_key: {...} or None}}
+ or None if this ticker has no supply-chain/freight linkage at all
+ (never a fabricated reading for an unrelated symbol)."""
+ ticker = (ticker or "").upper().strip()
+ name = _TICKER_TO_NAME.get(ticker)
+ if not name:
+ return None
+ if not is_available():
+ return {"matched_ticker": ticker, "matched_name": name, "available": False,
+ "message": f"{FRED_API_KEY_ENV} 未設定,供應鏈數據暫時未開放。"}
+
+ indicators: Dict[str, Optional[Dict]] = {}
+ for key, meta in _SERIES.items():
+ obs = _fetch_series(meta["series_id"], n_obs=1)
+ indicators[key] = (
+ {"label": meta["label"], "unit": meta["unit"], "date": obs[-1]["date"], "value": obs[-1]["value"]}
+ if obs else None
+ )
+
+ return {
+ "matched_ticker": ticker,
+ "matched_name": name,
+ "attribution": ATTRIBUTION,
+ "indicators": indicators,
+ }
+
+
+if __name__ == "__main__":
+ import json
+ print(json.dumps(get_supply_chain_context_for_ticker("FDX"), indent=2, ensure_ascii=False))