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

Danilo Almeida daniloricalmeida em gmail.com
Terça Janeiro 5 12:06:42 BRST 2016


Boa Júnior!

Eu uso o campo accountcode do CDR para os tipos de ligação (fixo local,
móvel local, etc) e depois faço o cálculo de acordo com cada valor.
Em 05/01/2016 11:59, "Junior Freitas" <jrfreitas83 at gmail.com> escreveu:

> Obrigado a todos pela ajuda com a solução do cálculo da tarifação.
>
> Danilo seu exemplo está perfeito, não precisei adicionar uma vírgula :)
>
> Agora vou adicionar outras variáveis para calcular de acordo com o tipo de
> ligação Fixo, Movel, DDD. quando estiver pronto vou enviar o código para a
> lista pois pode ser útil para alguem assim como foi pra mim.
>
> Obrigado novamente.
>
> Em 4 de janeiro de 2016 17:16, Danilo Almeida <daniloricalmeida at gmail.com>
> escreveu:
>
>> 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
>>>
>>
>>
>> _______________________________________________
>> 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/20160105/a068f74d/attachment-0001.html>


Mais detalhes sobre a lista de discussão AsteriskBrasil