Skip to content

Instantly share code, notes, and snippets.

@MiloGodoy
Created October 24, 2025 17:55
Show Gist options
  • Select an option

  • Save MiloGodoy/bf726ab4a83ed887c01b3d820cdbb703 to your computer and use it in GitHub Desktop.

Select an option

Save MiloGodoy/bf726ab4a83ed887c01b3d820cdbb703 to your computer and use it in GitHub Desktop.
Documentación Técnica – Módulo de Inventario de Stock
# 🧾 Documentación Técnica – Módulo de Inventario de Stock
### Proyecto: Futura 1.5 (Front-End Next.js)
---
## 📘 Introducción
Este documento describe el desarrollo del **Módulo de Inventario de Stock**, implementado en **Next.js** con **Material React Table (MRT)**, **React Hook Form** y **Material UI (MUI)**.
El desarrollo fue realizado en el contexto del proyecto **Futura 1.5**, bajo el repositorio `futura-1.5-front-end-new`.
El objetivo del módulo es permitir la **gestión dinámica del stock** de productos, incluyendo funcionalidades de alta, edición, eliminación y exportación de registros, todo en una interfaz moderna, responsiva y validada.
---
## 🧩 Estructura General del Módulo
El módulo principal se encuentra en el archivo:
src/app/inventario/InventarioStockPage.tsx
Y hace uso de los siguientes componentes:
| Componente | Descripción |
|-------------|--------------|
| **InventarioStockPage.tsx** | Página principal con la tabla dinámica, botones de acción y manejo de estados. |
| **InventarioStockForm.tsx** | Formulario para crear nuevos productos. |
| **EditarStockForm.tsx** | Diálogo para editar la cantidad actual y otros campos del producto. |
| **ConfirmDialog.tsx** | Diálogo genérico para confirmaciones de eliminación. |
| **ConfirmActionDialog.tsx** | Diálogo de confirmación antes de guardar o crear registros. |
| **ExportExcelButton.tsx / ExportPDFButton.tsx** | Funciones de exportación de datos visibles. |
---
## ⚙️ Funcionalidades Principales
### 1. Creación de Productos (Alta)
- Se accede mediante el botón **"Añadir"**.
- Abre el componente `ActualizacionStockDialog` (alias `InventarioStockForm`).
- Permite ingresar los campos obligatorios:
- **Descripción del Producto**
- **Código de Producto**
- **Ubicación / Bodega**
- **Lote**
- **Cantidad**
- Los datos se validan antes de permitir su envío.
- Si un producto fue cargado correctamente, el sistema muestra un **Snackbar de éxito**.
📌 *Validaciones:*
- No se permite guardar si los campos obligatorios están vacíos.
- En caso de error, se muestra una notificación visual coherente con el estilo general del sistema (sin alertas nativas del navegador).
---
### 2. Edición de Productos
- Al presionar el ícono ✏️ (Editar), se abre el `EditarStockDialog`.
- Se permite modificar exclusivamente el campo **Cantidad Actual**, manteniendo el resto en modo lectura.
- El **Lote** persiste del registro original, incluso después de múltiples ediciones.
- El campo **Código de Bodega** permanece vacío hasta que se conecte con la base de datos (planificado para fases posteriores).
📌 *Comportamiento esperado:*
- La edición actualiza el registro en la tabla y refresca la fecha de “Últ. Actualización”.
- La interfaz notifica la modificación con un **Snackbar animado** (color azul para éxito, rojo para error).
---
### 3. Eliminación de Productos
- Al presionar el ícono 🗑️ (Eliminar), se abre el `ConfirmDialog`.
- El mensaje confirma la eliminación con el nombre del producto afectado.
- Tras aceptar, el producto se elimina de la lista en memoria (`setDevoluciones`), y se muestra una notificación de éxito.
---
### 4. Exportación de Datos
- Se integraron los componentes:
- `ExportExcelButton`: exporta los datos actuales a un archivo `.xlsx`.
- `ExportPDFButton`: exporta la tabla visible a PDF, con encabezado y fecha.
- Los nombres de archivo se generan automáticamente con formato de timestamp:
inventario_stock_YYYY-MM-DD_HH-mm-ss.pdf
---
## 🧠 Lógica de Manejo de Datos
El estado principal se maneja con el hook:
```tsx
const [devoluciones, setDevoluciones] = useState<Devolucion[]>([])
Cada registro tiene la siguiente estructura:
type Devolucion = {
id: number
producto?: string
codigo?: string
ubicacion?: string
lote?: string
vencimiento?: string
stockMinimo?: string
actualizacion?: string
cantidad?: string
estado?: string
}
Mapeo entre formularios
Para mantener coherencia entre los formularios de creación y edición:
const mapToEditarStockData = (devolucion: Devolucion): EditarStockData => ({
codigoProducto: devolucion.codigo,
descripcionProducto: devolucion.producto,
codigoBodega: devolucion.ubicacion,
descripcionBodega: devolucion.lote || '',
cantidadActual: devolucion.cantidad || '',
})
Esto garantiza que los campos relevantes se sincronicen correctamente.
💬 Interfaz de Usuario y Usabilidad
La tabla se renderiza con Material React Table (MRT).
Las columnas se ajustan automáticamente al ancho disponible (overflowX: hidden), evitando el scroll horizontal.
Se utiliza Stack de MUI para mantener alineación fluida de botones y controles.
Los diálogos (Dialog) poseen esquinas redondeadas y encabezados con color institucional azul (#007BFF).
Los mensajes de confirmación se muestran siempre en la esquina superior derecha con animación Snackbar.
🧰 Decisiones Técnicas Destacadas
Aspecto Decisión Motivo
Persistencia temporal en memoria Uso de useState El módulo es de tipo “cliente” y no interactúa aún con API ni BD.
Validación de formularios react-hook-form Mejora el rendimiento y simplifica la integración con MUI.
Exportaciones Módulos personalizados para Excel y PDF Permiten control sobre el formato de salida y nombres de archivo.
Confirmaciones visuales ConfirmDialog y ConfirmActionDialog Refuerzan la seguridad y evitan operaciones accidentales.
Estilo visual uniforme Uso de sx en MUI + Tailwind utilitario Unifica estilos en botones, diálogos y mensajes.
🧾 Flujo General de Uso
flowchart TD
A[Usuario abre Inventario de Stock] --> B[Añadir Producto]
B --> C[Valida campos obligatorios]
C -->|Correcto| D[Producto agregado a tabla]
C -->|Error| E[Notificación de campos faltantes]
D --> F[Editar producto existente]
F --> G[Modificar cantidad]
G --> H[Guardar cambios y actualizar tabla]
D --> I[Eliminar producto]
I --> J[Confirmación y borrado]
D --> K[Exportar datos a Excel/PDF]
🧩 Integraciones Pendientes (Próximas Etapas)
Conexión de Código de Bodega con datos reales de BD.
Persistencia real en backend mediante API REST.
Incorporación de paginación y filtros avanzados en la tabla.
Integración con módulo de reportes.
📁 Ubicación en el Repositorio
futura-1.5-front-end-new/
├── src/
│ ├── app/
│ │ └── (control-panel)
│ │ │ └── inventario/
│ │ │ ├── InventarioStockPage.tsx
│ │ │ ├── components/
│ │ │ │ ├── InventarioStockForm.tsx
│ │ │ │ ├── EditarStockForm.tsx
│ │ │ │ ├── ConfirmDialog.tsx
│ │ │ │ ├── ConfirmActionDialog.tsx
│ │ │ │ ├── ExportExcelButton.tsx
│ │ │ │ └── ExportPDFButton.tsx
│ │ │
│ │ └── globals.css
│ │
│ ├── components
└── docs/
└── Documentacion_Tecnica_Futura15_NextJS.md
🧩 Trazabilidad
Este desarrollo corresponde a los tickets registrados en Jira bajo el módulo “Inventario de Stock – Futura 1.5”,
con evidencias visuales adjuntas y validación conjunta con QA.
✍️ Créditos
Autor: Ramiro Godoy
Rol: Desarrollador Front-End
Empresa: CODE100 S.A.
Proyecto: Futura 1.5 – Gestión de Inventario
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment