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

Hudson Cardoso hudsoncardoso em hotmail.com
Quarta Dezembro 30 00:14:14 BRST 2015


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 em gmail.com
To: asteriskbrasil em 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 em listas.asteriskbrasil.org 		 	   		  
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://asteriskbrasil.org/pipermail/asteriskbrasil/attachments/20151230/e998f4a9/attachment-0001.html>


Mais detalhes sobre a lista de discussão AsteriskBrasil