{-# LANGUAGE NamedFieldPuns #-} module Hcompta.Format.Ledger.Balance where import Hcompta.Model (Transaction) import qualified Hcompta.Calc.Balance as Balance import qualified Hcompta.Format.Ledger.Journal as Journal import Hcompta.Format.Ledger.Journal (Journal(..)) import qualified Hcompta.Lib.Foldable as Lib.Foldable -- * The 'Balance.Equilibre' type -- | Return the first 'Transaction' (if any) which does not respect 'Balance.is_equilibrable' -- with the path of 'Journal's leading to that 'Transaction'. equilibre :: Journal -> Maybe ((Transaction, Balance.Equilibre), [Journal]) equilibre = Journal.find (\Journal{Journal.transactions} -> Lib.Foldable.find (Lib.Foldable.find (\tr -> do let bal = Balance.transaction tr Balance.nil let eq = Balance.equilibre bal if Balance.is_equilibrable eq then Nothing else Just (tr, eq) ) ) transactions )