Ir al contenido

OCA vs módulo propio: cuándo contribuir y cuándo forkar

Criterios de decisión para proyectos reales
11 de julio de 2026 por
OCA vs módulo propio: cuándo contribuir y cuándo forkar
Atemi, Aitor Atencia

Odoo · OCA · Opinión

Instalar un módulo de la Odoo Community Association (OCA) sin auditarlo, y escribir un módulo propio sin mirar antes si ya existe, son los dos extremos del mismo error: decidir por costumbre en vez de por criterio.

Logo Odoo
La OCA mantiene cientos de repositorios con licencia AGPL/LGPL listos para producción.

Antes de escribir nada

Buscar en OCA primero no es pereza, es criterio

La OCA agrupa módulos probados en cientos de instalaciones reales, mantenidos por una comunidad con revisión de código activa. Antes de escribir un módulo de cero para necesidades comunes (contabilidad, RRHH, calidad, gestión documental), merece la pena comprobar si ya existe algo maduro.

# Repositorios habituales a revisar antes de empezar
# https://github.com/OCA/server-tools
# https://github.com/OCA/account-financial-tools
# https://github.com/OCA/web
# https://github.com/OCA/reporting-engine

Criterios de decisión

Qué mirar antes de instalar un módulo de la comunidad

No todos los repositorios OCA tienen el mismo nivel de mantenimiento. Antes de añadirlo como dependencia de un proyecto en producción, conviene revisar un checklist mínimo.

SeñalQué indica
Último commit reciente y CI en verdeMantenimiento activo, compatible con tu versión
Tests (tests/) presentesMenor riesgo de regresiones al actualizar
Issues abiertos sin respuesta durante mesesPosible abandono, revisa forks activos
Dependencias cruzadas con otros módulos OCACoste de mantenimiento oculto si luego los quitas

Cuando no encaja del todo

Forkar vs. extender vs. escribir de cero

Si el módulo OCA cubre el 80% pero le falta algo específico del cliente, la primera opción no es forkarlo: es crear un módulo propio que lo extienda vi _inherit, manteniendo el original intacto y actualizable.

# mi_modulo_extension/models/account_move.py
class AccountMove(models.Model):
    _inherit = "account.move"  # viene de un modulo OCA

    campo_especifico_cliente = fields.Char()

Forkar el repositorio completo solo se justifica cuando necesitas modificar el comportamiento central del módulo de forma incompatible con futuras actualizaciones, y aun así conviene documentar el fork y evaluar periódicamente si se puede volver a converger con upstream.

Resumen

Revisa OCA antes de escribir de cero, audita mantenimiento y tests antes de instalar, y extiende con _inherit en vez de forkar salvo que sea estrictamente necesario. La decisión correcta rara vez es "todo propio" ni "todo OCA": es un criterio caso por caso.

en Odoo
Wizards (TransientModel): flujos multi-paso bien diseñados
Estado temporal, validación y retorno de acciones al cerrar