---
type: workflow
name: refatorar-modulo
description: Fluxo completo de refatoração de um módulo, do diagnóstico à verificação
scope: local
updatedAt: "2026-06-19"
---

# Workflow: Refatorar Módulo

## Objetivo

Conduzir a refatoração de um módulo do ecossistema de forma segura, rastreável e fundamentada nos princípios do Refactoring.Guru.

## Gatilho

- Solicitação explícita de refatoração
- Módulo identificado com 3+ code smells em diagnóstico
- Preparação para nova feature que exige código limpo como pré-requisito

## Fluxo

```
┌─────────────┐    ┌───────────────┐    ┌──────────────┐
│ 1. DIAGNÓS- │───▶│ 2. SOLICITAR  │───▶│ 3. PLANEJAR  │
│    TICAR    │    │    TESTES     │    │    AÇÕES     │
└─────────────┘    └───────────────┘    └──────────────┘
                                              │
┌─────────────┐    ┌───────────────┐    ┌──────┴───────┐
│ 6. DOCUMEN- │◀───│ 5. VERIFICAR  │◀───│ 4. EXECUTAR  │
│    TAR      │    │    TESTES     │    │    REFAT.    │
└─────────────┘    └───────────────┘    └──────────────┘
```

### Etapa 1: Diagnosticar

**Agente:** `@ag-refatorar`

Executar a skill `diagnosticar-code-smells`:
- Listar code smells encontrados
- Identificar violações SOLID
- Recomendar Design Patterns aplicáveis
- Classificar por severidade (🔴 🟡 🟢)

**Saída:** Relatório de diagnóstico com plano de ação priorizado.

### Etapa 2: Solicitar Testes

**Agente:** `@ag-refatorar` → `@ag-testes`

Para cada trecho que será refatorado:
- Verificar se há testes cobrindo o comportamento
- Se não há: solicitar ao `@ag-testes` criação de testes
- Aguardar confirmação de que testes passam

**Regra:** Nenhuma refatoração avança sem cobertura de testes. Sem exceções.

### Etapa 3: Planejar Ações

**Agente:** `@ag-refatorar`

Para cada item do plano de ação:
1. Nomear a técnica de refatoração (ex: "Extract Method", "Replace Conditional with Strategy")
2. Identificar o princípio SOLID que será atendido
3. Estimar arquivos afetados
4. Definir ordem de execução (itens independentes primeiro)

**Formato:**
```markdown
| # | Técnica | Princípio | Arquivos | Dependência |
|---|---------|-----------|----------|-------------|
| 1 | Extract Method | S — SRP | servico.ts | Nenhuma |
| 2 | Strategy Pattern | O — OCP | calculador.ts, tipos.ts | Após #1 |
```

### Etapa 4: Executar Refatoração

**Agente:** `@ag-refatorar`

Para cada item do plano, em ordem:
1. Aplicar a mudança em **passos pequenos**
2. Verificar que testes passam após cada passo
3. Não misturar refatoração com feature

**Passos típicos de uma refatoração:**
```
4.1  Extrair função/composable
4.2  Mover para arquivo adequado
4.3  Atualizar imports
4.4  Verificar testes → ✅
4.5  Próximo item
```

### Etapa 5: Verificar Testes

**Agente:** `@ag-refatorar` + `@ag-testes`

- Executar todos os testes do módulo
- Confirmar zero regressões
- Se algum teste falha: reverter último passo e investigar

### Etapa 6: Documentar

**Agente:** `@ag-refatorar` → `@ag-documentacao`

- Atualizar JSDoc se interfaces mudaram
- Registrar decisão em `.regras-negocio.md` se refatoração foi significativa
- Informar `@ag-documentacao` sobre mudanças estruturais

**Formato do commit:**
```
refactor(<módulo>): <técnica aplicada>

- Problema: <code smell identificado>
- Solução: <padrão/técnica aplicada>
- Princípio: <princípio SOLID atendido>
```

## Critérios de Sucesso

- [ ] Todos os code smells críticos (🔴) resolvidos
- [ ] Todos os testes passam (zero regressões)
- [ ] Nenhum arquivo acima de 250 linhas
- [ ] Nenhum `any`/`as any` introduzido
- [ ] Fronteiras de pacote respeitadas
- [ ] Decisões documentadas

## Referências

- Skill: `agents/ag-refatorar/skills/diagnosticar-code-smells/SKILL`
- Rule: `agents/ag-refatorar/rules/refatoracao-segura`
- Rule: `agents/ag-refatorar/rules/solid-compliance`
- Rule: `agents/ag-refatorar/rules/design-patterns-pragmatico`
- Workflow global: `global/workflows/otimizar-codigos`
