# TICKET-LOGO — Implementer Report ## Feature **ID:** TICKET-LOGO **Title:** TPV ticket header: allow custom text or logo upload ## Cambios Realizados ### 1. Migration (nueva) **Archivo:** `project/migrations/063_pos_store_logo_url.js` - Agrega columna `logo_url` (text, nullable) a `pos_stores` ### 2. Domain Types **Archivo:** `project/src/modules/pos/domain/pos-sale.ts` - Agregado `logoUrl: string | null` a interface `PosReceipt` ### 3. Build Receipt **Archivo:** `project/src/modules/pos/application/build-pos-receipt.ts` - Query SQL incluye `store.logo_url` - Receipt incluye `logoUrl` del store - `buildPosReturnReceipt` propaga `logoUrl` ### 4. API Routes **Archivo:** `project/src/modules/pos/api/pos.routes.ts` - POST `/pos/admin/stores`: acepta `logoUrl` (URL válida, max 500) - PATCH `/pos/admin/receipt-settings`: actualiza `logo_url` ### 5. Admin UI **Archivo:** `project/apps/admin/src/app/(dashboard)/pos/page.tsx` - Interface `ReceiptSettings` incluye `logoUrl` - Campo input para URL del logo - Empty state incluye `logoUrl: ''` ### 6. POS Receipt Modal **Archivo:** `project/apps/pos/src/components/ReceiptModal.tsx` - Logo usa `receipt.logoUrl ?? '/images/logo-main.png'` ### 7. POS Types **Archivo:** `project/apps/pos/src/types/checkout.ts` - `PosReceipt` interface incluye `logoUrl` ## Archivos Modificados/Creados 1. `project/migrations/063_pos_store_logo_url.js` (nuevo) 2. `project/src/modules/pos/domain/pos-sale.ts` 3. `project/src/modules/pos/application/build-pos-receipt.ts` 4. `project/src/modules/pos/api/pos.routes.ts` 5. `project/apps/admin/src/app/(dashboard)/pos/page.tsx` 6. `project/apps/pos/src/components/ReceiptModal.tsx` 7. `project/apps/pos/src/types/checkout.ts` ## Testing Recomendado 1. Admin: crear/editar store con logoUrl → guardar 2. POS: crear venta → receipt muestra logo custom 3. POS: store sin logo → usa default `/images/logo-main.png` 4. Devolución: receipt muestra logo del store ## Complejidad: Medium ## Riesgo: Low ## Impacto: UX mejorada en tickets TPV