Primeiros passos
Instale o AssetHub no Hostinger ou no seu próprio VPS em menos de 10 minutos.
Usuários e Funções
5 funções pré-configuradas com permissões Spatie, ajustáveis por usuário.
Funcionalidades do produto
Ativos, fluxos de trabalho, manutenção, depreciação, log de auditoria e mais.
Personalização
Adicione campos personalizados ilimitados, mude branding, idiomas e temas.
Configuração Hostinger
Implantação passo a passo no plano Single compartilhado mais barato.
Segurança e QR
HTTPS, webhooks assinados com HMAC, log de auditoria e leitor QR pela câmera.
Relatórios e Exportação
8 relatórios integrados com exportação Excel + PDF e filtros de data.
Alertas por e-mail
Lembretes de garantia, manutenção, validade de documentos e checkouts em atraso.
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)
- Envie os arquivos do projeto para seu servidor web.
- Aponte o document root do domínio para
public/. - Defina permissões:
storage/ebootstrap/cache/devem ser graváveis (chmod 775). - Copie
.env.examplepara.enve executephp artisan key:generate. - Acesse
https://yourdomain.com/installno navegador. - 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
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).
| Field | Default / Example | Notes |
|---|---|---|
| Host | 127.0.0.1 | Works 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). |
| Port | 3306 | Standard MySQL port. Only change if your provider uses a non-standard port (rare). |
| Database name | uXXXXXX_assethub | The full name shown in your hosting panel. Most shared hosts prefix it with your user ID (e.g. Hostinger: u287094729_assethub). |
| Username | uXXXXXX_assethub | MySQL 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
3306but 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 message | Cause and fix |
|---|---|
SQLSTATE[HY000] [1045] Access denied | Wrong 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 database | The 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 refused | The 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: sessions | Happens 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 driver | PHP 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. |
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.
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.
- Baixe e instale o Laravel Herd em herd.laravel.com.
- Coloque a pasta do projeto AssetHub dentro de
~/Herd/(macOS) ou%USERPROFILE%\Herd\(Windows). O Herd cria um domínio.testautomaticamente — ex.:http://assethub.test. - 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).
- 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). - Copie
.env.examplepara.env, preencha as credenciais do BD e executephp artisan key:generatena raiz do projeto. - Abra
http://assethub.test/installno 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.
- Baixe o XAMPP 8.2+ em apachefriends.org e instale.
- Copie o projeto AssetHub para
C:\xampp\htdocs\AssetHub\(Windows) ou/Applications/XAMPP/htdocs/AssetHub/(macOS). - 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.
- Vá em
http://localhost/phpmyadmin→ Novo → crie um banco chamadoassethubcom agrupamento utf8mb4. - Na pasta do projeto: copie
.env.examplepara.env, definaDB_DATABASE=assethub,DB_USERNAME=root, deixeDB_PASSWORDvazio (padrão XAMPP). Executephp artisan key:generate. - Acesse
http://localhost/AssetHub/public/installpara executar o assistente do instalador.
/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.
- Baixe o Laragon Full em laragon.org e instale.
- No Laragon: Menu → PHP → Versão — mude para PHP 8.2 ou 8.3.
- Copie o projeto AssetHub para
C:\laragon\www\AssetHub\. - Clique em Start All. O Laragon cria o vhost automaticamente:
http://assethub.test(apontando para a pastapublic/). - Abra o HeidiSQL (incluído) → crie o banco
assethub. Credenciais padrão: usuárioroot, senha vazia. - Edite o
.envcom as credenciais do BD, executephp artisan key:generatee acessehttp://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.
Passo 1 — Prepare sua hospedagem
- Faça login no Hostinger hPanel.
- Vá em Hospedagem → Gerenciar para seu domínio.
- Defina a versão do PHP como 8.2 ou 8.3 via Avançado → Configuração PHP.
- 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
- No hPanel, vá em Bancos de dados → MySQL Databases.
- Clique em Criar novo banco de dados.
- Anote estes 3 valores:
Nome do banco de dados— ex.:u123_AssetHubUsuário— ex.:u123_adminSenha— gerada automaticamente, guarde com segurança
Passo 3 — Enviar arquivos
- Vá em Arquivos → File Manager no hPanel.
- Navegue até
public_html/(é a raiz do seu domínio). - Apague qualquer
index.htmloudefault.phppadrão nessa pasta. - Clique em Enviar arquivos e envie o
source.zipcompleto do pacote.
Ou envie o conteúdo da pasta/source/diretamente via FTP, se preferir. - Se enviou um ZIP, clique com botão direito → Extrair. Após extração, todos os arquivos devem estar na raiz de
public_html/. - Verifique se
public_html/contém:app/,public/,vendor/,.htaccess,index.php(empublic/),.env, etc.
.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
- Abra o navegador e acesse
https://yourdomain.com/install. - Você verá o AssetHub Installer.
- 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.
- 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)
- Host:
- Passo 3: Migrate — Clique em "Run Migrations & Seed". Demora ~10 segundos. Não atualize a página.
- Passo 4: Admin — Crie sua conta de administrador. Use uma senha forte.
- 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.
- No hPanel, vá em Avançado → Cron Jobs.
- Clique em Criar Cron job.
- Selecione o tipo: Custom (não "PHP" — precisamos passar um argumento).
- Para o comando, informe (substitua
uXXXXXXpelo seu usuário Hostinger):
Dica: abra o File Manager, localize o arquivo/usr/bin/php /home/uXXXXXX/public_html/artisan schedule:runartisan(raiz do projeto), clique com botão direito → Propriedades para copiar o caminho completo. - Defina a programação como A cada minuto — os cinco campos (Minuto, Hora, Dia, Mês, Dia da semana) em
*. - 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.).
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/).
- Faça login como admin → Configurações → aba Sistema → copie sua URL Cron.
- Cadastre-se gratuitamente em cron-job.org.
- 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:
- No hPanel, vá em E-mails → Contas de e-mail e crie uma (ex.:
noreply@yourdomain.com). - Edite o arquivo
.envempublic_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" - Salve o arquivo.
- Faça login no AssetHub → Configurações → aba Email → Enviar e-mail de teste. Se receber, está pronto.
Problemas comuns no Hostinger Single
"500 Internal Server Error" após envio
- Verifique se
.htaccessexiste na raiz depublic_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.logvia 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 → defina755recursivamente. - 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.logem 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
| Chave | Descrição | Exemplo |
|---|---|---|
APP_NAME | Nome da aplicação exibido na barra de título | AssetHub |
APP_URL | URL pública da sua instalação | https://assets.example.com |
APP_DEBUG | Defina como false em produção | false |
DB_* | Detalhes de conexão ao banco | mysql, 127.0.0.1, 3306, ... |
MAIL_MAILER | Driver de e-mail | smtp, log, mailgun |
MAIL_HOST | Hostname do servidor SMTP | smtp.gmail.com |
MAIL_PORT | Porta SMTP | 587 |
MAIL_USERNAME | Usuário SMTP | your@email.com |
MAIL_PASSWORD | Senha SMTP ou app token | ********** |
MAIL_FROM_ADDRESS | Endereço From padrão | noreply@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ódigo | Idioma | Direção |
|---|---|---|
en | English (default) | LTR |
vi | Tiếng Việt | LTR |
es | Español | LTR |
fr | Français | LTR |
de | Deutsch | LTR |
zh | 简体中文 | LTR |
ja | 日本語 | LTR |
pt-BR | Português (Brasil) | LTR |
ru | Русский | LTR |
ar | العربية | RTL |
Como trocar de idioma
- Clique no ícone de bandeira (canto superior direito) para abrir o menu.
- Escolha seu idioma na lista.
- A página recarrega; todos os rótulos, datas e formatos de moeda mudam.
- Sua escolha é salva tanto na sua conta de usuário quanto em um cookie (1 ano).
/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.
thpara 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ção | Permissões |
|---|---|
| Admin | Acesso total ao sistema — usuários, departamentos, configurações, log de auditoria, webhooks, traduções |
| IT Manager | Gerenciar ativos, categorias, manutenção, solicitações; aprovar transferências; ver relatórios e depreciação |
| Contador | Gerenciar ativos e depreciação, executar auditorias de inventário, aprovar transferências, acesso total a relatórios (foco financeiro) |
| Supervisor | Aprovar solicitações do departamento, gerenciar checkouts, participar de auditorias, ver relatórios |
| Funcionário | Ver 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
- Navegue até Ativos → Novo ativo.
- Preencha nome, categoria, marca, modelo, número de série.
- Adicione data de compra e preço (obrigatórios para depreciação).
- Envie imagens (vários arquivos suportados, máx. 5 MB cada).
- 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
- Clique em Importar na página de Ativos.
- Baixe o modelo Excel.
- Preencha seus dados — colunas obrigatórias:
name,category_name. - 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
- Abra a página de detalhe de um ativo.
- Clique em Atribuir (visível se o ativo estiver disponível).
- Escolha um usuário, data de devolução opcional, notas.
- 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étodo | Fórmula | Caso de uso |
|---|---|---|
| Linha reta | (Cost - Salvage) / Useful Life | Mais comum; depreciação anual constante |
| Saldo decrescente | 2 / Useful Life × Book Value | Acelerada; para impostos |
| Unidades de produção | Baseado em uso | Equipamentos 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:
- Resumo de ativos — totais por status, condição, categoria, departamento
- Depreciação — perda de valor por categoria, ativos mais depreciados
- Transações — atividade de atribuição, devolução, transferência ao longo do tempo
- Custo de manutenção — gastos por mês, categoria, tipo
- Expiração de garantia — ativos que precisam atenção em 30/60/180 dias
- Ativos por departamento — distribuição de ativos e uso de orçamento por departamento
- Ativos por origem — distribuição entre compra, projeto, doação, transferência
- 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.deletedasset.assigned,asset.returned,asset.transferredrequest.created,request.approved,request.rejected,request.fulfilledmaintenance.scheduled,maintenance.started,maintenance.completedcheckout.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
| Hora | Comando | Propósito |
|---|---|---|
| Diário 08:00 | send-overdue-checkout-alerts | Lembretes por e-mail de checkouts em atraso |
| Diário 08:30 | send-maintenance-reminders | Lembretes de manutenção próxima |
| Diário 09:00 | send-document-expiry-alerts | Documentos vencendo em 30/14/7/1 dias |
| Diário 09:30 | send-warranty-alerts | Alertas de expiração de garantia + seguro |
| Diário 10:00 | assethub:send-depreciation-end-alerts | Alertas quando ativos chegam ao fim da vida útil |
| Diário 10:30 | send-inventory-audit-reminders | Lembretes para auditorias de inventário ativas |
| Mensal dia 1, 02:00 | update-asset-values | Atualizar 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
- Laravel 11 — MIT
- Vue 3 — MIT
- Inertia.js — MIT
- Tailwind CSS — MIT
- Spatie Permission, Media Library, Activitylog — MIT
- Phosphor Icons — MIT (duotone weight)
- ApexCharts — MIT
- html5-qrcode — Apache 2.0
- Simple QrCode — MIT
- Laravel Excel — MIT
- Laravel DomPDF — MIT