Metadata-Version: 2.4
Name: libretificacaotjcore
Version: 0.1.97
Summary: Biblioteca para centralizar conexao com filas no rabbit e banco de dados no mongodb para os servicos de retificacao da TJ
Author-email: Jhonatan Azevedo <dev.azevedo@outlook.com>
Project-URL: Homepage, https://github.com/seu-usuario/libretificacaotjcore
Project-URL: Issues, https://github.com/seu-usuario/libretificacaotjcore/issues
Project-URL: Repository, https://github.com/seu-usuario/libretificacaotjcore
Keywords: tj,tributo justo,retificação,automação,pydantic,rabbitmq,boto3,motor
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Topic :: Software Development :: Libraries
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Operating System :: OS Independent
Requires-Python: >=3.13
Description-Content-Type: text/markdown
Requires-Dist: aio-pika>=9.5.7
Requires-Dist: aiofiles>=24.1.0
Requires-Dist: boto3>=1.39.16
Requires-Dist: cryptography>=45.0.6
Requires-Dist: httpx>=0.28.1
Requires-Dist: motor>=3.7.1
Requires-Dist: pika>=1.3.2
Requires-Dist: py7zr>=1.0.0
Requires-Dist: pydantic>=2.11.7

# 🛠️ LIBRETIFICACAOTJCORE

Biblioteca central (core) dos serviços de **retificação eSOCIAL da TJ / Tributo Justo**.
Não é um serviço executável: é um pacote Python importado pelos microserviços de retificação,
fornecendo acesso a banco (MongoDB), mensageria (RabbitMQ), armazenamento (S3), tratativas de
arquivos, criptografia e os DTOs/Enums comuns ao domínio.

## 📝 O que ela faz

- Centraliza a conexão com filas no **RabbitMQ** e o consumo/publicação de mensagens
- Centraliza a conexão com o **MongoDB** e expõe repositórios por agregado de domínio
- Centraliza operações de criação, leitura e atualização de **arquivos** e **protocolos**
- Disponibiliza serviços para tratativa de arquivos (ZIP), **S3** e **criptografia de senha**
- Disponibiliza **DTOs** e **Enums** comuns a todos os serviços de retificação

## 🧩 Arquitetura

A lib é organizada em quatro categorias de módulos sob `libretificacaotjcore/`:

| Categoria | Pasta | Responsabilidade | Detalhe |
|-----------|-------|------------------|---------|
| Serviços | `services/` | Integrações externas: RabbitMQ, S3, HTTP, arquivos, cripto | [docs/services.md](docs/services.md) |
| Banco | `database/` | Conexão MongoDB e repositórios por agregado | [docs/database.md](docs/database.md) |
| DTOs | `dtos/` | Modelos Pydantic com validação | [docs/dtos-enums.md](docs/dtos-enums.md) |
| Enums | `enums/` | Eventos eSOCIAL e fases da retificação | [docs/dtos-enums.md](docs/dtos-enums.md) |

Como o pacote roda, o padrão async-first e o fluxo das 27 fases de retificação estão em
**[docs/arquitetura.md](docs/arquitetura.md)**.

## 📦 Stack

Pacote `libretificacaotjcore` (v0.1.95) · Python **>=3.13** · build via `setuptools`.

| Dependência | Uso |
|-------------|-----|
| `motor` | Driver MongoDB assíncrono |
| `aio-pika` / `pika` | Cliente RabbitMQ (async / sync) |
| `boto3` | Operações no AWS S3 |
| `httpx` | Cliente HTTP assíncrono |
| `aiofiles` | I/O de arquivos assíncrono |
| `cryptography` | Criptografia de senha (Fernet) |
| `pydantic` | Validação e serialização dos DTOs |
| `py7zr` | Suporte 7zip |

## 🚀 Exemplo rápido

A lib recebe todas as credenciais via construtor — não lê `.env` próprio. Um serviço consumidor
tipicamente conecta no banco e na fila e processa cada mensagem com um DTO:

```python
from libretificacaotjcore.database.config_db import ConfigDb
from libretificacaotjcore.database.arquivo_repository import ArquivoRepository
from libretificacaotjcore.services.rabbitmq_consumer import RabbitMQConsumer
from libretificacaotjcore.dtos.solicitacao_dto import SolicitacaoDTO

config_db = ConfigDb(host="localhost", user="user", password="pwd", port=27017, db_name="retificacoes")
db = await config_db.get_db()                 # cria schema/índices e retorna o banco
arquivo_repo = ArquivoRepository(db)

consumer = RabbitMQConsumer(host="localhost", queue="retificacoes", username="guest", password="guest")
await consumer.connect()

async def processar(mensagem: dict) -> bool:
    solicitacao = SolicitacaoDTO(**mensagem)  # valida o payload da fila
    arquivos = await arquivo_repo.buscar_por_cnpj(solicitacao.Cnpj)
    ...
    return True                               # retornar False sinaliza falha de processamento

await consumer.start_consuming(processar)     # loop infinito com auto-reconexão
```

## ⚙️ Configuração

É necessário ter o [uv (astral)](https://docs.astral.sh/uv/getting-started/installation/) instalado.

Com o UV instalado, execute o comando abaixo para sincronizar as dependências:

```bash
uv sync
```

## 📺 Como publicar?

Para publicar a lib, gere o build:

```bash
uv build
```

e depois faça o upload:

```bash
twine upload dist/*
```

Obs: é necessário informar o token do PyPI para que o comando funcione.

## 📚 Documentação

- [Arquitetura e fluxo de retificação](docs/arquitetura.md)
- [Serviços](docs/services.md)
- [Banco de dados e repositórios](docs/database.md)
- [DTOs e Enums](docs/dtos-enums.md)
