Introducción
En Odoo, los modelos son la plantilla que define cómo se guarda la información en la base de datos. Todo dato de negocio —pedidos, facturas, contactos o leads— tiene su representación en un modelo concreto.
Conocer los modelos de Odoo es imprescindible tanto para desarrolladores como para consultores funcionales. Son la columna vertebral de la arquitectura de datos: definen campos, relaciones y la lógica de negocio que gobierna cómo se comportan los registros.
Este artículo se centra en el modelo crm.lead, que alimenta el embudo comercial dentro del módulo CRM. Si vas a crear módulos a medida, conectar sistemas externos o diseñar procesos de ventas, te cruzarás con él con frecuencia.
Qué es el modelo crm.lead
El modelo crm.lead sirve para registrar leads y oportunidades. Es el contenedor central del pipeline comercial: desde el primer contacto hasta el cierre, la información del proceso comercial se mantiene aquí.
El CRM de Odoo y módulos relacionados lo usan directamente. Formularios web, acciones de marketing o procesos de venta lo crean y consultan: cuando un visitante rellena un formulario, cuando un comercial genera una oportunidad o cuando se convierte un lead en cliente, se actúa sobre crm.lead.
Odoo permite ampliar el modelo sin tocar el núcleo mediante herencia de modelos. El módulo base del CRM define la estructura mínima y otros módulos (por ejemplo, enriquecimiento de datos o integración web) añaden campos y comportamientos sin duplicar lógica.
Campos clave del modelo
A continuación tienes los campos más relevantes del crm.lead. Comprenderlos te facilitará la gestión, el análisis y la integración de leads y oportunidades.
1. name
Tipo: Char. Guarda el título del lead u oportunidad y es la etiqueta principal en listas o kanban. Suele describir la fuente o la oportunidad: por ejemplo, "Consulta web" o "Oferta clave — Cliente X".
2. contact_name
Tipo: Char. Nombre del contacto cuando no hay un partner vinculado. Al convertir un lead, este valor suele trasladarse al registro de res.partner creado o asociado.
3. email_from
Tipo: Char. Correo electrónico principal del lead. Se usa para comunicaciones previas a la conversión y como criterio de identificación y deduplicación.
4. phone
Tipo: Char. Teléfono principal del contacto. Visible en el formulario del lead y útil para registrar llamadas y seguimientos.
5. mobile
Tipo: Char. Número de móvil. Se emplea para SMS o contactos urgentes cuando difiere del teléfono fijo.
6. partner_id
Tipo: Many2one (res.partner). Relación con el contacto o la empresa cuando el lead está cualificado o convertido. Antes de la conversión suele estar vacío; después apunta al partner creado o enlazado.
7. user_id
Tipo: Many2one (res.users). Comercial responsable. Sirve para asignaciones, métricas y planificación de actividades; alimenta vistas como "Mis oportunidades".
8. team_id
Tipo: Many2one (crm.team). Equipo de ventas al que pertenece el lead; permite rotación automática, reglas de reparto y reporting por equipo.
9. stage_id
Tipo: Many2one (crm.stage). Etapa actual del embudo (ej.: Nuevo, Cualificado, Propuesta, Negociación, Ganado, Perdido). El cambio de etapa dispara automatizaciones e impacta en informes.
10. type
Tipo: Selection. Indica si el registro es Lead o Oportunidad. Los leads suelen ser contactos iniciales; las oportunidades, oportunidades cualificadas con previsión de ingreso. Afecta a vistas y etapas disponibles.
11. expected_revenue
Tipo: Float. Ingreso esperado si se gana la oportunidad. Se usa en el cálculo del valor del pipeline y en previsiones; a menudo se calcula combinando importe y probabilidad.
12. probability
Tipo: Float. Probabilidad de cierre en porcentaje (0–100). Sirve para ponderar el pipeline; puede fijarse manualmente o derivarse según la etapa.
13. company_id
Tipo: Many2one (res.company). En entornos multiempresa, indica la compañía propietaria del lead. Afecta a visibilidad, moneda y reglas de contabilidad.
14. description
Tipo: Text. Notas detalladas sobre el lead u oportunidad: resúmenes de reuniones, contexto y cualquier información que el equipo comercial necesite conservar.
15. create_date
Tipo: Datetime. Fecha y hora de creación del registro. Generada automáticamente; útil para medir antigüedad del lead y tiempos de respuesta.
16. write_date
Tipo: Datetime. Fecha y hora de la última modificación. También automática; permite saber cuándo se actualizó por última vez el lead.
17. date_open
Tipo: Datetime. Momento en que el lead fue asignado por primera vez a un usuario (cuando user_id se rellena). Sirve para medir el tiempo hasta el primer contacto.
18. date_closed
Tipo: Datetime. Fecha de cierre del lead (ganado o perdido). Se establece al mover el registro a una etapa cerrada y se usa en el análisis del ciclo de ventas.
19. date_deadline
Tipo: Date. Fecha prevista de cierre. Se utiliza para planificación de actividades y previsiones temporales del pipeline.
20. active
Tipo: Boolean. Indicador de archivo: cuando es False, el registro está archivado y no aparece en vistas por defecto. Suele usarse en lugar de borrar leads.
21. street, street2, city, zip
Tipo: Char. Campos de dirección. Se rellenan si hay dirección antes de la conversión y se copian al partner cuando se convierte el lead.
22. country_id
Tipo: Many2one (res.country). País del contacto. Importante para informes regionales y formato de direcciones; también para segmentación territorial.
23. state_id
Tipo: Many2one (res.country.state). Provincia o región. Su dominio suele depender del país seleccionado; se usa para segmentar territorios.
24. source_id
Tipo: Many2one (utm.source). Fuente del lead: web, recomendación, campaña, etc. Es clave para atribuir marketing y entender de dónde vienen los contactos.
25. campaign_id
Tipo: Many2one (utm.campaign). Campaña de marketing asociada. Permite calcular ROI por campaña cuando los leads proceden de emails o anuncios.
26. activity_ids
Tipo: One2many (mail.activity). Actividades programadas: llamadas, reuniones y tareas vinculadas al lead. Alimenta el widget de actividades y los recordatorios.
27. color
Tipo: Integer. Índice de color para vistas kanban y listas. Útil para destacar prioridad, origen o cualquier criterio visual que facilite la gestión.
28. message_ids
Tipo: One2many (mail.message). El chatter del registro: notas internas, correos y el historial de comunicaciones para mantener contexto completo.
Cómo se utiliza este modelo en los flujos de negocio
1. Captación de leads desde la web
Cuando alguien rellena un formulario en tu sitio web, se crea automáticamente un crm.lead con los datos del formulario (email, nombre, comentario). Ese registro se incorpora al pipeline para que el equipo comercial realice el seguimiento.
2. Cualificación y conversión de leads
Los comerciales avanzan leads por las etapas; al cualificar uno, cambian su tipo a Oportunidad y fijan previsiones como expected_revenue. Al cerrar favorablemente, Odoo genera o enlaza el res.partner y puede crear un pedido de venta.
3. Informes del pipeline comercial
Los responsables usan los datos de crm.lead para medir el valor del pipeline: expected_revenue, probability y stage permiten calcular pipelines ponderados. Los filtros por user_id y team_id muestran rendimiento por comercial o equipo.
4. Atribución de marketing
Los campos source_id y campaign_id vinculan leads a acciones de marketing. Cuando vienen de campañas o anuncios, los parámetros UTM suelen poblar estas referencias para analizar la eficacia de cada iniciativa.
5. Gestión de actividades y seguimiento
Los comerciales programan llamadas, reuniones y tareas en activity_ids. La fecha límite de la actividad aparece en vistas y recordatorios para garantizar el seguimiento oportuno.
Cómo amplían los desarrolladores este modelo
Los desarrolladores amplían crm.lead siguiendo patrones establecidos, siendo la herencia de modelos la técnica principal.
Herencia de modelos
Utiliza _inherit = 'crm.lead' para añadir o modificar comportamiento. Así puedes declarar campos nuevos, redefinir métodos o añadir restricciones sin tocar el código original, facilitando futuras actualizaciones.
Añadir campos
Declara nuevos campos en el modelo heredado usando el tipo adecuado (Char, Many2one, Boolean, Integer, Text, Selection). Ejemplos habituales: fuente personalizada, interés de producto o sector. Valora campos dependientes de compañía en entornos multiempresa.
Extensiones en Python
Sobrescribe create, write o action_convert para introducir lógica adicional, siempre llamando a super() cuando corresponda. Usa los decoradores de Odoo (@api.depends, @api.onchange) para campos computados y comportamiento en la interfaz. Ten cuidado con la lógica de cambio de etapa y conversión.
Odoo Studio
Odoo Studio permite añadir campos y ajustar pantallas sin programar. Es útil para cambios rápidos, pero para lógica compleja o mantenibilidad a largo plazo conviene crear módulos personalizados.
Buenas prácticas
- Configura las etapas para que reflejen tu proceso comercial. Si lo necesitas, separa secuencias de etapas para leads y para oportunidades.
- Captura los parámetros UTM en los formularios web para rellenar source_id y campaign_id y así tener atribución de marketing desde el origen.
- Usa team_id para reparto por rondas o territorios. Define las reglas de asignación en crm.team para automatizar la distribución.
- Para integraciones API, emplea XML-RPC o JSON-RPC: crm.lead está expuesto y suele ser práctico mapear IDs externos a un campo propio (por ejemplo, ref) para sincronizaciones.
- Para campos personalizados, usa prefijos (como x_ o el prefijo de tu módulo) y evita nombres genéricos que puedan colisionar con futuras versiones de Odoo.
Errores habituales
- Crear leads duplicados en lugar de buscar por email_from. Antes de crear, normaliza y comprueba duplicados (por ejemplo con email_normalized) para evitar registros repetidos.
- Confundir type (Lead vs Opportunity) con stage_id. El tipo determina la naturaleza del registro; la etapa indica su posición en el embudo. Ambos afectan a informes y automatizaciones.
- No asignar user_id o team_id. Los leads sin responsable tienden a perderse; configura reglas de asignación automáticas o procesos manuales claros.
- Sobrescribir la lógica de conversión sin llamar a super(). action_convert realiza pasos clave; amplíala en lugar de sustituirla para no romper flujos estándar.
- Añadir campos obligatorios sin proporcionar valores por defecto. Al actualizar módulos existentes, los registros previos pueden fallar validaciones si faltan datos requeridos.
Conclusión
El modelo crm.lead es el núcleo del CRM en Odoo: contiene leads y oportunidades y alimenta el pipeline comercial. Comprender sus campos y cómo se extiende te permitirá configurar, personalizar e integrar Odoo con seguridad.
Tanto si eres consultor funcional que modela procesos de venta como desarrollador que crea módulos CRM, dominar crm.lead te ahorrará tiempo y reducirá errores en proyectos.
¿Necesitas ayuda con tu implantación de Odoo?
Dasolo acompaña a empresas en la implantación, personalización y optimización de Odoo. Nos especializamos en integraciones API y desarrollo a medida, con experiencia profunda en la arquitectura de datos y modelos como crm.lead.
Si necesitas ayuda con la implantación de Odoo, el desarrollo de módulos CRM a medida o integraciones, podemos ayudarte a planificar e implementar la solución. Solicita una demo para comentar tu proyecto.