All notable changes to ExReconcile will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
[0.2.0] - 2026-05-09
Added
allow_splits: trueoption onExReconcile.reconcile/3enables many-to-one matching after the standard 1:1 pass. A single transaction on one side can now be matched against a group of two or more transactions on the other side whose amounts sum to it (withinamount_tolerance). Results are stored inresult.splitsasExReconcile.Result.split_match()tuples and are excluded fromunmatched_left/unmatched_right.ExReconcile.Result.split_match/0type —{Transaction.t(), [Transaction.t()]}for a left-anchor split and{[Transaction.t()], Transaction.t()}for a right-anchor split.splitsfield on%ExReconcile.Result{}(defaults to[]).splitskey inExReconcile.Result.summary/1;total_leftandtotal_rightcounts now include transactions covered by split groups.Splitsline in theExReconcile.format/2text report header and a== Splits ==section listing each group with its[1:N]or[N:1]ratio.
[0.1.0] - 2026-05-07
Added
ExReconcile.Transactionstruct withnew/1andlabel/1helpers.ExReconcile.Configwith validation formatch_on,amount_tolerance,date_tolerance, anddescription_matchoptions.ExReconcile.reconcile/3- greedy bipartite matching engine with configurable field-level tolerances.ExReconcile.Resultwithsummary/1andclean?/1helpers.ExReconcile.format/2- human-readable text diff report.- Full ExUnit test suite.