Ваши предложения я рассмотрю несколько позже
Учтите ещё, что клиенту предлагает взять кредит с суммой ноль, т.к.
my $credit_amt = $balance * -1;
Чтобы хоть как-то работало, пришлось сделать тупо
my $credit_amt = $amt_max;
Короче, костыли на костылях и костылями погоняют.
Более правильно наверное, когда услуга не совсем удаляется, а переводится в статус "отключена". И чтобы за отключенные услуги не снимало деньги. Тогда сразу понятно, сколько кредита выдавать и сразу видно, какой у человека тариф. А то сейчас открываешь данные по клиенту - и нужно угадывать, какие у него услуги были подключены до того, как его заблокировало.