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); }