workspace-v1/shared/knowledge-base/reference/odoo/docs/03-modelado-datos/MODELO-crm.md
rckrdmrd cb4c0681d3 feat(workspace): Add new projects and update architecture
New projects created:
- michangarrito (marketplace mobile)
- template-saas (SaaS template)
- clinica-dental (dental ERP)
- clinica-veterinaria (veterinary ERP)

Architecture updates:
- Move catalog from core/ to shared/
- Add MCP servers structure and templates
- Add git management scripts
- Update SUBREPOSITORIOS.md with 15 new repos
- Update .gitignore for new projects

Repository infrastructure:
- 4 main repositories
- 11 subrepositorios
- Gitea remotes configured

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 04:43:28 -06:00

8.3 KiB

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