MÓDULO DE ENGENHARIA DE SOFTWARE - PANTANAL.DEV Comitiva: Amanda Beatriz, Carlos Braga, Elias Silva e João José
- Visão Geral - Introdução ao sistema
- Status Atual - Funcionalidades implementadas
- Como a Aplicação Funciona - Fluxo de usuário
- Arquitetura - Estrutura técnica
- Módulos - Componentes do sistema
- Tecnologias - Stack tecnológico
- Como Executar - Instruções de instalação
- Métricas e Indicadores - Explicação das métricas
- Cálculos de ROI - Fórmulas e exemplos
- Sistema de Gamificação - Pontuação e ranking
- Sistema de Desafios - Competições e métricas
- Métricas de Tempo e Custo - Análise financeira
- Configuração e Personalização - Como adaptar
- Troubleshooting - Soluções para problemas
- Roadmap Futuro - Funcionalidades planejadas
O Inova é um sistema web para gerenciar o ciclo de vida de ideias e iniciativas de inovação dentro de uma organização. Ele centraliza a submissão, avaliação, votação, comentários (públicos e privados) e a governança dessas ideias, permitindo que gestores acompanhem e priorizem aquilo que mais gera valor.
Objetivos principais:
- Promover cultura de inovação com um funil unificado de ideias.
- Dar visibilidade a colaboradores e gestores sobre status, pilar, prioridade e impacto.
- Prover governança com regras claras e histórico de decisões/pareceres.
- Banco de Dados: MySQL configurado e funcionando
- Autenticação: JWT via cookies HTTPOnly funcionando
- Votação: Sistema de votos funcionando com validação de status
- Comentários: Comentários públicos e pareceres privados funcionando
- Governança: Interface completa com 7 status disponíveis
- Feed: Exibição pública de ideias funcionando
- Minhas Ideias: Gestão pessoal com visualização de pareceres
- Relatórios: especificações mensais de Engajamento e Impacto documentadas em
RELATORIOS.md
Principais áreas da aplicação:
- Feed Público de Ideias: descoberta, votos, comentários públicos
- Minhas Ideias: CRUD para o autor, submissão formal e visualização de pareceres
- Governança: gestão de status, prioridade, pilar e pareceres privados
- Dashboard: métricas e indicadores
- Rascunho (
DRAFT): Em preenchimento, apenas o autor pode visualizar - Submetida (
SUBMITTED): Enviado, visível no feed e pela governança - Em Análise (
UNDER_REVIEW): Começou avaliação de viabilidade - Aprovada (
APPROVED): Projeto aceito, vira iniciativa automaticamente - Rejeitada (
REJECTED): Ideia não foi aceita - Arquivada (
ARCHIVED): Status final
- Planejamento (
PLANNING): Iniciativa criada, em fase de planejamento - Em Progresso (
IN_PROGRESS): Execução iniciada - Pausada (
ON_HOLD): Temporariamente suspensa - Concluída (
COMPLETED): Projeto finalizado com sucesso - Cancelada (
CANCELLED): Projeto cancelado
Nota: Ideias aprovadas criam automaticamente iniciativas via eventos de domínio
- 🗳️ Votação: Sistema completo com validação de status
- 💬 Comentários: Públicos (feed) e privados (governança)
- 🔄 Gestão de Status: 8 status com regras de transição
- 🔍 Filtros: Por status e pilar na governança
- 🔒 Segurança: JWT via cookies HTTPOnly
- 📊 Dashboard: Métricas e indicadores
- 📱 Responsivo: Interface adaptada para mobile
- Usuário acessa a SPA em http://localhost:8080 (arquivos estáticos em
src/main/resources/static). - Faz login/registro; recebe JWT e navega entre abas Feed, Minhas Ideias, Governança e Dashboard.
- No Feed, visualiza ideias públicas, votos e feedbacks públicos. Pode votar se autenticado.
- Em Minhas Ideias, cria/edita suas ideias e pode submetê-las para avaliação.
- Em Governança (perfil com role GOVERNANCE), os gestores filtram ideias por status/pilar, atualizam status/prioridade/pilar e adicionam pareceres privados.
- O Dashboard mostra contadores agregados (total, aprovadas, concluídas, taxa de conversão).
- Monólito Modular: um único artefato de deploy (Spring Boot), organizado por domínios em
modules/(p. ex.ideamanagement,authmanagement,initiativemanagement,reporting). - DDD (Bounded Contexts): cada módulo possui sua linguagem e regras. Evita vazamentos de regras entre domínios.
- Clean Architecture em cada módulo:
- domain: entidades, regras e políticas puras
- application: casos de uso, DTOs, orquestração
- infrastructure: repositórios/JPA, adaptações externas
- presentation: controladores REST, validações de entrada
- shared: utilitários cross-cutting (respostas padronizadas, segurança, configs)
Árvore de pastas (resumo):
src/main/java/com/innovation/governance/
├─ GovernanceApplication.java
├─ config/
├─ shared/
│ ├─ api/ # ApiResponse, erros comuns, validações
│ ├─ core/ # AggregateRoot, EventBus (eventos de domínio)
│ └─ security/ # JwtTokenProvider, filtros, SecurityConfig
├─ presentation/ # endpoints cross-cutting (se aplicável)
└─ modules/
├─ ideamanagement/
│ ├─ domain/ # entidades, regras e eventos (puras)
│ ├─ application/ # use cases, DTOs e portas (interfaces)
│ ├─ infrastructure/# JPA, mappers, repositórios (implementações)
│ └─ presentation/ # controllers REST
├─ authmanagement/
│ ├─ domain/ | application/ | infrastructure/ | presentation/
├─ initiativemanagement/
│ ├─ domain/ | application/ | infrastructure/ | presentation/
├─ reporting/
│ ├─ domain/ | application/ | infrastructure/ | presentation/
├─ companymanagement/
│ ├─ domain/ | application/ | infrastructure/ | presentation/
├─ gamification/
│ ├─ domain/ | application/ | infrastructure/ | presentation/
└─ challenges/
├─ domain/ | application/ | infrastructure/ | presentation/
src/main/resources/
├─ application.properties
├─ application-dev.properties
├─ application-h2.properties
├─ application-test.properties
├─ db/
│ └─ migration/
│ ├─ V1__create_users_table.sql
│ ├─ V2__create_companies_table.sql
│ ├─ V2_1__create_user_roles_table.sql
│ ├─ V3__add_company_reference_to_users.sql
│ ├─ V4__create_ideas_table.sql
│ ├─ V5__insert_development_data.sql
│ ├─ V6__create_challenges_tables.sql
│ └─ V7__documentation_comments.sql
└─ static/
├─ index.html
├─ privacy-policy.html
├─ css/
└─ js/
├─ app.js
├─ auth.js
├─ dashboard.js
├─ feed.js
├─ governance-modern.js
├─ my-ideas.js
├─ profile.js
├─ ranking.js
└─ token-refresh.js
src/test/
├─ java/com/innovation/governance/
│ ├─ config/ (GovernanceApplicationTests.java)
│ ├─ modules/
│ ├─ PasswordHashTest.java
│ └─ TestDataInitializer.java
└─ resources/
└─ static/js/idea-form-validation.test.js
- Regra de dependência: camadas externas dependem das internas; nunca o contrário.
- Camadas por módulo:
- domain: regras e modelos do negócio (puros, sem Spring/JPA). Ex.: Idea, IdeaStatus, eventos de domínio.
- application: casos de uso e portas (interfaces). Orquestra regras, define interfaces de repositório/serviços externos.
- infrastructure: adaptações para o mundo externo. Ex.: JPA repositories, mapeadores Entity↔Domain, integrações.
- presentation: entrada/saída. Ex.: REST controllers, validações sintáticas, Serialização de DTOs.
- Fluxo típico: Controller → UseCase (application) → Repository (interface) → Implementação (infrastructure) → Mapper ↔ Domain.
- Onde colocar cada coisa:
- Regra de negócio e invariantes: domain (e validações de caso de uso em application).
- Autorização/validações de entrada: presentation (Bean Validation, sanitização).
- Persistência, SQL/JPA e integrações: infrastructure (sem regras de negócio).
- Eventos de domínio: publicados pelo domain/application e propagados via
shared/core/EventBus.
- Benefícios: testabilidade (mocks em portas), baixo acoplamento, liberdade para trocar tecnologia (ex.: JPA por outro adapter) sem mudar regras.
- Abordagem “lean” aqui:
- Monólito modular com limites claros por módulo (bounded contexts), evitando microcamadas desnecessárias.
- Use cases enxutos injetados nos controllers; nada de "services" duplicados sem responsabilidade.
- Repositórios em memória onde didático (iniciativas) para simplificar, com caminho de migração para JPA.
- Mappers explícitos evitam vazar entidades JPA para o domínio.
Aplicação principal: GovernanceApplication (Spring Boot), com scan para modules, shared e config.
authmanagement: autenticação, usuários, JWT e papéis (roles)ideamanagement: ciclo de vida de ideias (entidades, votos, comentários, pareceres, governança)initiativemanagement: iniciativas oriundas de ideias aprovadas; métricas de impacto (tempo/custo/público)reporting: agregações e DTOs para dashboards/relatórios (engajamento, impacto, estatísticas)companymanagement: cadastro e consulta de empresas (onboarding)gamification: ranking/score de usuárioschallenges(experimental): desafios/temas de inovação (schema e endpoints iniciais)
- Java 21, Spring Boot 3.5.x
- Spring Web, Spring Data JPA (Hibernate), Validation
- Spring Security + JWT (cookies HTTPOnly), OAuth2 Client (extensível)
- MySQL 8.0 (DEV) com DataInitializer customizado
- Maven (build/test/coverage)
- Frontend SPA com React 18 via UMD + Babel Standalone
- Perfil ativo padrão:
dev(MySQL, Flyway) — verapplication-dev.properties - Perfil
prod: MySQL para produção — verapplication-prod.properties - Perfil
h2: memória (H2,create-drop) para experimentos — verapplication-h2.properties - Perfil
test: H2 para testes automatizados — verapplication-test.properties - Flyway: habilitado para migrações MySQL (migrations em
src/main/resources/db/migration/)
Variáveis de ambiente (Windows CMD):
set DB_NAME=governance_dev
set DB_USERNAME=root
set DB_PASSWORD=suasenha
set JWT_SECRET=umaChaveSecretaCom32+Caracteres
Opcional: set SERVER_PORT=8080
Principais DTOs: CreateIdeaDto, IdeaResponseDto, UpdateIdeaStatusDto, StatusOptionDto, etc.
Principais casos de uso (application/usecases):
- CreateIdea, UpdateIdeaStatus, ToggleVoteIdea ✅, CheckUserVote ✅
- AddPublicComment ✅, GetPublicCommentsQuery ✅
- GetAllIdeasQuery ✅, GetIdeaByIdQuery ✅
- AddIdeaFeedback (pareceres privados) ✅
- Votação: Sistema completo com validação de status
- Comentários Públicos: Visíveis no feed para todos
- Pareceres Privados: Visíveis apenas para autor e governança
- Gestão de Status: 8 status com regras de transição
- Filtros: Por status e pilar na governança
Principais controladores (presentation/controllers):
-
IdeaController(rota base/api/ideas)- POST
/api/ideas— criar ideia - GET
/api/ideas— feed público (executeForPublicFeed) - GET
/api/ideas/{id}— obter ideia por id - PATCH
/api/ideas/{id}/status— atualizar status - POST
/api/ideas/{id}/upvote— alternar voto - GET
/api/ideas/{id}/vote-status— verificar voto do usuário - GET
/api/ideas/{id}/feedbacks— comentários públicos - POST
/api/ideas/{id}/feedbacks— adicionar comentário público
- POST
-
MyIdeasController(rota base/api/my-ideas)- GET
/api/my-ideas— listar ideias do usuário autenticado - PUT
/api/my-ideas/{id}— atualizar ideia do autor - DELETE
/api/my-ideas/{id}— excluir ideia do autor - POST
/api/my-ideas/{id}/submit— submeter ideia para avaliação
- GET
-
GovernanceController(rota base/api/governance) ✅- GET
/api/governance/ideas?status=...&pillar=...— filtrar ideias - PUT
/api/governance/ideas/{ideaId}— atualizar status/prioridade/pilar - POST
/api/governance/ideas/{ideaId}/feedback— adicionar parecer privado - GET
/api/governance/ideas/{ideaId}/feedback— listar pareceres privados - GET
/api/governance/status-options— listar todos os status disponíveis - GET
/api/governance/status-transitions/{status}— transições válidas
- GET
Resposta padrão: ApiResponse<T> com { success, message, data }.
- Criação automática a partir de ideias aprovadas (evento de domínio)
- Guarda métricas de impacto (tempo/custo/público) usadas no relatório de impacto
- Implementação atual do repositório é em memória (propósito didático)
- Suporte inicial a desafios/temas de inovação
- Tabelas criadas via migration
V6__create_challenges_tables.sql
- JWT via cookies HTTPOnly: Tokens seguros enviados via cookies, não acessíveis via JavaScript
- JwtTokenProvider: Geração e validação de tokens com HS256
- SecurityConfig define rotas públicas e protegidas:
- Públicas:
/api/auth/**,/api/ideas/**,/api/dashboard/**, estáticos - Restritas à role GOVERNANCE:
/api/governance/**
- Públicas:
- Filtro JwtAuthenticationFilter: Carrega usuário do token (header ou cookie)
- CORS habilitado para
http://localhost:8080 - Validação de entrada: Sanitização contra log injection e XSS
Rotas sob /api/auth/** (liberadas para acesso público no SecurityConfig):
- POST
/api/auth/register— registra usuário/empresa - POST
/api/auth/login— autentica e retorna dados do usuário + cookie HTTPOnly - GET
/api/auth/me— dados do usuário autenticado - POST
/api/auth/logout— limpa cookie de autenticação
Perfis e banco:
- Profile ativo: DEV (
spring.profiles.active=dev) - MySQL com schema auto (create-drop) e DataInitializer customizado
- Dados de teste: 3 usuários (admin, gestor, normal) + 3 ideias de exemplo
- React 18 via UMD + Babel Standalone
- Scripts:
auth.js,dashboard.js,feed.js,my-ideas.js,governance.js,app.js - Funcionalidades Implementadas:
- Feed Público: Visualização, votação e comentários ✅
- Minhas Ideias: CRUD + visualização de pareceres da governança ✅
- Governança: Filtros, gestão de status e pareceres privados ✅
- Autenticação: Login/logout com cookies HTTPOnly ✅
- Estilos:
static/css/style.cssestatic/css/auth.css- Marcadores “=== MÓDULO ===” ajudam a navegar por seções (Feed, Comentários, Dashboard, Admin, Perfil, Ranking)
- Notas de truncamento multiline com
line-clampdocumentadas emstatic/css/governance-modern.css
- Controller:
DashboardController(móduloreporting), rota base/api/dashboard. - GET
/api/dashboard/stats— retorna estatísticas agregadas (exemplo mockado no controller). Público.
O sistema possui três dashboards principais que fornecem visões diferentes sobre o desempenho das ideias e iniciativas:
Métricas apresentadas:
- Contadores por Status: Total de ideias, submetidas, aprovadas, concluídas, rejeitadas, em progresso, em análise e arquivadas
- Taxas de Sucesso:
- Taxa de sucesso = (Ideias concluídas / Total de ideias) × 100
- Taxa de aprovação = (Ideias aprovadas / Ideias submetidas) × 100
- Engajamento: Total de votos, comentários e médias por ideia
Métricas apresentadas:
- Distribuição por Status: Percentual de ideias em cada status do funil
- Distribuição por Pilar: Percentual de ideias por pilar (Cultura, Ecossistema, P&D, Governança)
- Tendências Temporais: Submissões por mês e evolução temporal
- Top Performers:
- Top 5 ideias mais votadas
- Top 5 ideias mais comentadas
- Ranking de usuários por engajamento
Métricas apresentadas:
- Alcance: Parceiros externos, público externo e interno impactados
- Economia: Economia de custos e tempo, processos melhorados
- Satisfação: Melhorias na satisfação de funcionários e clientes
Cálculos de ROI (Return on Investment):
-
ROI Real (Valor Absoluto):
ROI Real = Ganhos Totais - Custos de ImplementaçãoOnde: Ganhos Totais = Economia de Custos + Valor da Satisfação
-
ROI Percentual:
ROI % = (ROI Real / Custos de Implementação) × 100 -
Período de Retorno (Payback):
Payback = Custos de Implementação / (Ganhos Mensais × 12)Resultado em anos
-
Valor Presente Líquido (NPV):
NPV = Ganhos Futuros / (1 + Taxa de Desconto)^Período - Custos IniciaisTaxa de desconto padrão: 10% ao ano
- Valor da Satisfação: Estimativa de R$ 1.000/ano por funcionário para cada 1% de melhoria
- Ganhos Totais: Soma da economia de custos + valor monetizado da satisfação
- ROI por Pilar: Média dos ROIs das iniciativas agrupadas por pilar de inovação
- Período: Anual, semestral, trimestral, mensal
- Pilar: Cultura, Ecossistema, P&D, Governança
- Status: Em progresso, concluídas, todas as ativas
Observações Importantes:
- Os cálculos de ROI consideram apenas iniciativas com métricas completas (custos antes/depois e custos de implementação)
- As métricas de satisfação são convertidas em valores monetários para inclusão nos cálculos financeiros
- O sistema calcula automaticamente o melhor pilar em performance baseado no ROI médio
- Todas as métricas são calculadas em tempo real a partir dos dados das iniciativas ativas
ROI Positivo (> 0%): A iniciativa gera mais valor do que custa
- ROI 100%: Para cada R$ 1,00 investido, retorna R$ 2,00 (dobra o investimento)
- ROI 200%: Para cada R$ 1,00 investido, retorna R$ 3,00 (triplica o investimento)
Payback Period: Tempo para recuperar o investimento
- Payback 1.0 ano: Investimento recuperado em 1 ano
- Payback 0.5 anos: Investimento recuperado em 6 meses
NPV Positivo: Projeto vale mais do que custa considerando o valor do dinheiro no tempo
Cenário 1 - Iniciativa de Automação:
- Custo antes: R$ 50.000/mês
- Custo depois: R$ 30.000/mês
- Custo implementação: R$ 100.000
- Economia mensal: R$ 20.000
- ROI: ((20.000 × 12) - 100.000) / 100.000 × 100 = 140%
- Payback: 100.000 / (20.000 × 12) = 0,42 anos (5 meses)
Cenário 2 - Melhoria de Processo:
- Custo implementação: R$ 25.000
- Economia anual: R$ 15.000
- Melhoria satisfação: 5% (equivalente a R$ 5.000/ano)
- Ganhos totais: R$ 20.000/ano
- ROI: (20.000 - 25.000) / 25.000 × 100 = -20% (prejuízo no primeiro ano)
- Payback: 25.000 / (20.000 / 12) = 1,5 anos (recuperação no segundo ano)
- Priorização de Ideias: Focar em ideias com maior potencial de ROI
- Alocação de Recursos: Direcionar investimentos para pilares com melhor performance
- Monitoramento de Performance: Acompanhar evolução das iniciativas ao longo do tempo
- Identificação de Oportunidades: Detectar padrões de sucesso para replicação
- Justificativa de Investimentos: Usar métricas para aprovação de novos projetos
Dashboard de Estatísticas Gerais:
GET /api/dashboard/stats
- Acesso: Público (não requer autenticação)
- Resposta: Contadores, taxas e métricas de engajamento
- Uso: Visão geral rápida do sistema
Dashboard de Engajamento:
GET /api/dashboard/engagement
- Acesso: Público (não requer autenticação)
- Resposta: Distribuições, tendências e top performers
- Uso: Análise de comportamento e participação dos usuários
Dashboard de Impacto:
GET /api/dashboard/impact
GET /api/dashboard/impact?period=annual&pillar=CULTURA
- Acesso: Público (não requer autenticação)
- Parâmetros de Filtro:
period:annual,semester,quarter,month,allpillar:CULTURA,ECOSSISTEMA,P&D,GOVERNANÇA,all
- Resposta: Métricas financeiras, ROI, payback e NPV
- Uso: Análise de retorno financeiro e impacto das iniciativas
Estatísticas do Perfil do Usuário:
GET /api/dashboard/user-profile/{userId}
- Acesso: Usuário autenticado (próprio perfil) ou role GOVERNANCE
- Resposta: Métricas pessoais, pontuação e ranking
- Uso: Acompanhamento individual de performance
Filtros Disponíveis no Frontend:
- Período: Seleção de janela temporal para análise
- Pilar: Foco em área específica de inovação
- Status: Filtro por estágio das iniciativas
- Atualização em Tempo Real: Dados são recalculados automaticamente
Exportação de Dados:
- Os dashboards podem ser integrados com ferramentas de BI externas
- Dados disponíveis em formato JSON para análise avançada
- Possibilidade de agendamento de relatórios automáticos
Alertas e Notificações:
- Sistema preparado para alertas de performance abaixo do esperado
- Notificações sobre iniciativas com ROI excepcional
- Acompanhamento de tendências e anomalias
O sistema inclui um módulo completo de gamificação que incentiva a participação e reconhece o desempenho dos usuários:
Pontos por Atividade:
- Ideia Aprovada: +10 pontos
- Ideia em Progresso: +15 pontos
- Ideia Concluída: +20 pontos
- Vitória em Desafio: +25 pontos
- Impacto de Público: +1 ponto por pessoa impactada
- Economia Gerada: +0.1 ponto por R$ 1,00 economizado
- Tempo Economizado: +0.05 pontos por hora economizada
Cálculo da Pontuação Total:
Pontuação Total = Pontos por Ideias + Pontos por Desafios + Pontos por Impacto + Pontos por Economia
Classificação por Pontuação:
- Novato: 0-9 pontos
- Iniciante: 10-24 pontos
- Intermediário: 25-49 pontos
- Especialista: 50-99 pontos
- Líder: 100+ pontos
Endpoint do Ranking:
GET /api/ranking
- Acesso: Público (não requer autenticação)
- Resposta: Top 10 usuários com maior pontuação
- Atualização: Automática a cada 30 segundos
- Ordenação: Por pontuação total decrescente
Métricas do Ranking:
- Posição no ranking geral
- Total de pontos acumulados
- Contagem de ideias por status
- Público impactado (interno e externo)
- Economia gerada (tempo e dinheiro)
- Vitórias em desafios
Estatísticas Pessoais:
- Endpoint:
GET /api/dashboard/user-profile/{userId} - Métricas: Performance individual, taxas de aprovação, ranking pessoal
- Uso: Acompanhamento de evolução pessoal e comparação com outros usuários
Impacto no Sistema:
- Usuários com maior pontuação têm maior visibilidade
- Sistema de badges e reconhecimento automático
- Integração com desafios e competições
- Histórico completo de contribuições e conquistas
- Engajamento: Sistema de pontos motiva participação contínua
- Reconhecimento: Ranking público destaca melhores contribuidores
- Competição Saudável: Comparação de performance entre usuários
- Desenvolvimento: Níveis mostram progresso e evolução
- Impacto Mensurável: Pontuação reflete valor real gerado para a organização
O sistema inclui um módulo de desafios que promove inovação através de competições temáticas:
Criação de Desafios:
- Acesso: Apenas usuários com role GOVERNANCE
- Endpoint:
POST /api/challenges - Campos: Título, descrição, prazo, recompensa em pontos
- Status: Ativo/Inativo, com controle de período
Submissão de Soluções:
- Acesso: Usuários autenticados
- Endpoint:
POST /api/challenges/{id}/submit - Campos: Título da solução, descrição detalhada, arquivos anexos
- Validação: Verificação de prazo e status do desafio
Seleção de Vencedores:
- Acesso: Apenas usuários com role GOVERNANCE
- Endpoint:
POST /api/challenges/submissions/{id}/winner - Processo: Avaliação das submissões e definição do vencedor
- Recompensa: 25 pontos automaticamente adicionados ao vencedor
Consulta Pública:
GET /api/challenges/active # Desafio ativo mais recente
GET /api/challenges # Lista de desafios ativos
Gestão (GOVERNANCE):
POST /api/challenges # Criar novo desafio
GET /api/challenges/{id}/submissions # Ver submissões de um desafio
POST /api/challenges/submissions/{id}/winner # Definir vencedor
Participação (USER):
POST /api/challenges/{id}/submit # Submeter solução
Métricas de Desafios:
- Contagem de desafios ativos e concluídos
- Taxa de participação por desafio
- Performance dos vencedores
- Impacto na pontuação geral dos usuários
Relatórios Específicos:
- Top usuários por vitórias em desafios
- Distribuição de soluções por tipo de desafio
- Evolução da participação ao longo do tempo
- ROI dos desafios em termos de engajamento
- Criação: Governança define tema, prazo e recompensa
- Divulgação: Sistema notifica usuários sobre novo desafio
- Participação: Usuários submetem soluções durante período ativo
- Avaliação: Governança analisa submissões e define vencedor
- Recompensa: Sistema atualiza pontuação automaticamente
- Análise: Métricas são incorporadas aos dashboards de engajamento
- Inovação Direcionada: Foco em temas específicos da organização
- Engajamento Temporário: Competições com prazo definido
- Reconhecimento Especial: Vitórias geram pontos extras
- Colaboração: Usuários trabalham em soluções para problemas reais
- Métricas de Sucesso: Medição do impacto das competições
O sistema captura e analisa métricas detalhadas de tempo e custo para fornecer uma visão completa do impacto das iniciativas:
Processamento Antes vs. Depois:
- Campo:
processTimeBeforeHourseprocessTimeAfterHours - Unidade: Horas por processo
- Cálculo: Economia de tempo = Tempo antes - Tempo depois
- Exemplo: Processo que levava 8 horas agora leva 2 horas = Economia de 6 horas
Análise de Produtividade:
- Processos Melhorados: Contagem de iniciativas com redução de tempo
- Média de Economia: Tempo total economizado / Número de iniciativas
- Impacto Mensal: Economia de tempo por período
Custos Operacionais:
- Campo:
costBeforeecostAfter - Unidade: Reais (R$) por período
- Cálculo: Economia de custos = Custo antes - Custo depois
- Exemplo: Processo que custava R$ 5.000/mês agora custa R$ 2.000/mês = Economia de R$ 3.000/mês
Custos de Implementação:
- Campo:
implementationCost - Unidade: Reais (R$) totais
- Uso: Base para cálculos de ROI e payback
- Inclusão: Desenvolvimento, treinamento, infraestrutura
Custos de Manutenção:
- Campo:
maintenanceCost - Unidade: Reais (R$) por ano
- Uso: Cálculo de custo total de propriedade (TCO)
- Consideração: Custos recorrentes após implementação
ROI Baseado em Tempo:
Valor do Tempo = Horas Economizadas × Valor Hora Interna
ROI Tempo = (Valor do Tempo - Custos de Implementação) / Custos de Implementação × 100
ROI Baseado em Custo:
ROI Custo = (Economia Anual - Custos de Implementação) / Custos de Implementação × 100
ROI Combinado:
ROI Total = (Economia Total - Custos Totais) / Custos Totais × 100
Onde: Economia Total = Economia de Custos + Valor do Tempo + Valor da Satisfação
Melhorias de Satisfação:
- Funcionários:
employeeSatisfactionImprovement(0-100%) - Clientes:
customerSatisfactionImprovement(0-100%) - Valor Monetário: R$ 1.000/ano por 1% de melhoria
- Inclusão: Incorporado nos cálculos de ROI
Cálculo do Valor da Satisfação:
Valor Satisfação = (Melhoria Funcionários + Melhoria Clientes) × R$ 1.000
Distribuição de Economias:
- Por Pilar: Agrupamento de iniciativas por área de inovação
- Métricas: Economia total, ROI médio, número de iniciativas
- Identificação: Melhor pilar em performance financeira
Top Iniciativas por Pilar:
- Maior Economia: Iniciativas com maior redução de custos
- Maior Impacto: Iniciativas com maior número de pessoas impactadas
- Melhor ROI: Iniciativas com maior retorno sobre investimento
Evolução Mensal:
- Economias: Acumulado de economias por mês
- Impacto: Número de pessoas impactadas por período
- Tendências: Identificação de padrões sazonais
Projeções:
- Payback: Tempo para recuperar investimento
- NPV: Valor presente líquido considerando inflação
- Cenários: Análise de diferentes cenários de implementação
- Justificativa de Investimentos: ROI e payback para aprovação de projetos
- Priorização: Foco em iniciativas com maior impacto financeiro
- Alocação de Recursos: Direcionamento para pilares mais rentáveis
- Monitoramento: Acompanhamento de performance ao longo do tempo
- Comunicação: Relatórios executivos com métricas claras e objetivas
Frontend (JavaScript):
src/main/resources/static/js/dashboard.js- Lógica principal dos dashboardssrc/main/resources/static/css/dashboard.css- Estilos do dashboard principalsrc/main/resources/static/css/impact-dashboard.css- Estilos específicos de impactosrc/main/resources/static/css/engagement-dashboard.css- Estilos de engajamento
Backend (Java):
src/main/java/com/innovation/governance/modules/reporting/- Módulo de relatóriosDashboardController.java- Endpoints da APIGetImpactMetrics.java- Cálculos de ROI e métricas financeirasGetEngagementMetrics.java- Métricas de engajamento e participação
Adicionar Novas Métricas:
- DTO: Criar novo campo em
ImpactMetricsDtoouEngagementMetricsDto - Use Case: Implementar cálculo no caso de uso correspondente
- Controller: Expor novo campo via API
- Frontend: Adicionar visualização no dashboard
Exemplo de Nova Métrica:
// Em ImpactMetricsDto
public record ImpactMetricsDto(
// ... campos existentes ...
Double newMetric, // Nova métrica
// ... outros campos ...
) {}
// Em GetImpactMetrics.java
Double newMetric = calculateNewMetric(initiatives);
return new ImpactMetricsDto(..., newMetric, ...);Filtros Disponíveis:
- Período:
annual,semester,quarter,month,all - Pilar:
CULTURA,ECOSSISTEMA,P&D,GOVERNANÇA,all - Status:
IN_PROGRESS,COMPLETED,all
Adicionar Novo Filtro:
// Em GetImpactMetrics.java
public ImpactMetricsDto execute(String period, String pillar, String newFilter) {
// Aplicar novo filtro
List<Initiative> filtered = applyNewFilter(initiatives, newFilter);
// ... resto da lógica
}
// Em DashboardController.java
@GetMapping("/impact")
public ResponseEntity<ApiResponse<ImpactMetricsDto>> getImpactMetrics(
@RequestParam(required = false) String period,
@RequestParam(required = false) String pillar,
@RequestParam(required = false) String newFilter) {
// ... implementação
}Biblioteca de Gráficos:
- Chart.js: Gráficos responsivos e interativos
- Tipos Suportados: Barras, linha, pizza, radar, área
- Personalização: Cores, estilos, animações, tooltips
Adicionar Novo Gráfico:
// Em dashboard.js
const createNewChart = () => {
const ctx = document.getElementById('newChart');
if (ctx) {
const chart = new Chart(ctx, {
type: 'bar', // ou 'line', 'pie', etc.
data: {
labels: ['Label 1', 'Label 2'],
datasets: [{
label: 'Nova Métrica',
data: [value1, value2],
backgroundColor: 'rgba(59, 130, 246, 0.2)',
borderColor: 'rgba(59, 130, 246, 1)'
}]
},
options: {
responsive: true,
plugins: {
title: { display: true, text: 'Título do Gráfico' }
}
}
});
}
};Sistema de Notificações:
- Performance: Alertas para métricas abaixo do esperado
- ROI: Notificações para iniciativas com retorno excepcional
- Engajamento: Alertas para queda na participação
Configuração de Thresholds:
// Em GetImpactMetrics.java
private void checkAlertThresholds(ImpactMetricsDto metrics) {
if (metrics.roiPercentage() < 50.0) {
// Disparar alerta de ROI baixo
alertService.sendLowRoiAlert(metrics);
}
if (metrics.totalCostSavings() < 10000.0) {
// Disparar alerta de economia baixa
alertService.sendLowSavingsAlert(metrics);
}
}Formatos de Exportação:
- JSON: Para integração com ferramentas externas
- CSV: Para análise em Excel ou BI
- PDF: Para relatórios executivos
Integração com BI:
- Power BI: Conectores para APIs REST
- Tableau: Extração de dados via endpoints
- Qlik: Integração com base de dados MySQL
Configuração de Agendamento:
// Em DashboardController.java
@Scheduled(cron = "0 0 9 * * MON") // Toda segunda às 9h
@GetMapping("/weekly-report")
public ResponseEntity<ApiResponse<WeeklyReportDto>> getWeeklyReport() {
// Gerar relatório semanal
WeeklyReportDto report = generateWeeklyReport();
return ResponseEntity.ok(ApiResponse.success("Relatório semanal gerado", report));
}Métricas de Performance:
- Tempo de Resposta: < 2 segundos para dashboards
- Cache: Dados em memória para consultas frequentes
- Índices: Otimização de consultas MySQL
Configuração de Cache:
// Em GetImpactMetrics.java
@Cacheable("impact-metrics")
public ImpactMetricsDto execute(String period, String pillar) {
// ... implementação com cache automático
}
// Em application.properties
spring.cache.type=caffeine
spring.cache.cache-names=impact-metrics,engagement-metrics
spring.cache.caffeine.spec=maximumSize=100,expireAfterWrite=5mControle de Acesso:
- Dashboards Públicos: Estatísticas gerais e engajamento
- Dashboards Protegidos: Impacto detalhado e perfil do usuário
- Role-based Access: GOVERNANCE para métricas avançadas
Configuração de Segurança:
// Em SecurityConfig.java
.antMatchers("/api/dashboard/stats", "/api/dashboard/engagement").permitAll()
.antMatchers("/api/dashboard/impact", "/api/dashboard/user/**").authenticated()
.antMatchers("/api/dashboard/admin/**").hasRole("GOVERNANCE")Dashboard Lento:
- Sintoma: Carregamento demorado (> 5 segundos)
- Causa: Consultas complexas ou falta de índices
- Solução:
-- Adicionar índices para consultas frequentes CREATE INDEX idx_ideas_status ON ideas(status); CREATE INDEX idx_ideas_pillar ON ideas(pillar); CREATE INDEX idx_initiatives_status ON initiatives(status); CREATE INDEX idx_user_scores_points ON user_scores(total_points DESC);
Métricas Não Atualizadas:
- Sintoma: Dados desatualizados ou incorretos
- Causa: Cache expirado ou dados inconsistentes
- Solução:
// Limpar cache manualmente @CacheEvict("impact-metrics") public void refreshMetrics() { // Forçar recálculo }
ROI Incorreto:
- Sintoma: Valores de ROI inconsistentes ou negativos
- Causa: Dados de custo ou economia incorretos
- Solução:
// Validar dados antes do cálculo private void validateMetrics(Initiative initiative) { if (initiative.getImplementationCost() <= 0) { throw new IllegalArgumentException("Custo de implementação deve ser positivo"); } if (initiative.getCostBefore() <= initiative.getCostAfter()) { throw new IllegalArgumentException("Custo antes deve ser maior que custo depois"); } }
Divisão por Zero:
- Sintoma: Erro de cálculo ou valores infinitos
- Causa: Denominador zero em cálculos de taxa
- Solução:
// Proteção contra divisão por zero Double successRate = totalIdeas > 0 ? (completedIdeas.doubleValue() / totalIdeas.doubleValue()) * 100 : 0.0;
Gráficos Não Carregam:
- Sintoma: Área de gráfico vazia ou erro no console
- Causa: Chart.js não carregado ou dados inválidos
- Solução:
// Verificar se Chart.js está disponível if (typeof Chart === 'undefined') { console.error('Chart.js não carregado'); return; } // Validar dados antes de criar gráfico if (!data || data.length === 0) { console.warn('Dados vazios para gráfico'); return; }
Filtros Não Funcionam:
- Sintoma: Seleção de filtros não atualiza dados
- Causa: Eventos não disparados ou API não chamada
- Solução:
// Verificar se filtros estão funcionando const handleFilterChange = (filterType, value) => { console.log('Filtro alterado:', filterType, value); setSelectedFilters(prev => ({ ...prev, [filterType]: value })); fetchMetrics(); // Forçar atualização };
Endpoints Não Respondem:
- Sintoma: Erro 404 ou timeout nas requisições
- Causa: Rotas não mapeadas ou controller não registrado
- Solução:
// Verificar se controller está sendo escaneado @ComponentScan(basePackages = "com.innovation.governance.modules.reporting") @SpringBootApplication public class GovernanceApplication { // ... }
Erro de CORS:
- Sintoma: Requisições bloqueadas pelo navegador
- Causa: Configuração de CORS incorreta
- Solução:
// Em SecurityConfig.java @Bean public CorsConfigurationSource corsConfigurationSource() { CorsConfiguration configuration = new CorsConfiguration(); configuration.setAllowedOrigins(Arrays.asList("http://localhost:8080")); configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE")); configuration.setAllowedHeaders(Arrays.asList("*")); UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); source.registerCorsConfiguration("/**", configuration); return source; }
Dados Inconsistentes:
- Sintoma: Métricas que não fazem sentido
- Causa: Dados corrompidos ou transações incompletas
- Solução:
-- Verificar integridade dos dados SELECT COUNT(*) as total_ideas FROM ideas; SELECT COUNT(*) as total_initiatives FROM initiatives; SELECT COUNT(*) as total_scores FROM user_scores; -- Verificar relacionamentos SELECT i.id, i.title, i.status FROM ideas i LEFT JOIN initiatives init ON i.id = init.idea_id WHERE init.id IS NULL AND i.status = 'APPROVED';
Problemas de Conectividade:
- Sintoma: Erro de conexão com banco
- Causa: Pool de conexões esgotado ou timeout
- Solução:
# Em application.properties spring.datasource.hikari.maximum-pool-size=20 spring.datasource.hikari.connection-timeout=30000 spring.datasource.hikari.idle-timeout=600000 spring.datasource.hikari.max-lifetime=1800000
Habilitar Logs Detalhados:
# Em application.properties
logging.level.com.innovation.governance.modules.reporting=DEBUG
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACEMonitoramento de Performance:
// Em GetImpactMetrics.java
@Slf4j
public class GetImpactMetrics {
public ImpactMetricsDto execute(String period, String pillar) {
long startTime = System.currentTimeMillis();
try {
// ... implementação ...
long executionTime = System.currentTimeMillis() - startTime;
log.info("Métricas de impacto calculadas em {}ms", executionTime);
return result;
} catch (Exception e) {
log.error("Erro ao calcular métricas de impacto", e);
throw e;
}
}
}Antes de Reportar Problema:
- ✅ Verificar logs da aplicação
- ✅ Confirmar dados no banco de dados
- ✅ Testar endpoint diretamente (Postman/curl)
- ✅ Verificar console do navegador
- ✅ Confirmar versão da aplicação
- ✅ Verificar configurações de ambiente
Informações para Suporte:
- Versão da aplicação
- Logs de erro completos
- Dados de exemplo que causam problema
- Passos para reproduzir
- Configurações de ambiente
- Screenshots da interface (se aplicável)
Dashboard Executivo Avançado:
- KPIs Personalizáveis: Métricas customizáveis por usuário/role
- Alertas Inteligentes: Machine learning para detectar anomalias
- Relatórios Automáticos: Agendamento e distribuição automática
- Exportação Avançada: PDF, Excel, PowerPoint com templates
Análise Preditiva:
- Tendências Futuras: Projeções baseadas em dados históricos
- ROI Forecasting: Estimativas de retorno para novas iniciativas
- Análise de Riscos: Identificação de fatores de risco
- Cenários "What-If": Simulação de diferentes estratégias
Integração Avançada:
- APIs Externas: Conexão com sistemas ERP, CRM, BI
- Webhooks: Notificações em tempo real para sistemas externos
- SSO Corporativo: Integração com Active Directory, LDAP
- Mobile App: Aplicativo nativo para iOS e Android
Cache Inteligente:
- Redis: Cache distribuído para alta disponibilidade
- Cache por Usuário: Dados personalizados em cache
- Invalidação Inteligente: Cache atualizado automaticamente
- Compressão: Redução de tamanho de dados transferidos
Otimização de Banco:
- Índices Avançados: Otimização automática de consultas
- Partitioning: Divisão de tabelas grandes por período
- Read Replicas: Separação de leitura e escrita
- Connection Pooling: Gerenciamento avançado de conexões
Monitoramento em Tempo Real:
- Métricas de Sistema: CPU, memória, disco, rede
- APM: Application Performance Monitoring
- Alertas Proativos: Notificações antes de problemas
- Dashboards de Infraestrutura: Saúde do sistema
Sistema de Conquistas:
- Badges Dinâmicos: Conquistas baseadas em métricas
- Níveis Avançados: Sistema de evolução mais complexo
- Competições em Equipe: Rankings por departamento/equipe
- Recompensas Reais: Integração com sistemas de benefícios
Análise de Comportamento:
- Padrões de Uso: Identificação de usuários ativos
- Segmentação: Agrupamento por comportamento
- Recomendações: Sugestões personalizadas de ações
- Engajamento Predictivo: Identificação de usuários em risco de abandono
Análise de Sentimento:
- Comentários: Análise automática de feedback
- Tendências: Identificação de temas emergentes
- Satisfação: Medição automática de satisfação
- Insights: Descoberta automática de insights
Otimização Automática:
- ROI Prediction: Estimativas automáticas de retorno
- Resource Allocation: Sugestões de alocação de recursos
- Risk Assessment: Avaliação automática de riscos
- Performance Tuning: Otimização automática de parâmetros
Chatbot Inteligente:
- Suporte Automático: Respostas a perguntas frequentes
- Análise de Dados: Consultas em linguagem natural
- Recomendações: Sugestões baseadas em contexto
- Integração: Conexão com sistemas de suporte
Interface Adaptativa:
- Responsivo Avançado: Adaptação automática a dispositivos
- Temas Personalizáveis: Cores e estilos customizáveis
- Modo Escuro: Interface adaptável à preferência do usuário
- Acessibilidade: Suporte completo a WCAG 2.1
Interatividade Avançada:
- Drag & Drop: Reorganização de dashboards
- Zoom e Pan: Navegação avançada em gráficos
- Filtros Visuais: Seleção visual de parâmetros
- Animações: Transições suaves e feedback visual
Personalização:
- Dashboards Customizáveis: Layout personalizado por usuário
- Widgets: Componentes reutilizáveis e configuráveis
- Templates: Modelos pré-definidos para diferentes perfis
- Favoritos: Métricas e gráficos favoritos do usuário
Ferramentas de BI:
- Power BI: Conectores nativos e templates
- Tableau: Integração via APIs e webhooks
- Qlik: Conexão direta com base de dados
- Looker: Modelos de dados compartilhados
Sistemas Corporativos:
- ERP: Integração com SAP, Oracle, Microsoft Dynamics
- CRM: Conexão com Salesforce, HubSpot, Pipedrive
- HR: Integração com sistemas de recursos humanos
- Financeiro: Conexão com sistemas contábeis
Ferramentas de Produtividade:
- Slack: Notificações e integração com canais
- Microsoft Teams: Tabs e bots integrados
- Email: Relatórios automáticos por email
- Calendário: Agendamento de reuniões de revisão
Auditoria Avançada:
- Logs Detalhados: Rastreamento completo de ações
- Compliance: Conformidade com regulamentações
- Backup Automático: Cópia de segurança automática
- Recovery: Recuperação rápida de desastres
Segurança Reforçada:
- 2FA: Autenticação de dois fatores
- SSO: Single Sign-On corporativo
- Encryption: Criptografia em repouso e trânsito
- Vulnerability Scanning: Verificação automática de vulnerabilidades
Fase 1 (3 meses):
- Cache Redis e otimizações de performance
- Sistema de alertas inteligentes
- Melhorias de UX/UI básicas
Fase 2 (6 meses):
- Análise preditiva básica
- Sistema de conquistas avançado
- Integração com ferramentas de BI
Fase 3 (12 meses):
- Machine learning para insights
- Chatbot inteligente
- Integração com sistemas corporativos
Fase 4 (18 meses):
- IA avançada para otimização
- Análise de comportamento
- Plataforma de extensibilidade
Como Contribuir:
- Issues: Reportar bugs e sugerir melhorias
- Pull Requests: Contribuir com código
- Documentação: Melhorar esta documentação
- Testes: Reportar problemas encontrados
Canais de Comunicação:
- GitHub Issues: Para bugs e feature requests
- Discord/Slack: Para discussões da comunidade
- Email: Para suporte técnico
- Documentação: Para guias e tutoriais
Padrões de Contribuição:
- Código: Seguir padrões de codificação estabelecidos
- Testes: Incluir testes para novas funcionalidades
- Documentação: Atualizar documentação relacionada
- Review: Passar por code review antes do merge
✅ Métricas e Indicadores: Explicação detalhada de todos os KPIs apresentados ✅ Cálculos de ROI: Fórmulas completas com exemplos práticos ✅ Sistema de Gamificação: Pontuação, ranking e níveis dos usuários ✅ Sistema de Desafios: Competições e métricas de participação ✅ Métricas de Tempo e Custo: Análise financeira e de produtividade ✅ Configuração e Personalização: Como adaptar e estender os dashboards ✅ Troubleshooting: Soluções para problemas comuns ✅ Roadmap Futuro: Funcionalidades planejadas e melhorias
-
📊 Dashboard de Estatísticas Gerais (
/api/dashboard/stats)- Contadores por status, taxas de sucesso e engajamento
-
🎯 Dashboard de Engajamento (
/api/dashboard/engagement)- Distribuições, tendências e top performers
-
💰 Dashboard de Impacto (
/api/dashboard/impact)- ROI, payback, NPV e métricas financeiras
-
👤 Estatísticas Pessoais (
/api/dashboard/user-profile/{userId})- Performance individual e ranking pessoal
- ROI Real: (Ganhos - Custos) / Custos × 100
- Payback Period: Tempo para recuperar investimento
- NPV: Valor presente líquido com taxa de desconto
- Valor da Satisfação: Monetização de melhorias de satisfação
- ROI por Pilar: Performance financeira por área de inovação
- Pontuação: 10-20 pontos por ideia (aprovada, em progresso, concluída)
- Níveis: Novato → Iniciante → Intermediário → Especialista → Líder
- Ranking: Top 10 usuários com atualização automática
- Desafios: +25 pontos por vitória em competições
- Para Desenvolvedores: Seções de configuração e troubleshooting
- Para Usuários Finais: Explicação das métricas e interpretação
- Para Gestores: Fórmulas de ROI e uso para tomada de decisão
- Para Administradores: Configuração de segurança e performance
- Implementar Cache: Adicionar Redis para melhor performance
- Sistema de Alertas: Configurar notificações automáticas
- Exportação de Dados: Implementar relatórios em PDF/Excel
- Integração BI: Conectar com ferramentas como Power BI
- Mobile App: Desenvolver aplicativo para dispositivos móveis
- Documentação: Este README e arquivos relacionados
- Código: Repositório GitHub com exemplos implementados
- Issues: GitHub Issues para bugs e melhorias
- Comunidade: Discussões e suporte da equipe
📚 Esta documentação é um recurso vivo e será atualizada conforme o sistema evolui. Para sugestões de melhoria ou correções, abra uma issue no repositório.
Tabela initiatives (Métricas de Impacto):
CREATE TABLE initiatives (
id VARCHAR(36) PRIMARY KEY,
idea_id VARCHAR(36) NOT NULL,
status VARCHAR(20) NOT NULL,
pillar VARCHAR(50),
-- Métricas de Tempo
process_time_before_hours INTEGER,
process_time_after_hours INTEGER,
-- Métricas de Custo
cost_before DECIMAL(15,2),
cost_after DECIMAL(15,2),
implementation_cost DECIMAL(15,2),
maintenance_cost DECIMAL(15,2),
-- Métricas de Público
external_partners TEXT,
external_public INTEGER,
internal_public INTEGER,
-- Métricas de Satisfação
employee_satisfaction_improvement DECIMAL(5,2),
customer_satisfaction_improvement DECIMAL(5,2),
-- Metadados
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (idea_id) REFERENCES ideas(id)
);Tabela user_scores (Gamificação):
CREATE TABLE user_scores (
user_id VARCHAR(36) PRIMARY KEY,
total_points INTEGER DEFAULT 0,
-- Contadores de Ideias
approved_ideas INTEGER DEFAULT 0,
in_progress_ideas INTEGER DEFAULT 0,
completed_ideas INTEGER DEFAULT 0,
-- Métricas de Impacto
external_audience_count INTEGER DEFAULT 0,
internal_audience_count INTEGER DEFAULT 0,
hours_improved DECIMAL(10,2) DEFAULT 0.0,
money_saved DECIMAL(15,2) DEFAULT 0.0,
-- Desafios
challenge_wins INTEGER DEFAULT 0,
-- Metadados
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);Iniciativa de Automação:
{
"id": "550e8400-e29b-41d4-a716-446655440001",
"idea_id": "550e8400-e29b-41d4-a716-446655440010",
"status": "COMPLETED",
"pillar": "P&D",
"process_time_before_hours": 40,
"process_time_after_hours": 8,
"cost_before": 5000.00,
"cost_after": 2000.00,
"implementation_cost": 15000.00,
"maintenance_cost": 500.00,
"external_partners": "Empresa A, Empresa B",
"external_public": 100,
"internal_public": 25,
"employee_satisfaction_improvement": 15.5,
"customer_satisfaction_improvement": 8.2
}Cálculo de ROI para esta Iniciativa:
Economia de Tempo: 40 - 8 = 32 horas/mês
Economia de Custo: 5000 - 2000 = R$ 3.000/mês
Economia Anual: R$ 36.000
Valor da Satisfação: (15.5 + 8.2) × R$ 1.000 = R$ 23.700/ano
Ganhos Totais: R$ 36.000 + R$ 23.700 = R$ 59.700/ano
ROI Real: R$ 59.700 - R$ 15.000 = R$ 44.700
ROI %: (R$ 44.700 / R$ 15.000) × 100 = 298%
Payback: R$ 15.000 / (R$ 59.700 / 12) = 3.0 meses
Dashboard de Estatísticas (/api/dashboard/stats):
{
"success": true,
"message": "Estatísticas carregadas com sucesso",
"data": {
"totalIdeas": 150,
"submittedIdeas": 45,
"approvedIdeas": 28,
"completedIdeas": 15,
"rejectedIdeas": 8,
"inProgressIdeas": 13,
"underReviewIdeas": 4,
"archivedIdeas": 37,
"successRate": 10.0,
"approvalRate": 62.2,
"totalVotes": 342,
"totalComments": 89,
"averageVotesPerIdea": 2,
"averageCommentsPerIdea": 1
}
}Dashboard de Impacto (/api/dashboard/impact):
{
"success": true,
"message": "Métricas de impacto carregadas com sucesso",
"data": {
"externalPartners": 12,
"externalPublic": 1250,
"internalPublic": 89,
"totalCostSavings": 125000.00,
"totalTimeSavings": 480.5,
"processesImproved": 8,
"totalImplementationCost": 45000.00,
"totalMaintenanceCost": 2500.00,
"averageEmployeeSatisfactionImprovement": 12.3,
"averageCustomerSatisfactionImprovement": 7.8,
"realRoi": 80000.00,
"roiPercentage": 177.8,
"paybackPeriod": 0.4,
"netPresentValue": 75000.00,
"savingsByMonth": {
"Jan": 0.0, "Fev": 0.0, "Mar": 15000.0,
"Abr": 18000.0, "Mai": 22000.0, "Jun": 25000.0,
"Jul": 28000.0, "Ago": 30000.0
},
"savingsByPillar": {
"CULTURA": 25000.0,
"ECOSSISTEMA": 35000.0,
"P&D": 45000.0,
"GOVERNANÇA": 20000.0
},
"roiByPillar": {
"CULTURA": 125.0,
"ECOSSISTEMA": 175.0,
"P&D": 225.0,
"GOVERNANÇA": 100.0
},
"bestPerformingPillar": "P&D",
"averageSavingsPerInitiative": 15625.00
}
}Ranking de Usuários (/api/ranking):
{
"success": true,
"message": "Ranking obtido com sucesso",
"data": [
{
"position": 1,
"userId": "550e8400-e29b-41d4-a716-446655440009",
"userName": "João Pedro Oliveira",
"totalPoints": 185,
"approvedIdeas": 3,
"inProgressIdeas": 2,
"completedIdeas": 1,
"externalAudienceCount": 150,
"internalAudienceCount": 25,
"hoursImproved": 120.5,
"moneySaved": 45000.00,
"challengeWins": 2
},
{
"position": 2,
"userId": "550e8400-e29b-41d4-a716-446655440010",
"userName": "Carlos Lima",
"totalPoints": 142,
"approvedIdeas": 2,
"inProgressIdeas": 1,
"completedIdeas": 1,
"externalAudienceCount": 95,
"internalAudienceCount": 18,
"hoursImproved": 85.0,
"moneySaved": 32000.00,
"challengeWins": 1
}
]
}Filtro por Período:
GET /api/dashboard/impact?period=annual
GET /api/dashboard/impact?period=semester
GET /api/dashboard/impact?period=quarter
GET /api/dashboard/impact?period=month
Filtro por Pilar:
GET /api/dashboard/impact?pillar=CULTURA
GET /api/dashboard/impact?pillar=ECOSSISTEMA
GET /api/dashboard/impact?pillar=P&D
GET /api/dashboard/impact?pillar=GOVERNANÇA
Filtros Combinados:
GET /api/dashboard/impact?period=annual&pillar=P&D
GET /api/dashboard/impact?period=semester&pillar=CULTURA
Usuário com 3 Ideias Aprovadas, 2 em Progresso, 1 Concluída:
Pontos por Ideias Aprovadas: 3 × 10 = 30 pontos
Pontos por Ideias em Progresso: 2 × 15 = 30 pontos
Pontos por Ideias Concluídas: 1 × 20 = 20 pontos
Total de Pontos: 30 + 30 + 20 = 80 pontos
Nível: Especialista (50-99 pontos)
Usuário Vencedor de 2 Desafios:
Pontos por Desafios: 2 × 25 = 50 pontos
Pontos por Ideias: 80 pontos
Total de Pontos: 50 + 80 = 130 pontos
Nível: Líder (100+ pontos)
Configuração Redis:
# Em application.properties
spring.cache.type=redis
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.timeout=2000ms
spring.cache.redis.time-to-live=300000
spring.cache.redis.cache-null-values=falseConfiguração Caffeine (Local):
# Em application.properties
spring.cache.type=caffeine
spring.cache.cache-names=impact-metrics,engagement-metrics,user-stats
spring.cache.caffeine.spec=maximumSize=100,expireAfterWrite=5m,expireAfterAccess=10mTop 5 Iniciativas por ROI:
SELECT
i.id,
i.pillar,
((i.cost_before - i.cost_after) - i.implementation_cost) / i.implementation_cost * 100 as roi_percentage,
(i.cost_before - i.cost_after) as cost_savings,
i.implementation_cost
FROM initiatives i
WHERE i.status IN ('IN_PROGRESS', 'COMPLETED')
AND i.implementation_cost > 0
AND i.cost_before > i.cost_after
ORDER BY roi_percentage DESC
LIMIT 5;Métricas por Pilar:
SELECT
i.pillar,
COUNT(*) as total_initiatives,
AVG((i.cost_before - i.cost_after)) as avg_cost_savings,
AVG((i.process_time_before_hours - i.process_time_after_hours)) as avg_time_savings,
SUM(i.implementation_cost) as total_investment
FROM initiatives i
WHERE i.status IN ('IN_PROGRESS', 'COMPLETED')
GROUP BY i.pillar
ORDER BY avg_cost_savings DESC;Evolução Mensal de Economias:
SELECT
DATE_FORMAT(i.created_at, '%Y-%m') as month,
SUM(i.cost_before - i.cost_after) as monthly_savings,
COUNT(*) as initiatives_count
FROM initiatives i
WHERE i.status IN ('IN_PROGRESS', 'COMPLETED')
AND i.cost_before > i.cost_after
GROUP BY DATE_FORMAT(i.created_at, '%Y-%m')
ORDER BY month;Pré-requisitos:
- JDK 21+
- Maven 3.8+
- MySQL 8.0 (local ou Docker)
Passos:
-
Configurar MySQL:
- Executar script:
setup_database.sql(cria databasegovernance_dev) - Configurar variáveis (opcional):
DB_USERNAME,DB_PASSWORD - Padrão:
rootsem senha
- Executar script:
-
Build/Run (DEV):
mvn clean spring-boot:run
- App em: http://localhost:8080
- Migrações Flyway executadas automaticamente
- Dados de exemplo carregados via migração
Executar com outro perfil:
# Produção mvn clean spring-boot:run -Dspring-boot.run.profiles=prod # H2 (memória) mvn clean spring-boot:run -Dspring-boot.run.profiles=h2
-
Testes (110 testes passando):
mvn test
Usuários de teste (carregados por DataInitializer) ✅:
- Admin:
admin@inovafeed.com/ senhapassword(roles: ADMIN, GOVERNANCE, USER) - Gestor:
joao.oliveira@inovafeed.com/ senhapassword(roles: GOVERNANCE, USER) - Usuário:
carlos.lima@inovafeed.com/ senhapassword(role: USER)
Ideias de exemplo ✅:
- Automatização do Onboarding (APPROVED)
- Dashboard de Vendas IA (IN_PROGRESS)
- Horário 100% Flexível (SUBMITTED)
- DTOs de entrada validados com
jakarta.validation. - Sanitização de logs e validação de UUIDs em controladores.
- Respostas consistentes via
ApiResponse<T>. - Casos de uso isolam regras da camada web e persistência.
src/main/resources
├─ application.properties (ativa perfil dev)
├─ application-dev.properties (H2, JWT, logging)
└─ static/ (index.html, css, js)
src/test/java
└─ ... testes de integração/unidade (ex.: IdeaFeedIntegrationTest)
- Especificações no arquivo
RELATORIOS.md:RELATORIO-ENGAJAMENTO-01: métricas de submissões, votos, comentários, funil por status/pilar, tops e tendênciasRELATORIO-IMPACTO-01: economia (custo/tempo), público impactado, processos melhorados, por pilar e tops; inclui notas de ROI e payback
- Parâmetros como
valor_hora_internaeinvestimentodevem ser informados para cálculos financeiros.
- Este repositório segue monólito modular: mantenha mudanças limitadas ao módulo correto.
- Nomes de DTOs e campos são sensíveis à ordem (ex.:
IdeaResponseDtopossui 17 argumentos; veja o arquivo para evitar quebras de compilação). SecurityConfigjá libera rotas públicas do feed; alterações de segurança devem preservar acesso a arquivos estáticos e/api/ideas/**.- Para novas features de governança, prefira adicionar DTOs e casos de uso no módulo
ideamanagemente expor endpoints emGovernanceController.
- Empacotar frontend com build (Vite/CRA) para produção
- Migrações Flyway/Liquibase (diretório
db/migrationjá existe) - Implementar chat entre usuários
- Disponibilizar acessibilidade
- Implementar sistema de notificações com integração ao e-mail corporativo
- Aprimorar onboarding e cadastro de novos usuários(SSO, códigos chaves e etc.)
- SPA sem bundler (Vite/CRA) — adequado para protótipos didáticos
- Cache de segundo nível desabilitado em desenvolvimento
É ISSO VALEU GALERA ABRAÇOS