//! 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;