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]
Usuariocustom (AbstractBaseUser, email como USERNAME_FIELD) - [x]
Sucursal+UsuarioEmpresaSucursal+ claseRolcon 6 roles - [x] CRUD
Sucursal—GET/POST /api/empresas/sucursales/, soft-delete - [x] Wizard onboarding —
GET/POST /api/empresas/onboarding/ - [x] Auth segura:
refreshen cookie httpOnly,accessen 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 + camporol - [x] Permisos base en
core_api/permissions.py(IsSuperAdmin, HasTenantAccess, roles) - [x]
Suscripcion+FeatureFlag—GET /api/suscripciones/mi-plan/ - [x]
RequireFeature(feature_name)— factory de DRF Permission class para feature flags - [x]
Categoria,PlantillaRubro,AtributoConfig— CRUD enapp_inventario - [x]
Productocon JSONBespecificaciones+ índice GIN — CRUD con soft-delete - [x]
StockSucursal—GET /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/+UserRateThrottleglobal (100/min) +NUM_PROXIES=1 - [x]
config/settings/testing.py— settings de tests con throttle deshabilitado;TenantAPIClientconforce_authenticatey_encode_data;cache.clear()en todos lossetUp - [x]
MovimientoStock— modelo + migración +ajustar_stockcontransaction.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, campodiferencia, filtro?sucursal= - [x] 106 tests backend — CI verde, 0 regresiones
- [x] Frontend shell: React + Vite + Tailwind + PWA + design system
- [x] Auth frontend:
authStoreZustand,api.tsaxios con refresh automático,LoginPage, rutas protegidas - [x] Wizard onboarding frontend — 3 pasos, guards de ruta,
estadoOnboardingen 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 |