Plan — InventoryPilot

Volver a README · 08 Proyectos

Objetivo: construir una API multi-tenant de inventario que controle productos, movimientos de stock y dispare alertas automáticas cuando un producto baja del mínimo.

Estado: planificación. Proyecto de cierre en 4 semanas.

1. Alcance

  1. Registro e inicio de sesión con JWT.
  2. Workspaces con miembros y roles.
  3. CRUD de proveedores, almacenes y productos.
  4. Movimientos de stock (entrada, salida y ajuste).
  5. Cálculo de stock por producto y almacén.
  6. Reglas de alerta de stock bajo.
  7. Webhooks de salida con firma HMAC.
  8. Reportes de rotación y valor de inventario.
  9. Job programado que revisa stock y dispara alertas.

2. Fuera de alcance

  • Facturación electrónica.
  • Compras y órdenes de compra completas.
  • Integración con marketplaces.
  • App móvil nativa.
  • Escaneo de códigos de barras.

3. Arquitectura

Next.js (dashboard)
        │
        ▼
API Fastify ──────────────► PostgreSQL
        │
        ├── Cron (node-cron) → revisa stock → alert_events
        │
        └── Webhook outbound (HMAC) → sistemas externos

4. Modelo de datos

TablaCampos principales
usersid, email, password_hash, created_at
workspacesid, name, owner_id, created_at
workspace_membersworkspace_id, user_id, role
api_keysid, workspace_id, name, key_hash
suppliersid, workspace_id, name, contact
warehousesid, workspace_id, name, location
productsid, workspace_id, sku, name, price_cents, cost_cents, min_stock
stock_movementsid, product_id, warehouse_id, type, quantity, reason, created_by, created_at
stock_levelsproduct_id, warehouse_id, quantity
alert_rulesid, workspace_id, product_id, threshold, channel, active
alert_eventsid, alert_rule_id, triggered_at, payload, status
webhook_endpointsid, workspace_id, url, secret, events

5. Componentes

ComponenteResponsabilidad
AuthRegistro, login y JWT
WorkspacesAislamiento de datos por workspace
ProductsCRUD de productos con SKU y stock mínimo
MovementsRegistrar entradas, salidas y ajustes
Stock levelsMantener cantidad actual por producto/almacén
Alert rulesDefinir umbral y canal de alerta
SchedulerRevisar stock periódicamente
WebhooksEnviar alertas firmadas a sistemas externos
ReportsRotación y valor del inventario

6. Hitos

SemanaEntregableCriterio de cierre
1Auth + multi-tenant + CRUD de proveedores/almacenes/productosSe crea un workspace, un producto y un proveedor
2Movimientos de stock + stock levels + alertas + webhooksUna salida bajo el mínimo genera una alerta
3Reportes + job programado + dashboardEl cron detecta stock bajo y el reporte muestra rotación
4Docker + CI/CD + deploy + docs + demoURL pública con alerta automática y CI verde

7. Criterios de aceptación

  • Registro e inicio de sesión.
  • Workspace con al menos un miembro.
  • CRUD de proveedores, almacenes y productos.
  • Registrar entrada y salida de stock.
  • El stock actual se calcula correctamente.
  • Una salida que baja del mínimo genera una alerta.
  • La alerta se envía por webhook con firma HMAC.
  • Se genera un reporte de inventario.
  • Tests en backend.
  • CI verde.
  • README con capturas y URL de demo.

8. Decisiones técnicas

  • JavaScript + Fastify: API liviana y rápida para CRUD intensivo.
  • PostgreSQL: integridad de movimientos y consultas de reportes.
  • Movimientos inmutables: el stock se corrige con un movimiento inverso, no editando el historial.
  • stock_levels materializado: evita sumar todo el historial en cada consulta.
  • Cron + webhooks: alertas simples y compatibles con cualquier sistema.
  • JSDoc + // @ts-check: tipado sin migrar a TypeScript.

9. Riesgos

RiesgoMitigación
Condiciones de carrera en stockTransacciones y bloqueo por producto
Alertas duplicadasVentana de silencio por regla
Webhooks caídosReintentos con backoff
Multi-tenant mal aisladoworkspace_id obligatorio en todas las consultas
Tiempo insuficientePriorizar CRUD + movimientos + alerta y dejar reportes como segundo paso

10. Próximo paso

  1. Inicializar monorepo y Git.
  2. Crear el esquema de base de datos y las migraciones.
  3. Implementar auth y workspaces.
  4. Crear el CRUD de productos y almacenes.
  5. Primer commit con README y CI mínima.

Enlaces