Since this is a service-related charge, we believe the user should not be able to cancel the invoice on the front end. To address this, we opted to hide the cancel button using CSS. Also and just in case the user already knows the URL to cancel the invoice:
A hook on IPS4 will throw an error message when trying to cancel the invoice.
The PENDING status is restored via Invoice Listener on IPS5.