Skip to main content

finance_query/models/fundamentals/
company_profile.rs

1//! Company profile model.
2//!
3//! Served through the [`Capability::FUNDAMENTALS`](crate::Capability::FUNDAMENTALS)
4//! route through Yahoo, Alpha Vantage, or FMP. Scoped to identity
5//! and classification fields — valuation ratios and earnings figures live in
6//! [`KeyMetricsTtm`](crate::KeyMetricsTtm), [`RatingConsensus`](crate::RatingConsensus),
7//! and [`EarningsSurprise`](crate::EarningsSurprise) instead of being duplicated here.
8
9use serde::{Deserialize, Serialize};
10
11/// A company's identity and classification profile.
12#[derive(Debug, Clone, Default, Serialize, Deserialize)]
13#[non_exhaustive]
14pub struct CompanyProfile {
15    /// Ticker symbol.
16    pub symbol: Option<String>,
17    /// Company name.
18    pub name: Option<String>,
19    /// Business description.
20    pub description: Option<String>,
21    /// Asset type as reported by the provider (e.g. `"Common Stock"`).
22    pub asset_type: Option<String>,
23    /// Listing exchange.
24    pub exchange: Option<String>,
25    /// Trading currency.
26    pub currency: Option<String>,
27    /// Country of incorporation or primary listing.
28    pub country: Option<String>,
29    /// GICS sector.
30    pub sector: Option<String>,
31    /// GICS industry.
32    pub industry: Option<String>,
33    /// Market capitalization.
34    pub market_capitalization: Option<f64>,
35    /// Provider-reported ISIN, preserving its exact text.
36    #[serde(default, skip_serializing_if = "Option::is_none")]
37    pub isin: Option<String>,
38    /// Provider-reported CUSIP, when supplied by this provider.
39    #[serde(default, skip_serializing_if = "Option::is_none")]
40    pub cusip: Option<String>,
41    /// Provider-reported current trading status.
42    #[serde(default, skip_serializing_if = "Option::is_none")]
43    pub active: Option<bool>,
44    /// Whether the provider classifies this instrument as an ETF.
45    #[serde(default, skip_serializing_if = "Option::is_none")]
46    pub is_etf: Option<bool>,
47    /// Whether the provider classifies this instrument as an ADR.
48    #[serde(default, skip_serializing_if = "Option::is_none")]
49    pub is_adr: Option<bool>,
50    /// Whether the provider classifies this instrument as a fund.
51    #[serde(default, skip_serializing_if = "Option::is_none")]
52    pub is_fund: Option<bool>,
53    /// SEC company identifier, preserving leading zeros.
54    #[serde(default, skip_serializing_if = "Option::is_none")]
55    pub cik: Option<String>,
56    /// Provider-reported IPO date, in YYYY-MM-DD format.
57    #[serde(default, skip_serializing_if = "Option::is_none")]
58    pub ipo_date: Option<String>,
59    /// Provider that supplied this profile.
60    #[serde(default, skip_serializing_if = "Option::is_none")]
61    pub provider_id: Option<crate::Provider>,
62}