# Comparación de Versiones API

## Archivos

| Versión | API | Procedimiento |
|---------|-----|---------------|
| Original (v1) | `src/index.js` | `sql/api_procedure.sql` |
| Alternativa (v2) | `src/index_alternative.js` | `sql/api_procedure_v2.sql` |

---

## Diferencias Principales

### 1. Formato de RUT

| Aspecto | v1 (Original) | v2 (Alternativa) |
|---------|---------------|------------------|
| Formato enviado | `12345678-5` (con guion) | `123456785` (sin guion) |
| Longitud | 11 caracteres | 9 caracteres |
| Compatibilidad BD | ⚠️ Puede truncarse (VARCHAR 10) | ✅ Compatible |
| Respuesta | Solo formato con guion | Ambos formatos |

**Ejemplo v2:**
```json
{
  "data": {
    "rut_cliente": "123456785",
    "rut_cliente_formatted": "12345678-5"
  }
}
```

---

### 2. Comportamiento de Vehículos

| Aspecto | v1 (Original) | v2 (Alternativa) |
|---------|---------------|------------------|
| Vehículo existe | UPDATE (sobreescribe) | IGNORE (mantiene) |
| Consistencia | Diferente a Laravel | Igual a Laravel |
| Riesgo | Datos sobreescritos | Ninguno |

**Laravel actual:**
```php
DB::table('Vehiculos')->insertOrIgnore($dataSet);
```

**v1 Procedimiento:**
```sql
UPDATE Vehiculos SET marca = ?, modelo = ? WHERE patente = ?;
```

**v2 Procedimiento:**
```sql
INSERT IGNORE INTO Vehiculos (...) VALUES (...);
```

---

### 3. Validaciones de Longitud

| Campo | Límite BD | v1 | v2 |
|-------|-----------|-----|-----|
| `cliente.nombre` | 50 | ❌ No valida | ✅ Valida |
| `cliente.direccion` | 100 | ❌ No valida | ✅ Valida |
| `cliente.comuna` | 50 | ❌ No valida | ✅ Valida |
| `vehiculo.marca` | 50 | ❌ No valida | ✅ Valida |
| `vehiculo.modelo` | 50 | ❌ No valida | ✅ Valida |
| `vehiculo.color` | 20 | ❌ No valida | ✅ Valida |
| `vehiculo.patente` | 10 | ❌ No valida | ✅ Valida |

**v2 Endpoint adicional:**
```
GET /api/limits
```
```json
{
  "limits": {
    "cliente.nombre": 50,
    "cliente.direccion": 100,
    ...
  }
}
```

---

### 4. Patentes Duplicadas

| Aspecto | v1 | v2 |
|---------|-----|-----|
| En request JSON | ❌ Inserta duplicados | ✅ Detecta y rechaza |
| En OT_Vehiculos | ❌ Puede fallar | ✅ INSERT IGNORE |

**v2 Error si duplicados:**
```json
{
  "errors": {
    "vehiculos": ["Patentes duplicadas: ABC123"]
  }
}
```

---

### 5. Validación de Técnico

| Aspecto | v1 | v2 |
|---------|-----|-----|
| Existe en Tecnicos | ✅ API valida | ✅ API + SP valida |
| Tiene nombre | ❌ No valida | ✅ Valida |
| Respuesta incluye nombre | ❌ No | ✅ Sí |

**v2 Respuesta:**
```json
{
  "data": {
    "tecnico_nombre": "Juan Pérez"
  }
}
```

---

### 6. Mensaje de Respuesta

**v1:**
```
OT creada correctamente ID: 1234 Vehiculos: 3
```

**v2:**
```
OT creada ID: 1234 | Vehiculos nuevos: 2 | Existentes: 1
```

---

## Cuándo Usar Cada Versión

### Usar v1 (Original) si:
- Sistema ya en producción con RUTs con guion
- No hay problemas de truncamiento
- Necesitas actualizar datos de vehículos existentes
- Integración simple sin validaciones estrictas

### Usar v2 (Alternativa) si:
- Nueva implementación
- Problemas de truncamiento de RUT
- Necesitas consistencia con Laravel
- Requieres validaciones estrictas
- Prevenir sobreescritura de datos de vehículos

---

## Migración v1 → v2

### 1. Instalar nuevo procedimiento
```bash
mysql -u root -p revisa < sql/api_procedure_v2.sql
```

### 2. Reemplazar API
```bash
cp src/index_alternative.js src/index.js
```

### 3. Reiniciar servicio
```bash
sudo systemctl restart cartec-api
```

### 4. Actualizar integraciones
Cambiar formato de RUT en requests:
```javascript
// Antes (v1)
{ "rut": "12345678-5" }

// Después (v2) - ambos funcionan, pero sin guion es preferido
{ "rut": "123456785" }
// o
{ "rut": "12345678-5" }  // API lo limpia automáticamente
```

---

## Compatibilidad

| Aspecto | v1 → v2 | v2 → v1 |
|---------|---------|---------|
| Requests existentes | ✅ Compatibles | ⚠️ RUT puede truncar |
| BD existente | ✅ Compatible | ✅ Compatible |
| Integraciones | ⚠️ Actualizar respuesta | ✅ Compatible |

---

## Endpoints

### v1
```
GET  /api/health
POST /api/ot/create
```

### v2
```
GET  /api/health          # Incluye versión y features
POST /api/ot/create       # Validaciones extendidas
GET  /api/limits          # Nuevo: muestra límites de campos
```

---

## Resumen de Cambios

| # | Cambio | Impacto | Riesgo |
|---|--------|---------|--------|
| 1 | RUT sin guion | Alto | Bajo |
| 2 | INSERT IGNORE vehículos | Medio | Ninguno |
| 3 | Validaciones longitud | Medio | Ninguno |
| 4 | Detección duplicados | Bajo | Ninguno |
| 5 | Validación nombre técnico | Bajo | Ninguno |
| 6 | Mensaje detallado | Info | Ninguno |

---

## Recomendación

**Para nuevas implementaciones: Usar v2 (Alternativa)**

Razones:
1. Mayor compatibilidad con estructura de BD
2. Comportamiento consistente con Laravel existente
3. Validaciones más robustas
4. Mejor información en respuestas
5. Prevención de problemas futuros

