Spec S-0042 · v1 · BORRADOR
Cupones de descuento en el checkout
3 requisitos · 6 criterios · 5 tareas (supabase-db, backend-api, frontend-nextjs, qa-tests, reviewer)
▶Requisitos y criterios
R1Los cupones viven en la base y solo los lee el servidor.
R1.1npx supabase db reset aplica la migración cupones sin errores
R1.2npm test -- tests/db/cupones-rls.test.ts en verde: un usuario anónimo no puede leer cupones
R2El checkout valida el cupón en el servidor.
R2.1npm test -- tests/api/cupones-validar.test.ts en verde: cupón vencido → 422, cupón válido → 200 con el descuento
R2.2npx tsc --noEmit sin errores
R3Quien compra ve el descuento antes de pagar.
R3.1Smoke en Chrome: con el cupón ACME10, el total baja un 10% y aparece la línea «Descuento»
R3.2Smoke a 390 px: el campo de cupón entra sin scroll horizontal
▶Plan de tareas
T1supabase-dbTabla cupones, migración y RLS
R1.1, R1.2
T2backend-apiEndpoint POST /api/cupones/validar
R2.1, R2.2 · depende de T1
T3frontend-nextjsCampo de cupón y línea de descuento en el checkout
R3.1, R3.2 · depende de T2
T4qa-testsVerificación contra los criterios, desktop y 390 px
R1.1, R1.2, R2.1, R2.2, R3.1, R3.2 · depende de T3
T5reviewerRevisión del diff: validación en servidor y RLS
R1.2, R2.1 · depende de T3



