1use crate::symbology::TradableProduct;
2use chrono::{DateTime, NaiveDate, Utc};
3use rust_decimal::Decimal;
4use schemars::JsonSchema;
5use serde::{Deserialize, Serialize};
6use uuid::Uuid;
7
8pub mod protocol;
9
10#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
11#[cfg_attr(feature = "graphql", derive(juniper::GraphQLObject))]
12pub struct Statement {
13 pub statement_uuid: Uuid,
14 pub account: String,
15 pub statement_type: String,
16 pub clearing_firm: String,
17 pub statement_date: NaiveDate,
18 pub filename: String,
19}
20
21#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
22#[cfg_attr(feature = "graphql", derive(juniper::GraphQLObject))]
23pub struct Deposit {
24 pub account: String,
25 pub amount: Decimal,
26 pub timestamp: DateTime<Utc>,
27 pub description: String,
28}
29
30#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
31#[cfg_attr(feature = "graphql", derive(juniper::GraphQLObject))]
32pub struct Withdrawal {
33 pub account: String,
34 pub amount: Decimal,
35 pub timestamp: DateTime<Utc>,
36 pub description: String,
37}
38
39#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
40#[cfg_attr(feature = "graphql", derive(juniper::GraphQLObject))]
41pub struct RqdAccountStatistics {
42 pub account_number: String,
43 pub available_cash_balance: Option<Decimal>,
44 pub account_type: Option<String>,
45 pub overnight_buying_power: Option<Decimal>,
46 pub cash_available_for_withdrawal: Option<Decimal>,
47 pub cumulative_day_trade_pnl: Option<Decimal>,
48 pub is_day_trader: Option<String>,
49 pub day_trading_buying_power: Option<Decimal>,
50 pub day_trading_margin_call_amount: Option<Decimal>,
51 pub day_trading_buying_power_high_water_mark: Option<Decimal>,
52 pub start_of_day_day_trading_buying_power: Option<Decimal>,
53 pub day_trading_buying_power_maintenance_margin_multiplier: Option<Decimal>,
54 pub day_trading_minimum_equity_margin_call_amount: Option<Decimal>,
55 pub day_trading_house_minimum_equity_margin_call_amount: Option<Decimal>,
56 pub total_equity: Option<Decimal>,
57 pub house_margin_requirement_adjustment_factor: Option<Decimal>,
58 pub margin_call_amount: Option<Decimal>,
59 pub maintenance_margin_requirement: Option<Decimal>,
60 pub excess_sma_amount: Option<Decimal>,
61 pub reg_t_margin_call_amount: Option<Decimal>,
62 pub reg_t_initial_margin_requirement: Option<Decimal>,
63 pub house_initial_margin_requirement_adjustment_factor: Option<Decimal>,
64 pub house_margin_call_amount: Option<Decimal>,
65 pub house_margin_requirement: Option<Decimal>,
66 pub trade_date_total_long_market_value: Option<Decimal>,
67 pub market_value_adjustment_factor: Option<Decimal>,
68 pub marginable_equity: Option<Decimal>,
69 pub trade_date_option_long_market_value: Option<Decimal>,
70 pub number_open_day_trading_margin_calls: Option<Decimal>,
71 pub start_of_day_day_trading_buying_power_margin_call_amount: Option<Decimal>,
72 pub start_of_day_maintenance_margin_call_amount: Option<Decimal>,
73 pub start_of_day_reg_t_margin_call_amount: Option<Decimal>,
74 pub start_of_day_house_margin_call_amount: Option<Decimal>,
75 pub usable_sma_balance: Option<Decimal>,
76 pub option_only_maintenance_margin_requirement: Option<Decimal>,
77 pub option_trade_date_short_market_value: Option<Decimal>,
78 pub reg_t_maintenance_margin_requirement_adjustment_factor: Option<String>,
79 pub strategy_based_relief_adjustment_factor: Option<Decimal>,
80 pub settlement_date_cash_balance: Option<Decimal>,
81 pub settlement_date_long_market_value: Option<Decimal>,
82 pub settlement_date_option_long_market_value: Option<Decimal>,
83 pub settlement_date_option_short_market_value: Option<Decimal>,
84 pub settlement_date_short_market_value: Option<Decimal>,
85 pub overall_current_sma_balance: Option<Decimal>,
86 pub trade_date_total_short_market_value: Option<Decimal>,
87 pub as_of_date: Option<String>,
88 pub trade_date_cash_balance: Option<Decimal>,
89}
90
91#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
92#[cfg_attr(feature = "graphql", derive(juniper::GraphQLObject))]
93pub struct OptionsTransaction {
94 pub timestamp: DateTime<Utc>,
95 pub transaction_type: String,
96 pub clearing_firm_account: String,
97 pub tradable_product: TradableProduct,
98 pub quantity: Decimal,
99 pub price: Option<Decimal>,
100}
101
102#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
103#[cfg_attr(feature = "graphql", derive(juniper::GraphQLObject))]
104pub struct MarginCall {
105 pub account_number: String,
106 pub call_type: String,
107 pub description: String,
108 pub call_amount: Decimal,
109 pub satisfied_amount: Decimal,
110 pub status: String,
111 pub remarks: String,
112 pub due_date: Option<DateTime<Utc>>,
113 pub create_date: Option<DateTime<Utc>>,
114 pub correspondent_id: String,
115 pub office: String,
116 pub system_date: Option<String>,
117}