1use crate::market_data::{
2 ConversionRatesSnapshot, InstrumentIdentity, QuoteSnapshot, TechnicalSummary,
3};
4use time::OffsetDateTime;
5
6#[derive(Debug, Clone, PartialEq)]
7pub struct FundamentalsSnapshot {
8 pub instrument: InstrumentIdentity,
9 pub market_cap: Option<f64>,
10 pub price_earnings_ttm: Option<f64>,
11 pub price_to_book_fq: Option<f64>,
12 pub price_to_sales_current: Option<f64>,
13 pub total_revenue_ttm: Option<f64>,
14 pub net_income_ttm: Option<f64>,
15 pub eps_ttm: Option<f64>,
16 pub dividend_yield_recent: Option<f64>,
17 pub return_on_equity_ttm: Option<f64>,
18 pub return_on_assets_ttm: Option<f64>,
19 pub debt_to_equity_mrq: Option<f64>,
20 pub current_ratio_mrq: Option<f64>,
21 pub free_cash_flow_ttm: Option<f64>,
22 pub ebitda_ttm: Option<f64>,
23}
24
25#[derive(Debug, Clone, PartialEq, Default)]
26pub struct AnalystRecommendations {
27 pub buy: Option<u32>,
28 pub sell: Option<u32>,
29 pub hold: Option<u32>,
30 pub outperform: Option<u32>,
31 pub underperform: Option<u32>,
32 pub total: Option<u32>,
33 pub rating: Option<f64>,
34}
35
36#[derive(Debug, Clone, PartialEq, Default)]
37pub struct AnalystPriceTargets {
38 pub average: Option<f64>,
39 pub high: Option<f64>,
40 pub low: Option<f64>,
41 pub median: Option<f64>,
42 pub one_year: Option<f64>,
43 pub one_year_delta_percent: Option<f64>,
44}
45
46#[derive(Debug, Clone, PartialEq, Default)]
47pub struct AnalystForecasts {
48 pub revenue_current_quarter: Option<f64>,
49 pub revenue_next_quarter: Option<f64>,
50 pub revenue_next_half_year: Option<f64>,
51 pub revenue_next_fiscal_year: Option<f64>,
52 pub eps_current_quarter: Option<f64>,
53 pub eps_next_quarter: Option<f64>,
54 pub eps_next_half_year: Option<f64>,
55 pub eps_next_fiscal_year: Option<f64>,
56 pub eps_surprise_recent_quarter: Option<f64>,
57 pub eps_surprise_percent_recent_quarter: Option<f64>,
58 pub forward_non_gaap_price_earnings: Option<f64>,
59 pub forward_price_earnings_fiscal_year: Option<f64>,
60}
61
62#[derive(Debug, Clone, PartialEq, Default)]
63pub struct EarningsCalendar {
64 pub recent_release_at: Option<OffsetDateTime>,
65 pub next_release_at: Option<OffsetDateTime>,
66 pub recent_calendar_date: Option<OffsetDateTime>,
67 pub next_calendar_date: Option<OffsetDateTime>,
68 pub current_quarter_trading_date: Option<OffsetDateTime>,
69 pub next_quarter_trading_date: Option<OffsetDateTime>,
70 pub fiscal_year_trading_date: Option<OffsetDateTime>,
71 pub recent_release_time_code: Option<u32>,
72 pub next_release_time_code: Option<u32>,
73 pub current_quarter_publication_type_code: Option<u32>,
74 pub next_quarter_publication_type_code: Option<u32>,
75}
76
77#[derive(Debug, Clone, PartialEq, Default)]
78pub struct AnalystFxRates {
79 pub current: Option<ConversionRatesSnapshot>,
80 pub time_series: Option<ConversionRatesSnapshot>,
81 pub revenue_current_quarter: Option<ConversionRatesSnapshot>,
82 pub revenue_next_half_year: Option<ConversionRatesSnapshot>,
83 pub revenue_next_fiscal_year: Option<ConversionRatesSnapshot>,
84 pub trailing_twelve_months: Option<ConversionRatesSnapshot>,
85 pub cash_flow: Option<ConversionRatesSnapshot>,
86 pub price_target: Option<ConversionRatesSnapshot>,
87 pub market_cap: Option<ConversionRatesSnapshot>,
88 pub earnings_current_quarter: Option<ConversionRatesSnapshot>,
89 pub earnings_next_quarter: Option<ConversionRatesSnapshot>,
90 pub dividend_recent: Option<ConversionRatesSnapshot>,
91 pub dividend_upcoming: Option<ConversionRatesSnapshot>,
92}
93
94#[derive(Debug, Clone, PartialEq)]
95pub struct AnalystSummary {
96 pub instrument: InstrumentIdentity,
97 pub close: Option<f64>,
98 pub recommendations: AnalystRecommendations,
99 pub price_targets: AnalystPriceTargets,
100 pub forecasts: AnalystForecasts,
101 pub earnings: EarningsCalendar,
102 pub fx_rates: AnalystFxRates,
103}
104
105#[derive(Debug, Clone, PartialEq)]
106pub struct EquityOverview {
107 pub quote: QuoteSnapshot,
108 pub fundamentals: FundamentalsSnapshot,
109 pub analyst: AnalystSummary,
110 pub technicals: TechnicalSummary,
111}