Changelog
Histórico de versões e atualizações do Sistema de Chamados
v1.1.1-beta.1
08/12/2025
Adicionado
-
**DataTables implementado no Dashboard**: Tabela de "Chamados Recentes" agora utiliza DataTables com todas as funcionalidades
-
Filtros customizados no dashboard: Status e Prioridade
-
Busca global integrada na tabela de chamados do dashboard
-
Paginação dinâmica com 15 registros por página
-
Carregamento via API (`/api/tickets?per_page=100`) para melhor performance
-
Indicador visual de carregamento durante o fetch dos dados
-
Badges coloridas consistentes para status e prioridade (mesma implementação de `/tickets`)
-
Coluna adicional "Data/Hora" com formatação pt-BR completa (dia/mês/ano hora:minuto:segundo)
-
Coluna "Ações" com botão de visualização (ícone de olho)
-
Botão "Limpar Filtros" para resetar filtros customizados
-
Ordenação por ID decrescente por padrão (tickets mais recentes primeiro)
Alterado
-
Tabela estática de "Chamados Recentes" substituída por DataTable dinâmico
-
Limite de exibição aumentado de 5 para 100 chamados (com paginação client-side)
-
Layout da tabela padronizado com `/tickets` para consistência visual
-
Remoção de dados server-side da view (agora usa apenas API)
Técnico
-
Atualização de dependências do Composer (Laravel Framework 12.38.1 → 12.40.2, Symfony 7.3.x → 7.4.0)
-
Remoção do `barryvdh/laravel-ide-helper` que causava conflitos
-
39 pacotes atualizados, 4 removidos
-
Helper global `window.initDataTable()` utilizado para inicialização consistente
-
Filtros implementados com JavaScript puro (sem dependências adicionais)
Corrigido
-
Erro "Class BladeUI\Heroicons\BladeHeroiconsServiceProvider not found" resolvido
-
Cache do bootstrap limpo para evitar conflitos de autoload
v1.1.0-beta.2
28/11/2025
Corrigido
-
**HOTFIX CRÍTICO**: Selects de lojas não exibiam todas as opções disponíveis devido à paginação padrão (20 registros)
-
Corrigido carregamento de lojas em `/users/create` ao selecionar "Gerente de Loja"
-
Corrigido carregamento de lojas em `/users/:id/edit`
-
Corrigido filtro de lojas em `/tickets` (listagem geral)
-
Corrigido filtro de lojas em `/tickets/my` (meus tickets)
-
Corrigido filtro de lojas em `/reports` (relatório principal)
-
Corrigido filtro de lojas em `/reports/by-store` (relatório por loja)
-
Corrigido filtro de lojas em `/reports/stores-performance` (performance de lojas)
-
Corrigido endpoint em `/regions` (estava usando `?all=` em vez de `?all=true`)
Alterado
-
Todas as chamadas para `/api/stores` em selects agora usam o parâmetro `?all=true`
-
Substituído hardcoded `per_page=1000` por `all=true` (solução mais robusta e escalável)
Técnico
-
8 arquivos blade modificados para garantir carregamento completo de lojas em selects
-
Endpoint `/api/stores?all=true` já existia no `StoreController::index()`, apenas não estava sendo utilizado
-
Solução definitiva que escala independentemente do número de lojas cadastradas
v1.1.0-beta.1
18/11/2025 às 21:31:51
Adicionado
-
Campo obrigatório "Telefone p/ contato" em criação e edição de chamados com máscara automática para telefones brasileiros
-
Suporte a telefones fixos: (XX) XXXX-XXXX e celulares: (XX) XXXXX-XXXX (com 9 dígitos)
-
Validação que aceita apenas entrada numérica com posicionamento automático do cursor durante a digitação
-
Sistema de identificação de chamados melhorado: exibição de ID com prefixo # (ex: #123) em todas as tabelas de listagem
-
Ordenação numérica inteligente na coluna ID: 1, 2, 3...10, 11 (ao invés de ordenação alfabética)
-
Nas páginas de detalhes e edição: exibição combinada "#ID • TICKET_NUMBER" (exemplo: "#123 • TKT-20251118-456789")
-
Filtro de lojas aprimorado na página de chamados (`/tickets`) com carregamento de todas as lojas disponíveis (per_page=1000)
-
Formato de exibição no filtro de lojas: "Código - Nome da Loja" (ex: "1 - Loja Centro")
-
Ordenação numérica por código da loja (1, 2, 3...10, 11) com suporte a códigos numéricos e alfanuméricos
-
Tradução completa do DataTable para Português Brasileiro (mensagens de tabela vazia, paginação, filtros, controles)
Alterado
-
Telefone de contato agora é obrigatório para criação de novos chamados (breaking change: todos os novos chamados devem incluir telefone de contato)
-
Chamados existentes mantêm compatibilidade (campo nullable no banco)
-
Identificação de chamados em tabelas alterada de `ticket_number` para `#ID` (simplifica visualização e melhora performance de busca)
-
`ticket_number` mantido visível apenas nas páginas de detalhes
-
Ordenação de lojas no filtro alterada de ordem alfabética (1, 10, 11, 2, 3...) para ordem numérica (1, 2, 3...10, 11...)
Corrigido
-
Permissões de edição para técnicos de Suporte TI: corrigido erro 403 "Você não tem permissão para editar este ticket"
-
Técnicos agora podem editar chamados atribuídos a eles e clicar no botão "Iniciar" para mudar status para "Em Progresso"
-
Técnicos podem adicionar comentários, anexos e resolver chamados atribuídos
-
Administradores mantêm permissão total de edição (chamados fechados continuam bloqueados para todos, resolvidos só por admin)
-
Ordenação numérica do filtro de lojas corrigida (implementado parse inteligente para códigos numéricos)
Técnico
-
Nova migration: `2025_11_18_222453_add_contact_phone_to_tickets_table.php` (coluna `contact_phone VARCHAR(20) NULLABLE` após `description`)
-
`Ticket::$fillable`: campo `contact_phone` adicionado ao modelo
-
`Ticket::canBeEditedBy()`: lógica modificada para verificar técnicos atribuídos via `$this->technicians()->where('user_id', $user->id)->exists()`
-
`TicketController::store()`: validação `'contact_phone' => 'required|string|max:20'`
-
`TicketController::update()`: validação `'contact_phone' => 'string|max:20'`
-
JavaScript: nova função `formatBrazilianPhone(value)` para formatação automática de telefones brasileiros
-
JavaScript: nova função `setupPhoneMask()` com listeners de input e keypress para máscara
-
DataTable `columnDefs`: render customizado para ordenação numérica da coluna ID (parse com `parseInt`)
-
DataTable: configuração completa de tradução pt-BR (mensagens, paginação, filtros)
-
Views atualizadas: `create.blade.php`, `edit.blade.php`, `show.blade.php`, `index.blade.php`, `dashboard.blade.php`, `technician/dashboard.blade.php`, `stores/my-store.blade.php`, `stores/show.blade.php`, `reports/sla-compliance.blade.php`
v1.0.7-beta.1
15/11/2025 às 00:18:04
Adicionado
-
Visualização de chamados não atribuídos para técnicos de Suporte TI na página de chamados
-
Endpoint API `POST /api/tickets/{id}/claim` para auto-atribuição de chamados por técnicos
-
Coluna "Técnico" na tabela de chamados (`/tickets`) exibindo nome de usuário do e-mail (parte antes do @)
-
Filtro por técnico (dropdown) na página de chamados mostrando nome completo dos técnicos
-
Filtro "Chamados sem vínculos" (checkbox) para visualizar apenas tickets não atribuídos
-
Modal de confirmação ao clicar em "Iniciar" em chamados não atribuídos
-
Botão "Iniciar" para técnicos em chamados não atribuídos, permitindo auto-atribuição
-
Coluna "Cód. Loja" na tabela de chamados (`/tickets`) para identificação da loja
Alterado
-
Técnicos de Suporte TI agora podem visualizar chamados sem técnicos atribuídos
-
Comportamento do botão "Iniciar": ao ser clicado por técnico em ticket não atribuído, atribui automaticamente o chamado ao técnico e inicia o chamado (status muda para "Em Progresso")
-
Exibição de "-" na coluna "Técnico" quando não há técnico atribuído ao chamado
-
Mensagem de confirmação ao assumir chamados: "Você tem certeza que quer resolver esse chamado? Se você clicar em 'Sim', o chamado será atribuído à você e será iniciado automaticamente."
Corrigido
-
Técnicos não conseguiam visualizar chamados disponíveis para pegar sem intervenção de administrador
-
Coluna de data/hora agora exibe data completa com timestamp na visualização do dashboard
Técnico
-
Modificado `TicketController::index()` para incluir tickets não atribuídos na query de Suporte TI
-
Adicionado método `claimTicket()` no `TicketController` com validações de role, status e atribuição
-
Atualizado `User::canAccessTicket()` para permitir visualização de tickets não atribuídos por técnicos
-
Modificado `Ticket::canBeEditedBy()` para restringir edições apenas a administradores
-
Implementadas funções JavaScript `getEmailUsername()` e `getTechnicianEmail()` para formatação de e-mail
-
Adicionada função `loadTechnicians()` para popular dropdown de filtro de técnicos
-
Criado modal de confirmação `claimConfirmModal` com handlers de confirmação/cancelamento
-
Implementada função `claimAndStartTicket()` para chamada assíncrona ao endpoint de auto-atribuição
-
Lógica de filtragem client-side estendida para suportar filtros de técnico e chamados não atribuídos
-
Rota API `POST /api/tickets/{id}/claim` adicionada em `routes/api.php`
-
Sistema de notificações integrado ao processo de auto-atribuição de chamados
-
Registro automático no histórico do ticket ao ser auto-atribuído por técnico
v1.0.6-beta.1
11/11/2025
Adicionado
-
Implementação completa do DataTables na página de chamados (`/tickets`)
-
Filtros customizados integrados com DataTables: Status, Prioridade, Loja
-
Filtros de data/hora com precisão de minutos (campos `datetime-local`)
-
Botão "Limpar Filtros" para resetar todos os filtros de uma vez
-
Tela de carregamento (loading overlay) full-screen na página de chamados
-
Coluna "Data/Hora" exibe data e hora completa até os segundos (formato PT-BR)
Alterado
-
Campo "Data" renomeado para "Data/Hora" na tabela de chamados
-
Filtros de data agora permitem seleção de data E hora (anteriormente apenas data)
-
Paginação da página de chamados migrada de server-side para client-side (DataTables)
-
Formatação de data atualizada de `dd/MM/yyyy` para `dd/MM/yyyy, HH:mm:ss`
-
Filtros trabalham em conjunto com a busca global do DataTables
-
Removido sistema de paginação manual em favor do DataTables
Técnico
-
Helper global `window.initDataTable()` utilizado para consistência com `/users` e `/reports/scoreboard`
-
Lógica de filtragem client-side com armazenamento de dados originais em `allTicketsData`
-
Event listeners em todos os filtros (`change`) para atualização instantânea da tabela
-
Configuração DataTables: 30 registros/página, PT-BR, responsive, ordenação por ID decrescente
-
Filtro de loja oculto automaticamente para usuários com role `manager` (context-aware)
v1.0.5-beta.1
08/11/2025
Adicionado
-
Implementação do DataTables na página de usuários (`/users`) com busca global e ordenação
-
Campo de busca DataTables para filtrar rankings na página de scoreboard (`/reports/scoreboard`)
-
Nova tela "Vínculos de Lojas" (`/store-assignments`) exclusiva para administradores
-
Modal de edição inline para lojas e gerentes na tela de vínculos
-
Tabela pivot `region_user` para relacionamentos flexíveis entre regiões e usuários
Alterado
-
Tabela de usuários agora utiliza DataTables com configuração PT-BR
-
Interface de busca melhorada no ranking de performance com hint visual
-
Removida paginação manual da página de usuários em favor do DataTables
-
Removidas colunas "Loja" e "Região" da tabela de usuários (movidas para tela de vínculos)
-
Arquitetura de relacionamento entre regiões e supervisores refatorada para suportar múltiplos roles
-
Tela de vínculos de lojas agora usa paginação client-side (carrega todos os dados de uma vez)
-
Loading overlay centralizado e fixo na tela de vínculos para melhor UX
Técnico
-
Helper global `window.initDataTable()` utilizado para consistência entre páginas
-
Configuração padrão: 30 registros/página, PT-BR, responsive, ordenação personalizável
-
Ordenação desabilitada na coluna de ações da tabela de usuários
-
Criada migration `create_region_user_table` para tabela pivot com suporte a role_type
-
Criada migration `migrate_existing_region_relationships_to_pivot_table` para migrar dados legacy
-
Criada migration `remove_legacy_region_supervisor_columns` para limpar colunas antigas
-
Models `Region` e `User` atualizados com relacionamento `belongsToMany`
-
Controllers `StoreAssignmentController` e `RegionController` adaptados para usar pivot table
-
Sistema de vínculos agora é extensível para futuros roles (coordenadores, analistas, etc.)
Corrigido
-
Supervisores regionais agora são corretamente vinculados às regiões através da tabela pivot
-
Alterações em supervisores são automaticamente refletidas em todas as telas do sistema
v1.0.4-beta.1
31/10/2025 às 05:22:47
Alterado
-
Página de changelog agora exibe data e hora completa (dd/mm/YYYY às HH:mm:ss) ao invés de apenas data
-
Select "Loja" em `/reports` agora oculta opção "Todas as lojas" para gerentes e supervisores regionais
Corrigido
-
Gerentes não podem mais selecionar "Todas as lojas" na tela de relatórios (agora veem apenas sua loja)
-
Supervisores regionais não podem mais selecionar "Todas as lojas" na tela de relatórios (agora veem apenas lojas de sua região)
-
Permissões de visualização de lojas corrigidas para garantir escopo correto por perfil
Técnico
-
Array estático `$gitDates` implementado na página de changelog para exibir timestamps dos commits Git
-
Formato de data no changelog usando Carbon: `d/m/Y \à\s H:i:s`
v1.0.3-beta.1
31/10/2025 às 05:02:00
Adicionado
-
Página pública de Changelog acessível via `/changelog`
-
Link "(ver Changelog)" nos footers do sistema (login e autenticado) apontando para a página de changelog
-
Visualização formatada e estilizada do arquivo CHANGELOG.md
Alterado
-
CSS do body removido `overflow: hidden` para permitir scroll em páginas longas
-
Página de changelog com design limpo e responsivo
-
Background uniforme (cinza claro/escuro) sem gradientes complexos
Corrigido
-
Problema de scroll em páginas longas (changelog e outras)
-
Primeiro item das listas no changelog exibindo traço "-" indesejado
-
Background inconsistente na página de changelog durante scroll
Técnico
-
Parser PHP para converter CHANGELOG.md em HTML formatado
-
Renderização dinâmica com seções categorizadas (Added, Changed, Fixed, Technical, Notes)
-
Sistema de cores por categoria com ícones FontAwesome
v1.0.2-beta.1
31/10/2025 às 04:21:15
Adicionado
-
Sistema completo de alternância de tema (dark/light mode) com persistência
-
Botão de alternância de tema na página de login (canto superior direito)
-
Botão de alternância de tema no sistema autenticado (barra de navegação)
-
Coluna `theme_preference` na tabela `users` para salvar preferência do usuário
-
Endpoint API `POST /api/user/theme-preference` para persistir tema escolhido
-
Footer com copyright "© 2025 Drogacenter - Todos os direitos reservados" e versão do sistema
-
Versão do sistema exibida nos footers (login e sistema autenticado)
-
Logo clicável no sistema autenticado que redireciona para o dashboard
Alterado
-
Rota principal alterada de `/dashboard` para `/` (URL mais limpa)
-
Rota `/dashboard` agora redireciona para `/`
-
Todos os links internos do menu atualizado para usar `/` como dashboard
-
Padronização de ícones do menu lateral com largura fixa (`w-4` - 16px) para alinhamento consistente
-
Tema padrão definido como "light" (claro) em vez de seguir preferência do sistema operacional
Corrigido
-
Alinhamento de texto no menu lateral devido a ícones de tamanhos variados
-
Tema dark sendo aplicado por padrão quando deveria ser light
-
Persistência de tema entre sessões (localStorage + banco de dados)
-
Sincronização de tema entre dispositivos para usuários autenticados
-
Verificação de autenticação antes de acessar `theme_preference` do usuário
Técnico
-
Tailwind CSS com `darkMode: 'class'` configurado
-
Alpine.js para gerenciamento de estado do tema no frontend
-
`window.themeState` global para sincronização entre componentes
-
Script de detecção de tema executado antes do carregamento do CSS para evitar flash
-
Migration: `2025_10_31_064534_add_theme_preference_to_users_table.php`
-
Playwright configurado para testes automatizados de UI (ambiente de desenvolvimento)
v1.0.1-beta.1
31/10/2025 às 04:17:36
Adicionado
-
Tutorial em accordion (oculto por padrão) nas páginas "Análise de Performance" e "Ranking de Performance" com layout idêntico ao /admin/score-settings
-
Suporte a intervalo de datas customizado (start_date/end_date) no endpoint e frontend do Ranking de Performance
-
Configuração global de DataTables com padding e espaçamento consistente em todas as tabelas
-
DataTables aplicado à tabela detalhada da página "Análise de Performance"
Alterado
-
Renomeado relatório "Performance" para "Análise de Performance" para evitar confusão com "Ranking de Performance"
- Rota web: `/reports/performance` → `/reports/analysis`
- Rota API: `/api/reports/performance` → `/api/reports/analysis`
- Controller: método `performanceReport()` → `analysisReport()`
- View: `performance.blade.php` → `analysis.blade.php`
-
Substituído seletor de período (7/30/90 dias) por intervalo de datas customizado no Ranking de Performance
-
Ajustado endpoint `/api/reports/scoreboard` para aceitar start_date e end_date, usando whereBetween para consultas
-
Layout de filtros do scoreboard ajustado (campo Período ocupa 2 colunas no grid)
-
Tutoriais reescritos com linguagem para leigos, cores diferenciadas, ícones e avisos importantes em amarelo
Corrigido
-
Espaçamento entre painéis de tutorial e bordas dos cards (adicionado padding uniforme)
-
Controles DataTables ("Exibir" e "Buscar") não mais grudados nas bordas (DOM customizado com padding horizontal)
-
Layout de filtros empilhados na tela de Ranking após adição de campos de data (grid responsivo corrigido)
-
Score médio exibindo 39.0 quando não há chamados (filtro de entidades sem tickets aplicado no controller)
Técnico
-
Global DataTables DOM: `<"dt-top ... px-4 sm:px-6 pt-4" l f> r t <"dt-bottom ... px-4 sm:px-6 pb-4" i p>`
-
ScoreService: integrado nos relatórios e scoreboard para cálculo centralizado de scores
-
Helper global `window.initDataTable()` para inicialização consistente de DataTables
v1.0.0-beta.1
31/10/2025 às 01:37:26
Adicionado
-
Iniciada a linha de release `1.0.0-beta.1` a partir da branch `mvp`.
-
Estrutura de versionamento SemVer com branch `release/1.0.0-beta.1`.
-
Arquivo `VERSION` para rastrear versão atual no repositório.
-
Este `CHANGELOG.md` para documentar mudanças.
Alterado
-
Preparação para consolidação de regras de segurança e UI do MVP para a fase Beta.
Notas
-
Releases serão marcadas com tags: `v1.0.0-beta.1`, `v1.0.0-rc.1`, etc.
-
Próximos passos: estabilizar APIs, fechar escopo e promover para RC.