6.8 KiB
6.8 KiB
POS Micro - Analisis de Gaps vs ERP Core y Odoo POS
Resumen Ejecutivo
Este documento analiza las diferencias entre POS Micro (producto MVP), ERP Core (arquitectura base) y Odoo POS (referencia de mercado) para identificar gaps y oportunidades de mejora.
1. Comparativa de Arquitectura
ERP Core (Express + TypeScript)
- Framework: Express.js con TypeScript
- ORM: Raw PostgreSQL queries con Pool
- Autenticacion: JWT + Bcrypt + RBAC completo
- Validacion: Zod schemas
- Multi-tenancy: Schema isolation con RLS
- Modulos: 13 modulos completos (auth, users, companies, partners, inventory, products, warehouses, pickings, lots, financial, purchases, sales, crm, hr, projects, system)
POS Micro (NestJS + TypeORM)
- Framework: NestJS con TypeScript
- ORM: TypeORM
- Autenticacion: JWT + Bcrypt + PIN simplificado
- Validacion: class-validator decorators
- Multi-tenancy: tenant_id column (simplificado)
- Modulos: 5 modulos minimos (auth, products, categories, sales, payments)
Odoo POS (Python + ORM)
- Framework: Odoo 18 (Python)
- ORM: Odoo ORM
- Modulos POS: 40+ tablas/modelos interconectados
- Funcionalidades avanzadas: Restaurant, Loyalty, IoT, Multiple payment terminals
2. Gaps Identificados
2.1 Seguridad
| Feature | ERP Core | POS Micro | Odoo POS | Gap |
|---|---|---|---|---|
| RBAC completo | ✅ | ❌ | ✅ | POS Micro solo tiene owner/cashier |
| Rate limiting | ❌ | ❌ | ✅ | Ninguno implementa |
| Audit logs | ✅ | ❌ | ✅ | POS Micro no tiene |
| Session management | ✅ | ❌ | ✅ | POS Micro no maneja sesiones de caja |
2.2 Funcionalidad POS
| Feature | ERP Core | POS Micro | Odoo POS | Gap |
|---|---|---|---|---|
| Sesiones de caja | N/A | ❌ | ✅ | Critico para control de caja |
| Cierre de caja | N/A | ❌ | ✅ | Critico para contabilidad |
| Arqueo de caja | N/A | ❌ | ✅ | Control de efectivo |
| Devoluciones | N/A | Parcial | ✅ | Solo cancelacion same-day |
| Descuentos globales | N/A | ❌ | ✅ | Solo descuento por linea |
| Impuestos configurables | N/A | Hardcoded 16% | ✅ | No flexible |
| Multi-tarifa | N/A | ❌ | ✅ | Un precio por producto |
| Combos/Kits | N/A | ❌ | ✅ | No soportado |
| Variantes producto | N/A | ❌ | ✅ | No soportado |
2.3 Integraciones
| Feature | ERP Core | POS Micro | Odoo POS | Gap |
|---|---|---|---|---|
| Inventario | ✅ Completo | Basico | ✅ Completo | Sin lotes/series |
| Contabilidad | ✅ | ❌ | ✅ | No genera asientos |
| Facturacion | ❌ | ❌ | ✅ | No hay CFDI |
| ❌ | Tabla vacia | ❌ | Preparado pero no implementado | |
| Impresoras | ❌ | ❌ | ✅ | No hay soporte |
| Terminal pago | ❌ | ❌ | ✅ | No integrado |
2.4 Reportes
| Feature | ERP Core | POS Micro | Odoo POS | Gap |
|---|---|---|---|---|
| Ventas del dia | ❌ | ✅ Basico | ✅ Completo | Solo totales |
| Por vendedor | ❌ | ❌ | ✅ | No soportado |
| Por producto | ❌ | ❌ | ✅ | No soportado |
| Por hora | ❌ | ❌ | ✅ | No soportado |
| Margen | ❌ | ❌ | ✅ | No soportado |
| Exportable | ❌ | ❌ | ✅ | No hay exports |
3. Correcciones Aplicadas
3.1 Frontend - Login
- Problema: Frontend enviaba
businessNamedonde backend esperabaphone - Solucion: Actualizado LoginPage para usar
phoney agregarownerNamepara registro
3.2 Frontend - Endpoints
- Problema: Endpoints no coincidian con backend
- Correcciones:
/products/favorites→/products?isFavorite=true/products/{id}/favorite→/products/{id}/toggle-favorite/sales?date=→/sales/recent?limit=50PATCH /sales/{id}/cancel→POST /sales/{id}/cancel/sales/summary/{date}→/sales/today
3.3 Frontend - Tipos TypeScript
- Problema: Tipos no alineados con entidades backend
- Correcciones:
currentStock→stockQuantityminStock→lowStockAlertdiscount→discountAmount/discountPercenttax→taxAmountchange→changeAmount- Agregado
SubscriptionStatustype
3.4 Frontend - Cart Store
- Problema: Calculo de descuentos no funcionaba
- Solucion: Actualizado para aplicar
discountPercentcorrectamente al subtotal
4. Gaps Pendientes (Roadmap)
Fase 2 - Funcionalidad Core
- Sesiones de caja: Apertura, cierre, arqueo
- Devoluciones completas: No solo same-day
- Descuentos globales: Por orden, no solo por linea
- Impuestos configurables: Permitir diferentes tasas
Fase 3 - Integraciones
- WhatsApp Business: Tickets por WhatsApp
- Facturacion CFDI: Integracion con PAC
- Impresoras termicas: Soporte ESC/POS
- Terminales de pago: Integracion basica
Fase 4 - Reportes
- Reporte por producto: Top ventas, margenes
- Reporte por periodo: Semanal, mensual
- Exportacion: CSV, PDF
5. Patrones de ERP Core a Adoptar
5.1 Base Service Pattern
// ERP Core tiene un servicio base reutilizable
abstract class BaseService<T, CreateDto, UpdateDto> {
// findAll con paginacion, busqueda y filtros
// findById, findByIdOrFail
// exists, softDelete, hardDelete
// withTransaction
}
Recomendacion: Implementar en POS Micro para consistencia
5.2 Error Handling
// ERP Core usa clases de error personalizadas
class ValidationError extends AppError { }
class NotFoundError extends AppError { }
class ConflictError extends AppError { }
Recomendacion: Adoptar mismo patron en NestJS
5.3 Audit Fields
// ERP Core tiene campos de auditoria consistentes
created_at, created_by
updated_at, updated_by
deleted_at, deleted_by
Recomendacion: Agregar created_by, updated_by a todas las tablas
6. Funcionalidades de Odoo a Considerar
6.1 Session Management (Critico)
- Apertura de sesion con saldo inicial
- Estado: opening_control → opened → closing_control → closed
- Validacion de diferencias de caja
- Asientos contables automaticos
6.2 Loyalty Programs (Futuro)
- Puntos por compra
- Recompensas configurables
- Tarjetas de cliente
- Cupones/Promociones
6.3 Restaurant Mode (Futuro)
- Mesas/pisos
- Ordenes abiertas
- Impresion a cocina
- Division de cuentas
7. Conclusion
POS Micro esta correctamente posicionado como un MVP minimo para el mercado mexicano informal (vendedores ambulantes, tienditas, fondas). Las correcciones aplicadas resuelven los problemas criticos de comunicacion frontend-backend.
Los gaps identificados son caracteristicas para fases futuras, no bloquean el lanzamiento del MVP que cumple con:
- ✅ Registro/Login simple con PIN
- ✅ Catalogo de productos (max 500)
- ✅ Ventas rapidas (max 1000/mes)
- ✅ Multiples formas de pago
- ✅ Reportes basicos del dia
- ✅ Offline-first PWA
Documento generado: 2025-12-08 Version: 1.0