[AsteriskBrasil] Cálculo de tarifação CDR em PHP

Danilo Almeida daniloricalmeida em gmail.com
Segunda Janeiro 4 17:16:40 BRST 2016


Fiz um exemplo em PHP  aqui (mais simples), acho que funciona rsrs.

$duracaoMinima = Variavel;
$blocoCadencia = Variavel;
$valorMin = Variavel;

$valor_cadencia = ($valorMin / (60/$blocoCadencia));

if ( $billsec <= $duracaoMinima ) {

$qtdcadencia = (int)ceil($duracaoMinima / $blocoCadencia);
}else{
$qtdcadencia = (int)ceil($billsec / $blocoCadencia);
}
$custo_lig = $qtdcadencia * $valor_cadencia;

Dessa forma calcula o valor pelo bloco da cadencia, no seu caso 6. Ele acha
a quantidade de blocos e multiplica pelo valor do mesmo.
creio que fica mais fácil de entender, ou talvez não...kkkkk

*att*
*Danilo Almeida*
*skype: danilo.almeida33*

Em 30 de dezembro de 2015 00:14, Hudson Cardoso <hudsoncardoso at hotmail.com>
escreveu:

> Tenho algo assim...
> Se por acaso servir pra voce, calcula Tempo mínimo, pulsos,
> arredondamentos, vigência, imposto retroativo,degrau e tipo de data...
>
> Está em pascal...
>
> try
>     pulsos := 0 ;
>     vcob := timetotempo(abilhetes.duracao);
> except
>     pulsos := 0 ;
>     vcob := 0 ;
> end;
>     t_x := vcob - v_Temporizador - tempo_at_simulado ;
>     if t_x < 0 then t_x := 0 ;
>     if t_x<>0 then
>      begin
>       if t_x <= t_min then t_x := t_min ;
>       if t_x > t_min then
>        begin
>         t_x := t_x - t_min ;
>         if t_x = 0 then t_x := 1 ;
>         if t_arr = 0 then t_arr := 1 ;
>         t_res := (trunc(t_x/t_arr)*t_arr);
>         pulsos := trunc(t_x/t_arr) ;
>         if t_x > t_res then pulsos := pulsos + 1 ;
>         if t_x > (T_res) then t_x:=t_res+t_arr ;
>         t_x := t_x + t_min ;
>        end;
>       if t_x = 0 then t_x := 1 ;
>       abilhetes.valor := (t_x/60)*valor_prefixo*v_taxa_extra*v_imposto;
>       if t_min = 0 then t_min := 1 ;
>
>       if pos('0-0-',degrau_b_public)<> 0 then
>        begin
>         if abilhetes.duracao > strtotime('00:02:00') then
>               abilhetes.valor := (pulsos + 1 ) * valor_prefixo *
> v_taxa_extra * v_imposto;
>         if abilhetes.duracao <= strtotime('00:02:00') then if
> pos('0-0-',degrau_b_public)<> 0
>           then
>              abilhetes.valor :=  valor_prefixo * v_taxa_extra * v_imposto ;
>
>         if pos('0-0-S',degrau_b_public)<> 0 then
>              if h_lig > 13 then abilhetes.valor := 2 * ( valor_prefixo *
> v_taxa_extra * v_imposto );
>         if pos('0-0-D',degrau_b_public)<> 0 then abilhetes.valor := 2 * (
> valor_prefixo * v_taxa_extra * v_imposto );
>         if h_lig < 7 then abilhetes.valor :=  2 * ( valor_prefixo *
> v_taxa_extra * v_imposto );
>        end;
>
>       if pos('0-1-',degrau_b_public)<> 0 then
>        begin
>         if h_lig < 7 then abilhetes.valor :=  2 * ( valor_prefixo *
> v_taxa_extra * v_imposto );
>         if pos('0-1-S',degrau_b_public)<> 0 then
>              if h_lig > 13 then abilhetes.valor := 2 * ( valor_prefixo *
> v_taxa_extra * v_imposto );
>         if pos('0-1-D',degrau_b_public)<> 0 then abilhetes.valor := 2 * (
> valor_prefixo * v_taxa_extra * v_imposto );
>        end;
>
>       if dayofweek(abilhetes.data_lig)= 7
>        then
>         if ( (degrau_b_public = '0-0-S') or ( degrau_b_public = 'LCR-0-S')
> or ( degrau_b_public = 'EXC-0-S' ) )
>          then
>           if abilhetes.hora_lig > StrToTime('14:00:00')
>            then
>             abilhetes.valor := (t_min/60) * valor_prefixo * v_taxa_extra *
> v_imposto ;
>       if dayofweek(abilhetes.data_lig)= 1
>        then
>         begin
>          if degrau_b_public = '0-0-D'   then abilhetes.valor:=
> valor_prefixo * v_taxa_extra * v_imposto ;
>          if degrau_b_public = 'LCR-0-D' then abilhetes.valor:=
> valor_prefixo * v_taxa_extra * v_imposto ;
>          if degrau_b_public = 'EXC-0-D' then abilhetes.valor:=
> valor_prefixo * v_taxa_extra * v_imposto ;
>         end;
>       if abilhetes.duracao<= 0 then abilhetes.valor:= 0 ;
>      abilhetes.valor:= abilhetes.valor +
> Sql.fieldbyname('aoconectar').AsCurrency ;
>      if valorunico<>0 then abilhetes.valor:= valorunico ;
>      end
>   end;
> end;
>
>
>
> Hudson
> (048) 8413-7000
> Para quem nao cre, nenhuma prova converte,Para aquele que cre, nenhuma prova precisa.
>
>
>
> ------------------------------
> Date: Mon, 28 Dec 2015 16:48:46 -0200
> From: jrfreitas83 at gmail.com
> To: asteriskbrasil at listas.asteriskbrasil.org
> Subject: [AsteriskBrasil] Cálculo de tarifação CDR em PHP
>
>
> Sres, boa tarde.
>
> Poderiam me ajudar, estou precisando tarifar o campo billsec do
> asteriskcdrdb para comparar com a enviada pela operadora, mas não estou
> conseguindo chegar a fórmula de tarifação.
>
> Meu provedor me cobra no formato 30/6 com custo de 0,13 centavos o minuto
>
> A regra seria:
> Tempo mínimo de tarifação: 30 segundos;
> Unidade de tarifação: 06 segundos
> Custo Minuto: 0.13
>
> Exemplo:
>
> Ligação de 25 segundos: serão tarifados 30 segundos
> Ligação de 31 segundos: serão tarifados 30 + 06 = 36 segundos
> Ligação de 37 segundos: serão tarifados 30 + 06 + 06 = 42 segundos
>
> Alguém teria esses cálculos ou algo parecido que eu pudesse seguir como
> modelo e chegar a esse resultado.
>
> No google quase não tem essa informação, e os que eu achei tentei fazer
> mas sem sucesso, segue abaixo o exemplo da fórmula que estou usando e como
> está o relatório em anexo.
>
> Não sei programar em php, e sim curioso, logo peço desculpa pelo código.
>
> tarifador.php
>
> $query = "SELECT calldate, src, dst, duration, billsec, disposition,
> uniqueid FROM $tablename WHERE calldate >= '".$dtinicial."' AND billsec > 0
> ORDER BY calldate DESC LIMIT 20 ";
> $result = mysql_query($query);
>
> // Return the results, loop through them and echo
>
> while($row  = mysql_fetch_array($result))
>
> {
>
> $segundos = $row['billsec'];
> $val_minuto = 0.13;
> $val_minuto30 = $val_minuto /2;
> $val_minuto2 = $val_minuto / 10;
> $val_minuto3 = $val_minuto2 * $segundos + $val_minuto;
>
>         if ($segundos <= 30){
>             $x = "{$val_minuto30}";
>
>         }else{
>             $x = "{$val_minuto3}";
> }
>
>
>
> Obrigado a todos pela ajuda e Feliz Ano Novo!!!
>
>
> _______________________________________________ KHOMP: completa linha de
> placas externas FXO, FXS, GSM e E1 Media Gateways de 1 a 64 E1s para SIP
> com R2, ISDN e SS7 Intercomunicador e acesso remoto via rede IP e telefones
> IP Conhe�a todo o portf�lio em www.Khomp.com
> _______________________________________________ Para remover seu email
> desta lista, basta enviar um email em branco para
> asteriskbrasil-unsubscribe at listas.asteriskbrasil.org
>
> _______________________________________________
> KHOMP: completa linha de placas externas FXO, FXS, GSM e E1
> Media Gateways de 1 a 64 E1s para SIP com R2, ISDN e SS7
> Intercomunicador e acesso remoto via rede IP e telefones IP
> Conheça todo o portfólio em www.Khomp.com
> _______________________________________________
> Para remover seu email desta lista, basta enviar um email em branco para
> asteriskbrasil-unsubscribe at listas.asteriskbrasil.org
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://asteriskbrasil.org/pipermail/asteriskbrasil/attachments/20160104/6d278901/attachment-0001.html>


Mais detalhes sobre a lista de discussão AsteriskBrasil