Saltar a contenido

RF-008 — Administración de listas de precios y resolución de precio por región

Estado En producción (main, staging)
Tipo Widget de admin + rutas API propias
Ubicación src/admin/widgets/price-list-variant.tsx · src/api/admin/custom/price-lists/current/ · src/api/store/custom/products/[id]/
Depende de Módulo Pricing — RF-000

Requisito

Administrar las variantes incluidas en una lista de precios desde su propia página de detalle, con búsqueda sobre el catálogo, visibilidad del precio de lista, del precio especial y del stock, y alta o baja masiva de variantes. Consultar las listas de precios vigentes en el día según la zona horaria de la operación. Exponer al storefront el producto con su precio ya calculado por región.

Solución adoptada

Extender el detalle de la lista de precios (price_list.details.after) con un widget que opera sobre el Admin SDK, y agregar dos rutas propias para las consultas que la API nativa no resuelve en un solo llamado.

flowchart LR
    subgraph ADM[Dashboard]
        W[Widget de variantes<br/>price_list.details]
        R1["/admin/custom/price-lists/current"]
    end
    subgraph SF[Storefront]
        R2["/store/custom/products/:id"]
    end
    W -->|priceList.prices · productVariant.list| PL[(Price List)]
    W -->|batchPrices: alta y baja| PL
    R1 -->|listPriceLists · vigencia del día| PL
    R2 -->|price_set + contexto de región| PR[(Pricing)]
    PR --> V[Variantes con calculated_price]

Funciones

Función Superficie Detalle
Listado de variantes de la lista Widget Producto, variante, SKU, opciones, precio especial, precio original y stock disponible
Búsqueda e incorporación Widget Búsqueda sobre el catálogo, selección múltiple con precio por variante y alta por lote
Edición y baja Widget Modificación del precio especial y remoción de variantes por lote
Listas vigentes hoy GET /admin/custom/price-lists/current Listas activas que inician o finalizan en el día, con paginación y orden por fecha
Producto con precio calculado GET /store/custom/products/:id Producto y variantes con calculated_price resuelto para la región indicada

Reglas de negocio

  • Calcular la vigencia del día en la zona horaria de la operación —America/Asuncion por defecto, parametrizable por consulta— y no en UTC.
  • Considerar vigente la lista activa cuyo inicio o fin cae dentro del día evaluado.
  • Operar altas y bajas de precios por lote sobre la lista, en una sola llamada por operación.
  • Resolver el precio del storefront con el contexto de región, devolviendo el producto completo aunque no existan conjuntos de precio asociados.

Ajustes de presentación

Dos widgets de inyección de CSS complementan las pantallas nativas, sin lógica asociada:

Widget Zona Efecto
price-list-widen-title-col price_list.details.after Ensanchar la columna de título para admitir nombres largos de producto
product-desc-shortener product.details.after Limitar la descripción del producto a tres líneas

Criterios de aceptación

# Criterio
1 Buscar una variante por título o SKU y agregarla a la lista con su precio especial
2 Visualizar precio original, precio especial y stock de cada variante incluida
3 Quitar varias variantes de la lista en una sola operación
4 Obtener las listas vigentes del día con el corte horario de Asunción
5 Devolver al storefront el producto con calculated_price por región

Limitaciones conocidas

  • Depender de la estructura de respuesta del módulo Pricing según versión: la ruta de listas vigentes contempla varias formas de retorno para tolerar el cambio.
  • Mantener las rutas de scaffold /store/custom y /admin/custom sin uso funcional.