Saltar a contenido

PROJECT_STATUS.md

Estado del Proyecto

Archivo vivo. Se sobreescribe al cierre de cada sesión. No se acumula.

Actualizado: 2026-06-28 (sesión 12 — Sprint 2 cerrado, PRs #27 #28 #29 mergeados, CI verde)


Sprint actual

Campo Valor
Sprint Sprint 2 — CERRADO
Tracker docs/sprints/SPRINT-02.md
Fase CERRADO — todas las tareas mergeadas, CI verde, tag pendiente
Estado SPRINT_02_STATUS: CERRADO
Bloqueante Ninguno

PRs mergeados a main

PR Descripción
#29 fix(security): scope bypass en ajustar stock — IDOR en sucursal_admin
#28 feat(inventario): alertas de stock bajo — endpoint + AlertasStockPage
#27 feat(inventario): MovimientosPage — historial de movimientos de stock
#26 fix(ci): throttle en tests + TenantAPIClient con force_authenticate
#25 feat(inventario): MovimientoStock — auditoría de ajustes de stock
#24 feat(auth): rate limiting en login + deuda técnica Sprint 1
#1 Documentación fundacional real de Venuo ERP
#2 Decisiones DevOps y 4 ADRs previos al Sprint 0
#3 Fix sistema de memoria persistente entre sesiones
#4 Mejora sistema de trazabilidad y persistencia entre sesiones
#5 Dockerfiles backend y frontend — Sprint 0 Tarea 1
#6 docker-compose.yml completo con todos los servicios — Sprint 0 Tarea 2
#7 Proyecto Django + django-tenants + settings divididos — Sprint 0 Tarea 5
#8 Modelo Usuario + autenticación JWT + permisos base — Sprint 0 Tarea 6
#9 Estructura de apps + healthcheck + tests — Sprint 0 Tarea 7
#10 React + Vite + Tailwind + PWA shell + design system — Sprint 0 Tarea 8
#11 Auth segura JWT + httpOnly cookie + Login UI — Sprint 0 Tarea 9
#12 CI GitHub Actions + ruff + black + fix test mock — Sprint 0 Tarea 4
#13 Nginx prod config — Sprint 0 Tarea 3
#14 README de Venuo ERP (reemplaza README del kit)
#15 MkDocs Material — sitio de documentación
#16 app_suscripciones: Suscripcion + FeatureFlag + validacion — Sprint 1 T1
#18 app_empresas: wizard onboarding + CRUD Sucursal — Sprint 1 T2
#19 app_inventario: modelos base + APIs CRUD — Sprint 1 T3
#20 Frontend wizard onboarding + guards de ruta + 40 tests — Sprint 1 T4
#22 Protocolo profesional de agentes — CLAUDE.md 9 secciones, 6 fases, subagentes QA/Security, CI local
#23 Frontend catálogo de productos — Sprint 1 T5

Módulos implementados

  • [x] Docker — Dockerfile backend (378 MB) y frontend (74 MB)
  • [x] Docker Compose completo (8 servicios, red interna, healthchecks)
  • [x] Nginx dev config, backup GFS, .env.example, .gitignore
  • [x] Nginx prod config — SPA static, proxy Django, security headers, SSL-ready
  • [x] Proyecto Django base + django-tenants + settings por entorno
  • [x] Empresa (TenantMixin) + Dominio (DomainMixin) + onboarding (PENDIENTE→WIZARD_COMPLETADO→ACTIVO)
  • [x] Usuario custom (AbstractBaseUser, email como USERNAME_FIELD)
  • [x] Sucursal + UsuarioEmpresaSucursal + clase Rol con 6 roles
  • [x] CRUD SucursalGET/POST /api/empresas/sucursales/, soft-delete
  • [x] Wizard onboarding — GET/POST /api/empresas/onboarding/
  • [x] Auth segura: refresh en cookie httpOnly, access en memoria Zustand
  • [x] POST /api/auth/token/ — login (cookie httpOnly) con rate limiting 5/min
  • [x] POST /api/auth/token/refresh/ — refresh desde cookie
  • [x] POST /api/auth/token/logout/ — blacklist + borra cookie
  • [x] GET /api/auth/me/ — datos del usuario autenticado + campo rol
  • [x] Permisos base en core_api/permissions.py (IsSuperAdmin, HasTenantAccess, roles)
  • [x] Suscripcion + FeatureFlagGET /api/suscripciones/mi-plan/
  • [x] RequireFeature(feature_name) — factory de DRF Permission class para feature flags
  • [x] Categoria, PlantillaRubro, AtributoConfig — CRUD en app_inventario
  • [x] Producto con JSONB especificaciones + índice GIN — CRUD con soft-delete
  • [x] StockSucursalGET /api/inventario/stock/, ajuste manual con scope IDOR-safe
  • [x] seed_plantilla_rubro() — activa tenant al finalizar onboarding
  • [x] validar_especificaciones() — ningún atributo libre sin declarar en PlantillaRubro
  • [x] LoginRateThrottle (5/min) en /api/auth/token/ + UserRateThrottle global (100/min) + NUM_PROXIES=1
  • [x] config/settings/testing.py — settings de tests con throttle deshabilitado; TenantAPIClient con force_authenticate y _encode_data; cache.clear() en todos los setUp
  • [x] MovimientoStock — modelo + migración + ajustar_stock con transaction.atomic() + auditoría automática
  • [x] GET /api/inventario/movimientos/ — historial con scope por rol y filtros (sucursal, producto, fechas, tipo)
  • [x] GET /api/inventario/stock/alertas/ — alertas stock bajo con scope por rol, campo diferencia, filtro ?sucursal=
  • [x] 106 tests backend — CI verde, 0 regresiones
  • [x] Frontend shell: React + Vite + Tailwind + PWA + design system
  • [x] Auth frontend: authStore Zustand, api.ts axios con refresh automático, LoginPage, rutas protegidas
  • [x] Wizard onboarding frontend — 3 pasos, guards de ruta, estadoOnboarding en store
  • [x] Catálogo de productos frontend — ProductosPage, ProductoFormPage, StockPage, guard de rol, JSONB dinámico
  • [x] MovimientosPage — historial paginado, filtros URL-shareables, guard de rol multi-rol
  • [x] AlertasStockPage — tabla con badges Sin stock / Bajo mínimo, selector de sucursal por rol
  • [x] 99 tests frontend — vitest + @testing-library
  • [x] CI — GitHub Actions: lint + tests + type-check + build en cada PR
  • [x] README de Venuo ERP
  • [x] MkDocs Material — sitio de documentación en https://venuo-6cm.pages.dev
  • [x] Protocolo profesional de agentes — CLAUDE.md 9 secciones, 6 fases, subagentes QA/Security, CI local

Sprints en progreso

Ninguno — Sprint 2 cerrado. Próximo: Sprint 3 (por planificar).


Sprints cerrados

Sprint Tag Fecha cierre
Sprint 0 — Cimientos sprint-00 2026-06-26
Sprint 1 — Onboarding + Catálogo sprint-01 2026-06-27
Sprint 2 — Inventario completo + seguridad base sprint-02 2026-06-28