DevTools
O plugin DevTools (devtools) reúne, em uma única tela, um conjunto de ferramentas voltadas exclusivamente ao desenvolvimento e manutenção do ACCELERO: geração de licenças, geração de código (classes e plugins), geração de bundles JS/CSS e preloads, e conferência do dicionário de traduções.
Esta é uma ferramenta de uso interno da IONGRADE, destinada à equipe de desenvolvimento. Ela não faz parte do produto entregue ao cliente e não deve ser exposta a operadores. O acesso à tela e às ações (gerar/aplicar licença, gerar código, regenerar bundles) afeta diretamente o funcionamento da instância — use apenas em ambientes controlados e com conhecimento do que cada ferramenta faz.
Recurso disponibilizado como plugin (devtools), instalado e habilitado pela equipe técnica da IONGRADE apenas em ambientes de desenvolvimento ou manutenção. Não há dicionário de tradução nem rótulos voltados ao cliente — toda a interface é em linguagem de desenvolvimento.
Versão atual do plugin: 0.0.14 — compatível com ACCELERO 2.16.0, 2.16.1, 2.16.2 e 2.16.3 (conforme manifest.json).
O que o plugin faz
Com o plugin ativo, um item DevTools é adicionado ao menu (ícone Linux) apontando para /devtools. A tela inicial apresenta seis cartões, cada um abrindo uma ferramenta:
| Ferramenta | O que faz |
|---|---|
| License generator | Monta, visualiza e aplica localmente a licença da instância (quantitativos, recursos e módulos) |
| Class generator | Gera o código-base de uma entidade (classe base/concreta, views de list/edit, permissões e rotas) a partir de uma tabela do banco |
| Plugin generator | Empacota uma pasta de plugin em um .zip criptografado pronto para distribuição |
| Bundles & preloads | Regenera os bundles de JS/CSS e os scripts de preload da aplicação |
| Dictionary | Aponta traduções faltantes e órfãs nos idiomas adicionais e exporta o dicionário em CSV |
| Câmara Fria - Simulador | Simula as regras de tempo de permanência e descanso da Câmara Fria usando as políticas reais do backend, sem gravar eventos |

License generator
Caminho de acesso: DevTools > License generator (/devtools/licensegenerator)
Ferramenta para montar a licença da instância. A tela é pré-carregada com a licença atual da instalação (facility, quantitativos e módulos ativos) e organizada em seções colapsáveis.

Ao abrir o License generator, a tela mostra um modal decorativo ("WareZ KEYgEN ...") e toca uma música. Clique no texto do modal para fechá-lo e liberar o formulário.
Seção Geral
| Campo | Descrição |
|---|---|
| Facility | Identificador da instalação. Compõe a chave de criptografia da licença |
| Versão | Plano da licença: starter, plus, platinum, showroom ou eco |
Seção Quantitativos
Define os limites numéricos da instância, agrupados em:
- Geral — Operadores, Operadores simultâneos, Categorias, Faixas horárias, Cartões ativos, Logs, Storage.
- Controladores — Controladores, Indium.
- Recursos — Campos configuráveis, DirectPass, AutoTeller.
- Integrações — MorphoWave, ZKTeco, Beward, Hikvision, Hikvision LPR, Dahua, ControlID.
Seção Módulos
Liga/desliga os módulos da instância, agrupados em Geral, Aplicativos / sistemas, Recursos, Avançado e Integrações. Exemplos de módulos: Offline / on-premises, ECO, Default, QRCode, Logs avançados, QRCode por e-mail, AppToHome, QI Solution, Telegram, Veículos, Passes, Créditos, Dupla custódia, Escorts, Multi-tenant, Synapsis, API, Custom CSS, I/O, entre outros.
Os módulos exibidos refletem os módulos suportados pela versão do ACCELERO. Consulte o núcleo (plugins/accelero) quando precisar confirmar o efeito de um módulo específico.
Botões
| Botão | Função |
|---|---|
| Pegar licença string | Gera e exibe a string criptografada da licença montada, sem aplicá-la. Útil para copiar e usar em outro ambiente |
| Deploy local | Aplica a licença gerada diretamente na instância atual (grava na configuração license e limpa o cache de configuração) |
O botão Deploy local sobrescreve a licença vigente da instalação atual. A ação roda no contexto do usuário de desenvolvimento (ACCELERO_DEV_USER). Confirme o ambiente antes de aplicar.
A string da licença é gerada cifrando os dados com a chave derivada de facility + salt geral da instância. A licença inclui um bloco hash com data de geração, facility, hostname e um nonce aleatório.
Class generator
Caminho de acesso: DevTools > Class generator (/devtools/classgenerator)
Gera o esqueleto de código de uma nova entidade a partir de uma tabela existente no banco. A ferramenta lê a estrutura da tabela e produz os artefatos padrão do ACCELERO. É uma página avulsa, sem o menu e o cabeçalho do ACCELERO.

Campos de entrada
| Campo | Descrição |
|---|---|
| Tabela | Nome da tabela do banco usada como base da entidade |
| Classname | Nome da classe a ser gerada |
| Class alias | Alias da classe |
| Prefix | Prefixo dos campos/arquivos gerados |
| PKey | Chave primária da entidade |
| Deploy base path | Caminho-base onde os arquivos serão gravados ao fazer deploy de um artefato |
Saídas geradas
Ao clicar em Gerar classe, a ferramenta produz, em blocos colapsáveis:
| Bloco | Conteúdo |
|---|---|
| Classe base | Classe ...Base.php com getters/setters e validações |
| Classe concreta | Classe concreta que estende a base |
| HTML de list | View de listagem (...List.view.html) |
| HTML de edit | View de edição (...Edit.view.html) |
| Permissões | Query SQL de permissões da entidade |
| Routes | Arquivo de rotas da entidade |
Cada bloco tem uma ação de deploy que grava o respectivo artefato no Deploy base path informado (a classe base em src/..., as views em views/, as rotas em config/routes/).
As ações de deploy do Class generator escrevem arquivos diretamente no caminho informado. Use apenas em ambiente de desenvolvimento e confira o Deploy base path.
Plugin generator
Caminho de acesso: DevTools > Plugin generator (/devtools/plugingenerator)
Empacota uma pasta de plugin em um arquivo .zip criptografado pronto para distribuição/instalação.

| Campo | Descrição |
|---|---|
| Nome do plugin | Nome usado no pacote gerado |
| Path | Caminho no servidor da pasta do plugin a ser empacotada |
Ao clicar em Gerar plugin, a ferramenta:
- Lê a
versiondomanifest.jsondo plugin para nomear o arquivo (<nome>_v<versão>.zip). Semmanifest.jsonou sem versão, a geração é recusada. - Seleciona só os arquivos de execução do plugin (ver abaixo).
- Cifra o
.zipcom a chave de criptografia de plugins do ACCELERO. - Retorna um link Download para o pacote final, com a quantidade de arquivos e o tamanho (ex.:
Download · 5 arquivos · 2 KB).
Arquivos que ficam de fora do pacote: em qualquer nível, .git/, node_modules/, arquivos ocultos (.env*, .gitignore etc.), *.md e *.zip; na raiz do plugin, as pastas tests/, testes/, docs/, dist/, tools/, dev/, frontend/, contract/, vendor/, changelog/ e dbmigration/ e os arquivos composer.json, composer.lock, package.json, package-lock.json, phpunit.xml(.dist) e phpstan.neon(.dist). O plugin pode ajustar essa regra com um arquivo .pluginignore na raiz, no estilo do .gitignore (!padrão traz de volta algo excluído, ex.: !vendor/ para um plugin que distribui as próprias dependências).
Pasta inexistente, manifest.json sem versão, arquivo sem permissão de leitura para o servidor web ou falha ao cifrar aparecem como mensagem de erro na própria tela, e nenhum pacote é gerado.
Bundles & preloads
Caminho de acesso: DevTools > Bundles & preloads (/devtools/bundles)
Regenera os artefatos estáticos da aplicação.

| Botão | Função |
|---|---|
| Gerar bundles JS/CSS | Regera os bundles de JavaScript e CSS, atualiza a assinatura MD5 do carregador de bundles e o dicionário JS (idiomas pt_BR e en_US). Roda em segundo plano e notifica o usuário ("Bundles gerados!") ao concluir |
| Gerar preload scripts | Regera os scripts de preload da aplicação |
A geração de bundles JS/CSS é disparada como job assíncrono — a tela retorna imediatamente e a conclusão chega por notificação ao operador que disparou a ação.
Dictionary
Caminho de acesso: DevTools > Dictionary (/devtools/dictionarychecker)
Verifica a consistência das traduções nos idiomas adicionais — por padrão en_US e it_IT — comparando-os com o dicionário de referência pt_BR.
No origin/master do plugin, /devtools/dictionarychecker responde só com o erro Too few arguments to function DevTools\DictionaryChecker\DictionaryCheckerController::__construct(). O controller importa Dictionary\DictionaryHelper, mas a classe do plugin é DevTools\Dictionary\DictionaryHelper, e a injeção de dependência não consegue montá-lo. A exportação do CSV usa o mesmo controller e também falha.
Tela do Dictionary checker com as seções Missing translations e Dangling translations e o botão de exportação do CSV (depende da correção do import acima).
| Seção | Conteúdo |
|---|---|
| Missing translations | Tokens existentes no pt_BR mas sem tradução no idioma adicional (lista token + texto pt_BR; mostra "ALL GOOD!" quando não há pendências) |
| Dangling translations | Traduções órfãs — presentes no idioma adicional mas sem token correspondente no pt_BR |
Exportação CSV
A ferramenta gera um arquivo accelero_dictionary.csv com as colunas dos idiomas pt_BR, en_US e it_IT, para revisão ou tradução em massa.
Câmara Fria - Simulador
Caminho de acesso: DevTools > Câmara Fria - Simulador (/devtools/camarafria-sim)
Simula, passo a passo, as regras da Câmara Fria do ION Guard sem gravar eventos nem mexer em pessoas. Cada ação chama o backend (POST /devtools/camarafria-sim/step), que aplica as políticas reais de descanso (ContinuousRestPolicy ou AccumulatedRestPolicy) sobre um estado mantido na própria tela. A tela e a rota exigem operador logado com perfil de administrador.

| Bloco | Conteúdo |
|---|---|
| Configuração | Tempo máx. na câmara (s) (padrão 6000), Período de descanso (s) (padrão 1200), Regra de contagem (contínuo ou acumulado) e Resetar ao descansar. Aplicar & Reset zera a simulação |
| Cenário do cliente | Rodar cenário executa uma sequência pronta de entradas e saídas |
| Estado atual | Relógio virtual, status (dentro/fora), total na câmara, banco de horas fora, última entrada e última saída |
| Ações | Tentar entrar, Sair, Verificar acesso; + avançar, +1 min, +10 min avançam só o relógio virtual; Reset estado |
| Linha do tempo e Estado raw (JSON) | Histórico das decisões e o estado bruto devolvido pelo backend |
Casos de uso
Aplicar uma licença em ambiente de desenvolvimento
- Acesse
DevTools > License generator. - Ajuste Facility, Versão, quantitativos e módulos desejados.
- Clique em Pegar licença string para copiar a chave, ou em Deploy local para aplicar na instância atual.
Gerar o esqueleto de uma nova entidade
- Crie a tabela no banco.
- Em
DevTools > Class generator, informe Tabela, Classname, Class alias, Prefix, PKey e Deploy base path. - Clique em Gerar classe e revise os blocos gerados.
- Faça o deploy de cada artefato (classe, views, rotas) para o caminho do projeto.
Empacotar um plugin para distribuição
- Em
DevTools > Plugin generator, informe Nome do plugin e Path da pasta do plugin. - Gere o pacote e use o link Download — o
.zipjá sai criptografado e versionado pelomanifest.json.
Conferir traduções antes de um release
- Acesse
DevTools > Dictionary. - Resolva os tokens listados em Missing translations e remova as entradas órfãs de Dangling translations.
- Exporte o CSV para tradução em massa, se necessário.
Boas práticas
- Ambiente correto: use o DevTools apenas em ambientes de desenvolvimento/manutenção. Deploy local (licença) e os deploys do Class generator alteram a instância e o sistema de arquivos.
- Confira o Path/Deploy base path: as ferramentas de geração de código e de plugin escrevem arquivos no caminho informado — um path errado pode sobrescrever arquivos.
- Regere bundles após alterar JS/CSS: mudanças em assets só refletem após Gerar bundles JS/CSS; lembre que a ação roda em segundo plano.
- Não exponha ao cliente: mantenha o plugin desinstalado/desabilitado em instâncias de produção entregues a clientes.
Troubleshooting
O item DevTools não aparece no menu
Possíveis causas:
- Plugin
devtoolsnão instalado ou não habilitado. - Versão do ACCELERO fora da faixa de compatibilidade (
2.16.0a2.16.3).
Solução: confirme a instalação do plugin e a versão do ACCELERO.
Alterações de JS/CSS não refletem na interface
Possíveis causas:
- Bundles não foram regerados após a alteração.
Solução: acesse DevTools > Bundles & preloads, clique em Gerar bundles JS/CSS e aguarde a notificação "Bundles gerados!".
Deploy de classe/plugin falha
Possíveis causas:
- Deploy base path / Path inexistente ou sem permissão de escrita.
Solução: verifique se o diretório existe e tem permissão de escrita pelo processo do ACCELERO.
Integração com outros módulos
- Licenciamento: o License generator atua sobre a configuração
licenseda instância. Para o conceito de licenciamento e configuração de licenças, ver Ozone — Configuração de licenças e LicenseUpdater. - Preloading e bundles: complementa o fluxo de Preloading e de inclusão de arquivos/classes JS.
- Padrão de código: os artefatos do Class generator seguem o Controller padrão, a ORM e as Rotas HTTP do ACCELERO.
- Ambiente de dev: ver Setup do ambiente de dev.