Ingeniería de Software Aplicada

Gestión de Stock de Almacenes

StockMaster API es una solución avanzada de gestión de almacenes diseñada con un enfoque riguroso en la integridad del dato. Desarrollada en Laravel 11, esta API implementa tipado estricto y una arquitectura modular para garantizar que cada movimiento de stock sea atómico, trazable y seguro.

La seguridad se integra desde el núcleo mediante OAuth2 (Passport) y un sistema RBAC de granos finos. La automatización mediante observadores de modelos asegura que la auditoría sea silenciosa pero infalible, registrando cada cambio sin afectar el rendimiento de la aplicación.

Con su motor de valoración dinámica (FIFO, LIFO, AVG) e integración nativa con MariaDB InnoDB, StockMaster está preparado para los requerimientos contables más exigentes.

Arquitectura

Diagrama de Capas del Sistema

Dashboard

Vista de Gestión Operativa

Stack Tecnológico Núcleo de la Aplicación

Database

MariaDB 10.11

Motor InnoDB con soporte para transacciones ACID y Vistas de valoración.

Core Framework

Laravel 11

Estructura moderna con sistema de servicios y repositorios desacoplados.

Language

PHP 8.2+

Uso de Strict Typing y Property Promotion para un código impecable.

Auth Standard

OAuth2 / Passport

Implementación de tokens industriales para aplicaciones de alta seguridad.

RBAC System

Spatie Permission

Control de acceso granular basado en roles: Admin, Worker y Viewer.

Documentation

Scramble OpenAPI

Documentación viva 100% interactiva sin mantenimiento manual.

Quality Control

TDD (PHPUnit)

Metodología Red-Green-Refactor aplicada a cada funcionalidad crítica.

Arch Patterns

S.O.L.I.D.

Cumplimiento estricto de principios para alta mantenibilidad.

Referencia Completa de API

Listado organizado de todos los puntos de acceso con sus validaciones técnicas y roles requeridos.

Estructura Arquitectónica

Organización profesional basada en el desacoplamiento de responsabilidades.

📂 API-StockMaster/
├── 📂 app/
│   ├── 📂 DTO/                          // Contenedores inmutables de datos
│   ├── 📂 Domain/Inventory/             // Capa de Dominio: Algoritmos de Stock
│   │   ├── 📂 Factories/            // Creación dinámica de estrategias
│   │   └── 📂 Strategies/           // Implementaciones: FIFO, LIFO, AVG
│   ├── 📂 Http/
│   │   ├── 📂 Controllers/Api/      // Manejo de peticiones (Thin Controllers)
│   │   └── 📂 Resources/            // Transformación a JSON OpenAPI complatible
│   ├── 📂 Repositories/                 // Abstracción de acceso a datos
│   └── 📂 Services/                     // Orquestación de Lógica de Negocio
├── 📂 database/                         // Migraciones con InnoDB y Seeders modulares
└── 📂 tests/                            // Feature y Unit tests (PHPUnit)
                    

Fundamentos de Ingeniería

🧠

Patrones de Diseño de Alto Nivel

Repository Pattern

Centraliza la selección de datos. Evita que la lógica de negocio dependa de Eloquent.

Service Pattern

Mantiene los controladores 100% libres de lógica de negocio.

Strategy Pattern

Inyectamos dinámicamente el algoritmo de valoración según el producto.

Observer Pattern

Garantiza auditorías silenciosas detectando eventos de base de datos.

DTO

Desacoplamiento con DTOs

Prohibimos $request->all(). Transformamos peticiones en objetos inmutables validados.

Traslados: El Corazón Logístico

01

Requisitos de Almacén

Condiciones de infraestructura antes de operar.

  • Almacenes Origen/Destino deben existir en sistema.
  • El Almacén de Destino debe estar Activo.
  • IDs de origen y destino deben ser estrictamente distintos.
02

Validaciones Reales

Protección contra inconsistencias de inventario.

  • 📊 Suficiencia de Stock: Verificación en tiempo real del almacén emisor.
  • 🏗️ Control de Capacidad: El receptor debe tener espacio físico disponible.
⚠️

Fallo Atómico (Rollback)

Nuestro sistema sigue el principio de "Todo o Nada". Si durante el proceso de traslado ocurre un error (falta de stock de último minuto, pérdida de conexión o violación de capacidad), la transacción completa se deshace (Rollback).

Esto garantiza que nunca existan "items fantasmales" que salieron de un almacén pero nunca llegaron al otro.

Flujo de Ejecución Técnica

DB::beginTransaction()
1. Request -> TransferStockDTO
2. validateSufficientStock($source)
3. validateDestinationCapacity($dest)
4. movementRepository->create('OUT')
5. movementRepository->create('IN')
✅ DB::commit() // Éxito Total
❌ DB::rollBack() // Si falla paso 2, 3, 4 o 5

Estado del Almacén

ACTIVE_REQUIRED

Entorno Sandbox

👑

Admin

admin@stockmaster.com

Password$1234
🏗️

Worker

worker@stockmaster.com

Password$1234
👀

Viewer

viewer@stockmaster.com

Password$1234