Inventario
Herramienta del equipo de Homes para el setup de una casa: la shopping list por apartados, con presupuesto controlado, plantillas repetibles y un catálogo que se llena solo desde las listas. Es el primer hito del circuito de inventario (setup → compras → revisión → reposiciones).Rutas
El modelo en tres reglas
- Las líneas llevan copia congelada. Editar el catálogo o una plantilla
nunca reescribe decisiones ya tomadas en una lista. Los punteros
(
item_id,template_id,template_item_id) son procedencia, no joins vivos. - Sin columnas de estado. «Por definir» y «por revisar» se derivan de
los datos de la línea (sin datos comerciales; con
check_notey sinchecked_at). - El catálogo nace de las listas. Una línea con proveedor, referencia o
enlace se engancha a su producto (identidad: proveedor + referencia
normalizados, o nombre sin contradicciones) o lo crea en
items— la misma tabla de la que cuelgan las guías de electrodomésticos. También se puede dar de alta un producto a mano desde la vista de catálogo: repetir proveedor + referencia se rechaza con un 409 que nombra al producto existente. No hay deduplicación por nombre ni fusión a mano — limpiar duplicados será automático cuando toque, no una tarea de nadie.
Qué comparte con el resto de la suite
- Casas =
properties(las sincroniza el panel; la herramienta solo las lee). - Apartados =
rooms(los dormitorios se reconocen porroom_type = 'bedroom'o por nombre; la expansión de plantillas los resuelve por posición, no por nombre). - Catálogo =
items, ampliada consupplieryunit_price_estimate(migración 282) y concategoryde texto libre (285), el mismo campo que llevan líneas y plantillas; la subcategoría va enmodel. Community sigue usando sucategory_id. - Dominio propio (migración 280):
shopping_lists,shopping_list_items,setup_templates,setup_template_itemsyshopping_list_template_applications.
Plantillas
Cada ítem de plantilla lleva su destino (un apartado con nombre, o cada dormitorio) y su regla de cantidad (por casa, por habitación, por persona, por baño). Al aplicarla sobre una casa, la expansión usa los datos reales de la casa (dormitorios, capacidad, baños), crea los apartados que falten y deja registro de la aplicación. Aplicar una plantilla nunca toca listas ya hechas; los ítems con aviso (check_note) entran marcados como
pendientes de revisión.
Paridad con el prototipo
La herramienta replica el prototipo validado. Lo que aún NO está, y se decide más adelante: elegir apartados y plantillas al dar de alta la casa (aquí las casas vienen del panel), corregir habitaciones/ocupación/baños desde la herramienta cuando el panel los trae vacíos (mientras, el diálogo de aplicar avisa de qué valores se están suponiendo), y el drawer de alta con buscador primero y multi-añadido sin cerrar.API
Endpoints bajo/homes, gateados por tool-homes (viewer para leer,
editor para toda mutación). Detalle en
apps/backend/src/homes/; la lógica de expansión y de identidad de catálogo
está en funciones puras con specs (templates/expand.ts,
shopping-lists/apply-plan.ts, catalog/catalog-match.ts).