datajud 0.1.2 → 0.1.4
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/Gemfile.lock +1 -1
- data/README.md +29 -11
- data/examples/find.rb +3 -3
- data/lib/datajud/api_client.rb +5 -6
- data/lib/datajud/client.rb +2 -1
- data/lib/datajud/process.rb +51 -34
- data/lib/datajud/version.rb +1 -1
- data/lib/datajud.rb +24 -10
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5df3f8cadbf3eb0e40ba6891207bc56a076e5624e171cd99e1fef1ee66cf1696
|
|
4
|
+
data.tar.gz: bfc125d69fb6a639afbc0891db64d301209cf7901e14a8fee82477623e521153
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6ad607e3b195cc8055bcad7b5e77854694a91297f86af88391ccd4c13cdeac5a49394315a9a0120dde19f49507526c41849ffe7ad3fc6ed2019ad921d74ad8dd
|
|
7
|
+
data.tar.gz: f9b89ba96631fa69025ae5d6b52a5cc142c4026aaccb5f1397b3459a502a5189eb9e9cc48bcdd1046b7f78cdc461697b8f6e915728e73105d51907f995afcdae
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
## [Unreleased]
|
|
2
2
|
|
|
3
|
+
## [0.1.4] - 2026-03-12
|
|
4
|
+
|
|
5
|
+
- Todos os atributos e subatributos do processo agora podem ser acessados por ponto (OpenStruct), sem classes manuais.
|
|
6
|
+
|
|
7
|
+
## [0.1.3] - 2026-03-12
|
|
8
|
+
|
|
9
|
+
- Exposed object-oriented accessors for nested attributes (ex.: `processo.vara.nome`).
|
|
10
|
+
- Standardized on `andamentos` and removed the `movimentacoes` alias.
|
|
11
|
+
|
|
12
|
+
## [0.1.2] - 2026-03-12
|
|
13
|
+
|
|
14
|
+
- Added `Datajud.find` to return process data via an object-oriented API.
|
|
15
|
+
|
|
3
16
|
## [0.1.0] - 2025-11-25
|
|
4
17
|
|
|
5
18
|
- Initial release
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
|
@@ -19,19 +19,35 @@ If bundler is not being used to manage dependencies, install the gem by executin
|
|
|
19
19
|
```ruby
|
|
20
20
|
require 'datajud'
|
|
21
21
|
|
|
22
|
+
# Busca processo (tribunal pode ser explícito ou inferido)
|
|
22
23
|
processo = Datajud.find("00008323520184013202")
|
|
23
|
-
|
|
24
|
-
# Com tribunal explícito
|
|
25
24
|
processo = Datajud.find("00008323520184013202", tribunal: "trf1")
|
|
26
25
|
|
|
27
|
-
|
|
28
|
-
processo.
|
|
29
|
-
processo.
|
|
30
|
-
processo.
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
processo.
|
|
34
|
-
|
|
26
|
+
# Acessa atributos principais
|
|
27
|
+
puts processo.tribunal # Tribunal como objeto ou string
|
|
28
|
+
puts processo.numero
|
|
29
|
+
puts processo.vara
|
|
30
|
+
puts processo.situacao
|
|
31
|
+
puts processo.andamentos
|
|
32
|
+
puts processo.documentos
|
|
33
|
+
puts processo.audiencias
|
|
34
|
+
puts processo.sistema
|
|
35
|
+
puts processo.formato
|
|
36
|
+
puts processo.data_ultima_atualizacao
|
|
37
|
+
puts processo.data_ajuizamento
|
|
38
|
+
puts processo.nivel_sigilo
|
|
39
|
+
puts processo.id
|
|
40
|
+
puts processo.timestamp
|
|
41
|
+
|
|
42
|
+
# Tribunal como objeto (se disponível)
|
|
43
|
+
puts processo.tribunal.nome if processo.tribunal.respond_to?(:nome)
|
|
44
|
+
puts processo.tribunal.sigla if processo.tribunal.respond_to?(:sigla)
|
|
45
|
+
puts processo.tribunal.esfera if processo.tribunal.respond_to?(:esfera)
|
|
46
|
+
|
|
47
|
+
# Exemplos de acesso orientado a objeto
|
|
48
|
+
puts processo.vara.nome if processo.vara.respond_to?(:nome)
|
|
49
|
+
puts processo.vara.comarca.nome if processo.vara&.comarca&.respond_to?(:nome)
|
|
50
|
+
puts processo.assunto.map(&:nome) if processo.assunto
|
|
35
51
|
|
|
36
52
|
# Tabela HTML de endpoints (todos os tribunais conhecidos)
|
|
37
53
|
Datajud.endpoints_table(Datajud::TRIBUNAIS_SIGLAS)
|
|
@@ -42,6 +58,8 @@ Datajud.endpoints_table(Datajud::TRIBUNAIS_SIGLAS)
|
|
|
42
58
|
```ruby
|
|
43
59
|
# API orientada a objeto
|
|
44
60
|
processo = Datajud.find("00008323520184013202", tribunal: "trf1")
|
|
61
|
+
# ou
|
|
62
|
+
processo = Datajud.find("00008323520184013202", "trf1")
|
|
45
63
|
|
|
46
64
|
# Retorno bruto (hash)
|
|
47
65
|
resultado = Datajud.processo("00008323520184013202", tribunal: "trf1")
|
|
@@ -73,7 +91,7 @@ para evitar varrer todas as bases.
|
|
|
73
91
|
|
|
74
92
|
```ruby
|
|
75
93
|
processo = Datajud.find("0000832-35.2018.8.26.0202")
|
|
76
|
-
puts processo.tribunal
|
|
94
|
+
puts processo.tribunal.nome
|
|
77
95
|
```
|
|
78
96
|
|
|
79
97
|
> A UF da comarca é derivada localmente pelo código IBGE do município quando disponível.
|
data/examples/find.rb
CHANGED
|
@@ -11,11 +11,11 @@ begin
|
|
|
11
11
|
processo = Datajud.find("0000832-35.2018.8.26.0202")
|
|
12
12
|
|
|
13
13
|
if processo
|
|
14
|
-
puts "Tribunal: #{processo.tribunal}"
|
|
14
|
+
puts "Tribunal: #{processo.tribunal.nome}"
|
|
15
15
|
puts "Número: #{processo.numero}"
|
|
16
|
-
puts "Classe: #{processo.classe}"
|
|
16
|
+
puts "Classe: #{processo.classe.nome}"
|
|
17
17
|
puts "Partes: #{processo.partes.map(&:nome).join(', ')}"
|
|
18
|
-
puts "
|
|
18
|
+
puts "Andamentos: #{processo.andamentos.size}"
|
|
19
19
|
else
|
|
20
20
|
puts "Processo não encontrado."
|
|
21
21
|
end
|
data/lib/datajud/api_client.rb
CHANGED
|
@@ -10,20 +10,19 @@ module Datajud
|
|
|
10
10
|
# Consulta genérica: tribunal e filtros customizados
|
|
11
11
|
def self.buscar(tribunal, filtros = {})
|
|
12
12
|
endpoint = "/api_publica_#{tribunal.downcase}/_search"
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
url = URI("#{Datajud.configuration.base_endpoint}#{endpoint}")
|
|
15
14
|
http = Net::HTTP.new(url.host, url.port)
|
|
16
15
|
http.use_ssl = (url.scheme == "https")
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
http.open_timeout = Datajud.configuration.open_timeout
|
|
17
|
+
http.read_timeout = Datajud.configuration.read_timeout
|
|
19
18
|
|
|
20
19
|
request = Net::HTTP::Post.new(url)
|
|
21
|
-
|
|
20
|
+
request['Authorization'] = "APIKey #{Datajud.api_key}"
|
|
22
21
|
request['Content-Type'] = 'application/json'
|
|
23
22
|
request.body = { query: filtros }.to_json
|
|
24
23
|
|
|
25
24
|
begin
|
|
26
|
-
|
|
25
|
+
response = Datajud.request_with_retry(http, request)
|
|
27
26
|
if response.is_a?(Net::HTTPSuccess)
|
|
28
27
|
JSON.parse(response.body)
|
|
29
28
|
else
|
data/lib/datajud/client.rb
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
module Datajud
|
|
4
4
|
class Client
|
|
5
5
|
# Retorna uma instância de Datajud::Processo ou nil
|
|
6
|
-
def self.find(numero, tribunal
|
|
6
|
+
def self.find(numero, tribunal = nil, **kwargs)
|
|
7
|
+
tribunal = kwargs[:tribunal] if tribunal.nil? && kwargs.key?(:tribunal)
|
|
7
8
|
raw = Datajud.processo(numero, tribunal: tribunal)
|
|
8
9
|
return nil unless raw && raw[:processo] || raw && raw['processo']
|
|
9
10
|
|
data/lib/datajud/process.rb
CHANGED
|
@@ -6,46 +6,63 @@ module Datajud
|
|
|
6
6
|
# Representa um processo retornado pela API DataJud.
|
|
7
7
|
# Fornece acesso simples a campos comuns via métodos.
|
|
8
8
|
class Processo
|
|
9
|
-
|
|
9
|
+
def self.deep_struct(obj)
|
|
10
|
+
case obj
|
|
11
|
+
when Hash
|
|
12
|
+
OpenStruct.new(obj.transform_values { |v| deep_struct(v) })
|
|
13
|
+
when Array
|
|
14
|
+
obj.map { |v| deep_struct(v) }
|
|
15
|
+
else
|
|
16
|
+
obj
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
def municipio_ibge
|
|
20
|
+
orgao = instance_variable_get(:@orgao_julgador) || instance_variable_get(:@orgao_julgador) || self.respond_to?(:orgao_julgador) ? self.orgao_julgador : nil
|
|
21
|
+
return nil unless orgao && orgao.is_a?(Hash)
|
|
22
|
+
orgao['codigoMunicipioIBGE'] || orgao[:codigoMunicipioIBGE]
|
|
23
|
+
end
|
|
24
|
+
def comarca_ibge_codigo
|
|
25
|
+
v = instance_variable_get(:@vara)
|
|
26
|
+
return nil unless v && v.is_a?(Hash)
|
|
27
|
+
comarca = v['comarca'] || v[:comarca]
|
|
28
|
+
return nil unless comarca && comarca.is_a?(Hash)
|
|
29
|
+
comarca['codigoIbge'] || comarca[:codigoIbge] || comarca['ibge'] || comarca[:ibge]
|
|
30
|
+
end
|
|
31
|
+
attr_reader :tribunal
|
|
10
32
|
|
|
11
33
|
def initialize(raw)
|
|
12
|
-
|
|
13
|
-
@tribunal = raw[:tribunal] || raw['tribunal']
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
@data['numero'] || @data[:numero]
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def classe
|
|
22
|
-
@data['classe'] || @data[:classe]
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def partes
|
|
26
|
-
partes = @data['partes'] || @data[:partes] || []
|
|
27
|
-
partes.map do |p|
|
|
28
|
-
OpenStruct.new(
|
|
29
|
-
nome: p['nome'] || p[:nome],
|
|
30
|
-
tipo: p['tipo'] || p['tipoParte'] || p[:tipo],
|
|
31
|
-
documento: p['documento'] || p[:documento]
|
|
32
|
-
)
|
|
34
|
+
processo_hash = raw[:processo] || raw['processo'] || raw
|
|
35
|
+
@tribunal = self.class.deep_struct(raw[:tribunal] || raw['tribunal'])
|
|
36
|
+
processo_hash.each do |k, v|
|
|
37
|
+
ivar = "@#{k.to_s.gsub(/([A-Z])/, '_\\1').downcase}"
|
|
38
|
+
instance_variable_set(ivar, self.class.deep_struct(v))
|
|
39
|
+
self.class.send(:attr_reader, k.to_s.gsub(/([A-Z])/, '_\\1').downcase)
|
|
33
40
|
end
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
if processo_hash['orgaoJulgador'] || processo_hash[:orgaoJulgador]
|
|
42
|
+
orgao = processo_hash['orgaoJulgador'] || processo_hash[:orgaoJulgador]
|
|
43
|
+
instance_variable_set(:@orgao_julgador, self.class.deep_struct(orgao))
|
|
44
|
+
self.class.send(:attr_reader, :orgao_julgador)
|
|
45
|
+
if orgao['codigoMunicipioIBGE'] || orgao[:codigoMunicipioIBGE]
|
|
46
|
+
vara = instance_variable_get(:@vara)
|
|
47
|
+
if vara && vara.respond_to?(:comarca)
|
|
48
|
+
comarca = vara.comarca
|
|
49
|
+
if comarca && comarca.is_a?(OpenStruct)
|
|
50
|
+
ibge = orgao['codigoMunicipioIBGE'] || orgao[:codigoMunicipioIBGE]
|
|
51
|
+
comarca.codigoIbge = ibge if comarca.respond_to?(:codigoIbge=)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
44
55
|
end
|
|
56
|
+
|
|
45
57
|
end
|
|
46
58
|
|
|
47
|
-
def
|
|
48
|
-
|
|
59
|
+
def codigo_municipio_ibge
|
|
60
|
+
if respond_to?(:orgao_julgador) && orgao_julgador.is_a?(Hash)
|
|
61
|
+
orgao_julgador['codigoMunicipioIBGE'] || orgao_julgador[:codigoMunicipioIBGE]
|
|
62
|
+
else
|
|
63
|
+
nil
|
|
64
|
+
end
|
|
49
65
|
end
|
|
66
|
+
# Only tribunal is explicit; all other fields are dynamic.
|
|
50
67
|
end
|
|
51
68
|
end
|
data/lib/datajud/version.rb
CHANGED
data/lib/datajud.rb
CHANGED
|
@@ -320,12 +320,14 @@ module Datajud
|
|
|
320
320
|
# A implementação mais rica (retornando objetos) está em Datajud::Client
|
|
321
321
|
|
|
322
322
|
# Retorna um objeto Datajud::Processo ou nil
|
|
323
|
-
def self.find(numero, tribunal
|
|
323
|
+
def self.find(numero, tribunal = nil, **kwargs)
|
|
324
|
+
tribunal = kwargs[:tribunal] if tribunal.nil? && kwargs.key?(:tribunal)
|
|
324
325
|
Datajud::Client.find(numero, tribunal: tribunal)
|
|
325
326
|
end
|
|
326
327
|
|
|
327
328
|
# Mantém método antigo para compatibilidade (retorna hash com dados brutos)
|
|
328
|
-
def self.processo(numero, tribunal
|
|
329
|
+
def self.processo(numero, tribunal = nil, **kwargs)
|
|
330
|
+
tribunal = kwargs[:tribunal] if tribunal.nil? && kwargs.key?(:tribunal)
|
|
329
331
|
# A lógica original permanecida aqui para backward-compat
|
|
330
332
|
siglas_consulta = if tribunal
|
|
331
333
|
Array(tribunal).flatten.map { |t| t.to_s.downcase }
|
|
@@ -355,11 +357,11 @@ module Datajud
|
|
|
355
357
|
tribunal: tribunal_from(sigla, proc),
|
|
356
358
|
processo: {
|
|
357
359
|
numero: proc['numeroProcesso'],
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
360
|
+
vara: proc['orgaoJulgador'] ? {
|
|
361
|
+
nome: proc['orgaoJulgador']['nome'],
|
|
362
|
+
codigo: proc['orgaoJulgador']['codigo'],
|
|
363
|
+
comarca: comarca_from(proc['orgaoJulgador'], sigla)
|
|
364
|
+
} : nil,
|
|
363
365
|
situacao: proc['situacao'],
|
|
364
366
|
origem: proc['origem'],
|
|
365
367
|
instancia: proc['grau'],
|
|
@@ -388,7 +390,14 @@ module Datajud
|
|
|
388
390
|
status: aud['statusAudiencia'],
|
|
389
391
|
observacao: aud['observacao']
|
|
390
392
|
}
|
|
391
|
-
end
|
|
393
|
+
end,
|
|
394
|
+
sistema: proc['sistema'],
|
|
395
|
+
formato: proc['formato'],
|
|
396
|
+
dataHoraUltimaAtualizacao: proc['dataHoraUltimaAtualizacao'],
|
|
397
|
+
dataAjuizamento: proc['dataAjuizamento'],
|
|
398
|
+
nivelSigilo: proc['nivelSigilo'],
|
|
399
|
+
id: proc['id'],
|
|
400
|
+
timestamp: proc['@timestamp']
|
|
392
401
|
}
|
|
393
402
|
}
|
|
394
403
|
break
|
|
@@ -469,7 +478,8 @@ module Datajud
|
|
|
469
478
|
if comarca.is_a?(Hash)
|
|
470
479
|
nome = comarca['nome'] || comarca['descricao'] || comarca['nomeComarca']
|
|
471
480
|
uf = comarca['uf'] || comarca['siglaUf'] || comarca['estado']
|
|
472
|
-
|
|
481
|
+
hash = { nome: nome, uf: uf, tribunal: sigla.upcase }
|
|
482
|
+
return hash
|
|
473
483
|
end
|
|
474
484
|
|
|
475
485
|
nome = comarca || orgao_julgador['nome']
|
|
@@ -483,7 +493,11 @@ module Datajud
|
|
|
483
493
|
|
|
484
494
|
return nil unless nome
|
|
485
495
|
|
|
486
|
-
{ nome: nome, uf: uf, tribunal: sigla.upcase }
|
|
496
|
+
hash = { nome: nome, uf: uf, tribunal: sigla.upcase }
|
|
497
|
+
if orgao_julgador['codigoMunicipioIBGE']
|
|
498
|
+
hash[:codigoIbge] = orgao_julgador['codigoMunicipioIBGE']
|
|
499
|
+
end
|
|
500
|
+
hash
|
|
487
501
|
end
|
|
488
502
|
|
|
489
503
|
def self.ibge_uf_from(codigo_municipio)
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: datajud
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- PablUoo
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-03-
|
|
11
|
+
date: 2026-03-12 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: nokogiri
|