# 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 |
| WhatsApp | ❌ | 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 `businessName` donde backend esperaba `phone`
- **Solucion**: Actualizado LoginPage para usar `phone` y agregar `ownerName` para 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=50`
  - `PATCH /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` → `stockQuantity`
  - `minStock` → `lowStockAlert`
  - `discount` → `discountAmount/discountPercent`
  - `tax` → `taxAmount`
  - `change` → `changeAmount`
  - Agregado `SubscriptionStatus` type

### 3.4 Frontend - Cart Store
- **Problema**: Calculo de descuentos no funcionaba
- **Solucion**: Actualizado para aplicar `discountPercent` correctamente al subtotal

## 4. Gaps Pendientes (Roadmap)

### Fase 2 - Funcionalidad Core
1. **Sesiones de caja**: Apertura, cierre, arqueo
2. **Devoluciones completas**: No solo same-day
3. **Descuentos globales**: Por orden, no solo por linea
4. **Impuestos configurables**: Permitir diferentes tasas

### Fase 3 - Integraciones
1. **WhatsApp Business**: Tickets por WhatsApp
2. **Facturacion CFDI**: Integracion con PAC
3. **Impresoras termicas**: Soporte ESC/POS
4. **Terminales de pago**: Integracion basica

### Fase 4 - Reportes
1. **Reporte por producto**: Top ventas, margenes
2. **Reporte por periodo**: Semanal, mensual
3. **Exportacion**: CSV, PDF

## 5. Patrones de ERP Core a Adoptar

### 5.1 Base Service Pattern
```typescript
// 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
```typescript
// 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
```typescript
// 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*
