positiva-consultas-python-sdk 1.0.0__py3-none-any.whl
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.
- positiva/consultas/__init__.py +12 -0
- positiva/consultas/api.py +106 -0
- positiva/consultas/apis/__init__.py +4 -0
- positiva/consultas/apis/juridico360.py +169 -0
- positiva/consultas/dtos/__init__.py +40 -0
- positiva/consultas/dtos/auth.py +173 -0
- positiva/consultas/dtos/enums.py +28 -0
- positiva/consultas/dtos/juridico360.py +676 -0
- positiva/consultas/dtos/serde.py +62 -0
- positiva_consultas_python_sdk-1.0.0.dist-info/METADATA +114 -0
- positiva_consultas_python_sdk-1.0.0.dist-info/RECORD +14 -0
- positiva_consultas_python_sdk-1.0.0.dist-info/WHEEL +5 -0
- positiva_consultas_python_sdk-1.0.0.dist-info/licenses/LICENSE +5 -0
- positiva_consultas_python_sdk-1.0.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,676 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""DTOs Positiva Juridico 360.
|
|
3
|
+
|
|
4
|
+
POST /api/client/provider/juridico360
|
|
5
|
+
POST /api/client/provider/juridico360/pdf
|
|
6
|
+
"""
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from dataclasses import dataclass, field
|
|
10
|
+
from typing import Any
|
|
11
|
+
|
|
12
|
+
from positiva.consultas.dtos.enums import Juridico360ProductCode, MpKind
|
|
13
|
+
from positiva.consultas.dtos.serde import (
|
|
14
|
+
as_wire_dict,
|
|
15
|
+
digits_only,
|
|
16
|
+
from_dataclass,
|
|
17
|
+
omit_none,
|
|
18
|
+
to_wire,
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
# ---------------------------------------------------------------------------
|
|
23
|
+
# Request
|
|
24
|
+
# ---------------------------------------------------------------------------
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
@dataclass
|
|
28
|
+
class Juridico360Options:
|
|
29
|
+
"""Opcoes opcionais: paginacao (processos) ou ``kind`` (MP/BNMP)."""
|
|
30
|
+
|
|
31
|
+
cursor: str | None = None
|
|
32
|
+
page_size: int | None = None
|
|
33
|
+
kind: str | MpKind | None = None
|
|
34
|
+
|
|
35
|
+
def to_dict(self) -> dict:
|
|
36
|
+
return omit_none({
|
|
37
|
+
'cursor': self.cursor,
|
|
38
|
+
'page_size': self.page_size,
|
|
39
|
+
'kind': to_wire(self.kind),
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
@classmethod
|
|
43
|
+
def from_dict(
|
|
44
|
+
cls, data: dict | Juridico360Options | None
|
|
45
|
+
) -> Juridico360Options | None:
|
|
46
|
+
return from_dataclass(cls, data)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
@dataclass
|
|
50
|
+
class Juridico360Request:
|
|
51
|
+
document: str
|
|
52
|
+
product_code: list[str | Juridico360ProductCode]
|
|
53
|
+
options: Juridico360Options | None = None
|
|
54
|
+
|
|
55
|
+
def to_dict(self) -> dict:
|
|
56
|
+
return omit_none({
|
|
57
|
+
'document': digits_only(self.document),
|
|
58
|
+
'product_code': [to_wire(p) for p in self.product_code],
|
|
59
|
+
'options': to_wire(self.options),
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
@classmethod
|
|
63
|
+
def from_dict(
|
|
64
|
+
cls, data: dict | Juridico360Request | None
|
|
65
|
+
) -> Juridico360Request | None:
|
|
66
|
+
if data is None:
|
|
67
|
+
return None
|
|
68
|
+
if isinstance(data, cls):
|
|
69
|
+
return data
|
|
70
|
+
if not isinstance(data, dict):
|
|
71
|
+
raise TypeError(
|
|
72
|
+
f'Juridico360Request.from_dict espera dict, recebeu {type(data)!r}'
|
|
73
|
+
)
|
|
74
|
+
codes = data.get('product_code') or []
|
|
75
|
+
return cls(
|
|
76
|
+
document=str(data.get('document') or ''),
|
|
77
|
+
product_code=list(codes),
|
|
78
|
+
options=Juridico360Options.from_dict(data.get('options')),
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
# ---------------------------------------------------------------------------
|
|
83
|
+
# Shared nested models
|
|
84
|
+
# ---------------------------------------------------------------------------
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
@dataclass
|
|
88
|
+
class Identificacao:
|
|
89
|
+
valor: str | None = None
|
|
90
|
+
tipo: str | None = None
|
|
91
|
+
|
|
92
|
+
def to_dict(self) -> dict:
|
|
93
|
+
return as_wire_dict(self)
|
|
94
|
+
|
|
95
|
+
@classmethod
|
|
96
|
+
def from_dict(cls, data: dict | Identificacao | None) -> Identificacao | None:
|
|
97
|
+
return from_dataclass(cls, data)
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
@dataclass
|
|
101
|
+
class Parte:
|
|
102
|
+
papel: str | None = None
|
|
103
|
+
nome: str | None = None
|
|
104
|
+
|
|
105
|
+
def to_dict(self) -> dict:
|
|
106
|
+
return as_wire_dict(self)
|
|
107
|
+
|
|
108
|
+
@classmethod
|
|
109
|
+
def from_dict(cls, data: dict | Parte | None) -> Parte | None:
|
|
110
|
+
return from_dataclass(cls, data)
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
@dataclass
|
|
114
|
+
class Advogado:
|
|
115
|
+
nome: str | None = None
|
|
116
|
+
oab: str | None = None
|
|
117
|
+
|
|
118
|
+
def to_dict(self) -> dict:
|
|
119
|
+
return as_wire_dict(self)
|
|
120
|
+
|
|
121
|
+
@classmethod
|
|
122
|
+
def from_dict(cls, data: dict | Advogado | None) -> Advogado | None:
|
|
123
|
+
return from_dataclass(cls, data)
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
@dataclass
|
|
127
|
+
class ProcessoStatus:
|
|
128
|
+
inferido: str | None = None
|
|
129
|
+
normalizado: str | None = None
|
|
130
|
+
tribunal: str | None = None
|
|
131
|
+
data: str | None = None
|
|
132
|
+
|
|
133
|
+
def to_dict(self) -> dict:
|
|
134
|
+
return as_wire_dict(self)
|
|
135
|
+
|
|
136
|
+
@classmethod
|
|
137
|
+
def from_dict(
|
|
138
|
+
cls, data: dict | ProcessoStatus | None
|
|
139
|
+
) -> ProcessoStatus | None:
|
|
140
|
+
return from_dataclass(cls, data)
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
@dataclass
|
|
144
|
+
class PenaPrevista:
|
|
145
|
+
"""Detalhe de pena quando a API devolve objeto (comum em MP); pode ser null."""
|
|
146
|
+
|
|
147
|
+
raw: str | None = None
|
|
148
|
+
tipo_pena: str | None = None
|
|
149
|
+
min_periodo_pena_mes: int | None = None
|
|
150
|
+
max_periodo_pena_mes: int | None = None
|
|
151
|
+
|
|
152
|
+
def to_dict(self) -> dict:
|
|
153
|
+
return as_wire_dict(self)
|
|
154
|
+
|
|
155
|
+
@classmethod
|
|
156
|
+
def from_dict(cls, data: dict | PenaPrevista | None) -> PenaPrevista | None:
|
|
157
|
+
return from_dataclass(cls, data)
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
@dataclass
|
|
161
|
+
class Legislacao:
|
|
162
|
+
lei: str | None = None
|
|
163
|
+
# Homolog/docs às vezes sugerem string; retorno real usa objeto ou null.
|
|
164
|
+
pena_prevista: PenaPrevista | str | None = None
|
|
165
|
+
|
|
166
|
+
def to_dict(self) -> dict:
|
|
167
|
+
return omit_none({
|
|
168
|
+
'lei': self.lei,
|
|
169
|
+
'pena_prevista': to_wire(self.pena_prevista),
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
@classmethod
|
|
173
|
+
def from_dict(cls, data: dict | Legislacao | None) -> Legislacao | None:
|
|
174
|
+
if data is None:
|
|
175
|
+
return None
|
|
176
|
+
if isinstance(data, cls):
|
|
177
|
+
return data
|
|
178
|
+
if not isinstance(data, dict):
|
|
179
|
+
raise TypeError(f'Legislacao.from_dict espera dict, recebeu {type(data)!r}')
|
|
180
|
+
pena = data.get('pena_prevista')
|
|
181
|
+
if isinstance(pena, dict):
|
|
182
|
+
pena_parsed: PenaPrevista | str | None = PenaPrevista.from_dict(pena)
|
|
183
|
+
else:
|
|
184
|
+
pena_parsed = pena
|
|
185
|
+
return cls(lei=data.get('lei'), pena_prevista=pena_parsed)
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
@dataclass
|
|
189
|
+
class Tipificacao:
|
|
190
|
+
codigo_ocorrencia: str | None = None
|
|
191
|
+
tipo_de_ocorrencia: str | None = None
|
|
192
|
+
descricao_ocorrencia: str | None = None
|
|
193
|
+
legislacao: list[Legislacao] | None = None
|
|
194
|
+
|
|
195
|
+
def to_dict(self) -> dict:
|
|
196
|
+
return omit_none({
|
|
197
|
+
'codigo_ocorrencia': self.codigo_ocorrencia,
|
|
198
|
+
'tipo_de_ocorrencia': self.tipo_de_ocorrencia,
|
|
199
|
+
'descricao_ocorrencia': self.descricao_ocorrencia,
|
|
200
|
+
'legislacao': to_wire(self.legislacao),
|
|
201
|
+
})
|
|
202
|
+
|
|
203
|
+
@classmethod
|
|
204
|
+
def from_dict(cls, data: dict | Tipificacao | None) -> Tipificacao | None:
|
|
205
|
+
if data is None:
|
|
206
|
+
return None
|
|
207
|
+
if isinstance(data, cls):
|
|
208
|
+
return data
|
|
209
|
+
if not isinstance(data, dict):
|
|
210
|
+
raise TypeError(f'Tipificacao.from_dict espera dict, recebeu {type(data)!r}')
|
|
211
|
+
rows = data.get('legislacao')
|
|
212
|
+
return cls(
|
|
213
|
+
codigo_ocorrencia=data.get('codigo_ocorrencia'),
|
|
214
|
+
tipo_de_ocorrencia=data.get('tipo_de_ocorrencia'),
|
|
215
|
+
descricao_ocorrencia=data.get('descricao_ocorrencia'),
|
|
216
|
+
legislacao=[Legislacao.from_dict(i) for i in rows] if rows else None,
|
|
217
|
+
)
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
@dataclass
|
|
221
|
+
class ProcessoRelacionado:
|
|
222
|
+
numero_processo: str | None = None
|
|
223
|
+
|
|
224
|
+
def to_dict(self) -> dict:
|
|
225
|
+
return as_wire_dict(self)
|
|
226
|
+
|
|
227
|
+
@classmethod
|
|
228
|
+
def from_dict(
|
|
229
|
+
cls, data: dict | ProcessoRelacionado | None
|
|
230
|
+
) -> ProcessoRelacionado | None:
|
|
231
|
+
return from_dataclass(cls, data)
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
@dataclass
|
|
235
|
+
class Pagination:
|
|
236
|
+
endCursor: str | None = None
|
|
237
|
+
hasNextPage: bool | None = None
|
|
238
|
+
total: int | None = None
|
|
239
|
+
|
|
240
|
+
def to_dict(self) -> dict:
|
|
241
|
+
return as_wire_dict(self)
|
|
242
|
+
|
|
243
|
+
@classmethod
|
|
244
|
+
def from_dict(cls, data: dict | Pagination | None) -> Pagination | None:
|
|
245
|
+
return from_dataclass(cls, data)
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
@dataclass
|
|
249
|
+
class Processo:
|
|
250
|
+
tipo_processo: str | None = None
|
|
251
|
+
processo_principal: bool | None = None
|
|
252
|
+
data_ultima_atualizacao: str | None = None
|
|
253
|
+
data_andamento_mais_recente: str | None = None
|
|
254
|
+
confianca_associacao: str | None = None
|
|
255
|
+
partes: list[Parte] | None = None
|
|
256
|
+
advogados: list[Advogado] | None = None
|
|
257
|
+
valor_causa: int | float | None = None
|
|
258
|
+
status: ProcessoStatus | None = None
|
|
259
|
+
tipificacao_identificada: bool | None = None
|
|
260
|
+
tipificacao: list[Tipificacao] | None = None
|
|
261
|
+
natureza: str | None = None
|
|
262
|
+
classe_processual: str | None = None
|
|
263
|
+
assunto: str | None = None
|
|
264
|
+
ano_do_processo: str | None = None
|
|
265
|
+
ano_distribuicao: str | None = None
|
|
266
|
+
polo_passivo: bool | None = None
|
|
267
|
+
tribunal: str | None = None
|
|
268
|
+
UF: str | None = None
|
|
269
|
+
comarca: str | None = None
|
|
270
|
+
papel: str | None = None
|
|
271
|
+
forum: str | None = None
|
|
272
|
+
nome_na_capa: str | None = None
|
|
273
|
+
numero_processo: str | None = None
|
|
274
|
+
processos_relacionados: list[ProcessoRelacionado] | None = None
|
|
275
|
+
|
|
276
|
+
def to_dict(self) -> dict:
|
|
277
|
+
return omit_none({
|
|
278
|
+
'tipo_processo': self.tipo_processo,
|
|
279
|
+
'processo_principal': self.processo_principal,
|
|
280
|
+
'data_ultima_atualizacao': self.data_ultima_atualizacao,
|
|
281
|
+
'data_andamento_mais_recente': self.data_andamento_mais_recente,
|
|
282
|
+
'confianca_associacao': self.confianca_associacao,
|
|
283
|
+
'partes': to_wire(self.partes),
|
|
284
|
+
'advogados': to_wire(self.advogados),
|
|
285
|
+
'valor_causa': self.valor_causa,
|
|
286
|
+
'status': to_wire(self.status),
|
|
287
|
+
'tipificacao_identificada': self.tipificacao_identificada,
|
|
288
|
+
'tipificacao': to_wire(self.tipificacao),
|
|
289
|
+
'natureza': self.natureza,
|
|
290
|
+
'classe_processual': self.classe_processual,
|
|
291
|
+
'assunto': self.assunto,
|
|
292
|
+
'ano_do_processo': self.ano_do_processo,
|
|
293
|
+
'ano_distribuicao': self.ano_distribuicao,
|
|
294
|
+
'polo_passivo': self.polo_passivo,
|
|
295
|
+
'tribunal': self.tribunal,
|
|
296
|
+
'UF': self.UF,
|
|
297
|
+
'comarca': self.comarca,
|
|
298
|
+
'papel': self.papel,
|
|
299
|
+
'forum': self.forum,
|
|
300
|
+
'nome_na_capa': self.nome_na_capa,
|
|
301
|
+
'numero_processo': self.numero_processo,
|
|
302
|
+
'processos_relacionados': to_wire(self.processos_relacionados),
|
|
303
|
+
})
|
|
304
|
+
|
|
305
|
+
@classmethod
|
|
306
|
+
def from_dict(cls, data: dict | Processo | None) -> Processo | None:
|
|
307
|
+
if data is None:
|
|
308
|
+
return None
|
|
309
|
+
if isinstance(data, cls):
|
|
310
|
+
return data
|
|
311
|
+
if not isinstance(data, dict):
|
|
312
|
+
raise TypeError(f'Processo.from_dict espera dict, recebeu {type(data)!r}')
|
|
313
|
+
partes = data.get('partes')
|
|
314
|
+
advogados = data.get('advogados')
|
|
315
|
+
tipificacao = data.get('tipificacao')
|
|
316
|
+
relacionados = data.get('processos_relacionados')
|
|
317
|
+
return cls(
|
|
318
|
+
tipo_processo=data.get('tipo_processo'),
|
|
319
|
+
processo_principal=data.get('processo_principal'),
|
|
320
|
+
data_ultima_atualizacao=data.get('data_ultima_atualizacao'),
|
|
321
|
+
data_andamento_mais_recente=data.get('data_andamento_mais_recente'),
|
|
322
|
+
confianca_associacao=data.get('confianca_associacao'),
|
|
323
|
+
partes=[Parte.from_dict(i) for i in partes] if partes else None,
|
|
324
|
+
advogados=[Advogado.from_dict(i) for i in advogados] if advogados else None,
|
|
325
|
+
valor_causa=data.get('valor_causa'),
|
|
326
|
+
status=ProcessoStatus.from_dict(data.get('status')),
|
|
327
|
+
tipificacao_identificada=data.get('tipificacao_identificada'),
|
|
328
|
+
tipificacao=[Tipificacao.from_dict(i) for i in tipificacao] if tipificacao else None,
|
|
329
|
+
natureza=data.get('natureza'),
|
|
330
|
+
classe_processual=data.get('classe_processual'),
|
|
331
|
+
assunto=data.get('assunto'),
|
|
332
|
+
ano_do_processo=data.get('ano_do_processo'),
|
|
333
|
+
ano_distribuicao=data.get('ano_distribuicao'),
|
|
334
|
+
polo_passivo=data.get('polo_passivo'),
|
|
335
|
+
tribunal=data.get('tribunal'),
|
|
336
|
+
UF=data.get('UF'),
|
|
337
|
+
comarca=data.get('comarca'),
|
|
338
|
+
papel=data.get('papel'),
|
|
339
|
+
forum=data.get('forum'),
|
|
340
|
+
nome_na_capa=data.get('nome_na_capa'),
|
|
341
|
+
numero_processo=data.get('numero_processo'),
|
|
342
|
+
processos_relacionados=[
|
|
343
|
+
ProcessoRelacionado.from_dict(i) for i in relacionados
|
|
344
|
+
]
|
|
345
|
+
if relacionados
|
|
346
|
+
else None,
|
|
347
|
+
)
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
@dataclass
|
|
351
|
+
class MovimentacaoMp:
|
|
352
|
+
url: str | None = None
|
|
353
|
+
data: str | None = None
|
|
354
|
+
detalhe: str | None = None
|
|
355
|
+
movimento: str | None = None
|
|
356
|
+
|
|
357
|
+
def to_dict(self) -> dict:
|
|
358
|
+
return as_wire_dict(self)
|
|
359
|
+
|
|
360
|
+
@classmethod
|
|
361
|
+
def from_dict(
|
|
362
|
+
cls, data: dict | MovimentacaoMp | None
|
|
363
|
+
) -> MovimentacaoMp | None:
|
|
364
|
+
return from_dataclass(cls, data)
|
|
365
|
+
|
|
366
|
+
|
|
367
|
+
@dataclass
|
|
368
|
+
class RegistroMp:
|
|
369
|
+
sigla: str | None = None
|
|
370
|
+
confianca_associacao: str | None = None
|
|
371
|
+
papel: str | None = None
|
|
372
|
+
assunto: str | None = None
|
|
373
|
+
unidade_mp: str | None = None
|
|
374
|
+
numero_mp: str | None = None
|
|
375
|
+
numero_processo: str | None = None
|
|
376
|
+
tipo_procedimento: str | None = None
|
|
377
|
+
situacao: str | None = None
|
|
378
|
+
ano_do_inquerito: str | None = None
|
|
379
|
+
uf: str | None = None
|
|
380
|
+
autos: str | None = None
|
|
381
|
+
tipificacao: list[Tipificacao] | None = None
|
|
382
|
+
tipificacao_identificada: bool | None = None
|
|
383
|
+
movimentacoes: list[MovimentacaoMp] | None = None
|
|
384
|
+
|
|
385
|
+
def to_dict(self) -> dict:
|
|
386
|
+
return omit_none({
|
|
387
|
+
'sigla': self.sigla,
|
|
388
|
+
'confianca_associacao': self.confianca_associacao,
|
|
389
|
+
'papel': self.papel,
|
|
390
|
+
'assunto': self.assunto,
|
|
391
|
+
'unidade_mp': self.unidade_mp,
|
|
392
|
+
'numero_mp': self.numero_mp,
|
|
393
|
+
'numero_processo': self.numero_processo,
|
|
394
|
+
'tipo_procedimento': self.tipo_procedimento,
|
|
395
|
+
'situacao': self.situacao,
|
|
396
|
+
'ano_do_inquerito': self.ano_do_inquerito,
|
|
397
|
+
'uf': self.uf,
|
|
398
|
+
'autos': self.autos,
|
|
399
|
+
'tipificacao': to_wire(self.tipificacao),
|
|
400
|
+
'tipificacao_identificada': self.tipificacao_identificada,
|
|
401
|
+
'movimentacoes': to_wire(self.movimentacoes),
|
|
402
|
+
})
|
|
403
|
+
|
|
404
|
+
@classmethod
|
|
405
|
+
def from_dict(cls, data: dict | RegistroMp | None) -> RegistroMp | None:
|
|
406
|
+
if data is None:
|
|
407
|
+
return None
|
|
408
|
+
if isinstance(data, cls):
|
|
409
|
+
return data
|
|
410
|
+
if not isinstance(data, dict):
|
|
411
|
+
raise TypeError(f'RegistroMp.from_dict espera dict, recebeu {type(data)!r}')
|
|
412
|
+
tipificacao = data.get('tipificacao')
|
|
413
|
+
movimentacoes = data.get('movimentacoes')
|
|
414
|
+
return cls(
|
|
415
|
+
sigla=data.get('sigla'),
|
|
416
|
+
confianca_associacao=data.get('confianca_associacao'),
|
|
417
|
+
papel=data.get('papel'),
|
|
418
|
+
assunto=data.get('assunto'),
|
|
419
|
+
unidade_mp=data.get('unidade_mp'),
|
|
420
|
+
numero_mp=data.get('numero_mp'),
|
|
421
|
+
numero_processo=data.get('numero_processo'),
|
|
422
|
+
tipo_procedimento=data.get('tipo_procedimento'),
|
|
423
|
+
situacao=data.get('situacao'),
|
|
424
|
+
ano_do_inquerito=data.get('ano_do_inquerito'),
|
|
425
|
+
uf=data.get('uf'),
|
|
426
|
+
autos=data.get('autos'),
|
|
427
|
+
tipificacao=[Tipificacao.from_dict(i) for i in tipificacao] if tipificacao else None,
|
|
428
|
+
tipificacao_identificada=data.get('tipificacao_identificada'),
|
|
429
|
+
movimentacoes=[MovimentacaoMp.from_dict(i) for i in movimentacoes]
|
|
430
|
+
if movimentacoes
|
|
431
|
+
else None,
|
|
432
|
+
)
|
|
433
|
+
|
|
434
|
+
|
|
435
|
+
@dataclass
|
|
436
|
+
class MandadoBnmp:
|
|
437
|
+
confianca_associacao: str | None = None
|
|
438
|
+
situacao: str | None = None
|
|
439
|
+
especie_prisao: str | None = None
|
|
440
|
+
data_expedicao: str | None = None
|
|
441
|
+
data_validade: str | None = None
|
|
442
|
+
tipificacao: list[Tipificacao] | None = None
|
|
443
|
+
tipificacao_identificada: bool | None = None
|
|
444
|
+
numero_bnmp: str | None = None
|
|
445
|
+
numero_processo: str | None = None
|
|
446
|
+
local_processo: str | None = None
|
|
447
|
+
tipo_processo: str | None = None
|
|
448
|
+
|
|
449
|
+
def to_dict(self) -> dict:
|
|
450
|
+
return omit_none({
|
|
451
|
+
'confianca_associacao': self.confianca_associacao,
|
|
452
|
+
'situacao': self.situacao,
|
|
453
|
+
'especie_prisao': self.especie_prisao,
|
|
454
|
+
'data_expedicao': self.data_expedicao,
|
|
455
|
+
'data_validade': self.data_validade,
|
|
456
|
+
'tipificacao': to_wire(self.tipificacao),
|
|
457
|
+
'tipificacao_identificada': self.tipificacao_identificada,
|
|
458
|
+
'numero_bnmp': self.numero_bnmp,
|
|
459
|
+
'numero_processo': self.numero_processo,
|
|
460
|
+
'local_processo': self.local_processo,
|
|
461
|
+
'tipo_processo': self.tipo_processo,
|
|
462
|
+
})
|
|
463
|
+
|
|
464
|
+
@classmethod
|
|
465
|
+
def from_dict(cls, data: dict | MandadoBnmp | None) -> MandadoBnmp | None:
|
|
466
|
+
if data is None:
|
|
467
|
+
return None
|
|
468
|
+
if isinstance(data, cls):
|
|
469
|
+
return data
|
|
470
|
+
if not isinstance(data, dict):
|
|
471
|
+
raise TypeError(f'MandadoBnmp.from_dict espera dict, recebeu {type(data)!r}')
|
|
472
|
+
tipificacao = data.get('tipificacao')
|
|
473
|
+
return cls(
|
|
474
|
+
confianca_associacao=data.get('confianca_associacao'),
|
|
475
|
+
situacao=data.get('situacao'),
|
|
476
|
+
especie_prisao=data.get('especie_prisao'),
|
|
477
|
+
data_expedicao=data.get('data_expedicao'),
|
|
478
|
+
data_validade=data.get('data_validade'),
|
|
479
|
+
tipificacao=[Tipificacao.from_dict(i) for i in tipificacao] if tipificacao else None,
|
|
480
|
+
tipificacao_identificada=data.get('tipificacao_identificada'),
|
|
481
|
+
numero_bnmp=data.get('numero_bnmp'),
|
|
482
|
+
numero_processo=data.get('numero_processo'),
|
|
483
|
+
local_processo=data.get('local_processo'),
|
|
484
|
+
tipo_processo=data.get('tipo_processo'),
|
|
485
|
+
)
|
|
486
|
+
|
|
487
|
+
|
|
488
|
+
@dataclass
|
|
489
|
+
class EmpregadorIrregular:
|
|
490
|
+
confianca_associacao: str | None = None
|
|
491
|
+
sigla: str | None = None
|
|
492
|
+
uf: str | None = None
|
|
493
|
+
estabelecimento: str | None = None
|
|
494
|
+
cnae: str | None = None
|
|
495
|
+
ano_acao_fiscal: str | None = None
|
|
496
|
+
data_decisao_administrativa: str | None = None
|
|
497
|
+
data_inclusao: str | None = None
|
|
498
|
+
data_publicacao: str | None = None
|
|
499
|
+
quantidade_trabalhadores_envolvidos: int | None = None
|
|
500
|
+
|
|
501
|
+
def to_dict(self) -> dict:
|
|
502
|
+
return as_wire_dict(self)
|
|
503
|
+
|
|
504
|
+
@classmethod
|
|
505
|
+
def from_dict(
|
|
506
|
+
cls, data: dict | EmpregadorIrregular | None
|
|
507
|
+
) -> EmpregadorIrregular | None:
|
|
508
|
+
return from_dataclass(cls, data)
|
|
509
|
+
|
|
510
|
+
|
|
511
|
+
# ---------------------------------------------------------------------------
|
|
512
|
+
# Product data envelopes
|
|
513
|
+
# ---------------------------------------------------------------------------
|
|
514
|
+
|
|
515
|
+
|
|
516
|
+
@dataclass
|
|
517
|
+
class Juridico360ProductData:
|
|
518
|
+
"""Payload tipado de ``results.<PRODUTO>.data`` (campos conforme produto)."""
|
|
519
|
+
|
|
520
|
+
nome: str | None = None
|
|
521
|
+
identificacao: Identificacao | None = None
|
|
522
|
+
processos: list[Processo] | None = None
|
|
523
|
+
pagination: Pagination | None = None
|
|
524
|
+
mp: list[RegistroMp] | None = None
|
|
525
|
+
mandados: list[MandadoBnmp] | None = None
|
|
526
|
+
empregadores: list[EmpregadorIrregular] | None = None
|
|
527
|
+
raw: dict[str, Any] | None = field(default=None, repr=False)
|
|
528
|
+
|
|
529
|
+
def to_dict(self) -> dict:
|
|
530
|
+
return omit_none({
|
|
531
|
+
'nome': self.nome,
|
|
532
|
+
'identificacao': to_wire(self.identificacao),
|
|
533
|
+
'processos': to_wire(self.processos),
|
|
534
|
+
'pagination': to_wire(self.pagination),
|
|
535
|
+
'mp': to_wire(self.mp),
|
|
536
|
+
'mandados': to_wire(self.mandados),
|
|
537
|
+
'empregadores': to_wire(self.empregadores),
|
|
538
|
+
})
|
|
539
|
+
|
|
540
|
+
@classmethod
|
|
541
|
+
def from_dict(
|
|
542
|
+
cls, data: dict | Juridico360ProductData | None
|
|
543
|
+
) -> Juridico360ProductData | None:
|
|
544
|
+
if data is None:
|
|
545
|
+
return None
|
|
546
|
+
if isinstance(data, cls):
|
|
547
|
+
return data
|
|
548
|
+
if not isinstance(data, dict):
|
|
549
|
+
raise TypeError(
|
|
550
|
+
f'Juridico360ProductData.from_dict espera dict, recebeu {type(data)!r}'
|
|
551
|
+
)
|
|
552
|
+
processos = data.get('processos')
|
|
553
|
+
mp = data.get('mp')
|
|
554
|
+
mandados = data.get('mandados')
|
|
555
|
+
empregadores = data.get('empregadores')
|
|
556
|
+
return cls(
|
|
557
|
+
nome=data.get('nome'),
|
|
558
|
+
identificacao=Identificacao.from_dict(data.get('identificacao')),
|
|
559
|
+
processos=[Processo.from_dict(i) for i in processos] if processos else None,
|
|
560
|
+
pagination=Pagination.from_dict(data.get('pagination')),
|
|
561
|
+
mp=[RegistroMp.from_dict(i) for i in mp] if mp else None,
|
|
562
|
+
mandados=[MandadoBnmp.from_dict(i) for i in mandados] if mandados else None,
|
|
563
|
+
empregadores=[EmpregadorIrregular.from_dict(i) for i in empregadores]
|
|
564
|
+
if empregadores
|
|
565
|
+
else None,
|
|
566
|
+
raw=dict(data),
|
|
567
|
+
)
|
|
568
|
+
|
|
569
|
+
|
|
570
|
+
@dataclass
|
|
571
|
+
class Juridico360ProductResult:
|
|
572
|
+
success: bool | None = None
|
|
573
|
+
data: Juridico360ProductData | None = None
|
|
574
|
+
error: str | None = None
|
|
575
|
+
message: str | None = None
|
|
576
|
+
|
|
577
|
+
def to_dict(self) -> dict:
|
|
578
|
+
return omit_none({
|
|
579
|
+
'success': self.success,
|
|
580
|
+
'data': to_wire(self.data),
|
|
581
|
+
'error': self.error,
|
|
582
|
+
'message': self.message,
|
|
583
|
+
})
|
|
584
|
+
|
|
585
|
+
@classmethod
|
|
586
|
+
def from_dict(
|
|
587
|
+
cls, data: dict | Juridico360ProductResult | None
|
|
588
|
+
) -> Juridico360ProductResult | None:
|
|
589
|
+
if data is None:
|
|
590
|
+
return None
|
|
591
|
+
if isinstance(data, cls):
|
|
592
|
+
return data
|
|
593
|
+
if not isinstance(data, dict):
|
|
594
|
+
raise TypeError(
|
|
595
|
+
f'Juridico360ProductResult.from_dict espera dict, recebeu {type(data)!r}'
|
|
596
|
+
)
|
|
597
|
+
return cls(
|
|
598
|
+
success=data.get('success'),
|
|
599
|
+
data=Juridico360ProductData.from_dict(data.get('data')),
|
|
600
|
+
error=data.get('error'),
|
|
601
|
+
message=data.get('message'),
|
|
602
|
+
)
|
|
603
|
+
|
|
604
|
+
|
|
605
|
+
@dataclass
|
|
606
|
+
class Juridico360Response:
|
|
607
|
+
success: bool | None = None
|
|
608
|
+
document: str | None = None
|
|
609
|
+
provider: str | None = None
|
|
610
|
+
query_date: str | None = None
|
|
611
|
+
results: dict[str, Juridico360ProductResult] | None = None
|
|
612
|
+
|
|
613
|
+
def to_dict(self) -> dict:
|
|
614
|
+
return omit_none({
|
|
615
|
+
'success': self.success,
|
|
616
|
+
'document': self.document,
|
|
617
|
+
'provider': self.provider,
|
|
618
|
+
'query_date': self.query_date,
|
|
619
|
+
'results': {
|
|
620
|
+
key: to_wire(value) for key, value in (self.results or {}).items()
|
|
621
|
+
}
|
|
622
|
+
if self.results is not None
|
|
623
|
+
else None,
|
|
624
|
+
})
|
|
625
|
+
|
|
626
|
+
def get_product(
|
|
627
|
+
self, code: str | Juridico360ProductCode
|
|
628
|
+
) -> Juridico360ProductResult | None:
|
|
629
|
+
if not self.results:
|
|
630
|
+
return None
|
|
631
|
+
return self.results.get(to_wire(code))
|
|
632
|
+
|
|
633
|
+
@classmethod
|
|
634
|
+
def from_dict(
|
|
635
|
+
cls, data: dict | Juridico360Response | None
|
|
636
|
+
) -> Juridico360Response | None:
|
|
637
|
+
if data is None:
|
|
638
|
+
return None
|
|
639
|
+
if isinstance(data, cls):
|
|
640
|
+
return data
|
|
641
|
+
if not isinstance(data, dict):
|
|
642
|
+
raise TypeError(
|
|
643
|
+
f'Juridico360Response.from_dict espera dict, recebeu {type(data)!r}'
|
|
644
|
+
)
|
|
645
|
+
raw_results = data.get('results') or {}
|
|
646
|
+
results = {
|
|
647
|
+
key: Juridico360ProductResult.from_dict(value)
|
|
648
|
+
for key, value in raw_results.items()
|
|
649
|
+
if isinstance(value, dict)
|
|
650
|
+
}
|
|
651
|
+
return cls(
|
|
652
|
+
success=data.get('success'),
|
|
653
|
+
document=data.get('document'),
|
|
654
|
+
provider=data.get('provider'),
|
|
655
|
+
query_date=data.get('query_date'),
|
|
656
|
+
results=results,
|
|
657
|
+
)
|
|
658
|
+
|
|
659
|
+
|
|
660
|
+
@dataclass
|
|
661
|
+
class Juridico360PdfResponse:
|
|
662
|
+
success: bool | None = None
|
|
663
|
+
document: str | None = None
|
|
664
|
+
provider: str | None = None
|
|
665
|
+
query_date: str | None = None
|
|
666
|
+
mime_type: str | None = None
|
|
667
|
+
pdf_base64: str | None = None
|
|
668
|
+
|
|
669
|
+
def to_dict(self) -> dict:
|
|
670
|
+
return as_wire_dict(self)
|
|
671
|
+
|
|
672
|
+
@classmethod
|
|
673
|
+
def from_dict(
|
|
674
|
+
cls, data: dict | Juridico360PdfResponse | None
|
|
675
|
+
) -> Juridico360PdfResponse | None:
|
|
676
|
+
return from_dataclass(cls, data)
|