Skip to main content

Customer Back Office (Devoluciones)

1. Descripción general

customer-back-office-returns-portal es el back-office interno de devoluciones de Hawkers. El package.json lo nombra customer-back-office y no incluye campo description, por lo que esta descripción se basa en lo observado en el código.

Es el panel con el que los equipos internos gestionan las devoluciones que llegan desde el portal del cliente, desde tienda física o desde ATC. El menú lateral tiene cinco secciones (Devoluciones, Métodos, Motivos, Usuarios y Almacenes), con el alta manual colgando de la primera:

ÁreaRutaQué permite
Devoluciones/returnsListado paginado con filtros y exportación a CSV; detalle con edición línea a línea, cambio de estados, historial de cambios y descarga del PDF en 7 idiomas
Alta manual/returns/createCrear una devolución en nombre del cliente en 4 pasos (pedido → artículos → método → confirmación)
Métodos/methodsCRUD de métodos de devolución: países, precio, moneda, activación y textos traducidos con editor enriquecido
Motivos/reasonsCRUD de motivos de devolución y sus traducciones
Usuarios/usersAlta y edición de usuarios de Auth0 con su rol y almacén asignado
Almacenes/warehousesAsignación de sources (canales de venta) a cada almacén de devolución

La visibilidad de cada área depende del rol del usuario en Auth0 (ADMIN, ATC, STORE): ver Roles y control de acceso.

Igual que el portal del cliente, toda la lógica de negocio y la persistencia viven en robo-api. Este proyecto añade tres capacidades propias: autorización por rol, disparo de journeys de Marketing Cloud en los puntos de aprobación y creación, y la generación de enlaces firmados al PDF que renderiza el portal del cliente.

Repositorio: https://github.com/hawkersco/customer-back-office-returns-portal

:::info Relación con el portal del cliente Ambos proyectos son frontales de la misma API y comparten el secreto PDF_SIGNATURE_SECRET: el back-office firma la URL del PDF y la sirve el portal del cliente en https://returns.hawkersco.com/doc/…. Ver Integraciones. :::

2. Información técnica

PropiedadValor
Nombre del paquetecustomer-back-office (el repositorio se llama customer-back-office-returns-portal)
Versión0.1.0 (el versionado real es el BUILD_NUMBER de Jenkins)
FrameworkNext.js ^16.0.8App Router con React Server Components
React19.2.6
TypeScript^6 (strict: true)
Node.nvmrc22; imagen Docker node:22-alpine (coinciden)
Gestor de paquetesnpm — npm ci --legacy-peer-deps en la imagen
Autenticación@auth0/nextjs-auth0 ^4.13.2 — sesión con cookie, roles en el ID token
Datos en clienteSWR ^2.4.1 (useSWR + useSWRMutation) con fallbackData renderizado en servidor
Tablas@tanstack/react-table ^8.21.2 — paginación y filtrado en servidor
EstilosTailwind CSS v4 + shadcn/ui (estilo new-york, base neutral) sobre Radix UI
Formulariosreact-hook-form + zod v4 con superRefine para reglas de negocio
Editor de textosreact-simple-wysiwyg (negrita, cursiva, subrayado, lista, enlace y edición de HTML)
Fechasdate-fns + react-day-picker (filtro de rango de fechas)
Idioma de la UIEspañol, fijo — un único diccionario en constants/dictionary.ts, sin next-intl
TestsNo hay tests en el repositorio. El markup expone atributos data-test-id para automatización
FormateoPrettier (singleQuote: false, semi: true, trailingComma: "none") + ESLint 9
Puerto80 en dev y start (next dev/start -p 80)

3. Estructura del proyecto

Alias de TypeScript: @/* → raíz del proyecto (las carpetas de dominio están al mismo nivel que app/, no dentro).

customer-back-office-returns-portal/
├── app/
│ ├── layout.tsx # Root layout (Geist, Toaster)
│ ├── page.tsx # Redirige a /returns
│ ├── role-provider.tsx # RoleContext con los roles del usuario
│ ├── (dashboard)/ # Grupo de rutas con sidebar y sesión obligatoria
│ │ ├── layout.tsx
│ │ ├── returns/ # listado, [id], create/
│ │ ├── methods/ # listado, [id]
│ │ ├── reasons/ # listado, [id]
│ │ ├── users/ # listado, [id]
│ │ ├── warehouses/
│ │ └── unauthorized/
│ ├── api/ # ~30 route handlers (BFF) + export CSV + token
│ └── test/page.tsx # Página estática para el certificado de Google
├── actions/ # Acceso a robo-api por dominio (returns, methods, reasons, users…)
├── components/
│ ├── admin/ # sidebar, data-table genérica, badges, selectores
│ ├── returns/ methods/ reasons/ users/ warehouses/
│ ├── rich-text-editor/
│ └── ui/ # primitivas shadcn
├── constants/ # dictionary, roles, routes, links, origins, mc-actions…
├── context/RefundContext.tsx # Estado del alta manual de devoluciones
├── hooks/ # SWR + formularios (useReturns, useReturnForm, useEditMethod…)
├── lib/ # auth0, fetchAuth, crypto, journeys, marketingCloud, utils
├── services/api.ts # Fetchers de SWR (lado cliente)
├── types/ # ~25 tipos de dominio
├── proxy.ts # Sesión Auth0 + roles + propagación del token
├── k8s/deployment.yaml
├── Dockerfile
└── Jenkinsfile

4. Documentación de esta sección

PáginaContenido
Roles y control de accesoAuth0, proxy.ts, roles, rutas protegidas y propagación del token
ArquitecturaRSC + server actions + route handlers + SWR, diccionario y tablas
Gestión de devolucionesListado, filtros, CSV, detalle, matriz de editabilidad, acciones masivas y logs
Alta manual de devolucionesEl wizard de 4 pasos de /returns/create
Catálogos y administraciónMétodos, motivos, usuarios y almacenes
Integracionesrobo-api, journeys de Marketing Cloud y PDF firmado compartido
Configuración y despliegueVariables de entorno, local, Docker, Jenkins y GKE
Notas técnicasHallazgos, deuda técnica y consideraciones