use serde::{Deserialize, Serialize};
use crate::{
codecs::FiscalYearString,
query::FiscalPeriod,
types::{CurrencyCode, Date, StatementAmount, Ticker},
};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
#[serde(rename_all = "camelCase")]
pub struct FinancialRatios {
pub symbol: Ticker,
pub date: Date,
pub fiscal_year: FiscalYearString,
pub period: FiscalPeriod,
pub reported_currency: CurrencyCode,
pub gross_profit_margin: f64,
pub ebit_margin: f64,
pub ebitda_margin: f64,
pub operating_profit_margin: f64,
pub pretax_profit_margin: f64,
pub continuous_operations_profit_margin: f64,
pub net_profit_margin: f64,
pub bottom_line_profit_margin: f64,
pub receivables_turnover: f64,
pub payables_turnover: f64,
pub inventory_turnover: f64,
pub fixed_asset_turnover: f64,
pub asset_turnover: f64,
pub current_ratio: f64,
pub quick_ratio: f64,
pub solvency_ratio: f64,
pub cash_ratio: f64,
pub price_to_earnings_ratio: f64,
pub price_to_earnings_growth_ratio: f64,
pub forward_price_to_earnings_growth_ratio: f64,
pub price_to_earnings_diluted_ratio: f64,
pub price_to_earnings_diluted_growth_ratio: f64,
pub price_to_book_ratio: f64,
pub price_to_sales_ratio: f64,
pub price_to_free_cash_flow_ratio: f64,
pub price_to_operating_cash_flow_ratio: f64,
pub debt_to_assets_ratio: f64,
pub debt_to_equity_ratio: f64,
pub debt_to_capital_ratio: f64,
pub long_term_debt_to_capital_ratio: f64,
pub financial_leverage_ratio: f64,
pub working_capital_turnover_ratio: f64,
pub operating_cash_flow_ratio: f64,
pub operating_cash_flow_sales_ratio: f64,
pub free_cash_flow_operating_cash_flow_ratio: f64,
pub debt_service_coverage_ratio: f64,
pub interest_coverage_ratio: f64,
pub short_term_operating_cash_flow_coverage_ratio: f64,
pub operating_cash_flow_coverage_ratio: f64,
pub capital_expenditure_coverage_ratio: f64,
pub dividend_paid_and_capex_coverage_ratio: f64,
pub dividend_payout_ratio: f64,
pub dividend_yield: f64,
pub dividend_yield_percentage: f64,
pub revenue_per_share: f64,
pub net_income_per_share: f64,
pub interest_debt_per_share: f64,
pub cash_per_share: f64,
pub book_value_per_share: f64,
pub tangible_book_value_per_share: f64,
pub shareholders_equity_per_share: f64,
pub operating_cash_flow_per_share: f64,
pub capex_per_share: f64,
pub free_cash_flow_per_share: f64,
#[serde(rename = "netIncomePerEBT")]
pub net_income_per_ebt: f64,
pub ebt_per_ebit: f64,
pub price_to_fair_value: f64,
pub debt_to_market_cap: f64,
pub effective_tax_rate: f64,
pub enterprise_value_multiple: f64,
pub dividend_per_share: f64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct FinancialRatiosTtm {
pub symbol: Ticker,
#[serde(rename = "grossProfitMarginTTM")]
pub gross_profit_margin_ttm: f64,
#[serde(rename = "ebitMarginTTM")]
pub ebit_margin_ttm: f64,
#[serde(rename = "ebitdaMarginTTM")]
pub ebitda_margin_ttm: f64,
#[serde(rename = "operatingProfitMarginTTM")]
pub operating_profit_margin_ttm: f64,
#[serde(rename = "pretaxProfitMarginTTM")]
pub pretax_profit_margin_ttm: f64,
#[serde(rename = "continuousOperationsProfitMarginTTM")]
pub continuous_operations_profit_margin_ttm: f64,
#[serde(rename = "netProfitMarginTTM")]
pub net_profit_margin_ttm: f64,
#[serde(rename = "bottomLineProfitMarginTTM")]
pub bottom_line_profit_margin_ttm: f64,
#[serde(rename = "receivablesTurnoverTTM")]
pub receivables_turnover_ttm: f64,
#[serde(rename = "payablesTurnoverTTM")]
pub payables_turnover_ttm: f64,
#[serde(rename = "inventoryTurnoverTTM")]
pub inventory_turnover_ttm: f64,
#[serde(rename = "fixedAssetTurnoverTTM")]
pub fixed_asset_turnover_ttm: f64,
#[serde(rename = "assetTurnoverTTM")]
pub asset_turnover_ttm: f64,
#[serde(rename = "currentRatioTTM")]
pub current_ratio_ttm: f64,
#[serde(rename = "quickRatioTTM")]
pub quick_ratio_ttm: f64,
#[serde(rename = "solvencyRatioTTM")]
pub solvency_ratio_ttm: f64,
#[serde(rename = "cashRatioTTM")]
pub cash_ratio_ttm: f64,
#[serde(rename = "priceToEarningsRatioTTM")]
pub price_to_earnings_ratio_ttm: f64,
#[serde(rename = "priceToEarningsGrowthRatioTTM")]
pub price_to_earnings_growth_ratio_ttm: f64,
#[serde(rename = "forwardPriceToEarningsGrowthRatioTTM")]
pub forward_price_to_earnings_growth_ratio_ttm: f64,
#[serde(rename = "priceToEarningsDilutedRatioTTM")]
pub price_to_earnings_diluted_ratio_ttm: f64,
#[serde(rename = "priceToEarningsDilutedGrowthRatioTTM")]
pub price_to_earnings_diluted_growth_ratio_ttm: f64,
#[serde(rename = "priceToBookRatioTTM")]
pub price_to_book_ratio_ttm: f64,
#[serde(rename = "priceToSalesRatioTTM")]
pub price_to_sales_ratio_ttm: f64,
#[serde(rename = "priceToFreeCashFlowRatioTTM")]
pub price_to_free_cash_flow_ratio_ttm: f64,
#[serde(rename = "priceToOperatingCashFlowRatioTTM")]
pub price_to_operating_cash_flow_ratio_ttm: f64,
#[serde(rename = "debtToAssetsRatioTTM")]
pub debt_to_assets_ratio_ttm: f64,
#[serde(rename = "debtToEquityRatioTTM")]
pub debt_to_equity_ratio_ttm: f64,
#[serde(rename = "debtToCapitalRatioTTM")]
pub debt_to_capital_ratio_ttm: f64,
#[serde(rename = "longTermDebtToCapitalRatioTTM")]
pub long_term_debt_to_capital_ratio_ttm: f64,
#[serde(rename = "financialLeverageRatioTTM")]
pub financial_leverage_ratio_ttm: f64,
#[serde(rename = "workingCapitalTurnoverRatioTTM")]
pub working_capital_turnover_ratio_ttm: f64,
#[serde(rename = "operatingCashFlowRatioTTM")]
pub operating_cash_flow_ratio_ttm: f64,
#[serde(rename = "operatingCashFlowSalesRatioTTM")]
pub operating_cash_flow_sales_ratio_ttm: f64,
#[serde(rename = "freeCashFlowOperatingCashFlowRatioTTM")]
pub free_cash_flow_operating_cash_flow_ratio_ttm: f64,
#[serde(rename = "debtServiceCoverageRatioTTM")]
pub debt_service_coverage_ratio_ttm: f64,
#[serde(rename = "interestCoverageRatioTTM")]
pub interest_coverage_ratio_ttm: f64,
#[serde(rename = "shortTermOperatingCashFlowCoverageRatioTTM")]
pub short_term_operating_cash_flow_coverage_ratio_ttm: f64,
#[serde(rename = "operatingCashFlowCoverageRatioTTM")]
pub operating_cash_flow_coverage_ratio_ttm: f64,
#[serde(rename = "capitalExpenditureCoverageRatioTTM")]
pub capital_expenditure_coverage_ratio_ttm: f64,
#[serde(rename = "dividendPaidAndCapexCoverageRatioTTM")]
pub dividend_paid_and_capex_coverage_ratio_ttm: f64,
#[serde(rename = "dividendPayoutRatioTTM")]
pub dividend_payout_ratio_ttm: f64,
#[serde(rename = "dividendYieldTTM")]
pub dividend_yield_ttm: f64,
#[serde(rename = "enterpriseValueTTM")]
#[serde(serialize_with = "crate::codecs::integral_f64::serialize")]
pub enterprise_value_ttm: StatementAmount,
#[serde(rename = "revenuePerShareTTM")]
pub revenue_per_share_ttm: f64,
#[serde(rename = "netIncomePerShareTTM")]
pub net_income_per_share_ttm: f64,
#[serde(rename = "interestDebtPerShareTTM")]
pub interest_debt_per_share_ttm: f64,
#[serde(rename = "cashPerShareTTM")]
pub cash_per_share_ttm: f64,
#[serde(rename = "bookValuePerShareTTM")]
pub book_value_per_share_ttm: f64,
#[serde(rename = "tangibleBookValuePerShareTTM")]
pub tangible_book_value_per_share_ttm: f64,
#[serde(rename = "shareholdersEquityPerShareTTM")]
pub shareholders_equity_per_share_ttm: f64,
#[serde(rename = "operatingCashFlowPerShareTTM")]
pub operating_cash_flow_per_share_ttm: f64,
#[serde(rename = "capexPerShareTTM")]
pub capex_per_share_ttm: f64,
#[serde(rename = "freeCashFlowPerShareTTM")]
pub free_cash_flow_per_share_ttm: f64,
#[serde(rename = "netIncomePerEBTTTM")]
pub net_income_per_ebt_ttm: f64,
#[serde(rename = "ebtPerEbitTTM")]
pub ebt_per_ebit_ttm: f64,
#[serde(rename = "priceToFairValueTTM")]
pub price_to_fair_value_ttm: f64,
#[serde(rename = "debtToMarketCapTTM")]
pub debt_to_market_cap_ttm: f64,
#[serde(rename = "effectiveTaxRateTTM")]
pub effective_tax_rate_ttm: f64,
#[serde(rename = "enterpriseValueMultipleTTM")]
pub enterprise_value_multiple_ttm: f64,
#[serde(rename = "dividendPerShareTTM")]
pub dividend_per_share_ttm: f64,
}