1.9 KiB
1.9 KiB
TICKET-LOGO — Design
Feature
ID: TICKET-LOGO Title: TPV ticket header: allow custom text or logo upload
Solución Propuesta
Opción A: URL manual (simpler, menor riesgo)
- Agregar campo
logo_urlapos_stores(nullable, max 500 chars) - Actualizar admin para permitir editar logo URL
- ReceiptModal muestra
receipt.logoUrl ?? '/images/logo-main.png'
Opción B: Upload de imagen (más complejo)
- Crear tabla
pos_store_assetso similar - Endpoint de upload con storage (S3/local)
- Admin con file picker
- ReceiptModal con URL dinámica
Recomendación: Opción A
Rationale:
- Risk: low
- Complejidad: mínima
- Funcionalidad: equivalente para el usuario
- Permite logo custom sin infraestructura de upload
Cambios Requeridos
| Componente | Archivo | Cambio |
|---|---|---|
| Migration | project/migrations/XXX_pos_store_logo.js |
Agregar columna logo_url |
| Route | src/modules/pos/api/pos.routes.ts |
Agregar al schema de store |
| Build receipt | src/modules/pos/application/build-pos-receipt.ts |
Incluir logoUrl en receipt |
| Types | PosReceipt type |
Agregar logoUrl optional |
| Admin | apps/admin/src/app/(dashboard)/pos/page.tsx |
Campo URL para logo |
| Receipt UI | apps/pos/src/components/ReceiptModal.tsx |
Mostrar logo custom |
Migration (pseudo-code)
ALTER TABLE pos_stores ADD COLUMN logo_url TEXT NULL;
COMMENT ON COLUMN pos_stores.logo_url IS 'URL del logo custom para tickets (nullable, fallback a /images/logo-main.png)';
ReceiptModal Change
<img
src={receipt.logoUrl ?? '/images/logo-main.png'}
alt="Logo"
className="h-16 object-contain"
/>
Testing
- Crear store sin logo → usa default
- Guardar logo URL en store → aparece en receipt
- Receipt con logo custom imprime correctamente
Gates
- reviewer: PENDING
- security: PENDING
- qa: PENDING