Project

jamef-api

0.0
No commit activity in last 3 years
No release in over 3 years
Ruby wrapper for the Jamef.com.br SOAP API.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Development

~> 1.16
>= 0
~> 10.0
~> 3.0

Runtime

 Project Readme

Jamef API

Olá. Essa gem é um Ruby wrapper da API SOAP da Jamef.com.br. Use-a em qualquer projeto Ruby/Rails.

Você poderá facilmente

  • Consultar frete e prazo de entrega
  • Rastrear encomendas despachadas (#TO DO)

1. Consulta de Frete e Prazo (Rating)

Após a instalação da gem, realizar uma consulta de frete é bastante simples. São apenas 4 passos, veja um resumo do processo:

  1. Defina o remetente com Jamef::Sender
  2. Defina o destinatário com Jamef::Receiver
  3. Defina a mercadoria que vai ser enviada com Jamef::Package
  4. Realize a consulta com Jamef.rate ou Jamef.complete_rate

1.1 - Remetente

Inicialize um objeto Jamef::Sender com as informações da sua empresa.

my_company = Jamef::Sender.new({
  document: 'xxx',          # cnpj/cpf
  city: 'Jundiaí',          # sua cidade
  state: 'SP',              # seu estado
  jamef_branch: :campinas   # sua filial da jamef
})

Importante:

  • jamef_branch é sempre o nome da cidade da filial da Jamef associada à sua conta. Veja a tabela no final do documento.

1.2 - Destinatário

Crie um destinatário com o Jamef::Receiver.

receiver = Jamef::Receiver.new({
  zip: 'CEP AQUI',         # obrigatório: CEP
  document: 'CNPJ AQUI',   # opcional: cpf/cnpj do destinatário
  contrib: true            # opcional: Dest. é contribuinte?
}) 

1.3 - Mercadoria

Faça um pacote informando o volume final cubado () e também seu peso (kg) com o Jamef::Package.

package = Jamef::Package.new({
  weight: 5,            # kg - peso da encomenda
  package_price: 1000,  # R$ - valor da encomenda
  volume: 2,            # m³ - vol. total cubado
  type: :nf             # opcional (leia abaixo)
}) 

Este último parâmetro type está relacionado com o tipo de produto que será transportado.

Você pode omitir type: :nf que é o valor padrão. O tipo :nf diz à Jamef para inferir o tipo de produto a partir da nota fiscal. Veja a tabela no final do documento para preencher o campo type adequadamente.

1.4 - Consulta

Há dois métodos que você pode usar para fazer a consulta: Jamef.complete_rate e Jamef.rate. Escolha a maneira mais adequada.

1.4.1 Consulta com retorno simplificado

Você pode realizar uma consulta simples com o Jamef::rate

Em shipping_in, informe a data/horário (datetime) de coleta da encomenda.

Jamef.rate({
  sender: my_company, 
  receiver: receiver, 
  package: package, 
   
  # Tipo de transporte: Aéreo (:air) ou rodoviário (:road)
  service_type: :road,
  
  # data/hora de coleta (Datetime obj.)
  shipping_in: 3.days.from_now.midday
  
})

O retorno é uma hash como esta abaixo:

  {
    freight: 50.00,               # total do frete
    min_delivery_date: min_date,  # data mínima de entrega
    max_delivery_date: max_date   # data máxima de entrega
  }

1.4.2 Consulta com retorno completo

É possível também pode realizar uma consulta completa com o método Jamef.complete_rate.

Os parâmetros são idênticos aos da versão simplificada acima, o que muda é o retorno que agora é uma hash originada diretamente da resposta da Jamef.

Exemplo de retorno:

{:freight=>
  {:msgerro=>"Ok - Calculo executado na filial [ CPQ ] cFilAnt : [03] Cliente Destinatario [  ] ",
   :valfre=>
    {:avalfre=>
      [{:componente=>"[01]-Pedagio             ", :imposto=>"0.58634409", :total=>"8.37634409", :valor=>"7.79000000"},
       {:componente=>"[03]-GRIS                ", :imposto=>"0.17583323", :total=>"2.51190323", :valor=>"2.33607000"},
       {:componente=>"[04]-TAS                 ", :imposto=>"0.49000000", :total=>"7.00000000", :valor=>"6.51000000"},
       {:componente=>"[05]-Taxa (ate 100kg)    ", :imposto=>"0.00000000", :total=>"0.00000000", :valor=>"0.00000000"},
       {:componente=>"[06]-Frete Peso (FM)     ", :imposto=>"13.81830288", :total=>"197.40432688", :valor=>"183.58602400"},
       {:componente=>"[07]-Frete Valor         ", :imposto=>"0.55680522", :total=>"7.95436022", :valor=>"7.39755500"},
       {:componente=>"[10]-TRT                 ", :imposto=>"0.00000000", :total=>"0.00000000", :valor=>"0.00000000"},
       {:componente=>"[23]-Frete Peso (FP)     ", :imposto=>"0.00000000", :total=>"0.00000000", :valor=>"0.00000000"},
       {:componente=>"[24]-Taxa (acima 100kg)  ", :imposto=>"0.00000000", :total=>"0.00000000", :valor=>"0.00000000"},
       {:componente=>"TF-TOTAL DO FRETE", :imposto=>"15.63000000", :total=>"223.25000000", :valor=>"207.62000000"}]}},
 :delivery=>{:cdtmax=>"03/05/18", :cdtmin=>"02/05/18", :msgerro=>"OK"}}

2. Rastreio (Tracking)

Ainda não está pronto.


3. Instalação

Se você estiver usando o Bundler, adiciona esta linha no seu Gemfile

gem 'jamef-api', require: 'jamef'

E execute

$ bundle

Ou instale diretamente no Ruby com

$ gem install jamef-api

Neste caso, quando for utilizar, não esqueça de dar um

require 'jamef'

em cima do documento antes utilizar a Gem.


4. Informações Complementares - Jamef

4.1 Tipo de Produto a ser enviado

Você pode especificar o tipo de produto transportado num pacote a partir da tabela abaixo.

4.1.1 Para frete rodoviário​
Ruby symbol Tipo de produto
:nf CONFORME NOTA FISCAL
:livros LIVROS
4.1.2 Para frete aéreo
Ruby symbol Tipo de produto
:nf CONFORME NOTA FISCAL
:livros LIVROS
:alimentos ALIMENTOS INDUSTRIALIZADOS
:confeccoes CONFECCOES
:comesticos COSMETICOS
:cirugicos MATERIAL CIRURGICO
:jornais JORNAIS / REVISTAS
material_escolar MATERIAL ESCOLAR

4.2 Filiais da Jamef

Encontre a sua filial e veja o valor do jamef_branch que você deve utilizar. Basicamente é o nome da cidade, mas por via das dúvidas:

Filial Map:

Ruby symbol Filial
:aracaju AJU - Aracaju - SE
:barueri BAR - Barueri - SP
:bauru BAU - Bauru - SP
:belo_horizonte BHZ - Belo Horizonte - MG
:blumenau BNU - Blumenau - SC
:brasilia BSB - Brasília - DF
:criciuma CCM - Criciúma - SC
:campinas CPQ - Campinas - SP
:caxias_do_sul CXJ - Caxias do Sul - RS
:curitiba CWB - Curitiba - PR
:divinopolis DIV - Divinópolis - MG
:feira_de_santana FES - Feira de Santana - BA
:florianopolis FLN - Florianópolis - SC
:fortaleza FOR - Fortaleza - CE
:goiania GYN - Goiânia - GO
:joao_pessoa JPA - João Pessoa - PB
:juiz_de_fora JDF - Juiz de Fora - MG
:joinville JOI - Joinville - SC
:londrina LDB - Londrina - PR
:manaus MAO - Manaus - AM
:maceio MCZ - Maceió - AL
:maringa MGF - Maringá - PR
:porto_alegre POA - Porto Alegre - RS
:pouso_alegre PSA - Pouso Alegre - MG
:ribeirao_preto RAO - Ribeirão Preto - SP
:recife REC - Recife - PE
:rio_de_janeiro RIO - Rio de Janeiro - RJ
:sao_paulo SAO - São Paulo - SP
:sao_jose_dos_campos SJK - São José dos Campos - SP
:sao_jose_do_rio_preto SJP - São José do Rio Preto - SP
:salvador SSA - Salvador - BA
:uberlandia UDI - Uberlândia - MG
:vitoria_da_conquista VDC - Vitória da Conquista - BA
:vitoria VIX - Vitória - ES

5. Contribuições

Se vir um bug, manda aí.

Pull requests são super bem-vindos e serão aceitos desde que:

  • Não sejam mirabolantes,
  • Incluam testes,
  • Façam sentido.

Tamo junto. :)


6. License

MIT License.