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}