Vitrina — Integración HelpU

Definición del modelo comercial y de provisión de Vitrina, alineado con Huella y Habitta: HelpU App gestiona clientes, planes y pagos; VitrinaApp es el producto que usa cada negocio (tienda pública + panel del tenant).

Integración completa (fases 1–14) · v0.1.0 · 31 de agosto de 2026
Estado: integración Vitrina cerrada (fases 1–14): comercial HelpU, provisión API, producto tenant, consola SuperAdmin, demo self-service, ciclo comercial, UX tienda suspendida, enterprise / cotización, QA, producción y documentación de usuario. Manuales: usuario · SuperAdmin · API.

1. División de responsabilidades

SistemaRolNo hace
HelpU PW Sitio comercial, checkout Wompi, formularios de alta No almacena catálogo ni pedidos de tienda
HelpU App WS comercial, empresas, planes, suscripciones, demos, SuperAdmin Vitrina, FE No impersona sesión del admin de tienda
VitrinaApp /t/{slug} tienda, /admin del negocio (productos, pedidos, config) No lista ni administra otras empresas; sin super-admin

2. Empresa en HelpU (bd_helpu)

Reutiliza el modelo existente de empresa cliente por producto (como Huella/Habitta).

Campo / conceptoUso en Vitrina
producto = vitrinaDiscriminador en planes, checkout y WS
nitIdentificador fiscal del negocio (único por producto)
nombreRazón social o nombre comercial
email, telefonoContacto comercial y admin inicial
municipio_idUbicación (DANE, mismo catálogo)
direccionOpcional en checkout
Suscripción / planVigencia, código de plan, estado de pago (en App)

Campos adicionales en formulario checkout Vitrina (fase 2):

  • store_slug — URL pública deseada (/t/{slug}), validado único en VitrinaApp
  • store_tagline — eslogan inicial (opcional)
  • admin_name — nombre del usuario administrador
  • admin_password — solo en alta nueva; o invitación por correo

3. Tenant en VitrinaApp

Cada empresa contratada = un registro tenants + al menos un users con tenant_id.

Al provisionarOrigen
tenants.slugCheckout store_slug o derivado del nombre
tenants.namenombre empresa HelpU
tenants.tagline, whatsapp, shipping_costCheckout o defaults
tenants.helpu_empresa_idPK empresa en bd_helpu
tenants.nitCopia para consultas locales
tenants.plan_codigoPlan contratado (ej. vitrina_starter)
tenants.estado_comercialdemo | activo | suspendido | cancelado
tenants.activo_hastaFin de vigencia del plan
Categoría «General»Seeder automático al crear tenant
Usuario adminemail del checkout, tenant_id, sin rol super-admin
/admin/register en VitrinaApp se deshabilitará en fase 3 cuando el alta sea solo vía HelpU (o quedará solo para entorno local de desarrollo).

4. Planes propuestos (catálogo HelpU App)

Métrica de facturación: productos activos en la tienda (análogo a unidades Habitta / alumnos Huella).

CódigoNombreProductos activosNotas
vitrina_demoDemo 30 días≤ 20Sin pago; vía POST /api/demos o trial post-checkout
vitrina_starterStarter≤ 100Negocio pequeño, 1 usuario admin
vitrina_proPro≤ 500Múltiples usuarios (fase 4 VitrinaApp)
vitrina_enterpriseEnterpriseCotizaciónrequiere_cotizacion en WS

Periodos: mensual y anual (misma estructura planes + tarifas en App).

5. Estados comerciales (tenants.estado_comercial)

EstadoTienda públicaAdminQuién lo setea
demoVisibleVisibleAlta demo HelpU
activoVisibleVisiblePOST /api/pagos/confirmar
suspendidoBanner / solo lecturaLectura limitadaSuperAdmin HelpU (mora, fin plan)
canceladoNo visible (404)BloqueadoSuperAdmin HelpU

6. Flujos

6.1 Contratación (cliente nuevo)

  1. PW: checkout.php?producto=vitrina&plan=…
  2. Consulta NIT: GET /api/empresas/consulta?producto=vitrina&nit=…
  3. Alta: POST /api/empresas con producto=vitrina → crea empresa en HelpU + tenant inactivo en VitrinaApp
  4. Pago Wompi → POST /api/pagos/confirmar → activa plan, estado_comercial=activo, correo bienvenida
  5. Cliente entra a {VITRINA_APP_URL}/admin/login

6.2 Demo / registro de interés

  1. POST /api/demos con producto=vitrina
  2. SuperAdmin aprueba → provisiona tenant demo + 30 días activo_hasta

6.3 Operación diaria

El negocio usa solo VitrinaApp. HelpU no interviene salvo soporte o cambio de plan.

7. Esquema VitrinaApp (campos nuevos en tenants)

helpu_empresa_id  BIGINT UNSIGNED NULL UNIQUE  -- FK lógica bd_helpu.empresas
nit               VARCHAR(20) NULL INDEX
plan_codigo       VARCHAR(40) NULL
estado_comercial  VARCHAR(20) DEFAULT 'demo'   -- demo|activo|suspendido|cancelado
activo_hasta      DATE NULL
provisioned_at    TIMESTAMP NULL

Se elimina users.is_super_admin del producto (super-admin solo en HelpU App).

8. API interna (fase 3)

Auth: Authorization: Bearer {HELPU_WS_TOKEN} o X-Helpu-Ws-Token (mismo token del mostrador).

MétodoRuta VitrinaAppUso
GET/api/internal/tenantsListar tenants (SuperAdmin HelpU; query q=)
GET/api/internal/tenants/consulta?nit=&email=Consultar tenant existente
GET/api/internal/tenants/slug-disponible?slug=Validar slug en checkout
POST/api/internal/tenantsCrear tenant + admin + categoría General (demo=true → 30 días activo)
PUT/api/internal/tenants/{id}Activar post-pago (activar=true, plan, periodo) o actualizar estado

HelpU App usa VitrinaAppClient contra VITRINA_APP_URL; si la API no responde, fallback a SQLite (DB_VITRINA_DATABASE).

9. Roadmap

FaseAlcanceRepos
1 DefiniciónEste documento + esquema tenantshelpU/docs/vitrina, VitrinaApp migration
2 ComercialProducto en PW, planes, checkout producto=vitrinaHelpU PW + App
3 ProvisiónAPI interna, alta post-pago, demo WS, register cerrado, correo bienvenidaHelpU App + VitrinaApp
4 Producto tenantMulti-usuario Pro+, límites productos activos, export CSV pedidos, suspendido solo lecturaVitrinaApp
5 Consola HelpUSuperAdmin tiendas Vitrina: listado, suspender, reactivar, métricasHelpU App
6 PW Go-liveBanner, menú, portafolio y docs alineados con Vitrina disponibleHelpU PW
7 Demo self-service/registro en VitrinaApp, demo 30 días vía WS, correo bienvenidaVitrinaApp + HelpU App + PW
8 Consola operativaMenú Vitrina: planes, tarifas, demos, suscripciones; KPIs en inicioHelpU App
9 Ciclo comercialvitrina_pagos, confirmación idempotente, renovación, vitrina:procesar-vencimientosHelpU App + VitrinaApp
10 UX tienda públicaBanner suspendido (solo lectura), bloqueo compras, notificación cambio estado pedido, badge pedidos pendientes en adminVitrinaApp
11 Enterprise / cotizaciónGate planes Vitrina (cobertura productos), cupo en consulta empresa, contacto prefill, checkout Wompi producto=vitrinaHelpU PW + App
12 QA / E2ETests Feature App + VitrinaApp, smoke tools/test-vitrina-ws.php, checklist manualHelpU App + VitrinaApp + PW
13 ProducciónDominio vitrina.helpu.com.co, token compartido, cola correos, cron, vitrina:verificar-produccionHelpU PW + App + VitrinaApp
14 Cierre docManuales usuario y SuperAdmin, API técnica, decisiones cerradaspw/docs/vitrina

13. Fase 13 — Producción (go-live)

URL pública acordada: https://vitrina.helpu.com.co (multi-tenant por /t/{slug}, no subdominio por cliente).

13.1 Variables por sistema

SistemaVariableValor producción
HelpU PWVITRINA_BASE_URLhttps://vitrina.helpu.com.co/ en lib/params.php
HelpU PWHELPU_WS_TOKENMismo token en los tres sistemas (generar con php -r "echo bin2hex(random_bytes(32));")
HelpU AppVITRINA_APP_URLhttps://vitrina.helpu.com.co
HelpU AppQUEUE_CONNECTIONdatabase + worker permanente
VitrinaAppAPP_URLhttps://vitrina.helpu.com.co
VitrinaAppHELPU_WS_URLhttps://app.helpu.com.co/api
VitrinaAppHELP_U_PLANES_URLhttps://www.helpu.com.co/vitrina.php#planes-vitrina
VitrinaAppVITRINA_ALLOW_PUBLIC_REGISTERfalse
VitrinaAppQUEUE_CONNECTIONdatabase + worker permanente

13.2 Cola de correos

Correos de bienvenida, pedidos y cambio de estado se encolan. En producción:

# Migrar tablas de cola (si aún no existen)
php artisan queue:table
php artisan migrate

# Worker (supervisor, systemd o servicio Windows)
php artisan queue:work --tries=3 --timeout=90

Mail recomendado: Resend (MAIL_MAILER=resend, RESEND_API_KEY) con remitente verificado notificacionesautomaticas@helpu.com.co.

13.3 Cron

En App y VitrinaApp (misma hora, sin solaparse):

* * * * * cd /ruta/App && php artisan schedule:run
* * * * * cd /ruta/VitrinaApp && php artisan schedule:run

Comando diario: vitrina:procesar-vencimientos a las 02:00 America/Bogota.

13.4 Verificación pre-deploy

# HelpU PW (desde el servidor web)
php tools/test-vitrina-produccion.php

# HelpU App
php artisan vitrina:verificar-produccion --strict

# VitrinaApp
php artisan vitrina:verificar-produccion --strict

El flag --strict convierte advertencias (debug activo, cola sync, URLs locales) en código de salida distinto de cero.

13.5 Checklist go-live

  1. DNS y TLS para vitrina.helpu.com.co apuntando al servidor VitrinaApp.
  2. Token HELPU_WS_TOKEN idéntico en PW, App y VitrinaApp.
  3. Wompi producción en params.php (claves pub_prod_ / prv_prod_).
  4. APP_DEBUG=false y APP_ENV=production en App y VitrinaApp.
  5. Worker de cola activo en ambas apps.
  6. Cron schedule:run en ambas apps.
  7. Smoke PW: php tools/test-vitrina-ws.php.
  8. Compra de prueba starter + correo de acceso + tienda /t/{slug}.

12. Fase 12 — QA y pruebas E2E

12.1 Automatizadas (PHPUnit)

RepoArchivoCubre
HelpU AppVitrinaIntegracionE2ETestWS planes → cotizar → pago; comando vencimientos
HelpU AppVitrinaCicloComercialTest, MostradorApiTestPagos idempotentes, demo WS, consulta cupo
VitrinaAppInternalTenantApiTestAPI interna: alta demo, activación, vencimientos
VitrinaAppShopCheckoutFlowTestCarrito → checkout COD → confirmación + correo
VitrinaAppShopSuspendedTest, OrderStatusNotificationTestTienda suspendida y notificaciones
# HelpU App
cd App && composer install && vendor\bin\phpunit --filter Vitrina

# VitrinaApp
cd VitrinaApp && vendor\bin\phpunit tests\Feature

12.2 Smoke manual (PW)

Con App WS activo: php tools/test-vitrina-ws.php o php tools/test-helpu-ws.php (incluye Vitrina).

12.3 Checklist manual E2E

  1. PW vitrina.php: gate nuevo / ya tengo tienda → planes → checkout Wompi (starter).
  2. PW: rango >500 o plan Enterprise → contacto con datos prellenados.
  3. VitrinaApp /t/demo-shop: compra COD y correo de pedido.
  4. Admin tienda: cambiar estado pedido → correo al cliente.
  5. HelpU App SuperAdmin: suspender tienda → banner solo lectura en tienda pública.
  6. Cron vitrina:procesar-vencimientos en App y VitrinaApp.

11. Fase 11 — Enterprise y cotización

Planes vitrina_enterprise y rangos con requiere_cotizacion (>500 productos) no permiten pago en línea: el visitante es dirigido a contacto con contexto prellenado.

ComponenteComportamiento
MetricaCupoService + VitrinaMostradorServiceConsulta empresa devuelve tope_self_service, requiere_cotizacion_por_uso, metrica_minima_pago
layout/vitrina-plans.phpParidad con Habitta: resumen empresa, auto-rango, rangos deshabilitados, bloquear_pago
helpu_planes_url_cotizacion()Enlace a contact.php con plan, rango, volumen y NIT
checkout.phpSesión Wompi con producto=vitrina y campo productos
VitrinaCicloComercialServiceRechaza confirmación si requiere_cotizacion (ya existente fase 9)

Tests: App/tests/Feature/PlanesApiTest.php (cotizar vitrina), VitrinaEmpresaConsultaTest.php.

10. Fase 10 — UX tienda pública (VitrinaApp)

Cuando estado_comercial=suspendido (p. ej. tras vencimiento en fase 9), la tienda pública permanece visible en modo consulta.

ComponenteComportamiento
ResolveTenantPermite suspendido aunque active=false; 404 solo en cancelado o inactivo no suspendido
EnsureShopWritableBloquea POST/PUT/DELETE en rutas /t/{slug} (carrito, checkout)
Layout shopBanner amarillo con enlace a HELP_U_PLANES_URL
Vistas producto / carrito / checkoutBotones de compra deshabilitados si puede_comprar=false
OrderStatusUpdatedMailCorreo al cliente cuando el admin cambia el estado del pedido
Admin navBadge con pedidos en recibido, pendiente_pago o pagado

Tests: VitrinaApp/tests/Feature/ShopSuspendedTest.php, OrderStatusNotificationTest.php.

14. Fase 14 — Documentación y cierre

Entregables de referencia para operación, soporte y desarrollo:

DocumentoAudienciaContenido
Integración HelpU (este archivo)Equipo técnicoModelo comercial, esquema, flujos, roadmap fases 1–14
Manual de usuarioDueño / staff del negocioTienda pública, panel admin, pedidos, RRHH, planes Pro
SuperAdmin consolaPersonal HelpUMenú Vitrina en App: tiendas, demos, suscripciones, catálogo
API técnicaIntegradoresWS comercial HelpU App + API interna VitrinaApp
WS HelpU AppPW / integradoresEndpoints compartidos con Huella/Habitta

Repositorios: HelpU/pw (comercial), App (WS + consola), VitrinaApp (producto tenant).

15. Decisiones cerradas

TemaDecisiónFase
App → VitrinaAppHTTP interno (VitrinaAppClient + HELPU_WS_TOKEN). Fallback SQLite (DB_VITRINA_DATABASE) solo desarrollo.3
Demo 30 díasSelf-service en /registro y bandeja SuperAdmin en App (/empresas/vitrina/demos).7
Métrica de facturaciónProductos activos contratados. Sin límite de pedidos/mes en MVP.1
URL producciónhttps://vitrina.helpu.com.co con rutas /t/{slug} (sin subdominio por cliente).13
Login adminLivewire en /admin/login (correo/contraseña) y Google OAuth (/admin/auth/google). Sin SSO centralizado en HelpU App.4
Super-admin productoSolo en HelpU App; VitrinaApp sin is_super_admin.5
Alta de tiendaCheckout Wompi PW o demo WS; /admin/register cerrado en producción.3

Fuera de alcance MVP (futuro)

  • Límite de pedidos por mes o por plan.
  • Subdominio dedicado por cliente (mitienda.helpu.com.co).
  • OAuth centralizado en HelpU App para todos los productos.
  • Pasarela Wompi embebida por tenant (hoy: contra entrega y flujo comercial HelpU).