Current section
Files
Jump to
Current section
Files
lib/api_brasil/data/consulta.ex
defmodule ApiBrasil.Data.Consulta do
@moduledoc """
Consultas por crédito (`POST /consulta/{servico}/credits` e afins).
Não usam `DeviceToken` — debitam o saldo/créditos da conta. O campo `tipo`
do body define o produto consultado (ex: `lista-socios`, `serasa-score-pf`,
`spc-serasa`); os tipos conhecidos estão em
`ApiBrasil.Generated.Catalog.consulta_tipos/0`.
{:ok, cpf} = ApiBrasil.Data.Consulta.cpf(client, %{"cpf" => "00000000000"})
ApiBrasil.Core.CreditResponse.balance(cpf)
ApiBrasil.Core.CreditResponse.data(cpf)
Use `ApiBrasil.Consulta` para montar o body, inclusive em modo homologação:
alias ApiBrasil.{Consulta, Data}
"lista-socios"
|> Consulta.new()
|> Consulta.field("cnpj", "00000000000000")
|> then(&Data.Consulta.cnpj(client, &1))
# modo homologação (sandbox, sem cobrança)
"serasa-score-pj"
|> Consulta.new()
|> Consulta.homolog(true)
|> Consulta.field("cnpj", "00000000000000")
|> then(&Data.Consulta.cnpj(client, &1))
Além das consultas nomeadas, `generic/4` chama qualquer serviço do catálogo
(`ApiBrasil.Generated.Catalog.consulta_servicos/0`) e `credits/3` devolve os
créditos disponíveis:
Data.Consulta.generic(client, "cnh", %{"cpf" => "00000000000"})
Data.Consulta.credits(client, "cpf")
"""
use ApiBrasil.Core.Service, credit: true
credit(:cpf, "cpf", "Consulta um CPF: `POST /consulta/cpf/credits`.")
credit(
:cnpj,
"cnpj",
"Consulta um CNPJ: `POST /consulta/cnpj/credits` (ex: `tipo` = `lista-socios`)."
)
credit(:cnh, "cnh", "Consulta uma CNH: `POST /consulta/cnh/credits`.")
credit(:cep, "cep", "Consulta um CEP: `POST /consulta/cep/credits`.")
credit(:veiculos, "veiculos", "Consulta veicular: `POST /consulta/veiculos/credits`.")
credit(
:vehicles,
"vehicles",
"Consulta veicular na rota em inglês: `POST /consulta/vehicles/credits`."
)
credit(
:telefone,
"telefone",
"Consulta a operadora de um telefone: `POST /consulta/telefone/credits`."
)
credit(
:ddd_anatel,
"ddd-anatel",
"Consulta o DDD na Anatel: `POST /consulta/ddd-anatel/credits`."
)
credit(:geoip, "geoip", "Consulta a base de IPs: `POST /consulta/geoip/credits`.")
credit(:rastreio, "rastreio", "Rastreia uma encomenda: `POST /consulta/rastreio/credits`.")
credit(:crm, "crm", "Consulta um registro no CRM: `POST /consulta/crm/credits`.")
credit(:crbm, "crbm", "Consulta um registro no CRBM: `POST /consulta/crbm/credits`.")
credit(:cro, "cro", "Consulta um registro no CRO: `POST /consulta/cro/credits`.")
credit(
:weather,
"weather-api",
"Consulta a previsão do tempo: `POST /consulta/weather-api/credits`."
)
credit(
:emissao_notas,
"emissao-notas",
"Emite notas fiscais: `POST /consulta/emissao-notas/credits`."
)
credit(:frete_antt, "frete-antt", "Calcula o frete ANTT: `POST /consulta/frete-antt/credits`.")
credit(:api_rntrc, "api-rntrc", "Consulta o RNTRC: `POST /consulta/api-rntrc/credits`.")
@doc "Consulta o birô Quod: `POST /quod/cnpj/credits`."
@spec quod(Client.t(), term(), keyword()) :: {:ok, CreditResponse.t()} | {:error, Error.t()}
def quod(client, body \\ nil, opts \\ []) do
Service.credit_post(client, "quod/cnpj/credits", body, opts)
end
@doc "Como `quod/3`, mas levanta `ApiBrasil.Core.Error` em caso de falha."
@spec quod!(Client.t(), term(), keyword()) :: CreditResponse.t()
def quod!(client, body \\ nil, opts \\ []) do
Service.unwrap!(quod(client, body, opts))
end
@doc """
Consulta as bases veiculares dedicadas: `POST /vehicles/base/000/{base}`
(base: `dados` | `fipe`).
"""
@spec veiculos_base(Client.t(), String.t(), term(), keyword()) ::
{:ok, CreditResponse.t()} | {:error, Error.t()}
def veiculos_base(client, base, body \\ nil, opts \\ []) do
path = "vehicles/base/000/#{Service.encode_path(base)}"
Service.credit_post(client, path, body, opts)
end
@doc "Como `veiculos_base/4`, mas levanta `ApiBrasil.Core.Error` em caso de falha."
@spec veiculos_base!(Client.t(), String.t(), term(), keyword()) :: CreditResponse.t()
def veiculos_base!(client, base, body \\ nil, opts \\ []) do
Service.unwrap!(veiculos_base(client, base, body, opts))
end
@doc "Calcula a distância entre CEPs: `POST /cep/distancia/calcular`."
@spec cep_distancia(Client.t(), term(), keyword()) ::
{:ok, CreditResponse.t()} | {:error, Error.t()}
def cep_distancia(client, body \\ nil, opts \\ []) do
Service.credit_post(client, "cep/distancia/calcular", body, opts)
end
@doc "Como `cep_distancia/3`, mas levanta `ApiBrasil.Core.Error` em caso de falha."
@spec cep_distancia!(Client.t(), term(), keyword()) :: CreditResponse.t()
def cep_distancia!(client, body \\ nil, opts \\ []) do
Service.unwrap!(cep_distancia(client, body, opts))
end
@doc "Consulta o proxy seller: `POST /proxy/seller/credits`."
@spec proxy_seller(Client.t(), term(), keyword()) ::
{:ok, CreditResponse.t()} | {:error, Error.t()}
def proxy_seller(client, body \\ nil, opts \\ []) do
Service.credit_post(client, "proxy/seller/credits", body, opts)
end
@doc "Como `proxy_seller/3`, mas levanta `ApiBrasil.Core.Error` em caso de falha."
@spec proxy_seller!(Client.t(), term(), keyword()) :: CreditResponse.t()
def proxy_seller!(client, body \\ nil, opts \\ []) do
Service.unwrap!(proxy_seller(client, body, opts))
end
end