O CeFal é um framework de RPA (Robotic Process Automation) desenvolvido para automatizar tarefas repetitivas em sistemas legados que não possuem APIs ou interfaces de integração. O projeto utiliza visão computacional para interagir com interfaces gráficas, permitindo a automação de processos complexos sem necessidade de modificação nos sistemas alvo.
- Arquitetura Genérica: Design modular que permite criar novos fluxos de trabalho sem modificar o código-fonte
- Integração BotCity: Utiliza a biblioteca BotCity para interações robustas com interfaces gráficas
- Sistema de Ações: Ações atômicas reutilizáveis (click, type, select, scroll, screenshot, wait)
- Fluxos Dinâmicos: Configuração baseada em YAML para definir sequências de execução
- Factory Pattern: Criação dinâmica de ações através do ActionFactory
- Logging Avançado: Sistema de logs estruturados para monitoramento e debugging
- Testes Abrangentes: Suíte completa de testes unitários e de integração
O CeFal segue uma arquitetura em camadas baseada em princípios de Clean Code e Separation of Concerns:
-
Camada de Infraestrutura (
rpa/infra/)botcity.py: Wrapper para funções do BotCity (scroll, screenshot, find, click, type_text)bootstrap.py: Inicialização do sistema e configuração de ambiente
-
Camada de Ações (
rpa/actions/)base_action.py: Classe abstrata base para todas as açõesaction_factory.py: Factory para criação dinâmica de ações- Ações concretas:
click_action.py,type_action.py,select_action.py,scroll_action.py,screenshot_action.py,wait_action.py
-
Camada de Fluxos (
rpa/flows/)base_flow.py: Classe abstrata base para fluxosgeneric_flow.py: Implementação genérica que executa sequências de ações- Fluxos específicos:
registration_flow.py,update_flow.py,register_product.py,take_initial_steps.py
-
Camada de Orquestração (
pipelines/)DynamicOrchestrator.py: Orquestrador principal que gerencia execução de fluxos
-
Camada de Configuração (
config/)workflows.py: Definição de workflows em YAML
.
├── 📂 config/ # Configurações do sistema
│ └── workflows.py # Definição de workflows em YAML
├── 📂 pipelines/ # Orquestração de fluxos
│ └── DynamicOrchestrator.py
├── 📂 rpa/ # Motor de automação
│ ├── 📂 actions/ # Ações atômicas
│ │ ├── base_action.py
│ │ ├── action_factory.py
│ │ ├── click_action.py
│ │ ├── type_action.py
│ │ ├── select_action.py
│ │ ├── scroll_action.py
│ │ ├── screenshot_action.py
│ │ └── wait_action.py
│ ├── 📂 flows/ # Fluxos de trabalho
│ │ ├── base_flow.py
│ │ ├── generic_flow.py
│ │ ├── registration_flow.py
│ │ ├── update_flow.py
│ │ ├── register_product.py
│ │ └── take_initial_steps.py
│ └── 📂 infra/ # Infraestrutura
│ ├── botcity.py
│ └── bootstrap.py
├── 📂 tests/ # Testes automatizados
│ ├── 📂 rpa/actions/ # Testes de ações
│ └── 📂 integration/ # Testes de integração
├── cli.py # Interface de linha de comando
├── main.py # Ponto de entrada principal
└── README.md # Esta documentação
- botcity-framework-core: Framework de automação com visão computacional
- pandas: Manipulação de dados para processamento de arquivos
- openpyxl: Leitura/escrita de arquivos Excel
- pytest: Framework de testes (dependência de desenvolvimento)
- pytest-cov: Cobertura de testes (dependência de desenvolvimento)
sudo apt-get update
sudo apt-get install python3-dev- Python 3.8+
- pip (gerenciador de pacotes Python)
- Git
-
Clone o repositório
git clone https://github.com/arthurRocha01/cefal.git cd cefal -
Crie um ambiente virtual
python3 -m venv venv source venv/bin/activate # Linux/Mac # ou venv\Scripts\activate # Windows
-
Instale as dependências
pip install -r requirements.txt
-
Instale dependências de desenvolvimento (opcional)
pip install pytest pytest-cov
# Listar workflows disponíveis
python cli.py --list
# Executar um workflow com arquivo de dados
python cli.py cadastro_produtos --data produtos.csv
# Executar com matching de imagem customizado (default: 0.85)
python cli.py cadastro_produtos --data produtos.csv --matching 0.7
# Executar com dados de teste (modo dev)
python cli.py cadastro_produtos --test-data
# Ajuda completa
python cli.py --helpfrom pipelines.DynamicOrchestrator import DynamicOrchestrator
# Criar orquestrador
orchestrator = DynamicOrchestrator()
# Executar workflow
result = orchestrator.execute_workflow('cadastro_produtos')Os workflows são definidos no arquivo config/workflows.py no formato YAML:
cadastro_produtos:
description: "Cadastro de produtos no sistema"
steps:
- action: "click"
field: "botao_novo_produto"
- action: "type"
field: "campo_nome"
value: "{nome}"
- action: "select"
field: "campo_categoria"
value: "{categoria}"
- action: "type"
field: "campo_preco"
value: "{preco}"
- action: "click"
field: "botao_salvar"
- action: "screenshot"
field: "confirmacao_cadastro"processamento_lote:
description: "Processamento de lote de pedidos"
steps:
- action: "click"
field: "menu_pedidos"
- action: "wait"
field: "carregamento"
value: "5" # Espera 5 segundos
- action: "scroll"
field: "down"
value: "500" # Rola 500 pixels
- action: "type"
field: "filtro_numero"
value: "{numero_pedido}"
- action: "click"
field: "botao_filtrar"
- action: "screenshot"
field: "resultado_filtro"
value: "/tmp/filtro_{timestamp}.png" # Caminho personalizado
- action: "click"
field: "primeiro_resultado"
- action: "select"
field: "status"
value: "processado"
- action: "click"
field: "salvar_alteracoes"{field}: Nome do campo definido no workflow{value}: Valor passado para a ação{timestamp}: Timestamp atual (disponível em tempo de execução)- Variáveis personalizadas do arquivo de dados
O projeto possui uma suíte abrangente de testes:
# Executar todos os testes
pytest
# Executar testes com cobertura
pytest --cov=rpa
# Executar testes específicos
pytest tests/rpa/actions/test_click_action.py
pytest tests/integration/test_dynamic_orchestrator.py
# Executar testes com relatório detalhado
pytest -vStatus dos testes: ✅ 110 testes passando
# No Linux, instale python3-dev primeiro
sudo apt-get update
sudo apt-get install python3-dev- Verifique se os arquivos de imagem estão no diretório correto
- Confirme os nomes dos arquivos correspondem aos definidos no workflow
- Use caminhos absolutos ou relativos consistentes
- Ative o modo verbose:
python cli.py --workflow nome --verbose - Verifique os logs em
logs/ - Confirme que a interface alvo está visível e acessível
- Use imagens de template com a mesma resolução da tela alvo
- Considere usar múltiplos templates para diferentes resoluções
- Teste em ambientes controlados primeiro
# Recrie o ambiente virtual
deactivate
rm -rf venv/
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txtO matching padrão é 0.85 (85%). Imagens capturadas em resoluções ou temas
diferentes podem não ser encontradas. Use a flag --matching para ajustar:
# Matching mais permissivo (úsar com cautela)
python cli.py cadastro_produtos --data produtos.csv --matching 0.6
# Matching mais rigoroso (imagem deve ser muito similar)
python cli.py cadastro_produtos --data produtos.csv --matching 0.95-
Crie uma classe que herde de
BaseAction:from rpa.actions.base_action import BaseAction class NovaAcao(BaseAction): def execute(self, field: str, value: str = None) -> bool: # Implementação da ação pass
-
Registre a ação no
ActionFactory:# No arquivo action_factory.py action_classes = { 'nova_acao': NovaAcao, # ... outras ações }
-
Crie uma classe que herde de
BaseFlowou useGenericFlow:from rpa.flows.generic_flow import GenericFlow class MeuNovoFluxo(GenericFlow): def __init__(self, config=None, logger=None): super().__init__(config, logger)
-
Defina o workflow em
config/workflows.py
O sistema utiliza logging estruturado com os seguintes níveis:
- INFO: Informações gerais de execução
- DEBUG: Detalhes para debugging
- WARNING: Avisos de possíveis problemas
- ERROR: Erros durante a execução
Os logs são salvos em arquivos com timestamp no diretório logs/.
- Suporte a múltiplos templates de imagem por workflow
- Sistema de retry automático para ações falhas
- Dashboard web para monitoramento de execuções
- Integração com sistemas de mensageria (Slack, Teams)
- Exportação de relatórios em PDF/Excel
- Suporte a execução distribuída
- Plugin system para extensibilidade
- Otimização do sistema de matching de imagens
- Cache de templates para melhor performance
- Sistema de health checks
- Documentação interativa com exemplos
- Mais ações pré-construídas
- Faça um fork do projeto
- Crie uma branch para sua feature (
git checkout -b feature/nova-feature) - Commit suas mudanças (
git commit -m 'Adiciona nova feature') - Push para a branch (
git push origin feature/nova-feature) - Abra um Pull Request
- Siga as convenções de código existentes
- Adicione testes para novas funcionalidades
- Atualize a documentação quando necessário
- Use type hints e docstrings
- Mantenha a cobertura de testes acima de 80%
Este projeto está licenciado sob a licença MIT - veja o arquivo LICENSE.md para detalhes.
- Arthur Rocha - GitHub
- Equipe de desenvolvimento
- Comunidade open source
- Projeto BotCity pelo framework de automação