AssetHub Documentación

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)

  1. Sube los archivos del proyecto a tu servidor web.
  2. Apunta el document root del dominio a public/.
  3. Configura permisos: storage/ y bootstrap/cache/ deben tener escritura (chmod 775).
  4. Copia .env.example a .env y ejecuta php artisan key:generate.
  5. Visita https://yourdomain.com/install en tu navegador.
  6. 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
Configuración del servidor web: El document root debe apuntar al directorio 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).

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 (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.

Recomendado: Laravel Herd es la ruta más rápida en macOS y Windows — sin Docker, sin configuración manual de Apache/MySQL. XAMPP y Laragon son buenas alternativas gratuitas si prefieres un stack tradicional.

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.

  1. Descarga e instala Laravel Herd desde herd.laravel.com.
  2. 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.
  3. 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).
  4. 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).
  5. Copia .env.example a .env, completa las credenciales de la BD y ejecuta php artisan key:generate en la raíz del proyecto.
  6. Abre http://assethub.test/install en 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.

  1. Descarga XAMPP 8.2+ de apachefriends.org e instálalo.
  2. Copia el proyecto AssetHub a C:\xampp\htdocs\AssetHub\ (Windows) o /Applications/XAMPP/htdocs/AssetHub/ (macOS).
  3. Abre XAMPP Control Panel e inicia Apache y MySQL. Si los puertos están ocupados, usa Config → service.conf para cambiar Apache a 8080.
  4. Ve a http://localhost/phpmyadminNuevo → crea una base de datos assethub con cotejamiento utf8mb4.
  5. En la carpeta del proyecto: copia .env.example a .env, establece DB_DATABASE=assethub, DB_USERNAME=root, deja DB_PASSWORD vacío (predeterminado de XAMPP). Ejecuta php artisan key:generate.
  6. Visita http://localhost/AssetHub/public/install para ejecutar el asistente del instalador.
URLs limpias sin /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.

  1. Descarga Laragon Full de laragon.org e instálalo.
  2. En Laragon: Menú → PHP → Versión — cambia a PHP 8.2 u 8.3.
  3. Copia el proyecto AssetHub a C:\laragon\www\AssetHub\.
  4. Haz clic en Start All. Laragon crea automáticamente el vhost: http://assethub.test (apuntando a la carpeta public/).
  5. Abre HeidiSQL (incluido) → crea la base de datos assethub. Credenciales predeterminadas: usuario root, contraseña vacía.
  6. Edita .env con las credenciales de la BD, ejecuta php artisan key:generate, luego visita http://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.

Probado en: planes Hostinger Single, Premium, Business (PHP 8.2+, MySQL 5.7+, Cron Jobs nativos incluidos en todos los planes).

Paso 1 — Prepara tu hosting

  1. Inicia sesión en Hostinger hPanel.
  2. Ve a Hosting → Administrar para tu dominio.
  3. Establece la versión de PHP a 8.2 u 8.3 vía Avanzado → Configuración PHP.
  4. 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

  1. En hPanel, ve a Bases de datos → MySQL Databases.
  2. Haz clic en Crear nueva base de datos.
  3. Anota estos 3 valores:
    • Nombre de la base de datos — p. ej. u123_AssetHub
    • Usuario — p. ej. u123_admin
    • Contraseña — autogenerada, guárdala bien

Paso 3 — Subir archivos

  1. Ve a Archivos → File Manager en hPanel.
  2. Navega a public_html/ (es la raíz de tu dominio).
  3. Elimina cualquier index.html o default.php predeterminado en esa carpeta.
  4. Haz clic en Subir archivos y sube todo source.zip del paquete.
    O sube el contenido de la carpeta /source/ directamente vía FTP si prefieres.
  5. Si subiste un ZIP, clic derecho → Extraer. Tras extraer, todos los archivos deben quedar en la raíz de public_html/.
  6. Verifica que public_html/ contenga: app/, public/, vendor/, .htaccess, index.php (en public/), .env, etc.
Importante: Asegúrate de que el archivo .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

  1. Abre tu navegador y ve a https://yourdomain.com/install.
  2. Verás el AssetHub Installer.
  3. Paso 1: Requirements — Todas las verificaciones deben pasar (verde). Si alguna falla, contacta al soporte de Hostinger para activar la extensión PHP faltante.
  4. 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ó)
  5. Paso 3: Migrate — Haz clic en "Run Migrations & Seed". Toma ~10 segundos. No refresques.
  6. Paso 4: Admin — Crea tu cuenta de administrador. Usa una contraseña fuerte.
  7. ¡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.

  1. En hPanel, ve a Avanzado → Cron Jobs.
  2. Haz clic en Crear Cron job.
  3. Selecciona tipo: Custom (no "PHP" — necesitamos pasar un argumento).
  4. Para el comando, ingresa (reemplaza uXXXXXX con tu usuario de Hostinger):
    /usr/bin/php /home/uXXXXXX/public_html/artisan schedule:run
    Consejo: abre File Manager, ubica el archivo artisan (raíz de tu proyecto), clic derecho → Propiedades para copiar la ruta completa.
  5. Establece el horario a Cada minuto — los cinco campos (Minuto, Hora, Día, Mes, Día de la semana) en *.
  6. 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.).

¿Document root configurado a 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/).
Alternativa para hosts sin cron: Si no usas Hostinger o tu proveedor no tiene cron jobs, AssetHub también expone una URL para activar vía webhook.
  1. Inicia sesión como admin → Configuración → pestaña Sistema → copia tu URL Cron.
  2. Regístrate gratis en cron-job.org.
  3. 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:

  1. En hPanel, ve a Correos → Cuentas de correo y crea una (p. ej. noreply@yourdomain.com).
  2. Edita el archivo .env en public_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"
  3. Guarda el archivo.
  4. Inicia sesión en AssetHub → Configuración → pestaña Email → Enviar correo de prueba. Si lo recibes, listo.
Límites SMTP en Single: Hostinger Single permite ~100 correos salientes por hora. Para despliegues mayores, usa un proveedor dedicado como SendGrid, Mailgun o Postmark (con planes gratuitos).

Problemas comunes en Hostinger Single

"500 Internal Server Error" después de subir

  • Verifica que .htaccess exista en la raíz de public_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.log ví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 a 755 recursivamente.
  • 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.log en 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

ClaveDescripciónEjemplo
APP_NAMENombre de la aplicación mostrado en la barra de títuloAssetHub
APP_URLURL pública de tu instalaciónhttps://assets.example.com
APP_DEBUGEstablece a false en producciónfalse
DB_*Detalles de conexión a la base de datosmysql, 127.0.0.1, 3306, ...
MAIL_MAILERDriver de correosmtp, log, mailgun
MAIL_HOSTHostname del servidor SMTPsmtp.gmail.com
MAIL_PORTPuerto SMTP587
MAIL_USERNAMEUsuario SMTPyour@email.com
MAIL_PASSWORDContraseña SMTP o app token**********
MAIL_FROM_ADDRESSDirección From por defectonoreply@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ódigoIdiomaDirección
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

Cómo cambiar de idioma

  1. Haz clic en el icono de bandera (esquina superior derecha) para abrir el menú.
  2. Selecciona tu idioma de la lista.
  3. La página se recarga; todas las etiquetas, fechas y formatos de moneda cambian.
  4. Tu elección se guarda en tu cuenta de usuario y en una cookie (1 año).
No abras los archivos .html de la app directamente. AssetHub es una aplicación Laravel + Vue del lado del servidor — el cambio de idioma hace POST a /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. th para 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:

RolCapacidades
AdminAcceso total al sistema — usuarios, departamentos, configuración, auditoría, webhooks, traducciones
IT ManagerGestionar activos, categorías, mantenimiento, solicitudes; aprobar transferencias; ver reportes y depreciación
ContadorGestionar activos y depreciación, ejecutar auditorías de inventario, aprobar transferencias, acceso completo a reportes (enfoque financiero)
SupervisorAprobar solicitudes del departamento, gestionar checkouts, participar en auditorías, ver reportes
EmpleadoVer 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

  1. Navega a Activos → Nuevo activo.
  2. Completa nombre, categoría, marca, modelo, número de serie.
  3. Añade fecha de compra y precio (obligatorio para depreciación).
  4. Sube imágenes (varios archivos soportados, máx. 5 MB cada uno).
  5. 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

  1. Haz clic en Importar en la página de Activos.
  2. Descarga la plantilla Excel.
  3. Completa tus datos — columnas obligatorias: name, category_name.
  4. 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

  1. Abre una página de detalle de activo.
  2. Haz clic en Asignar (visible si el activo está disponible).
  3. Elige un usuario, fecha de devolución opcional, notas.
  4. 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étodoFórmulaCaso de uso
Línea recta(Cost - Salvage) / Useful LifeMás común; depreciación anual igual
Saldo decreciente2 / Useful Life × Book ValueAcelerada; para impuestos
Unidades de producciónBasado en usoEquipo 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:

  1. Resumen de activos — totales por estado, condición, categoría, departamento
  2. Depreciación — pérdida de valor por categoría, activos más depreciados
  3. Transacciones — actividad de asignación, devolución, transferencia en el tiempo
  4. Costo de mantenimiento — gasto por mes, categoría, tipo
  5. Vencimiento de garantías — activos que requieren atención en 30/60/180 días
  6. Activos por departamento — distribución y utilización presupuestal por departamento
  7. Activos por origen — distribución entre compras, proyecto, donación, transferencias
  8. 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.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 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

HoraComandoPropósito
Diario 08:00send-overdue-checkout-alertsRecordatorios por correo de checkouts vencidos
Diario 08:30send-maintenance-remindersRecordatorios de mantenimiento próximo
Diario 09:00send-document-expiry-alertsDocumentos venciendo en 30/14/7/1 días
Diario 09:30send-warranty-alertsAlertas de vencimiento de garantía + seguro
Diario 10:00assethub:send-depreciation-end-alertsAlertas cuando los activos llegan al fin de vida útil
Diario 10:30send-inventory-audit-remindersRecordatorios de auditorías de inventario activas
Mensual día 1, 02:00update-asset-valuesRefrescar 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