Primeros pasos
Instala AssetHub en Hostinger o tu propio VPS en menos de 10 minutos.
Usuarios y Roles
5 roles preconfigurados con permisos Spatie, ajustables por usuario.
Funciones del producto
Activos, flujos de trabajo, mantenimiento, depreciación, auditoría y más.
Personalización
Añade campos personalizados ilimitados, cambia branding, idiomas y temas.
Configuración de Hostinger
Despliegue paso a paso en el plan compartido Single más económico.
Seguridad y QR
HTTPS, webhooks firmados con HMAC, auditoría y escáner QR vía cámara.
Reportes y Exportación
8 reportes integrados con exportación Excel + PDF y filtros por fecha.
Alertas por correo
Recordatorios de garantía, mantenimiento, vencimiento de documentos y checkouts vencidos.
Preguntas frecuentes
¿Puedo ejecutar AssetHub en el plan más barato Hostinger Single?
Sí — AssetHub es totalmente compatible con Hostinger Single (~$2.99/mes). Single incluye PHP 8.3, MySQL, Cron Jobs nativos y SSL gratuito — todo lo que AssetHub necesita. Sin SSH, sin Composer, sin línea de comandos. Consulta la sección Configuración de Hostinger para la guía paso a paso.
¿Necesito conocimientos técnicos para instalarlo?
No. El instalador web se encarga de todo: verificación de requisitos, configuración de base de datos, migraciones y creación de cuenta admin. Solo sube los archivos, visita /install en tu navegador y sigue el asistente.
¿Cómo funcionan los correos programados (alertas de garantía/mantenimiento)?
AssetHub usa el scheduler de Laravel. Solo configuras un cron job que se ejecuta cada minuto, y Laravel despacha internamente cada tarea en su momento correcto (diario 08:00, mensual, etc.). En Hostinger, configúralo en hPanel → Avanzado → Cron Jobs. Si tu host no tiene cron, usa la URL Cron integrada con el servicio gratuito cron-job.org.
¿Qué métodos de depreciación se soportan?
Tres métodos: Línea recta (depreciación anual igual), Saldo decreciente (acelerada, común para impuestos), y Unidades de producción (basada en uso, para equipo de fabricación). Los valores de activos se actualizan automáticamente el día 1 de cada mes.
¿El escáner QR funciona en teléfonos móviles?
Sí — usa la cámara del navegador vía html5-qrcode y funciona en cualquier navegador moderno de móvil/tablet/escritorio. El único requisito es HTTPS. Hostinger proporciona SSL gratuito vía Let's Encrypt, así que funciona de inmediato.
¿Puedo añadir campos propios sin programar?
Sí. Admin → Campos personalizados te permite añadir atributos ilimitados (texto, número, fecha, selección, área de texto, archivo, casilla), limitarlos a categorías específicas, marcarlos como obligatorios y reordenarlos arrastrando — todo desde la interfaz.
¿Cuántos idiomas soporta AssetHub?
10 idiomas listos: inglés, vietnamita, español, francés, alemán, chino, japonés, portugués (BR), ruso y árabe (con soporte RTL completo). Las traducciones son editables desde Admin → Translations.
Resumen
AssetHub es un sistema completo de gestión de activos de TI construido con Laravel 11, Vue 3 y Tailwind CSS. Ayuda a las organizaciones a rastrear el ciclo de vida del equipo, gestionar asignaciones, programar mantenimiento, calcular depreciación y generar reportes detallados.
Seguimiento con QR
Genera códigos QR automáticos para cada activo. Escanea con cualquier cámara del navegador.
Depreciación
3 métodos: línea recta, saldo decreciente, unidades de producción.
Campos personalizados
Añade atributos personalizados ilimitados — texto, fecha, selección, archivo, casilla.
Webhooks
15 tipos de eventos con firma HMAC y reintentos automáticos.
Registro de auditoría
Cada cambio registrado con visor completo de diferencias.
Reportes
8 reportes con gráficos, exportación a Excel y PDF.
Requisitos del servidor
- PHP 8.2 o superior
- MySQL 5.7+ o MariaDB 10.3+
- Composer 2.x
- Node.js 18+ y npm 9+
- Servidor web: Apache o Nginx
Extensiones PHP requeridas
- OpenSSL, PDO, PDO_MySQL, Mbstring, Tokenizer, XML, Ctype, JSON, GD, Fileinfo
Espacio en disco
~ 200 MB mínimo. Reserva espacio adicional para fotos de activos y archivos adjuntos.
Instalación
Opción A — Instalador web (Recomendado)
- Sube los archivos del proyecto a tu servidor web.
- Apunta el document root del dominio a
public/. - Configura permisos:
storage/ybootstrap/cache/deben tener escritura (chmod 775). - Copia
.env.examplea.envy ejecutaphp artisan key:generate. - Visita
https://yourdomain.com/installen tu navegador. - Sigue el asistente — Requirements → Database → Migrate → Admin Account → Done.
Opción B — Instalación por CLI
# 1. Instalar dependencias
composer install --no-dev --optimize-autoloader
npm install
npm run build
# 2. Configurar entorno
cp .env.example .env
php artisan key:generate
# 3. Editar .env para credenciales de BD
# DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD
# 4. Crear tablas y datos iniciales
php artisan migrate --seed
# 5. Crear enlace simbólico storage para uploads
php artisan storage:link
# 6. Cachear config para producción
php artisan config:cache
php artisan route:cache
php artisan view:cache
# 7. Marcar como instalado
echo "Installed" > storage/installed.lock
public/. Para Apache, el .htaccess incluido maneja la reescritura de URLs. Para Nginx, consulta la guía de despliegue 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 (Desarrollo local)
Guía rápida para ejecutar AssetHub en tu computadora para pruebas o desarrollo antes de desplegar a producción. Elige el entorno que coincide con tu sistema operativo.
Opción 1 — Laravel Herd (Recomendado, macOS y Windows)
Laravel Herd es el entorno local oficial del equipo de Laravel — gratis, nativo, sin Docker. Incluye PHP 8.2/8.3/8.4, Nginx y (en Herd Pro) MySQL/Redis.
- Descarga e instala Laravel Herd desde herd.laravel.com.
- Coloca la carpeta del proyecto AssetHub dentro de
~/Herd/(macOS) o%USERPROFILE%\Herd\(Windows). Herd crea automáticamente un dominio.test— p. ej.http://assethub.test. - Abre Herd → Sites y confirma que la versión PHP sea 8.2 u 8.3. Clic derecho en el sitio → Secure para habilitar HTTPS (necesario para el escáner QR).
- Crea una base de datos MySQL. Con Herd Pro, usa Services → MySQL → Open in TablePlus. Si no, instala MySQL Community o usa SQLite (
DB_CONNECTION=sqlite,touch database/database.sqlite). - Copia
.env.examplea.env, completa las credenciales de la BD y ejecutaphp artisan key:generateen la raíz del proyecto. - Abre
http://assethub.test/installen tu navegador y sigue el asistente del instalador.
Opción 2 — XAMPP (Windows, macOS, Linux)
XAMPP empaqueta Apache, MySQL/MariaDB y PHP. Gratis y multiplataforma. Asegúrate de elegir una versión con PHP 8.2 o superior.
- Descarga XAMPP 8.2+ de apachefriends.org e instálalo.
- Copia el proyecto AssetHub a
C:\xampp\htdocs\AssetHub\(Windows) o/Applications/XAMPP/htdocs/AssetHub/(macOS). - Abre XAMPP Control Panel e inicia Apache y MySQL. Si los puertos están ocupados, usa Config → service.conf para cambiar Apache a 8080.
- Ve a
http://localhost/phpmyadmin→ Nuevo → crea una base de datosassethubcon cotejamiento utf8mb4. - En la carpeta del proyecto: copia
.env.examplea.env, estableceDB_DATABASE=assethub,DB_USERNAME=root, dejaDB_PASSWORDvacío (predeterminado de XAMPP). Ejecutaphp artisan key:generate. - Visita
http://localhost/AssetHub/public/installpara ejecutar el asistente del instalador.
/public/: crea un virtual host en C:\xampp\apache\conf\extra\httpd-vhosts.conf apuntando DocumentRoot a la carpeta public/ del proyecto, luego añade 127.0.0.1 assethub.local a tu archivo hosts.
Opción 3 — Laragon (Windows)
Laragon es un stack portátil para Windows diseñado para Laravel — vhosts automáticos, URLs limpias, MySQL/MariaDB y HeidiSQL incluido.
- Descarga Laragon Full de laragon.org e instálalo.
- En Laragon: Menú → PHP → Versión — cambia a PHP 8.2 u 8.3.
- Copia el proyecto AssetHub a
C:\laragon\www\AssetHub\. - Haz clic en Start All. Laragon crea automáticamente el vhost:
http://assethub.test(apuntando a la carpetapublic/). - Abre HeidiSQL (incluido) → crea la base de datos
assethub. Credenciales predeterminadas: usuarioroot, contraseña vacía. - Edita
.envcon las credenciales de la BD, ejecutaphp artisan key:generate, luego visitahttp://assethub.test/install.
Opción 4 — Servidor PHP integrado (sin servidor web)
La opción más simple: Laravel incluye artisan serve, que inicia un servidor PHP de desarrollo. No requiere Apache ni Nginx. Ideal para pruebas rápidas.
# Instalar dependencias y configurar
cd /path/to/AssetHub
composer install
cp .env.example .env
php artisan key:generate
# Ejecutar migraciones y semillas iniciales
php artisan migrate --seed
# Iniciar el servidor de desarrollo
php artisan serve
# Luego visita: http://127.0.0.1:8000/install
Problemas comunes en localhost
El escáner QR no abre la cámara en http://
Las APIs de cámara del navegador requieren HTTPS, con una excepción: http://localhost y http://127.0.0.1 se tratan como contextos seguros. Si accedes a AssetHub vía tu IP LAN (p. ej. http://192.168.1.10), la cámara se negará. Usa localhost para dev o habilita HTTPS vía Herd / mkcert.
Permission denied en storage (macOS / Linux)
Si ves errores de escritura cuando la app intenta loguear o cachear, corrige los permisos: chmod -R 775 storage bootstrap/cache. En Windows normalmente no es necesario.
Puerto ya en uso
Si el puerto 8000 está ocupado por otra app, usa un puerto diferente:
php artisan serve --port=8001
Probar emails localmente
El SMTP real no está disponible en la mayoría de configuraciones locales. Dos opciones seguras: (1) establece MAIL_MAILER=log en .env — los emails se vuelcan a storage/logs/laravel.log en vez de enviarse; o (2) usa Mailtrap / MailHog para capturar el correo saliente en una bandeja falsa.
MAIL_MAILER=log
# Todos los emails se escriben en storage/logs/laravel.log
Assets frontend (Vite / Tailwind)
El frontend Vue/Tailwind de AssetHub viene pre-compilado en el paquete. Si editas componentes Vue o el config de Tailwind, necesitarás Node.js 18+:
npm install
npm run dev # Hot-reload durante el desarrollo
npm run build # Build de producción (ejecutar antes de desplegar)
Desplegar en Hostinger Single (Alojamiento compartido)
Esta es la ruta recomendada para usuarios sin VPS o experiencia técnica. AssetHub es totalmente compatible con el plan Hostinger Single Web Hosting más barato (~$2.99/mes). Sin SSH, sin Composer, sin línea de comandos — Single incluye cron jobs nativos, PHP 8.3 y SSL gratuito.
Paso 1 — Prepara tu hosting
- Inicia sesión en Hostinger hPanel.
- Ve a Hosting → Administrar para tu dominio.
- Establece la versión de PHP a 8.2 u 8.3 vía Avanzado → Configuración PHP.
- Asegúrate de que estas extensiones PHP estén activas (normalmente por defecto):
- OpenSSL, PDO, PDO_MySQL, Mbstring, GD, Tokenizer, XML, Ctype, JSON, Fileinfo
Paso 2 — Crear base de datos MySQL
- En hPanel, ve a Bases de datos → MySQL Databases.
- Haz clic en Crear nueva base de datos.
- Anota estos 3 valores:
Nombre de la base de datos— p. ej.u123_AssetHubUsuario— p. ej.u123_adminContraseña— autogenerada, guárdala bien
Paso 3 — Subir archivos
- Ve a Archivos → File Manager en hPanel.
- Navega a
public_html/(es la raíz de tu dominio). - Elimina cualquier
index.htmlodefault.phppredeterminado en esa carpeta. - Haz clic en Subir archivos y sube todo
source.zipdel paquete.
O sube el contenido de la carpeta/source/directamente vía FTP si prefieres. - Si subiste un ZIP, clic derecho → Extraer. Tras extraer, todos los archivos deben quedar en la raíz de
public_html/. - Verifica que
public_html/contenga:app/,public/,vendor/,.htaccess,index.php(enpublic/),.env, etc.
.htaccess exista en la raíz de public_html/. Contiene las reglas de reescritura de URL. Si el File Manager oculta los archivos ocultos, haz clic en Configuración → Mostrar archivos ocultos.
Paso 4 — Ejecutar el instalador
- Abre tu navegador y ve a
https://yourdomain.com/install. - Verás el AssetHub Installer.
- Paso 1: Requirements — Todas las verificaciones deben pasar (verde). Si alguna falla, contacta al soporte de Hostinger para activar la extensión PHP faltante.
- Paso 2: Database — Ingresa las credenciales del Paso 2 anterior:
- Host:
localhost - Puerto:
3306 - Base de datos:
u123_AssetHub - Usuario:
u123_admin - Contraseña: (la que Hostinger generó)
- Host:
- Paso 3: Migrate — Haz clic en "Run Migrations & Seed". Toma ~10 segundos. No refresques.
- Paso 4: Admin — Crea tu cuenta de administrador. Usa una contraseña fuerte.
- ¡Listo! — Verás la URL Cron (¡guárdala!) y un botón para iniciar sesión.
Paso 5 — Configurar alertas automáticas vía Hostinger Cron
AssetHub usa el scheduler de Laravel para tareas en segundo plano: alertas de garantía, recordatorios de mantenimiento, vencimiento de documentos, refresco de depreciación y checkouts vencidos. Configura un cron job en hPanel y Laravel decide qué tarea ejecutar y cuándo.
- En hPanel, ve a Avanzado → Cron Jobs.
- Haz clic en Crear Cron job.
- Selecciona tipo: Custom (no "PHP" — necesitamos pasar un argumento).
- Para el comando, ingresa (reemplaza
uXXXXXXcon tu usuario de Hostinger):
Consejo: abre File Manager, ubica el archivo/usr/bin/php /home/uXXXXXX/public_html/artisan schedule:runartisan(raíz de tu proyecto), clic derecho → Propiedades para copiar la ruta completa. - Establece el horario a Cada minuto — los cinco campos (Minuto, Hora, Día, Mes, Día de la semana) en
*. - Haz clic en Guardar.
Listo — AssetHub ahora envía automáticamente recordatorios de checkout vencido, alertas de mantenimiento, vencimiento de documentos, garantías y refresca los valores de depreciación. Laravel programa internamente cada job a su frecuencia correcta (diario 08:00, mensual, etc.).
public_html/public/? Sin problema — tu código Laravel sigue en la raíz de public_html/, así que la ruta del cron sigue siendo /home/uXXXX/public_html/artisan (no añadas /public/).
- Inicia sesión como admin → Configuración → pestaña Sistema → copia tu URL Cron.
- Regístrate gratis en cron-job.org.
- Crea un cronjob, pega la URL, configura Cada 15 minutos, guarda.
Paso 6 — Configurar correo (SMTP)
Hostinger proporciona cuentas de correo con cada plan. Para usarlas en las notificaciones de AssetHub:
- En hPanel, ve a Correos → Cuentas de correo y crea una (p. ej.
noreply@yourdomain.com). - Edita el archivo
.envenpublic_html/vía 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" - Guarda el archivo.
- Inicia sesión en AssetHub → Configuración → pestaña Email → Enviar correo de prueba. Si lo recibes, listo.
Problemas comunes en Hostinger Single
"500 Internal Server Error" después de subir
- Verifica que
.htaccessexista en la raíz depublic_html/y contenga las reglas de reescritura. - Verifica que la versión PHP esté en 8.2 u 8.3 en hPanel.
- Revisa
storage/logs/laravel.logvía File Manager para ver el error real.
"Permission denied" en uploads
Hostinger normalmente configura los permisos correctamente, pero si no:
- Clic derecho en
storage/en File Manager → Permisos → establece a755recursivamente. - Lo mismo para
bootstrap/cache/.
El escáner QR no abre la cámara
Las APIs de cámara del navegador requieren HTTPS. Hostinger ofrece SSL gratis vía Let's Encrypt — actívalo en hPanel bajo SSL → Administrar.
Los correos programados no se envían
- En hPanel → Cron Jobs → revisa la columna Last run en tu entrada de cron. Si está vacía, el cron no se está ejecutando — verifica que la ruta de artisan sea correcta.
- Prueba el comando manualmente: abre Terminal en hPanel (si está disponible) y ejecuta el comando cron. Si falla, el mensaje de error indicará el problema (versión PHP equivocada, ruta equivocada, etc.).
- Verifica que SMTP esté correctamente configurado (Configuración → Email → Enviar prueba).
- Revisa
storage/logs/laravel.logen busca de errores del scheduler.
Rendimiento lento
Hostinger Single tiene CPU/RAM compartidos. Si tu equipo es de más de 20 usuarios, considera:
- Subir a Premium (~$3.99/mes) — servidores más rápidos, más recursos, varias bases de datos.
- O Business (~$5.99/mes) — recursos dedicados, copias diarias, entorno staging.
Configuración
Archivo .env
| Clave | Descripción | Ejemplo |
|---|---|---|
APP_NAME | Nombre de la aplicación mostrado en la barra de título | AssetHub |
APP_URL | URL pública de tu instalación | https://assets.example.com |
APP_DEBUG | Establece a false en producción | false |
DB_* | Detalles de conexión a la base de datos | mysql, 127.0.0.1, 3306, ... |
MAIL_MAILER | Driver de correo | smtp, log, mailgun |
MAIL_HOST | Hostname del servidor SMTP | smtp.gmail.com |
MAIL_PORT | Puerto SMTP | 587 |
MAIL_USERNAME | Usuario SMTP | your@email.com |
MAIL_PASSWORD | Contraseña SMTP o app token | ********** |
MAIL_FROM_ADDRESS | Dirección From por defecto | noreply@example.com |
Configuración en la aplicación
La mayoría de las opciones no sensibles son configurables desde Admin → Configuración:
- General: nombre/correo/teléfono de empresa, prefijo de asset tag
- Email: enviar correo de prueba para verificar SMTP
- Notificaciones: umbrales de alerta de garantía, ventana de recordatorio de mantenimiento
- Localización: zona horaria, formato de fecha, moneda
Soporte multi-idioma
AssetHub incluye 10 idiomas listos para usar, incluyendo árabe RTL. Los usuarios cambian de idioma con el menú desplegable de banderas en la esquina superior derecha.
Idiomas incluidos
| Código | Idioma | Dirección |
|---|---|---|
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 |
Cómo cambiar de idioma
- Haz clic en el icono de bandera (esquina superior derecha) para abrir el menú.
- Selecciona tu idioma de la lista.
- La página se recarga; todas las etiquetas, fechas y formatos de moneda cambian.
- Tu elección se guarda en tu cuenta de usuario y en una cookie (1 año).
/locale/{code}, lo cual solo funciona cuando hay un servidor PHP en ejecución. Accede siempre por tu dominio real (producción) o http://localhost:8000 (desarrollo con php artisan serve). Los archivos de documentación como este, en cambio, son totalmente independientes y se pueden abrir directamente.
Añadir un idioma personalizado (admin)
Admin → Configuración → Traducciones:
- Haz clic en "Añadir Locale" — proporciona código (ej.
thpara tailandés), nombre mostrado, nombre nativo, bandera, dirección y un idioma base para copiar las traducciones. - Edita las traducciones en línea en el Editor de Traducciones, o mediante importación/exportación CSV.
- Las traducciones almacenadas en BD anulan automáticamente las traducciones de archivo.
Idioma predeterminado por usuario
Cada usuario tiene una columna locale. Las notificaciones por correo se envían automáticamente en el idioma preferido del destinatario gracias al contrato HasLocalePreference de Laravel.
Lista de funciones
Gestión de activos
- Asset tags autogenerados
- Múltiples imágenes por activo
- Generación de códigos QR
- Seguimiento de estado y condición
- Importar/exportar masivo
- Clonar activo
Flujos de trabajo
- Asignar / Devolver / Transferir
- Solicitudes con aprobación
- Reserva Check-in / Check-out
- Detección de conflictos
Mantenimiento
- Programar preventivo/correctivo
- Vista calendario
- Auto-programar siguiente
- Seguimiento de costos
- Recordatorios por correo
Documentos
- Adjuntar facturas, manuales
- Vista previa en línea
- Alertas de vencimiento
- Múltiples tipos de documento
Depreciación
- 3 métodos de cálculo
- Auto-actualizar valor
- Gráfico de cronograma
- Resumen anual
Reportes
- 8 tipos de reporte
- Exportar Excel + PDF
- Gráficos y paneles
- Filtros de fecha
Usuarios y Roles
AssetHub viene con 5 roles preconfigurados:
| Rol | Capacidades |
|---|---|
| Admin | Acceso total al sistema — usuarios, departamentos, configuración, auditoría, webhooks, traducciones |
| IT Manager | Gestionar activos, categorías, mantenimiento, solicitudes; aprobar transferencias; ver reportes y depreciación |
| Contador | Gestionar activos y depreciación, ejecutar auditorías de inventario, aprobar transferencias, acceso completo a reportes (enfoque financiero) |
| Supervisor | Aprobar solicitudes del departamento, gestionar checkouts, participar en auditorías, ver reportes |
| Empleado | Ver activos asignados, crear solicitudes, gestionar checkouts propios |
Los permisos se almacenan como roles Spatie — los administradores pueden ajustarlos por permiso vía la base de datos.
Gestión de activos
Crear activos
- Navega a Activos → Nuevo activo.
- Completa nombre, categoría, marca, modelo, número de serie.
- Añade fecha de compra y precio (obligatorio para depreciación).
- Sube imágenes (varios archivos soportados, máx. 5 MB cada uno).
- Guarda — el asset tag y el código QR se generan automáticamente.
Formato de Asset Tag
Por defecto: {PREFIX}-{YEAR}-{NNNN}, p. ej. AS-2026-0001. Configurable vía Configuración → General → Prefijo de Asset Tag.
Importación masiva
- Haz clic en Importar en la página de Activos.
- Descarga la plantilla Excel.
- Completa tus datos — columnas obligatorias:
name,category_name. - Sube el archivo.
Códigos QR
Cada activo recibe automáticamente un código QR al crearse. El QR codifica la URL del activo, así que escanearlo lleva al usuario directamente a la página de detalle.
Imprimir etiquetas
- Etiqueta única: Haz clic en el icono de impresora en cualquier fila de activo.
- Formato PDF: A4, 2 etiquetas por fila, incluye asset tag, nombre, marca, serie.
Escaneo
Haz clic en Escanear QR en la página de Activos. Permite el acceso a la cámara. El escáner usa html5-qrcode y funciona en cualquier navegador moderno. Nota: el acceso a cámara requiere HTTPS o localhost.
Flujos de trabajo
Asignación de activos
- Abre una página de detalle de activo.
- Haz clic en Asignar (visible si el activo está disponible).
- Elige un usuario, fecha de devolución opcional, notas.
- Envía — se crea la transacción y se envía notificación por correo.
Solicitudes de activos
Los empleados pueden enviar solicitudes para activos que necesiten. Las solicitudes tienen 4 estados: pending → approved → fulfilled, o rejected. Los correos de aprobación se envían automáticamente.
Check-in / Check-out
Para activos compartidos (cámaras, proyectores, vehículos). Las reservas tienen rangos de fechas; el sistema evita checkouts superpuestos. La vista calendario muestra todas las reservas de un vistazo.
Depreciación
AssetHub calcula la depreciación de activos usando uno de tres métodos:
| Método | Fórmula | Caso de uso |
|---|---|---|
| Línea recta | (Cost - Salvage) / Useful Life | Más común; depreciación anual igual |
| Saldo decreciente | 2 / Useful Life × Book Value | Acelerada; para impuestos |
| Unidades de producción | Basado en uso | Equipo de fabricación |
Los valores predeterminados se heredan de la categoría del activo. Las entradas de cronograma se generan mensualmente. El current_value del activo se actualiza automáticamente el día 1 de cada mes.
Campos personalizados
Admin → Campos personalizados te permite añadir atributos personalizados ilimitados a los activos:
- Tipos: texto, número, fecha, selección (dropdown), área de texto, archivo, casilla
- Alcance: aplicar a todas las categorías o una específica
- Reordenar: arrastra el asa
- Los campos obligatorios se validan al guardar el activo
Reportes
Ocho reportes integrados, accesibles desde el menú Reportes:
- Resumen de activos — totales por estado, condición, categoría, departamento
- Depreciación — pérdida de valor por categoría, activos más depreciados
- Transacciones — actividad de asignación, devolución, transferencia en el tiempo
- Costo de mantenimiento — gasto por mes, categoría, tipo
- Vencimiento de garantías — activos que requieren atención en 30/60/180 días
- Activos por departamento — distribución y utilización presupuestal por departamento
- Activos por origen — distribución entre compras, proyecto, donación, transferencias
- Resumen de auditoría de inventario — discrepancias entre ciclos periódicos de auditoría
Todos los reportes soportan exportación a Excel y PDF mediante botones en el encabezado.
Webhooks
AssetHub puede notificar a servicios externos en eventos clave.
Eventos disponibles
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 de 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
}
}
Verificación de firma
Si se configura un secret, las solicitudes incluyen el encabezado X-AssetHub-Signature con HMAC-SHA256 del cuerpo. Verifica en tu lado:
$expected = hash_hmac('sha256', $rawBody, $secret);
if (hash_equals($expected, $request->header('X-AssetHub-Signature'))) {
// válido
}
Política de reintentos
Las entregas fallidas se reintentan 3 veces con 200 ms de retraso. Tras 10 fallos consecutivos, el webhook se desactiva automáticamente.
Tareas programadas
AssetHub usa el scheduler de Laravel para jobs en segundo plano. Solo necesitas una entrada de cron — Laravel despacha internamente cada job en el momento correcto.
Hostinger / Shared hosting (UI de Cron Jobs en hPanel)
Consulta la sección Configuración de Hostinger → Paso 5 para instrucciones tipo screenshots. En resumen: Avanzado → Cron Jobs → Custom, comando:
/usr/bin/php /home/uXXXXXX/public_html/artisan schedule:run
Horario: cada minuto (* en los cinco campos).
VPS / servidor dedicado (crontab)
Ejecuta crontab -e como tu usuario web (a menudo www-data) y añade:
* * * * * cd /path/to/AssetHub && php artisan schedule:run >> /dev/null 2>&1
Alternativa: pinger de URL externo
Si tu host no tiene cron, usa la URL Cron en la app (Configuración → pestaña Sistema) con cron-job.org (gratis, cada 15 min).
Jobs que se ejecutan automáticamente
| Hora | Comando | Propósito |
|---|---|---|
| Diario 08:00 | send-overdue-checkout-alerts | Recordatorios por correo de checkouts vencidos |
| Diario 08:30 | send-maintenance-reminders | Recordatorios de mantenimiento próximo |
| Diario 09:00 | send-document-expiry-alerts | Documentos venciendo en 30/14/7/1 días |
| Diario 09:30 | send-warranty-alerts | Alertas de vencimiento de garantía + seguro |
| Diario 10:00 | assethub:send-depreciation-end-alerts | Alertas cuando los activos llegan al fin de vida útil |
| Diario 10:30 | send-inventory-audit-reminders | Recordatorios de auditorías de inventario activas |
| Mensual día 1, 02:00 | update-asset-values | Refrescar current_value de activos desde depreciación |
Resolución de problemas
"Permission denied" en storage
chmod -R 775 storage bootstrap/cache
chown -R www-data:www-data storage bootstrap/cache
El escáner QR no abre la cámara
Las APIs de cámara del navegador requieren HTTPS. Instala un certificado SSL o usa localhost para pruebas.
Los correos no llegan
Revisa storage/logs/laravel.log en busca de errores. Usa Configuración → Email → Enviar correo de prueba para verificar credenciales SMTP. Asegúrate de que tu servidor SMTP permita la IP emisora.
Reiniciar instalación
Elimina storage/installed.lock y visita /install de nuevo. Los datos existentes se borrarán si vuelves a ejecutar migraciones.
Rendimiento — lista de activos lenta
Ejecuta php artisan optimize para cachear config, rutas, vistas. Asegúrate de que MySQL tenga índices en assets.asset_tag, assets.serial_number, assets.status (creados automáticamente por las migraciones).
Registro de cambios
v1.0.0 — Lanzamiento inicial (2026-05)
- CRUD de activos con generación automática de QR
- 5 roles de usuario (Admin, IT Manager, Contador, Supervisor, Empleado) con permisos granulares
- Seguimiento de Origen de activo (compra centralizada, descentralizada, proyecto de inversión, donación, transferencia interna)
- Flujos de asignación y devolución con notificaciones por correo
- Flujo de aprobación de transferencias (pending → approved/rejected) con control de permisos
- Flujo de aprobación de solicitudes de activos
- Check-in/check-out con vista calendario
- Programación de mantenimiento con auto-renovación
- Adjuntos de documentos con alertas de vencimiento
- Depreciación con 3 métodos de cálculo + alertas de fin de vida útil
- Módulo de Auditoría de inventario — recuento periódico con seguimiento de discrepancias
- Campos personalizados con 7 tipos de entrada y orden drag-drop
- 8 reportes con gráficos, exportación Excel y PDF (incl. Activos por origen, Resumen de auditoría)
- Log de auditoría vía Spatie Activitylog con visor de diferencias
- Webhooks con firma HMAC y reintentos automáticos
- Interfaz multi-idioma: 10 idiomas (en, vi, es, fr, de, zh, ja, pt-BR, ru, ar con RTL)
- UI de Configuración para empresa, email, notificaciones, localización, traducciones
- Asistente de instalación web
- Modo oscuro con 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