2025-11-12 15:30:12 +01:00
2025-11-12 15:30:12 +01:00
2025-11-12 15:30:12 +01:00
2025-11-12 15:30:12 +01:00
2025-11-12 15:30:12 +01:00
2025-11-12 15:30:12 +01:00
2025-11-12 15:30:12 +01:00
2025-11-12 15:30:12 +01:00
2025-11-12 15:30:12 +01:00
2025-11-12 15:30:12 +01:00
2025-11-12 15:30:12 +01:00
2025-11-12 15:30:12 +01:00
2025-11-12 15:30:12 +01:00

Stock Manager Home

Sistema de gestión de inventario y asignación de activos desarrollado con Next.js 15, Prisma, PostgreSQL y NextAuth.

📋 Descripción

Stock Manager es una aplicación web completa para la gestión de inventarios, activos y asignaciones de equipamiento. Permite controlar tanto ítems genéricos (gestionados por cantidad) como activos serializados (con número de serie único), registrar movimientos de stock, y gestionar asignaciones a destinatarios por departamentos.

Características principales

Gestión de Inventario

  • Ítems genéricos: Productos sin número de serie, gestionados por cantidad en stock
  • Activos serializados: Equipos individuales con número de serie único
  • Categorías: Organización jerárquica de productos
  • Control de stock: Niveles mínimos/máximos, alertas de stock bajo (WIP)
  • Estados múltiples: Disponible, Asignado, Reservado, En reparación, Averiado, Robado, Dado de baja

Gestión de Destinatarios

  • Registro de empleados/destinatarios por departamento
  • Información de contacto (email, teléfono)
  • Historial de asignaciones por destinatario

Sistema de Asignaciones

  • Asignación de ítems genéricos (por cantidad)
  • Asignación de activos individuales (uno a uno)
  • Seguimiento de fechas de asignación y devolución
  • Notas y detalles de cada asignación
  • Registro del usuario que realiza cada asignación

Movimientos e Historial

  • Registro completo de todos los movimientos de stock
  • Tipos de movimiento: IN, OUT, ASSIGNMENT, RETURN, ADJUSTMENT, DELETED
  • Trazabilidad completa con stock previo y nuevo
  • Auditoría de todos los cambios con usuario y fecha

Importación de Datos

  • Importación masiva vía CSV
  • Plantilla descargable para importaciones
  • Validación de datos en el proceso de importación

Sistema de Autenticación y Roles

  • Autenticación segura con NextAuth v5
  • 4 roles de usuario: ADMIN, MANAGER, STAFF, VIEWER
  • Permisos diferenciados según rol
  • Contraseñas hasheadas con bcrypt

🚀 Tecnologías

  • Framework: Next.js 15 (App Router)
  • Base de datos: PostgreSQL 18
  • ORM: Prisma 6
  • Autenticación: NextAuth v5
  • UI: React 19, Tailwind CSS, Shadcn
  • Validación: Zod
  • Formularios: React Hook Form
  • Runtime: Bun (recomendado)
  • Containerización: Docker + Docker Compose

🔨 Desarrollo en entorno DevContainer

Este proyecto incluye configuración para desarrollo en contenedor usando DevContainer.

  1. Abre el proyecto en VS Code y selecciona "Reopen in Container".
  2. El entorno instalará dependencias automáticamente (bun i) y lanzará el servidor de desarrollo (bun run dev).
  3. El puerto 3000 estará disponible para acceder a la app desde tu navegador.

🔨 Desarrollo local

Prerrequisitos

  • Node.js 18+ o Bun
  • PostgreSQL 13+ (o usar Docker Compose)
  • Git
  1. Clonar el repositorio:
git clone <repo-url>
cd stock-manager
  1. Instalar dependencias:
bun install
# o
npm install
  1. Configurar variables de entorno:
cp .env.example .env

Editar .env con tus configuraciones:

# Database
DATABASE_URL="postgresql://user:password@localhost:5432/stockmanager"
POSTGRES_USER=user
POSTGRES_PASSWORD=password
POSTGRES_DB=stockmanager
POSTGRES_HOST=db
POSTGRES_PORT=5432

# NextAuth
NODE_ENV=development
DEMO_MODE=false
AUTH_SECRET="your-secret-key-here"
AUTH_TRUST_HOST=true
DOMAIN=localhost:3000
  1. Ejecutar migraciones de base de datos:
bun run db:migrate
# o generar el cliente Prisma
bun run db:generate
  1. (Opcional) Ejecutar seed para datos iniciales:
bun run db:seed
  1. Iniciar el servidor de desarrollo:
bun run dev

Abrir http://localhost:3000 en el navegador.

🐳 Despliegue con Docker

Producción

docker-compose -f compose.yaml up -d

Con Traefik (reverse proxy):

docker-compose -f compose.yaml -f compose.traefik.yaml up -d

📜 Scripts disponibles

# Desarrollo
bun run dev              # Inicia servidor de desarrollo con Turbopack
bun run build            # Construye para producción
bun run start            # Inicia servidor de producción

# Linting y formato
bun run lint             # Ejecuta ESLint
bun run lint:fix         # Corrige errores de ESLint automáticamente
bun run format           # Formatea código con Prettier

# Base de datos
bun run db:push          # Sincroniza schema sin migraciones
bun run db:migrate       # Crea y ejecuta migraciones
bun run db:migrate:reset # Resetea BD y ejecuta migraciones
bun run db:deploy        # Ejecuta migraciones en producción
bun run db:generate      # Genera cliente Prisma
bun run db:studio        # Abre Prisma Studio (GUI para BD)

📁 Estructura del proyecto

src/
├── app/                    # App Router de Next.js
│   ├── (auth)/            # Rutas de autenticación
│   │   └── login/
│   ├── (dashboard)/       # Rutas del dashboard
│   │   ├── (home)/        # Página principal
│   │   ├── assignments/   # Gestión de asignaciones
│   │   ├── import/        # Importación de datos
│   │   ├── inventory/     # Gestión de inventario
│   │   │   ├── assets/    # Activos serializados
│   │   │   ├── categories/# Categorías
│   │   │   └── items/     # Ítems genéricos
│   │   ├── movements/     # Historial de movimientos
│   │   └── recipients/    # Gestión de destinatarios
│   └── api/               # API routes
│       ├── auth/          # Endpoints de autenticación
│       └── db/            # Endpoints de base de datos
├── components/            # Componentes React
│   ├── auth/             # Componentes de autenticación
│   ├── common/           # Componentes comunes
│   ├── forms/            # Componentes de formularios
│   ├── layout/           # Componentes de layout
│   └── ui/               # Componentes UI (Radix)
├── lib/                   # Utilidades y configuración
│   ├── actions/          # Server Actions
│   ├── schemas/          # Schemas de validación Zod
│   └── types/            # Tipos TypeScript
├── services/             # Servicios de lógica de negocio
├── prisma/               # Schema y migraciones Prisma
│   ├── schema.prisma     # Definición del modelo de datos
│   ├── migrations/       # Historial de migraciones
│   └── seed.ts           # Datos iniciales
└── styles/               # Estilos globales

🔐 Seguridad

  • Autenticación mediante JWT
  • Contraseñas hasheadas con bcrypt
  • Validación de datos con Zod en cliente y servidor
  • Protección de rutas según roles
  • Variables de entorno para secretos
  • Sanitización de inputs

🗃️ Modelo de datos

El sistema gestiona las siguientes entidades principales:

  • Users: Usuarios del sistema con roles y permisos
  • Recipients: Destinatarios/empleados que reciben asignaciones
  • Categories: Categorías de productos
  • Items: Ítems genéricos (sin número de serie)
  • Assets: Activos individuales (con número de serie)
  • Assignments: Asignaciones de ítems/activos a destinatarios
  • Movements: Registro de todos los movimientos de inventario

Ver src/prisma/schema.prisma para el esquema completo.

S
Description
No description provided
Readme 14 MiB
Languages
TypeScript 65.6%
JavaScript 32.3%
CSS 1.8%
Dockerfile 0.3%