406 lines
18 KiB
Markdown
406 lines
18 KiB
Markdown
# ANALISIS DE IMPACTO DE CAMBIOS
|
|
|
|
**Fecha:** 2025-12-18
|
|
**Fase:** 4 - Validacion
|
|
**Objetivo:** Identificar todos los objetos impactados por los cambios planificados
|
|
|
|
---
|
|
|
|
## 1. RESUMEN DE IMPACTOS
|
|
|
|
### 1.1 Metricas Generales
|
|
|
|
| Categoria | Cantidad |
|
|
|-----------|----------|
|
|
| Tablas nuevas | 26 |
|
|
| Vistas/Views | 1 |
|
|
| Vistas materializadas | 3 |
|
|
| Entidades TypeORM | 26 |
|
|
| Servicios nuevos | 28 |
|
|
| Servicios extendidos | 8 |
|
|
| Controllers | 15 |
|
|
| Paginas frontend | ~65 |
|
|
| Componentes UI | ~80 |
|
|
| Integraciones externas | 7 |
|
|
|
|
### 1.2 Impacto por Capa
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────┐
|
|
│ MATRIZ DE IMPACTO │
|
|
├─────────────────────────────────────────────────────────────┤
|
|
│ │
|
|
│ DATABASE [████████████████████████████] 100% │
|
|
│ 26 tablas, 3 mat views, 1 view │
|
|
│ │
|
|
│ BACKEND [████████████████████████████] 100% │
|
|
│ 36 services, 15 controllers, 5 middlewares │
|
|
│ │
|
|
│ FRONTEND [████████████████████████████] 100% │
|
|
│ 3 apps, ~65 pages, ~80 components │
|
|
│ │
|
|
│ INTEGRACIONES [████████████░░░░░░░░░░░░░░░░] 35% │
|
|
│ PAC, Pagos, Envios (parcialmente nuevos) │
|
|
│ │
|
|
└─────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## 2. IMPACTO EN BASE DE DATOS
|
|
|
|
### 2.1 Schemas Afectados
|
|
|
|
| Schema | Accion | Objetos |
|
|
|--------|--------|---------|
|
|
| auth | MODIFICAR | Agregar permissions, user_roles |
|
|
| core | MODIFICAR | Agregar countries, currencies, uom, sequences |
|
|
| financial | MODIFICAR | Agregar tax_groups, payment_methods |
|
|
| inventory | VERIFICAR | Ya existe, solo verificar stock_quants |
|
|
| sales | MODIFICAR | Agregar pricelists, pricelist_items |
|
|
| **retail** | **CREAR** | **26 tablas nuevas** |
|
|
|
|
### 2.2 Tablas por Schema
|
|
|
|
#### Schema: retail (NUEVO)
|
|
|
|
| Tabla | Modulo | FK Entrantes | FK Salientes |
|
|
|-------|--------|--------------|--------------|
|
|
| branches | RT-001 | cash_registers, branch_users, pos_sessions, stock_transfers(x2), stock_adjustments, supplier_orders, goods_receipts, ecommerce_orders | auth.tenants, inventory.warehouses |
|
|
| cash_registers | RT-001 | pos_sessions | auth.tenants, retail.branches |
|
|
| branch_users | RT-001 | - | auth.tenants, retail.branches, auth.users |
|
|
| pos_sessions | RT-002 | pos_orders, cash_movements, cash_closings, cash_counts | auth.tenants, retail.branches, retail.cash_registers, auth.users |
|
|
| pos_orders | RT-002 | pos_order_lines, pos_payments, loyalty_transactions, coupon_redemptions, cfdis | auth.tenants, retail.pos_sessions, core.partners |
|
|
| pos_order_lines | RT-002 | - | auth.tenants, retail.pos_orders, inventory.products |
|
|
| pos_payments | RT-002 | - | auth.tenants, retail.pos_orders |
|
|
| cash_movements | RT-007 | - | auth.tenants, retail.pos_sessions, auth.users |
|
|
| cash_closings | RT-007 | - | auth.tenants, retail.pos_sessions, auth.users |
|
|
| cash_counts | RT-007 | - | auth.tenants, retail.pos_sessions, auth.users |
|
|
| stock_transfers | RT-003 | stock_transfer_lines | auth.tenants, retail.branches(x2), auth.users(x3) |
|
|
| stock_transfer_lines | RT-003 | - | auth.tenants, retail.stock_transfers, inventory.products |
|
|
| stock_adjustments | RT-003 | stock_adjustment_lines | auth.tenants, retail.branches, auth.users(x2) |
|
|
| stock_adjustment_lines | RT-003 | - | auth.tenants, retail.stock_adjustments, inventory.products |
|
|
| loyalty_programs | RT-005 | membership_levels, loyalty_transactions, customer_memberships | auth.tenants |
|
|
| membership_levels | RT-005 | customer_memberships | auth.tenants, retail.loyalty_programs |
|
|
| loyalty_transactions | RT-005 | - | auth.tenants, core.partners, retail.loyalty_programs, retail.pos_orders |
|
|
| customer_memberships | RT-005 | - | auth.tenants, core.partners, retail.loyalty_programs, retail.membership_levels |
|
|
| promotions | RT-006 | promotion_products | auth.tenants |
|
|
| promotion_products | RT-006 | - | auth.tenants, retail.promotions, inventory.products, inventory.product_categories |
|
|
| coupons | RT-006 | coupon_redemptions | auth.tenants, core.partners |
|
|
| coupon_redemptions | RT-006 | - | auth.tenants, retail.coupons, retail.pos_orders |
|
|
| purchase_suggestions | RT-004 | - | auth.tenants, retail.branches, inventory.products, core.partners |
|
|
| supplier_orders | RT-004 | supplier_order_lines, goods_receipts | auth.tenants, core.partners, retail.branches, auth.users(x2) |
|
|
| supplier_order_lines | RT-004 | - | auth.tenants, retail.supplier_orders, inventory.products |
|
|
| goods_receipts | RT-004 | goods_receipt_lines | auth.tenants, retail.supplier_orders, retail.branches, core.partners, auth.users |
|
|
| goods_receipt_lines | RT-004 | - | auth.tenants, retail.goods_receipts, inventory.products |
|
|
| cfdi_config | RT-010 | - | auth.tenants |
|
|
| cfdis | RT-010 | - | auth.tenants |
|
|
| carts | RT-009 | cart_items | auth.tenants, core.partners |
|
|
| cart_items | RT-009 | - | auth.tenants, retail.carts, inventory.products |
|
|
| ecommerce_orders | RT-009 | ecommerce_order_lines, cfdis | auth.tenants, core.partners, retail.branches |
|
|
| ecommerce_order_lines | RT-009 | - | auth.tenants, retail.ecommerce_orders, inventory.products |
|
|
| shipping_rates | RT-009 | - | auth.tenants |
|
|
|
|
### 2.3 Impacto en Tablas Existentes
|
|
|
|
| Tabla Existente | Impacto | Descripcion |
|
|
|-----------------|---------|-------------|
|
|
| auth.tenants | Referenciada | FK desde todas las tablas retail |
|
|
| auth.users | Referenciada | FK desde pos_sessions, cash_*, branch_users, etc. |
|
|
| core.partners | Referenciada | FK desde pos_orders, customers, suppliers |
|
|
| inventory.products | Referenciada | FK desde pos_order_lines, cart_items, promotion_products |
|
|
| inventory.warehouses | Referenciada | FK desde branches |
|
|
| inventory.stock_quants | Lectura/Escritura | Para stock por sucursal |
|
|
| inventory.product_categories | Referenciada | FK desde promotion_products |
|
|
|
|
### 2.4 Vistas y Vistas Materializadas
|
|
|
|
| Objeto | Tipo | Tablas Fuente | Refresh |
|
|
|--------|------|---------------|---------|
|
|
| retail.branch_stock | VIEW | inventory.stock_quants, retail.branches, inventory.products | Real-time |
|
|
| retail.mv_daily_sales | MATERIALIZED VIEW | retail.pos_orders, retail.pos_sessions | Cada hora |
|
|
| retail.mv_product_sales | MATERIALIZED VIEW | retail.pos_order_lines, retail.pos_orders, retail.pos_sessions | Cada hora |
|
|
| retail.mv_branch_stock_summary | MATERIALIZED VIEW | retail.branches, inventory.stock_quants, inventory.products | Cada hora |
|
|
|
|
---
|
|
|
|
## 3. IMPACTO EN BACKEND
|
|
|
|
### 3.1 Modulos Afectados
|
|
|
|
| Modulo | Tipo | Servicios | Controllers |
|
|
|--------|------|-----------|-------------|
|
|
| auth | MODIFICAR | AuthService (actualizar) | - |
|
|
| branches | NUEVO | BranchesService, CashRegistersService, BranchUsersService | BranchesController |
|
|
| pos | NUEVO | POSSessionService, POSOrderService, POSPaymentService, POSSyncService | POSController |
|
|
| cash | NUEVO | CashSessionService, CashMovementService, CashClosingService | CashController |
|
|
| inventory | EXTENDER | RetailStockService, TransfersService, AdjustmentsService | InventoryController |
|
|
| customers | EXTENDER | RetailCustomersService, LoyaltyService | CustomersController |
|
|
| pricing | NUEVO | PriceEngineService, PromotionsService, CouponsService | PricingController |
|
|
| purchases | EXTENDER | RetailPurchaseService, PurchaseSuggestionsService, GoodsReceiptService | PurchaseController |
|
|
| invoicing | NUEVO | CFDIService, CFDIBuilderService, PACService, XMLService, PDFService, AutofacturaService | CFDIController, AutofacturaController |
|
|
| ecommerce | NUEVO | CatalogService, CartService, CheckoutService, PaymentGatewayService, ShippingService, EcommerceOrderService | StorefrontController, EcommerceAdminController |
|
|
| reports | EXTENDER | DashboardService, SalesReportService, ProductReportService, CashReportService, ExportService | ReportsController |
|
|
|
|
### 3.2 Middleware Nuevo
|
|
|
|
| Middleware | Proposito | Ruta |
|
|
|------------|-----------|------|
|
|
| TenantMiddleware | Establecer tenant_id en sesion | Global |
|
|
| BranchMiddleware | Establecer branch_id en header | /pos/*, /inventory/* |
|
|
| AuthMiddleware | Validar JWT | Rutas protegidas |
|
|
| PermissionsMiddleware | Validar permisos | Rutas admin |
|
|
| OfflineAuthMiddleware | Auth para sync offline | /pos/sync |
|
|
|
|
### 3.3 Gateways (WebSocket)
|
|
|
|
| Gateway | Namespace | Eventos |
|
|
|---------|-----------|---------|
|
|
| POSGateway | /pos | sync:orders, order:created, session:updated |
|
|
|
|
### 3.4 Integraciones Externas
|
|
|
|
| Integracion | Provider | Servicios Afectados |
|
|
|-------------|----------|---------------------|
|
|
| Finkok PAC | PACService | FinkokPAC.timbrar(), FinkokPAC.cancelar() |
|
|
| Facturama PAC | PACService | FacturamaPAC.timbrar(), FacturamaPAC.cancelar() |
|
|
| Stripe | PaymentGatewayService | StripeGateway.createPayment(), StripeGateway.capture() |
|
|
| Conekta | PaymentGatewayService | ConektaGateway.createPayment() |
|
|
| MercadoPago | PaymentGatewayService | MercadoPagoGateway.createPayment() |
|
|
| Fedex | ShippingService | FedexProvider.calculateRate(), FedexProvider.createShipment() |
|
|
| DHL | ShippingService | DHLProvider.calculateRate() |
|
|
|
|
---
|
|
|
|
## 4. IMPACTO EN FRONTEND
|
|
|
|
### 4.1 Aplicaciones
|
|
|
|
| App | Tipo | Paginas | Componentes |
|
|
|-----|------|---------|-------------|
|
|
| Backoffice | React SPA | ~35 | ~50 |
|
|
| POS | React PWA | ~15 | ~20 |
|
|
| Storefront | React SPA | ~15 | ~30 |
|
|
|
|
### 4.2 Packages Compartidos
|
|
|
|
| Package | Tipo | Contenido |
|
|
|---------|------|-----------|
|
|
| @retail/ui-components | Library | Button, Input, Table, Modal, etc. |
|
|
| @retail/api-client | Library | Cliente API tipado |
|
|
| @retail/hooks | Library | useAuth, useTenant, useBranch, etc. |
|
|
|
|
### 4.3 Paginas por App
|
|
|
|
#### Backoffice
|
|
|
|
| Pagina | Ruta | Modulo |
|
|
|--------|------|--------|
|
|
| Dashboard | / | RT-008 |
|
|
| Stock por Sucursal | /inventory | RT-003 |
|
|
| Transferencias | /inventory/transfers | RT-003 |
|
|
| Ajustes | /inventory/adjustments | RT-003 |
|
|
| Productos | /products | Core |
|
|
| Categorias | /products/categories | Core |
|
|
| Clientes | /customers | RT-005 |
|
|
| Programa Lealtad | /customers/loyalty | RT-005 |
|
|
| Listas de Precios | /pricing/pricelists | RT-006 |
|
|
| Promociones | /pricing/promotions | RT-006 |
|
|
| Cupones | /pricing/coupons | RT-006 |
|
|
| Sugerencias Compra | /purchases/suggestions | RT-004 |
|
|
| Ordenes Proveedor | /purchases/orders | RT-004 |
|
|
| Recepciones | /purchases/receipts | RT-004 |
|
|
| Pedidos Online | /ecommerce/orders | RT-009 |
|
|
| Tarifas Envio | /ecommerce/shipping | RT-009 |
|
|
| Facturas | /invoicing | RT-010 |
|
|
| Config CFDI | /invoicing/config | RT-010 |
|
|
| Reporte Ventas | /reports/sales | RT-008 |
|
|
| Reporte Productos | /reports/products | RT-008 |
|
|
| Reporte Inventario | /reports/inventory | RT-008 |
|
|
| Reporte Clientes | /reports/customers | RT-008 |
|
|
| Reporte Caja | /reports/cash | RT-008 |
|
|
| Sucursales | /settings/branches | RT-001 |
|
|
| Cajas | /settings/registers | RT-001 |
|
|
| Usuarios | /settings/users | Core |
|
|
|
|
#### POS
|
|
|
|
| Pagina | Ruta | Modulo |
|
|
|--------|------|--------|
|
|
| Login | /login | Core |
|
|
| Seleccion Caja | /select-register | RT-001 |
|
|
| Apertura | /open-session | RT-007 |
|
|
| Ventas | /sales | RT-002 |
|
|
| Cobro | /sales/checkout | RT-002 |
|
|
| Movimientos Caja | /cash/movements | RT-007 |
|
|
| Arqueo | /cash/count | RT-007 |
|
|
| Cierre | /cash/close | RT-007 |
|
|
| Historial | /history | RT-002 |
|
|
| Facturar | /invoice/:orderId | RT-010 |
|
|
| Cola Offline | /offline | RT-002 |
|
|
|
|
#### Storefront
|
|
|
|
| Pagina | Ruta | Modulo |
|
|
|--------|------|--------|
|
|
| Home | / | RT-009 |
|
|
| Catalogo | /products | RT-009 |
|
|
| Producto | /products/:id | RT-009 |
|
|
| Categoria | /category/:slug | RT-009 |
|
|
| Busqueda | /search | RT-009 |
|
|
| Carrito | /cart | RT-009 |
|
|
| Checkout | /checkout | RT-009 |
|
|
| Login | /login | Core |
|
|
| Registro | /register | Core |
|
|
| Mi Cuenta | /account | RT-009 |
|
|
| Mis Pedidos | /account/orders | RT-009 |
|
|
| Mis Puntos | /account/loyalty | RT-005 |
|
|
|
|
### 4.4 PWA Features (POS)
|
|
|
|
| Feature | Componente |
|
|
|---------|------------|
|
|
| Service Worker | sw.ts |
|
|
| IndexedDB | offline/db.ts (Dexie) |
|
|
| Sync Queue | offline/queue.ts |
|
|
| Background Sync | offline/sync.ts |
|
|
| Push Notifications | Opcional |
|
|
|
|
### 4.5 Hardware Integration (POS)
|
|
|
|
| Hardware | Archivo | API |
|
|
|----------|---------|-----|
|
|
| Impresora ESC/POS | hardware/printer.ts | Web USB, Web Bluetooth, Network |
|
|
| Lector Codigo Barras | hardware/scanner.ts | Keyboard Events |
|
|
| Cajon Dinero | hardware/drawer.ts | Via Impresora ESC/POS |
|
|
|
|
---
|
|
|
|
## 5. ANALISIS DE RIESGOS POR IMPACTO
|
|
|
|
### 5.1 Riesgos de Base de Datos
|
|
|
|
| Riesgo | Probabilidad | Impacto | Mitigacion |
|
|
|--------|--------------|---------|------------|
|
|
| Migraciones fallidas | Media | Alto | Backups antes de cada migracion |
|
|
| RLS mal configurado | Baja | Critico | Tests exhaustivos de aislamiento |
|
|
| Performance en joins | Media | Medio | Indices optimizados, vistas materializadas |
|
|
| Datos inconsistentes offline | Media | Alto | Validacion robusta en sync |
|
|
|
|
### 5.2 Riesgos de Backend
|
|
|
|
| Riesgo | Probabilidad | Impacto | Mitigacion |
|
|
|--------|--------------|---------|------------|
|
|
| Integracion PAC falla | Media | Alto | PAC backup, reintentos |
|
|
| Motor precios lento | Baja | Medio | Cache de promociones |
|
|
| Sync conflictos | Media | Medio | Estrategia last-write-wins |
|
|
| Pasarelas pago | Media | Alto | SDK oficiales, logs detallados |
|
|
|
|
### 5.3 Riesgos de Frontend
|
|
|
|
| Riesgo | Probabilidad | Impacto | Mitigacion |
|
|
|--------|--------------|---------|------------|
|
|
| PWA no funciona offline | Media | Alto | Tests de offline exhaustivos |
|
|
| Hardware no compatible | Media | Medio | Fallbacks, documentacion clara |
|
|
| Performance en catalogos | Baja | Medio | Paginacion, lazy loading |
|
|
| UX confusa en POS | Baja | Medio | Tests de usabilidad |
|
|
|
|
---
|
|
|
|
## 6. MATRIZ DE TRAZABILIDAD
|
|
|
|
### 6.1 Requisitos -> Componentes
|
|
|
|
| Requisito | Entidad | Servicio | Controller | UI |
|
|
|-----------|---------|----------|------------|-----|
|
|
| Venta en POS | pos_orders, pos_order_lines | POSOrderService | POSController | Sales.tsx |
|
|
| Cobro mixto | pos_payments | POSPaymentService | POSController | Checkout.tsx |
|
|
| Puntos lealtad | loyalty_transactions | LoyaltyService | CustomersController | PointsRedemption.tsx |
|
|
| Promociones | promotions | PromotionsService, PriceEngineService | PricingController | - |
|
|
| Cupones | coupons | CouponsService | PricingController | CouponInput.tsx |
|
|
| Transferencias | stock_transfers | TransfersService | InventoryController | TransferForm.tsx |
|
|
| Corte caja | cash_closings | CashClosingService | CashController | CashClosing.tsx |
|
|
| Facturacion | cfdis | CFDIService | CFDIController | InvoiceModal.tsx |
|
|
| Autofactura | cfdis | AutofacturaService | AutofacturaController | AutofacturaPortal.tsx |
|
|
| E-commerce | ecommerce_orders | CheckoutService | StorefrontController | Checkout.tsx |
|
|
|
|
### 6.2 Entidades -> Servicios
|
|
|
|
| Entidad | Servicios que la usan |
|
|
|---------|----------------------|
|
|
| branches | BranchesService, POSSessionService, TransfersService, RetailStockService |
|
|
| pos_orders | POSOrderService, LoyaltyService, CFDIService, CashClosingService |
|
|
| products | POSOrderService, CatalogService, CartService, RetailStockService |
|
|
| partners | RetailCustomersService, LoyaltyService, CFDIService |
|
|
| promotions | PromotionsService, PriceEngineService |
|
|
| coupons | CouponsService, PriceEngineService |
|
|
| cfdis | CFDIService, AutofacturaService |
|
|
|
|
---
|
|
|
|
## 7. CHECKLIST DE VALIDACION DE IMPACTO
|
|
|
|
### Database
|
|
- [x] Todas las tablas tienen tenant_id
|
|
- [x] Todas las tablas tienen RLS policy
|
|
- [x] FKs correctamente definidas
|
|
- [x] Indices necesarios identificados
|
|
- [x] Migraciones en orden correcto
|
|
- [x] Columnas generadas (STORED) definidas
|
|
- [x] Vistas materializadas planificadas
|
|
|
|
### Backend
|
|
- [x] Servicios identificados para cada entidad
|
|
- [x] Herencias de core mapeadas
|
|
- [x] Integraciones externas documentadas
|
|
- [x] Middleware necesario identificado
|
|
- [x] WebSocket gateway planificado
|
|
- [x] DTOs definidos implicitamente
|
|
|
|
### Frontend
|
|
- [x] Paginas por app identificadas
|
|
- [x] Componentes compartidos definidos
|
|
- [x] PWA features planificadas
|
|
- [x] Hardware integration documentada
|
|
- [x] Store management (Zustand) planificado
|
|
|
|
### Seguridad
|
|
- [x] RLS en todas las tablas
|
|
- [x] JWT authentication
|
|
- [x] Middleware de tenant
|
|
- [x] Middleware de branch
|
|
- [x] RBAC pendiente (depende core)
|
|
|
|
---
|
|
|
|
## 8. CONCLUSION
|
|
|
|
### 8.1 Resumen de Impacto
|
|
|
|
El proyecto Retail impacta:
|
|
- **100%** de la capa de datos con schema nuevo
|
|
- **100%** del backend con servicios nuevos/extendidos
|
|
- **100%** del frontend con 3 aplicaciones nuevas
|
|
- **35%** de integraciones (PAC, pagos, envios)
|
|
|
|
### 8.2 Dependencias Criticas
|
|
|
|
1. **MGN-005 Catalogs** - Bloqueante para todo retail
|
|
2. **MGN-001 Auth** - Bloqueante para autenticacion
|
|
3. **MGN-013 Sales** - Bloqueante para precios
|
|
4. **MGN-010 Financial** - Bloqueante para POS y facturacion
|
|
|
|
### 8.3 Recomendaciones
|
|
|
|
1. **Priorizar core** - No iniciar retail hasta completar prerrequisitos
|
|
2. **Tests RLS** - Validar aislamiento de datos antes de produccion
|
|
3. **Ambiente sandbox PAC** - Probar facturacion temprano
|
|
4. **Hardware testing** - Validar impresoras/scanners en hardware real
|
|
5. **PWA testing** - Probar offline en condiciones reales
|
|
|
|
---
|
|
|
|
**Estado:** ANALISIS COMPLETO
|
|
**Impacto Total:** Alto
|
|
**Riesgo Global:** Medio (con mitigaciones)
|