private void PreReconciliationValidation(LedgerBook ledgerBook, DateTime reconciliationDate, StatementModel statement)
        {
            var messages = new StringBuilder();

            if (!ledgerBook.Validate(messages))
            {
                throw new InvalidOperationException("Ledger book is currently in an invalid state. Cannot add new entries.\n" + messages);
            }

            if (statement == null)
            {
                return;
            }

            var startDate = ReconciliationBuilder.CalculateDateForReconcile(ledgerBook, reconciliationDate);

            ValidateDates(ledgerBook, startDate, reconciliationDate, statement);

            ValidateAgainstUncategorisedTransactions(startDate, reconciliationDate, statement);

            ValidateAgainstOrphanedAutoMatchingTransactions(ledgerBook, statement);

            ValidateAgainstMissingTransactions(reconciliationDate, statement);
        }