Puente de migración de contactos Odoo v11 → v19 para Daniela. Clasifica, valida contra SII y migra con confirmación de JIND.
Script puente para Daniela que: - Clasifica contactos por prioridad (clientes → proveedores) - Valida RUT contra SRE/SII - Detecta duplicados por email, RUT y nombre - Revisión lote por lote con confirmación de JIND - Modo dry-run, enriquecimiento sin sobrescribir - Metadata de trazabilidad en cada contacto migrado |
||
|---|---|---|
| .gitignore | ||
| odoo_bridge.py | ||
| README.md | ||
| requirements.txt | ||
odoo-bridge — Migración de contactos Odoo v11 → v19
Puente de migración para Daniela, asistente ejecutiva de OdooCoop SpA. Transfiere contactos desde Odoo v11 (legado, 2,059 contactos) a Odoo v19 (destino, 96 contactos iniciales), validando cada uno contra el Servicio de Registro de Empresas (SII) y evitando duplicados.
Arquitectura
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Odoo v11 │ │ Odoo v19 │ │ SRE/SII │
│ (legado) │ │ (destino)│ │ :5000 │
└────┬─────┘ └────┬─────┘ └────┬─────┘
│ XML-RPC │ JSON-RPC │ REST
│ │ +API key │ token
└────────┬───────┴────────┬───────┘
│ │
┌────┴────────────────┴────┐
│ odoo_bridge.py │
│ Clasifica → Valida → │
│ Revisa → Migra │
└───────────────────────────┘
Prioridad de migración
- Clientes (157 contactos con facturas emitidas por OdooCoop)
- Proveedores (119 contactos con facturas de compra)
- Sin clasificar (1,785 — no se migran en esta fase)
Reglas de validación
Antes de migrar, cada contacto pasa por:
| Validación | Regla |
|---|---|
| Email único | Si ya existe en v19 → enriquecer campos vacíos, NO duplicar |
| RUT único | Si existe mismo RUT = nombre → enriquecer |
| RUT ≠ nombre | Si mismo RUT pero distinto nombre → ❓ consultar a JIND |
| Nombre similar | Fuzzy match en v19 → alertar posible duplicado |
| SII (SRE) | Validar RUT contra registro oficial del SII |
| Sin email | Va a cola de revisión manual |
| Sin RUT | Persona natural, se migra con flag sin_rut |
Reglas de escritura
- Nunca sobrescribir — solo se añaden campos vacíos
- Metadata — todo contacto lleva
{fuente: "v11", migrado_por: "daniela", fecha: ...} - Modo dry-run — primer pase sin escritura (
--dry-run)
Uso
# Instalar dependencias
pip install requests
# Dry-run: ver qué se migraría sin escribir nada
python3 odoo_bridge.py --dry-run --limit 5
# Migración real: 10 contactos
python3 odoo_bridge.py --limit 10
# Migración real desde el contacto 50 en adelante
python3 odoo_bridge.py --start-from 50
# Migración completa (todos)
python3 odoo_bridge.py
Flujo de revisión
Daniela presenta lote de 10 contactos a JIND:
✅ [1] Transportes Ceta Ltda — listo para migrar
⚠️ [2] OdooCoop Spa — ya existe en v19, solo enriquecer teléfono
❓ [3] Comercial XYZ — RUT no encontrado en SII
JIND responde: "A" (aprobar todos los ✅)
o "1,3" (aprobar solo contactos 1 y 3)
o "N" (saltar lote)
o "Q" (salir)
Reporte post-migración
Cada tanda genera:
- ✅ Migrados
- ✏️ Enriquecidos (ya existían, se añadieron datos)
- ❓ Dudas (quedan pendientes de revisión)
- ❌ Rechazados
Dependencias
- Python 3.11+
requests- Acceso LAN a
192.168.100.250:5000(SRE) - Acceso HTTPS a
www.odoocoop.cl(v11) yodoocoop-19.odoopos.cl(v19)
Credenciales
Las credenciales están en el código (ODOO_V11, ODOO_V19, SRE).
En producción, mover a variables de entorno o .env.
Autor
Daniela (asistente ejecutiva) + Hermes Agent OdooCoop SpA — 2026