use nautilus_core::correctness::CorrectnessResult;
use nautilus_model::{
instruments::{Instrument, InstrumentAny},
types::{Price, fixed::FIXED_PRECISION},
};
use rust_decimal::Decimal;
mod ids;
mod orders;
mod positions;
mod types;
#[cfg(test)]
mod proptests;
#[cfg(test)]
mod tests;
pub use ids::{
create_inferred_reconciliation_trade_id, create_position_reconciliation_venue_order_id,
inferred_reconciliation_trade_ids, is_inferred_reconciliation_trade_id_format,
};
pub use orders::{
create_incremental_inferred_fill, create_inferred_fill_for_qty, create_reconciliation_rejected,
create_reconciliation_triggered, generate_external_order_status_events,
generate_external_order_status_events_with_commission, generate_reconciliation_order_events,
generate_reconciliation_order_pre_fill_events, generate_reconciliation_order_snapshot_events,
generate_reconciliation_order_snapshot_events_with_commission,
incremental_inferred_fill_price_and_liquidity, inferred_fill_price_and_liquidity,
reconcile_fill_report, reconcile_order_report, reconcile_order_report_with_commission,
should_reconciliation_update,
};
pub use positions::{
calculate_reconciliation_price, check_position_reconciliation,
fill_precedes_snapshot_reconciled_position, position_prices_match,
process_mass_status_for_reconciliation,
process_mass_status_for_reconciliation_without_synthetic_reports,
};
pub use types::ReconciliationResult;
pub const RECONCILIATION_ORDER_TAG: &str = "RECONCILIATION";
fn reconciliation_price(value: Decimal, instrument: &InstrumentAny) -> CorrectnessResult<Price> {
let precision = instrument
.price_precision()
.max(value.normalize().scale().min(u32::from(FIXED_PRECISION)) as u8);
Price::from_decimal_dp(value, precision)
}