# POS-FIX-9: Implementer Evidence

## Problema
1. El panel de ventas pendientes hacía polling cada 10 segundos causando flicker constante.
2. Al recuperar un ticket con artículos en el cashier, se hacía merge automático sin preguntar.

## Cambios realizados

### Frontend
**`project/apps/pos/src/app/(terminal)/page.tsx`**
- **Eliminado polling de 10s** — solo refresh manual via botón
- **Nueva función `doRecoverSale(sale)`** — recuperación real (reutilizada por parkAndRecover y merge)
- **Nueva función `parkAndRecover()`** — aparca ticket actual y recupera venta seleccionada
- **Nueva función `mergeRecoveredItems()`** — añade items recuperados al ticket actual
- **Modificada `recoverSale(sale)`** — si cart tiene items, abre merge dialog en vez de auto-merge
- **Nuevo estado `mergePendingSale`** — almacena la venta a recuperar para el diálogo
- **Diálogo de merge** con 3 opciones:
  - 💾 "Dejar actual pendiente y recuperar" — parkAndRecover()
  - ➕ "Añadir al ticket actual" — mergeRecoveredItems()
  - "Cancelar" — cierra diálogo sin acción

## Bug corregido
Los botones del diálogo no funcionaban porque `recoverSale()` seteaba `recoveringSaleId` al abrir el diálogo, lo que habilitaba `disabled={recoveringSaleId !== null}` en los botones del diálogo.
- **Fix**: ya no se setea `recoveringSaleId` al abrir el diálogo (solo se setea durante la carga real)
- **Fix**: los handlers de los botones ahora usan `.catch()` para mostrar errores

## Verificación
- [x] TypeScript compila sin errores
- [x] Polling 10s eliminado del panel de ventas pendientes
- [x] Diálogo de merge visible al recuperar con cart items
- [x] Tres opciones funcionando correctamente
- [x] Botones no deshabilitados al abrir diálogo
