πŸ—οΈ Arquitetura - ecosif-compliance

πŸ“‹ VisΓ£o Geral

ecosif-compliance Γ© um microserviΓ§o Python/Flask especializado em validaΓ§Γ£o de conformidade contΓ‘bil. Utiliza um sistema de regras configurΓ‘veis com DSL (Domain-Specific Language) customizada para validar documentos contΓ‘beis e identificar possΓ­veis inconsistΓͺncias.


🎯 Objetivo do Serviço


πŸ›οΈ Arquitetura em Camadas

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              Camada de ApresentaΓ§Γ£o (REST)               β”‚
β”‚                                                          β”‚
β”‚  Flask + Flask-RESTX                                    β”‚
β”‚  β€’ starter.py (app principal)                           β”‚
β”‚  β€’ Endpoints REST                                       β”‚
β”‚  β€’ Swagger UI automΓ‘tico                                β”‚
β”‚                                                          β”‚
β”‚  Responsabilidades:                                     β”‚
β”‚  β€’ Receber requisiΓ§Γ΅es HTTP                             β”‚
β”‚  β€’ ValidaΓ§Γ£o bΓ‘sica de entrada                          β”‚
β”‚  β€’ Chamar services de validaΓ§Γ£o                         β”‚
β”‚  β€’ Retornar resultados em JSON                          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                     β”‚
                     β”‚ usa
                     β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚            Camada de AplicaΓ§Γ£o (Services)               β”‚
β”‚                                                          β”‚
β”‚  Services                                              β”‚
β”‚  β€’ compliance.py - ValidaΓ§Γ£o principal                 β”‚
β”‚  β€’ rule.py - Gerenciamento de regras                   β”‚
β”‚  β€’ account.py - OperaΓ§Γ΅es com contas                   β”‚
β”‚                                                          β”‚
β”‚  Responsabilidades:                                     β”‚
β”‚  β€’ LΓ³gica de validaΓ§Γ£o                                 β”‚
β”‚  β€’ ExecuΓ§Γ£o de regras DSL                              β”‚
β”‚  β€’ Processamento de dados                              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                     β”‚
                     β”‚ usa
                     β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚           Camada de PersistΓͺncia (DAOs)                 β”‚
β”‚                                                          β”‚
β”‚  Data Access Objects                                   β”‚
β”‚  β€’ RuleDao                                             β”‚
β”‚  β€’ DocumentDao                                         β”‚
β”‚  β€’ ProcessDao                                          β”‚
β”‚  β€’ ClueTypeDao                                         β”‚
β”‚                                                          β”‚
β”‚  Responsabilidades:                                     β”‚
β”‚  β€’ Acesso a dados                                      β”‚
β”‚  β€’ Queries otimizadas                                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                     β”‚
                     β”‚ persiste
                     β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              Camada de Dados (Entities)                 β”‚
β”‚                                                          β”‚
β”‚  SQLAlchemy Entities                                   β”‚
β”‚  β€’ RuleEntity                                          β”‚
β”‚  β€’ DocumentEntity                                      β”‚
β”‚  β€’ ProcessEntity                                       β”‚
β”‚  β€’ ClueTypeEntity                                      β”‚
β”‚  β€’ BusinessSystemEntity                                β”‚
β”‚                                                          β”‚
β”‚  Responsabilidades:                                     β”‚
β”‚  β€’ Mapeamento ORM                                      β”‚
β”‚  β€’ ValidaΓ§Γ΅es de modelo                                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                     β”‚
                     β”‚ persiste
                     β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                 PostgreSQL Database                      β”‚
β”‚  β€’ Tabelas de regras                                   β”‚
β”‚  β€’ Tabelas de processos                                β”‚
β”‚  β€’ Dados contΓ‘beis (via ecosif-database)              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“¦ Estrutura de Pacotes

app/
β”œβ”€β”€ starter.py              # AplicaΓ§Γ£o Flask principal
β”œβ”€β”€ config/                 # ConfiguraΓ§Γ΅es
β”‚   β”œβ”€β”€ config.py          # Classe de configuraΓ§Γ£o
β”‚   └── config*.json       # Arquivos de configuraΓ§Γ£o
β”œβ”€β”€ service/                # Services de negΓ³cio
β”‚   β”œβ”€β”€ compliance.py      # ValidaΓ§Γ£o de conformidade
β”‚   β”œβ”€β”€ rule.py            # Gerenciamento de regras
β”‚   β”œβ”€β”€ account.py         # OperaΓ§Γ΅es com contas
β”‚   β”œβ”€β”€ parsetab.py        # Tabela de parsing DSL
β”‚   └── parser.out         # Output do parser
β”œβ”€β”€ db/                     # Camada de dados
β”‚   β”œβ”€β”€ dao/               # Data Access Objects
β”‚   β”‚   β”œβ”€β”€ rule.py
β”‚   β”‚   β”œβ”€β”€ document.py
β”‚   β”‚   β”œβ”€β”€ process.py
β”‚   β”‚   β”œβ”€β”€ clue_type.py
β”‚   β”‚   └── business_system.py
β”‚   β”œβ”€β”€ entity/            # Entidades SQLAlchemy
β”‚   β”‚   β”œβ”€β”€ rule.py
β”‚   β”‚   β”œβ”€β”€ document.py
β”‚   β”‚   β”œβ”€β”€ process.py
β”‚   β”‚   └── ...
β”‚   β”œβ”€β”€ session_manager.py
β”‚   └── session.py
β”œβ”€β”€ custom_exception/       # ExceΓ§Γ΅es customizadas
β”‚   β”œβ”€β”€ custom_http_exception.py
β”‚   └── custom_runtime_exceptions.py
β”œβ”€β”€ logger/                 # Sistema de logging
β”‚   └── logger.py
└── error_handler.py        # Tratamento de erros global

πŸ”§ Tecnologias e DependΓͺncias

Core

PersistΓͺncia

DSL e Parsing

UtilitΓ‘rios

Logging


πŸ“Š Componentes Principais

Flask Application (starter.py)

Arquivo principal que inicializa: - Flask app - Flask-RESTX API - Flask-CORS - Error handlers globais - Endpoints REST

Services

compliance.py

rule.py

account.py

DAOs (Data Access Objects)

Entities (SQLAlchemy)


πŸ”„ DSL - Domain-Specific Language

O serviΓ§o utiliza uma DSL customizada para definir regras de validaΓ§Γ£o:

FunΓ§Γ΅es DisponΓ­veis

Estruturas de Controle

Exemplo

IF SALDO_CONTA("1.1.01", "2025-11") > 1000000 THEN
  ERRO "Saldo da conta 1.1.01 muito alto"
ELSE
  RETORNA "OK"

πŸ”„ Fluxo de ValidaΓ§Γ£o

  1. Cliente solicita validaΓ§Γ£o via POST /api/compliance/run
  2. Flask recebe requisiΓ§Γ£o
  3. Service busca regras aplicΓ‘veis
  4. Parser compila scripts DSL
  5. Service executa regras sobre dados contΓ‘beis
  6. Service persiste resultados no banco
  7. Flask retorna resultados

πŸ” ConfiguraΓ§Γ£o

Arquivos de ConfiguraΓ§Γ£o

O serviΓ§o utiliza arquivos JSON para configuraΓ§Γ£o: - config.json (padrΓ£o) - config-{environment}.json (baseado em ecosif.runtime.environment)

VariΓ‘veis de Ambiente


Última Atualização: 2025-12-01