workspace-v1/shared/knowledge-base/reference/odoo/docs/03-modelado-datos/MODELO-project.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

11 KiB

Modelo de Datos: Project

Modulo: project Total Modelos: 6+ Modelos Documentados: 5 (principales)


1. Indice de Modelos Principales

Modelo Descripcion Lineas Archivo
project.task Tareas 2,212 project_task.py
project.project Proyectos 1,443 project_project.py
project.task.type Etapas tareas 239 project_task_type.py
project.milestone Hitos 143 project_milestone.py
project.project.stage Etapas proyectos 83 project_project_stage.py

2. Detalle por Modelo

2.1 project.task (Tareas)

Archivo: models/project_task.py Descripcion: Task Hereda de: portal.mixin, mail.thread.cc, mail.activity.mixin, rating.mixin, mail.tracking.duration.mixin

Estados (state)

Estado Nombre UI Tipo
01_in_progress In Progress OPEN
02_changes_requested Changes Requested OPEN
03_approved Approved OPEN
04_waiting_normal Waiting OPEN
1_done Done CLOSED
1_canceled Cancelled CLOSED

Campos Principales

Campo Tipo Req Descripcion
name Char Si Nombre tarea
active Boolean No Activa
state Selection Si Estado actual
stage_id Many2one No Etapa kanban
priority Selection No Prioridad (0/1)
sequence Integer No Orden
is_closed Boolean No Estado cerrado (computed)

Campos de Proyecto

Campo Tipo Descripcion
project_id Many2one Proyecto contenedor
displayed_image_id Many2one Imagen destacada
partner_id Many2one Cliente
company_id Many2one Empresa

Campos de Asignacion

Campo Tipo Descripcion
user_ids Many2many Asignados
date_assign Datetime Fecha asignacion

Campos de Fechas

Campo Tipo Descripcion
date_deadline Datetime Fecha limite
date_end Datetime Fecha fin
date_last_stage_update Datetime Ultima actualizacion etapa

Campos de Subtareas

Campo Tipo Descripcion
parent_id Many2one Tarea padre
child_ids One2many Subtareas
subtask_count Integer Cantidad subtareas

Campos de Dependencias

Campo Tipo Descripcion
depend_on_ids Many2many Bloqueada por
dependent_ids Many2many Bloquea a

Campos de Milestone

Campo Tipo Descripcion
milestone_id Many2one Hito asociado

Campos de Recurrencia

Campo Tipo Descripcion
recurring_task Boolean Es recurrente
recurrence_id Many2one Patron recurrencia
repeat_interval Integer Cada X periodos
repeat_unit Selection day/week/month/year
repeat_type Selection forever/until
repeat_until Date Fecha fin recurrencia

Campos Etapas Personales

Campo Tipo Descripcion
personal_stage_type_ids Many2many Etapas del usuario
personal_stage_id Many2one Etapa personal actual

2.2 project.project (Proyectos)

Archivo: models/project_project.py Descripcion: Project Hereda de: portal.mixin, mail.alias.mixin, rating.parent.mixin, mail.activity.mixin, analytic.plan.fields.mixin

Campos Principales

Campo Tipo Req Descripcion
name Char Si Nombre proyecto
active Boolean No Activo
sequence Integer No Orden
partner_id Many2one No Cliente
company_id Many2one Si Empresa
user_id Many2one No Project Manager
date_start Date No Fecha inicio
date Date No Fecha fin

Campos de Tareas

Campo Tipo Descripcion
task_ids One2many Tareas del proyecto
task_count Integer Total tareas
open_task_count Integer Tareas abiertas
closed_task_count Integer Tareas cerradas
type_ids Many2many Etapas habilitadas

Campos de Visibilidad

Campo Tipo Descripcion
privacy_visibility Selection Visibilidad
privacy_visibility_warning Char Advertencia

Campos Analiticos

Campo Tipo Descripcion
account_id Many2one Cuenta analitica

Campos de Configuracion

Campo Tipo Descripcion
allow_subtasks Boolean Permitir subtareas
allow_milestones Boolean Permitir milestones
allow_task_dependencies Boolean Permitir dependencias
allow_recurring_tasks Boolean Permitir recurrencia

2.3 project.task.type (Etapas de Tareas)

Archivo: models/project_task_type.py Descripcion: Task Stage

Campo Tipo Req Descripcion
name Char Si Nombre etapa
sequence Integer No Orden (default=1)
fold Boolean No Etapa final/plegada
project_ids Many2many No Proyectos asociados
user_id Many2one No Propietario (personal)
rating_active Boolean No Solicitar calificacion
rotting_threshold_days Integer No Dias sin actualizar
mail_template_id Many2one No Template email

2.4 project.milestone (Hitos)

Archivo: models/project_milestone.py Descripcion: Project Milestone

Campo Tipo Req Descripcion
name Char Si Nombre hito
deadline Date No Fecha limite
is_reached Boolean No Alcanzado
project_id Many2one Si Proyecto
task_ids One2many No Tareas vinculadas
task_count Integer No Total tareas
done_task_count Integer No Tareas completadas

2.5 project.project.stage (Etapas de Proyectos)

Archivo: models/project_project_stage.py Descripcion: Project Stage

Campo Tipo Req Descripcion
name Char Si Nombre etapa
sequence Integer No Orden
fold Boolean No Plegada
color Integer No Color
mail_template_id Many2one No Template notificacion

3. Diagrama Entidad-Relacion

┌───────────────────────┐      task_ids        ┌───────────────────────┐
│   project.project     │─────────────────────►│    project.task       │
│                       │                       │                       │
│  - name               │     project_id       │  - name               │
│  - task_count         │◄──────────────────────│  - state              │
│  - allow_subtasks     │                       │  - stage_id           │
│  - account_id         │                       │  - user_ids           │
└───────────┬───────────┘                       └───────────┬───────────┘
            │                                               │
            │ type_ids                           parent_id, child_ids
            ▼                                               │
┌───────────────────────┐                       ┌───────────┴───────────┐
│  project.task.type    │                       │    project.task       │
│                       │                       │    (subtarea)         │
│  - fold               │                       └───────────────────────┘
│  - sequence           │
│  - project_ids        │      milestone_id    ┌───────────────────────┐
└───────────────────────┘                       │  project.milestone    │
                                                │                       │
┌───────────────────────┐◄──────────────────────│  - deadline           │
│    project.task       │                       │  - is_reached         │
│                       │                       │  - task_count         │
│  - milestone_id       │                       └───────────────────────┘
└───────────────────────┘

DEPENDENCIAS:
┌───────────────────────┐    depend_on_ids     ┌───────────────────────┐
│    project.task       │◄────────────────────►│    project.task       │
│    (bloqueada)        │    dependent_ids     │    (bloquea)          │
└───────────────────────┘                       └───────────────────────┘

4. Constantes del Modulo

# Estados cerrados
CLOSED_STATES = {
    '1_done': 'Done',
    '1_canceled': 'Cancelled',
}

# Estados abiertos = todos excepto CLOSED_STATES

# Campos leibles por portal
PROJECT_TASK_READABLE_FIELDS = {
    'id', 'active', 'priority', 'project_id',
    'user_ids', 'date_deadline', 'subtask_count',
    'milestone_id', 'stage_id', 'tag_ids', ...
}

# Campos escribibles por portal
PROJECT_TASK_WRITABLE_FIELDS = {
    'name', 'description', 'partner_id',
    'date_deadline', 'stage_id', 'state', ...
}

5. Tabla Etapas Personales

project.task.stage.personal (tabla: project_task_user_rel)

| task_id | user_id | stage_id |
|---------|---------|----------|
|    1    |    5    |    10    |
|    1    |    7    |    12    |

Cada usuario puede tener diferente etapa para la misma tarea

6. Constraints (Restricciones)

Modelo Campos Validacion Mensaje
project.task company_id, partner_id Tarea y partner deben ser misma empresa Task and partner must be same company
project.task child_ids, project_id Tarea con subtareas no puede ser privada Task with subtasks cannot be private
project.task depend_on_ids No dependencias ciclicas Two tasks cannot depend on each other
project.task parent_id No jerarquia recursiva Cannot create recursive hierarchy
project.task.type user_id, project_ids Etapa personal no puede vincularse a proyectos Personal stage cannot link to projects
project.project stage_id Etapa debe ser misma empresa Stage must be same company as project
project.task.recurrence repeat_interval Intervalo debe ser > 0 Interval should be greater than 0
project.task.recurrence repeat_type, repeat_until Fecha fin debe ser futura End date should be in the future

Referencias:

  • Carpeta models: addons/project/models/