Modelo de Datos: CRM
Modulo: crm
Total Modelos: 7+
Modelos Documentados: 5 (principales)
1. Indice de Modelos Principales
| Modelo |
Descripcion |
Campos |
Archivo |
| crm.lead |
Leads/Opportunities |
80+ |
crm_lead.py |
| crm.stage |
Etapas pipeline |
10+ |
crm_stage.py |
| crm.team |
Equipos venta |
15+ |
crm_team.py |
| crm.team.member |
Miembros |
8+ |
crm_team_member.py |
| crm.lost.reason |
Razones perdida |
3 |
crm_lost_reason.py |
2. Detalle por Modelo
2.1 crm.lead (Lead/Opportunity)
Archivo: models/crm_lead.py
Descripcion: Lead
Hereda de: mail.thread.cc, mail.thread.blacklist, mail.thread.phone, mail.activity.mixin, utm.mixin, format.address.mixin
Campos de Pipeline
| Campo |
Tipo |
Req |
Descripcion |
| name |
Char |
Si |
Nombre oportunidad |
| type |
Selection |
Si |
lead/opportunity |
| stage_id |
Many2one |
No |
Etapa actual |
| priority |
Selection |
No |
Prioridad (0-3) |
| won_status |
Selection |
No |
won/lost/pending (computed) |
| active |
Boolean |
No |
Activa (default=True) |
Campos de Probabilidad
| Campo |
Tipo |
Descripcion |
| probability |
Float |
Probabilidad manual (0-100) |
| automated_probability |
Float |
Probabilidad PLS |
| is_automated_probability |
Boolean |
probability == automated |
Campos de Ingresos
| Campo |
Tipo |
Descripcion |
| expected_revenue |
Monetary |
Ingreso esperado |
| prorated_revenue |
Monetary |
revenue * probability/100 |
| recurring_revenue |
Monetary |
Ingresos recurrentes |
| recurring_plan |
Many2one |
Plan de recurrencia |
| recurring_revenue_monthly |
Monetary |
MRR mensual |
Campos de Fechas
| Campo |
Tipo |
Descripcion |
| date_closed |
Datetime |
Fecha cierre |
| date_open |
Datetime |
Fecha asignacion |
| date_conversion |
Datetime |
Fecha conversion |
| date_deadline |
Date |
Cierre esperado |
| date_last_stage_update |
Datetime |
Ultima actualizacion etapa |
| day_open |
Float |
Dias para asignar |
| day_close |
Float |
Dias para cerrar |
Campos de Contacto
| Campo |
Tipo |
Descripcion |
| partner_id |
Many2one |
Cliente vinculado |
| commercial_partner_id |
Many2one |
Empresa cliente |
| partner_name |
Char |
Nombre empresa |
| contact_name |
Char |
Nombre contacto |
| email_from |
Char |
Email |
| phone |
Char |
Telefono |
| website |
Char |
Sitio web |
| function |
Char |
Cargo |
Campos de Organizacion
| Campo |
Tipo |
Descripcion |
| user_id |
Many2one |
Vendedor |
| team_id |
Many2one |
Equipo de ventas |
| company_id |
Many2one |
Empresa |
| tag_ids |
Many2many |
Etiquetas |
| lost_reason_id |
Many2one |
Razon de perdida |
Campos UTM
| Campo |
Tipo |
Descripcion |
| campaign_id |
Many2one |
Campana UTM |
| medium_id |
Many2one |
Medio UTM |
| source_id |
Many2one |
Fuente UTM |
Restricciones
CHECK(probability >= 0 and probability <= 100)
2.2 crm.stage (Etapas)
Archivo: models/crm_stage.py
Descripcion: CRM Stages
| Campo |
Tipo |
Req |
Descripcion |
| name |
Char |
Si |
Nombre etapa |
| sequence |
Integer |
No |
Orden (default=1) |
| is_won |
Boolean |
No |
Etapa ganadora |
| fold |
Boolean |
No |
Plegada en kanban |
| team_ids |
Many2many |
No |
Equipos asociados |
| rotting_threshold_days |
Integer |
No |
Dias antes de "podrido" |
| requirements |
Text |
No |
Requisitos internos |
| color |
Integer |
No |
Color UI |
| team_count |
Integer |
No |
Cantidad equipos |
2.3 crm.team (Equipos de Venta)
Archivo: models/crm_team.py
Descripcion: Sales Team (extension)
Hereda de: crm.team (sales_team)
| Campo |
Tipo |
Descripcion |
| use_leads |
Boolean |
Habilita leads |
| use_opportunities |
Boolean |
Habilita opportunities |
| alias_id |
Many2one |
Email alias |
| assignment_enabled |
Boolean |
Asignacion automatica |
| assignment_max |
Integer |
Capacidad mensual |
| assignment_domain |
Char |
Dominio asignacion |
| lead_unassigned_count |
Integer |
Leads sin asignar |
| lead_properties_definition |
PropertiesDefinition |
Propiedades custom |
| crm_team_member_ids |
One2many |
Miembros |
2.4 crm.team.member (Miembros)
Archivo: models/crm_team_member.py
Descripcion: Sales Team Member
| Campo |
Tipo |
Descripcion |
| assignment_enabled |
Boolean |
Asignacion habilitada |
| assignment_domain |
Char |
Dominio asignacion |
| assignment_domain_preferred |
Char |
Dominio preferido |
| assignment_optout |
Boolean |
Pausar asignacion |
| assignment_max |
Integer |
Capacidad mensual (default=30) |
| lead_day_count |
Integer |
Leads ultimas 24h |
| lead_month_count |
Integer |
Leads ultimos 30 dias |
2.5 crm.lost.reason (Razones de Perdida)
Archivo: models/crm_lost_reason.py
Descripcion: Opportunity Lost Reason
| Campo |
Tipo |
Req |
Descripcion |
| name |
Char |
Si |
Descripcion razon |
| active |
Boolean |
No |
Activo |
| leads_count |
Integer |
No |
Cantidad leads |
3. Diagrama Entidad-Relacion
┌───────────────────────┐ stage_id ┌───────────────────────┐
│ crm.lead │─────────────────────►│ crm.stage │
│ │ │ │
│ - type │ team_ids │ - is_won │
│ - probability │◄─────────────────────│ - fold │
│ - won_status │ │ - sequence │
│ - expected_revenue │ └───────────────────────┘
└───────────┬───────────┘
│
│ user_id, team_id
▼
┌───────────────────────┐ member_ids ┌───────────────────────┐
│ crm.team │─────────────────────►│ crm.team.member │
│ │ │ │
│ - use_leads │ │ - assignment_max │
│ - use_opportunities │ │ - lead_month_count │
│ - assignment_enabled │ └───────────────────────┘
└───────────────────────┘
┌───────────────────────┐ lost_reason_id ┌───────────────────────┐
│ crm.lead │─────────────────────►│ crm.lost.reason │
│ │ │ │
│ (perdida) │ │ - leads_count │
└───────────────────────┘ └───────────────────────┘
4. Constantes del Modulo
# Prioridades disponibles
AVAILABLE_PRIORITIES = [
('0', 'Low'),
('1', 'Medium'),
('2', 'High'),
('3', 'Very High'),
]
# Tipos de registro
type = Selection([
('lead', 'Lead'),
('opportunity', 'Opportunity')
])
# Estados won/lost
won_status = Selection([
('won', 'Won'),
('lost', 'Lost'),
('pending', 'Pending'),
])
5. Modelo de Scoring
crm.lead.scoring.frequency
| Campo |
Tipo |
Descripcion |
| variable |
Char |
Campo analizado |
| value |
Char |
Valor especifico |
| won_count |
Float |
Conteo ganadas + 0.1 |
| lost_count |
Float |
Conteo perdidas + 0.1 |
| team_id |
Many2one |
Equipo (NULL = global) |
Referencias:
- Carpeta models:
addons/crm/models/
- Constantes:
addons/crm/models/crm_stage.py