# 📊 Sistema de Pesquisas com Contatos - Implementação Completa

## ✅ Status: COMPLETO E PRONTO PARA USAR

O sistema de pesquisas foi completamente implementado com a funcionalidade de população automática de contatos das empresas.

---

## 🎯 O que foi implementado

### 1. Criação de Pesquisas
- Formulário intuitivo em `nova_pesquisa.php`
- Campos: Nome, Data, Status, Questionário, Descrição
- Validações de entrada
- Criação automática para todas as empresas ativas

### 2. População Automática de Contatos
- Ao criar uma pesquisa, o sistema:
  - Distribui para todas as empresas ativas
  - Para cada empresa, busca seus contatos ativos
  - Cria registros em `pesquisa_contatos` com dados do contato
  - Preserva informações: Nome, Email, Telefone, Área

### 3. Visualização com Accordion
- Listagem de pesquisas em `pesquisas.php`
- Detalhes em `visualizar_pesquisa.php`
- Accordion expandível por empresa
- Exibição dos contatos quando expandido
- Animação suave ao abrir/fechar

---

## 📁 Arquivos do Sistema

### Públicos (Acessar pelo navegador):
```
montagem_questionario.php → Botão "📊 Pesquisas"
├── pesquisas.php (Lista todas pesquisas)
│   └── visualizar_pesquisa.php (Detalhes + Accordion)
│       └── responder_pesquisa.php (Futura - responder questão)
│
└── nova_pesquisa.php (Criar nova pesquisa)
    └── processar_nova_pesquisa.php (Processar - não acessa direto)
```

### Privados (Processamento):
```
processar_nova_pesquisa.php ← POST de nova_pesquisa.php
├── Cria registro em pesquisas
├── Cria registros em pesquisa_empresa
└── Popula pesquisa_contatos
```

### Banco de Dados:
```
criar_tabelas_pesquisas.sql
├── pesquisas (informações da pesquisa)
├── pesquisa_empresa (distribuição por empresa)
├── pesquisa_contatos (contatos de cada empresa) ← NOVO
└── pesquisa_respostas (respostas do formulário)
```

---

## 🔄 Fluxo de Dados

```
CRIAR PESQUISA
│
├─ nova_pesquisa.php (Formulário)
│  └─ POST → processar_nova_pesquisa.php
│     ├─ Valida dados
│     ├─ INSERT pesquisas
│     ├─ SELECT empresas WHERE ATIVA='S'
│     └─ Para cada empresa:
│        ├─ INSERT pesquisa_empresa
│        └─ SELECT contatos_empresa WHERE ativo='S'
│           └─ Para cada contato:
│              └─ INSERT pesquisa_contatos
│
├─ Redirect → visualizar_pesquisa.php
│  └─ SELECT pesquisa_empresa + empresas
│     └─ Para cada empresa:
│        └─ SELECT pesquisa_contatos
│           └─ EXIBE em ACCORDION


VISUALIZAR PESQUISA
│
├─ pesquisas.php (Listagem)
│  └─ Clicar em pesquisa
│     └─ visualizar_pesquisa.php
│        ├─ SELECT pesquisa (info card)
│        ├─ SELECT pesquisa_empresa + empresas (accordion headers)
│        └─ JavaScript toggleContatos():
│           └─ SELECT pesquisa_contatos (abrir/fechar)
```

---

## 📊 Estrutura do Banco de Dados

### Tabela: pesquisas
```sql
CREATE TABLE pesquisas (
    id INT PRIMARY KEY AUTO_INCREMENT,
    nome VARCHAR(255) NOT NULL,
    id_questionario_template_fk INT NOT NULL,
    data_pesquisa DATE NOT NULL,
    status VARCHAR(20) DEFAULT 'ativa',
    descricao TEXT,
    data_criacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (id_questionario_template_fk) REFERENCES questionario_template(id)
);
```

### Tabela: pesquisa_empresa
```sql
CREATE TABLE pesquisa_empresa (
    id INT PRIMARY KEY AUTO_INCREMENT,
    id_pesquisa_fk INT NOT NULL,
    id_empresa_fk INT NOT NULL,
    status VARCHAR(20) DEFAULT 'pendente',
    data_resposta TIMESTAMP NULL,
    FOREIGN KEY (id_pesquisa_fk) REFERENCES pesquisas(id),
    FOREIGN KEY (id_empresa_fk) REFERENCES empresas(ID_EMPRESA),
    UNIQUE KEY (id_pesquisa_fk, id_empresa_fk)
);
```

### Tabela: pesquisa_contatos ⭐ NOVO
```sql
CREATE TABLE pesquisa_contatos (
    id INT PRIMARY KEY AUTO_INCREMENT,
    id_pesquisa_empresa_fk INT NOT NULL,
    id_contato_empresa_fk INT NOT NULL,
    nome VARCHAR(255) NOT NULL,
    email VARCHAR(255),
    telefone VARCHAR(20),
    area VARCHAR(100),
    status VARCHAR(20) DEFAULT 'ativo',
    data_criacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (id_pesquisa_empresa_fk) REFERENCES pesquisa_empresa(id),
    FOREIGN KEY (id_contato_empresa_fk) REFERENCES contatos_empresa(idcontatos_empresa)
);
```

### Tabela: pesquisa_respostas
```sql
CREATE TABLE pesquisa_respostas (
    id INT PRIMARY KEY AUTO_INCREMENT,
    id_pesquisa_empresa_fk INT NOT NULL,
    id_pergunta_fk INT NOT NULL,
    resposta TEXT,
    data_resposta TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (id_pesquisa_empresa_fk) REFERENCES pesquisa_empresa(id),
    FOREIGN KEY (id_pergunta_fk) REFERENCES questionario_template_perguntas(id)
);
```

---

## 🎨 Interface de Usuário

### 1. Botão de Acesso
**Em:** `montagem_questionario.php`
```
[📊 Pesquisas] ← Leva para pesquisas.php
```

### 2. Lista de Pesquisas
**Página:** `pesquisas.php`
```
┌─────────────────────────────────────┐
│ 📊 Pesquisas                        │
├─────────────────────────────────────┤
│ Pesquisa 1  │ 5 respostas │ ████░ │ [Ver]
│ Pesquisa 2  │ 3 respostas │ ██░░░ │ [Ver]
│ Pesquisa 3  │ 8 respostas │ █████ │ [Ver]
└─────────────────────────────────────┘
```

### 3. Detalhes com Accordion
**Página:** `visualizar_pesquisa.php`
```
┌──────────────────────────────────────────┐
│ 📊 Nome da Pesquisa                      │
├──────────────────────────────────────────┤
│ Questionário: Template X                 │
│ Data: 15/12/2024                        │
│ Status: Ativa                           │
│ Criada: 10/12/2024 14:30                │
├──────────────────────────────────────────┤
│ 🏢 Empresas                              │
│                                          │
│ ┌──────────────────────────────────────┐ │
│ │ Empresa A  [Pendente] ▼              │ │
│ │ ┌────────────────────────────────────┐ │
│ │ │ Contatos:                          │ │
│ │ │ 📧 João Silva                      │ │
│ │ │    Email: joao@empresa.com         │ │
│ │ │    Tel: 11 9999-9999               │ │
│ │ │    Área: TI                        │ │
│ │ │ 📧 Maria Santos                    │ │
│ │ │    Email: maria@empresa.com        │ │
│ │ │    Tel: 11 8888-8888               │ │
│ │ │    Área: RH                        │ │
│ │ │ [📝 Responder Pesquisa]            │ │
│ │ └────────────────────────────────────┘ │
│ └──────────────────────────────────────┘ │
│                                          │
│ ┌──────────────────────────────────────┐ │
│ │ Empresa B  [Respondida] ▼            │ │
│ │ ┌────────────────────────────────────┐ │
│ │ │ Contatos:                          │ │
│ │ │ ...                                │ │
│ │ └────────────────────────────────────┘ │
│ └──────────────────────────────────────┘ │
└──────────────────────────────────────────┘
```

---

## 💻 Código Importante

### Criar Pesquisa e Pobular Contatos
```php
// processar_nova_pesquisa.php

// Obter empresas ativas
$stmt = $conn->prepare("SELECT ID_EMPRESA FROM empresas WHERE ATIVA = 'S'");
$stmt->execute();
$empresas = $stmt->get_result();

// Para cada empresa
while ($empresa = $empresas->fetch_assoc()) {
    // Criar pesquisa_empresa
    $stmt_insert = $conn->prepare(
        "INSERT INTO pesquisa_empresa (id_pesquisa_fk, id_empresa_fk, status) 
         VALUES (?, ?, 'pendente')"
    );
    $stmt_insert->bind_param('ii', $id_pesquisa, $empresa['ID_EMPRESA']);
    $stmt_insert->execute();
    $id_pesquisa_empresa = $conn->insert_id;
    
    // Buscar contatos ativos
    $stmt_contatos = $conn->prepare(
        "SELECT idcontatos_empresa, nome, email, telefone, area 
         FROM contatos_empresa 
         WHERE id_empresa = ? AND ativo = 'S'"
    );
    $stmt_contatos->bind_param('i', $empresa['ID_EMPRESA']);
    $stmt_contatos->execute();
    $contatos = $stmt_contatos->get_result();
    
    // Para cada contato, inserir em pesquisa_contatos
    while ($contato = $contatos->fetch_assoc()) {
        $stmt_contato = $conn->prepare(
            "INSERT INTO pesquisa_contatos 
             (id_pesquisa_empresa_fk, id_contato_empresa_fk, nome, email, telefone, area) 
             VALUES (?, ?, ?, ?, ?, ?)"
        );
        $stmt_contato->bind_param(
            'iissss',
            $id_pesquisa_empresa,
            $contato['idcontatos_empresa'],
            $contato['nome'],
            $contato['email'],
            $contato['telefone'],
            $contato['area']
        );
        $stmt_contato->execute();
    }
}
```

### Accordion JavaScript
```javascript
// visualizar_pesquisa.php

function toggleContatos(element) {
    const contatosList = element.nextElementSibling;
    contatosList.classList.toggle('show');
    
    // Rotacionar seta
    const arrow = element.querySelector('span:last-child');
    if (arrow) {
        arrow.style.transform = contatosList.classList.contains('show') 
            ? 'rotate(180deg)' 
            : 'rotate(0deg)';
    }
}
```

### Exibir Contatos
```php
// visualizar_pesquisa.php

// Dentro do loop de empresas
$stmt_contatos = $conn->prepare(
    "SELECT * FROM pesquisa_contatos 
     WHERE id_pesquisa_empresa_fk = ?"
);
$stmt_contatos->bind_param('i', $empresa['id']);
$stmt_contatos->execute();
$contatos = $stmt_contatos->get_result();

while ($contato = $contatos->fetch_assoc()) {
    echo '<div class="contato-item">';
    echo '  <div class="contato-nome">📧 ' . $contato['nome'] . '</div>';
    echo '  <div class="contato-info">';
    if ($contato['email']) echo 'Email: ' . $contato['email'] . '<br>';
    if ($contato['telefone']) echo 'Telefone: ' . $contato['telefone'] . '<br>';
    if ($contato['area']) echo 'Área: ' . $contato['area'];
    echo '  </div>';
    echo '</div>';
}
```

---

## 🧪 Teste Rápido

### 1. Acessar Sistema
```
http://localhost/aplicacao%20itltech/montagem_questionario.php
Clique: [📊 Pesquisas]
Clique: [Nova Pesquisa]
```

### 2. Criar Pesquisa
Preencha:
- **Nome:** "Pesquisa Teste"
- **Data:** (data de hoje)
- **Status:** Ativa
- **Questionário:** (selecione um)
- **Descrição:** "Teste de accordion"

Clique: [Salvar Pesquisa]

### 3. Verificar Resultados
Deve aparecer:
- ✅ Mensagem: "Pesquisa criada para X empresa(s)"
- ✅ Lista de empresas em accordion
- ✅ Nomes das empresas clicáveis
- ✅ Contatos aparecem ao clicar

### 4. Verificar Banco
```sql
-- Ver pesquisas criadas
SELECT id, nome, status FROM pesquisas;

-- Ver distribuição
SELECT pe.id, pe.id_pesquisa_fk, e.NOME_FANTASIA, pe.status
FROM pesquisa_empresa pe
LEFT JOIN empresas e ON pe.id_empresa_fk = e.ID_EMPRESA
ORDER BY pe.id_pesquisa_fk;

-- Ver contatos da primeira pesquisa
SELECT pc.* FROM pesquisa_contatos pc
WHERE pc.id_pesquisa_empresa_fk IN (
    SELECT id FROM pesquisa_empresa WHERE id_pesquisa_fk = 1
);
```

---

## 🔒 Validações

### Entrada (nova_pesquisa.php):
- ✅ Nome obrigatório
- ✅ Questionário obrigatório
- ✅ Data obrigatória

### Processamento (processar_nova_pesquisa.php):
- ✅ Template existe e está ativo
- ✅ Apenas empresas com ATIVA='S'
- ✅ Apenas contatos com ativo='S'
- ✅ Tratamento de erros em INSERT

### Visualização (visualizar_pesquisa.php):
- ✅ Pesquisa existe
- ✅ Empresas existem
- ✅ Contatos existem
- ✅ Tratamento de deletados

---

## 🚀 Próximas Funcionalidades

### 1. responder_pesquisa.php (Próximo)
- [ ] Formulário para responder questionário
- [ ] Buscar perguntas do template
- [ ] Salvar respostas em pesquisa_respostas
- [ ] Atualizar status para 'respondida'

### 2. Melhorias
- [ ] Filtros avançados (status, data, empresa)
- [ ] Exportação (CSV/PDF)
- [ ] Gráficos de progresso
- [ ] Relatórios de respostas
- [ ] Envio de emails
- [ ] Notificações

---

## 📝 Notas Técnicas

### Bind Parameters
```
Pesquisa:       sisss (5 params)
Empresa:        ii    (2 params)
Contato:        iissss (6 params)
```

### Constraints
```
pesquisa_empresa tem UNIQUE(id_pesquisa_fk, id_empresa_fk)
Evita duplicatas de pesquisa por empresa
```

### Indexes
```
idx_pesquisa_template → Acesso rápido por template
idx_pesquisa_status → Filtrar por status
idx_pesquisa_empresa → Acesso rápido por pesquisa
idx_pesquisa_contatos → Acesso rápido por empresa
```

---

## ✅ Checklist de Implementação

- [x] Tabelas criadas no banco de dados
- [x] Arquivo SQL com schema completo
- [x] nova_pesquisa.php com formulário
- [x] processar_nova_pesquisa.php com lógica
- [x] pesquisas.php com listagem
- [x] visualizar_pesquisa.php com accordion
- [x] JavaScript para toggle accordion
- [x] CSS para animações
- [x] Validações de entrada
- [x] Tratamento de erros
- [x] Ligação entre páginas
- [x] Botão em montagem_questionario.php

---

## 📞 Suporte

Se encontrar problemas:
1. Verifique se as tabelas existem (execute criar_tabelas_pesquisas.sql)
2. Verifique se há empresas ativas com contatos ativos
3. Verifique o console do navegador (F12) para erros de JavaScript
4. Verifique os logs do servidor para erros de PHP

---

**Sistema implementado com sucesso! 🎉**
