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.
@@ -0,0 +1,62 @@
1
+ # -*- coding: utf-8 -*-
2
+ """Helpers de serialização DTO ↔ wire JSON (compartilhados entre endpoints)."""
3
+ from __future__ import annotations
4
+
5
+ from dataclasses import asdict, fields, is_dataclass
6
+ from enum import Enum
7
+ from typing import Any, Type, TypeVar
8
+
9
+ T = TypeVar('T')
10
+
11
+
12
+ def omit_none(data: dict) -> dict:
13
+ return {k: v for k, v in data.items() if v is not None}
14
+
15
+
16
+ def to_wire(value: Any) -> Any:
17
+ if value is None:
18
+ return None
19
+ if isinstance(value, Enum):
20
+ return value.value
21
+ if is_dataclass(value) and not isinstance(value, type):
22
+ if hasattr(value, 'to_dict'):
23
+ return value.to_dict()
24
+ return omit_none({k: to_wire(v) for k, v in asdict(value).items()})
25
+ if isinstance(value, list):
26
+ return [to_wire(i) for i in value]
27
+ if isinstance(value, dict):
28
+ return {k: to_wire(v) for k, v in value.items() if v is not None}
29
+ return value
30
+
31
+
32
+ def as_wire_dict(instance: Any) -> dict:
33
+ return omit_none({k: to_wire(v) for k, v in asdict(instance).items()})
34
+
35
+
36
+ def from_dataclass(
37
+ cls: Type[T],
38
+ data: dict | T | None,
39
+ *,
40
+ field_aliases: dict[str, str] | None = None,
41
+ ) -> T | None:
42
+ """Instancia dataclass a partir de dict; ``field_aliases`` mapeia attr→wire."""
43
+ if data is None:
44
+ return None
45
+ if isinstance(data, cls):
46
+ return data
47
+ if not isinstance(data, dict):
48
+ raise TypeError(f'{cls.__name__}.from_dict espera dict, recebeu {type(data)!r}')
49
+ aliases = field_aliases or {}
50
+ kwargs: dict[str, Any] = {}
51
+ for f in fields(cls):
52
+ raw = data.get(f.name)
53
+ if raw is None and f.name in aliases:
54
+ raw = data.get(aliases[f.name])
55
+ kwargs[f.name] = raw
56
+ return cls(**kwargs)
57
+
58
+
59
+ def digits_only(value: str | None) -> str:
60
+ if value is None:
61
+ return ''
62
+ return ''.join(ch for ch in str(value) if ch.isdigit())
@@ -0,0 +1,114 @@
1
+ Metadata-Version: 2.4
2
+ Name: positiva-consultas-python-sdk
3
+ Version: 1.0.0
4
+ Summary: Client HTTP de comunicacao com a API da Positiva Consultas (PositivaConnect)
5
+ Author-email: Filipe Coelho <filipe@fmconsult.com.br>
6
+ License: MIT License
7
+
8
+ Copyright (c) 2026 Seu Nome
9
+
10
+ Permission is hereby granted, free of charge, to any person obtaining a copy...
11
+
12
+ Project-URL: Homepage, https://github.com/FMConsult/positiva-consultas-python-sdk
13
+ Project-URL: Bug Tracker, https://github.com/FMConsult/positiva-consultas-python-sdk/issues
14
+ Project-URL: Documentation, https://positivaconnect.positivaconsultas.com.br/developers/documentation
15
+ Keywords: sdk,api,positiva,consultas,juridico360
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: License :: OSI Approved :: MIT License
18
+ Classifier: Operating System :: OS Independent
19
+ Requires-Python: >=3.11
20
+ Description-Content-Type: text/markdown
21
+ License-File: LICENSE
22
+ Provides-Extra: dev
23
+ Requires-Dist: pytest; extra == "dev"
24
+ Dynamic: license-file
25
+
26
+ # positiva-consultas-python-sdk
27
+
28
+ Client HTTP Python para a [API Positiva Consultas (PositivaConnect)](https://positivaconnect.positivaconsultas.com.br/developers/documentation).
29
+
30
+ Escopo inicial:
31
+
32
+ - Autenticacao OAuth 2.0 Client Credentials (`POST /client/token`)
33
+ - Positiva Juridico 360 (`POST /api/client/provider/juridico360` e `/pdf`)
34
+
35
+ ## Instalacao
36
+
37
+ ```bash
38
+ pip install positiva-consultas-python-sdk
39
+ ```
40
+
41
+ Requer Python >= 3.11 e o ecossistema `fmconsult` (`ApiBase`).
42
+
43
+ ## Credenciais
44
+
45
+ Configure as variaveis de ambiente:
46
+
47
+ ```bash
48
+ export positiva.consultas.api.client_id="seu_client_id"
49
+ export positiva.consultas.api.client_secret="seu_client_secret"
50
+ ```
51
+
52
+ ## Uso
53
+
54
+ ```python
55
+ from positiva.consultas import Juridico360Api, Juridico360ProductCode
56
+ from positiva.consultas.dtos.juridico360 import Juridico360Request
57
+
58
+ api = Juridico360Api() # autentica automaticamente via /client/token
59
+
60
+ # Consulta processual (um ou mais produtos)
61
+ response = api.consultar(
62
+ Juridico360Request(
63
+ document="11111111111",
64
+ product_code=[
65
+ Juridico360ProductCode.CRIMINAL,
66
+ Juridico360ProductCode.CIVIL,
67
+ ],
68
+ )
69
+ )
70
+
71
+ print(response.success, response.query_date)
72
+ criminal = response.results.get("CRIMINAL")
73
+ if criminal and criminal.success and criminal.data:
74
+ print(criminal.data.nome, len(criminal.data.processos or []))
75
+
76
+ # PDF do relatorio (Base64)
77
+ pdf = api.gerar_pdf(
78
+ document="11111111111",
79
+ product_code=["CRIMINAL", "CIVIL"],
80
+ )
81
+ print(pdf.mime_type, len(pdf.pdf_base64 or ""))
82
+ ```
83
+
84
+ ### Autenticacao utilitaria
85
+
86
+ ```python
87
+ from positiva.consultas import PositivaConsultasApi
88
+
89
+ api = PositivaConsultasApi()
90
+ me = api.me()
91
+ print(me.client.name, me.client.cnpj)
92
+
93
+ api.refresh() # renova o Bearer
94
+ api.logout() # invalida o token atual
95
+ ```
96
+
97
+ ## Produtos Juridico 360
98
+
99
+ | Codigo | Descricao |
100
+ | ------ | --------- |
101
+ | `CRIMINAL` | Processos criminais |
102
+ | `CIVIL` | Processos civis |
103
+ | `TRABALHISTA` | Processos trabalhistas |
104
+ | `MP` | Registros do Ministerio Publico |
105
+ | `BNMP` | Banco Nacional de Mandados de Prisao |
106
+ | `EMPREGADOR_IRREGULAR` | Empregadores irregulares |
107
+
108
+ Homologacao (credencial em ambiente `homolog`): use documentos de teste `11111111111` … `55555555555` — a API devolve dados ficticios determinísticos.
109
+
110
+ ## Documentacao oficial
111
+
112
+ - [Visao geral](https://positivaconnect.positivaconsultas.com.br/developers/documentation)
113
+ - [Authentication](https://positivaconnect.positivaconsultas.com.br/developers/docs/authentication)
114
+ - [Juridico 360](https://positivaconnect.positivaconsultas.com.br/developers/docs/providers/juridico360)
@@ -0,0 +1,14 @@
1
+ positiva/consultas/__init__.py,sha256=iuBHI5BUUHtolrdtluwIhtgQLaJAT29n9edX6AthmWk,383
2
+ positiva/consultas/api.py,sha256=SWOAHF2P-aoaVO1Zdw7ErOcGH4yb8f2lt1ddp3U05uw,3919
3
+ positiva/consultas/apis/__init__.py,sha256=bL1FYqSlQP_MPExb1_d0RxvOYBipFVwdaoPw-ujQwc8,117
4
+ positiva/consultas/apis/juridico360.py,sha256=CbCZBBV3N4QfifFkQvBM2wVUMSHuA-3VPs954P_wUZQ,5191
5
+ positiva/consultas/dtos/__init__.py,sha256=POVABXOZc-gw9m951Lqa9V1WWV1OsV3bsiSNFHAjJ-8,887
6
+ positiva/consultas/dtos/auth.py,sha256=fizdxWy2q6OWKpYorGjt8Ux4b1ydLR76SYRDhZv0370,5202
7
+ positiva/consultas/dtos/enums.py,sha256=_moUPCbd9iCgCSZeYHzZuM-g6FlXOpuHjbZIg4-rfeU,572
8
+ positiva/consultas/dtos/juridico360.py,sha256=mCtlgYetRRAE8T61is9QyBKVGfyw0sy7VhTQGNo-t3o,20619
9
+ positiva/consultas/dtos/serde.py,sha256=v3yxSD5ED3GVH9guWWPCU9kR2BlXQKoPJxuG_6_ajV0,1775
10
+ positiva_consultas_python_sdk-1.0.0.dist-info/licenses/LICENSE,sha256=o7bMpHmYZ2W4kMfLkotLUyabpLvBUznnJEJ_HIpT4SM,122
11
+ positiva_consultas_python_sdk-1.0.0.dist-info/METADATA,sha256=_OAjdBLaKqZ9RM_gFnrYsQf11dxPKcLXABSMf91Ghes,3573
12
+ positiva_consultas_python_sdk-1.0.0.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
13
+ positiva_consultas_python_sdk-1.0.0.dist-info/top_level.txt,sha256=pFUeLZto40ufALf6UXpULcExwVHDGXp-QanGTb3PUps,9
14
+ positiva_consultas_python_sdk-1.0.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (84.0.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,5 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Seu Nome
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy...