AssetHub Documentação

Perguntas frequentes

Posso rodar o AssetHub no plano Hostinger Single mais barato?

Sim — o AssetHub é totalmente compatível com o Hostinger Single (~$2,99/mês). O Single inclui PHP 8.3, MySQL, Cron Jobs nativos e SSL gratuito — tudo o que o AssetHub precisa. Sem SSH, sem Composer, sem linha de comando. Veja a seção Configuração Hostinger para o guia passo a passo.

Preciso de conhecimentos técnicos para instalar?

Não. O instalador via web cuida de tudo: verificação de requisitos, configuração do banco, migrações e criação da conta admin. Basta enviar os arquivos, acessar /install no navegador e seguir o assistente.

Como funcionam os e-mails agendados (alertas de garantia/manutenção)?

O AssetHub usa o scheduler do Laravel. Você configura apenas um cron job que roda a cada minuto, e o Laravel despacha internamente cada tarefa no horário correto (diário 08:00, mensal, etc.). No Hostinger, configure em hPanel → Avançado → Cron Jobs. Se seu host não tiver cron, use a URL Cron do app com o serviço gratuito cron-job.org.

Quais métodos de depreciação são suportados?

Três métodos: Linha reta (depreciação anual constante), Saldo decrescente (acelerada, comum para impostos) e Unidades de produção (baseada em uso, para equipamentos de fabricação). Os valores dos ativos são atualizados automaticamente no dia 1º de cada mês.

O leitor de QR funciona em celulares?

Sim — ele usa a câmera do navegador via html5-qrcode e funciona em qualquer navegador moderno de celular/tablet/desktop. O único requisito é HTTPS. O Hostinger fornece SSL gratuito via Let's Encrypt, então funciona de imediato.

Posso adicionar campos próprios sem programar?

Sim. Admin → Campos personalizados permite adicionar atributos ilimitados (texto, número, data, seleção, área de texto, arquivo, caixa de seleção), limitá-los a categorias específicas, marcá-los como obrigatórios e reordená-los arrastando — tudo pela interface.

Quantos idiomas o AssetHub suporta?

10 idiomas prontos: inglês, vietnamita, espanhol, francês, alemão, chinês, japonês, português (BR), russo e árabe (com suporte RTL completo). As traduções são editáveis em Admin → Translations.

Visão geral

AssetHub é um sistema completo de gestão de ativos de TI construído com Laravel 11, Vue 3 e Tailwind CSS. Ele ajuda organizações a rastrear o ciclo de vida do equipamento, gerenciar atribuições, agendar manutenção, calcular depreciação e gerar relatórios detalhados.

Rastreamento por QR

Geração automática de códigos QR para cada ativo. Escaneie com qualquer câmera de navegador.

Depreciação

3 métodos: linha reta, saldo decrescente, unidades de produção.

Campos personalizados

Adicione atributos personalizados ilimitados — texto, data, seleção, arquivo, caixa.

Webhooks

15 tipos de eventos com assinatura HMAC e auto-retry.

Log de auditoria

Cada mudança registrada com visualizador de diff completo.

Relatórios

8 relatórios com gráficos, exportação para Excel e PDF.

Requisitos do servidor

  • PHP 8.2 ou superior
  • MySQL 5.7+ ou MariaDB 10.3+
  • Composer 2.x
  • Node.js 18+ e npm 9+
  • Servidor web: Apache ou Nginx

Extensões PHP requeridas

  • OpenSSL, PDO, PDO_MySQL, Mbstring, Tokenizer, XML, Ctype, JSON, GD, Fileinfo

Espaço em disco

~ 200 MB mínimo. Reserve espaço extra para fotos de ativos e anexos de documentos.

Instalação

Opção A — Instalador web (Recomendado)

  1. Envie os arquivos do projeto para seu servidor web.
  2. Aponte o document root do domínio para public/.
  3. Defina permissões: storage/ e bootstrap/cache/ devem ser graváveis (chmod 775).
  4. Copie .env.example para .env e execute php artisan key:generate.
  5. Acesse https://yourdomain.com/install no navegador.
  6. Siga o assistente — Requirements → Database → Migrate → Admin Account → Done.

Opção B — Instalação via CLI

# 1. Instalar dependências
composer install --no-dev --optimize-autoloader
npm install
npm run build

# 2. Configurar ambiente
cp .env.example .env
php artisan key:generate

# 3. Editar .env para credenciais do BD
# DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD

# 4. Criar tabelas e dados iniciais
php artisan migrate --seed

# 5. Criar link simbólico storage para uploads
php artisan storage:link

# 6. Cachear config para produção
php artisan config:cache
php artisan route:cache
php artisan view:cache

# 7. Marcar como instalado
echo "Installed" > storage/installed.lock
Configuração do servidor web: O document root deve apontar para o diretório public/. Para Apache, o .htaccess incluído cuida do URL rewriting. Para Nginx, consulte o guia de deploy do Laravel.

Wizard Step 2 — Database Configuration

When the wizard reaches Step 2, you must enter the MySQL connection details for the database you created in your hosting panel. The database must already exist (it can be empty — the next wizard step will create the tables).

FieldDefault / ExampleNotes
Host127.0.0.1Works on 99% of shared hosts (Hostinger, cPanel, Plesk). Keep this default unless your hosting provides a custom MySQL hostname (managed DB services like AWS RDS, DigitalOcean Managed Database).
Port3306Standard MySQL port. Only change if your provider uses a non-standard port (rare).
Database nameuXXXXXX_assethubThe full name shown in your hosting panel. Most shared hosts prefix it with your user ID (e.g. Hostinger: u287094729_assethub).
UsernameuXXXXXX_assethubMySQL user with permissions on the database above. Do not use root — shared hosts don't allow it.
Password(your DB password)The password you set or copied when creating the MySQL user. Most hosts show it once on creation — use "View / Reset" if you didn't save it.

Where to find these credentials by hosting panel

  • Hostinger: hPanel → Databases → Management → click your database. The page shows name, username, and a "Show password" button.
  • cPanel: cPanel → MySQL Databases. The database list shows names; users are listed below. Use "Change Password" if needed.
  • Plesk: Plesk → Databases → click the database name. The detail page shows credentials and offers a password reset.
  • DirectAdmin: DirectAdmin → MySQL Management → click the database. Credentials and password reset are on the database detail page.
  • External / managed DB: AWS RDS, DigitalOcean Managed Database, etc. Use the custom hostname, port (often 3306 but verify), DB name, user, and password from your cloud console. Make sure the server's IP is whitelisted in the DB firewall.

Common errors and how to fix them

Error messageCause and fix
SQLSTATE[HY000] [1045] Access deniedWrong username or password, or the user doesn't have access to this database. Double-check spelling (including the user prefix on shared hosts). Reset the password in the hosting panel if unsure.
SQLSTATE[HY000] [1049] Unknown databaseThe database name is wrong, or you haven't created the database yet in your hosting panel. Create it first, then re-enter the exact name (including any prefix).
SQLSTATE[HY000] [2002] Connection refusedThe MySQL server can't be reached. Verify Host and Port. On shared hosts try localhost instead of 127.0.0.1 or vice versa. For managed DBs, make sure your server IP is whitelisted.
SQLSTATE[42S02] Base table not found: sessionsHappens when SESSION_DRIVER=database or CACHE_STORE=database is set in .env before the tables exist. Edit .env and change both to file, save, then reload the wizard. You can switch back to database after install if you prefer.
could not find driverPHP pdo_mysql extension is missing or disabled. Enable it in your hosting panel (PHP Configuration → Extensions). On Hostinger: hPanel → Advanced → PHP Configuration → PHP Extensions tab.
Tip: The Host and Port fields are pre-filled with the most common values (127.0.0.1 and 3306) — leave them as-is on shared hosting. You only need to type Database name, Username, and Password. Click Test & Save → to verify the connection and move to Step 3.

Localhost (Desenvolvimento local)

Guia rápido para rodar o AssetHub no seu computador para testes ou desenvolvimento antes do deploy em produção. Escolha o ambiente que corresponde ao seu sistema operacional.

Recomendado: Laravel Herd é o caminho mais rápido no macOS e Windows — sem Docker, sem configuração manual de Apache/MySQL. XAMPP e Laragon são boas alternativas gratuitas se você preferir um stack tradicional.

Opção 1 — Laravel Herd (Recomendado, macOS e Windows)

Laravel Herd é o ambiente local oficial do time Laravel — gratuito, nativo, sem Docker. Inclui PHP 8.2/8.3/8.4, Nginx e (no Herd Pro) MySQL/Redis.

  1. Baixe e instale o Laravel Herd em herd.laravel.com.
  2. Coloque a pasta do projeto AssetHub dentro de ~/Herd/ (macOS) ou %USERPROFILE%\Herd\ (Windows). O Herd cria um domínio .test automaticamente — ex.: http://assethub.test.
  3. Abra Herd → Sites e confirme que a versão do PHP é 8.2 ou 8.3. Clique com o direito no site → Secure para habilitar HTTPS (necessário para o leitor de QR).
  4. Crie um banco MySQL. Com Herd Pro, use Services → MySQL → Open in TablePlus. Caso contrário, instale o MySQL Community ou use SQLite (DB_CONNECTION=sqlite, touch database/database.sqlite).
  5. Copie .env.example para .env, preencha as credenciais do BD e execute php artisan key:generate na raiz do projeto.
  6. Abra http://assethub.test/install no navegador e siga o assistente do instalador.

Opção 2 — XAMPP (Windows, macOS, Linux)

XAMPP empacota Apache, MySQL/MariaDB e PHP. Grátis e multiplataforma. Garanta escolher uma versão com PHP 8.2 ou mais novo.

  1. Baixe o XAMPP 8.2+ em apachefriends.org e instale.
  2. Copie o projeto AssetHub para C:\xampp\htdocs\AssetHub\ (Windows) ou /Applications/XAMPP/htdocs/AssetHub/ (macOS).
  3. Abra o XAMPP Control Panel e inicie Apache e MySQL. Se as portas estiverem ocupadas, use Config → service.conf para trocar o Apache para 8080.
  4. Vá em http://localhost/phpmyadminNovo → crie um banco chamado assethub com agrupamento utf8mb4.
  5. Na pasta do projeto: copie .env.example para .env, defina DB_DATABASE=assethub, DB_USERNAME=root, deixe DB_PASSWORD vazio (padrão XAMPP). Execute php artisan key:generate.
  6. Acesse http://localhost/AssetHub/public/install para executar o assistente do instalador.
URLs limpas sem /public/: crie um virtual host em C:\xampp\apache\conf\extra\httpd-vhosts.conf apontando o DocumentRoot para a pasta public/ do projeto e adicione 127.0.0.1 assethub.local ao seu arquivo hosts.

Opção 3 — Laragon (Windows)

Laragon é um stack portátil para Windows projetado para Laravel — vhosts automáticos, URLs limpas, MySQL/MariaDB e HeidiSQL incluído.

  1. Baixe o Laragon Full em laragon.org e instale.
  2. No Laragon: Menu → PHP → Versão — mude para PHP 8.2 ou 8.3.
  3. Copie o projeto AssetHub para C:\laragon\www\AssetHub\.
  4. Clique em Start All. O Laragon cria o vhost automaticamente: http://assethub.test (apontando para a pasta public/).
  5. Abra o HeidiSQL (incluído) → crie o banco assethub. Credenciais padrão: usuário root, senha vazia.
  6. Edite o .env com as credenciais do BD, execute php artisan key:generate e acesse http://assethub.test/install.

Opção 4 — Servidor PHP embutido (sem servidor web)

A opção mais simples: o Laravel vem com artisan serve, que inicia um servidor PHP de desenvolvimento. Não exige Apache nem Nginx. Ideal para testes rápidos.

# Instalar dependências e configurar
cd /path/to/AssetHub
composer install
cp .env.example .env
php artisan key:generate

# Rodar migrations e seed dos dados iniciais
php artisan migrate --seed

# Iniciar o servidor de desenvolvimento
php artisan serve
# Depois acesse: http://127.0.0.1:8000/install

Problemas comuns no localhost

O leitor de QR não abre a câmera em http://

APIs de câmera do navegador exigem HTTPS, com uma exceção: http://localhost e http://127.0.0.1 são tratados como contextos seguros. Se você acessar o AssetHub via seu IP de LAN (ex.: http://192.168.1.10), a câmera será recusada. Use localhost para desenvolvimento, ou habilite HTTPS via Herd / mkcert.

Permission denied em storage (macOS / Linux)

Se aparecerem erros de escrita quando o app tenta logar ou cachear, corrija as permissões: chmod -R 775 storage bootstrap/cache. No Windows normalmente não é necessário.

Porta já em uso

Se a porta 8000 estiver ocupada por outro app, use uma porta diferente:

php artisan serve --port=8001

Testar e-mails localmente

SMTP real não está disponível na maioria das configurações localhost. Duas opções seguras: (1) defina MAIL_MAILER=log no .env — os e-mails são gravados em storage/logs/laravel.log em vez de enviados; ou (2) use Mailtrap / MailHog para capturar o e-mail de saída em uma caixa falsa.

MAIL_MAILER=log
# Todos os e-mails são gravados em storage/logs/laravel.log

Assets do frontend (Vite / Tailwind)

O frontend Vue/Tailwind do AssetHub vem pré-compilado no pacote. Se editar componentes Vue ou a config do Tailwind, você precisará do Node.js 18+:

npm install
npm run dev    # Hot-reload durante o desenvolvimento
npm run build  # Build de produção (executar antes do deploy)

Implantação no Hostinger Single (Hospedagem compartilhada)

Este é o caminho recomendado para usuários sem VPS ou experiência técnica. O AssetHub é totalmente compatível com o plano Hostinger Single Web Hosting mais barato (~$2,99/mês). Sem SSH, sem Composer, sem linha de comando — o Single inclui cron jobs nativos, PHP 8.3 e SSL gratuito.

Testado em: planos Hostinger Single, Premium, Business (PHP 8.2+, MySQL 5.7+, Cron Jobs nativos em todos).

Passo 1 — Prepare sua hospedagem

  1. Faça login no Hostinger hPanel.
  2. Vá em Hospedagem → Gerenciar para seu domínio.
  3. Defina a versão do PHP como 8.2 ou 8.3 via Avançado → Configuração PHP.
  4. Garanta que estas extensões PHP estejam ativas (geralmente padrão):
    • OpenSSL, PDO, PDO_MySQL, Mbstring, GD, Tokenizer, XML, Ctype, JSON, Fileinfo

Passo 2 — Criar banco de dados MySQL

  1. No hPanel, vá em Bancos de dados → MySQL Databases.
  2. Clique em Criar novo banco de dados.
  3. Anote estes 3 valores:
    • Nome do banco de dados — ex.: u123_AssetHub
    • Usuário — ex.: u123_admin
    • Senha — gerada automaticamente, guarde com segurança

Passo 3 — Enviar arquivos

  1. Vá em Arquivos → File Manager no hPanel.
  2. Navegue até public_html/ (é a raiz do seu domínio).
  3. Apague qualquer index.html ou default.php padrão nessa pasta.
  4. Clique em Enviar arquivos e envie o source.zip completo do pacote.
    Ou envie o conteúdo da pasta /source/ diretamente via FTP, se preferir.
  5. Se enviou um ZIP, clique com botão direito → Extrair. Após extração, todos os arquivos devem estar na raiz de public_html/.
  6. Verifique se public_html/ contém: app/, public/, vendor/, .htaccess, index.php (em public/), .env, etc.
Importante: Garanta que o arquivo .htaccess exista na raiz de public_html/. Ele contém as regras de URL rewriting. Se o File Manager esconder arquivos ocultos, clique em Configurações → Mostrar arquivos ocultos.

Passo 4 — Rodar o instalador

  1. Abra o navegador e acesse https://yourdomain.com/install.
  2. Você verá o AssetHub Installer.
  3. Passo 1: Requirements — Todas as verificações devem passar (verde). Se alguma falhar, contate o suporte da Hostinger para ativar a extensão PHP ausente.
  4. Passo 2: Database — Informe as credenciais do Passo 2 acima:
    • Host: localhost
    • Porta: 3306
    • Banco de dados: u123_AssetHub
    • Usuário: u123_admin
    • Senha: (a gerada pela Hostinger)
  5. Passo 3: Migrate — Clique em "Run Migrations & Seed". Demora ~10 segundos. Não atualize a página.
  6. Passo 4: Admin — Crie sua conta de administrador. Use uma senha forte.
  7. Pronto! — Você verá a URL Cron (salve-a!) e um botão de login.

Passo 5 — Configurar alertas de e-mail automáticos via Hostinger Cron

O AssetHub usa o scheduler do Laravel para tarefas em segundo plano: alertas de garantia, lembretes de manutenção, validade de documentos, atualização de depreciação e checkouts em atraso. Configure um cron job no hPanel e o Laravel decide qual tarefa rodar e quando.

  1. No hPanel, vá em Avançado → Cron Jobs.
  2. Clique em Criar Cron job.
  3. Selecione o tipo: Custom (não "PHP" — precisamos passar um argumento).
  4. Para o comando, informe (substitua uXXXXXX pelo seu usuário Hostinger):
    /usr/bin/php /home/uXXXXXX/public_html/artisan schedule:run
    Dica: abra o File Manager, localize o arquivo artisan (raiz do projeto), clique com botão direito → Propriedades para copiar o caminho completo.
  5. Defina a programação como A cada minuto — os cinco campos (Minuto, Hora, Dia, Mês, Dia da semana) em *.
  6. Clique em Salvar.

Pronto — o AssetHub agora envia automaticamente lembretes de checkout em atraso, alertas de manutenção, validade de documentos, garantias, e atualiza valores de depreciação. O Laravel agenda internamente cada job na frequência correta (diário 08:00, mensal, etc.).

Document root definido como public_html/public/? Sem problemas — seu código Laravel continua na raiz public_html/, então o caminho do cron permanece /home/uXXXX/public_html/artisan (não adicione /public/).
Alternativa para hosts sem cron: Se você não está na Hostinger ou seu provedor não tem cron jobs, o AssetHub também expõe uma URL para disparo via webhook.
  1. Faça login como admin → Configurações → aba Sistema → copie sua URL Cron.
  2. Cadastre-se gratuitamente em cron-job.org.
  3. Crie um cronjob, cole a URL, defina A cada 15 minutos, salve.

Passo 6 — Configurar e-mail (SMTP)

A Hostinger fornece contas de e-mail com cada plano. Para usá-las nas notificações do AssetHub:

  1. No hPanel, vá em E-mails → Contas de e-mail e crie uma (ex.: noreply@yourdomain.com).
  2. Edite o arquivo .env em public_html/ via File Manager:
    MAIL_MAILER=smtp
    MAIL_HOST=smtp.hostinger.com
    MAIL_PORT=587
    MAIL_USERNAME=noreply@yourdomain.com
    MAIL_PASSWORD=your_email_password
    MAIL_ENCRYPTION=tls
    MAIL_FROM_ADDRESS=noreply@yourdomain.com
    MAIL_FROM_NAME="Your Company Name"
  3. Salve o arquivo.
  4. Faça login no AssetHub → Configurações → aba Email → Enviar e-mail de teste. Se receber, está pronto.
Limites de SMTP no Single: O Hostinger Single permite ~100 e-mails de saída por hora. Para implantações maiores, use um provedor dedicado como SendGrid, Mailgun ou Postmark (com planos gratuitos).

Problemas comuns no Hostinger Single

"500 Internal Server Error" após envio

  • Verifique se .htaccess existe na raiz de public_html/ e contém as regras de rewrite.
  • Verifique se a versão do PHP está em 8.2 ou 8.3 no hPanel.
  • Confira storage/logs/laravel.log via File Manager para ver o erro real.

"Permission denied" em uploads

Normalmente a Hostinger define as permissões corretas, mas se não:

  • Clique com o direito em storage/ no File Manager → Permissões → defina 755 recursivamente.
  • O mesmo para bootstrap/cache/.

O leitor de QR não abre a câmera

APIs de câmera do navegador exigem HTTPS. A Hostinger fornece SSL gratuito via Let's Encrypt — ative em SSL → Gerenciar no hPanel.

E-mails agendados não são enviados

  • No hPanel → Cron Jobs → verifique a coluna Last run na entrada de cron. Se vazia, o cron não está disparando — confirme o caminho do artisan.
  • Teste o comando manualmente: abra Terminal no hPanel (se disponível) e rode o comando do cron. Se der erro, a mensagem indicará o problema (versão errada do PHP, caminho errado, etc.).
  • Verifique se o SMTP está configurado corretamente (Configurações → Email → Enviar teste).
  • Verifique storage/logs/laravel.log em busca de erros do scheduler.

Desempenho lento

O Hostinger Single tem CPU/RAM compartilhados. Se sua equipe tiver mais de 20 usuários, considere:

  • Upgrade para Premium (~$3,99/mês) — servidores mais rápidos, mais recursos, vários bancos.
  • Ou Business (~$5,99/mês) — recursos dedicados, backups diários, ambiente de staging.

Configuração

Arquivo .env

ChaveDescriçãoExemplo
APP_NAMENome da aplicação exibido na barra de títuloAssetHub
APP_URLURL pública da sua instalaçãohttps://assets.example.com
APP_DEBUGDefina como false em produçãofalse
DB_*Detalhes de conexão ao bancomysql, 127.0.0.1, 3306, ...
MAIL_MAILERDriver de e-mailsmtp, log, mailgun
MAIL_HOSTHostname do servidor SMTPsmtp.gmail.com
MAIL_PORTPorta SMTP587
MAIL_USERNAMEUsuário SMTPyour@email.com
MAIL_PASSWORDSenha SMTP ou app token**********
MAIL_FROM_ADDRESSEndereço From padrãonoreply@example.com

Configurações in-app

A maioria das opções não sensíveis pode ser configurada em Admin → Configurações:

  • Geral: nome/e-mail/telefone da empresa, prefixo de asset tag
  • Email: enviar e-mail de teste para verificar SMTP
  • Notificações: limites de alerta de garantia, janela de lembrete de manutenção
  • Localização: fuso horário, formato de data, moeda

Suporte Multilíngue

O AssetHub vem com 10 idiomas prontos para uso, incluindo árabe RTL. Os usuários trocam de idioma pelo menu suspenso de bandeira no canto superior direito.

Idiomas incluídos

CódigoIdiomaDireção
enEnglish (default)LTR
viTiếng ViệtLTR
esEspañolLTR
frFrançaisLTR
deDeutschLTR
zh简体中文LTR
ja日本語LTR
pt-BRPortuguês (Brasil)LTR
ruРусскийLTR
arالعربيةRTL

Como trocar de idioma

  1. Clique no ícone de bandeira (canto superior direito) para abrir o menu.
  2. Escolha seu idioma na lista.
  3. A página recarrega; todos os rótulos, datas e formatos de moeda mudam.
  4. Sua escolha é salva tanto na sua conta de usuário quanto em um cookie (1 ano).
Não abra os arquivos .html do app diretamente. O AssetHub é uma aplicação Laravel + Vue do lado do servidor — a troca de idioma faz POST para /locale/{code}, o que só funciona quando há um servidor PHP em execução. Sempre acesse pelo seu domínio real (produção) ou http://localhost:8000 (dev com php artisan serve). Já os arquivos de documentação como este são totalmente independentes e podem ser abertos diretamente.

Adicionando um idioma personalizado (admin)

Admin → Configurações → Traduções:

  • Clique em "Adicionar Locale" — informe código (ex. th para tailandês), nome de exibição, nome nativo, bandeira, direção e uma locale base para copiar traduções.
  • Edite traduções inline no Editor de Traduções, ou via importação/exportação CSV.
  • Traduções armazenadas no BD sobrescrevem automaticamente as traduções de arquivo.

Locale padrão por usuário

Cada usuário tem uma coluna locale. Notificações por email são enviadas automaticamente no idioma preferido do destinatário graças ao contrato HasLocalePreference do Laravel.

Lista de funcionalidades

Gestão de ativos

  • Asset tags autogerados
  • Várias imagens por ativo
  • Geração de código QR
  • Acompanhamento de status e condição
  • Importação/exportação em massa
  • Clonar ativo

Fluxos de trabalho

  • Atribuir / Devolver / Transferir
  • Solicitações com aprovação
  • Reserva Check-in / Check-out
  • Detecção de conflitos

Manutenção

  • Agendar preventiva/corretiva
  • Visão calendário
  • Auto-agendar próxima
  • Acompanhamento de custos
  • Lembretes por e-mail

Documentos

  • Anexar notas, manuais
  • Pré-visualização inline
  • Alertas de validade
  • Vários tipos de documento

Depreciação

  • 3 métodos de cálculo
  • Atualizar valor automaticamente
  • Gráfico de cronograma
  • Resumo anual

Relatórios

  • 8 tipos de relatório
  • Exportação Excel + PDF
  • Gráficos e painéis
  • Filtros de data

Usuários e Funções

O AssetHub vem com 5 funções pré-configuradas:

FunçãoPermissões
AdminAcesso total ao sistema — usuários, departamentos, configurações, log de auditoria, webhooks, traduções
IT ManagerGerenciar ativos, categorias, manutenção, solicitações; aprovar transferências; ver relatórios e depreciação
ContadorGerenciar ativos e depreciação, executar auditorias de inventário, aprovar transferências, acesso total a relatórios (foco financeiro)
SupervisorAprovar solicitações do departamento, gerenciar checkouts, participar de auditorias, ver relatórios
FuncionárioVer ativos atribuídos, criar solicitações, gerenciar próprios checkouts

As permissões são armazenadas como funções Spatie — administradores podem ajustar por permissão via banco de dados.

Gestão de ativos

Criando ativos

  1. Navegue até Ativos → Novo ativo.
  2. Preencha nome, categoria, marca, modelo, número de série.
  3. Adicione data de compra e preço (obrigatórios para depreciação).
  4. Envie imagens (vários arquivos suportados, máx. 5 MB cada).
  5. Salve — asset tag e código QR são gerados automaticamente.

Formato do Asset Tag

Padrão: {PREFIX}-{YEAR}-{NNNN}, ex.: AS-2026-0001. Configurável em Configurações → Geral → Prefixo Asset Tag.

Importação em massa

  1. Clique em Importar na página de Ativos.
  2. Baixe o modelo Excel.
  3. Preencha seus dados — colunas obrigatórias: name, category_name.
  4. Envie o arquivo.

Códigos QR

Cada ativo recebe automaticamente um código QR ao ser criado. O QR codifica a URL do ativo, então escanear leva diretamente à página de detalhe.

Imprimir etiquetas

  • Etiqueta única: clique no ícone de impressora em qualquer linha de ativo.
  • Formato PDF: A4, 2 etiquetas por linha, inclui asset tag, nome, marca, série.

Escaneamento

Clique em Escanear QR na página de Ativos. Permita o acesso à câmera. O leitor usa html5-qrcode e funciona em qualquer navegador moderno. Nota: acesso à câmera requer HTTPS ou localhost.

Fluxos de trabalho

Atribuição de ativo

  1. Abra a página de detalhe de um ativo.
  2. Clique em Atribuir (visível se o ativo estiver disponível).
  3. Escolha um usuário, data de devolução opcional, notas.
  4. Envie — a transação é criada e a notificação por e-mail enviada.

Solicitações de ativos

Funcionários podem enviar solicitações para ativos de que precisam. As solicitações têm 4 status: pending → approved → fulfilled, ou rejected. E-mails de aprovação são enviados automaticamente.

Check-in / Check-out

Para ativos compartilhados (câmeras, projetores, veículos). Reservas têm faixas de data; o sistema evita checkouts sobrepostos. A visão calendário mostra todas as reservas de relance.

Depreciação

O AssetHub calcula a depreciação dos ativos usando um de três métodos:

MétodoFórmulaCaso de uso
Linha reta(Cost - Salvage) / Useful LifeMais comum; depreciação anual constante
Saldo decrescente2 / Useful Life × Book ValueAcelerada; para impostos
Unidades de produçãoBaseado em usoEquipamentos de fabricação

Os padrões são herdados da categoria do ativo. As entradas de cronograma são geradas mensalmente. O current_value do ativo é atualizado automaticamente no 1º de cada mês.

Campos personalizados

Admin → Campos personalizados permite adicionar atributos personalizados ilimitados aos ativos:

  • Tipos: texto, número, data, seleção (dropdown), área de texto, arquivo, caixa de seleção
  • Escopo: aplicar a todas as categorias ou a uma específica
  • Reordenar: arraste a alça
  • Campos obrigatórios são validados ao salvar o ativo

Relatórios

Oito relatórios integrados, acessíveis pelo menu Relatórios:

  1. Resumo de ativos — totais por status, condição, categoria, departamento
  2. Depreciação — perda de valor por categoria, ativos mais depreciados
  3. Transações — atividade de atribuição, devolução, transferência ao longo do tempo
  4. Custo de manutenção — gastos por mês, categoria, tipo
  5. Expiração de garantia — ativos que precisam atenção em 30/60/180 dias
  6. Ativos por departamento — distribuição de ativos e uso de orçamento por departamento
  7. Ativos por origem — distribuição entre compra, projeto, doação, transferência
  8. Resumo de auditoria de inventário — discrepâncias em ciclos periódicos de auditoria

Todos os relatórios suportam exportação para Excel e PDF via botões no cabeçalho da página.

Webhooks

O AssetHub pode notificar serviços externos em eventos importantes.

Eventos disponíveis

  • asset.created, asset.updated, asset.deleted
  • asset.assigned, asset.returned, asset.transferred
  • request.created, request.approved, request.rejected, request.fulfilled
  • maintenance.scheduled, maintenance.started, maintenance.completed
  • checkout.created, checkout.returned

Formato do Payload

{
  "event": "asset.assigned",
  "timestamp": "2026-05-05T08:00:00+00:00",
  "data": {
    "asset_id": 1,
    "asset_tag": "AS-2026-0001",
    "asset_name": "HP EliteDesk 800",
    "to_user_id": 4,
    "transaction_id": 12
  }
}

Verificação de assinatura

Se um secret estiver configurado, as requisições incluem o cabeçalho X-AssetHub-Signature contendo HMAC-SHA256 do corpo. Verifique do seu lado:

$expected = hash_hmac('sha256', $rawBody, $secret);
if (hash_equals($expected, $request->header('X-AssetHub-Signature'))) {
  // válido
}

Política de retry

Entregas falhas são retentadas 3 vezes com 200 ms de atraso. Após 10 falhas consecutivas, o webhook é desativado automaticamente.

Tarefas agendadas

O AssetHub usa o scheduler do Laravel para jobs em segundo plano. Você precisa apenas de uma entrada de cron — o Laravel despacha internamente cada job no momento correto.

Hostinger / Hospedagem compartilhada (UI Cron Jobs hPanel)

Veja a seção Configuração Hostinger → Passo 5 para instruções tipo screenshots. Em resumo: Avançado → Cron Jobs → Custom, comando:

/usr/bin/php /home/uXXXXXX/public_html/artisan schedule:run

Programação: a cada minuto (* nos cinco campos).

VPS / servidor dedicado (crontab)

Execute crontab -e como seu usuário web (geralmente www-data) e adicione:

* * * * * cd /path/to/AssetHub && php artisan schedule:run >> /dev/null 2>&1

Alternativa: pinger de URL externo

Se seu host não tem cron, use a URL Cron no app (Configurações → aba Sistema) com cron-job.org (grátis, a cada 15 min).

Jobs executados automaticamente

HoraComandoPropósito
Diário 08:00send-overdue-checkout-alertsLembretes por e-mail de checkouts em atraso
Diário 08:30send-maintenance-remindersLembretes de manutenção próxima
Diário 09:00send-document-expiry-alertsDocumentos vencendo em 30/14/7/1 dias
Diário 09:30send-warranty-alertsAlertas de expiração de garantia + seguro
Diário 10:00assethub:send-depreciation-end-alertsAlertas quando ativos chegam ao fim da vida útil
Diário 10:30send-inventory-audit-remindersLembretes para auditorias de inventário ativas
Mensal dia 1, 02:00update-asset-valuesAtualizar current_value de ativos a partir da depreciação

Solução de problemas

"Permission denied" em storage

chmod -R 775 storage bootstrap/cache
chown -R www-data:www-data storage bootstrap/cache

O leitor de QR não abre a câmera

APIs de câmera do navegador exigem HTTPS. Instale um certificado SSL ou use localhost para testar.

E-mails não chegam

Verifique storage/logs/laravel.log por erros. Use Configurações → Email → Enviar e-mail de teste para verificar credenciais SMTP. Garanta que seu servidor SMTP permita o IP de envio.

Resetar instalação

Apague storage/installed.lock e acesse /install de novo. Dados existentes serão apagados se você rodar migrações novamente.

Desempenho — lista de ativos lenta

Execute php artisan optimize para cachear config, rotas, views. Garanta que o MySQL tenha índices em assets.asset_tag, assets.serial_number, assets.status (criados automaticamente pelas migrações).

Registro de alterações

v1.0.0 — Lançamento inicial (2026-05)

  • CRUD de ativos com geração automática de QR
  • 5 funções de usuário (Admin, IT Manager, Contador, Supervisor, Funcionário) com permissões granulares
  • Rastreamento de Origem de ativo (compra centralizada, descentralizada, projeto de investimento, doação, transferência interna)
  • Fluxos de atribuição, devolução com notificações por e-mail
  • Fluxo de aprovação de transferência (pending → approved/rejected) com controle de permissão
  • Fluxo de aprovação de solicitações de ativos
  • Check-in/check-out com visão calendário
  • Programação de manutenção com auto-renovação
  • Anexos de documentos com alertas de validade
  • Depreciação com 3 métodos + alertas de fim de vida útil
  • Módulo de Auditoria de inventário — contagem periódica com rastreamento de discrepâncias
  • Campos personalizados com 7 tipos de entrada e ordenação drag-drop
  • 8 relatórios com gráficos, exportação Excel e PDF (incl. Ativos por origem, Resumo de auditoria)
  • Log de auditoria via Spatie Activitylog com visualizador de diff
  • Webhooks com assinatura HMAC e auto-retry
  • UI multi-idioma: 10 idiomas (en, vi, es, fr, de, zh, ja, pt-BR, ru, ar com RTL)
  • UI de Configurações para empresa, e-mail, notificações, localização, traduções
  • Assistente de instalação via web
  • Modo escuro com paleta emerald-teal

Créditos

Bibliotecas open-source utilizadas