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 = 1como proveedor interno: en ese caso el plazo se lee por sucursal (t_entrega_aviadores,t_entrega_multi). - Para cualquier otro proveedor, aplicar
t_entregaa 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.