casoft genial el aporte espero si lo terminas y te es factible lo publiques ya que hasta para nosotros nos vendria genial.
Hasta donde vas, lo tienes bien, lo unico que hay que mirar muchas cosas, por ejemplo aparte de la tarifa que se aplico en su momento a cada llamada, hay que ver el precio por minuto al destino indicado.
La idea que se me ocurre sin darle muchas vueltas es la siguiente
En vez de atacar a la tabla CDR, se puede crear una independiente a las llamadas para controlar mejor las tarifas y rutas salientes, cada ruta puede tener una tarifa diferente y todo por ejemplo
.- Tabla llamada cdr_llamadas_tarifas, donde se indica el id unico, ddi o numero que ha llamado, el id de la tabla CDR para identificarlo , la duracion de la llamada, la tarifa por minuto, el establecimiento(si lo tiene) y el troncal de salida y cada cuantos segundos se cobra ( algunos destinos puede ser por segundo y otros por minuto o fraccion), así se tiene una independiente para facturación.
A posterior es crear una tabla llamada tarifas_destinos por ejemplo donde se le metan las tarifas por expresiones por ejemplo 3461% seria cualquier numero que comience por 3461 lo que sea ( seria un movil de España 61xxx otra tarifa 346123% y asi con todas y al lado el precio por minuto
de esta forma si se sale por el troncal a se le puede facturar al mismo numero un importe diferente ( diferentes tarifas de operadores)
para el calculo del saldo personalmente no lo haria a tiempo real ya que si se mira con cada llamada esta bien para poco trafico, pero para un servidor de miles de llamadas usaria mucho mariadb y eso es mucha memoria retrasando todo mucho y consumiendo muchiismo mas.
lo ideal es hacerlo con un cron cada 5,10,15 minutos o x periodo en el que se actualicen y en ese periodo si el saldo que se le ha puesto a esa extension o usuario llega a 0 o negativo lo mas facil es configurar un desvio a locucion indicando que no tiene saldo por ejemplo o simplemente si queremos que no llame, cambiando la clave o bien cambiando el tipo de peer para solo permitir recibir y no enviar de esa extension y el cliente/usuario al no poder llamar seguro que nos avisa
aunque lo ideal es a la locucion para no asustarlo 
Estaria encantado de cualquier ayuda que pueda aportar con gusto ya que me parece una idea perfecta y algo que le hace mucha falta a issabel para poder tener mejor controlado los usuarios y numeros y llamadas