Created
October 24, 2025 17:55
-
-
Save MiloGodoy/bf726ab4a83ed887c01b3d820cdbb703 to your computer and use it in GitHub Desktop.
Documentación Técnica – Módulo de Inventario de Stock
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # 🧾 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