Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Capítulo 12: Gran Apertura (Proyecto Integrador)

Llegaste al final del entrenamiento, Gerente. Aprendiste a construir estantes (Listas), etiquetar cajas (Variables), contratar empleados (Funciones) y organizar rutas de archivos (Pathlib). Es un salto real desde donde empezaste.

Este capítulo no tiene lección. Es la Gran Apertura. Tu misión: construir el Sistema de Gestión de Inventario (SGI) v1.0 desde cero.

Arquitectura del SGI v1.0: el BUCLE PRINCIPAL conecta los cuatro módulos: Cargar Datos, Agregar Artículo, Mostrar Inventario y Guardar Datos

Fig. 12.1: Arquitectura del SGI v1.0: el bucle principal y sus módulos.

El Reto

Sin guías paso a paso. Sin espacios en blanco para rellenar. Tienes el plano arquitectónico (Fig. 12.1) y tus herramientas. Tú construyes el edificio.

El programa que vas a crear administra el flujo real de mercancías desde una consola. Nada de botones, nada de ventanas emergentes. La interfaz es el teclado y cada acción tiene consecuencias reales sobre los datos del almacén.

Requisitos del Sistema

  1. Interfaz de Mando: Un menú infinito que permita al usuario elegir acciones hasta que decida “Salir”.
  2. Memoria Persistente: “Si cierro el programa y lo abro mañana, mis productos deben seguir ahí” (guardados en inventario.json).
  3. Gestión de Productos: Poder agregar, listar, buscar y eliminar productos del inventario.
  4. Entrada Blindada: Si el usuario escribe texto donde va un número, o intenta cantidades negativas, el programa no colapsa: rechaza el dato y vuelve a preguntar.

Estructura de Datos

Cada producto es un Diccionario y el inventario es una Lista de esos diccionarios. Este es el esquema oficial de la entidad Producto:

CampoTipoDescripción
idstrIdentificador único
nombrestrNombre descriptivo
preciofloatValor unitario
stockintCantidad disponible
{"id": "1", "nombre": "Tornillos", "precio": 5.5, "stock": 500}

El inventario completo se guarda en inventario.json, que conserva la estructura tal cual la tienes en memoria: una lista de diccionarios.

[
  {"id": "1", "nombre": "Tornillos", "precio": 5.5, "stock": 500}
]

Nota: ¿y las clases? Quizá hayas oído que en Python los objetos se modelan con clases (POO). Aquí, a propósito, no las usamos: un producto es un diccionario y el inventario una lista de diccionarios. Es una decisión de diseño deliberada: para un sistema de este tamaño, funciones más diccionarios es de sobra, y te deja ver el flujo de datos sin capas extra encima. Las clases son tu siguiente gran tema, y el Capítulo 14 te dice por dónde seguir.

Arquitectura Recomendada

Tu archivo inventario.py debe implementar estas funciones clave (SOP):

  1. cargar_datos(ruta: Path) -> list[dict]: Al iniciar el programa, busca el archivo inventario.json. Si existe, lo lee con json.load y devuelve la lista de diccionarios. Si no, devuelve una lista vacía.

  2. guardar_datos(ruta: Path, inventario: list[dict]) -> None: Toma la lista actual y sobrescribe inventario.json con json.dump.

  3. agregar_producto(inventario: list[dict], nombre: str, precio: float, stock: int) -> dict: Crea el diccionario con un ID nuevo y agrégalo a la lista. Reto: que el sistema no acepte precios ni stock negativos. Puedes rechazarlos aquí o en la ventanilla que pide los datos; la implementación de referencia lo resuelve en la ventanilla (Guía 4).

  4. buscar_producto(inventario: list[dict], id_producto: str) -> dict | None: Recorre la lista y devuelve el producto con ese ID, o None si no existe. (Eso significa la firma dict | None: un diccionario o nada.)

  5. eliminar_producto(inventario: list[dict], id_producto: str) -> list[dict]: Devuelve la lista sin el producto indicado. Reto: tras eliminar, los IDs nuevos no deben repetir los ya usados.

  6. mostrar_reporte(inventario: list[dict]) -> None: Recorre la lista e imprime un reporte con los stocks actuales.

  7. main(): El cerebro. Un bucle while True que muestra el menú y usa match-case para llamar a las funciones anteriores según lo que elija el usuario. Importante: ¡No olvides guardar antes de salir!


Lista de Verificación de Calidad

Antes de entregar tu proyecto, verifica:

  • ¿Tengo el venv activado?
  • ¿Tengo Type Hints en todas mis funciones?
  • ¿Uso f-strings para los textos?
  • ¿Mi código está limpio y comentado?

Nota: ¿atascado? Primero inténtalo solo: el aprendizaje ocurre mientras resuelves, no mientras lees la solución. Pero si llevas un buen rato girando en círculos, las Guías de Referencia desarman el proyecto pieza por pieza:

  1. El Plano de los Datos
  2. La Fábrica de Productos
  3. Las Operaciones del Almacén
  4. El Mostrador
  5. Ensamblaje Final y Pruebas

¡Buena suerte, Gerente! El almacén es tuyo.