60 lines
2.0 KiB
Markdown
60 lines
2.0 KiB
Markdown
# 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
|