Saltar al contenido
POLARGATE
Servicios de apoyo jurídico

El CRM de NationwideLegal, sobre Odoo 18

NationwideLegal lleva su operación comercial en un CRM que Polargate construyó sobre Odoo 18 Enterprise y del que sigue llevando la dirección técnica: un único módulo propio, cinco modelos nuevos, los permisos rehechos alrededor de cómo vende el equipo de verdad y una verificación contra producción después de cada despliegue.

Un hombre mayor señala una página de un grueso archivador de anillas junto a una joven, en una sala de lectura en penumbra con estanterías de archivadores
·
99
tests automáticos escritos para el módulo, partiendo de cero
313 ms
en leer los campos nuevos sobre 400 registros reales de producción

El problema

El CRM tenía que encajar con un equipo comercial, no con un organigrama. Odoo trae un rol de administrador muy amplio y poca cosa entre eso y un usuario normal: el comercial que necesitaba ver todo el pipeline acababa pudiendo cambiarlo todo, y quien necesitaba dar de alta a un compañero tenía que ser administrador para hacerlo. Las actividades lo empeoraban, porque el calendario enseñaba el trabajo de todos a todos. Además, el correo transaccional fallaba, las pantallas de alta no se parecían en nada a la herramienta de la que venía el equipo, y nadie había comprobado si una actualización futura se podía deshacer sin perder datos.

Qué construimos

Un único módulo propio sobre Odoo 18 Enterprise, sin depender de nada más allá de módulos Community: cinco modelos nuevos, cada uno con su fichero de permisos completo y sin huecos, más extensiones de los modelos nativos de oportunidades, contactos, actividades y etapas. El modelo de acceso se rehízo como cuatro controles separados por usuario en lugar de un rol monolítico. Un grupo propio da de alta usuarios con una barrera dentro del propio modelo, de forma que nunca puede crear ni tocar a un administrador. El calendario se resolvió fuera de las reglas de registro, porque en ese modelo la lectura no se gobierna así. El correo se arregló en la capa de autenticación, no en el ERP. Y la cadena de entrega lleva sus propias reglas: la suite de tests corre en cada build de desarrollo y de preproducción, el paso a producción lo dispara una persona, y cada despliegue termina con comprobaciones de solo lectura contra el sistema vivo.

El resultado

Quince entregables completados en cinco semanas y consolidados en un documento de entrega. El módulo pasó de no tener tests propios a 99 en verde, con los casos negativos verificados también. Cada comercial ve su calendario y el administrador los ve todos. Se pueden dar de alta usuarios sin repartir permisos de administrador, verificado en navegador con una cuenta que solo tiene ese permiso. El correo transaccional sale. Las migraciones son reversibles porque la vuelta atrás se ensayó: 132 filas y 56 relaciones sobre 200 registros volvieron intactas. Del merge a la versión viva en producción pasan de diez a quince minutos, y cada despliegue termina con las mismas comprobaciones: en la última, los campos nuevos se leyeron sobre 400 registros reales en 313 ms.

Stack

  • Odoo

El contexto

El cliente es NationwideLegal. Su operación comercial vive en un CRM: oportunidades, las firmas a las que pertenecen, los contactos de cada firma y las direcciones que hay detrás. Polargate construyó ese CRM sobre Odoo 18 Enterprise y desde entonces lleva su dirección técnica.

Todo lo hecho a medida vive en un único módulo propio. No depende de nada más allá de módulos Community, así que no hay ningún complemento de terceros en el camino crítico. El módulo aporta cinco modelos nuevos, cada uno con su fichero de permisos completo y sin huecos, y extiende los modelos nativos de oportunidades, contactos, actividades y etapas.

La cadena de entrega es deliberadamente aburrida: repositorio privado, proyecto gestionado de Odoo y la producción del cliente apuntando al mismo entorno. La plataforma corre la suite de tests en cada build de desarrollo y de preproducción. El paso a producción nunca es automático, lo dispara una persona a mano. Del merge a la versión viva en producción pasan de diez a quince minutos.

Permisos montados sobre cómo vende el equipo

Rehicimos el modelo de acceso alrededor de cómo venden los comerciales de verdad, con cuatro controles separados por usuario en lugar de un único rol monolítico. A un usuario se le puede dar uno y no los otros, que es lo que necesita un equipo comercial y lo que un rol único no sabe expresar.

El calendario

Cada comercial ve sus propias actividades. El administrador las ve y las gestiona todas. Llegar ahí no fue una regla de registro. En Odoo, la lectura de actividades no se gobierna con reglas de registro, porque ese modelo trae su propia búsqueda y su propia comprobación de acceso nativas, así que hubo que resolverlo por otra vía. La primera versión se apoyaba en un indicador de contexto y se filtraba. Cuando el cliente lo reportó, lo corregimos en caliente y lo volvimos a probar con la cuenta del usuario afectado.

Dar de alta usuarios sin ser administrador

En Odoo no existe de serie un rol intermedio que pueda crear usuarios sin ser administrador. Lo verificamos en un entorno local: el único grupo nativo con ese permiso se auto eleva a administrador en una sola escritura. Así que construimos un grupo propio, con su lista de control de acceso y una barrera en el propio modelo. No puede dejar a nadie con grupos de administrador, no puede modificar a un usuario que ya lo es y no puede escribir la contraseña de otro. Verificado en navegador con una cuenta que solo tiene ese permiso.

Entrada de datos parecida a la herramienta de la que venían

Empresa, dirección y contacto se meten en una sola página, como funcionaba la herramienta que el equipo usaba antes. La detección de duplicados corre sobre un nombre normalizado e indexado que ignora la puntuación y los sufijos legales: avisa y ofrece asociar el registro al que ya existe en vez de crear un segundo. La lista de sufijos hubo que podarla, porque algunas de sus palabras juntaban en uno solo a dos despachos realmente distintos.

Correo transaccional

El correo fallaba y el fallo no estaba en el ERP, estaba en la capa de autenticación. Con la autenticación SMTP habilitada y la cuenta correcta configurada, el error desapareció.

Actualizaciones que se pueden deshacer

No dimos por buena la clasificación de riesgo de una migración: la ensayamos en contenedor, de forma reproducible. El hallazgo: al quitar un campo del modelo, la plataforma no borra la tabla ni las columnas, las deja huérfanas con el dato dentro. Las filas sembradas sobrevivieron al upgrade y la vuelta atrás devolvió el código y el acceso al dato, 132 filas y 56 relaciones sobre 200 registros. La migración es reversible, y lo es porque se probó, no porque lo diga la documentación.

Verificación contra producción, después de cada despliegue

Hay una receta escrita y se ejecuta después de cada despliegue. Leer la versión viva del módulo. Comprobar la vista contra la definición combinada, no contra la de herencia. Confirmar que los campos nuevos existen. Cronometrar su lectura sobre registros reales: 400 oportunidades respondieron en 313 ms, que es la comprobación de que no se ha colado ni un bucle ni una consulta pesada. Descargar el paquete de assets y validarlo, porque un paquete roto no se ve hasta que un usuario abre la página. La disciplina es dura y simple: en producción se mira y no se toca.

Las auditorías funcionan igual. La primera fase no es leer código, es ejecutar el escenario contra un entorno real suplantando al usuario afectado y anotando el estado antes y después de cada escritura. Validar un permiso con una cuenta de administrador no prueba nada, porque el bypass la exime. Un test que solo comprueba el texto de un atributo tampoco prueba nada. Una de esas auditorías movió 41 agentes y 2,3 millones de tokens, con dos escépticos independientes rebatiendo cada hallazgo antes de darlo por bueno.

Dirección tecnológica continuada

Quince entregables completados en cinco semanas y consolidados en un documento de entrega. El módulo pasó de no tener tests propios a 99 en verde, con los casos negativos verificados también, porque un test de permisos que pasa cuando debería fallar es peor que no tener test.

El encargo se sostiene sobre una regla que lo mantiene sano: el alcance y la prioridad se acuerdan antes de entrar en la lista, no después, y el documento de referencia semanal lo emite Polargate.

FAQ

Preguntas sobre este proyecto

¿Se puede personalizar Odoo sin perder la posibilidad de volver atrás?
Sí, si la vuelta atrás se ensaya en lugar de darse por supuesta. Antes de ejecutar una migración en este CRM, Polargate la reprodujo en contenedor: registros sembrados, upgrade y vuelta atrás. Quitar un campo del modelo no borra la tabla ni las columnas, Odoo las deja huérfanas con el dato dentro, así que 132 filas y 56 relaciones sobre 200 registros volvieron intactas al revertir el código. El ensayo es lo que convierte una clasificación de riesgo en algo sobre lo que decidir.
¿Se pueden dar permisos distintos a los comerciales en Odoo sin hacerlos administradores?
Sí, con trabajo. Odoo trae un rol de administrador muy amplio y poca cosa entre eso y un usuario normal, y el único grupo nativo que puede crear usuarios se auto eleva a administrador en una sola escritura, algo que Polargate verificó en un entorno local. En este CRM el modelo de acceso se rehízo como cuatro controles separados por usuario, más un grupo propio que da de alta usuarios pero no puede dejar a nadie con grupos de administrador, no puede modificar a un usuario que ya lo es y no puede escribir la contraseña de otro. Se verificó en navegador con una cuenta que no tiene ningún otro permiso.

Proyectos relacionados

INITIATE

Arranca el motor

Cuéntanos qué estás construyendo en unas pocas preguntas cortas. Un ingeniero senior responde por escrito en 48 horas laborables con una primera lectura de alcance, plazos y precio.