not completed but commiting anyway

Hi @jgarcia524, global isn't ncessary here. Also, it's a bit nit-picky and by no means will you be penalized for it, but, all of those Decimal calls must get pretty tiring to type after a while. You could have done them at around line 66 as:

    if rate is not None:
        rate = Decimal(rate)