prodis / correios-frete

Gem para cálculo de frete utilizando o Web Service dos Correios (http://www.correios.com.br/webservices).
http://prodis.blog.br/correios-frete-gem-para-calculo-de-frete-dos-correios
132 stars 54 forks source link

Cálculo do pacote - Preço diferente na agência dos correios #13

Closed leosmeira closed 8 years ago

leosmeira commented 9 years ago

Implementei o cálculo do frete em uma loja virtual utilizando esta gem.

Ao calcular o frete de 4 itens como um pacote, o mesmo informa um valor diferente do valor cobrado na agência dos correios. O pacote enviado aos correios com todos os produtos dentro é de 37x62x33 com 2.4KG

A gem informa o valor de R$ 79,00 para SEDEX e a agência cobrou R$ 200,00.

Veja o código.

item4024 = Correios::Frete::PacoteItem.new :peso => 1, :comprimento => 23, :largura => 60, :altura => 15
item6655 = Correios::Frete::PacoteItem.new :peso => 0.6, :comprimento => 15, :largura => 10, :altura => 15
item2889 = Correios::Frete::PacoteItem.new :peso => 0.4, :comprimento => 12, :largura => 35, :altura => 17
item4024 = Correios::Frete::PacoteItem.new :peso => 0.7, :comprimento => 15, :largura => 45, :altura => 20

pacote = Correios::Frete::Pacote.new

pacote.adicionar_item(item4024)
pacote.adicionar_item(item6655)
pacote.adicionar_item(item2889)
pacote.adicionar_item(item4024)

frete = Correios::Frete::Calculador.new :cep_origem => "29100-902",
                                        :cep_destino => "74461-190",
                                        :encomenda => pacote

servicos = frete.calcular :sedex, :pac
lucaszmoraes commented 9 years ago

A loja tem contrato com o Correios? Se não, provavelmente esse seja o motivo da diferença. Caso tiver, dá uma falada com o pessoal de serviços para empresas para verificar o porque da diferença.

leosmeira commented 9 years ago

A loja não tem contrato.

O cálculo da gem transforma os itens em pacote e calcula o peso cúbico e a dimensão cúbica. Quando é postado nos correios ou calculado no site dos correios o cálculo Não é feito desta forma. Acho que pode estar aí o problema.

Em Qua, 25 de fev de 2015 9:56 PM, lucaszmoraes notifications@github.com escreveu:

lucaszmoraes commented 9 years ago

Sim, é a forma do cálculo que está diferente. Dá uma lida aqui: http://ecommercenews.com.br/noticias/lancamentos/correios-mostra-como-calcular-o-valor-do-frete-de-um-produto

Se C x L x A / 6.000 <= 10 kg, o frete é cobrado considerando o peso físico do item - no seu caso é 2,4 kg.

Mas quando C x L x A / 6.000 > 10 kg, é considerado o maior peso entre peso cúbico e físico do item. No seu caso, o peso cúbico foi de 37x62x33 / 6.000 = 12,61 kg. Logo, foi cobrado como peso de 12,61 kg e por isso a diferença de preço.

leosmeira commented 9 years ago

Como eu posso fazer o cálculo correto do frete em minha loja, tenho 4 itens para postar com as dimensões descritas nesta Issue.

Eu calculo o frete individualmente e somo os valores ? Já que criar um pacote único está ficando com o preço muito diferente da loja dos correios.

lucaszmoraes commented 9 years ago

Sim, é melhor. Enquanto não descobrirmos o porque da diferença de frete, é melhor calcular individualmente e somar os valores.

Agora, isso levanta uma dúvida: o erro no cálculo é na gem ou no webservice? Acredito que seja no webservice... de qualquer forma, talvez valha a pena fazer um contrato com eles, pois acho que tem desconto, algum suporte deles e dá pra imprimir etiquetas e colá-las na encomenda (estilo MercadoEnvios). A cota mínima pra sedex é R$ 131 e pra PAC é R$ 141. Se não atingir a cota, a diferença é cobrada da loja.

No mais, eu recomendo este gateway para fretes http://www.axado.com.br/, vê se faz sentido integrá-los à sua loja.

Obs: Nem de longe estou minimizando o trabalho do autor da gem. É que trabalhar com o Correios simplesmente é algo muito difícil.

leosmeira commented 9 years ago

Obrigado Lucas pelos esclarecimentos.

Este gateway ainda não é possível pelo valor cobrado. Vou fazer um contrato com os correios para ter o desconto e suporte. Obrigado pela dica.

Pra calcular pela gem, eu montei um pacote com todos os itens e o mesmo transformou em pacote cúbico com as informações abaixo. Será que os correios utilizam estas dimensões no formato cúbico na loja ?

#<Correios::Frete::Pacote:0x007fc084eb59c8 @volume=36390.0, @altura=33.13808074817974, @largura=33.13808074817974, @comprimento=33.13808074817974, @peso=2.3999999999999995, @itens=[#<Correios::Frete::PacoteItem:0x007fc084eb02c0 @peso=0.7, @comprimento=15, @largura=45, @altura=20>, #<Correios::Frete::PacoteItem:0x007fc080e8ad30 @peso=0.6, @comprimento=15, @largura=10, @altura=15>, #<Correios::Frete::PacoteItem:0x007fc084e985a8 @peso=0.4, @comprimento=12, @largura=35, @altura=17>, #<Correios::Frete::PacoteItem:0x007fc084eb02c0 @peso=0.7, @comprimento=15, @largura=45, @altura=20>]> 
lucaszmoraes commented 9 years ago

Puts, essa não sei te responder, cara.

prodis commented 9 years ago

@leosmeira Se você fizer o cálculo com os dados que você utilizou na agência dos Correios, o valor irá bater.

require 'correios-frete'

frete = Correios::Frete::Calculador.new(
  cep_origem: '29100-902',
  cep_destino: '74461-190',
  peso: 2.4,
  comprimento: 37,
  largura: 62,
  altura: 33
)
frete.calcular_sedex

=> #<Correios::Frete::Servico:0x007fdd241fc238
 @codigo="40010",
 @descricao="SEDEX sem contrato",
 @entrega_domiciliar=true,
 @entrega_sabado=true,
 @erro="0",
 @nome="SEDEX",
 @prazo_entrega=5,
 @tipo=:sedex,
 @valor=202.7,
 @valor_aviso_recebimento=0.0,
 @valor_mao_propria=0.0,
 @valor_valor_declarado=0.0>

Os pacotes na gem criam um "cubo perfeito", que nem sempre reflete a realidade quando você coloca os itens dentro de um pacote real.

Se você tivesse conseguisse colocar seus 4 itens a serem enviados dentro de uma caixa cúbica de 34cm de lado, o valor na agência dos Correios bateria com o valor em torno de R$ 70,00 que a gem calculou.

Como seu pacote real quase dobrou o tamanho em largura, em relação ao "cubo perfeito" calculado pela gem, o valor teve um aumento considerável também.

giubueno commented 8 years ago

Olá @leosmeira, após a explicação do @prodis. Será que você poderia fechar a issue?