# 📝 Sistema de Assinatura Digital

## ✅ O que foi implementado

### 1. Estrutura de Banco de Dados
- ✅ `document_signatures` - Sessões de assinatura
- ✅ `document_signers` - Signatários e suas assinaturas
- ✅ `signature_emails` - Histórico de emails enviados

**Arquivo:** `sql/create_document_signatures_tables.sql`

### 2. Models
- ✅ `DocumentSignature` - Gerencia sessões de assinatura
- ✅ `DocumentSigner` - Gerencia signatários

**Arquivos:**
- `src/Models/DocumentSignature.php`
- `src/Models/DocumentSigner.php`

### 3. Controller
- ✅ `SignaturesController` - Gerencia todo o fluxo de assinaturas

**Arquivo:** `src/Controllers/SignaturesController.php`

**Métodos implementados:**
- `startCollection()` - Inicia processo de coleta
- `configure()` - Configura signatários
- `addSigner()` - Adiciona signatário
- `removeSigner()` - Remove signatário
- `sendEmails()` - Envia emails com links
- `manage()` - Gerencia e visualiza status
- `sign()` - Página pública de assinatura
- `processSign()` - Processa assinatura
- `getStats()` - Retorna estatísticas (AJAX)

### 4. Utilitário de Email
- ✅ `Email` - Classe para envio de emails

**Arquivo:** `src/Utils/Email.php`

---

## 📋 Próximos Passos

### 1. Executar SQL
Execute o arquivo `sql/create_document_signatures_tables.sql` no phpMyAdmin.

### 2. Adicionar Rotas
Adicione as seguintes rotas em `public/index.php`:

```php
// Assinaturas Digitais
$router->post('/signatures/start', 'SignaturesController@startCollection');
$router->get('/signatures/configure', 'SignaturesController@configure');
$router->post('/signatures/add-signer', 'SignaturesController@addSigner');
$router->post('/signatures/remove-signer', 'SignaturesController@removeSigner');
$router->post('/signatures/send-emails', 'SignaturesController@sendEmails');
$router->get('/signatures/manage', 'SignaturesController@manage');
$router->get('/signatures/sign', 'SignaturesController@sign');
$router->post('/signatures/process-sign', 'SignaturesController@processSign');
$router->get('/signatures/get-stats', 'SignaturesController@getStats');
```

### 3. Criar Views
Criar as seguintes views em `templates/signatures/`:

1. **configure.php** - Configuração de signatários
2. **manage.php** - Gerenciamento e status
3. **sign.php** - Página pública de assinatura
4. **sign_success.php** - Confirmação de assinatura
5. **sign_error.php** - Erro na assinatura
6. **invalid_token.php** - Token inválido

### 4. Adicionar Botão nos Documentos
Adicionar botão "Coletar Assinaturas" nas listagens de documentos:
- `templates/documents/partnership_contracts.php`
- Listagem de TCE (onde aplicável)

### 5. Adicionar Coluna de Status
Adicionar coluna "Assinaturas" nas tabelas de documentos mostrando:
- Número de assinaturas coletadas (ex: 3/5)
- Link clicável para ver detalhes

### 6. Adicionar Permissões
Criar script SQL para adicionar permissões:
- `assinaturas.view`
- `assinaturas.manage`
- `assinaturas.send`

---

## 🔄 Fluxo de Uso

1. **Usuário gera um documento** (TCE, Contrato de Parceria, etc.)
2. **Clica em "Coletar Assinaturas"** → Cria sessão de assinatura
3. **Configura signatários** → Adiciona nome, email, ordem
4. **Envia emails** → Sistema envia links únicos por email
5. **Signatários recebem email** → Clicam no link
6. **Assinam documento** → Página pública com canvas para assinar
7. **Sistema atualiza status** → Mostra progresso (3/5, 4/5, etc.)
8. **Quando completo** → Status muda para "completed"

---

## 📧 Configuração de Email

O sistema usa a função `mail()` do PHP. Para produção, configure:

1. **Variáveis de ambiente** (opcional):
```env
MAIL_FROM_EMAIL=noreply@seudominio.com
MAIL_FROM_NAME=Sistema de Assinaturas
```

2. **Ou edite** `src/Utils/Email.php` diretamente.

**Recomendação:** Para produção, considere usar PHPMailer ou serviço de email (SendGrid, Mailgun, etc.)

---

## 🔐 Segurança

- ✅ Tokens únicos para cada signatário
- ✅ Validação de token antes de permitir assinatura
- ✅ Tokens expiram após uso (status muda para 'signed')
- ✅ Registro de IP e User Agent
- ✅ CSRF protection em todas as ações
- ✅ Autenticação requerida para gerenciar assinaturas

---

## 📱 WhatsApp (Futuro)

Para implementar envio automático por WhatsApp:

1. Integrar com API do WhatsApp Business
2. Ou usar serviço como Twilio, MessageBird
3. Adicionar método `sendWhatsApp()` em `SignaturesController`
4. Gerar link curto para compartilhar

Por enquanto, os links podem ser copiados manualmente e enviados por WhatsApp.

---

## 🎨 Interface de Assinatura

A página de assinatura (`sign.php`) deve incluir:
- Visualização do documento (PDF ou HTML)
- Canvas para desenhar assinatura
- Botão "Assinar"
- Validação de campos (se necessário)

**Biblioteca recomendada:** Signature Pad (https://github.com/szimek/signature_pad)

---

## 📊 Status das Assinaturas

**Status da Sessão:**
- `pending` - Aguardando configuração
- `in_progress` - Em andamento (algumas assinaturas coletadas)
- `completed` - Todas as assinaturas coletadas
- `cancelled` - Cancelada

**Status do Signatário:**
- `pending` - Aguardando envio
- `sent` - Email enviado, aguardando assinatura
- `signed` - Assinado
- `expired` - Token expirado (se implementado)

---

## 🐛 Troubleshooting

### Emails não são enviados
- Verifique configuração do servidor (função `mail()`)
- Verifique logs em `logs/`
- Teste com email de teste primeiro

### Token inválido
- Verifique se token não foi usado antes
- Verifique se não expirou (se implementado)
- Verifique se sessão de assinatura ainda está ativa

### Assinatura não registra
- Verifique logs em `logs/`
- Verifique se `signature_data` está sendo enviado
- Verifique conexão com banco de dados

---

## 📝 Notas Importantes

1. **Multi-tenancy:** O sistema funciona com multi-tenancy (cada franquia tem seu próprio banco)
2. **Documentos suportados:** `document_contract` e `tce_contract`
3. **Ordem de assinatura:** Pode ser configurada (campo `sign_order`)
4. **Histórico:** Todos os emails enviados são registrados em `signature_emails`
5. **Dados da assinatura:** Armazenados como texto (base64 ou JSON) em `signature_data`

---

## 🚀 Melhorias Futuras

- [ ] Assinatura com certificado digital
- [ ] Envio automático por WhatsApp
- [ ] Notificações por email quando todos assinarem
- [ ] Reenvio de links de assinatura
- [ ] Download de documento assinado (com assinaturas visíveis)
- [ ] Assinatura em lote (múltiplos documentos)
- [ ] Templates de email customizáveis
- [ ] Relatórios de assinaturas

