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.

O formato deste changelog é baseado em Keep a Changelog e este projeto adere ao Versionamento Semântico.

© 2025 Drogacenter - Todos os direitos reservados