# Análisis de Base de Datos Innova ERP – Tablas y Campos Obsoletos

**Fecha:** 11 de febrero de 2026  
**Fuente:** `compare.sql` (dump de la base de datos actual)  
**Objetivo:** Identificar tablas y campos que pueden eliminarse o migrarse para simplificar el esquema.

---

## Resumen Ejecutivo

| Acción | Estado |
|--------|--------|
| **Tablas eliminadas** ✓ | 2 (`tcomprobante`, `tipovariantes`). Migración `2026_02_11_000001`. Modelo `TComprobante` eliminado. |
| **Campos productos eliminados** ✓ | 6 (`tipoVariante_producto`, `variante_producto`, `syncronizado_producto`, `stock_1/2/3_producto`). Migración `2026_02_11_000002`. |
| **Stock migrado** ✓ | Todo el código usa `producto_sucursal` y `StockService`. Sin referencias a `stock_X_producto`. |
| **Tests ProductoTest** ✓ | 7 tests pasan. TestCase usa `DatabaseTransactions` + `createTestTables` (productos, producto_sucursal, etc.). Ruta crear: `/api/productos/crear`. |
| **Pendiente** | `ingresoDetalle` stock_1/2/3; `pedidoMercaderia` (evaluar); tipos en ventaDetalle, users. |

---

## 1. TABLAS A ELIMINAR

### 1.1 `tcomprobante` ✓ ELIMINADA

| Aspecto | Detalle |
|---------|---------|
| **Motivo** | Obsoleta. El sistema usa **DTE Chile** con `tipos_documento_tributario` (códigos SII: 22, 28, 47, 5, 15). Las facturas/boletas no usan `tipo_factura` ni `codigo_tComprobante`. |
| **Estado** | ✓ Tabla eliminada. Modelo `TComprobante` eliminado. Migración `2026_02_11_000001`. |
| **FK dependientes** | Ninguna. |

---

### 1.2 `tipovariantes` ✓ ELIMINADA

| Aspecto | Detalle |
|---------|---------|
| **Motivo** | Obsoleta. El sistema usa el modelo de variantes **variante_atributos** + **variante_atributo_valores** + **producto_variante_atributos** + **producto_variante_valores**. |
| **Estado** | ✓ Tabla eliminada. Migración `2026_02_11_000001`. |
| **FK dependientes** | Ninguna. |

---

## 2. TABLAS A EVALUAR (BAJO USO O SIN FRONTEND)

### 2.1 `pedidoMercaderia` + `pedidoDetalle`

| Aspecto | Detalle |
|---------|---------|
| **Función** | **Ingreso de mercadería** y **movimientos de stock** entre sucursales. PedidoMercaderiaController, rutas API operativos. |
| **Stock** | Usa `producto_sucursal` y `StockService` (no `stock_X_producto`). Compatible con productos variantes (`variante_atributos`, `producto_variante_atributos`). |
| **Estado** | Sin referencias en el frontend. Si no se usa: evaluar eliminar. Si está planificada: mantener y desarrollar el frontend. |
| **Dependencias** | `PedidoDetalle` → FK `idPedido_pedidoDetalle` → `pedidoMercaderia`. |

---

## 3. CAMPOS OBSOLETOS POR TABLA

### 3.1 `productos`

**Eliminados (migración `2026_02_11_000002_drop_campos_obsoletos_productos`):**

| Campo | Motivo |
|-------|--------|
| `tipoVariante_producto` | No se usaba. Variantes usan `variante_atributos` / `producto_variante_atributos`. |
| `variante_producto` | Idem. |
| `syncronizado_producto` | Solo se escribía 0 al crear. Sin lógica de lectura. |
| `stock_1_producto`, `stock_2_producto`, `stock_3_producto` | Reemplazados por `producto_sucursal`. Todo el código migrado a `StockService` y `producto_sucursal`. |

---

### 3.2 `ingresoDetalle`

| Campo | Motivo | Acción |
|-------|--------|--------|
| `stock_1_ingDetalle` | Reemplazado por `ingreso_detalle_sucursal` (id_sucursal + cantidad). ComprobanteController aún escribe en ambos. | Migrar 100% a ingreso_detalle_sucursal y luego eliminar |
| `stock_2_ingDetalle` | Idem | Idem |
| `stock_3_ingDetalle` | Idem | Idem |

---

### 3.3 `ventaDetalle`

| Campo | Motivo | Acción |
|-------|--------|--------|
| `cantidad_ventaDetalle` (tipo INT) | Productos con `stock_entero_producto = 0` permiten venta por decimales (kg, litros). El código usa floatval() pero la columna es INT. | Migrar a `DECIMAL(15,4)` para soportar cantidades decimales |

---

### 3.4 `users`

| Campo | Motivo | Acción |
|-------|--------|--------|
| `RUT_user` (tipo INT) | RUT chileno con puntos/guion no cabe bien en INT. Migración 000002 renombró DNI_user → RUT_user. | Evaluar migrar a VARCHAR(20) si se necesita formato completo |
| `password_user` (varchar 30, sin hash) | Contraseñas en texto plano. Grave problema de seguridad. | Migrar a bcrypt/hash y ampliar longitud |

---

### 3.5 `configuracion_negocio`

| Campo | Motivo | Acción |
|-------|--------|--------|
| `campo_stock_tienda` | Mapea sucursal fija (stock_1/2/3) a ID. Con `producto_sucursal` + `id_sucursal_tienda` este campo es redundante. | Cuando se retire stock_X de productos, este campo puede eliminarse |

---

### 3.6 `clientes`

| Campo | Motivo | Acción |
|-------|--------|--------|
| `comuna_cliente` (varchar 100) | Duplicado con `direcciones.comuna_direccion` e `id_comuna_cliente`. Se usa en vistas y ClienteController. | Se puede deprecar cuando todas las direcciones vengan de `direcciones` |
| `region_cliente` (varchar 100) | Idem | Idem |

**Nota:** `id_comuna_cliente` (FK a comunas_chile) es el campo normalizado. Mantener `comuna_cliente` y `region_cliente` como denormalización para tickets/impresión hasta migrar vistas.

---

### 3.7 `categorias_productos`

| Campo | Motivo | Acción |
|-------|--------|--------|
| `count` | Contador de productos por categoría. Podría calcularse en lugar de almacenarse. | Mantener si se actualiza correctamente; si no, migrar a computed/cache |

---

### 3.8 `ventas` (ya migrado)

Los campos `pagoEfectivo_venta`, `pagoTransferencia_venta`, `pagoPosnet_venta` fueron eliminados por la migración `2026_02_10_700000_drop_legacy_pago_columns_from_ventas` y reemplazados por `pagos_venta` (JSON).  
En `compare.sql` ya no aparecen; el esquema actual es correcto.

---

### 3.9 `facturas`

| Campo | Motivo | Acción |
|-------|--------|--------|
| `tipo_factura` | Fue eliminado por migración `2026_02_10_000010_remove_afip_fields_from_facturas`. Se usa `id_tipo_documento_tributario`. | No está en compare.sql; esquema actual correcto |

---

## 4. TABLAS QUE DEBEN MANTENERSE (REFERENCIA)

No eliminar. Se usan activamente:

- `arqueos`, `auditoria`, `cache`, `cache_locks`
- `categorias_productos`, `ccProveedores`, `clientes`, `cliente_tag`
- `codigos_verificacion`, `comunas_chile`, `configuracion_negocio`, `configuracion_puntos`
- `direcciones`, `egresos`, `facturas`, `failed_jobs`, `fichado`
- `historial_puntos`, `horasExtra`, `ingresoComprobantes`, `ingresoDetalle`, `ingreso_detalle_sucursal`
- `jobs`, `job_batches`
- `mercadolibre_*`, `metodos_pago`, `migrations`, `nc`
- `pedidoDetalle`, `pedidoMercaderia`, `personal`, `personal_access_tokens`
- `productos`, `productos_imagenes`, `producto_sucursal`, `producto_variante_*`, `promociones`, `promocion_*`
- `proveedores`, `push_tokens`, `regiones_chile`, `roles`, `sessions`
- `shopify_*`, `simpleapi_busquedas_rut`, `sucursales`, `tags_clientes`
- `tipos_documento_tributario`, `tresponsables`, `users`, `usuario_sucursal`
- `variante_atributos`, `variante_atributo_valores`, `ventaDetalle`, `ventas`

---

## 5. PLAN DE MIGRACIÓN SUGERIDO

### Fase 1 – Eliminaciones seguras ✓
1. ✓ Eliminada tabla `tipovariantes` (sin dependencias).
2. ✓ Eliminada tabla `tcomprobante` y modelo `TComprobante`.
   - Migración: `2026_02_11_000001_drop_tablas_obsoletas_tcomprobante_tipovariantes`.

### Fase 2 – Campos obsoletos en productos ✓
3. ✓ Migrado todo uso de `stock_X_producto` a `producto_sucursal` y `StockService`.
4. ✓ Eliminados: `tipoVariante_producto`, `variante_producto`, `syncronizado_producto`, `stock_1_producto`, `stock_2_producto`, `stock_3_producto`.
   - Migración: `2026_02_11_000002_drop_campos_obsoletos_productos`.

### Fase 3 – Stock dinámico (pendiente)
5. Migrar `ingresoDetalle` a `ingreso_detalle_sucursal` y eliminar `stock_1/2/3_ingDetalle`.

### Fase 4 – Mejoras de tipos
8. Migrar `ventaDetalle.cantidad_ventaDetalle` de INT a DECIMAL(15,4).
9. Migrar `users.password_user` a hash (bcrypt) y ampliar longitud.
10. Evaluar `users.RUT_user` → VARCHAR si se necesita formato completo.

### Fase 5 – Evaluación pedidoMercaderia
11. Decidir si se mantiene o elimina `pedidoMercaderia` y `pedidoDetalle` según uso real.

---

## 6. SCRIPT SQL DE REFERENCIA (ELIMINACIONES FASE 1)

```sql
-- Ejecutar solo después de backup y verificación en staging
-- Fase 1: tablas obsoletas

DROP TABLE IF EXISTS tipovariantes;
DROP TABLE IF EXISTS tcomprobante;
```

---

## 7. DEPENDENCIAS ENTRE OBJETOS

```
tcomprobante     → ✓ eliminada
tipovariantes    → ✓ eliminada
productos        → ✓ campos obsoletos eliminados (tipoVariante, variante, syncronizado, stock_1/2/3)
ingresoDetalle   → stock_1/2/3_ingDetalle (pendiente migrar a ingreso_detalle_sucursal)
```

---

## 8. TRABAJO REALIZADO (feb 2026)

| Tarea | Archivos / Detalle |
|-------|-------------------|
| Migración drop tablas | `2026_02_11_000001_drop_tablas_obsoletas_tcomprobante_tipovariantes.php` |
| Migración drop campos productos | `2026_02_11_000002_drop_campos_obsoletos_productos.php` |
| Modelo TComprobante | Eliminado (`app/Models/TComprobante.php`) |
| ProductoController, VarianteController | Stock vía `StockService` y `producto_sucursal` |
| VentaController, MercadoLibreService, ShopifyService | Idem |
| Model Producto, Variante | Eliminados de `$fillable`: stock_1/2/3, tipoVariante, variante, syncronizado |
| TestCase | `DatabaseTransactions` en lugar de `RefreshDatabase`. `createTestTables` ampliado: productos (slug, idPadre, peso, etc.), `producto_sucursal`. |
| ProductoTest | Ruta crear: `/api/productos/crear`. `datos.2` (idProveedor) como string. Stock vía `producto_sucursal`. |

---

## ANEXO A – Análisis tabla por tabla, campo por campo

Para cada tabla se indica: MANTENER, ELIMINAR (tabla/campo), EVALUAR o MIGRAR.

### arqueos
| Campo | Acción |
|-------|--------|
| id_arqueo, idSucursal_arqueo, fechaHora_arqueo, idUsuario_arqueo | MANTENER |
| ingresos_arqueo, efectivo_arqueo, transferencia_arqueo, posnet_arqueo | MANTENER |
| egresos_arqueo, directos_arqueo, indirectos_arqueo, neto_arqueo, cambio_arqueo | MANTENER |
| obs_arqueo, estado_arqueo | MANTENER |

### auditoria
Todos los campos: MANTENER.

### cache, cache_locks
Tablas del framework Laravel. MANTENER.

### categorias_productos
| Campo | Acción |
|-------|--------|
| id_categoria, nombre_categoria, slug_categoria, parent_id | MANTENER |
| descripcion_categoria, menu_order | MANTENER |
| count | MANTENER (o migrar a computed si no se actualiza) |
| created_at, updated_at | MANTENER |

### ccProveedores
Todos: MANTENER. Usado por ProveedorController.

### clientes
| Campo | Acción |
|-------|--------|
| id_cliente, razon_cliente, rut_cliente, tResponsable_cliente | MANTENER |
| telefono_cliente, mail_cliente, direccion_cliente | MANTENER |
| comuna_cliente, region_cliente | EVALUAR: denormalización, puede deprecarse si se usa solo direcciones |
| id_comuna_cliente | MANTENER (FK normalizada) |
| estado_cliente, puntos_cliente | MANTENER |

### cliente_tag
Todos: MANTENER.

### codigos_verificacion
Todos: MANTENER (tienda – validación email/WhatsApp).

### comunas_chile, regiones_chile
Todos: MANTENER. Datos Chile.

### configuracion_negocio
| Campo | Acción |
|-------|--------|
| permitir_venta_sin_stock | MANTENER |
| campo_stock_tienda | EVALUAR: redundante con producto_sucursal + id_sucursal_tienda |
| id_sucursal_tienda | MANTENER |
| created_at, updated_at | MANTENER |

### configuracion_puntos
Todos: MANTENER.

### direcciones
Todos: MANTENER.

### egresos
Todos: MANTENER.

### facturas
Todos: MANTENER. DTE Chile.

### failed_jobs, jobs, job_batches
Todos: MANTENER. Laravel Queue.

### fichado
Todos: MANTENER. Control de personal.

### historial_puntos
Todos: MANTENER.

### horasExtra
Todos: MANTENER.

### ingresoComprobantes
Todos: MANTENER. Ingreso de mercadería.

### ingresoDetalle
| Campo | Acción |
|-------|--------|
| id_ingDetalle, idComprobante_ingDetalle, idProducto_ingDetalle | MANTENER |
| stock_1_ingDetalle, stock_2_ingDetalle, stock_3_ingDetalle | ELIMINAR cuando ingreso_detalle_sucursal esté 100% migrado |

### ingreso_detalle_sucursal
Todos: MANTENER. Reemplazo de stock_1/2/3_ingDetalle.

### mercadolibre_config, mercadolibre_ordenes, mercadolibre_preguntas, mercadolibre_productos
Todos: MANTENER.

### metodos_pago
Todos: MANTENER.

### migrations
MANTENER. Laravel.

### nc (notas de crédito)
Todos: MANTENER.

### password_reset_tokens
MANTENER. Laravel.

### pedidoDetalle
Todos: MANTENER (o evaluar si se elimina pedidoMercaderia).

### pedidoMercaderia
Todos: MANTENER. EVALUAR si hay frontend o uso real.

### personal
Todos: MANTENER.

### personal_access_tokens
MANTENER. Sanctum.

### productos
| Campo | Acción |
|-------|--------|
| id_producto, nombre_producto, slug_producto, codigo_producto | MANTENER |
| idProveedor_producto, iva_producto | MANTENER |
| valorCompra_producto, valorVenta_producto | MANTENER |
| stock_1_producto, stock_2_producto, stock_3_producto | MANTENER por ahora (compatibilidad); eliminar cuando producto_sucursal sea única fuente |
| stock_entero_producto | MANTENER |
| peso_producto, ancho_producto, alto_producto, largo_producto | MANTENER |
| tipoVariante_producto, variante_producto | **ELIMINAR** (obsoletos, no usados) |
| idPadre_producto | MANTENER |
| idCategorias_producto, detalle_producto, estado_producto | MANTENER |
| syncronizado_producto | EVALUAR: solo se escribe 0 |

### productos_imagenes
Todos: MANTENER.

### producto_sucursal
Todos: MANTENER. Stock dinámico.

### producto_variante_atributos, producto_variante_valores
Todos: MANTENER.

### promociones, promocion_producto, promocion_usos
Todos: MANTENER.

### proveedores
Todos: MANTENER.

### push_tokens
Todos: MANTENER.

### roles
Todos: MANTENER.

### sessions
MANTENER. Laravel.

### shopify_config, shopify_ordenes, shopify_productos
Todos: MANTENER.

### simpleapi_busquedas_rut
Todos: MANTENER. Cache SimpleAPI.

### sucursales
Todos: MANTENER.

### tags_clientes
Todos: MANTENER.

### tcomprobante
✓ **TABLA ELIMINADA.** Migración 2026_02_11_000001. Obsoleta (DTE Chile usa tipos_documento_tributario).

### tipos_documento_tributario
Todos: MANTENER. SII Chile.

### tipovariantes
**TABLA ENTERA: ELIMINAR.** Obsoleta (reemplazada por variante_atributos).

### tresponsables
Todos: MANTENER.

### users
| Campo | Acción |
|-------|--------|
| id_user, idRole_user, idSucursal_user | MANTENER |
| RUT_user (INT) | EVALUAR: migrar a VARCHAR si se necesita formato |
| username_user | MANTENER |
| password_user (texto plano, varchar 30) | **MIGRAR** a hash + ampliar longitud |
| name_user, fnac_user, active_user | MANTENER |

### usuario_sucursal
Todos: MANTENER.

### variante_atributos, variante_atributo_valores
Todos: MANTENER.

### ventaDetalle
| Campo | Acción |
|-------|--------|
| id_ventaDetalle, idVenta_ventaDetalle, precioVenta_ventaDetalle | MANTENER |
| estado_ventaDetalle | MANTENER |
| idProducto_ventaDetalle | MANTENER |
| cantidad_ventaDetalle (INT) | **MIGRAR** a DECIMAL(15,4) para stock decimal |
| dto_ventaDetalle | MANTENER |

### ventas
Todos: MANTENER. pagos_venta (JSON) ya reemplazó las columnas legacy de pago.

---

**Documento generado a partir del análisis de `compare.sql` y del código en backend/ y frontend/.**
