Saltar a contenido

RF-003 — Ficha de producto: variante enlazable, precio especial y stock por sucursal

Estado Implementado
Tipo Ruta propia + componentes y utilidades de producto
Ubicación app/[countryCode]/(main)/products/[handle]/[[...variantId]]/ · src/modules/products/components/ · src/lib/util/variant-helpers.ts · src/lib/util/get-precentage-diff.ts
Depende de RF-000 · metadata de variante provista por Medusa

Requisito

Permitir compartir el enlace de una variante concreta y que la ficha abra con esa variante ya seleccionada; exhibir el precio especial junto al precio normal con su porcentaje de descuento; y mostrar al cliente la disponibilidad de la variante en cada sucursal, distinguiendo el retiro inmediato del plazo de reposición.

Solución adoptada

Reemplazar el parámetro de consulta del starter por una ruta con segmento opcional products/[handle]/[[...variantId]], y derivar precio y disponibilidad de la metadata que Medusa publica por variante.

flowchart TD
    U[/products/handle/variantId/] --> V[Variante preseleccionada]
    V --> P[Precio: normal · especial · % de descuento]
    V --> M{metadata.supplier_id}
    M -->|1 · proveedor interno| S1[t_entrega_aviadores<br/>t_entrega_multi]
    M -->|otro · proveedor externo| S2[t_entrega para ambas sucursales]
    S1 --> D[Disponibilidad por sucursal]
    S2 --> D
    V --> DESC[Descripción propia de la variante]

Funciones

Función Detalle
Enlace por variante Segmento catch-all opcional; la ficha abre con la variante indicada y la URL acompaña el cambio de selección
Selección de variantes Mapa de opciones a variante y verificación de stock por combinación (variant-helpers.ts)
Descripción por variante Texto propio de la variante seleccionada, cuando existe
Precio con descuento Precio normal, precio especial y porcentaje calculado; distintivo de descuento también por tipo de precio OFERTA
Disponibilidad por sucursal Estado en Aviadores del Chaco y Shopping Multiplaza, con retiro inmediato o plazo en horas
Galería, pestañas y relacionados Provistos por la plataforma base

Reglas de negocio

  • Interpretar supplier_id = 1 como proveedor interno: en ese caso el plazo se lee por sucursal (t_entrega_aviadores, t_entrega_multi).
  • Para cualquier otro proveedor, aplicar t_entrega a ambas sucursales.
  • Considerar retiro inmediato el plazo igual a cero, únicamente en el caso del proveedor interno.
  • Tratar la metadata faltante como plazo cero y omitir el bloque de disponibilidad si la variante no trae metadata.
  • Exhibir el distintivo de descuento solo cuando el precio especial es menor que el normal, o cuando el tipo de precio es OFERTA.

Dependencia de datos

La ficha depende de que Medusa publique en la metadata de cada variante: supplier_id, t_entrega, t_entrega_aviadores, t_entrega_multi, stock_aviadores y stock_multiplaza. Esa carga corresponde a la integración de catálogo, externa a este repositorio.

Criterios de aceptación

# Criterio
1 Compartir el enlace de una variante y abrir la ficha con esa variante seleccionada
2 Reflejar en la URL el cambio de variante sin recargar la página
3 Exhibir precio normal, precio especial y porcentaje de descuento cuando corresponde
4 Mostrar la disponibilidad en las dos sucursales, con retiro inmediato o plazo en horas
5 Omitir el bloque de disponibilidad ante metadata ausente, sin error visible

Limitaciones conocidas

  • Fijar las dos sucursales en el código, por nombre: incorporar una tercera exige modificar componentes.
  • Identificar la sucursal por coincidencia de texto en su nombre (aviadores, central, multiplaza), no por identificador.
  • Interpretar como plazo cero toda metadata ausente o no numérica, lo que puede exhibir un retiro inmediato inexistente.