brasilapi 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,15 +1,89 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # Cliente Ruby da {https://brasilapi.com.br BrasilAPI}.
4
+ #
5
+ # @example Bancos participantes do STR
6
+ # BrasilAPI::Bank.all
7
+ # @see https://brasilapi.com.br/docs
3
8
  module BrasilAPI
9
+ # Corretoras registradas na Comissão de Valores Mobiliários.
10
+ #
11
+ # @see https://brasilapi.com.br/docs#tag/CVM
4
12
  class CVM < Base
5
13
  class << self
6
- def all
7
- get("/cvm/corretoras/v1")
14
+ # Lista as corretoras, opcionalmente filtradas por UF.
15
+ #
16
+ # @param state [String, nil] sigla da UF; omitida quando +nil+
17
+ # @return [Array<Hash>] corretoras e seus CNPJs
18
+ # @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
19
+ # @raise [BrasilAPI::NotFound] quando a BrasilAPI responde 404
20
+ # @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
21
+ # @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
22
+ # @raise [BrasilAPI::Error] em outras respostas de erro
23
+ # @example Corretoras de São Paulo
24
+ # BrasilAPI::CVM.all(state: "SP")
25
+ # @see https://brasilapi.com.br/docs#tag/CVM
26
+ def all(state: nil)
27
+ get("/cvm/corretoras/v1", { uf: state })
8
28
  end
9
29
 
30
+ # Busca uma corretora pelo CNPJ.
31
+ #
32
+ # @param cnpj [String] CNPJ, com ou sem máscara
33
+ # @return [Hash] dados da corretora
34
+ # @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
35
+ # @raise [BrasilAPI::NotFound] quando o CNPJ não é de uma corretora
36
+ # @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
37
+ # @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
38
+ # @raise [BrasilAPI::Error] em outras respostas de erro
39
+ # @example
40
+ # BrasilAPI::CVM.find_by_cnpj("74014747000135")
41
+ # @see https://brasilapi.com.br/docs#tag/CVM
10
42
  def find_by_cnpj(cnpj)
11
43
  get("/cvm/corretoras/v1/#{cnpj}")
12
44
  end
13
45
  end
46
+
47
+ # Fundos de investimento registrados na CVM.
48
+ #
49
+ # @see https://brasilapi.com.br/docs#tag/CVM
50
+ class Fund < Base
51
+ class << self
52
+ # Lista fundos, com paginação opcional.
53
+ #
54
+ # @param page [Integer, nil] página, a partir de 1
55
+ # @param size [Integer, nil] quantidade de itens na página
56
+ # @return [Hash] página de fundos
57
+ # @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
58
+ # @raise [BrasilAPI::NotFound] quando a BrasilAPI responde 404
59
+ # @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
60
+ # @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
61
+ # @raise [BrasilAPI::Error] em outras respostas de erro
62
+ # @example Primeira página, um item
63
+ # BrasilAPI::CVM::Fund.all(page: 1, size: 1)
64
+ # @see https://brasilapi.com.br/docs#tag/CVM
65
+ def all(page: nil, size: nil)
66
+ get("/cvm/fundos/v1", { page: page, size: size })
67
+ end
68
+
69
+ # Busca um fundo pelo CNPJ.
70
+ #
71
+ # A BrasilAPI só aceita dígitos no caminho, então a máscara é removida.
72
+ #
73
+ # @param cnpj [String] CNPJ, com ou sem máscara
74
+ # @return [Hash] dados do fundo
75
+ # @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
76
+ # @raise [BrasilAPI::NotFound] quando o CNPJ não é de um fundo
77
+ # @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
78
+ # @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
79
+ # @raise [BrasilAPI::Error] em outras respostas de erro
80
+ # @example
81
+ # BrasilAPI::CVM::Fund.find_by_cnpj("00.000.684/0001-21")
82
+ # @see https://brasilapi.com.br/docs#tag/CVM
83
+ def find_by_cnpj(cnpj)
84
+ get("/cvm/fundos/v1/#{cnpj.to_s.gsub(/\D/, "")}")
85
+ end
86
+ end
87
+ end
14
88
  end
15
89
  end
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Cliente Ruby da {https://brasilapi.com.br BrasilAPI}.
4
+ #
5
+ # @example Bancos participantes do STR
6
+ # BrasilAPI::Bank.all
7
+ # @see https://brasilapi.com.br/docs
8
+ module BrasilAPI
9
+ # Códigos DDD e as localidades que eles atendem.
10
+ #
11
+ # @see https://brasilapi.com.br/docs#tag/DDD
12
+ class DDD < Base
13
+ class << self
14
+ # Lista todos os DDDs.
15
+ #
16
+ # @return [Array<Hash>] estado e cidades de cada DDD
17
+ # @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
18
+ # @raise [BrasilAPI::NotFound] quando a BrasilAPI responde 404
19
+ # @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
20
+ # @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
21
+ # @raise [BrasilAPI::Error] em outras respostas de erro
22
+ # @example
23
+ # BrasilAPI::DDD.all
24
+ # @see https://brasilapi.com.br/docs#tag/DDD
25
+ def all
26
+ get("/ddd/v1")
27
+ end
28
+
29
+ # Busca as cidades de um DDD.
30
+ #
31
+ # A v2 é o padrão. +version: 1+ consulta a rota antiga.
32
+ #
33
+ # @param ddd [String, Integer] código DDD
34
+ # @param version [Integer] versão da rota, +1+ ou +2+
35
+ # @return [Hash] estado e cidades atendidas
36
+ # @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
37
+ # @raise [BrasilAPI::NotFound] quando o DDD não existe
38
+ # @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
39
+ # @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
40
+ # @raise [BrasilAPI::Error] em outras respostas de erro
41
+ # @example DDD 11 na v2
42
+ # BrasilAPI::DDD.find(11)
43
+ # @example DDD 86 na v1
44
+ # BrasilAPI::DDD.find(86, version: 1)
45
+ # @see https://brasilapi.com.br/docs#tag/DDD
46
+ def find(ddd, version: 2)
47
+ get("/ddd/v#{version}/#{ddd}")
48
+ end
49
+
50
+ # Lista os DDDs de uma unidade federativa.
51
+ #
52
+ # @param state [String] sigla da UF
53
+ # @return [Array<Hash>] DDDs da UF
54
+ # @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
55
+ # @raise [BrasilAPI::NotFound] quando a UF não existe
56
+ # @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
57
+ # @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
58
+ # @raise [BrasilAPI::Error] em outras respostas de erro
59
+ # @example DDDs de São Paulo
60
+ # BrasilAPI::DDD.by_state("SP")
61
+ # @see https://brasilapi.com.br/docs#tag/DDD
62
+ def by_state(state)
63
+ get("/ddd/uf/v1/#{state}")
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Cliente Ruby da {https://brasilapi.com.br BrasilAPI}.
4
+ #
5
+ # @example Bancos participantes do STR
6
+ # BrasilAPI::Bank.all
7
+ # @see https://brasilapi.com.br/docs
8
+ module BrasilAPI
9
+ # Falha ao consultar a BrasilAPI.
10
+ #
11
+ # +Timeout+ não traz código HTTP. As demais subclasses preenchem +status+.
12
+ class Error < StandardError
13
+ # Código HTTP da resposta.
14
+ #
15
+ # @return [Integer, nil]
16
+ attr_reader :status
17
+
18
+ # Corpo da resposta, já interpretado quando é JSON.
19
+ #
20
+ # @return [Hash, Array, String, nil]
21
+ attr_reader :body
22
+
23
+ # Campo +type+ devolvido pela BrasilAPI.
24
+ #
25
+ # @return [String, nil]
26
+ attr_reader :type
27
+
28
+ # @param message [String, nil] texto exibido por +Exception#message+
29
+ # @param status [Integer, nil] código HTTP
30
+ # @param body [Hash, Array, String, nil] corpo da resposta
31
+ # @param type [String, nil] classificação devolvida pela BrasilAPI
32
+ def initialize(message = nil, status: nil, body: nil, type: nil)
33
+ @status = status
34
+ @body = body
35
+ @type = type
36
+ super(message)
37
+ end
38
+ end
39
+
40
+ # A BrasilAPI respondeu 404.
41
+ class NotFound < Error; end
42
+
43
+ # A BrasilAPI respondeu 400.
44
+ class BadRequest < Error; end
45
+
46
+ # A BrasilAPI respondeu 5xx.
47
+ class ServerError < Error; end
48
+
49
+ # A conexão estourou +open_timeout+ ou +read_timeout+.
50
+ class Timeout < Error; end
51
+ end
@@ -1,24 +1,129 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # Cliente Ruby da {https://brasilapi.com.br BrasilAPI}.
4
+ #
5
+ # @example Bancos participantes do STR
6
+ # BrasilAPI::Bank.all
7
+ # @see https://brasilapi.com.br/docs
3
8
  module BrasilAPI
9
+ # Tabelas de preço de veículos da FIPE.
10
+ #
11
+ # +reference_table+ vira o parâmetro +tabela_referencia+ e some da query quando +nil+.
12
+ #
13
+ # @see https://brasilapi.com.br/docs#tag/FIPE
4
14
  class FIPE < Base
5
15
  class << self
6
- # https://brasilapi.com.br/api/fipe/marcas/v1/{tipoVeiculo}
7
- def vehicle_brands(vehicle_type, reference_table = nil)
8
- get("/fipe/marcas/v1/#{vehicle_type}", { tabela_referencia: reference_table })
16
+ # Lista as marcas de um tipo de veículo.
17
+ #
18
+ # Sem +vehicle_type+, devolve as marcas de todos os tipos.
19
+ #
20
+ # @param vehicle_type [String, nil] +"carros"+, +"motos"+ ou +"caminhoes"+
21
+ # @param reference_table [Integer, nil] código da tabela de referência
22
+ # @return [Array<Hash>] nome e código de cada marca
23
+ # @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
24
+ # @raise [BrasilAPI::NotFound] quando o tipo de veículo não existe
25
+ # @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
26
+ # @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
27
+ # @raise [BrasilAPI::Error] em outras respostas de erro
28
+ # @example Marcas de carros na tabela 290
29
+ # BrasilAPI::FIPE.vehicle_brands("carros", 290)
30
+ # @see https://brasilapi.com.br/docs#tag/FIPE
31
+ def vehicle_brands(vehicle_type = nil, reference_table = nil)
32
+ suffix = vehicle_type ? "/#{vehicle_type}" : ""
33
+ get("/fipe/marcas/v1#{suffix}", { tabela_referencia: reference_table })
9
34
  end
10
35
 
11
- # https://brasilapi.com.br/api/fipe/preco/v1/{codigoFipe}
36
+ # Lista os anos de um modelo.
37
+ #
38
+ # @param vehicle_type [String] +"carros"+, +"motos"+ ou +"caminhoes"+
39
+ # @param brand_code [String, Integer] código da marca
40
+ # @param model_code [String, Integer] código do modelo
41
+ # @param reference_table [Integer, nil] código da tabela de referência
42
+ # @return [Array<Hash>] anos disponíveis para o modelo
43
+ # @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
44
+ # @raise [BrasilAPI::NotFound] quando marca ou modelo não existem
45
+ # @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
46
+ # @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
47
+ # @raise [BrasilAPI::Error] em outras respostas de erro
48
+ # @example Anos do VW Gol
49
+ # BrasilAPI::FIPE.vehicle_years("carros", 59, 5585)
50
+ # @see https://brasilapi.com.br/docs#tag/FIPE
51
+ def vehicle_years(vehicle_type, brand_code, model_code, reference_table = nil)
52
+ get(
53
+ "/fipe/anos/v1/#{vehicle_type}/#{brand_code}/#{model_code}",
54
+ { tabela_referencia: reference_table }
55
+ )
56
+ end
57
+
58
+ # Detalha um veículo em um ano específico.
59
+ #
60
+ # @param vehicle_type [String] +"carros"+, +"motos"+ ou +"caminhoes"+
61
+ # @param brand_code [String, Integer] código da marca
62
+ # @param model_code [String, Integer] código do modelo
63
+ # @param year_code [String] código do ano, por exemplo +"2013-3"+
64
+ # @param reference_table [Integer, nil] código da tabela de referência
65
+ # @return [Hash] preço, combustível e código FIPE
66
+ # @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
67
+ # @raise [BrasilAPI::NotFound] quando a combinação não existe
68
+ # @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
69
+ # @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
70
+ # @raise [BrasilAPI::Error] em outras respostas de erro
71
+ # @example Gol 2013
72
+ # BrasilAPI::FIPE.vehicle_details("carros", 59, 5585, "2013-3")
73
+ # @see https://brasilapi.com.br/docs#tag/FIPE
74
+ def vehicle_details(vehicle_type, brand_code, model_code, year_code, reference_table = nil)
75
+ get(
76
+ "/fipe/detalhes/v1/#{vehicle_type}/#{brand_code}/#{model_code}/#{year_code}",
77
+ { tabela_referencia: reference_table }
78
+ )
79
+ end
80
+
81
+ # Consulta o preço pelo código FIPE.
82
+ #
83
+ # @param vehicle_code [String] código FIPE, por exemplo +"005329-5"+
84
+ # @param reference_table [Integer, nil] código da tabela de referência
85
+ # @return [Array<Hash>] preço nas tabelas consultadas
86
+ # @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
87
+ # @raise [BrasilAPI::NotFound] quando o código FIPE não existe
88
+ # @raise [BrasilAPI::ServerError] quando a fonte da FIPE está indisponível
89
+ # @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
90
+ # @raise [BrasilAPI::Error] em outras respostas de erro
91
+ # @example
92
+ # BrasilAPI::FIPE.vehicle_price("005329-5")
93
+ # @see https://brasilapi.com.br/docs#tag/FIPE
12
94
  def vehicle_price(vehicle_code, reference_table = nil)
13
95
  get("/fipe/preco/v1/#{vehicle_code}", { tabela_referencia: reference_table })
14
96
  end
15
97
 
16
- # https://brasilapi.com.br/api/fipe/tabelas/v1
98
+ # Lista as tabelas de referência publicadas pela FIPE.
99
+ #
100
+ # @return [Array<Hash>] código e mês de cada tabela
101
+ # @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
102
+ # @raise [BrasilAPI::NotFound] quando a BrasilAPI responde 404
103
+ # @raise [BrasilAPI::ServerError] quando a fonte da FIPE está indisponível
104
+ # @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
105
+ # @raise [BrasilAPI::Error] em outras respostas de erro
106
+ # @example
107
+ # BrasilAPI::FIPE.fipe_tables
108
+ # @see https://brasilapi.com.br/docs#tag/FIPE
17
109
  def fipe_tables
18
110
  get("/fipe/tabelas/v1")
19
111
  end
20
112
 
21
- # https://brasilapi.com.br/api/fipe/veiculos/v1/{tipoVeiculo}/{codigoMarca}
113
+ # Lista os modelos de uma marca.
114
+ #
115
+ # @param vehicle_type [String] +"carros"+, +"motos"+ ou +"caminhoes"+
116
+ # @param brand_code [String, Integer] código da marca
117
+ # @param reference_table [Integer, nil] código da tabela de referência
118
+ # @return [Array<Hash>] modelos da marca
119
+ # @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
120
+ # @raise [BrasilAPI::NotFound] quando a marca não existe
121
+ # @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
122
+ # @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
123
+ # @raise [BrasilAPI::Error] em outras respostas de erro
124
+ # @example Modelos Volkswagen na tabela 290
125
+ # BrasilAPI::FIPE.list_vehicles("carros", 59, 290)
126
+ # @see https://brasilapi.com.br/docs#tag/FIPE
22
127
  def list_vehicles(vehicle_type, brand_code, reference_table = nil)
23
128
  get("/fipe/veiculos/v1/#{vehicle_type}/#{brand_code}", { tabela_referencia: reference_table })
24
129
  end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Cliente Ruby da {https://brasilapi.com.br BrasilAPI}.
4
+ #
5
+ # @example Bancos participantes do STR
6
+ # BrasilAPI::Bank.all
7
+ # @see https://brasilapi.com.br/docs
8
+ module BrasilAPI
9
+ # Geocodificação reversa a partir de latitude e longitude.
10
+ #
11
+ # @see https://brasilapi.com.br/docs#tag/GEOLOCATION
12
+ class Geolocation < Base
13
+ class << self
14
+ # Descobre o endereço de um ponto.
15
+ #
16
+ # +language+ vira o parâmetro homônimo e some da query quando +nil+.
17
+ #
18
+ # @param latitude [Float, String] latitude em graus decimais
19
+ # @param longitude [Float, String] longitude em graus decimais
20
+ # @param language [String, nil] idioma da resposta, por exemplo +"pt"+ ou +"en"+
21
+ # @return [Hash] país, estado, cidade e endereço aproximado
22
+ # @raise [BrasilAPI::BadRequest] quando as coordenadas são inválidas
23
+ # @raise [BrasilAPI::NotFound] quando a BrasilAPI responde 404
24
+ # @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
25
+ # @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
26
+ # @raise [BrasilAPI::Error] em outras respostas de erro
27
+ # @example Centro de São Paulo, em português
28
+ # BrasilAPI::Geolocation.reverse(-23.55, -46.63, language: "pt")
29
+ # @see https://brasilapi.com.br/docs#tag/GEOLOCATION
30
+ def reverse(latitude, longitude, language: nil)
31
+ get("/geolocation/v1", { latitude: latitude, longitude: longitude, language: language })
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,10 +1,33 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # Cliente Ruby da {https://brasilapi.com.br BrasilAPI}.
4
+ #
5
+ # @example Bancos participantes do STR
6
+ # BrasilAPI::Bank.all
7
+ # @see https://brasilapi.com.br/docs
3
8
  module BrasilAPI
9
+ # Feriados nacionais e, quando a UF é informada, feriados estaduais.
10
+ #
11
+ # @see https://brasilapi.com.br/docs#tag/FERIADOS
4
12
  class Holiday < Base
5
13
  class << self
6
- def by_year(year)
7
- get("/feriados/v1/#{year}")
14
+ # Lista os feriados de um ano.
15
+ #
16
+ # +state+ vira o parâmetro +uf+ e só é enviado quando presente.
17
+ #
18
+ # @param year [String, Integer] ano com quatro dígitos
19
+ # @param state [String, nil] sigla da UF dos feriados estaduais
20
+ # @return [Array<Hash>] data, nome e tipo de cada feriado
21
+ # @raise [BrasilAPI::BadRequest] quando o ano é inválido
22
+ # @raise [BrasilAPI::NotFound] quando a BrasilAPI responde 404
23
+ # @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
24
+ # @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
25
+ # @raise [BrasilAPI::Error] em outras respostas de erro
26
+ # @example Feriados de São Paulo em 2024
27
+ # BrasilAPI::Holiday.by_year(2024, state: "SP")
28
+ # @see https://brasilapi.com.br/docs#tag/FERIADOS
29
+ def by_year(year, state: nil)
30
+ get("/feriados/v1/#{year}", { uf: state })
8
31
  end
9
32
  end
10
33
  end
@@ -0,0 +1,157 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Cliente Ruby da {https://brasilapi.com.br BrasilAPI}.
4
+ #
5
+ # @example Bancos participantes do STR
6
+ # BrasilAPI::Bank.all
7
+ # @see https://brasilapi.com.br/docs
8
+ module BrasilAPI
9
+ # Estabelecimentos de saúde do CNES.
10
+ #
11
+ # @see https://brasilapi.com.br/docs#tag/HOSPITAIS
12
+ class Hospital < Base
13
+ # Filtros de {Hospital.all} e o nome enviado na query.
14
+ #
15
+ # @return [Hash{Symbol=>Symbol}]
16
+ LIST_PARAMS = {
17
+ vertical: :vertical,
18
+ state: :uf,
19
+ city: :municipio,
20
+ service: :atendimento,
21
+ query: :q,
22
+ limit: :limit,
23
+ offset: :offset
24
+ }.freeze
25
+
26
+ # Filtros de {Hospital.nearby} e o nome enviado na query.
27
+ #
28
+ # @return [Hash{Symbol=>Symbol}]
29
+ NEARBY_PARAMS = {
30
+ zip_code: :cep,
31
+ latitude: :latitude,
32
+ longitude: :longitude,
33
+ city: :municipio,
34
+ state: :uf,
35
+ radius: :raio_km,
36
+ vertical: :vertical,
37
+ service: :atendimento,
38
+ limit: :limit,
39
+ offset: :offset
40
+ }.freeze
41
+
42
+ class << self
43
+ # Lista estabelecimentos de saúde.
44
+ #
45
+ # @param filters [Hash] filtros opcionais
46
+ # @option filters [String] :vertical vertical do estabelecimento
47
+ # @option filters [String] :state sigla da UF (+uf+)
48
+ # @option filters [String] :city município (+municipio+)
49
+ # @option filters [String] :service tipo de atendimento (+atendimento+)
50
+ # @option filters [String] :query texto livre (+q+)
51
+ # @option filters [Integer] :limit quantidade máxima de itens
52
+ # @option filters [Integer] :offset deslocamento da página
53
+ # @return [Hash] total e lista de estabelecimentos
54
+ # @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
55
+ # @raise [BrasilAPI::NotFound] quando a BrasilAPI responde 404
56
+ # @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
57
+ # @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
58
+ # @raise [BrasilAPI::Error] em outras respostas de erro
59
+ # @example Hospitais de Teresina
60
+ # BrasilAPI::Hospital.all(state: "PI", city: "TERESINA", limit: 1)
61
+ # @see https://brasilapi.com.br/docs#tag/HOSPITAIS
62
+ def all(**filters)
63
+ get("/hospitais/v1", translate(filters, LIST_PARAMS))
64
+ end
65
+
66
+ # Lista estabelecimentos próximos de um CEP ou de um ponto.
67
+ #
68
+ # @param filters [Hash] filtros opcionais
69
+ # @option filters [String] :zip_code CEP de referência (+cep+)
70
+ # @option filters [Float] :latitude latitude de referência
71
+ # @option filters [Float] :longitude longitude de referência
72
+ # @option filters [String] :city município (+municipio+)
73
+ # @option filters [String] :state sigla da UF (+uf+)
74
+ # @option filters [Numeric] :radius raio em quilômetros (+raio_km+)
75
+ # @option filters [String] :vertical vertical do estabelecimento
76
+ # @option filters [String] :service tipo de atendimento (+atendimento+)
77
+ # @option filters [Integer] :limit quantidade máxima de itens
78
+ # @option filters [Integer] :offset deslocamento da página
79
+ # @return [Hash] estabelecimentos ordenados por distância
80
+ # @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
81
+ # @raise [BrasilAPI::NotFound] quando a BrasilAPI responde 404
82
+ # @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
83
+ # @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
84
+ # @raise [BrasilAPI::Error] em outras respostas de erro
85
+ # @example Vizinhos do CEP 64001-100
86
+ # BrasilAPI::Hospital.nearby(zip_code: "64001100", limit: 1)
87
+ # @see https://brasilapi.com.br/docs#tag/HOSPITAIS
88
+ def nearby(**filters)
89
+ get("/hospitais/v1/proximos", translate(filters, NEARBY_PARAMS))
90
+ end
91
+
92
+ # Lista os valores aceitos nos filtros de hospitais.
93
+ #
94
+ # @return [Hash] verticais, atendimentos e demais opções
95
+ # @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
96
+ # @raise [BrasilAPI::NotFound] quando a BrasilAPI responde 404
97
+ # @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
98
+ # @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
99
+ # @raise [BrasilAPI::Error] em outras respostas de erro
100
+ # @example
101
+ # BrasilAPI::Hospital.options
102
+ # @see https://brasilapi.com.br/docs#tag/HOSPITAIS
103
+ def options
104
+ get("/hospitais/v1/opcoes")
105
+ end
106
+
107
+ # Lista os centros de informação toxicológica.
108
+ #
109
+ # +state+ vira +uf+ e só é enviado quando presente.
110
+ #
111
+ # @param state [String, nil] sigla da UF
112
+ # @return [Array<Hash>] unidades do CIATOX
113
+ # @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
114
+ # @raise [BrasilAPI::NotFound] quando a BrasilAPI responde 404
115
+ # @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
116
+ # @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
117
+ # @raise [BrasilAPI::Error] em outras respostas de erro
118
+ # @example CIATOX do Piauí
119
+ # BrasilAPI::Hospital.ciatox(state: "PI")
120
+ # @see https://brasilapi.com.br/docs#tag/HOSPITAIS
121
+ def ciatox(state: nil)
122
+ get("/hospitais/v1/ciatox", { uf: state })
123
+ end
124
+
125
+ # Busca um estabelecimento pelo código CNES.
126
+ #
127
+ # @param cnes [String, Integer] código CNES
128
+ # @return [Hash] dados cadastrais do estabelecimento
129
+ # @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
130
+ # @raise [BrasilAPI::NotFound] quando o CNES não existe
131
+ # @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
132
+ # @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
133
+ # @raise [BrasilAPI::Error] em outras respostas de erro
134
+ # @example
135
+ # BrasilAPI::Hospital.find_by_cnes("2726998")
136
+ # @see https://brasilapi.com.br/docs#tag/HOSPITAIS
137
+ def find_by_cnes(cnes)
138
+ get("/hospitais/v1/cnes/#{cnes}")
139
+ end
140
+
141
+ # Lista os estados que têm estabelecimentos cadastrados.
142
+ #
143
+ # @return [Array<Hash>] sigla e quantidade por UF
144
+ # @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
145
+ # @raise [BrasilAPI::NotFound] quando a BrasilAPI responde 404
146
+ # @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
147
+ # @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
148
+ # @raise [BrasilAPI::Error] em outras respostas de erro
149
+ # @example
150
+ # BrasilAPI::Hospital.states
151
+ # @see https://brasilapi.com.br/docs#tag/HOSPITAIS
152
+ def states
153
+ get("/hospitais/v1/estados")
154
+ end
155
+ end
156
+ end
157
+ end