Don’t let the tail wag the dog. IMO the Asterisk CDRs (combined with data from your CRM system, if you are billing separately for receptionist time) should be your primary billing data source. If something goes wrong and CDRs are lost or corrupted, call records from your trunking provider will serve as a backup.
You will likely enjoy substantial savings by purchasing DIDs and channels separately. For example, see VoIP SIP Trunk - From R100 a month - no setup charge . Though they require a minimum of one channel per ten numbers, this is still much less expensive than separate trunks. If you will be porting in existing client numbers in different cities, etc., 600 DIDs with associated channels would cost ZAR 7500 monthly. If you can purchase blocks of numbers and assign them to clients, cost could be as little as ZAR 3000.
Avoid this if at all possible. In order to record client calls, they must be routed through your PBX (the incoming leg and the call to his mobile are separate calls, bridged by Asterisk). If the caller is on a mobile, there is already two generations of transcoding loss in the mobile networks. Further degradation by G.729 will sound pretty poor. If your G.729 requirement is based on bandwidth limitations of your office internet connection, consider hosting the PBX in the cloud instead. Or, if your budget permits, get a real PRI as suggested by @gbaughma .
Don’t even think about letting the VoIP provider handle it; your system should do it tactfully. When you restrict or suspend service to a client who has not paid his bill, it’s the client’s customers who will be hearing the error announcement. If the provider plays something like “We’re sorry, the number you have called is not in service.”, the customer may conclude that your client is out of business and go to a competitor, never to return. And when the client discovers this, instead of paying the bill, he may go to your competitor, never to return.