ποΈ 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
- β ValidaΓ§Γ£o de conformidade contΓ‘bil atravΓ©s de regras configurΓ‘veis
- β Sistema de regras flexΓvel com DSL customizada
- β IdentificaΓ§Γ£o de indΓcios de problemas contΓ‘beis
- β HistΓ³rico de execuΓ§Γ΅es para auditoria
- β IntegraΓ§Γ£o com dados contΓ‘beis do eCosif
ποΈ 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
- Python 3.12+ - Linguagem base
- Flask 2.3+ - Framework web
- Flask-RESTX 1.1+ - API REST com Swagger
- Flask-CORS - CORS support
PersistΓͺncia
- SQLAlchemy - ORM
- psycopg2-binary - Driver PostgreSQL
- PostgreSQL 15+ - Banco de dados
DSL e Parsing
- PLY (Python Lex-Yacc) - Parser para DSL customizada
UtilitΓ‘rios
- Pandas - ManipulaΓ§Γ£o de dados
- pandas-ods-reader - Leitura de arquivos ODS
- Gunicorn - WSGI server (produΓ§Γ£o)
Logging
- concurrent-log-handler - Logging assΓncrono
π 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
- ExecuΓ§Γ£o de validaΓ§Γ΅es
- Processamento de regras
- IntegraΓ§Γ£o com dados contΓ‘beis
rule.py
- Gerenciamento de regras (CRUD)
- Listagem de tipos de indΓcio
- Listagem de sistemas de negΓ³cio
account.py
- OperaΓ§Γ΅es com contas contΓ‘beis
- CΓ‘lculos de saldos
- AgregaΓ§Γ΅es
DAOs (Data Access Objects)
RuleDao- Acesso a regrasDocumentDao- Acesso a documentosProcessDao- Acesso a processosClueTypeDao- Acesso a tipos de indΓcioBusinessSystemDao- Acesso a sistemas de negΓ³cio
Entities (SQLAlchemy)
RuleEntity- Entidade de regraDocumentEntity- Entidade de documentoProcessEntity- Entidade de processoProcessRuleEntity- RelaΓ§Γ£o processo x regra
π DSL - Domain-Specific Language
O serviΓ§o utiliza uma DSL customizada para definir regras de validaΓ§Γ£o:
FunΓ§Γ΅es DisponΓveis
SALDO_CONTA(conta, data)- Retorna saldo de uma contaSOMA_SALDO_CONTAS([contas], data)- Soma saldos de mΓΊltiplas contasVARIACAO_SALDO(conta, data1, data2)- VariaΓ§Γ£o de saldoDIFERENCA_PERCENTUAL_SALDOS(saldo1, saldo2)- DiferenΓ§a percentual
Estruturas de Controle
IF condiΓ§Γ£o THEN expressΓ£o ELSE expressΓ£oRETORNA valor- Retorna sucessoERRO "mensagem"- Retorna erro com mensagem
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
- Cliente solicita validaΓ§Γ£o via
POST /api/compliance/run - Flask recebe requisiΓ§Γ£o
- Service busca regras aplicΓ‘veis
- Parser compila scripts DSL
- Service executa regras sobre dados contΓ‘beis
- Service persiste resultados no banco
- 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
ecosif.runtime.environment- Define qual arquivo de config usar
Γltima AtualizaΓ§Γ£o: 2025-12-01