# Serviços de Protocolo

Esta pasta contém todos os serviços relacionados ao módulo de Protocolos, organizados de forma modular e especializada.

## Estrutura de Arquivos

```
app/Services/Protocolo/
├── ProtocoloService.php              # Serviço principal (orquestrador)
├── ProtocoloInserirService.php       # Inserção de protocolos
├── ProtocoloBuscarService.php        # Busca e consultas
├── ProtocoloListarService.php        # Listagem e paginação
├── ProtocoloTramitacaoService.php    # Tramitações
├── ProtocoloGerenciarService.php     # CRUD completo
└── README.md                         # Esta documentação
```

## Serviços Especializados

### ProtocoloService (Principal)
- **Responsabilidade**: Orquestrar e delegar chamadas para os serviços especializados
- **Funcionalidades**: Interface única para todos os métodos de protocolo
- **Linhas**: ~120

### ProtocoloInserirService
- **Responsabilidade**: Inserção de protocolos e relacionamentos
- **Funcionalidades**: 
  - Inserção via PDO (legado)
  - Inserção via Eloquent
  - Criação de primeira tramitação
  - Relacionamentos com beneficiário, cooperado, cooperativa
- **Linhas**: ~150

### ProtocoloBuscarService
- **Responsabilidade**: Busca e consultas de protocolos
- **Funcionalidades**:
  - Geração de números de protocolo
  - Formatação de números
  - Busca por número e data
  - Busca de nomes de interessados
  - Verificação de ouvidoria
- **Linhas**: ~120

### ProtocoloListarService
- **Responsabilidade**: Listagem e paginação de protocolos
- **Funcionalidades**:
  - Listagem com busca
  - Paginação
  - Formatação de dados para exibição
- **Linhas**: ~50

### ProtocoloTramitacaoService
- **Responsabilidade**: Operações relacionadas a tramitações
- **Funcionalidades**:
  - Busca de tramitações
  - Dados de tramitações com joins
- **Linhas**: ~40

### ProtocoloGerenciarService
- **Responsabilidade**: Operações CRUD completas
- **Funcionalidades**:
  - Criação de protocolos com regras de negócio
  - Atualização de protocolos
  - Exclusão de protocolos
  - Gerenciamento de ouvidoria
- **Linhas**: ~120

## Benefícios da Fragmentação

1. **Responsabilidade Única**: Cada serviço tem uma responsabilidade específica
2. **Manutenibilidade**: Mudanças isoladas não afetam outros serviços
3. **Testabilidade**: Cada serviço pode ser testado independentemente
4. **Reutilização**: Serviços podem ser usados em outros contextos
5. **Organização**: Código mais limpo e fácil de navegar
6. **Performance**: Carregamento sob demanda de dependências

## Como Usar

### Uso Tradicional (Recomendado)
```php
use App\Services\Protocolo\ProtocoloService;

$protocoloService = new ProtocoloService();
$protocolos = $protocoloService->listarProtocolos();
```

### Uso Direto (Para casos específicos)
```php
use App\Services\Protocolo\ProtocoloBuscarService;

$buscarService = new ProtocoloBuscarService();
$numero = $buscarService->gerarNumero();
```

## Migração do Serviço Antigo

O serviço antigo `app/Services/Basico/ProtocoloService.php` foi fragmentado. Para migrar:

1. **Atualizar imports**:
   ```php
   // Antes
   use App\Services\Basico\ProtocoloService;
   
   // Depois
   use App\Services\Protocolo\ProtocoloService;
   ```

2. **Métodos mantidos**: Todos os métodos públicos do serviço antigo continuam funcionando
3. **Compatibilidade**: Interface 100% compatível

## Próximos Passos

1. **Remover serviço antigo**: Após confirmar funcionamento
2. **Atualizar componentes**: Atualizar imports nos componentes Livewire
3. **Testes unitários**: Criar testes para cada serviço especializado
4. **Documentação**: Expandir documentação com exemplos de uso
