Если не писать никакого кода, то можно заюзать такой вариант:
в услугах есть параметр "условия". Если такого параметра нет, то нужно его включить в sat.cfg:
$service_condition_enabled = 1;
Эта фишка позволяет добавлять произвольные sql при выводе списка услуг на подключение. Поэтому ее включение и вынесено в sat.cfg ибо sql штука небезопасная. И если у вас привилегия "админ" у кучи сотрудников, лучше так не делать.
В общем, в параметр "условия" вписываем:
NOT EXISTS (SELECT 1 FROM pays WHERE mid=u.id AND category=100 AND comment='блаблабла')
Где "блаблабла" заменить строго 1 в 1 как параметр "Описание, которое будут видеть клиенты".
Как это работает? Если в истории платежей будет списание за услуги с текстом "блаблабла", то услуга не будет подключена. Естественно, если вы измените описание услуги или удалите платеж списание - услугу можно будет подключить. Еще один раз.