Especificación Técnica

Documento de
Alcance Funcional

Sistema de Control de Stock — Especificación Técnica
Cámara Argentina de Instaladores Electricistas

Fecha
Junio 2026
Versión
v1.0
Estado
Borrador Final

Índice de Contenidos

01 Introducción 3 1.1 Objetivo del documento 1.2 Alcance general del sistema 1.3 Glosario de términos 02 Arquitectura del Sistema 4 2.1 Diagrama de arquitectura 2.2 Descripción de componentes 2.3 Justificación tecnológica 03 Modelo de Datos 5 3.1 Usuarios 3.2 Categorías 3.3 Proveedores 3.4 Productos 3.5 Movimientos de Stock 3.6 Diagrama entidad-relación 04 Módulos Funcionales 8 4.1 Módulo de Autenticación 4.2 Módulo de Catálogo 4.3 Módulo de Movimientos 4.4 Módulo de Dashboard 4.5 Módulo de Reportes 4.6 Módulo de ABM 05 Requerimientos Técnicos 12 06 Consideraciones de Seguridad 13 07 Escalabilidad y Crecimiento Futuro 14

01. Introducción

1.1 Objetivo del documento

Este documento define en detalle el alcance funcional y técnico del Sistema de Control de Stock propuesto para la Cámara Argentina de Instaladores Electricistas (ACyEDE). Su propósito es establecer de manera clara y precisa qué funcionalidades incluirá el sistema, cómo se estructurarán los datos, y cuáles serán los requerimientos técnicos para su implementación y operación.

Está dirigido tanto al equipo de desarrollo como a la comisión directiva de ACyEDE, por lo que se utilizan explicaciones accesibles sin sacrificar el rigor técnico necesario para la construcción del sistema.

📌 ¿Cómo leer este documento?

Las secciones 1, 4 y 5 están pensadas para cualquier lector. Las secciones 2, 3 y 6 contienen detalles más técnicos que sirven como referencia para el equipo de desarrollo. Los términos técnicos aparecen explicados en el glosario (sección 1.3) y resaltados en este formato a lo largo del documento.

1.2 Alcance general del sistema

El sistema será una aplicación web accesible desde cualquier dispositivo con navegador (computadoras, tablets y celulares). Permitirá gestionar de forma integral el inventario de productos de ACyEDE, incluyendo:

1.3 Glosario de términos

Stock

Cantidad disponible de un producto en el inventario en un momento dado.

SKU

Stock Keeping Unit. Código único que identifica a cada producto en el sistema.

Lote

Grupo de productos recibidos en una misma compra o envío, identificado por un código.

Movimiento

Cualquier cambio en la cantidad de stock: entrada (ingreso), salida (egreso) o ajuste.

ABM / CRUD

Alta, Baja y Modificación. Operaciones básicas para crear, editar y eliminar registros.

API REST

Interfaz de programación que permite la comunicación entre el frontend y el backend.

JWT

JSON Web Token. Mecanismo de autenticación seguro basado en tokens firmados digitalmente.

SPA

Single Page Application. Aplicación web que carga una sola página y se actualiza dinámicamente.

FK (Foreign Key)

Clave foránea. Campo que vincula un registro con otro de una tabla diferente.

Baja Lógica

En lugar de eliminar un registro, se marca como inactivo. Los datos se preservan siempre.

02. Arquitectura del Sistema

2.1 Diagrama de arquitectura

El sistema sigue una arquitectura cliente-servidor clásica de tres capas. El usuario accede a través de un navegador web, que se comunica con el servidor a través de Internet:

🖥️ Navegador
PC / Tablet / Celular
→
HTTPS
🌐 Internet
SSL/TLS
→
HTTPS
⚙️ Servidor Web
Node.js + nginx
→
SQL
🗄️ Base de Datos
SQLite

2.2 Descripción de componentes

🎨
Frontend
React · SPA · Responsive

Aplicación web de página única (SPA) desarrollada con React. Se adapta automáticamente a cualquier tamaño de pantalla (responsive), permitiendo su uso cómodo desde celulares, tablets y computadoras. Interfaz moderna e intuitiva.

⚙️
Backend (API REST)
Node.js · Express

Servidor de aplicaciones que procesa la lógica de negocio, gestiona la autenticación, y expone una API REST para comunicarse con el frontend. Node.js es reconocido por su alto rendimiento y eficiencia en recursos.

🗄️
Base de Datos
SQLite → PostgreSQL

Motor de base de datos liviano y robusto. SQLite es ideal para esta escala de uso, no requiere servidor adicional, y los datos pueden migrarse fácilmente a PostgreSQL si la demanda crece en el futuro.

☁️
Servidor en la Nube
VPS · nginx · Ubuntu

Servidor privado virtual (VPS) en la nube con nginx como proxy reverso. Garantiza disponibilidad 24/7, acceso desde cualquier lugar, y copias de seguridad automáticas diarias.

2.3 Justificación tecnológica

💡 ¿Por qué estas tecnologías?

La elección del stack tecnológico prioriza tres factores: costo operativo bajo (Node.js y SQLite requieren mínimos recursos de servidor), velocidad de desarrollo (JavaScript en frontend y backend con un equipo reducido), y escalabilidad (la arquitectura REST y la migración a PostgreSQL permiten crecer sin reconstruir el sistema). Todas las tecnologías son open source, sin costos de licencia.

03. Modelo de Datos

El modelo de datos define la estructura de la información que almacenará el sistema. Cada entidad representa un tipo de dato (productos, usuarios, etc.) y sus campos describen qué información se guarda de cada uno.

3.1 Usuarios

Representa a las personas que acceden al sistema. Cada usuario tiene un rol que determina sus permisos.

Campo Tipo Descripción Requerido
id Entero Identificador único del usuario Sí (auto)
username Texto Nombre de usuario para iniciar sesión Sí (único)
password_hash Texto Contraseña cifrada (nunca se almacena en texto plano) Sí
full_name Texto Nombre completo del usuario Sí
role Texto Rol asignado: admin, operator o readonly Sí
active Booleano Estado activo/inactivo del usuario Sí
created_at Fecha/hora Fecha y hora de creación del registro Sí (auto)

3.2 Categorías

Clasificación de los productos. Ejemplos: material didáctico, artículos de oficina, herramientas, merchandising.

Campo Tipo Descripción Requerido
id Entero Identificador único de la categoría Sí (auto)
name Texto Nombre de la categoría Sí (único)
description Texto Descripción opcional de la categoría No

3.3 Proveedores

Datos de contacto de los proveedores de productos de ACyEDE.

Campo Tipo Descripción Requerido
id Entero Identificador único del proveedor Sí (auto)
name Texto Nombre del proveedor o empresa Sí
contact Texto Persona de contacto No
phone Texto Número de teléfono No
email Texto Correo electrónico No

3.4 Productos

Entidad central del sistema. Contiene toda la información de cada artículo del inventario.

Campo Tipo Descripción Requerido
id Entero Identificador único del producto Sí (auto)
code Texto Código único del producto (SKU) Sí (único)
name Texto Nombre del producto Sí
description Texto Descripción detallada del producto No
category_id Entero FK Categoría del producto (referencia a Categorías) No
supplier_id Entero FK Proveedor del producto (referencia a Proveedores) No
location Texto Ubicación física en el depósito (ej: "Estante A3") No
price Decimal Precio unitario de referencia No
current_stock Entero Cantidad actualmente disponible en inventario Sí (default 0)
min_stock Entero Stock mínimo para activar alerta de reposición No (default 0)
batch Texto Número de lote del producto No
expiration_date Fecha Fecha de vencimiento del producto No
photo_url Texto Ruta al archivo de foto del producto No
active Booleano Estado activo/inactivo (baja lógica) Sí (default true)
created_at Fecha/hora Fecha y hora de creación Sí (auto)
updated_at Fecha/hora Fecha y hora de última actualización Sí (auto)

3.5 Movimientos de Stock

Registra cada cambio en el inventario. Es la tabla de auditoría principal del sistema — cada vez que entra o sale un producto, queda registrado quién lo hizo, cuándo, y por qué motivo.

Campo Tipo Descripción Requerido
id Entero Identificador único del movimiento Sí (auto)
product_id Entero FK Producto afectado (referencia a Productos) Sí
user_id Entero FK Usuario que realizó el movimiento (referencia a Usuarios) Sí
type Texto Tipo de movimiento: entry (entrada), exit (salida), adjustment (ajuste) Sí
quantity Entero Cantidad de unidades del movimiento Sí
stock_before Entero Stock del producto antes del movimiento Sí
stock_after Entero Stock del producto después del movimiento Sí
reason Texto Motivo del movimiento (ej: "Compra a proveedor X") No
created_at Fecha/hora Fecha y hora del movimiento Sí (auto)
🔒 Inmutabilidad de movimientos

Los movimientos nunca se eliminan ni modifican. Si hay un error, se registra un nuevo movimiento de tipo adjustment que lo corrige. Esto garantiza la trazabilidad completa y la integridad de los datos históricos.

3.6 Diagrama Entidad-Relación

Este diagrama muestra cómo se vinculan las entidades del sistema entre sí. Las flechas indican relaciones de referencia (claves foráneas).

📁 Categorías
🔑 idINT PK
nameTEXT
descriptionTEXT
🏢 Proveedores
🔑 idINT PK
nameTEXT
contactTEXT
phoneTEXT
emailTEXT
📦 Productos (Entidad Central)
🔑 idINT PK
codeTEXT UNIQUE
nameTEXT
descriptionTEXT
🔗 category_idINT FK
🔗 supplier_idINT FK
locationTEXT
priceDECIMAL
current_stockINT
min_stockINT
batchTEXT
expiration_dateDATE
photo_urlTEXT
activeBOOLEAN
created_atDATETIME
updated_atDATETIME
📊 Movimientos
🔑 idINT PK
🔗 product_idINT FK
🔗 user_idINT FK
typeTEXT
quantityINT
stock_beforeINT
stock_afterINT
reasonTEXT
created_atDATETIME
👤 Usuarios
🔑 idINT PK
usernameTEXT
password_hashTEXT
full_nameTEXT
roleTEXT
activeBOOLEAN
created_atDATETIME

Relaciones entre entidades

1:N Categorías → Productos Una categoría tiene muchos productos
1:N Proveedores → Productos Un proveedor tiene muchos productos
1:N Productos → Movimientos Un producto tiene muchos movimientos
1:N Usuarios → Movimientos Un usuario realiza muchos movimientos

04. Módulos Funcionales

El sistema está organizado en módulos independientes. Cada módulo agrupa funcionalidades relacionadas y puede ser implementado de forma incremental.

🔐
4.1 Módulo de Autenticación
Control de acceso, sesiones y permisos por rol

Funcionalidades

Matriz de permisos por rol

Acción Admin Operador Solo Lectura
Ver dashboard ✅ ✅ ✅
Ver catálogo de productos ✅ ✅ ✅
Crear y editar productos ✅ ✅ ❌
Eliminar productos (baja lógica) ✅ ❌ ❌
Registrar movimientos de stock ✅ ✅ ❌
Ver reportes ✅ ✅ ✅
Exportar datos (Excel/CSV) ✅ ✅ ❌
Gestionar usuarios ✅ ❌ ❌
Gestionar categorías ✅ ✅ ❌
Gestionar proveedores ✅ ✅ ❌
📦
4.2 Módulo de Catálogo
Gestión integral del inventario de productos

Listado de productos

Formulario de alta y edición

Baja lógica

Los productos nunca se eliminan físicamente de la base de datos. Al dar de baja un producto, se marca como inactivo (active = false). Esto permite recuperar la información en cualquier momento y mantener la integridad de los movimientos históricos.

🔄
4.3 Módulo de Movimientos
Registro y seguimiento de entradas, salidas y ajustes

Tipos de movimiento

📥 Entrada (entry)

Ingreso de productos al inventario. Ejemplos: compras a proveedores, devoluciones de alumnos, donaciones recibidas. Suma la cantidad al stock actual.

📤 Salida (exit)

Egreso de productos del inventario. Ejemplos: uso en cursos, préstamo a personal, venta de merchandising. Resta la cantidad al stock actual.

⚖️ Ajuste (adjustment)

Corrección manual del stock. Se utiliza para reconciliar diferencias encontradas durante conteos físicos o para corregir errores de carga. Puede sumar o restar según corresponda.

Datos registrados por movimiento

Cada movimiento almacena automáticamente una "instantánea" del estado del stock:

Historial de movimientos

📊
4.4 Módulo de Dashboard
Panel de control con visión general del inventario en tiempo real

KPIs (Indicadores clave)

📦
Total de Productos
Cantidad de artículos activos en catálogo
⚠️
Stock Bajo
Productos por debajo del mínimo
🔄
Movimientos Hoy
Operaciones realizadas en el día
💰
Valor Estimado
Valor total del inventario

Elementos adicionales del dashboard

📈
4.5 Módulo de Reportes
Informes detallados exportables para análisis y toma de decisiones
Reporte Descripción Exportable
Stock actual completo Listado de todos los productos con su stock actual, categoría, proveedor y ubicación Excel / CSV
Productos con stock bajo Productos cuyo stock actual está por debajo del mínimo configurado Excel / CSV
Movimientos por período Detalle de todos los movimientos en un rango de fechas, con gráfico de tendencia Excel / CSV
Ranking de productos Productos ordenados por cantidad de movimientos (más activos primero) Excel / CSV
Próximos a vencer Productos con fecha de vencimiento cercana, ordenados por urgencia Excel / CSV
⚙️
4.6 Módulo de ABM (Alta, Baja, Modificación)
Administración de datos maestros del sistema
📁 CRUD de Categorías

Crear, editar y desactivar categorías de productos. Incluye nombre y descripción. Accesible para roles admin y operator.

🏢 CRUD de Proveedores

Crear, editar y desactivar proveedores. Incluye datos de contacto (nombre, teléfono, email). Accesible para roles admin y operator.

👤 Gestión de Usuarios Solo Admin

Crear nuevos usuarios, asignar roles, activar/desactivar cuentas, y restablecer contraseñas. Este módulo es de uso exclusivo del rol admin por razones de seguridad. Los usuarios no pueden eliminarse, solo desactivarse (baja lógica).

05. Requerimientos Técnicos

Especificaciones mínimas de infraestructura y entorno necesarias para la correcta operación del sistema.

5.1 Infraestructura de servidor

Tipo de Servidor
VPS (Servidor Privado Virtual)
Proveedores sugeridos: DigitalOcean, Vultr, Linode
Sistema Operativo
Ubuntu 22.04 LTS o superior
Sistema operativo gratuito con soporte extendido
Memoria RAM
Mínimo 1 GB
Suficiente para Node.js + SQLite en esta escala
Almacenamiento
Mínimo 20 GB SSD
Incluye sistema operativo, aplicación, fotos y respaldos
Runtime
Node.js 18+
Versión LTS (Long Term Support) recomendada
Proxy Reverso
nginx
Manejo de SSL, compresión y caché de archivos estáticos

5.2 Dominio y seguridad

Dominio
Subdominio de ACyEDE
Ej: stock.acyede.org.ar
Certificado SSL
Let's Encrypt (gratuito)
HTTPS obligatorio — renovación automática

5.3 Respaldos

💾 Respaldo automático diario

Se configurará un proceso automatizado de respaldo que copiará la base de datos completa una vez al día. Los respaldos se almacenarán en el mismo servidor durante 30 días, con opción de configurar respaldo externo (Google Drive, Amazon S3, etc.) si ACyEDE lo requiere.

5.4 Compatibilidad

🌐 Navegadores soportados

Google Chrome, Mozilla Firefox, Apple Safari y Microsoft Edge — últimas 2 versiones de cada uno. No se garantiza compatibilidad con Internet Explorer.

📱 Dispositivos

Diseño responsive que se adapta a computadoras de escritorio, notebooks, tablets y celulares. La interfaz se reorganiza automáticamente según el tamaño de pantalla.

06. Consideraciones de Seguridad

La seguridad es un pilar fundamental del sistema. Se implementan múltiples capas de protección para resguardar los datos de ACyEDE y garantizar que solo usuarios autorizados puedan operar.

🔒
Contraseñas cifradas

Las contraseñas se almacenan cifradas con el algoritmo bcrypt. Ni siquiera los administradores del sistema pueden ver las contraseñas originales.

🎫
Autenticación JWT

Cada sesión se gestiona mediante tokens firmados digitalmente (JWT) que expiran automáticamente tras 8 horas de inactividad.

🔐
HTTPS obligatorio

Toda la comunicación entre el navegador y el servidor viaja cifrada mediante protocolo HTTPS con certificado SSL/TLS.

🛡️
Protección contra inyección SQL

Todas las consultas a la base de datos utilizan parámetros preparados, lo que previene ataques de inyección SQL.

🌐
Protección CORS

Se configura CORS (Cross-Origin Resource Sharing) para permitir solo solicitudes desde el dominio autorizado de ACyEDE.

✅
Validación doble

Los datos se validan tanto en el frontend (para UX) como en el backend (para seguridad). Nunca se confía solo en la validación del navegador.

♻️
Baja lógica

Ningún dato se elimina físicamente de la base de datos. Los registros se desactivan, preservando la integridad y el historial completo.

📋
Trazabilidad completa

Cada movimiento de stock queda registrado con el usuario que lo realizó, la fecha y hora exacta, y el motivo. Auditoría total.

⚠️ Responsabilidad del cliente

ACyEDE es responsable de mantener las credenciales de administrador en un lugar seguro, comunicar al equipo de desarrollo cualquier incidencia de seguridad, y no compartir usuarios ni contraseñas entre personas. Cada persona que use el sistema debe tener su propia cuenta.

07. Escalabilidad y Crecimiento Futuro

El sistema está diseñado con una arquitectura que permite crecer y evolucionar a medida que las necesidades de ACyEDE cambien, sin necesidad de reconstruirlo desde cero.

7.1 Crecimiento técnico

🗄️ Migración a PostgreSQL

Si el volumen de datos o de usuarios simultáneos crece significativamente, la base de datos puede migrarse de SQLite a PostgreSQL sin cambios en la aplicación. PostgreSQL soporta consultas concurrentes, replicación y backups en caliente.

🔗 API REST abierta

La API REST del sistema permite integrar el control de stock con otros sistemas que ACyEDE pueda usar en el futuro (contabilidad, CRM, sitio web institucional). Cualquier aplicación puede consumir los datos del inventario.

7.2 Módulos futuros potenciales

La arquitectura modular permite agregar funcionalidades sin afectar lo ya construido:

Módulo futuro Descripción Prioridad
Órdenes de compra Generar pedidos a proveedores automáticamente cuando el stock baje del mínimo Media
Facturación básica Generar comprobantes simples de venta de merchandising o materiales Media
Notificaciones Alertas por email o WhatsApp cuando un producto llega al stock mínimo Alta
Múltiples sedes Gestionar inventarios separados para distintas ubicaciones de ACyEDE Baja
Código de barras / QR Escaneo rápido de productos para agilizar entradas y salidas Media
App móvil nativa Aplicación nativa para Android/iOS con funcionalidades offline Baja

7.3 Arquitectura preparada para escalar

🏗️ Decisiones de diseño orientadas al futuro

La separación entre frontend y backend permite reemplazar o actualizar cualquiera de las partes de forma independiente. La API REST documentada facilita la integración con sistemas externos. El modelo de datos normalizado evita duplicaciones y permite agregar nuevas entidades sin reestructurar las existentes. El uso de baja lógica en todas las entidades garantiza que los datos históricos siempre estarán disponibles para auditoría.

— Fin del Documento de Alcance Funcional —

Versión 1.0 · Junio 2026 · Documento preparado para la Comisión Directiva de ACyEDE