Hola, estuve explorando tu repositorio y en la clase Withdrawal tienes un método transaction() el cual realiza algunas validaciones para poder verificar la transacción realizada. Mi recomendación aqui en este método en lugar de tener muchos condicionales se cree tantas clases como procesos de verificación se tienen para de esta manera en el método transaction() solo llame a un método execute() el cual va por cada clase de proceso de verificación para validar la transacción y si en algun momento no se valida retorna algo dependiendo de la clase que se encuentra y saber con exactitud donde no se valida la transaccion. A esto se lo conoce como patrón de diseño Chain of Responsibility y esto a su vez te permitira cumplir el principio SOLID de Single Responsibility Adjunto un diagrama de clases para que mi recomendación sea más entendible

Hola, estuve explorando tu repositorio y en la clase Withdrawal tienes un método transaction() el cual realiza algunas validaciones para poder verificar la transacción realizada. Mi recomendación aqui en este método en lugar de tener muchos condicionales se cree tantas clases como procesos de verificación se tienen para de esta manera en el método transaction() solo llame a un método execute() el cual va por cada clase de proceso de verificación para validar la transacción y si en algun momento no se valida retorna algo dependiendo de la clase que se encuentra y saber con exactitud donde no se valida la transaccion. A esto se lo conoce como patrón de diseño Chain of Responsibility y esto a su vez te permitira cumplir el principio SOLID de Single Responsibility Adjunto un diagrama de clases para que mi recomendación sea más entendible
