public void Transferir(Entidades.ContaCorrente contaOrigem, Entidades.ContaCorrente contaDestino, double valor) { var dataAtual = DateTime.UtcNow; var saldo = _saldoRepositorio.Consulta(contaOrigem, dataAtual).Result; try { Validar(saldo, valor); } catch (Exception) { throw; } var lancContaOrigem = Fabrica.Transferencia(dataAtual, contaOrigem, contaDestino, valor, true); var lancContaDestino = Fabrica.Credito(dataAtual, contaDestino, valor, $"Recebimento de {contaOrigem}"); RegistroLancamento registro; try { registro = _lancamentoRepositorio.Registrar(lancContaOrigem).Result; } catch (Exception ex) { throw new Exception("Falhar ao registrar transferência.", ex); } try { _lancamentoRepositorio.Registrar(lancContaDestino, registro).Start(); } catch (Exception ex) { _lancamentoRepositorio.Cancelar(registro); throw new Exception("Falhar ao registrar transferência para conta destino.", ex); } }