//! Portfolio-vs-brokerage reconciliation: pure compute lifted out of
//! the `audit` command so it is unit-testable and reusable (finrev
//! consumes it too). The ANSI renderers stay in `commands/audit/`.
//!
//!   - `common`   broker-agnostic comparison engine (compareAccounts,
//!                cdLotAllowance, findAbsentAccounts, ...)
//!   - `schwab`   Schwab positions CSV + summary reconcilers
//!   - `fidelity` Fidelity positions CSV reconciler

pub const common = @import("reconcile/common.zig");
pub const schwab = @import("reconcile/schwab.zig");
pub const fidelity = @import("reconcile/fidelity.zig");

// ── Flat convenience re-exports ──────────────────────────────
pub const value_tolerance = common.value_tolerance;
pub const cash_tolerance = common.cash_tolerance;
pub const AccountValueExpectation = common.AccountValueExpectation;
pub const SymbolComparison = common.SymbolComparison;
pub const AccountComparison = common.AccountComparison;
pub const AbsentAccount = common.AbsentAccount;
pub const cdLotAllowance = common.cdLotAllowance;
pub const accountValueExpectation = common.accountValueExpectation;
pub const compareAccounts = common.compareAccounts;
pub const hasAccountDiscrepancies = common.hasAccountDiscrepancies;
pub const presentNumbers = common.presentNumbers;
pub const findAbsentAccounts = common.findAbsentAccounts;
pub const RatioSuggestion = common.RatioSuggestion;
pub const ratioSuggestions = common.ratioSuggestions;

pub const SchwabAccountComparison = schwab.SchwabAccountComparison;
pub const compareSchwabSummary = schwab.compareSchwabSummary;
pub const reconcileCsv = schwab.reconcileCsv;
pub const reconcileSummary = schwab.reconcileSummary;
pub const hasSchwabDiscrepancies = schwab.hasSchwabDiscrepancies;
pub const summaryRatioSuggestions = schwab.summaryRatioSuggestions;

pub const reconcileFidelity = fidelity.reconcile;
