# Geração de Conteúdo com IA - Tags {{gerarcomia}}

## Visão Geral

A funcionalidade `{{gerarcomia}}...{{/gerarcomia}}` permite gerar conteúdo automaticamente usando ChatGPT durante a exportação de documentos DOCX. O sistema utiliza o modelo **gpt-4o-mini** da OpenAI, otimizado para gerar textos de licitações públicas conforme a **Lei 14.133/2021**.

## Configuração

### Pré-requisitos

1. Conta e API Key da OpenAI
2. Arquivo `.env` configurado com:

```env
OPENAI_API_KEY=sk-seu-api-key-aqui
OPENAI_VERIFY_SSL=false  # Para desenvolvimento local
```

### Instalação

A funcionalidade está pronta para uso. As seguintes classes já estão implementadas:

- **`OpenAIService`**: Serviço de integração com API OpenAI
- **`SubstituidorVariaveisDocumento`**: Serviço de substituição de variáveis e processamento de tags IA
- **Configuração em `config/services.php`**: Define a chave API e opções de SSL

## Como Usar

### Sintaxe Básica

```html
{{gerarcomia}}Sua instrução para a IA aqui{{/gerarcomia}}
```

### Exemplos de Uso

#### 1. Gerar Resumo Executivo
```html
<h2>Resumo Executivo</h2>
{{gerarcomia}}Gere um resumo executivo dessa licitação, destacando os pontos principais, modalidade, objeto e valor estimado{{/gerarcomia}}
```

#### 2. Gerar Justificativa
```html
<h2>Justificativa</h2>
{{gerarcomia}}Crie uma justificativa para essa modalidade de licitação, explicando por que foi escolhida e seus benefícios{{/gerarcomia}}
```

#### 3. Gerar Critérios de Avaliação
```html
<h2>Critérios de Avaliação</h2>
{{gerarcomia}}Liste os principais critérios de avaliação para esta licitação, baseado no seu objeto e modalidade{{/gerarcomia}}
```

#### 4. Gerar Cláusulas de Rescisão
```html
<h2>Cláusulas de Rescisão</h2>
{{gerarcomia}}Redija cláusulas de rescisão aplicáveis para este contrato, conforme a Lei 14.133/2021{{/gerarcomia}}
```

#### 5. Múltiplas Tags no Mesmo Documento
```html
<div class="introducao">
    {{gerarcomia}}Redija uma introdução para este processo de licitação{{/gerarcomia}}
</div>

<div class="objeto">
    <h3>Objeto</h3>
    {{processo.objeto}}
</div>

<div class="justificativa">
    {{gerarcomia}}Justifique a escolha dessa modalidade de licitação{{/gerarcomia}}
</div>

<div class="clausulas">
    {{gerarcomia}}Redija cláusulas essenciais para este contrato{{/gerarcomia}}
</div>
```

## Contexto Fornecido à IA

A IA recebe contexto específico de cada documento para gerar conteúdo mais relevante:

### Para Processo
- Número do Processo
- Modalidade
- Objeto
- Unidade Gestora

### Para ATA
- Número da ATA
- Data
- Objeto
- Lote
- Vigência
- Empresa/Fornecedor

### Para Contrato
- Número do Contrato
- Data
- Objeto
- Contratado
- CNPJ
- Valor Total
- Período

## Sistema Prompt da IA

A IA é instruída com o seguinte sistema prompt:

```
Especialista em licitações públicas com foco na Lei 14.133/2021. 
Atuando para órgãos públicos municipais.
```

Isso garante que os textos gerados sejam:
- Conformes com a legislação brasileira de licitações
- Apropriados para órgãos públicos
- Profissionais e juridicamente seguros

## Fluxo de Processamento

1. **Usuário cria documento** com tags `{{gerarcomia}}...{{/gerarcomia}}`
2. **Exportação iniciada** via `ExportController`
3. **SubstituidorVariaveisDocumento::substituir()** processa o conteúdo
4. **processarTagsIA()** encontra todas as tags com regex
5. **Para cada tag encontrada**:
   - Extrai a instrução entre os tags
   - Prepara contexto do documento
   - Chama `OpenAIService::gerarTexto()`
   - Substitui a tag com o texto gerado
6. **Documento DOCX exportado** com conteúdo gerado

## Tratamento de Erros

### API Não Configurada
```
[ERRO: OpenAI API não configurada. Configure OPENAI_API_KEY no arquivo .env]
```

### Tag Vazia
```
[Nenhuma instrução fornecida para geração de IA]
```

### Erro de Conexão
O erro será registrado em logs e uma mensagem de erro será inserida no documento.

## Logs

Todas as operações de geração são registradas em:
```
storage/logs/laravel.log
```

Procure por mensagens contendo `"Processando tag gerarcomia"` para rastrear execuções.

## Limitações e Considerações

1. **Custo**: Cada geração consome tokens da API OpenAI (custo por uso)
2. **Tempo**: A geração pode levar alguns segundos por tag
3. **Limite de Tokens**: Máximo 4000 tokens por geração (ajustável em `OpenAIService`)
4. **Internet**: Requer conexão com a API OpenAI (não funciona offline)

## Desenvolvimento

### Teste de Unidade

```bash
php artisan test tests/Feature/SubstituidorVariaveisTest.php
```

### Adicionar Novo Tipo de Contexto

Edite `SubstituidorVariaveisDocumento::prepararContexto()` para adicionar novos tipos de documentable:

```php
private static function prepararContexto($documentable): array
{
    // ... código existente ...
    
    if ($documentable instanceof NovoTipo) {
        return [
            'Campo 1' => $documentable->campo1 ?? '',
            'Campo 2' => $documentable->campo2 ?? '',
        ];
    }
}
```

### Customizar Comportamento da IA

Edite o system prompt em `OpenAIService::__construct()`:

```php
private $systemPrompt = 'Seu novo prompt aqui';
```

## Suporte

Para problemas com a funcionalidade:

1. Verifique se `OPENAI_API_KEY` está configurada em `.env`
2. Verifique logs em `storage/logs/laravel.log`
3. Teste com uma tag simples primeiro: `{{gerarcomia}}Olá{{/gerarcomia}}`
4. Confirme que a API OpenAI está funcionando e com saldo suficiente

## Roadmap Futuro

- [ ] Cache de gerações para evitar duplicatas
- [ ] Customização do sistema prompt por tipo de documento
- [ ] Suporte a outros modelos OpenAI (gpt-4, gpt-3.5-turbo)
- [ ] UI para revisar/editar conteúdo gerado antes de exportar
- [ ] Análise de custo de API antes de gerar
