Все зависит от того, какая логика у тарифного плана.
Если это единовременные платежи - то само собой отнимаешь по факту нужную сумму, рассчитывая ее либо заранее, в момент заключения договора (чтобы не получилось что при обновлении логики предыдущие договора внезапно начинают брать другую сумму), так реализуют в т.ч. периодические платежи - раз в сутки/месяц.
Если оплата идет по времени за использование, то нужна функция расчета стоимости от времени и необходимо менять логику контроля окончания средств, добавляя в нее вызов этой функции (например в начале интервала и при любых изменениях на счете считаем максимальное время использования), а так же ее вызывать по окончанию интервала времени использования. Осторожно, этот способ возможно самый правильный при реализации, но требует аккуратного подсчета и учета пересекающихся интервалов с оплатой (т.е. одновременно запущены два интервала, если считать стоимость каждого при старте без учета соседнего, то можно загнать счет в минус, позволив пользоваться услугами бесплатно)