Feat ajuste acesso #5
@@ -1,371 +0,0 @@
|
|||||||
# ✅ COMO ASSOCIAR FUNCIONÁRIO A USUÁRIO
|
|
||||||
|
|
||||||
**Data:** 30 de outubro de 2025
|
|
||||||
**Objetivo:** Associar cadastro de funcionário a usuários para habilitar funcionalidades como férias
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎯 PROBLEMA RESOLVIDO
|
|
||||||
|
|
||||||
**ANTES:**
|
|
||||||
❌ "Perfil de funcionário não encontrado" ao tentar solicitar férias
|
|
||||||
❌ Usuários não tinham acesso a funcionalidades de RH
|
|
||||||
❌ Sem interface para fazer associação
|
|
||||||
|
|
||||||
**DEPOIS:**
|
|
||||||
✅ Interface completa em **TI > Gerenciar Usuários**
|
|
||||||
✅ Busca e seleção visual de funcionários
|
|
||||||
✅ Validação de duplicidade
|
|
||||||
✅ Opção de associar, alterar e desassociar
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🚀 COMO USAR (PASSO A PASSO)
|
|
||||||
|
|
||||||
### 1️⃣ Acesse o Gerenciamento de Usuários
|
|
||||||
|
|
||||||
```
|
|
||||||
1. Faça login como TI_MASTER
|
|
||||||
2. Menu lateral > Tecnologia da Informação
|
|
||||||
3. Click em "Gerenciar Usuários"
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 2️⃣ Localize o Usuário
|
|
||||||
|
|
||||||
**Opção A: Busca Direta**
|
|
||||||
- Digite nome, matrícula ou email no campo de busca
|
|
||||||
|
|
||||||
**Opção B: Filtros**
|
|
||||||
- Filtre por status: Todos / Ativos / Bloqueados / Inativos
|
|
||||||
|
|
||||||
**Visual:**
|
|
||||||
```
|
|
||||||
┌─────────────────────────────────────────────────┐
|
|
||||||
│ Matrícula │ Nome │ Email │ Funcionário │ Status │
|
|
||||||
├───────────┼──────┼───────┼─────────────┼────────┤
|
|
||||||
│ 00001 │ TI │ ti@ │ ⚠️ Não │ ✅ │
|
|
||||||
│ │Master│gov.br │ associado │ Ativo │
|
|
||||||
└─────────────────────────────────────────────────┘
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 3️⃣ Associar Funcionário
|
|
||||||
|
|
||||||
**Click no botão azul "Associar" ou "Alterar"**
|
|
||||||
|
|
||||||
Um modal abrirá com:
|
|
||||||
|
|
||||||
```
|
|
||||||
┌─────────────────────────────────────────────┐
|
|
||||||
│ Associar Funcionário ao Usuário │
|
|
||||||
├─────────────────────────────────────────────┤
|
|
||||||
│ Usuário: Gestor TI Master (00001) │
|
|
||||||
│ │
|
|
||||||
│ Buscar Funcionário: │
|
|
||||||
│ [Digite nome, CPF ou matrícula...] │
|
|
||||||
│ │
|
|
||||||
│ Selecione o Funcionário: │
|
|
||||||
│ ┌─────────────────────────────────────────┐ │
|
|
||||||
│ │ ○ João da Silva │ │
|
|
||||||
│ │ CPF: 123.456.789-00 │ │
|
|
||||||
│ │ Cargo: Analista │ │
|
|
||||||
│ ├─────────────────────────────────────────┤ │
|
|
||||||
│ │ ● Maria Santos (SELECIONADO) │ │
|
|
||||||
│ │ CPF: 987.654.321-00 │ │
|
|
||||||
│ │ Cargo: Gestor │ │
|
|
||||||
│ └─────────────────────────────────────────┘ │
|
|
||||||
│ │
|
|
||||||
│ [Cancelar] [Desassociar] [Associar] │
|
|
||||||
└─────────────────────────────────────────────┘
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 4️⃣ Buscar e Selecionar
|
|
||||||
|
|
||||||
1. **Busque o funcionário** (digite nome, CPF ou matrícula)
|
|
||||||
2. **Click no radio button** ao lado do funcionário correto
|
|
||||||
3. **Verifique os dados** (nome, CPF, cargo)
|
|
||||||
4. **Click em "Associar"**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 5️⃣ Confirmação
|
|
||||||
|
|
||||||
✅ **Sucesso!** Você verá:
|
|
||||||
```
|
|
||||||
Alert: "Funcionário associado com sucesso!"
|
|
||||||
```
|
|
||||||
|
|
||||||
A coluna "Funcionário" agora mostrará:
|
|
||||||
```
|
|
||||||
✅ Associado (badge verde)
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🧪 TESTAR O SISTEMA DE FÉRIAS
|
|
||||||
|
|
||||||
### Após associar o funcionário:
|
|
||||||
|
|
||||||
1. **Recarregue a página** (F5)
|
|
||||||
|
|
||||||
2. **Acesse seu Perfil:**
|
|
||||||
- Click no avatar (canto superior direito)
|
|
||||||
- "Meu Perfil"
|
|
||||||
|
|
||||||
3. **Vá para "Minhas Férias":**
|
|
||||||
- Agora deve mostrar o **Dashboard de Férias** ✨
|
|
||||||
- Sem mais erro de "Perfil não encontrado"!
|
|
||||||
|
|
||||||
4. **Solicite Férias:**
|
|
||||||
- Click em "Solicitar Novas Férias"
|
|
||||||
- Siga o wizard de 3 passos
|
|
||||||
- Teste o calendário interativo
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔧 FUNCIONALIDADES DO MODAL
|
|
||||||
|
|
||||||
### ✅ Associar Novo Funcionário
|
|
||||||
- Busca em tempo real
|
|
||||||
- Ordenação alfabética
|
|
||||||
- Exibe nome, CPF, matrícula e cargo
|
|
||||||
|
|
||||||
### 🔄 Alterar Funcionário Associado
|
|
||||||
- Mesma interface
|
|
||||||
- Alert avisa se já tem associação
|
|
||||||
- Atualiza automaticamente
|
|
||||||
|
|
||||||
### ❌ Desassociar Funcionário
|
|
||||||
- Botão vermelho "Desassociar"
|
|
||||||
- Confirmação antes de executar
|
|
||||||
- Remove a associação
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🛡️ VALIDAÇÕES E SEGURANÇA
|
|
||||||
|
|
||||||
### ✅ O Sistema Verifica:
|
|
||||||
|
|
||||||
1. **Funcionário existe?**
|
|
||||||
```
|
|
||||||
❌ Erro: "Funcionário não encontrado"
|
|
||||||
```
|
|
||||||
|
|
||||||
2. **Já está associado a outro usuário?**
|
|
||||||
```
|
|
||||||
❌ Erro: "Este funcionário já está associado ao usuário: João Silva (12345)"
|
|
||||||
```
|
|
||||||
|
|
||||||
3. **Funcionário selecionado?**
|
|
||||||
```
|
|
||||||
❌ Botão "Associar" fica desabilitado
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎨 INDICADORES VISUAIS
|
|
||||||
|
|
||||||
### Coluna "Funcionário"
|
|
||||||
|
|
||||||
**✅ Associado:**
|
|
||||||
```
|
|
||||||
🟢 Badge verde com ícone de check
|
|
||||||
```
|
|
||||||
|
|
||||||
**⚠️ Não Associado:**
|
|
||||||
```
|
|
||||||
🟡 Badge amarelo com ícone de alerta
|
|
||||||
```
|
|
||||||
|
|
||||||
### Botão de Ação
|
|
||||||
|
|
||||||
**🔵 Associar** (azul)
|
|
||||||
- Usuário sem funcionário
|
|
||||||
|
|
||||||
**🔵 Alterar** (azul)
|
|
||||||
- Usuário com funcionário já associado
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📊 ESTATÍSTICAS
|
|
||||||
|
|
||||||
Você pode ver quantos usuários têm/não têm funcionários:
|
|
||||||
|
|
||||||
```
|
|
||||||
Cards no topo:
|
|
||||||
┌─────────┬─────────┬────────────┬──────────┐
|
|
||||||
│ Total │ Ativos │ Bloqueados │ Inativos │
|
|
||||||
│ 42 │ 38 │ 2 │ 2 │
|
|
||||||
└─────────┴─────────┴────────────┴──────────┘
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🐛 TROUBLESHOOTING
|
|
||||||
|
|
||||||
### Problema: "Funcionário já está associado"
|
|
||||||
|
|
||||||
**Causa:** Funcionário está vinculado a outro usuário
|
|
||||||
|
|
||||||
**Solução:**
|
|
||||||
1. Identifique qual usuário tem o funcionário (mensagem de erro mostra)
|
|
||||||
2. Desassocie do usuário antigo primeiro
|
|
||||||
3. Associe ao usuário correto
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Problema: Lista de funcionários vazia
|
|
||||||
|
|
||||||
**Causa:** Nenhum funcionário cadastrado no sistema
|
|
||||||
|
|
||||||
**Solução:**
|
|
||||||
1. Vá em **Recursos Humanos > Gestão de Funcionários**
|
|
||||||
2. Click em "Cadastrar Funcionário"
|
|
||||||
3. Preencha os dados e salve
|
|
||||||
4. Volte para associar
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Problema: Busca não funciona
|
|
||||||
|
|
||||||
**Causa:** Nome/CPF/matrícula não confere
|
|
||||||
|
|
||||||
**Solução:**
|
|
||||||
1. Limpe o campo de busca
|
|
||||||
2. Veja lista completa
|
|
||||||
3. Procure visualmente
|
|
||||||
4. Click para selecionar
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 💡 DICAS PRO
|
|
||||||
|
|
||||||
### 1. Associação em Lote
|
|
||||||
|
|
||||||
Para associar vários usuários:
|
|
||||||
```
|
|
||||||
1. Filtre por "Não associado"
|
|
||||||
2. Associe um por vez
|
|
||||||
3. Use busca rápida de funcionários
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. Verificar Associações
|
|
||||||
|
|
||||||
```
|
|
||||||
Filtro de coluna "Funcionário":
|
|
||||||
- Badge verde = OK
|
|
||||||
- Badge amarelo = Pendente
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3. Organização
|
|
||||||
|
|
||||||
```
|
|
||||||
Recomendação:
|
|
||||||
- Associe funcionários assim que criar usuários
|
|
||||||
- Mantenha dados sincronizados
|
|
||||||
- Revise periodicamente
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎯 CASO DE USO: SEU TESTE DE FÉRIAS
|
|
||||||
|
|
||||||
### Para o seu usuário TI Master:
|
|
||||||
|
|
||||||
1. **Acesse:** TI > Gerenciar Usuários
|
|
||||||
|
|
||||||
2. **Localize:** Seu usuário (ti.master@sgse.pe.gov.br)
|
|
||||||
|
|
||||||
3. **Click:** Botão azul "Associar"
|
|
||||||
|
|
||||||
4. **Busque:** Seu nome ou crie um funcionário de teste
|
|
||||||
|
|
||||||
5. **Selecione:** O funcionário correto
|
|
||||||
|
|
||||||
6. **Confirme:** Click em "Associar"
|
|
||||||
|
|
||||||
7. **Teste:** Perfil > Minhas Férias
|
|
||||||
|
|
||||||
✅ **Pronto!** Agora você pode testar todo o sistema de férias!
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📝 CHECKLIST DE VERIFICAÇÃO
|
|
||||||
|
|
||||||
Após associar, verifique:
|
|
||||||
|
|
||||||
- [ ] Badge mudou de amarelo para verde
|
|
||||||
- [ ] Recarreguei a página
|
|
||||||
- [ ] Acessei meu perfil
|
|
||||||
- [ ] Abri aba "Minhas Férias"
|
|
||||||
- [ ] Dashboard carregou corretamente
|
|
||||||
- [ ] Não aparece mais erro
|
|
||||||
- [ ] Posso clicar em "Solicitar Férias"
|
|
||||||
- [ ] Wizard abre normalmente
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎉 RESULTADO ESPERADO
|
|
||||||
|
|
||||||
**Interface Completa:**
|
|
||||||
```
|
|
||||||
TI > Gerenciar Usuários
|
|
||||||
└── Tabela com coluna "Funcionário"
|
|
||||||
├── Badge: ✅ Associado / ⚠️ Não associado
|
|
||||||
└── Botão: [Associar] ou [Alterar]
|
|
||||||
└── Modal com:
|
|
||||||
├── Busca de funcionários
|
|
||||||
├── Lista com radio buttons
|
|
||||||
└── Botões: Cancelar | Desassociar | Associar
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔗 ARQUIVOS MODIFICADOS
|
|
||||||
|
|
||||||
### Frontend:
|
|
||||||
```
|
|
||||||
apps/web/src/routes/(dashboard)/ti/usuarios/+page.svelte
|
|
||||||
├── + Coluna "Funcionário" na tabela
|
|
||||||
├── + Badge de status (Associado/Não associado)
|
|
||||||
├── + Botão "Associar/Alterar"
|
|
||||||
├── + Modal de seleção de funcionários
|
|
||||||
├── + Busca em tempo real
|
|
||||||
└── + Funções: associar/desassociar
|
|
||||||
```
|
|
||||||
|
|
||||||
### Backend:
|
|
||||||
```
|
|
||||||
packages/backend/convex/usuarios.ts
|
|
||||||
├── + associarFuncionario() mutation
|
|
||||||
├── + desassociarFuncionario() mutation
|
|
||||||
└── + Validação de duplicidade
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ✅ CONCLUSÃO
|
|
||||||
|
|
||||||
Agora você tem uma **interface completa e profissional** para:
|
|
||||||
|
|
||||||
✅ Associar funcionários a usuários
|
|
||||||
✅ Alterar associações
|
|
||||||
✅ Desassociar quando necessário
|
|
||||||
✅ Buscar e filtrar funcionários
|
|
||||||
✅ Validações automáticas
|
|
||||||
✅ Feedback visual claro
|
|
||||||
|
|
||||||
**RESULTADO:** Todos os usuários podem agora acessar funcionalidades que dependem de cadastro de funcionário, como **Gestão de Férias**! 🎉
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Desenvolvido por:** Equipe SGSE
|
|
||||||
**Data:** 30 de outubro de 2025
|
|
||||||
**Versão:** 1.0.0 - Associação de Funcionários
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,256 +0,0 @@
|
|||||||
# ✅ CORREÇÕES COMPLETAS - Emails e Notificações
|
|
||||||
|
|
||||||
**Data:** 30/10/2025
|
|
||||||
**Status:** ✅ **TUDO FUNCIONANDO 100%**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎯 PROBLEMAS IDENTIFICADOS E RESOLVIDOS
|
|
||||||
|
|
||||||
### 1. ❌ → ✅ **Sistema de Email NÃO estava funcionando**
|
|
||||||
|
|
||||||
#### **Problema:**
|
|
||||||
- O sistema apenas **simulava** o envio de emails
|
|
||||||
- Mensagem no código: `"⚠️ AVISO: Envio de email simulado (nodemailer não instalado)"`
|
|
||||||
- Emails nunca eram realmente enviados, mesmo com SMTP configurado
|
|
||||||
|
|
||||||
#### **Solução Aplicada:**
|
|
||||||
```
|
|
||||||
✅ Instalado: nodemailer + @types/nodemailer
|
|
||||||
✅ Implementado: Envio REAL de emails via SMTP
|
|
||||||
✅ Validação: Requer configuração SMTP testada antes de enviar
|
|
||||||
✅ Tratamento: Erros detalhados + retry automático
|
|
||||||
✅ Cron Job: Processa fila a cada 2 minutos automaticamente
|
|
||||||
```
|
|
||||||
|
|
||||||
#### **Arquivo Modificado:**
|
|
||||||
- `packages/backend/convex/email.ts`
|
|
||||||
- Linha 147-243: Implementação real com nodemailer
|
|
||||||
- Linha 248-284: Processamento da fila corrigido
|
|
||||||
|
|
||||||
#### **Cron Job Adicionado:**
|
|
||||||
- `packages/backend/convex/crons.ts`
|
|
||||||
- Nova linha 36-42: Processa fila de emails a cada 2 minutos
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 2. ❌ → ✅ **Página de Notificações NÃO enviava nada**
|
|
||||||
|
|
||||||
#### **Problema:**
|
|
||||||
- Função `enviarNotificacao()` tinha `// TODO: Implementar envio`
|
|
||||||
- Apenas exibia `console.log` e alert de sucesso falso
|
|
||||||
- Nenhuma notificação era realmente enviada
|
|
||||||
|
|
||||||
#### **Solução Aplicada:**
|
|
||||||
```
|
|
||||||
✅ Implementado: Envio real para CHAT
|
|
||||||
✅ Implementado: Envio real para EMAIL
|
|
||||||
✅ Suporte: Envio combinado (AMBOS canais)
|
|
||||||
✅ Feedback: Mensagens específicas por canal
|
|
||||||
✅ Validações: Email obrigatório para envio por email
|
|
||||||
```
|
|
||||||
|
|
||||||
#### **Arquivo Modificado:**
|
|
||||||
- `apps/web/src/routes/(dashboard)/ti/notificacoes/+page.svelte`
|
|
||||||
- Linha 20-130: Implementação completa do envio real
|
|
||||||
|
|
||||||
#### **Funcionalidades:**
|
|
||||||
- **Chat:** Cria conversa individual + envia mensagem
|
|
||||||
- **Email:** Enfileira email (processado pelo cron)
|
|
||||||
- **Ambos:** Envia pelos dois canais simultaneamente
|
|
||||||
- **Templates:** Suporte completo a templates de mensagem
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 3. ✅ **Warnings de Acessibilidade Corrigidos**
|
|
||||||
|
|
||||||
#### **Problemas Encontrados:**
|
|
||||||
- Botões sem `aria-label` (4 botões)
|
|
||||||
- Elementos não-interativos com eventos (form, ul)
|
|
||||||
- Labels sem controles associados (1 ocorrência)
|
|
||||||
|
|
||||||
#### **Arquivos Corrigidos:**
|
|
||||||
|
|
||||||
**1. `apps/web/src/lib/components/Sidebar.svelte`**
|
|
||||||
- Linha 232: Adicionado `svelte-ignore` para `<ul tabindex="0">`
|
|
||||||
- Linha 473-475: Adicionado `svelte-ignore` para `<form>` com onclick
|
|
||||||
|
|
||||||
**2. `apps/web/src/lib/components/FileUpload.svelte`**
|
|
||||||
- Linha 268: Trocado `<label>` por `<div>` (texto de erro)
|
|
||||||
|
|
||||||
**3. `apps/web/src/routes/(dashboard)/ti/perfis/+page.svelte`**
|
|
||||||
- Linha 414: Botão "Ver Detalhes" + `aria-label`
|
|
||||||
- Linha 443: Botão "Editar" + `aria-label`
|
|
||||||
- Linha 466: Botão "Clonar" + `aria-label`
|
|
||||||
- Linha 489: Botão "Excluir" + `aria-label`
|
|
||||||
- Linha 932-935: Botões com `type="button"`
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📋 COMO TESTAR
|
|
||||||
|
|
||||||
### **1. Testar Envio de Email**
|
|
||||||
|
|
||||||
#### **Passo 1: Configurar SMTP** (se ainda não fez)
|
|
||||||
1. Vá em: `TI > Configurações de Email`
|
|
||||||
2. Preencha:
|
|
||||||
```
|
|
||||||
Servidor SMTP: smtp.gmail.com (ou seu servidor)
|
|
||||||
Porta: 587 (TLS) ou 465 (SSL)
|
|
||||||
Usuário: seu-email@gmail.com
|
|
||||||
Senha: sua-senha-app (Gmail requer senha de app)
|
|
||||||
```
|
|
||||||
3. Clique em **"Testar Conexão SMTP"**
|
|
||||||
4. Aguarde mensagem: ✅ "Conexão testada com sucesso!"
|
|
||||||
|
|
||||||
#### **Passo 2: Enviar Notificação**
|
|
||||||
1. Vá em: `TI > Notificações`
|
|
||||||
2. Selecione:
|
|
||||||
- **Destinatário:** Qualquer usuário
|
|
||||||
- **Canal:** Email (ou Ambos)
|
|
||||||
- **Template:** Escolha um template ou escreva mensagem
|
|
||||||
3. Clique em **"Enviar"**
|
|
||||||
4. Aguarde: ✅ "Email enfileirado para envio!"
|
|
||||||
|
|
||||||
#### **Passo 3: Verificar Envio**
|
|
||||||
- **Método 1:** Aguarde 2 minutos (cron processa automaticamente)
|
|
||||||
- **Método 2:** Verifique logs do Convex no terminal
|
|
||||||
|
|
||||||
**Resultado Esperado:**
|
|
||||||
```
|
|
||||||
✅ Email enviado com sucesso!
|
|
||||||
Para: destinatario@email.com
|
|
||||||
Assunto: [Assunto do email]
|
|
||||||
Message ID: <123abc@...>
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **2. Testar Envio de Chat**
|
|
||||||
|
|
||||||
1. Vá em: `TI > Notificações`
|
|
||||||
2. Selecione:
|
|
||||||
- **Destinatário:** Qualquer usuário online
|
|
||||||
- **Canal:** Chat
|
|
||||||
- **Mensagem:** Digite algo
|
|
||||||
3. Clique em **"Enviar"**
|
|
||||||
4. Abra o Chat (ícone no canto superior direito)
|
|
||||||
5. Verifique: A mensagem deve aparecer na conversa
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎯 FUNCIONALIDADES IMPLEMENTADAS
|
|
||||||
|
|
||||||
### **Sistema de Email:**
|
|
||||||
- ✅ Envio real via SMTP (nodemailer)
|
|
||||||
- ✅ Fila de emails pendentes
|
|
||||||
- ✅ Processamento automático (cron a cada 2 min)
|
|
||||||
- ✅ Retry automático (até 3 tentativas)
|
|
||||||
- ✅ Status detalhado (pendente, enviando, enviado, falha)
|
|
||||||
- ✅ Logs de erro detalhados
|
|
||||||
- ✅ Validação de configuração SMTP testada
|
|
||||||
|
|
||||||
### **Sistema de Notificações:**
|
|
||||||
- ✅ Envio para Chat (mensagem imediata)
|
|
||||||
- ✅ Envio para Email (enfileirado)
|
|
||||||
- ✅ Envio Combinado (Chat + Email)
|
|
||||||
- ✅ Suporte a Templates
|
|
||||||
- ✅ Mensagem Personalizada
|
|
||||||
- ✅ Feedback específico por canal
|
|
||||||
|
|
||||||
### **Acessibilidade:**
|
|
||||||
- ✅ Todos os botões com `aria-label`
|
|
||||||
- ✅ Botões com `type="button"` explícito
|
|
||||||
- ✅ Warnings do Svelte suprimidos apropriadamente
|
|
||||||
- ✅ Labels sem controles corrigidas
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📦 DEPENDÊNCIAS INSTALADAS
|
|
||||||
|
|
||||||
```bash
|
|
||||||
✅ nodemailer@7.0.10
|
|
||||||
✅ @types/nodemailer@7.0.3
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔧 ARQUIVOS MODIFICADOS
|
|
||||||
|
|
||||||
### **Backend:**
|
|
||||||
1. ✅ `packages/backend/convex/email.ts` (implementação real)
|
|
||||||
2. ✅ `packages/backend/convex/crons.ts` (cron job adicionado)
|
|
||||||
|
|
||||||
### **Frontend:**
|
|
||||||
3. ✅ `apps/web/src/routes/(dashboard)/ti/notificacoes/+page.svelte` (envio real)
|
|
||||||
4. ✅ `apps/web/src/lib/components/Sidebar.svelte` (acessibilidade)
|
|
||||||
5. ✅ `apps/web/src/lib/components/FileUpload.svelte` (acessibilidade)
|
|
||||||
6. ✅ `apps/web/src/routes/(dashboard)/ti/perfis/+page.svelte` (acessibilidade)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ⚠️ IMPORTANTE: CONFIGURAÇÃO SMTP
|
|
||||||
|
|
||||||
### **Gmail:**
|
|
||||||
```
|
|
||||||
Servidor: smtp.gmail.com
|
|
||||||
Porta: 587 (TLS)
|
|
||||||
Usuário: seu-email@gmail.com
|
|
||||||
Senha: [Senha de App - não a senha normal]
|
|
||||||
```
|
|
||||||
|
|
||||||
**Como gerar Senha de App no Gmail:**
|
|
||||||
1. Vá em: https://myaccount.google.com/security
|
|
||||||
2. Ative a **"Verificação em duas etapas"**
|
|
||||||
3. Acesse: **"Senhas de app"**
|
|
||||||
4. Gere uma senha para "Email" ou "Outro"
|
|
||||||
5. Use essa senha de 16 dígitos
|
|
||||||
|
|
||||||
### **Outros Provedores:**
|
|
||||||
- **Outlook/Hotmail:** smtp-mail.outlook.com (porta 587)
|
|
||||||
- **Yahoo:** smtp.mail.yahoo.com (porta 587)
|
|
||||||
- **SMTP Corporativo:** Verifique com sua equipe de TI
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🚀 PRÓXIMOS PASSOS
|
|
||||||
|
|
||||||
### **1. Configure o SMTP** (se ainda não fez)
|
|
||||||
- Vá em: `TI > Configurações de Email`
|
|
||||||
- Preencha os dados do servidor
|
|
||||||
- **TESTE A CONEXÃO** (botão "Testar Conexão SMTP")
|
|
||||||
|
|
||||||
### **2. Teste o Envio**
|
|
||||||
- Vá em: `TI > Notificações`
|
|
||||||
- Envie uma notificação de teste para você mesmo
|
|
||||||
|
|
||||||
### **3. Monitore os Logs**
|
|
||||||
- Observe o terminal do Convex
|
|
||||||
- Logs mostrarão: `✅ Email enviado com sucesso!` ou erros
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📊 STATUS FINAL
|
|
||||||
|
|
||||||
```
|
|
||||||
✅ Sistema de Email: 100% Funcional
|
|
||||||
✅ Sistema de Notificações: 100% Funcional
|
|
||||||
✅ Envio para Chat: 100% Funcional
|
|
||||||
✅ Warnings Corrigidos: 100% Completo
|
|
||||||
✅ Cron Job: Ativo (processa a cada 2 min)
|
|
||||||
✅ Acessibilidade: Conforme padrões WCAG
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎉 **TUDO PRONTO E FUNCIONANDO!**
|
|
||||||
|
|
||||||
**Agora você pode:**
|
|
||||||
- ✅ Enviar emails REAIS via SMTP
|
|
||||||
- ✅ Enviar notificações pelo Chat
|
|
||||||
- ✅ Enviar por ambos os canais
|
|
||||||
- ✅ Usar templates de mensagem
|
|
||||||
- ✅ Sistema processa automaticamente
|
|
||||||
|
|
||||||
**Sem mais warnings de acessibilidade!** 🚀
|
|
||||||
|
|
||||||
@@ -1,147 +0,0 @@
|
|||||||
# 🧪 Guia: Criar Usuário de Teste para Férias
|
|
||||||
|
|
||||||
## 📋 Credenciais de Teste
|
|
||||||
|
|
||||||
```
|
|
||||||
Login: teste.ferias
|
|
||||||
Senha: Teste@2025
|
|
||||||
Email: teste.ferias@sgse.pe.gov.br
|
|
||||||
Nome: João Silva (Teste)
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔧 Passo a Passo
|
|
||||||
|
|
||||||
### **1. Criar um Símbolo (se não existir)**
|
|
||||||
|
|
||||||
1. Acesse: `http://localhost:5173/recursos-humanos/simbolos`
|
|
||||||
2. Clique em **"Novo Símbolo"**
|
|
||||||
3. Preencha:
|
|
||||||
- **Cargo:** Analista Administrativo
|
|
||||||
- **Tipo:** Cargo Comissionado
|
|
||||||
- **Nível:** CC-3
|
|
||||||
- **Valor:** R$ 3.500,00
|
|
||||||
4. Clique em **"Salvar"**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **2. Criar Funcionário**
|
|
||||||
|
|
||||||
1. Acesse: `http://localhost:5173/recursos-humanos/funcionarios/cadastro`
|
|
||||||
2. Preencha os dados:
|
|
||||||
|
|
||||||
#### **Dados Pessoais:**
|
|
||||||
- **Nome Completo:** João Silva (Teste)
|
|
||||||
- **CPF:** 111.222.333-44
|
|
||||||
- **RG:** 1234567
|
|
||||||
- **Data de Nascimento:** 15/05/1990
|
|
||||||
|
|
||||||
#### **Contato:**
|
|
||||||
- **Email:** teste.ferias@sgse.pe.gov.br
|
|
||||||
- **Telefone:** (81) 98765-4321
|
|
||||||
- **Endereço:** Rua de Teste, 123
|
|
||||||
- **Bairro:** Centro
|
|
||||||
- **Cidade:** Recife
|
|
||||||
- **UF:** PE
|
|
||||||
- **CEP:** 50000-000
|
|
||||||
|
|
||||||
#### **Dados Funcionais:**
|
|
||||||
- **Matrícula:** teste.ferias
|
|
||||||
- **Data de Admissão:** 15/01/2023 ⚠️ **IMPORTANTE: Quase 2 anos atrás!**
|
|
||||||
- **Símbolo:** Selecione o símbolo criado acima
|
|
||||||
- **Regime de Trabalho:** CLT
|
|
||||||
- **Cargo/Função:** Analista Administrativo
|
|
||||||
- **Status de Férias:** Ativo
|
|
||||||
|
|
||||||
#### **Filiação:**
|
|
||||||
- **Nome do Pai:** José Silva
|
|
||||||
- **Nome da Mãe:** Maria Silva
|
|
||||||
|
|
||||||
#### **Outros:**
|
|
||||||
- **Naturalidade:** Recife/PE
|
|
||||||
- **Sexo:** Masculino
|
|
||||||
- **Estado Civil:** Solteiro
|
|
||||||
- **Nacionalidade:** Brasileira
|
|
||||||
- **Grau de Instrução:** Superior
|
|
||||||
|
|
||||||
3. Clique em **"Salvar"**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### **3. Criar Usuário e Associar**
|
|
||||||
|
|
||||||
1. Acesse: `http://localhost:5173/ti/usuarios`
|
|
||||||
2. Clique em **"Novo Usuário"**
|
|
||||||
3. Preencha:
|
|
||||||
- **Matrícula:** teste.ferias
|
|
||||||
- **Nome:** João Silva (Teste)
|
|
||||||
- **Email:** teste.ferias@sgse.pe.gov.br
|
|
||||||
- **Perfil/Role:** Usuario (perfil básico)
|
|
||||||
- **Senha Inicial:** Teste@2025
|
|
||||||
4. Clique em **"Criar"**
|
|
||||||
|
|
||||||
5. **Associar Funcionário:**
|
|
||||||
- Na lista de usuários, localize "João Silva (Teste)"
|
|
||||||
- Clique no botão **"Associar/Alterar"** (ao lado de "Não associado")
|
|
||||||
- Selecione o funcionário "João Silva (Teste)" criado anteriormente
|
|
||||||
- Clique em **"Associar"**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ✅ Testar o Sistema de Férias
|
|
||||||
|
|
||||||
1. **Faça Logout** do usuário TI Master
|
|
||||||
2. **Faça Login** com:
|
|
||||||
```
|
|
||||||
Login: teste.ferias
|
|
||||||
Senha: Teste@2025
|
|
||||||
```
|
|
||||||
3. Acesse: `http://localhost:5173/perfil`
|
|
||||||
4. Clique na aba **"Minhas Férias"**
|
|
||||||
5. Clique em **"Solicitar Novas Férias"**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎯 O Que Testar
|
|
||||||
|
|
||||||
### **Saldo Esperado:**
|
|
||||||
- **Ano 2024:** ~30 dias (ano completo)
|
|
||||||
- **Ano 2025:** ~30 dias (proporcionais até dez/2025)
|
|
||||||
|
|
||||||
### **Validações CLT:**
|
|
||||||
- ✅ Máximo 3 períodos por ano
|
|
||||||
- ✅ Mínimo 5 dias por período
|
|
||||||
- ✅ Um período deve ter pelo menos 14 dias
|
|
||||||
- ✅ Não pode usar mais dias que o saldo disponível
|
|
||||||
|
|
||||||
### **Teste:**
|
|
||||||
1. Selecione o ano (2024 ou 2025)
|
|
||||||
2. Adicione períodos no calendário
|
|
||||||
3. Verifique se as validações aparecem
|
|
||||||
4. Envie a solicitação
|
|
||||||
5. Como TI Master, aprove/reprove a solicitação
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔧 Dicas de Teste
|
|
||||||
|
|
||||||
### **Testar Servidor Público PE:**
|
|
||||||
Se quiser testar as regras de Servidor Público PE:
|
|
||||||
1. Edite o funcionário
|
|
||||||
2. Altere **"Regime de Trabalho"** para **"Servidor Público Estadual PE"**
|
|
||||||
3. As regras mudam para:
|
|
||||||
- ✅ Máximo 2 períodos
|
|
||||||
- ✅ Mínimo 10 dias por período
|
|
||||||
- ✅ Não permite abono
|
|
||||||
|
|
||||||
### **Testar Diferentes Anos de Admissão:**
|
|
||||||
- Data mais antiga = mais períodos aquisitivos
|
|
||||||
- Data recente = menos dias disponíveis
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎉 Pronto!
|
|
||||||
|
|
||||||
Agora você pode testar todo o sistema de férias com um usuário real! 🚀
|
|
||||||
|
|
||||||
@@ -1,110 +0,0 @@
|
|||||||
# 🚀 GUIA RÁPIDO: Enviar Emails e Notificações
|
|
||||||
|
|
||||||
## ⚡ 3 Passos para Começar
|
|
||||||
|
|
||||||
### 1️⃣ **Configurar SMTP** (Fazer 1 vez)
|
|
||||||
|
|
||||||
1. Acesse: `http://localhost:5173/ti/configuracoes-email`
|
|
||||||
2. Preencha:
|
|
||||||
```
|
|
||||||
📧 Remetente: SGSE - Sistema de Gerenciamento
|
|
||||||
📧 Email: sgse@pe.gov.br (ou seu email)
|
|
||||||
🌐 Servidor: smtp.gmail.com
|
|
||||||
🔌 Porta: 587
|
|
||||||
🔐 Usuário: seu-email@gmail.com
|
|
||||||
🔑 Senha: sua-senha-de-app
|
|
||||||
🔒 TLS/SSL: Sim
|
|
||||||
```
|
|
||||||
3. Clique: **"Testar Conexão SMTP"**
|
|
||||||
4. Aguarde: ✅ "Conexão testada com sucesso!"
|
|
||||||
|
|
||||||
### 2️⃣ **Enviar Notificação**
|
|
||||||
|
|
||||||
1. Acesse: `http://localhost:5173/ti/notificacoes`
|
|
||||||
2. Selecione:
|
|
||||||
- **Destinatário:** João Silva (ou qualquer usuário)
|
|
||||||
- **Canal:**
|
|
||||||
- 💬 Chat = Mensagem imediata
|
|
||||||
- 📧 Email = Envio em até 2 minutos
|
|
||||||
- 🔄 Ambos = Chat + Email
|
|
||||||
- **Mensagem:** Escolha template ou escreva
|
|
||||||
3. Clique: **"Enviar"**
|
|
||||||
|
|
||||||
### 3️⃣ **Verificar Envio**
|
|
||||||
|
|
||||||
#### **Chat:**
|
|
||||||
- ✅ Imediato: Abra o chat e veja a mensagem
|
|
||||||
|
|
||||||
#### **Email:**
|
|
||||||
- ⏱️ Aguarde 2 minutos (processamento automático)
|
|
||||||
- 📋 Verifique logs no terminal do Convex:
|
|
||||||
```
|
|
||||||
✅ Email enviado com sucesso!
|
|
||||||
Para: destinatario@email.com
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔑 **IMPORTANTE: Senha de App do Gmail**
|
|
||||||
|
|
||||||
O Gmail **NÃO aceita** senha normal!
|
|
||||||
|
|
||||||
### **Como gerar:**
|
|
||||||
1. Acesse: https://myaccount.google.com/security
|
|
||||||
2. Ative: **"Verificação em duas etapas"**
|
|
||||||
3. Vá em: **"Senhas de app"**
|
|
||||||
4. Gere: Senha para "Email"
|
|
||||||
5. Use: Senha de 16 caracteres gerada
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ✅ **Canais Disponíveis**
|
|
||||||
|
|
||||||
| Canal | Velocidade | Ideal Para |
|
|
||||||
|-------|------------|------------|
|
|
||||||
| 💬 **Chat** | Imediato | Mensagens urgentes |
|
|
||||||
| 📧 **Email** | 2 minutos | Notificações formais |
|
|
||||||
| 🔄 **Ambos** | Variado | Comunicações importantes |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🧪 **Teste Rápido**
|
|
||||||
|
|
||||||
```
|
|
||||||
1. Configure SMTP (Gmail)
|
|
||||||
2. Envie notificação para você mesmo
|
|
||||||
3. Canal: Ambos
|
|
||||||
4. Verifique:
|
|
||||||
✅ Chat: Mensagem aparece imediatamente
|
|
||||||
✅ Email: Chega em até 2 minutos
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ❓ **Troubleshooting**
|
|
||||||
|
|
||||||
### **Email não chega?**
|
|
||||||
1. ✅ Configuração SMTP testada?
|
|
||||||
2. ✅ Senha de App (não senha normal)?
|
|
||||||
3. ✅ Aguardou 2 minutos?
|
|
||||||
4. ✅ Verifique spam/lixo eletrônico
|
|
||||||
|
|
||||||
### **Chat não funciona?**
|
|
||||||
1. ✅ Destinatário tem acesso ao chat?
|
|
||||||
2. ✅ Usuário está cadastrado?
|
|
||||||
|
|
||||||
### **Erro "Configuração não testada"?**
|
|
||||||
1. ✅ Clique em "Testar Conexão SMTP"
|
|
||||||
2. ✅ Aguarde mensagem de sucesso
|
|
||||||
3. ✅ Tente enviar novamente
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📄 **Documentação Completa**
|
|
||||||
|
|
||||||
Veja: `CORRECOES_EMAILS_NOTIFICACOES_COMPLETO.md`
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**✅ PRONTO PARA USO!** 🎉
|
|
||||||
|
|
||||||
@@ -1,183 +0,0 @@
|
|||||||
# Interface de Criação e Edição de Perfis Customizados - CONCLUÍDA ✅
|
|
||||||
|
|
||||||
## 📋 Resumo da Implementação
|
|
||||||
|
|
||||||
A interface completa para gerenciar perfis customizados foi implementada com sucesso em:
|
|
||||||
**`apps/web/src/routes/(dashboard)/ti/perfis/+page.svelte`**
|
|
||||||
|
|
||||||
## 🎯 Funcionalidades Implementadas
|
|
||||||
|
|
||||||
### 1. **Listagem de Perfis** 📊
|
|
||||||
- Visualização em tabela com:
|
|
||||||
- Nome e descrição
|
|
||||||
- Nível de acesso
|
|
||||||
- Número de usuários usando o perfil
|
|
||||||
- Criador e data de criação
|
|
||||||
- Ações disponíveis
|
|
||||||
|
|
||||||
### 2. **Criação de Novos Perfis** ➕
|
|
||||||
- Formulário completo com:
|
|
||||||
- Nome do perfil (obrigatório)
|
|
||||||
- Descrição detalhada (obrigatório)
|
|
||||||
- Nível de acesso (mínimo 3 para perfis customizados)
|
|
||||||
- Opção para clonar permissões de perfil existente
|
|
||||||
- Validações:
|
|
||||||
- Campos obrigatórios
|
|
||||||
- Nível mínimo
|
|
||||||
- Autenticação do usuário
|
|
||||||
- Verificação de duplicidade (no backend)
|
|
||||||
|
|
||||||
### 3. **Edição de Perfis** ✏️
|
|
||||||
- Atualização de:
|
|
||||||
- Nome do perfil
|
|
||||||
- Descrição
|
|
||||||
- Informação sobre nível (não editável após criação)
|
|
||||||
- Validações de segurança
|
|
||||||
|
|
||||||
### 4. **Visualização Detalhada** 👁️
|
|
||||||
- Informações completas do perfil:
|
|
||||||
- Dados básicos
|
|
||||||
- Permissões de menu configuradas
|
|
||||||
- Lista de usuários com este perfil
|
|
||||||
- Links para:
|
|
||||||
- Editar permissões no Painel de Permissões
|
|
||||||
- Gerenciar usuários
|
|
||||||
|
|
||||||
### 5. **Clonagem de Perfis** 📋
|
|
||||||
- Criação rápida de novo perfil baseado em existente
|
|
||||||
- Copia todas as permissões automaticamente
|
|
||||||
- Prompt interativo para nome e descrição
|
|
||||||
|
|
||||||
### 6. **Exclusão de Perfis** 🗑️
|
|
||||||
- Verificação de uso (não permite excluir se houver usuários)
|
|
||||||
- Confirmação antes de excluir
|
|
||||||
- Remoção em cascata de:
|
|
||||||
- Role correspondente
|
|
||||||
- Permissões associadas
|
|
||||||
- Permissões de menu
|
|
||||||
|
|
||||||
## 🔧 Integrações Backend
|
|
||||||
|
|
||||||
A interface utiliza as seguintes funções do backend:
|
|
||||||
|
|
||||||
### Queries
|
|
||||||
- `api.perfisCustomizados.listarPerfisCustomizados` - Lista todos os perfis
|
|
||||||
- `api.perfisCustomizados.obterPerfilComPermissoes` - Detalhes completos
|
|
||||||
- `api.roles.listar` - Lista roles para clonagem
|
|
||||||
|
|
||||||
### Mutations
|
|
||||||
- `api.perfisCustomizados.criarPerfilCustomizado` - Cria novo perfil
|
|
||||||
- `api.perfisCustomizados.editarPerfilCustomizado` - Atualiza perfil
|
|
||||||
- `api.perfisCustomizados.excluirPerfilCustomizado` - Remove perfil
|
|
||||||
- `api.perfisCustomizados.clonarPerfil` - Clona perfil existente
|
|
||||||
|
|
||||||
## 🎨 UI/UX Features
|
|
||||||
|
|
||||||
### Design
|
|
||||||
- Layout responsivo (mobile-friendly)
|
|
||||||
- Cards e modais para diferentes modos
|
|
||||||
- Ícones SVG intuitivos
|
|
||||||
- Badges para status e informações
|
|
||||||
|
|
||||||
### Feedback ao Usuário
|
|
||||||
- Mensagens de sucesso/erro/aviso
|
|
||||||
- Estados de carregamento
|
|
||||||
- Confirmações para ações destrutivas
|
|
||||||
- Desabilitação de botões durante processamento
|
|
||||||
|
|
||||||
### Navegação
|
|
||||||
- Botão "Voltar" sempre visível fora do modo listagem
|
|
||||||
- Breadcrumbs implícitos
|
|
||||||
- Links contextuais
|
|
||||||
|
|
||||||
## 🔐 Segurança
|
|
||||||
|
|
||||||
### Controle de Acesso
|
|
||||||
- Uso do `ProtectedRoute` para TI_MASTER e ADMIN
|
|
||||||
- Verificação de autenticação antes de cada ação
|
|
||||||
- Uso do `authStore.usuario._id` para identificação
|
|
||||||
|
|
||||||
### Validações
|
|
||||||
- Frontend: Campos obrigatórios e regras de negócio
|
|
||||||
- Backend: Validações adicionais e controle de integridade
|
|
||||||
- Type-safe com TypeScript
|
|
||||||
|
|
||||||
## 📱 Responsividade
|
|
||||||
|
|
||||||
- Grid adaptável: 1 coluna (mobile) → 2 colunas (desktop)
|
|
||||||
- Tabelas com scroll horizontal em telas pequenas
|
|
||||||
- Botões e formulários otimizados para touch
|
|
||||||
|
|
||||||
## 🎯 Próximos Passos (Opcionais)
|
|
||||||
|
|
||||||
1. **Melhorias de UX:**
|
|
||||||
- Modal para criação/edição ao invés de troca de modo
|
|
||||||
- Drag-and-drop para reordenar permissões
|
|
||||||
- Busca e filtros na listagem
|
|
||||||
|
|
||||||
2. **Features Avançadas:**
|
|
||||||
- Histórico de alterações do perfil
|
|
||||||
- Exportar/importar configurações de perfis
|
|
||||||
- Preview das permissões antes de salvar
|
|
||||||
|
|
||||||
3. **Relatórios:**
|
|
||||||
- Matriz de acesso por perfil
|
|
||||||
- Comparativo entre perfis
|
|
||||||
- Auditoria de uso
|
|
||||||
|
|
||||||
## 📝 Como Usar
|
|
||||||
|
|
||||||
### Para Acessar:
|
|
||||||
1. Faça login como TI_MASTER ou ADMIN
|
|
||||||
2. Navegue para: **Dashboard TI → Gerenciar Perfis**
|
|
||||||
3. Ou acesse diretamente: `/ti/perfis`
|
|
||||||
|
|
||||||
### Para Criar um Perfil:
|
|
||||||
1. Clique em "Novo Perfil"
|
|
||||||
2. Preencha nome, descrição e nível
|
|
||||||
3. (Opcional) Selecione um perfil para clonar permissões
|
|
||||||
4. Clique em "Criar Perfil"
|
|
||||||
|
|
||||||
### Para Editar:
|
|
||||||
1. Na listagem, clique no ícone de editar (lápis)
|
|
||||||
2. Altere os campos desejados
|
|
||||||
3. Clique em "Salvar Alterações"
|
|
||||||
|
|
||||||
### Para Configurar Permissões:
|
|
||||||
1. Clique em "Ver Detalhes" (ícone de olho)
|
|
||||||
2. Na seção de permissões, clique em "Editar Permissões"
|
|
||||||
3. Será redirecionado para o Painel de Permissões
|
|
||||||
|
|
||||||
### Para Clonar:
|
|
||||||
1. Clique no ícone de clonar (dois quadrados)
|
|
||||||
2. Digite o nome do novo perfil
|
|
||||||
3. Digite a descrição
|
|
||||||
4. O perfil será criado com as mesmas permissões
|
|
||||||
|
|
||||||
### Para Excluir:
|
|
||||||
1. Clique no ícone de excluir (lixeira)
|
|
||||||
2. Confirme a ação
|
|
||||||
3. **Nota:** Só é possível excluir perfis sem usuários
|
|
||||||
|
|
||||||
## ✅ Status
|
|
||||||
|
|
||||||
- ✅ Backend completo e testado
|
|
||||||
- ✅ Interface frontend implementada
|
|
||||||
- ✅ Integração frontend-backend
|
|
||||||
- ✅ Validações e segurança
|
|
||||||
- ✅ Tratamento de erros
|
|
||||||
- ✅ UI/UX responsiva
|
|
||||||
- ✅ Sem erros de linting
|
|
||||||
- ✅ TypeScript type-safe
|
|
||||||
|
|
||||||
## 🎉 Conclusão
|
|
||||||
|
|
||||||
A interface de criação e edição de perfis customizados está **100% funcional e pronta para uso**. A implementação segue as melhores práticas de:
|
|
||||||
- Clean Code
|
|
||||||
- Segurança
|
|
||||||
- Usabilidade
|
|
||||||
- Manutenibilidade
|
|
||||||
|
|
||||||
O sistema permite que administradores TI criem perfis de acesso personalizados de forma intuitiva e segura, com controle total sobre permissões e usuários.
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,350 +0,0 @@
|
|||||||
# 📋 REGRAS DE FÉRIAS - CLT vs SERVIDOR PÚBLICO ESTADUAL DE PERNAMBUCO
|
|
||||||
|
|
||||||
**Data:** 30 de outubro de 2025
|
|
||||||
**Status:** ✅ **IMPLEMENTADO NO SISTEMA**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎯 VISÃO GERAL
|
|
||||||
|
|
||||||
O sistema SGSE agora suporta **2 regimes de trabalho** com regras específicas de férias:
|
|
||||||
|
|
||||||
1. **CLT** - Consolidação das Leis do Trabalho
|
|
||||||
2. **Servidor Público Estadual de Pernambuco** - Lei nº 6.123/1968
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ⚖️ CLT - CONSOLIDAÇÃO DAS LEIS DO TRABALHO
|
|
||||||
|
|
||||||
### **Legislação:**
|
|
||||||
- Art. 129 a 153 da CLT (Decreto-Lei nº 5.452/1943)
|
|
||||||
|
|
||||||
### **Regras Básicas:**
|
|
||||||
|
|
||||||
| Item | Regra |
|
|
||||||
|------|-------|
|
|
||||||
| **Dias de Férias** | 30 dias por ano trabalhado |
|
|
||||||
| **Período Aquisitivo** | 12 meses de trabalho |
|
|
||||||
| **Período Concessivo** | 12 meses após o período aquisitivo |
|
|
||||||
| **Divisão em Períodos** | Até **3 períodos** |
|
|
||||||
| **Período Principal** | Mínimo **14 dias corridos** |
|
|
||||||
| **Períodos Secundários** | Mínimo **5 dias corridos** cada |
|
|
||||||
| **Abono Pecuniário** | ✅ Permitido vender 1/3 (10 dias) |
|
|
||||||
| **Idade Especial** | < 18 anos ou > 50 anos: férias em 1 período único |
|
|
||||||
| **Vencimento** | Férias não gozadas perdem-se após período concessivo |
|
|
||||||
|
|
||||||
### **Validações no Sistema (CLT):**
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
✅ Máximo 3 períodos
|
|
||||||
✅ Período principal: mínimo 14 dias
|
|
||||||
✅ Períodos secundários: mínimo 5 dias
|
|
||||||
✅ Total não pode exceder saldo disponível
|
|
||||||
✅ Períodos não podem sobrepor
|
|
||||||
✅ Abono pecuniário: até 10 dias
|
|
||||||
```
|
|
||||||
|
|
||||||
### **Exemplo Prático (CLT):**
|
|
||||||
|
|
||||||
**Funcionário:** João Silva (CLT)
|
|
||||||
**Admissão:** 01/01/2024
|
|
||||||
**Período Aquisitivo:** 01/01/2024 a 31/12/2024
|
|
||||||
**Período Concessivo:** 01/01/2025 a 31/12/2025
|
|
||||||
|
|
||||||
**Solicitação Válida:**
|
|
||||||
```
|
|
||||||
Período 1: 14 dias (Principal)
|
|
||||||
Período 2: 10 dias (Secundário)
|
|
||||||
Período 3: 6 dias (Secundário)
|
|
||||||
Total: 30 dias ✅
|
|
||||||
```
|
|
||||||
|
|
||||||
**Solicitação Inválida:**
|
|
||||||
```
|
|
||||||
Período 1: 10 dias ❌ (Falta período de 14 dias)
|
|
||||||
Período 2: 10 dias
|
|
||||||
Período 3: 10 dias
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🏛️ SERVIDOR PÚBLICO ESTADUAL DE PERNAMBUCO
|
|
||||||
|
|
||||||
### **Legislação:**
|
|
||||||
- Lei nº 6.123/1968 - Estatuto dos Funcionários Públicos Civis do Estado de PE
|
|
||||||
- Art. 84 a 90
|
|
||||||
|
|
||||||
### **Regras Básicas:**
|
|
||||||
|
|
||||||
| Item | Regra |
|
|
||||||
|------|-------|
|
|
||||||
| **Dias de Férias** | 30 dias por ano de exercício |
|
|
||||||
| **Período Aquisitivo** | 12 meses de exercício |
|
|
||||||
| **Período Concessivo** | Ano subsequente ao aquisitivo |
|
|
||||||
| **Divisão em Períodos** | Até **2 períodos** (NÃO 3!) |
|
|
||||||
| **Dias Mínimos por Período** | **10 dias corridos** (NÃO 5!) |
|
|
||||||
| **Abono Pecuniário** | ❌ **NÃO PERMITIDO** |
|
|
||||||
| **Servidor > 10 anos** | Pode acumular até 2 períodos |
|
|
||||||
| **Docentes** | Preferência: 20/12 a 10/01 |
|
|
||||||
| **Gestante** | Pode antecipar ou prorrogar |
|
|
||||||
| **Vencimento** | Mais flexível que CLT |
|
|
||||||
|
|
||||||
### **Validações no Sistema (Servidor PE):**
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
✅ Máximo 2 períodos (NÃO 3)
|
|
||||||
✅ Cada período: mínimo 10 dias (NÃO 5)
|
|
||||||
✅ Total não pode exceder saldo disponível
|
|
||||||
✅ Períodos não podem sobrepor
|
|
||||||
❌ Abono pecuniário: NÃO PERMITIDO
|
|
||||||
📅 Aviso para docentes: período 20/12 a 10/01
|
|
||||||
```
|
|
||||||
|
|
||||||
### **Exemplo Prático (Servidor PE):**
|
|
||||||
|
|
||||||
**Funcionário:** Maria Santos (Servidor PE)
|
|
||||||
**Posse:** 01/03/2024
|
|
||||||
**Período Aquisitivo:** 01/03/2024 a 28/02/2025
|
|
||||||
**Período Concessivo:** 01/03/2025 a 28/02/2026
|
|
||||||
|
|
||||||
**Solicitação Válida:**
|
|
||||||
```
|
|
||||||
Período 1: 20 dias
|
|
||||||
Período 2: 10 dias
|
|
||||||
Total: 30 dias ✅
|
|
||||||
```
|
|
||||||
|
|
||||||
**Solicitação Inválida:**
|
|
||||||
```
|
|
||||||
Período 1: 10 dias
|
|
||||||
Período 2: 10 dias
|
|
||||||
Período 3: 10 dias ❌ (Máximo 2 períodos)
|
|
||||||
```
|
|
||||||
|
|
||||||
**Solicitação Inválida 2:**
|
|
||||||
```
|
|
||||||
Período 1: 20 dias
|
|
||||||
Período 2: 5 dias ❌ (Mínimo 10 dias por período)
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📊 COMPARAÇÃO DIRETA
|
|
||||||
|
|
||||||
| Critério | CLT | Servidor Público PE |
|
|
||||||
|----------|-----|---------------------|
|
|
||||||
| **Dias Anuais** | 30 dias | 30 dias |
|
|
||||||
| **Max Períodos** | 3 | 2 |
|
|
||||||
| **Min Dias/Período** | 5 dias | 10 dias |
|
|
||||||
| **Período Principal** | 14 dias (obrigatório) | Não há essa regra |
|
|
||||||
| **Abono Pecuniário** | ✅ Sim (10 dias) | ❌ Não |
|
|
||||||
| **Acúmulo** | ❌ Não | ✅ Sim (> 10 anos) |
|
|
||||||
| **Vencimento** | Rígido | Flexível |
|
|
||||||
| **Preferência Docente** | Não há | 20/12 a 10/01 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎯 COMO O SISTEMA IDENTIFICA O REGIME
|
|
||||||
|
|
||||||
### **Campo no Banco de Dados:**
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
funcionarios: {
|
|
||||||
regimeTrabalho: "clt" | "estatutario_pe" | "estatutario_federal" | "estatutario_municipal"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### **Comportamento Automático:**
|
|
||||||
|
|
||||||
1. **Ao criar solicitação:** Sistema detecta o regime do funcionário
|
|
||||||
2. **Validação automática:** Aplica regras do regime correto
|
|
||||||
3. **Mensagens customizadas:** Erros específicos por regime
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 💡 EXEMPLOS DE VALIDAÇÕES
|
|
||||||
|
|
||||||
### **Exemplo 1: CLT tentando 4 períodos**
|
|
||||||
|
|
||||||
```
|
|
||||||
Entrada:
|
|
||||||
- Período 1: 10 dias
|
|
||||||
- Período 2: 10 dias
|
|
||||||
- Período 3: 5 dias
|
|
||||||
- Período 4: 5 dias
|
|
||||||
|
|
||||||
Erro: ❌ "Máximo de 3 períodos permitidos para CLT - Consolidação das Leis do Trabalho"
|
|
||||||
```
|
|
||||||
|
|
||||||
### **Exemplo 2: Servidor PE tentando 8 dias**
|
|
||||||
|
|
||||||
```
|
|
||||||
Entrada:
|
|
||||||
- Período 1: 22 dias
|
|
||||||
- Período 2: 8 dias
|
|
||||||
|
|
||||||
Erro: ❌ "Período de 8 dias é inválido. Mínimo: 10 dias corridos (Servidor Público Estadual de Pernambuco)"
|
|
||||||
```
|
|
||||||
|
|
||||||
### **Exemplo 3: CLT sem período principal**
|
|
||||||
|
|
||||||
```
|
|
||||||
Entrada:
|
|
||||||
- Período 1: 10 dias
|
|
||||||
- Período 2: 10 dias
|
|
||||||
- Período 3: 10 dias
|
|
||||||
|
|
||||||
Erro: ❌ "Ao dividir férias em CLT, um período deve ter no mínimo 14 dias corridos"
|
|
||||||
```
|
|
||||||
|
|
||||||
### **Exemplo 4: Servidor PE em 3 períodos**
|
|
||||||
|
|
||||||
```
|
|
||||||
Entrada:
|
|
||||||
- Período 1: 10 dias
|
|
||||||
- Período 2: 10 dias
|
|
||||||
- Período 3: 10 dias
|
|
||||||
|
|
||||||
Erro: ❌ "Máximo de 2 períodos permitidos para Servidor Público Estadual de Pernambuco"
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔧 IMPLEMENTAÇÃO TÉCNICA
|
|
||||||
|
|
||||||
### **Arquivo:** `packages/backend/convex/saldoFerias.ts`
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
const REGIMES_CONFIG = {
|
|
||||||
clt: {
|
|
||||||
nome: "CLT - Consolidação das Leis do Trabalho",
|
|
||||||
maxPeriodos: 3,
|
|
||||||
minDiasPeriodo: 5,
|
|
||||||
minDiasPeriodoPrincipal: 14,
|
|
||||||
abonoPermitido: true,
|
|
||||||
maxDiasAbono: 10,
|
|
||||||
},
|
|
||||||
estatutario_pe: {
|
|
||||||
nome: "Servidor Público Estadual de Pernambuco",
|
|
||||||
maxPeriodos: 2,
|
|
||||||
minDiasPeriodo: 10,
|
|
||||||
minDiasPeriodoPrincipal: null,
|
|
||||||
abonoPermitido: false,
|
|
||||||
maxDiasAbono: 0,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
```
|
|
||||||
|
|
||||||
### **Query de Validação:**
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
export const validarSolicitacao = query({
|
|
||||||
args: {
|
|
||||||
funcionarioId: v.id("funcionarios"),
|
|
||||||
anoReferencia: v.number(),
|
|
||||||
periodos: v.array(...)
|
|
||||||
},
|
|
||||||
handler: async (ctx, args) => {
|
|
||||||
// Detecta regime automaticamente
|
|
||||||
const regime = await obterRegimeTrabalho(ctx, args.funcionarioId);
|
|
||||||
const config = REGIMES_CONFIG[regime];
|
|
||||||
|
|
||||||
// Aplica validações específicas
|
|
||||||
if (args.periodos.length > config.maxPeriodos) {
|
|
||||||
erros.push(`Máximo de ${config.maxPeriodos} períodos permitidos para ${config.nome}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ... demais validações
|
|
||||||
}
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📚 REFERÊNCIAS LEGAIS
|
|
||||||
|
|
||||||
### **CLT:**
|
|
||||||
- **Decreto-Lei nº 5.452/1943** - Consolidação das Leis do Trabalho
|
|
||||||
- **Art. 129** - Direito a férias
|
|
||||||
- **Art. 134** - Divisão em períodos
|
|
||||||
- **Art. 143** - Abono pecuniário
|
|
||||||
|
|
||||||
### **Servidor Público Estadual de PE:**
|
|
||||||
- **Lei nº 6.123/1968** - Estatuto dos Funcionários Públicos Civis do Estado de Pernambuco
|
|
||||||
- **Art. 84** - Direito a férias
|
|
||||||
- **Art. 85** - Período aquisitivo
|
|
||||||
- **Art. 86** - Divisão em períodos
|
|
||||||
- **Art. 87** - Acúmulo de férias
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ✅ STATUS DE IMPLEMENTAÇÃO
|
|
||||||
|
|
||||||
| Feature | Status |
|
|
||||||
|---------|--------|
|
|
||||||
| ✅ Schema `regimeTrabalho` | Implementado |
|
|
||||||
| ✅ Detecção automática do regime | Implementado |
|
|
||||||
| ✅ Validações CLT | Implementado |
|
|
||||||
| ✅ Validações Servidor PE | Implementado |
|
|
||||||
| ✅ Mensagens específicas por regime | Implementado |
|
|
||||||
| ✅ Cálculo de saldo por regime | Implementado |
|
|
||||||
| ✅ Abono pecuniário (só CLT) | Implementado |
|
|
||||||
| ✅ Avisos contextuais | Implementado |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🚀 PRÓXIMOS PASSOS
|
|
||||||
|
|
||||||
1. ✅ **Backend completo** - FEITO
|
|
||||||
2. 🔄 **Interface com calendário** - EM ANDAMENTO
|
|
||||||
3. 📊 **Dashboard visual** - PENDENTE
|
|
||||||
4. 📱 **Responsivo** - PENDENTE
|
|
||||||
5. 📄 **Relatórios** - PENDENTE
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 💬 MENSAGENS DO SISTEMA
|
|
||||||
|
|
||||||
### **CLT - Mensagens:**
|
|
||||||
```
|
|
||||||
✅ "Solicitação válida para CLT - Consolidação das Leis do Trabalho"
|
|
||||||
❌ "Máximo de 3 períodos permitidos para CLT"
|
|
||||||
❌ "Período de 4 dias é inválido. Mínimo: 5 dias corridos (CLT)"
|
|
||||||
❌ "Ao dividir férias em CLT, um período deve ter no mínimo 14 dias corridos"
|
|
||||||
💰 "Você pode vender até 10 dias (abono pecuniário)"
|
|
||||||
```
|
|
||||||
|
|
||||||
### **Servidor PE - Mensagens:**
|
|
||||||
```
|
|
||||||
✅ "Solicitação válida para Servidor Público Estadual de Pernambuco"
|
|
||||||
❌ "Máximo de 2 períodos permitidos para Servidor Público Estadual de Pernambuco"
|
|
||||||
❌ "Período de 8 dias é inválido. Mínimo: 10 dias corridos (Servidor Público Estadual de Pernambuco)"
|
|
||||||
📅 "Período preferencial para docentes (20/12 a 10/01)"
|
|
||||||
⚠️ "Abono pecuniário não permitido para servidores públicos estaduais"
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎓 DICAS PARA USUÁRIOS
|
|
||||||
|
|
||||||
### **Se você é CLT:**
|
|
||||||
- ✅ Pode dividir em até 3 períodos
|
|
||||||
- ✅ Um período deve ter no mínimo 14 dias
|
|
||||||
- ✅ Pode vender até 10 dias (abono)
|
|
||||||
- ⚠️ Férias vencem no período concessivo
|
|
||||||
|
|
||||||
### **Se você é Servidor Público Estadual de PE:**
|
|
||||||
- ✅ Pode dividir em até 2 períodos
|
|
||||||
- ✅ Cada período deve ter no mínimo 10 dias
|
|
||||||
- ❌ Não pode vender férias (abono)
|
|
||||||
- ✅ Se docente, prefira dezembro/janeiro
|
|
||||||
- ✅ Com +10 anos, pode acumular férias
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Sistema desenvolvido com atenção às legislações trabalhistas vigentes! 📋⚖️**
|
|
||||||
|
|
||||||
**Data de Implementação:** 30 de outubro de 2025
|
|
||||||
**Versão:** 2.0.0 - Suporte Multi-Regime
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,376 +0,0 @@
|
|||||||
# 🎉 Sistema de Monitoramento TI - Implementação Completa
|
|
||||||
|
|
||||||
## ✅ Status: CONCLUÍDO COM SUCESSO!
|
|
||||||
|
|
||||||
Todos os requisitos foram implementados conforme solicitado. O sistema está robusto, profissional e pronto para uso.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📦 O Que Foi Implementado
|
|
||||||
|
|
||||||
### 🎯 Requisitos Atendidos
|
|
||||||
|
|
||||||
✅ **Card robusto de monitoramento técnico no painel TI**
|
|
||||||
✅ **Máximo de informações técnicas do sistema**
|
|
||||||
✅ **Informações de software e hardware**
|
|
||||||
✅ **Monitoramento de recursos em tempo real**
|
|
||||||
✅ **Alertas programáveis com níveis críticos**
|
|
||||||
✅ **Opção de envio por email e/ou chat**
|
|
||||||
✅ **Integração com sino de notificações**
|
|
||||||
✅ **Geração de relatórios PDF e CSV**
|
|
||||||
✅ **Busca por datas, horários e períodos**
|
|
||||||
✅ **Design robusto e profissional**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🏗️ Arquitetura Implementada
|
|
||||||
|
|
||||||
### Backend (Convex)
|
|
||||||
|
|
||||||
#### **1. Schema** (`packages/backend/convex/schema.ts`)
|
|
||||||
|
|
||||||
Três novas tabelas criadas:
|
|
||||||
|
|
||||||
**systemMetrics**
|
|
||||||
- Armazena histórico de todas as métricas
|
|
||||||
- 8 tipos de métricas (CPU, RAM, Rede, Storage, Usuários, Mensagens, Tempo Resposta, Erros)
|
|
||||||
- Índice por timestamp para consultas rápidas
|
|
||||||
- Cleanup automático (30 dias)
|
|
||||||
|
|
||||||
**alertConfigurations**
|
|
||||||
- Configurações de alertas customizáveis
|
|
||||||
- Suporta 5 operadores (>, <, >=, <=, ==)
|
|
||||||
- Toggle para ativar/desativar
|
|
||||||
- Notificação por Chat e/ou Email
|
|
||||||
- Índice por enabled para queries eficientes
|
|
||||||
|
|
||||||
**alertHistory**
|
|
||||||
- Histórico completo de alertas disparados
|
|
||||||
- Status: triggered/resolved
|
|
||||||
- Rastreamento de notificações enviadas
|
|
||||||
- Múltiplos índices para análise
|
|
||||||
|
|
||||||
#### **2. API** (`packages/backend/convex/monitoramento.ts`)
|
|
||||||
|
|
||||||
**10 funções implementadas:**
|
|
||||||
|
|
||||||
1. `salvarMetricas` - Salva métricas e dispara verificação de alertas
|
|
||||||
2. `configurarAlerta` - Criar/atualizar alertas
|
|
||||||
3. `listarAlertas` - Listar todas as configurações
|
|
||||||
4. `obterMetricas` - Buscar com filtros de data
|
|
||||||
5. `obterMetricasRecentes` - Última hora
|
|
||||||
6. `obterUltimaMetrica` - Mais recente
|
|
||||||
7. `gerarRelatorio` - Com estatísticas (min/max/avg)
|
|
||||||
8. `deletarAlerta` - Remover configuração
|
|
||||||
9. `obterHistoricoAlertas` - Histórico completo
|
|
||||||
10. `verificarAlertasInternal` - Verificação automática (internal)
|
|
||||||
|
|
||||||
**Funcionalidades especiais:**
|
|
||||||
- Rate limiting: não dispara alertas duplicados em 5 minutos
|
|
||||||
- Integração com sistema de notificações existente
|
|
||||||
- Cleanup automático de métricas antigas
|
|
||||||
- Cálculo de estatísticas (mínimo, máximo, média)
|
|
||||||
|
|
||||||
### Frontend
|
|
||||||
|
|
||||||
#### **3. Utilitário** (`apps/web/src/lib/utils/metricsCollector.ts`)
|
|
||||||
|
|
||||||
**Coletor inteligente de métricas:**
|
|
||||||
|
|
||||||
**Métricas de Hardware/Sistema:**
|
|
||||||
- CPU: Estimativa via Performance API
|
|
||||||
- RAM: `performance.memory` (Chrome) ou estimativa
|
|
||||||
- Rede: Latência medida com fetch
|
|
||||||
- Storage: Storage API ou estimativa
|
|
||||||
|
|
||||||
**Métricas de Aplicação:**
|
|
||||||
- Usuários Online: Query em tempo real
|
|
||||||
- Mensagens/min: Taxa calculada
|
|
||||||
- Tempo Resposta: Latência das queries
|
|
||||||
- Erros: Interceptação de console.error
|
|
||||||
|
|
||||||
**Recursos:**
|
|
||||||
- Coleta automática a cada 30s
|
|
||||||
- Rate limiting integrado
|
|
||||||
- Função de cleanup ao desmontar
|
|
||||||
- Status de conexão de rede
|
|
||||||
|
|
||||||
#### **4. Componentes Svelte**
|
|
||||||
|
|
||||||
### **SystemMonitorCard.svelte** (Principal)
|
|
||||||
|
|
||||||
**Interface Moderna:**
|
|
||||||
- 8 cards de métricas com design gradiente
|
|
||||||
- Progress bars animadas
|
|
||||||
- Cores dinâmicas baseadas em thresholds:
|
|
||||||
- Verde: < 60% (Normal)
|
|
||||||
- Amarelo: 60-80% (Atenção)
|
|
||||||
- Vermelho: > 80% (Crítico)
|
|
||||||
- Atualização automática a cada 30s
|
|
||||||
- Badges de status
|
|
||||||
- Informação de última atualização
|
|
||||||
|
|
||||||
**Botões de Ação:**
|
|
||||||
- Configurar Alertas
|
|
||||||
- Gerar Relatório
|
|
||||||
|
|
||||||
### **AlertConfigModal.svelte**
|
|
||||||
|
|
||||||
**Funcionalidades:**
|
|
||||||
- Formulário completo de criação/edição
|
|
||||||
- 8 métricas disponíveis
|
|
||||||
- 5 operadores de comparação
|
|
||||||
- Toggle de ativo/inativo
|
|
||||||
- Checkboxes para Chat e Email
|
|
||||||
- Preview do alerta antes de salvar
|
|
||||||
- Lista de alertas configurados com edição inline
|
|
||||||
- Deletar com confirmação
|
|
||||||
|
|
||||||
**UX:**
|
|
||||||
- Validação: requer pelo menos um método de notificação
|
|
||||||
- Estados de loading
|
|
||||||
- Mensagens de erro amigáveis
|
|
||||||
- Design responsivo
|
|
||||||
|
|
||||||
### **ReportGeneratorModal.svelte**
|
|
||||||
|
|
||||||
**Filtros de Período:**
|
|
||||||
- Hoje
|
|
||||||
- Última Semana
|
|
||||||
- Último Mês
|
|
||||||
- Personalizado (data + hora)
|
|
||||||
|
|
||||||
**Seleção de Métricas:**
|
|
||||||
- Todas as 8 métricas disponíveis
|
|
||||||
- Botões "Selecionar Todas" / "Limpar"
|
|
||||||
- Preview visual
|
|
||||||
|
|
||||||
**Exportação:**
|
|
||||||
|
|
||||||
**PDF (jsPDF + autoTable):**
|
|
||||||
- Título profissional
|
|
||||||
- Período e data de geração
|
|
||||||
- Tabela de estatísticas (min/max/avg)
|
|
||||||
- Registros detalhados (últimos 50)
|
|
||||||
- Footer com logo SGSE
|
|
||||||
- Múltiplas páginas numeradas
|
|
||||||
- Design com cores da marca
|
|
||||||
|
|
||||||
**CSV (PapaParse):**
|
|
||||||
- Headers em português
|
|
||||||
- Datas formatadas (dd/MM/yyyy HH:mm:ss)
|
|
||||||
- Todas as métricas selecionadas
|
|
||||||
- Compatível com Excel/Google Sheets
|
|
||||||
|
|
||||||
#### **5. Integração** (`apps/web/src/routes/(dashboard)/ti/painel-administrativo/+page.svelte`)
|
|
||||||
|
|
||||||
- SystemMonitorCard adicionado ao painel administrativo TI
|
|
||||||
- Posicionado após as ações rápidas
|
|
||||||
- Import correto de todos os componentes
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔔 Sistema de Alertas
|
|
||||||
|
|
||||||
### Fluxo Completo
|
|
||||||
|
|
||||||
1. **Coleta**: Métricas coletadas a cada 30s
|
|
||||||
2. **Salvamento**: Mutation `salvarMetricas` persiste no banco
|
|
||||||
3. **Verificação**: `verificarAlertasInternal` é agendado (scheduler)
|
|
||||||
4. **Comparação**: Compara métricas com todos os alertas ativos
|
|
||||||
5. **Disparo**: Se threshold ultrapassado:
|
|
||||||
- Registra em `alertHistory`
|
|
||||||
- Cria notificação em `notificacoes` (chat)
|
|
||||||
- (Email preparado para integração futura)
|
|
||||||
6. **Notificação**: NotificationBell exibe automaticamente
|
|
||||||
7. **Rate Limit**: Não duplica em 5 minutos
|
|
||||||
|
|
||||||
### Operadores Suportados
|
|
||||||
|
|
||||||
- `>` : Maior que
|
|
||||||
- `>=` : Maior ou igual
|
|
||||||
- `<` : Menor que
|
|
||||||
- `<=` : Menor ou igual
|
|
||||||
- `==` : Igual a
|
|
||||||
|
|
||||||
### Métodos de Notificação
|
|
||||||
|
|
||||||
- ✅ **Chat**: Integrado com NotificationBell (funcionando)
|
|
||||||
- 🔄 **Email**: Preparado para integração (TODO no código)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📊 Métricas Disponíveis
|
|
||||||
|
|
||||||
| Métrica | Tipo | Unidade | Origem |
|
|
||||||
|---------|------|---------|--------|
|
|
||||||
| CPU | Sistema | % | Performance API |
|
|
||||||
| Memória | Sistema | % | performance.memory |
|
|
||||||
| Latência | Sistema | ms | Fetch API |
|
|
||||||
| Storage | Sistema | % | Storage API |
|
|
||||||
| Usuários Online | App | count | Convex Query |
|
|
||||||
| Mensagens/min | App | count/min | Calculado |
|
|
||||||
| Tempo Resposta | App | ms | Query latency |
|
|
||||||
| Erros | App | count | Console intercept |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📈 Relatórios
|
|
||||||
|
|
||||||
### Informações Incluídas
|
|
||||||
|
|
||||||
**Estatísticas Agregadas:**
|
|
||||||
- Valor Mínimo
|
|
||||||
- Valor Máximo
|
|
||||||
- Valor Médio
|
|
||||||
|
|
||||||
**Dados Detalhados:**
|
|
||||||
- Timestamp completo
|
|
||||||
- Todas as métricas selecionadas
|
|
||||||
- Últimos 50 registros (PDF)
|
|
||||||
- Todos os registros (CSV)
|
|
||||||
|
|
||||||
### Formatos
|
|
||||||
|
|
||||||
- **PDF**: Visual, profissional, com logo e layout
|
|
||||||
- **CSV**: Dados brutos para análise no Excel
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎨 Design e UX
|
|
||||||
|
|
||||||
### Padrão de Cores
|
|
||||||
|
|
||||||
- **Primary**: #667eea (Roxo/Azul)
|
|
||||||
- **Success**: Verde (< 60%)
|
|
||||||
- **Warning**: Amarelo (60-80%)
|
|
||||||
- **Error**: Vermelho (> 80%)
|
|
||||||
|
|
||||||
### Componentes DaisyUI
|
|
||||||
|
|
||||||
- Cards com gradientes
|
|
||||||
- Stats com animações
|
|
||||||
- Badges dinâmicos
|
|
||||||
- Progress bars coloridos
|
|
||||||
- Modals responsivos
|
|
||||||
- Botões com loading states
|
|
||||||
|
|
||||||
### Responsividade
|
|
||||||
|
|
||||||
- Mobile: 1 coluna
|
|
||||||
- Tablet: 2 colunas
|
|
||||||
- Desktop: 4 colunas
|
|
||||||
- Breakpoints: sm, md, lg
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ⚡ Performance
|
|
||||||
|
|
||||||
### Otimizações
|
|
||||||
|
|
||||||
- Rate limiting: 1 coleta/30s
|
|
||||||
- Cleanup automático: 30 dias
|
|
||||||
- Queries com índices
|
|
||||||
- Lazy loading de modals
|
|
||||||
- Debounce em inputs
|
|
||||||
|
|
||||||
### Escalabilidade
|
|
||||||
|
|
||||||
- Suporta milhares de registros
|
|
||||||
- Queries otimizadas
|
|
||||||
- Scheduler assíncrono
|
|
||||||
- Sem bloqueio de UI
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔒 Segurança
|
|
||||||
|
|
||||||
- Apenas usuários TI têm acesso
|
|
||||||
- Validação de permissões no backend
|
|
||||||
- Sanitização de inputs
|
|
||||||
- Rate limiting integrado
|
|
||||||
- Internal mutations protegidas
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📁 Arquivos Criados/Modificados
|
|
||||||
|
|
||||||
### Criados (6 arquivos)
|
|
||||||
|
|
||||||
1. `packages/backend/convex/monitoramento.ts` - API completa
|
|
||||||
2. `apps/web/src/lib/utils/metricsCollector.ts` - Coletor
|
|
||||||
3. `apps/web/src/lib/components/ti/SystemMonitorCard.svelte` - Card principal
|
|
||||||
4. `apps/web/src/lib/components/ti/AlertConfigModal.svelte` - Config alertas
|
|
||||||
5. `apps/web/src/lib/components/ti/ReportGeneratorModal.svelte` - Relatórios
|
|
||||||
6. `TESTE_MONITORAMENTO.md` - Documentação de testes
|
|
||||||
|
|
||||||
### Modificados (3 arquivos)
|
|
||||||
|
|
||||||
1. `packages/backend/convex/schema.ts` - 3 tabelas adicionadas
|
|
||||||
2. `apps/web/package.json` - papaparse e @types/papaparse
|
|
||||||
3. `apps/web/src/routes/(dashboard)/ti/painel-administrativo/+page.svelte` - Integração
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🚀 Como Usar
|
|
||||||
|
|
||||||
### Para Usuários
|
|
||||||
|
|
||||||
1. Acesse `/ti/painel-administrativo`
|
|
||||||
2. Role até o card de monitoramento
|
|
||||||
3. Visualize métricas em tempo real
|
|
||||||
4. Configure alertas personalizados
|
|
||||||
5. Gere relatórios quando necessário
|
|
||||||
|
|
||||||
### Para Desenvolvedores
|
|
||||||
|
|
||||||
Ver documentação completa em `TESTE_MONITORAMENTO.md`
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎯 Diferenciais
|
|
||||||
|
|
||||||
✅ **Completo**: Backend + Frontend totalmente integrados
|
|
||||||
✅ **Profissional**: Design moderno e polido
|
|
||||||
✅ **Robusto**: Tratamento de erros e edge cases
|
|
||||||
✅ **Escalável**: Arquitetura preparada para crescimento
|
|
||||||
✅ **Documentado**: Guia completo de testes
|
|
||||||
✅ **Sem Linter Errors**: Código limpo e validado
|
|
||||||
✅ **Pronto para Produção**: Funcional desde o primeiro uso
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📝 Próximos Passos Sugeridos
|
|
||||||
|
|
||||||
1. **Integrar Email**: Completar envio de alertas por email
|
|
||||||
2. **Gráficos**: Adicionar charts visuais (Chart.js/Recharts)
|
|
||||||
3. **Dashboard Customizável**: Permitir usuário escolher métricas
|
|
||||||
4. **Métricas Reais de Backend**: CPU/RAM do servidor Node.js
|
|
||||||
5. **Machine Learning**: Detecção de anomalias
|
|
||||||
6. **Webhooks**: Notificar sistemas externos
|
|
||||||
7. **Mobile App**: Notificações push no celular
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🏆 Conclusão
|
|
||||||
|
|
||||||
Sistema de monitoramento técnico **completo**, **robusto** e **profissional** implementado com sucesso!
|
|
||||||
|
|
||||||
Todas as funcionalidades solicitadas foram entregues:
|
|
||||||
- ✅ Monitoramento em tempo real
|
|
||||||
- ✅ Informações técnicas completas
|
|
||||||
- ✅ Alertas customizáveis
|
|
||||||
- ✅ Notificações integradas
|
|
||||||
- ✅ Relatórios PDF/CSV
|
|
||||||
- ✅ Filtros avançados
|
|
||||||
- ✅ Design profissional
|
|
||||||
|
|
||||||
**O sistema está pronto para uso imediato!** 🎉
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Desenvolvido por**: Secretaria de Esportes de Pernambuco
|
|
||||||
**Tecnologias**: Convex, Svelte 5, TypeScript, DaisyUI, jsPDF, PapaParse
|
|
||||||
**Versão**: 2.0
|
|
||||||
**Data**: Outubro 2025
|
|
||||||
|
|
||||||
@@ -1,636 +0,0 @@
|
|||||||
# 🎉 SISTEMA MODERNO DE GESTÃO DE FÉRIAS - IMPLEMENTAÇÃO COMPLETA
|
|
||||||
|
|
||||||
**Data de Conclusão:** 30 de outubro de 2025
|
|
||||||
**Versão:** 2.0.0 - Sistema Premium Multi-Regime
|
|
||||||
**Status:** ✅ **100% IMPLEMENTADO E FUNCIONAL**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📋 ÍNDICE
|
|
||||||
|
|
||||||
1. [Visão Geral](#visão-geral)
|
|
||||||
2. [Arquitetura do Sistema](#arquitetura-do-sistema)
|
|
||||||
3. [Funcionalidades Implementadas](#funcionalidades-implementadas)
|
|
||||||
4. [Componentes Frontend](#componentes-frontend)
|
|
||||||
5. [Backend e API](#backend-e-api)
|
|
||||||
6. [Regras de Negócio](#regras-de-negócio)
|
|
||||||
7. [Fluxo do Usuário](#fluxo-do-usuário)
|
|
||||||
8. [Guia de Uso](#guia-de-uso)
|
|
||||||
9. [Tecnologias Utilizadas](#tecnologias-utilizadas)
|
|
||||||
10. [Testes e Validação](#testes-e-validação)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎯 VISÃO GERAL
|
|
||||||
|
|
||||||
O **Sistema de Gestão de Férias** do SGSE é uma solução moderna, intuitiva e robusta para gerenciamento completo de férias de funcionários, com suporte a **múltiplos regimes de trabalho** (CLT e Servidor Público Estadual de PE).
|
|
||||||
|
|
||||||
### ⭐ Diferenciais
|
|
||||||
|
|
||||||
- ✅ **Multi-Regime**: Suporta CLT e Servidor Público PE com regras específicas
|
|
||||||
- ✅ **Wizard Intuitivo**: Processo de solicitação em 3 passos guiados
|
|
||||||
- ✅ **Calendário Interativo**: FullCalendar para seleção visual de períodos
|
|
||||||
- ✅ **Validação em Tempo Real**: Feedback instantâneo sobre regras CLT/Servidor PE
|
|
||||||
- ✅ **Dashboard Analytics**: Gráficos e estatísticas em tempo real
|
|
||||||
- ✅ **Toast Notifications**: Feedback visual moderno com Sonner
|
|
||||||
- ✅ **Cálculo Automático de Saldo**: Sistema inteligente de períodos aquisitivos
|
|
||||||
- ✅ **Gestão por Times**: Estrutura de times e gestores para aprovações
|
|
||||||
- ✅ **Responsivo**: 100% adaptado para mobile, tablet e desktop
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🏗️ ARQUITETURA DO SISTEMA
|
|
||||||
|
|
||||||
```
|
|
||||||
┌─────────────────────────────────────────────────────────────┐
|
|
||||||
│ FRONTEND (SvelteKit) │
|
|
||||||
├─────────────────────────────────────────────────────────────┤
|
|
||||||
│ /perfil > Aba "Minhas Férias" │
|
|
||||||
│ ├── DashboardFerias.svelte (Analytics + Gráficos) │
|
|
||||||
│ └── WizardSolicitacaoFerias.svelte (Processo 3 Passos) │
|
|
||||||
│ └── CalendarioFerias.svelte (FullCalendar) │
|
|
||||||
├─────────────────────────────────────────────────────────────┤
|
|
||||||
│ BACKEND (Convex) │
|
|
||||||
├─────────────────────────────────────────────────────────────┤
|
|
||||||
│ Schemas: │
|
|
||||||
│ ├── funcionarios (+ regimeTrabalho) │
|
|
||||||
│ ├── periodosAquisitivos (novo!) │
|
|
||||||
│ ├── solicitacoesFerias │
|
|
||||||
│ └── notificacoesFerias │
|
|
||||||
│ │
|
|
||||||
│ Modules: │
|
|
||||||
│ ├── saldoFerias.ts (Cálculos + Validações) │
|
|
||||||
│ ├── ferias.ts (CRUD + Aprovações) │
|
|
||||||
│ ├── times.ts (Gestão de Times) │
|
|
||||||
│ └── crons.ts (Automações) │
|
|
||||||
└─────────────────────────────────────────────────────────────┘
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ✨ FUNCIONALIDADES IMPLEMENTADAS
|
|
||||||
|
|
||||||
### 🔹 **FASE 1: Backend & Regras de Negócio**
|
|
||||||
|
|
||||||
#### ✅ Schema de Períodos Aquisitivos
|
|
||||||
- **Tabela:** `periodosAquisitivos`
|
|
||||||
- **Campos:**
|
|
||||||
- `anoReferencia`: Ano do período (ex: 2025)
|
|
||||||
- `diasDireito`: Dias totais (30)
|
|
||||||
- `diasUsados`: Dias já gozados
|
|
||||||
- `diasPendentes`: Dias em solicitações aguardando
|
|
||||||
- `diasDisponiveis`: Saldo disponível
|
|
||||||
- `abonoPermitido`: Permite venda de férias (só CLT)
|
|
||||||
- `status`: `ativo`, `vencido`, `concluido`
|
|
||||||
|
|
||||||
#### ✅ Cálculo Automático de Saldo
|
|
||||||
- **Query:** `saldoFerias.obterSaldo`
|
|
||||||
- Cria automaticamente períodos aquisitivos se não existirem
|
|
||||||
- Calcula saldo baseado no regime de trabalho
|
|
||||||
- Retorna informações completas do período
|
|
||||||
|
|
||||||
#### ✅ Validação CLT vs Servidor PE
|
|
||||||
- **Query:** `saldoFerias.validarSolicitacao`
|
|
||||||
- **CLT:** Máx 3 períodos, mín 5 dias, 1 período com 14+ dias
|
|
||||||
- **Servidor PE:** Máx 2 períodos, mín 10 dias cada
|
|
||||||
- Valida sobreposição de datas
|
|
||||||
- Valida saldo disponível
|
|
||||||
- Retorna erros e avisos contextuais
|
|
||||||
|
|
||||||
#### ✅ Reserva e Liberação de Dias
|
|
||||||
- **Mutation:** `saldoFerias.reservarDias`
|
|
||||||
- Reserva dias ao criar solicitação (impede uso duplo)
|
|
||||||
- **Mutation:** `saldoFerias.liberarDias`
|
|
||||||
- Libera dias ao reprovar solicitação
|
|
||||||
- **Mutation:** `saldoFerias.atualizarSaldoAposAprovacao`
|
|
||||||
- Marca dias como usados após aprovação
|
|
||||||
|
|
||||||
#### ✅ Cron Jobs Automáticos
|
|
||||||
- **Diário:** Criar períodos aquisitivos para novos funcionários
|
|
||||||
- **Diário:** Atualizar status de férias (ativo/em_ferias)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 🔹 **FASE 2: Frontend Premium**
|
|
||||||
|
|
||||||
#### ✅ Wizard de Solicitação (3 Passos)
|
|
||||||
|
|
||||||
**Componente:** `WizardSolicitacaoFerias.svelte`
|
|
||||||
|
|
||||||
**Passo 1 - Ano & Saldo:**
|
|
||||||
- Seletor visual de ano (cards)
|
|
||||||
- Card premium com estatísticas do saldo:
|
|
||||||
- Total Direito
|
|
||||||
- Disponível
|
|
||||||
- Usado
|
|
||||||
- Pendente
|
|
||||||
- Informações do regime de trabalho
|
|
||||||
- Alertas de saldo zerado
|
|
||||||
|
|
||||||
**Passo 2 - Seleção de Períodos:**
|
|
||||||
- Calendário interativo (FullCalendar)
|
|
||||||
- Drag & drop para selecionar períodos
|
|
||||||
- Click para remover períodos
|
|
||||||
- Validação em tempo real:
|
|
||||||
- Erros visuais (vermelho)
|
|
||||||
- Avisos contextuais (amarelo)
|
|
||||||
- Sucesso (verde)
|
|
||||||
- Progress bar de saldo:
|
|
||||||
- Disponível / Selecionado / Restante
|
|
||||||
|
|
||||||
**Passo 3 - Confirmação:**
|
|
||||||
- Resumo visual da solicitação
|
|
||||||
- Lista de períodos com datas formatadas
|
|
||||||
- Campo de observação opcional
|
|
||||||
- Botões de ação premium
|
|
||||||
|
|
||||||
**Animações:**
|
|
||||||
- FadeIn entre passos
|
|
||||||
- Hover effects
|
|
||||||
- Loading states
|
|
||||||
- Toast notifications
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
#### ✅ Calendário Interativo
|
|
||||||
|
|
||||||
**Componente:** `CalendarioFerias.svelte`
|
|
||||||
|
|
||||||
**Features:**
|
|
||||||
- **FullCalendar Integration:**
|
|
||||||
- View mensal e anual (multiMonth)
|
|
||||||
- Localização PT-BR
|
|
||||||
- Seleção por drag
|
|
||||||
- Eventos coloridos por período
|
|
||||||
|
|
||||||
- **Validações Visuais:**
|
|
||||||
- Destaque de fins de semana
|
|
||||||
- Bloqueio de datas passadas
|
|
||||||
- Cores distintas por período (roxo, rosa, azul)
|
|
||||||
- Tooltip em eventos
|
|
||||||
|
|
||||||
- **Customização:**
|
|
||||||
- Toolbar moderna com gradiente
|
|
||||||
- Eventos com sombra e hover
|
|
||||||
- Grid limpo e profissional
|
|
||||||
- 100% responsivo
|
|
||||||
|
|
||||||
**Eventos:**
|
|
||||||
- `onPeriodoAdicionado`: Callback ao adicionar período
|
|
||||||
- `onPeriodoRemovido`: Callback ao remover período
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
#### ✅ Dashboard de Analytics
|
|
||||||
|
|
||||||
**Componente:** `DashboardFerias.svelte`
|
|
||||||
|
|
||||||
**Cards de Estatísticas (4):**
|
|
||||||
1. **Disponível** (Verde): Dias disponíveis
|
|
||||||
2. **Usado** (Vermelho): Dias já gozados
|
|
||||||
3. **Pendente** (Amarelo): Dias aguardando aprovação
|
|
||||||
4. **Total Direito** (Roxo): Dias totais do ano
|
|
||||||
|
|
||||||
**Gráficos de Pizza (2):**
|
|
||||||
1. **Distribuição de Saldo:**
|
|
||||||
- Disponível (verde)
|
|
||||||
- Pendente (laranja)
|
|
||||||
- Usado (vermelho)
|
|
||||||
|
|
||||||
2. **Status de Solicitações:**
|
|
||||||
- Aprovadas (verde)
|
|
||||||
- Pendentes (laranja)
|
|
||||||
- Reprovadas (vermelho)
|
|
||||||
|
|
||||||
**Tabela de Histórico:**
|
|
||||||
- Todos os saldos por ano
|
|
||||||
- Status visual (ativo/vencido/concluído)
|
|
||||||
- Breakdown de dias
|
|
||||||
|
|
||||||
**Tecnologias:**
|
|
||||||
- Canvas API para gráficos (sem bibliotecas pesadas!)
|
|
||||||
- Design glassmorphism
|
|
||||||
- Animações suaves
|
|
||||||
- Hover effects premium
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
#### ✅ Toast Notifications
|
|
||||||
|
|
||||||
**Biblioteca:** Svelte-Sonner
|
|
||||||
|
|
||||||
**Tipos:**
|
|
||||||
- `toast.success()`: Ações bem-sucedidas
|
|
||||||
- `toast.error()`: Erros e validações
|
|
||||||
- `toast.info()`: Informações gerais
|
|
||||||
- `toast.warning()`: Avisos importantes
|
|
||||||
|
|
||||||
**Exemplos:**
|
|
||||||
```typescript
|
|
||||||
toast.success("Período de 14 dias adicionado! ✅");
|
|
||||||
toast.error("Máximo de 3 períodos atingido");
|
|
||||||
toast.warning("Seu saldo está baixo!");
|
|
||||||
```
|
|
||||||
|
|
||||||
**Configuração:**
|
|
||||||
- Posição: top-right
|
|
||||||
- Rich colors: ativado
|
|
||||||
- Close button: sim
|
|
||||||
- Expand: sim
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📊 REGRAS DE NEGÓCIO
|
|
||||||
|
|
||||||
### CLT (Consolidação das Leis do Trabalho)
|
|
||||||
|
|
||||||
| Regra | Valor |
|
|
||||||
|-------|-------|
|
|
||||||
| Dias por Ano | 30 dias |
|
|
||||||
| Máx Períodos | 3 |
|
|
||||||
| Mín Dias/Período | 5 dias |
|
|
||||||
| Período Principal | 14+ dias (obrigatório) |
|
|
||||||
| Abono Pecuniário | ✅ Até 10 dias (1/3) |
|
|
||||||
|
|
||||||
**Validações:**
|
|
||||||
```typescript
|
|
||||||
✅ Período 1: 14 dias ← Principal (obrigatório)
|
|
||||||
✅ Período 2: 10 dias ← Secundário
|
|
||||||
✅ Período 3: 6 dias ← Secundário
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Servidor Público Estadual de PE
|
|
||||||
|
|
||||||
| Regra | Valor |
|
|
||||||
|-------|-------|
|
|
||||||
| Dias por Ano | 30 dias |
|
|
||||||
| Máx Períodos | 2 |
|
|
||||||
| Mín Dias/Período | 10 dias |
|
|
||||||
| Período Principal | Não há |
|
|
||||||
| Abono Pecuniário | ❌ Não permitido |
|
|
||||||
|
|
||||||
**Validações:**
|
|
||||||
```typescript
|
|
||||||
✅ Período 1: 20 dias
|
|
||||||
✅ Período 2: 10 dias
|
|
||||||
```
|
|
||||||
|
|
||||||
**Avisos Especiais:**
|
|
||||||
- Docentes: Período preferencial 20/12 a 10/01
|
|
||||||
- Servidores +10 anos: Podem acumular até 2 períodos
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🚀 FLUXO DO USUÁRIO
|
|
||||||
|
|
||||||
### 1️⃣ **Funcionário Solicita Férias**
|
|
||||||
|
|
||||||
```
|
|
||||||
1. Acessa: Perfil > Aba "Minhas Férias"
|
|
||||||
2. Visualiza Dashboard com saldo e estatísticas
|
|
||||||
3. Clica em "Solicitar Novas Férias"
|
|
||||||
4. Wizard Passo 1: Escolhe ano de referência
|
|
||||||
└── Sistema mostra saldo disponível
|
|
||||||
5. Wizard Passo 2: Seleciona períodos no calendário
|
|
||||||
└── Validação em tempo real
|
|
||||||
6. Wizard Passo 3: Revisa e confirma
|
|
||||||
└── Adiciona observação (opcional)
|
|
||||||
7. Envia solicitação
|
|
||||||
└── Toast: "Solicitação enviada com sucesso! 🎉"
|
|
||||||
└── Notificação enviada ao gestor
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 2️⃣ **Gestor Aprova/Rejeita**
|
|
||||||
|
|
||||||
```
|
|
||||||
1. Recebe notificação (sino no header)
|
|
||||||
2. Acessa: Perfil > Aba "Aprovar Férias"
|
|
||||||
3. Visualiza lista de solicitações pendentes
|
|
||||||
4. Clica em solicitação para detalhes
|
|
||||||
5. Opções:
|
|
||||||
├── Aprovar
|
|
||||||
│ └── Sistema atualiza saldo
|
|
||||||
│ └── Funcionário recebe notificação
|
|
||||||
├── Reprovar com motivo
|
|
||||||
│ └── Sistema libera dias reservados
|
|
||||||
│ └── Funcionário recebe notificação
|
|
||||||
└── Ajustar datas e aprovar
|
|
||||||
└── Sistema recalcula saldo
|
|
||||||
└── Funcionário recebe notificação
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 3️⃣ **Sistema Automático**
|
|
||||||
|
|
||||||
```
|
|
||||||
Diariamente (Cron Jobs):
|
|
||||||
1. Cria períodos aquisitivos para funcionários
|
|
||||||
2. Atualiza status de férias (ativo → em_ferias)
|
|
||||||
3. Verifica períodos vencidos
|
|
||||||
4. Envia alertas de saldo baixo
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📖 GUIA DE USO
|
|
||||||
|
|
||||||
### Para Funcionários
|
|
||||||
|
|
||||||
#### Como Solicitar Férias
|
|
||||||
|
|
||||||
1. **Acesse seu Perfil:**
|
|
||||||
- Click no ícone do seu avatar (canto superior direito)
|
|
||||||
- Selecione "Meu Perfil"
|
|
||||||
|
|
||||||
2. **Vá para Minhas Férias:**
|
|
||||||
- Click na aba "Minhas Férias"
|
|
||||||
- Visualize seu dashboard com saldos
|
|
||||||
|
|
||||||
3. **Solicite Novas Férias:**
|
|
||||||
- Click no botão grande "Solicitar Novas Férias"
|
|
||||||
|
|
||||||
4. **Passo 1 - Escolha o Ano:**
|
|
||||||
- Selecione o ano de referência
|
|
||||||
- Verifique seu saldo disponível
|
|
||||||
- Click em "Próximo"
|
|
||||||
|
|
||||||
5. **Passo 2 - Selecione os Períodos:**
|
|
||||||
- Arraste no calendário para selecionar períodos
|
|
||||||
- Adicione até 3 períodos (CLT) ou 2 (Servidor PE)
|
|
||||||
- Observe as validações em tempo real
|
|
||||||
- Click em "Próximo"
|
|
||||||
|
|
||||||
6. **Passo 3 - Confirme:**
|
|
||||||
- Revise todos os períodos
|
|
||||||
- Adicione observação (opcional)
|
|
||||||
- Click em "Enviar Solicitação"
|
|
||||||
|
|
||||||
7. **Aguarde Aprovação:**
|
|
||||||
- Você será notificado quando o gestor aprovar/reprovar
|
|
||||||
- Acompanhe o status na aba "Minhas Férias"
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Para Gestores
|
|
||||||
|
|
||||||
#### Como Aprovar Férias
|
|
||||||
|
|
||||||
1. **Notificação:**
|
|
||||||
- Você receberá um sino vermelho no header
|
|
||||||
- Click nele para ver solicitações pendentes
|
|
||||||
|
|
||||||
2. **Acesse Aprovações:**
|
|
||||||
- Vá em Perfil > Aba "Aprovar Férias"
|
|
||||||
- Visualize lista de solicitações da sua equipe
|
|
||||||
|
|
||||||
3. **Analise a Solicitação:**
|
|
||||||
- Click em "Ver Detalhes"
|
|
||||||
- Veja períodos, dias, e observações
|
|
||||||
|
|
||||||
4. **Decida:**
|
|
||||||
- **Aprovar:** Click em "Aprovar"
|
|
||||||
- **Reprovar:** Click em "Reprovar", escreva motivo
|
|
||||||
- **Ajustar:** Click em "Ajustar Datas", modifique, e aprove
|
|
||||||
|
|
||||||
5. **Confirmação:**
|
|
||||||
- Funcionário recebe notificação automática
|
|
||||||
- Status atualizado no sistema
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Para TI_MASTER
|
|
||||||
|
|
||||||
#### Como Configurar Times
|
|
||||||
|
|
||||||
1. **Acesse TI:**
|
|
||||||
- Menu lateral > Tecnologia da Informação
|
|
||||||
|
|
||||||
2. **Gestão de Times:**
|
|
||||||
- Click em "Times e Membros"
|
|
||||||
- Visualize lista de times
|
|
||||||
|
|
||||||
3. **Criar Time:**
|
|
||||||
- Click em "Novo Time"
|
|
||||||
- Preencha: Nome, Descrição, Cor, Gestor
|
|
||||||
- Adicione membros (funcionários)
|
|
||||||
- Salve
|
|
||||||
|
|
||||||
4. **Gerenciar Membros:**
|
|
||||||
- Adicione/remova membros de times
|
|
||||||
- Transfira membros entre times
|
|
||||||
- Desative times inativos
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🛠️ TECNOLOGIAS UTILIZADAS
|
|
||||||
|
|
||||||
### **Frontend**
|
|
||||||
|
|
||||||
| Tecnologia | Versão | Uso |
|
|
||||||
|------------|--------|-----|
|
|
||||||
| **SvelteKit** | 2.48.1 | Framework principal |
|
|
||||||
| **Svelte** | 5.42.3 | UI Components |
|
|
||||||
| **FullCalendar** | 6.1.19 | Calendário interativo |
|
|
||||||
| **Svelte-Sonner** | 1.0.5 | Toast notifications |
|
|
||||||
| **Zod** | 4.1.12 | Validação de schemas |
|
|
||||||
| **DaisyUI** | 5.3.10 | Design system |
|
|
||||||
| **TailwindCSS** | 4.1.16 | Utility CSS |
|
|
||||||
|
|
||||||
### **Backend**
|
|
||||||
|
|
||||||
| Tecnologia | Uso |
|
|
||||||
|------------|-----|
|
|
||||||
| **Convex** | Backend-as-a-Service |
|
|
||||||
| **TypeScript** | Type safety |
|
|
||||||
| **Cron Jobs** | Automações |
|
|
||||||
|
|
||||||
### **Outros**
|
|
||||||
|
|
||||||
- **Canvas API**: Gráficos de pizza
|
|
||||||
- **date-fns**: Manipulação de datas
|
|
||||||
- **Internationalized Date**: Formatação i18n
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ✅ TESTES E VALIDAÇÃO
|
|
||||||
|
|
||||||
### **Cenários de Teste**
|
|
||||||
|
|
||||||
#### Teste 1: Solicitação CLT Válida
|
|
||||||
```
|
|
||||||
✅ Funcionário: João (CLT)
|
|
||||||
✅ Ano: 2025
|
|
||||||
✅ Saldo: 30 dias disponíveis
|
|
||||||
✅ Períodos:
|
|
||||||
- 15 dias (01/06 a 15/06) ← Principal
|
|
||||||
- 10 dias (01/12 a 10/12)
|
|
||||||
- 5 dias (20/12 a 24/12)
|
|
||||||
✅ Resultado: Aprovado ✅
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Teste 2: Servidor PE - Período Inválido
|
|
||||||
```
|
|
||||||
❌ Funcionário: Maria (Servidor PE)
|
|
||||||
❌ Ano: 2025
|
|
||||||
❌ Saldo: 30 dias disponíveis
|
|
||||||
❌ Períodos:
|
|
||||||
- 20 dias (01/06 a 20/06)
|
|
||||||
- 5 dias (01/12 a 05/12) ← ERRO: Mínimo 10 dias
|
|
||||||
❌ Resultado: ERRO - "Período de 5 dias é inválido. Mínimo: 10 dias corridos"
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Teste 3: CLT - Sem Período Principal
|
|
||||||
```
|
|
||||||
❌ Funcionário: Carlos (CLT)
|
|
||||||
❌ Períodos:
|
|
||||||
- 10 dias
|
|
||||||
- 10 dias
|
|
||||||
- 10 dias ← Nenhum com 14+
|
|
||||||
❌ Resultado: ERRO - "Ao dividir férias em CLT, um período deve ter no mínimo 14 dias corridos"
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Teste 4: Saldo Insuficiente
|
|
||||||
```
|
|
||||||
❌ Funcionário: Ana
|
|
||||||
❌ Saldo: 10 dias disponíveis
|
|
||||||
❌ Solicitação: 20 dias
|
|
||||||
❌ Resultado: ERRO - "Total solicitado (20 dias) excede saldo disponível (10 dias)"
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📂 ESTRUTURA DE ARQUIVOS
|
|
||||||
|
|
||||||
```
|
|
||||||
sgse-app/
|
|
||||||
├── apps/web/src/
|
|
||||||
│ ├── lib/
|
|
||||||
│ │ └── components/
|
|
||||||
│ │ └── ferias/
|
|
||||||
│ │ ├── CalendarioFerias.svelte ← Calendário
|
|
||||||
│ │ ├── WizardSolicitacaoFerias.svelte ← Wizard 3 passos
|
|
||||||
│ │ └── DashboardFerias.svelte ← Dashboard analytics
|
|
||||||
│ └── routes/
|
|
||||||
│ └── (dashboard)/
|
|
||||||
│ ├── +layout.svelte ← Toaster config
|
|
||||||
│ └── perfil/
|
|
||||||
│ └── +page.svelte ← Página principal
|
|
||||||
│
|
|
||||||
├── packages/backend/convex/
|
|
||||||
│ ├── schema.ts ← periodosAquisitivos + regimeTrabalho
|
|
||||||
│ ├── saldoFerias.ts ← Cálculos e validações
|
|
||||||
│ ├── ferias.ts ← CRUD de solicitações
|
|
||||||
│ ├── times.ts ← Gestão de times
|
|
||||||
│ └── crons.ts ← Jobs automáticos
|
|
||||||
│
|
|
||||||
└── Documentação/
|
|
||||||
├── REGRAS_FERIAS_CLT_E_SERVIDOR_PE.md ← Regras detalhadas
|
|
||||||
└── SISTEMA_FERIAS_MODERNO_COMPLETO.md ← Este arquivo!
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎨 DESIGN SYSTEM
|
|
||||||
|
|
||||||
### Cores
|
|
||||||
|
|
||||||
- **Primary:** `#667eea` (Roxo)
|
|
||||||
- **Secondary:** `#764ba2` (Rosa-Roxo)
|
|
||||||
- **Success:** `#51cf66` (Verde)
|
|
||||||
- **Warning:** `#ffa94d` (Laranja)
|
|
||||||
- **Error:** `#ff6b6b` (Vermelho)
|
|
||||||
- **Info:** `#4facfe` (Azul)
|
|
||||||
|
|
||||||
### Componentes Premium
|
|
||||||
|
|
||||||
- **Cards com Gradiente:** `from-primary/20 to-secondary/10`
|
|
||||||
- **Sombras Profundas:** `shadow-2xl`
|
|
||||||
- **Bordas Suaves:** `rounded-2xl`
|
|
||||||
- **Hover Effects:** `hover:scale-105 transition-all`
|
|
||||||
- **Glassmorphism:** Background semi-transparente com blur
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🚀 PRÓXIMOS PASSOS (Futuro)
|
|
||||||
|
|
||||||
### Fase 3 - Melhorias Avançadas
|
|
||||||
|
|
||||||
1. **Exportação de Relatórios:**
|
|
||||||
- PDF com histórico de férias
|
|
||||||
- Excel com estatísticas
|
|
||||||
- Gráficos impressos
|
|
||||||
|
|
||||||
2. **Integração com E-mail:**
|
|
||||||
- Notificações por e-mail
|
|
||||||
- Lembretes automáticos
|
|
||||||
|
|
||||||
3. **Mobile App:**
|
|
||||||
- Progressive Web App (PWA)
|
|
||||||
- Notificações push
|
|
||||||
|
|
||||||
4. **IA Inteligente:**
|
|
||||||
- Sugestão de melhores períodos
|
|
||||||
- Previsão de conflitos de equipe
|
|
||||||
- Otimização de agendamento
|
|
||||||
|
|
||||||
5. **Integrações:**
|
|
||||||
- Google Calendar
|
|
||||||
- Microsoft Outlook
|
|
||||||
- Folha de pagamento
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📞 SUPORTE
|
|
||||||
|
|
||||||
### Problemas Comuns
|
|
||||||
|
|
||||||
**1. "Não consigo ver meu saldo"**
|
|
||||||
- Verifique se você tem um cadastro de funcionário
|
|
||||||
- Confirme que tem uma data de admissão cadastrada
|
|
||||||
- Entre em contato com RH
|
|
||||||
|
|
||||||
**2. "Validação bloqueando minha solicitação"**
|
|
||||||
- Leia atentamente a mensagem de erro
|
|
||||||
- Verifique se está respeitando as regras do seu regime (CLT ou Servidor PE)
|
|
||||||
- Consulte a documentação de regras
|
|
||||||
|
|
||||||
**3. "Gestor não recebeu notificação"**
|
|
||||||
- Verifique se você está atribuído a um time
|
|
||||||
- Confirme que o time tem um gestor configurado
|
|
||||||
- Entre em contato com TI
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ✨ CONCLUSÃO
|
|
||||||
|
|
||||||
O **Sistema Moderno de Gestão de Férias** representa um avanço significativo na experiência do usuário e na eficiência operacional do SGSE.
|
|
||||||
|
|
||||||
### **Benefícios Alcançados:**
|
|
||||||
|
|
||||||
✅ **Redução de Erros:** Validação automática previne solicitações inválidas
|
|
||||||
✅ **Transparência:** Dashboard mostra saldo em tempo real
|
|
||||||
✅ **Agilidade:** Processo guiado reduz tempo de solicitação
|
|
||||||
✅ **Conformidade:** Regras CLT e Servidor PE aplicadas automaticamente
|
|
||||||
✅ **UX Premium:** Interface moderna e intuitiva
|
|
||||||
|
|
||||||
### **Métricas de Sucesso:**
|
|
||||||
|
|
||||||
- 🎯 **100%** das regras CLT e Servidor PE implementadas
|
|
||||||
- 🎯 **3 passos** para solicitar férias (vs 10+ no sistema anterior)
|
|
||||||
- 🎯 **Real-time** validação e feedback
|
|
||||||
- 🎯 **0 configuração** manual - tudo automático!
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Desenvolvido com ❤️ pela equipe SGSE**
|
|
||||||
**Versão 2.0.0 - Sistema Premium Multi-Regime**
|
|
||||||
**Data: 30 de outubro de 2025**
|
|
||||||
|
|
||||||
🎉 **SISTEMA 100% FUNCIONAL E PRONTO PARA USO!** 🎉
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,304 +0,0 @@
|
|||||||
# 🧪 TESTAR SISTEMA DE FÉRIAS - PASSO A PASSO
|
|
||||||
|
|
||||||
**Data:** 30 de outubro de 2025
|
|
||||||
**Objetivo:** Criar funcionário de teste e validar todo o fluxo de férias
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🚀 PASSO 1: Criar Funcionário de Teste para TI Master
|
|
||||||
|
|
||||||
### Opção A: Via Convex Dashboard (Recomendado)
|
|
||||||
|
|
||||||
1. **Acesse o Convex Dashboard:**
|
|
||||||
```
|
|
||||||
https://dashboard.convex.dev
|
|
||||||
```
|
|
||||||
|
|
||||||
2. **Vá para a seção "Functions"**
|
|
||||||
|
|
||||||
3. **Encontre a função:** `criarFuncionarioTeste:criarFuncionarioParaTIMaster`
|
|
||||||
|
|
||||||
4. **Execute com estes argumentos:**
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"usuarioEmail": "ti.master@sgse.pe.gov.br"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
5. **Você verá o resultado:**
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"sucesso": true,
|
|
||||||
"funcionarioId": "abc123..."
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Opção B: Via Console do Browser
|
|
||||||
|
|
||||||
1. **Abra o console do navegador (F12)**
|
|
||||||
|
|
||||||
2. **Cole e execute este código:**
|
|
||||||
```javascript
|
|
||||||
// No console do navegador, dentro do sistema SGSE
|
|
||||||
const convex = window.convex; // ou acesse o client Convex do app
|
|
||||||
|
|
||||||
await convex.mutation(api.criarFuncionarioTeste.criarFuncionarioParaTIMaster, {
|
|
||||||
usuarioEmail: "ti.master@sgse.pe.gov.br"
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ✅ PASSO 2: Verificar Criação do Funcionário
|
|
||||||
|
|
||||||
1. **Recarregue a página do perfil**
|
|
||||||
- Pressione `F5` ou `Ctrl+R`
|
|
||||||
|
|
||||||
2. **Verifique se o erro sumiu**
|
|
||||||
- Acesse: Perfil > Minhas Férias
|
|
||||||
- Agora deve aparecer o **Dashboard de Férias** ✨
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🧪 PASSO 3: Testar Fluxo Completo de Solicitação
|
|
||||||
|
|
||||||
### 3.1. Visualizar Dashboard
|
|
||||||
```
|
|
||||||
✅ Deve mostrar:
|
|
||||||
- 4 Cards estatísticos (Disponível, Usado, Pendente, Total)
|
|
||||||
- 2 Gráficos de pizza
|
|
||||||
- Tabela de histórico de saldos
|
|
||||||
- Botão "Solicitar Novas Férias"
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3.2. Iniciar Wizard de Solicitação
|
|
||||||
|
|
||||||
1. **Click em "Solicitar Novas Férias"**
|
|
||||||
|
|
||||||
2. **PASSO 1 - Ano & Saldo:**
|
|
||||||
```
|
|
||||||
✅ Escolha o ano: 2024 ou 2025
|
|
||||||
✅ Verifique o saldo disponível: 30 dias
|
|
||||||
✅ Veja o regime: "CLT - Consolidação das Leis do Trabalho"
|
|
||||||
✅ Click em "Próximo"
|
|
||||||
```
|
|
||||||
|
|
||||||
3. **PASSO 2 - Selecionar Períodos:**
|
|
||||||
```
|
|
||||||
✅ Arraste no calendário para selecionar o primeiro período
|
|
||||||
✅ Adicione mais períodos (até 3 para CLT)
|
|
||||||
✅ Observe as validações em tempo real:
|
|
||||||
- Verde: tudo certo ✅
|
|
||||||
- Vermelho: erro (ex: período muito curto) ❌
|
|
||||||
- Amarelo: aviso (ex: saldo baixo) ⚠️
|
|
||||||
✅ Click em "Próximo"
|
|
||||||
```
|
|
||||||
|
|
||||||
4. **PASSO 3 - Confirmação:**
|
|
||||||
```
|
|
||||||
✅ Revise todos os períodos
|
|
||||||
✅ Adicione observação (opcional)
|
|
||||||
✅ Click em "Enviar Solicitação"
|
|
||||||
```
|
|
||||||
|
|
||||||
5. **Sucesso!**
|
|
||||||
```
|
|
||||||
✅ Toast verde: "Solicitação enviada com sucesso! 🎉"
|
|
||||||
✅ Retorna ao dashboard
|
|
||||||
✅ Atualiza estatísticas
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🧪 PASSO 4: Testar Validações CLT
|
|
||||||
|
|
||||||
### Teste 1: Período muito curto ❌
|
|
||||||
```
|
|
||||||
Tente criar: 3 dias
|
|
||||||
Resultado esperado: "Período de 3 dias é inválido. Mínimo: 5 dias corridos (CLT)"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Teste 2: Muitos períodos ❌
|
|
||||||
```
|
|
||||||
Tente criar: 4 períodos
|
|
||||||
Resultado esperado: "Máximo de 3 períodos permitidos para CLT"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Teste 3: Sem período principal ❌
|
|
||||||
```
|
|
||||||
Crie 3 períodos:
|
|
||||||
- 10 dias
|
|
||||||
- 10 dias
|
|
||||||
- 10 dias
|
|
||||||
Resultado esperado: "Ao dividir férias em CLT, um período deve ter no mínimo 14 dias corridos"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Teste 4: Solicitação válida ✅
|
|
||||||
```
|
|
||||||
Crie 3 períodos:
|
|
||||||
- 15 dias (Principal)
|
|
||||||
- 10 dias
|
|
||||||
- 5 dias
|
|
||||||
Resultado esperado: "✅ Períodos válidos! Total: 30 dias"
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🧪 PASSO 5: Testar Regime Servidor Público PE
|
|
||||||
|
|
||||||
### 5.1. Alterar Regime do Funcionário
|
|
||||||
|
|
||||||
**Via Convex Dashboard:**
|
|
||||||
```json
|
|
||||||
// Função: criarFuncionarioTeste:alterarRegimeTrabalho
|
|
||||||
{
|
|
||||||
"funcionarioId": "SEU_FUNCIONARIO_ID",
|
|
||||||
"novoRegime": "estatutario_pe"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### 5.2. Testar Validações Servidor PE
|
|
||||||
|
|
||||||
**Teste 1: 3 períodos ❌**
|
|
||||||
```
|
|
||||||
Tente criar: 3 períodos
|
|
||||||
Resultado esperado: "Máximo de 2 períodos permitidos para Servidor Público Estadual de Pernambuco"
|
|
||||||
```
|
|
||||||
|
|
||||||
**Teste 2: Período curto ❌**
|
|
||||||
```
|
|
||||||
Tente criar: 8 dias
|
|
||||||
Resultado esperado: "Período de 8 dias é inválido. Mínimo: 10 dias corridos (Servidor Público...)"
|
|
||||||
```
|
|
||||||
|
|
||||||
**Teste 3: Solicitação válida ✅**
|
|
||||||
```
|
|
||||||
Crie 2 períodos:
|
|
||||||
- 20 dias
|
|
||||||
- 10 dias
|
|
||||||
Resultado esperado: "✅ Períodos válidos! Total: 30 dias"
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎯 PASSO 6: Testar Aprovação de Férias (Gestor)
|
|
||||||
|
|
||||||
### 6.1. Configurar Time e Gestor
|
|
||||||
|
|
||||||
**Via TI > Times e Membros:**
|
|
||||||
```
|
|
||||||
1. Criar um time de teste
|
|
||||||
2. Adicionar funcionário como membro
|
|
||||||
3. Configurar você (TI Master) como gestor
|
|
||||||
```
|
|
||||||
|
|
||||||
### 6.2. Aprovar Solicitação
|
|
||||||
|
|
||||||
**Via Perfil > Aprovar Férias:**
|
|
||||||
```
|
|
||||||
1. Ver lista de solicitações pendentes
|
|
||||||
2. Click em "Ver Detalhes"
|
|
||||||
3. Aprovar / Reprovar / Ajustar
|
|
||||||
4. Verificar notificação no sino
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📊 PASSO 7: Verificar Analytics
|
|
||||||
|
|
||||||
### Dashboard deve mostrar:
|
|
||||||
```
|
|
||||||
✅ Gráfico de Saldo atualizado
|
|
||||||
✅ Estatísticas corretas
|
|
||||||
✅ Histórico de solicitações
|
|
||||||
✅ Status visual (badges coloridos)
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🐛 TROUBLESHOOTING
|
|
||||||
|
|
||||||
### Problema: "Perfil de funcionário não encontrado"
|
|
||||||
**Solução:** Execute o PASSO 1 novamente
|
|
||||||
|
|
||||||
### Problema: "Você ainda não tem direito a férias"
|
|
||||||
**Solução:** Altere a data de admissão:
|
|
||||||
```json
|
|
||||||
// Via criarFuncionarioTeste:alterarDataAdmissao
|
|
||||||
{
|
|
||||||
"funcionarioId": "SEU_ID",
|
|
||||||
"novaData": "2023-01-01"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Problema: Toast não aparece
|
|
||||||
**Solução:** Verifique se Sonner está configurado em `+layout.svelte`
|
|
||||||
|
|
||||||
### Problema: Calendário não carrega
|
|
||||||
**Solução:**
|
|
||||||
1. Verifique se FullCalendar foi instalado
|
|
||||||
2. Execute: `cd apps/web && bun add @fullcalendar/core @fullcalendar/daygrid`
|
|
||||||
|
|
||||||
### Problema: Validação não funciona
|
|
||||||
**Solução:**
|
|
||||||
1. Verifique o regime de trabalho do funcionário
|
|
||||||
2. Confirme que o backend `saldoFerias.ts` está deployado
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ✅ CHECKLIST DE TESTES
|
|
||||||
|
|
||||||
- [ ] Funcionário criado e associado
|
|
||||||
- [ ] Dashboard carrega corretamente
|
|
||||||
- [ ] Wizard abre ao clicar em "Solicitar Férias"
|
|
||||||
- [ ] Seleção de ano funciona
|
|
||||||
- [ ] Saldo é exibido corretamente
|
|
||||||
- [ ] Calendário permite drag & drop
|
|
||||||
- [ ] Validações CLT funcionam
|
|
||||||
- [ ] Validações Servidor PE funcionam
|
|
||||||
- [ ] Toast notifications aparecem
|
|
||||||
- [ ] Solicitação é criada com sucesso
|
|
||||||
- [ ] Dashboard atualiza após solicitação
|
|
||||||
- [ ] Gráficos são renderizados
|
|
||||||
- [ ] Aprovação de férias funciona (se gestor)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎉 RESULTADO ESPERADO
|
|
||||||
|
|
||||||
Após completar todos os passos, você terá testado:
|
|
||||||
|
|
||||||
✅ **Backend:**
|
|
||||||
- Criação de períodos aquisitivos
|
|
||||||
- Validações CLT e Servidor PE
|
|
||||||
- Reserva e liberação de dias
|
|
||||||
- Cálculo de saldo
|
|
||||||
|
|
||||||
✅ **Frontend:**
|
|
||||||
- Wizard de 3 passos
|
|
||||||
- Calendário interativo
|
|
||||||
- Dashboard com analytics
|
|
||||||
- Toast notifications
|
|
||||||
- Validações em tempo real
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📞 PRECISA DE AJUDA?
|
|
||||||
|
|
||||||
Se encontrar algum erro:
|
|
||||||
|
|
||||||
1. **Verifique o console do navegador (F12)**
|
|
||||||
- Logs de erro aparecem aqui
|
|
||||||
|
|
||||||
2. **Verifique o Convex Dashboard**
|
|
||||||
- Logs do backend aparecem aqui
|
|
||||||
|
|
||||||
3. **Documentação completa:**
|
|
||||||
- Veja `SISTEMA_FERIAS_MODERNO_COMPLETO.md`
|
|
||||||
- Veja `REGRAS_FERIAS_CLT_E_SERVIDOR_PE.md`
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Boa sorte com os testes! 🚀**
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,369 +0,0 @@
|
|||||||
# 🔍 Guia de Teste - Sistema de Monitoramento
|
|
||||||
|
|
||||||
## ✅ Sistema Implementado com Sucesso!
|
|
||||||
|
|
||||||
O sistema de monitoramento técnico foi completamente implementado no painel TI com as seguintes funcionalidades:
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📦 O que foi criado
|
|
||||||
|
|
||||||
### Backend (Convex)
|
|
||||||
|
|
||||||
#### 1. **Schema** (`packages/backend/convex/schema.ts`)
|
|
||||||
- ✅ `systemMetrics`: Armazena histórico de métricas do sistema
|
|
||||||
- ✅ `alertConfigurations`: Configurações de alertas customizáveis
|
|
||||||
- ✅ `alertHistory`: Histórico de alertas disparados
|
|
||||||
|
|
||||||
#### 2. **API** (`packages/backend/convex/monitoramento.ts`)
|
|
||||||
- ✅ `salvarMetricas`: Salva métricas coletadas
|
|
||||||
- ✅ `configurarAlerta`: Criar/atualizar alertas
|
|
||||||
- ✅ `listarAlertas`: Listar configurações de alertas
|
|
||||||
- ✅ `obterMetricas`: Buscar métricas com filtros
|
|
||||||
- ✅ `obterMetricasRecentes`: Últimas métricas (1 hora)
|
|
||||||
- ✅ `obterUltimaMetrica`: Métrica mais recente
|
|
||||||
- ✅ `gerarRelatorio`: Gerar relatório com estatísticas
|
|
||||||
- ✅ `deletarAlerta`: Remover configuração de alerta
|
|
||||||
- ✅ `obterHistoricoAlertas`: Histórico de alertas disparados
|
|
||||||
- ✅ `verificarAlertasInternal`: Verificação automática de alertas (internal)
|
|
||||||
|
|
||||||
### Frontend
|
|
||||||
|
|
||||||
#### 3. **Coletor de Métricas** (`apps/web/src/lib/utils/metricsCollector.ts`)
|
|
||||||
- ✅ Coleta automática de métricas do navegador
|
|
||||||
- ✅ Estimativa de CPU via Performance API
|
|
||||||
- ✅ Uso de memória (Chrome) ou estimativa
|
|
||||||
- ✅ Latência de rede
|
|
||||||
- ✅ Armazenamento usado
|
|
||||||
- ✅ Usuários online (via Convex)
|
|
||||||
- ✅ Tempo de resposta da aplicação
|
|
||||||
- ✅ Contagem de erros
|
|
||||||
|
|
||||||
#### 4. **Componentes**
|
|
||||||
|
|
||||||
**SystemMonitorCard.svelte**
|
|
||||||
- ✅ 8 cards de métricas visuais com cores dinâmicas
|
|
||||||
- ✅ Atualização automática a cada 30 segundos
|
|
||||||
- ✅ Indicadores de status (Normal/Atenção/Crítico)
|
|
||||||
- ✅ Progress bars com cores baseadas em thresholds
|
|
||||||
- ✅ Botões para configurar alertas e gerar relatórios
|
|
||||||
|
|
||||||
**AlertConfigModal.svelte**
|
|
||||||
- ✅ Criação/edição de alertas
|
|
||||||
- ✅ Seleção de métrica e operador
|
|
||||||
- ✅ Configuração de thresholds
|
|
||||||
- ✅ Toggle para ativar/desativar
|
|
||||||
- ✅ Notificações por Chat e/ou Email
|
|
||||||
- ✅ Preview do alerta antes de salvar
|
|
||||||
- ✅ Lista de alertas configurados
|
|
||||||
- ✅ Editar/deletar alertas existentes
|
|
||||||
|
|
||||||
**ReportGeneratorModal.svelte**
|
|
||||||
- ✅ Seleção de período (Hoje/Semana/Mês/Personalizado)
|
|
||||||
- ✅ Filtros de data e hora
|
|
||||||
- ✅ Seleção de métricas a incluir
|
|
||||||
- ✅ Exportação em PDF (com jsPDF e autotable)
|
|
||||||
- ✅ Exportação em CSV (com PapaParse)
|
|
||||||
- ✅ Relatórios com estatísticas (min/max/avg)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🧪 Como Testar
|
|
||||||
|
|
||||||
### Pré-requisitos
|
|
||||||
|
|
||||||
1. **Instalar dependências** (se ainda não instalou):
|
|
||||||
```bash
|
|
||||||
cd apps/web
|
|
||||||
npm install
|
|
||||||
```
|
|
||||||
|
|
||||||
2. **Iniciar o backend Convex**:
|
|
||||||
```bash
|
|
||||||
npx convex dev
|
|
||||||
```
|
|
||||||
|
|
||||||
3. **Iniciar o frontend**:
|
|
||||||
```bash
|
|
||||||
npm run dev
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Teste 1: Visualização de Métricas
|
|
||||||
|
|
||||||
1. Faça login como usuário TI:
|
|
||||||
- Matrícula: `1000`
|
|
||||||
- Senha: `TIMaster@123`
|
|
||||||
|
|
||||||
2. Acesse `/ti/painel-administrativo`
|
|
||||||
|
|
||||||
3. Role até o final da página - você verá o **Card de Monitoramento do Sistema**
|
|
||||||
|
|
||||||
4. Observe:
|
|
||||||
- ✅ 8 cards de métricas com valores em tempo real
|
|
||||||
- ✅ Cores mudando baseadas nos valores (verde/amarelo/vermelho)
|
|
||||||
- ✅ Progress bars animadas
|
|
||||||
- ✅ Última atualização no rodapé
|
|
||||||
|
|
||||||
5. Aguarde 30 segundos:
|
|
||||||
- ✅ Os valores devem atualizar automaticamente
|
|
||||||
- ✅ O timestamp da última atualização deve mudar
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Teste 2: Configuração de Alertas
|
|
||||||
|
|
||||||
1. No card de monitoramento, clique em **"Configurar Alertas"**
|
|
||||||
|
|
||||||
2. Clique em **"Novo Alerta"**
|
|
||||||
|
|
||||||
3. Configure um alerta de teste:
|
|
||||||
- Métrica: **Uso de CPU (%)**
|
|
||||||
- Condição: **Maior que (>)**
|
|
||||||
- Valor Limite: **50**
|
|
||||||
- Alerta Ativo: ✅ (marcado)
|
|
||||||
- Notificar por Chat: ✅ (marcado)
|
|
||||||
- Notificar por E-mail: ☐ (desmarcado)
|
|
||||||
|
|
||||||
4. Clique em **"Salvar Alerta"**
|
|
||||||
|
|
||||||
5. Verifique:
|
|
||||||
- ✅ Alerta aparece na lista de "Alertas Configurados"
|
|
||||||
- ✅ Status mostra "Ativo" com badge verde
|
|
||||||
- ✅ Método de notificação mostra "Chat"
|
|
||||||
|
|
||||||
6. Teste edição:
|
|
||||||
- Clique no botão de editar (✏️)
|
|
||||||
- Altere o threshold para **80**
|
|
||||||
- Salve novamente
|
|
||||||
- ✅ Verifique que o valor foi atualizado
|
|
||||||
|
|
||||||
7. Teste deletar:
|
|
||||||
- Clique no botão de deletar (🗑️)
|
|
||||||
- Confirme a exclusão
|
|
||||||
- ✅ Alerta deve desaparecer da lista
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Teste 3: Disparo de Alertas
|
|
||||||
|
|
||||||
1. Configure um alerta com threshold baixo para forçar disparo:
|
|
||||||
- Métrica: **Uso de CPU (%)**
|
|
||||||
- Condição: **Maior que (>)**
|
|
||||||
- Valor Limite: **1** (muito baixo)
|
|
||||||
- Notificar por Chat: ✅
|
|
||||||
|
|
||||||
2. Aguarde até 30 segundos (próxima coleta de métricas)
|
|
||||||
|
|
||||||
3. Verifique o **Sino de Notificações** no header:
|
|
||||||
- ✅ Deve aparecer uma badge com número (1+)
|
|
||||||
- ✅ O sino deve ficar animado
|
|
||||||
|
|
||||||
4. Clique no sino:
|
|
||||||
- ✅ Deve aparecer notificação tipo: "⚠️ Alerta de Sistema: cpuUsage"
|
|
||||||
- ✅ Descrição mostrando o valor e o limite
|
|
||||||
|
|
||||||
5. **Importante**: O sistema não dispara alertas duplicados em 5 minutos
|
|
||||||
- Mesmo com threshold baixo, você receberá apenas 1 notificação a cada 5 min
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Teste 4: Geração de Relatórios
|
|
||||||
|
|
||||||
#### Teste 4.1: Relatório PDF
|
|
||||||
|
|
||||||
1. No card de monitoramento, clique em **"Gerar Relatório"**
|
|
||||||
|
|
||||||
2. Selecione período **"Última Semana"**
|
|
||||||
|
|
||||||
3. Verifique que todas as métricas estão selecionadas
|
|
||||||
|
|
||||||
4. Clique em **"Exportar PDF"**
|
|
||||||
|
|
||||||
5. Verifique:
|
|
||||||
- ✅ Download do arquivo PDF iniciou
|
|
||||||
- ✅ Nome do arquivo: `relatorio-monitoramento-YYYY-MM-DD-HHmm.pdf`
|
|
||||||
|
|
||||||
6. Abra o PDF e verifique:
|
|
||||||
- ✅ Título: "Relatório de Monitoramento do Sistema"
|
|
||||||
- ✅ Período correto
|
|
||||||
- ✅ Tabela de estatísticas (Min/Max/Média)
|
|
||||||
- ✅ Registros detalhados (últimos 50)
|
|
||||||
- ✅ Footer com logo SGSE em cada página
|
|
||||||
|
|
||||||
#### Teste 4.2: Relatório CSV
|
|
||||||
|
|
||||||
1. No modal de relatórios, clique em **"Exportar CSV"**
|
|
||||||
|
|
||||||
2. Verifique:
|
|
||||||
- ✅ Download do arquivo CSV iniciou
|
|
||||||
- ✅ Nome do arquivo: `relatorio-monitoramento-YYYY-MM-DD-HHmm.csv`
|
|
||||||
|
|
||||||
3. Abra o CSV no Excel/Google Sheets:
|
|
||||||
- ✅ Colunas com nomes corretos (Data/Hora, métricas)
|
|
||||||
- ✅ Dados formatados corretamente
|
|
||||||
- ✅ Datas em formato brasileiro (dd/MM/yyyy)
|
|
||||||
|
|
||||||
#### Teste 4.3: Filtros Personalizados
|
|
||||||
|
|
||||||
1. Selecione **"Personalizado"**
|
|
||||||
|
|
||||||
2. Configure:
|
|
||||||
- Data Início: Hoje
|
|
||||||
- Hora Início: 00:00
|
|
||||||
- Data Fim: Hoje
|
|
||||||
- Hora Fim: Hora atual
|
|
||||||
|
|
||||||
3. Desmarque algumas métricas (deixe só 3-4 marcadas)
|
|
||||||
|
|
||||||
4. Exporte PDF ou CSV
|
|
||||||
|
|
||||||
5. Verifique:
|
|
||||||
- ✅ Apenas as métricas selecionadas aparecem
|
|
||||||
- ✅ Período correto é respeitado
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Teste 5: Coleta Automática de Métricas
|
|
||||||
|
|
||||||
1. Abra o **Console do Navegador** (F12)
|
|
||||||
|
|
||||||
2. Vá para a aba **Network** (Rede)
|
|
||||||
|
|
||||||
3. Aguarde 30 segundos
|
|
||||||
|
|
||||||
4. Verifique:
|
|
||||||
- ✅ Aparece requisição para `salvarMetricas`
|
|
||||||
- ✅ Status 200 (sucesso)
|
|
||||||
|
|
||||||
5. No Console, digite:
|
|
||||||
```javascript
|
|
||||||
console.error("Teste de erro");
|
|
||||||
```
|
|
||||||
|
|
||||||
6. Aguarde 30 segundos
|
|
||||||
|
|
||||||
7. Verifique o card "Erros (30s)":
|
|
||||||
- ✅ Contador deve aumentar
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📊 Métricas Coletadas
|
|
||||||
|
|
||||||
### Métricas de Sistema
|
|
||||||
- **CPU**: Estimativa baseada em Performance API (0-100%)
|
|
||||||
- **Memória**: `performance.memory` (Chrome) ou estimativa (0-100%)
|
|
||||||
- **Latência de Rede**: Tempo de resposta do servidor (ms)
|
|
||||||
- **Armazenamento**: Storage API ou estimativa (0-100%)
|
|
||||||
|
|
||||||
### Métricas de Aplicação
|
|
||||||
- **Usuários Online**: Contagem via query Convex
|
|
||||||
- **Mensagens/min**: Taxa de mensagens (a ser implementado)
|
|
||||||
- **Tempo de Resposta**: Latência de queries Convex (ms)
|
|
||||||
- **Erros**: Contagem de erros capturados (30s)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ⚙️ Configurações Avançadas
|
|
||||||
|
|
||||||
### Alterar Intervalo de Coleta
|
|
||||||
|
|
||||||
Por padrão, métricas são coletadas a cada **30 segundos**. Para alterar:
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
// Em SystemMonitorCard.svelte, linha ~52
|
|
||||||
stopCollection = startMetricsCollection(client, 30000); // 30s
|
|
||||||
```
|
|
||||||
|
|
||||||
Altere `30000` para o valor desejado em milissegundos.
|
|
||||||
|
|
||||||
### Alterar Thresholds de Cores
|
|
||||||
|
|
||||||
As cores mudam baseado nos valores:
|
|
||||||
- **Verde** (Normal): < 60%
|
|
||||||
- **Amarelo** (Atenção): 60-80%
|
|
||||||
- **Vermelho** (Crítico): > 80%
|
|
||||||
|
|
||||||
Para alterar, edite a função `getStatusColor` em `SystemMonitorCard.svelte`.
|
|
||||||
|
|
||||||
### Retenção de Dados
|
|
||||||
|
|
||||||
Por padrão, métricas são mantidas por **30 dias**. Após isso, são automaticamente deletadas.
|
|
||||||
|
|
||||||
Para alterar, edite `monitoramento.ts`:
|
|
||||||
```typescript
|
|
||||||
// Linha ~56
|
|
||||||
const dataLimite = Date.now() - 30 * 24 * 60 * 60 * 1000; // 30 dias
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🐛 Solução de Problemas
|
|
||||||
|
|
||||||
### Métricas não aparecem
|
|
||||||
- ✅ Verifique se o backend Convex está rodando
|
|
||||||
- ✅ Abra o Console e veja se há erros
|
|
||||||
- ✅ Aguarde 30 segundos para primeira coleta
|
|
||||||
|
|
||||||
### Alertas não disparam
|
|
||||||
- ✅ Verifique se o alerta está **Ativo**
|
|
||||||
- ✅ Verifique se o threshold está configurado corretamente
|
|
||||||
- ✅ Lembre-se: alertas não duplicam em 5 minutos
|
|
||||||
|
|
||||||
### Relatórios vazios
|
|
||||||
- ✅ Verifique se há métricas no período selecionado
|
|
||||||
- ✅ Aguarde pelo menos 1 minuto após iniciar o sistema
|
|
||||||
- ✅ Verifique se selecionou pelo menos 1 métrica
|
|
||||||
|
|
||||||
### Erro ao exportar PDF/CSV
|
|
||||||
- ✅ Verifique se instalou as dependências (`npm install`)
|
|
||||||
- ✅ Veja o Console para erros específicos
|
|
||||||
- ✅ Tente período menor (menos dados)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎯 Próximos Passos (Melhorias Futuras)
|
|
||||||
|
|
||||||
1. **Gráficos Visuais**: Adicionar charts com histórico
|
|
||||||
2. **Email de Alertas**: Integrar com sistema de email
|
|
||||||
3. **Dashboard Personalizado**: Permitir usuário escolher métricas
|
|
||||||
4. **Métricas de Backend**: CPU/RAM real do servidor Node.js
|
|
||||||
5. **Alertas Inteligentes**: Machine learning para anomalias
|
|
||||||
6. **Webhooks**: Notificar sistemas externos
|
|
||||||
7. **Métricas Customizadas**: Permitir criar métricas personalizadas
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ✨ Funcionalidades Destacadas
|
|
||||||
|
|
||||||
- ✅ **Monitoramento em Tempo Real**: Atualização automática a cada 30s
|
|
||||||
- ✅ **Alertas Customizáveis**: Configure thresholds personalizados
|
|
||||||
- ✅ **Notificações Integradas**: Via chat (sino de notificações)
|
|
||||||
- ✅ **Relatórios Profissionais**: PDF e CSV com estatísticas
|
|
||||||
- ✅ **Interface Moderna**: Design responsivo com DaisyUI
|
|
||||||
- ✅ **Performance**: Coleta eficiente sem sobrecarregar o sistema
|
|
||||||
- ✅ **Histórico**: 30 dias de dados armazenados
|
|
||||||
- ✅ **Sem Duplicatas**: Alertas inteligentes (1 a cada 5 min)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📝 Notas Técnicas
|
|
||||||
|
|
||||||
- **Browser API**: Usa APIs modernas do navegador (pode não funcionar em browsers antigos)
|
|
||||||
- **Chrome Memory**: `performance.memory` só funciona em Chrome/Edge
|
|
||||||
- **Rate Limiting**: Coleta limitada a 1x/30s para evitar sobrecarga
|
|
||||||
- **Cleanup Automático**: Métricas antigas são deletadas automaticamente
|
|
||||||
- **Timezone**: Todas as datas usam timezone do navegador
|
|
||||||
- **Permissões**: Apenas usuários TI podem acessar o monitoramento
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🚀 Sistema Pronto para Produção!
|
|
||||||
|
|
||||||
Todos os componentes foram implementados e testados. O sistema está robusto e profissional, pronto para uso em produção.
|
|
||||||
|
|
||||||
**Desenvolvido por**: Secretaria de Esportes de Pernambuco
|
|
||||||
**Versão**: 2.0
|
|
||||||
**Data**: Outubro 2025
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user