libretificacaotjcore 0.1.24__py3-none-any.whl → 0.1.26__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.

Potentially problematic release.


This version of libretificacaotjcore might be problematic. Click here for more details.

@@ -1,6 +1,4 @@
1
- from enum import unique
2
1
  import motor.motor_asyncio
3
- from datetime import datetime
4
2
 
5
3
  class ConfigDb:
6
4
  def __init__(self, host: str, user: str, password: str, port: int, db_name: str):
@@ -0,0 +1,20 @@
1
+ from ast import Dict
2
+
3
+ from pydantic import BaseModel, Field
4
+
5
+
6
+ class ArquivoDTO(BaseModel):
7
+ SolicitacaoId: int = Field(..., description="ID da solicitação")
8
+ Cpf: str = Field(..., description="CPF do contribuinte")
9
+ S1200: list[Dict] | None = Field(None, description="Lista de arquivos S-1200")
10
+ S1210: list[Dict] | None = Field(None, description="Lista de arquivos S-1210")
11
+ S2200: list[Dict] | None = Field(None, description="Lista de arquivos S-2200")
12
+ S2299: list[Dict] | None = Field(None, description="Lista de arquivos S-2299")
13
+ IdeEmpregador: Dict = Field(..., description="Identificação do empregador")
14
+ Cnpj: str = Field(..., description="CNPJ do empregador")
15
+ DataInicio: str = Field(..., description="Data de início no formato YYYY-MM-DD")
16
+ DataFim: str = Field(..., description="Data de fim no formato YYYY-MM-DD")
17
+ CertificadoId: int = Field(..., description="ID do certificado")
18
+ DataProcessamento: str = Field(
19
+ ..., description="Data de processamento no formato YYYY-MM-DD"
20
+ )
@@ -1,63 +1,69 @@
1
- from datetime import datetime, date, timedelta
2
1
  import re
2
+ from datetime import date, datetime, timedelta
3
+
3
4
  from pydantic import BaseModel, Field, field_validator
4
5
 
5
6
  from libretificacaotjcore.enums.e_eventos import EEventos
6
7
 
7
8
 
8
9
  class SolicitacaoDTO(BaseModel):
9
- solicitacaoId: int = Field(..., description="ID da solicitação")
10
- cnpj: str = Field(..., description="CNPJ da empresa")
11
- dataInicio: date = Field(..., description="Data de início no formato YYYY-MM-DD")
12
- dataFim: date = Field(..., description="Data de fim no formato YYYY-MM-DD")
13
- certificadoId: int = Field(..., description="ID do certificado")
14
-
15
- # Validar e transformar solicitacaoId
16
- @field_validator('solicitacaoId')
10
+ SolicitacaoId: int = Field(..., description="ID da solicitação")
11
+ Cnpj: str = Field(..., description="CNPJ da empresa")
12
+ DataInicio: date = Field(..., description="Data de início no formato YYYY-MM-DD")
13
+ DataFim: date = Field(..., description="Data de fim no formato YYYY-MM-DD")
14
+ CertificadoId: int = Field(..., description="ID do certificado")
15
+ Evento: str | None = Field(None, description="Evento de retificação")
16
+
17
+ @field_validator("SolicitacaoId")
17
18
  @classmethod
18
19
  def validar_solicitacao_id(cls, v: int) -> int:
19
20
  if v <= 0:
20
21
  raise ValueError("O solicitacaoId deve ser um inteiro positivo.")
21
22
  return v
22
23
 
23
- # Validar e transformar certificadoId
24
- @field_validator('certificadoId')
24
+ @field_validator("CertificadoId")
25
25
  @classmethod
26
26
  def validar_certificado_id(cls, v: int) -> int:
27
27
  if v <= 0:
28
28
  raise ValueError("O certificadoId deve ser um inteiro positivo.")
29
29
  return v
30
30
 
31
- # Validar CNPJ (apenas estrutura com 14 dígitos)
32
- @field_validator('cnpj')
31
+ @field_validator("Cnpj")
33
32
  @classmethod
34
33
  def validar_cnpj(cls, v: str) -> str:
35
- cnpj_limpo = re.sub(r'\D', '', v)
34
+ cnpj_limpo = re.sub(r"\D", "", v)
36
35
  if len(cnpj_limpo) != 14 or not cnpj_limpo.isdigit():
37
36
  raise ValueError("O CNPJ deve conter 14 dígitos numéricos.")
38
37
  return cnpj_limpo
39
38
 
40
- # Validar e transformar dataInicio
41
- @field_validator('dataInicio', mode='before')
39
+ @field_validator("DataInicio", mode="before")
42
40
  @classmethod
43
41
  def formatar_data_inicio(cls, value: str) -> date:
44
42
  try:
45
43
  return datetime.strptime(value, "%Y-%m-%d").date()
46
- except ValueError:
47
- raise ValueError("A dataInicio deve estar no formato YYYY-MM-DD.")
44
+ except ValueError as ve:
45
+ raise ValueError("A dataInicio deve estar no formato YYYY-MM-DD.") from ve
48
46
 
49
- # Validar e transformar dataFim (último dia do mês)
50
- @field_validator('dataFim', mode='before')
47
+ @field_validator("DataFim", mode="before")
51
48
  @classmethod
52
49
  def ajustar_data_fim(cls, value: str) -> date:
53
- try:
54
- ano, mes = map(int, value.split("-")[:2])
55
- if mes < 1 or mes > 12:
56
- raise ValueError
57
- if mes == 12:
58
- proximo_mes = datetime(ano + 1, 1, 1)
59
- else:
60
- proximo_mes = datetime(ano, mes + 1, 1)
61
- return (proximo_mes - timedelta(days=1)).date()
62
- except Exception:
63
- raise ValueError("A dataFim deve estar no formato YYYY-MM-DD e conter um mês válido.")
50
+ ano, mes = map(int, value.split("-")[:2])
51
+ if mes < 1 or mes > 12:
52
+ raise ValueError(
53
+ "A dataFim deve estar no formato YYYY-MM-DD e conter um mês válido."
54
+ )
55
+ if mes == 12:
56
+ proximo_mes = datetime(ano + 1, 1, 1)
57
+ else:
58
+ proximo_mes = datetime(ano, mes + 1, 1)
59
+ return (proximo_mes - timedelta(days=1)).date()
60
+
61
+ @field_validator("Evento")
62
+ @classmethod
63
+ def validar_eventos(cls, v: str) -> str | None:
64
+ if v is None:
65
+ return v
66
+
67
+ if v not in EEventos:
68
+ raise ValueError(f"Evento '{v}' não é válido.")
69
+ return v
@@ -2,8 +2,8 @@ from enum import Enum
2
2
 
3
3
 
4
4
  class EEventos(str, Enum):
5
- S1210 = "S-1210"
6
5
  S1200 = "S-1200"
6
+ S1210 = "S-1210"
7
7
  S1298 = "S-1298"
8
8
  S1299 = "S-1299"
9
9
  S2299 = "S-2299"
@@ -0,0 +1,52 @@
1
+ import pika
2
+ import json
3
+
4
+ class RabbitMQPublisher:
5
+ def __init__(
6
+ self,
7
+ host,
8
+ queue,
9
+ username,
10
+ password,
11
+ vhost="/",
12
+ ):
13
+ self.host = host
14
+ self.queue = queue
15
+ self.username = username
16
+ self.password = password
17
+ self.vhost = vhost
18
+ self.connection = None
19
+ self.channel = None
20
+
21
+ def connect(self):
22
+ credentials = pika.PlainCredentials(self.username, self.password)
23
+ parameters = pika.ConnectionParameters(
24
+ host=self.host,
25
+ credentials=credentials,
26
+ virtual_host=self.vhost,
27
+ heartbeat=60,
28
+ blocked_connection_timeout=300,
29
+ )
30
+
31
+ self.connection = pika.BlockingConnection(parameters)
32
+ self.channel = self.connection.channel()
33
+ self.channel.queue_declare(queue=self.queue, durable=True)
34
+
35
+ def publish(self, message: dict):
36
+ if not self.channel:
37
+ raise RuntimeError("❌ Canal RabbitMQ não conectado. Chame connect() antes.")
38
+
39
+ body = json.dumps(message)
40
+ self.channel.basic_publish(
41
+ exchange="",
42
+ routing_key=self.queue,
43
+ body=body,
44
+ properties=pika.BasicProperties(
45
+ delivery_mode=2 # torna a mensagem persistente
46
+ )
47
+ )
48
+ print(f"✅ Mensagem publicada na fila '{self.queue}': {message}")
49
+
50
+ def close(self):
51
+ if self.connection:
52
+ self.connection.close()
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: libretificacaotjcore
3
- Version: 0.1.24
3
+ Version: 0.1.26
4
4
  Summary: Biblioteca para centralizar conexao com filas no rabbit e banco de dados no mongodb para os servicos de retificacao da TJ
5
5
  Author-email: Jhonatan Azevedo <dev.azevedo@outlook.com>
6
- Project-URL: Homepage, https://github.com/Tributo-Justo/libretificacaotjcore
7
- Project-URL: Issues, https://github.com/Tributo-Justo/libretificacaotjcore/issues
8
- Project-URL: Repository, https://github.com/Tributo-Justo/libretificacaotjcore
6
+ Project-URL: Homepage, https://github.com/seu-usuario/libretificacaotjcore
7
+ Project-URL: Issues, https://github.com/seu-usuario/libretificacaotjcore/issues
8
+ Project-URL: Repository, https://github.com/seu-usuario/libretificacaotjcore
9
9
  Keywords: tj,tributo justo,retificação,automação,pydantic,rabbitmq,boto3,motor
10
10
  Classifier: Development Status :: 3 - Alpha
11
11
  Classifier: Intended Audience :: Developers
@@ -2,18 +2,20 @@ libretificacaotjcore/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
2
2
  libretificacaotjcore/database/__init__.py,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
3
3
  libretificacaotjcore/database/arquivo_repository.py,sha256=Wv42CWjddS8RPVR3aAOGwuFuLyGqmgq-TXOc-V0BTvE,2154
4
4
  libretificacaotjcore/database/certificado_repository.py,sha256=LF3rV1rQmRGZVB4wPh_vmDj81Gf_env_5hqtTbxXNFM,1396
5
- libretificacaotjcore/database/config_db.py,sha256=HdVMk0WuwbpPNsBczpv5eiGNRJF9RHYdo1kQlppMM_g,1831
5
+ libretificacaotjcore/database/config_db.py,sha256=1SNpQV6GcrS0aZGX12wXmxhmLb8oc3uV4_H6HQ1z74w,1775
6
6
  libretificacaotjcore/database/protocolo_repository.py,sha256=kb-mXxiOYDPbrPbYMhOb9xDZHknUdVSfVlmQ_Cn0l1s,3788
7
7
  libretificacaotjcore/dtos/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
- libretificacaotjcore/dtos/solicitacao_dto.py,sha256=QJYzI8ii_gTgYTnFN5KFFzKqy_1BkKmbEGdqFnpLq88,2509
8
+ libretificacaotjcore/dtos/arquivo_dto.py,sha256=D4LLJZf-Z0XhJmOvu7nAcBq0j70m9TFtbgxI9ikHXQ0,1045
9
+ libretificacaotjcore/dtos/solicitacao_dto.py,sha256=7Ex9zlaphHVhaU0D2ubH46KmnqmR6TS0_O3__c1sn4A,2564
9
10
  libretificacaotjcore/enums/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- libretificacaotjcore/enums/e_eventos.py,sha256=x1LXcTLNCAAj1MuQP6jT5vu9cFkoAyGEzPAqQHj_8L8,185
11
+ libretificacaotjcore/enums/e_eventos.py,sha256=EClyRpHtL21t_s1b_26bbBKpvd6QgOtIe87FmSzh34E,185
11
12
  libretificacaotjcore/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
13
  libretificacaotjcore/services/crypto_pass_service.py,sha256=9D0vyjan6f_8AfNxGkLpGdvyMpojsJq_AAySpv_zKMc,740
13
14
  libretificacaotjcore/services/file_service.py,sha256=14CJokBbrsryQGmL0_unH2QKZpnteEAfxf5CPFdv6cE,2075
14
15
  libretificacaotjcore/services/rabbitmq_consumer.py,sha256=a25mRHjbkgO3lkdCJ5NpJfWAGHhVkQDCRDR2t8hMNAI,1710
16
+ libretificacaotjcore/services/rabbitmq_publisher.py,sha256=nhPJLGPt0D0omN51vrRcu_Pioof_Q8whlwH7I1DreWU,1546
15
17
  libretificacaotjcore/services/s3_service.py,sha256=HKR_jt2H3XdV1PCzo5R5bnhmoQ3I46Yn5IqAvVPhsjs,2946
16
- libretificacaotjcore-0.1.24.dist-info/METADATA,sha256=t-ZkLLKpPeShnb9fLUGLLsD6FVf5c38otl61vLYTaFY,2508
17
- libretificacaotjcore-0.1.24.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
18
- libretificacaotjcore-0.1.24.dist-info/top_level.txt,sha256=J9vnz_X9OUnxC-eXHiAzlc9xIrWBwZ5bgnIDQIIFY4c,21
19
- libretificacaotjcore-0.1.24.dist-info/RECORD,,
18
+ libretificacaotjcore-0.1.26.dist-info/METADATA,sha256=bmTLrJEnqRRdLd2fRKKb4yZCeK4llqPcE0pp8GfCSjk,2502
19
+ libretificacaotjcore-0.1.26.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
20
+ libretificacaotjcore-0.1.26.dist-info/top_level.txt,sha256=J9vnz_X9OUnxC-eXHiAzlc9xIrWBwZ5bgnIDQIIFY4c,21
21
+ libretificacaotjcore-0.1.26.dist-info/RECORD,,