18 KiB
18 KiB
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
- Todas las tablas tienen tenant_id
- Todas las tablas tienen RLS policy
- FKs correctamente definidas
- Indices necesarios identificados
- Migraciones en orden correcto
- Columnas generadas (STORED) definidas
- Vistas materializadas planificadas
Backend
- Servicios identificados para cada entidad
- Herencias de core mapeadas
- Integraciones externas documentadas
- Middleware necesario identificado
- WebSocket gateway planificado
- DTOs definidos implicitamente
Frontend
- Paginas por app identificadas
- Componentes compartidos definidos
- PWA features planificadas
- Hardware integration documentada
- Store management (Zustand) planificado
Seguridad
- RLS en todas las tablas
- JWT authentication
- Middleware de tenant
- Middleware de branch
- 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
- MGN-005 Catalogs - Bloqueante para todo retail
- MGN-001 Auth - Bloqueante para autenticacion
- MGN-013 Sales - Bloqueante para precios
- MGN-010 Financial - Bloqueante para POS y facturacion
8.3 Recomendaciones
- Priorizar core - No iniciar retail hasta completar prerrequisitos
- Tests RLS - Validar aislamiento de datos antes de produccion
- Ambiente sandbox PAC - Probar facturacion temprano
- Hardware testing - Validar impresoras/scanners en hardware real
- PWA testing - Probar offline en condiciones reales
Estado: ANALISIS COMPLETO Impacto Total: Alto Riesgo Global: Medio (con mitigaciones)