Proyecto de demostración · empresa ficticia · no conectado a sistemas reales

Una empresa española de muebles montada entera sobre Odoo 17, con panel del día y botón para devolverla a cero

Catálogo de 80 muebles, almacén que cuadra con el libro, tienda publicada en español y euros, pedidos, compras y un panel que cada mañana dice qué necesita decisión. Todo sobre un laboratorio aislado (furniture_db) con datos de ejemplo declarados como tales, y con la restauración probada de verdad: un clic y el laboratorio vuelve a su estado inicial.

80muebles publicados, con precio, coste, categoría y material
2.190unidades en almacén, idénticas al respaldo de movimientos
56 + 11pedidos de venta y de compra, con su almacén detrás
21 %IVA español en todo; precios y formatos en euros
El proyecto

Qué es y por qué se ha hecho

Qué es

Un laboratorio de Odoo 17 que simula una empresa de muebles de hogar completa: catálogo propio, clientes y proveedores del sector, almacén con movimiento trazado, pedidos de venta y de compra, tienda online y un panel del día con botón para restaurarlo todo.

La empresa es ficticia: Muebles del Hogar S.L., con sede en Castelló de la Plana y NIF de laboratorio. Los datos son de ejemplo y así se declara aquí y en el propio panel. No hay ningún dato de ninguna empresa real detrás.

El catálogo de producto sí es real en su origen: las 80 piezas se extrajeron de District Home (Green Front Furniture, EE. UU.) con su precio, su fotografía y su ficha original, de la que se dedujeron material y estilo. El laboratorio, en cambio, está ambientado como empresa española: nombres de mueble, categorías, descripciones, moneda e impuestos en español. Ese traslado se cuenta aquí porque es parte del trabajo, no un detalle escondido.

Por qué se ha hecho

Para demostrar capacidad real de montar un ERP de empresa —y no una maqueta— con criterio de ingeniería: datos que cuadran entre pantallas, automatizaciones que se pueden reejecutar y un entorno que se puede romper probando porque vuelve solo a su sitio.

Tres reglas se sostienen en todo el proyecto:

  • Si no cuadra, no se tapa. El almacén no se «ajusta» a ojo: cada unidad de las 2.190 está respaldada por un movimiento, y la diferencia con el libro se verifica a cero.
  • Lo que no se sabe, se dice. El panel separa lo que calcula con reglas de lo que redactaría un modelo de IA; sin clave de modelo, lo declara en vez de aparentar que ha pensado.
  • Nada se promete sin prueba. Cada afirmación de esta página se puede comprobar en el propio laboratorio mientras lo visitas.
El laboratorio

Cómo está montado

Odoo 17 con PostgreSQL 15, contenedores separados y aislados del resto, servido por HTTPS propio. El laboratorio vive en un servidor modesto: lo que se demuestra aquí no necesita infraestructura de gran empresa.

Aislado de verdad

Base furniture_db en su propio contenedor, con filtro de bases: el servidor no sirve ninguna otra base. Un dominio propio, certificado HTTPS y el puerto de Odoo cerrado al exterior.

Coherente consigo mismo

Los mismos 80 muebles, con el mismo precio y el mismo stock, aparecen en el modelo propio, en los productos estándar y en la tienda. Ninguna pantalla cuenta una historia distinta.

Español y euros

1.469 plantillas traducidas, el CRM con sus tramos en español (Nuevo, Calificado, Propuesta, Ganado), IVA del 21 % en productos, pedidos y compras, y formato español de importes.

# Comprobación de que el almacén cuadra con el libro (consulta real al laboratorio)
existencias ......... 2.190
respaldo movimientos . 2.190
diferencia ........... 0   <- nada sin justificar

# Lo que dice el panel del día (reglas, no modelo):
"Buenos días. El catálogo tiene 80 muebles publicados y el almacén guarda
 2.190 unidades en 80 referencias, por un valor de 5.173.986 €."
"De 56 pedidos, 37 están confirmados y 19 siguen en presupuesto."
"He revisado 30 actividades asignadas: 5 vencidas, 7 de hoy, 4 de mañana y 15 próximas."
Lo construido

Qué hay dentro, y en qué estado

Diez piezas con su estado real: VERIFICADO significa que hay una comprobación hecha y citada, no una intención.

CATÁLOGO

80 muebles coherentes

Del sofá al espejo, con precio, coste, categoría, material, estilo, garantía, descripción e imagen. Los tres catálogos muestran lo mismo.

VERIFICADO
TIENDA

Escaparate publicable

Tienda online en español, con nueve secciones propias (sofás, comedor, dormitorio, recibidores…), precios en euros y ficha de producto con su fotografía.

VERIFICADO
ALMACÉN

Existencias cuadradas

2.190 unidades respaldadas al 100 % por movimientos trazados. Cuando hubo un descuadre de 11 unidades, se buscó la causa y se cerró: no se ajustó a ojo.

VERIFICADO
VENTAS

Pedidos y compras con historia

56 pedidos de venta (37 confirmados y 19 presupuestos), 11 pedidos de compra, 48 albaranes y un almacén con entregas hechas, listas y recepciones pendientes.

VERIFICADO
ESPAÑOL

Idioma, moneda e impuestos

Español cargado y por defecto, euro como única moneda, IVA del 21 % aplicado a productos, pedidos y compras, y empresa con dirección y NIF de laboratorio.

VERIFICADO
LIMPIEZA

Sin restos de la demo

Retirado el catálogo genérico y sus facturas, renombrados los socios heredados, sustituidas las categorías de la demo y pasadas a español las oportunidades y actividades.

VERIFICADO
PANEL

Panel del día

Cifras, lo que pide atención y salud del dato. Entre sus comprobaciones va que el almacén cuadre y que todos los pedidos apunten al catálogo real.

VERIFICADO
IA

IA declarada, no simulada

La redacción por modelo está preparada y se precomputa aparte. Si no hay clave, el panel lo dice: las frases que ves son reglas explícitas. Ninguna caja negra.

VERIFICADO
REINICIO

Botón para dejarlo como nuevo

El panel puede devolver el laboratorio a su estado inicial desde una instantánea canónica. Exige sesión de administrador y tiene tres minutos de espera entre reinicios.

VERIFICADO
RESTAURAR

Restauración probada de verdad

No basta con el botón: se paró Odoo, se rehízo la base, se cargó la instantánea y se arrancó. El manifiesto de 14 recuentos salió en verde y el almacén siguió cuadrando.

VERIFICADO
El panel del día

Lo que hace útil a un ERP: decir qué toca hoy

Qué responde

  • Las cifras de un vistazo: catálogo, valor del almacén, entregas y recepciones, pedidos confirmados frente a presupuestos.
  • Lo que pide decisión: las actividades vencidas y las de hoy, las entregas preparadas para salir y las recepciones pendientes, cada una con su persona y su documento.
  • La salud del dato: comprueba que el almacén cuadre con el libro y que ningún pedido apunte a un producto que no existe. Un ERP no puede arreglar lo que no se registra.
  • Lo que no hay: si un dato no existe o un módulo no se usa, lo dice en vez de rellenarlo.

Cómo está hecho

Es un servicio propio, independiente de Odoo: lee la base por consulta directa y solo lee. Si el laboratorio no responde, sirve la caché del día y lo declara, en lugar de enseñar una pantalla rota o inventarse cifras.

Las frases de resumen son reglas deterministas: se pueden leer, discutir y corregir. La parte de modelo de lenguaje está preparada para redactarlas, y si no hay clave configurada el panel lo dice abiertamente.

El botón de reinicio exige haber entrado antes en Odoo como administrador: un visitante anónimo recibe un 403. Es la única acción del panel que escribe algo.

Evidencia

Capturas reales, no maquetas

Pantallazos tomados del laboratorio publicado mientras se preparaba esta página:

Captura real del panel del día del laboratorio de muebles: cifras del catálogo y del almacén, lo que pide atención y salud del dato
El panel del día del laboratorio de muebles. Captura real, publicada en /panel/.
Captura real de la tienda del laboratorio: muebles con precios en euros y secciones en español
La tienda, con precios en euros y secciones en español, servida desde Odoo.
Captura real de la ficha de un producto del catálogo, con su descripción en español, material y precio en euros
Ficha de producto: descripción, material y precio, todo en español y en euros.

Toda cifra citada en esta página (80 muebles, 2.190 unidades, 56 pedidos, 11 compras, IVA del 21 %, 1.469 plantillas traducidas) sale de consultas hechas sobre el laboratorio en marcha. Los pantallazos son del propio laboratorio publicado, sin retoques.

Probar

Acceso a la demostración

Tu turno

El laboratorio está publicado y se puede tocar. Se sirve únicamente la base furniture_db, aislada por configuración: no hay ningún dato real detrás de estas claves.

Credenciales de demostración

Es un usuario de pruebas con ventas, compras y almacén, y sin acceso a la configuración de la empresa. La contraseña del administrador no se publica. El laboratorio está aislado por configuración: no hay ningún dato real detrás de estas claves.

Puedes trastear sin miedo: esto se limpia solo

El servidor devuelve el laboratorio a su estado inicial cada media hora, así que lo que cambies no se queda para el siguiente que entre. No hay botón de reinicio a propósito: así nadie puede dejar la demo rota para otro.

Abrir el panel del día Ver la tienda
Decisiones

Lo que se decidió, y por qué

Cada decisión con su motivo y su contrapartida. Ninguna es la única posible: son las que se sostienen con lo que hay.

ERP

Odoo 17, no un CRM a medida

Montar el ERP sobre Odoo da contabilidad, almacén, compras y web ya probados por miles de empresas; el trabajo se concentra en el dato y en la ambientación. La contrapartida: se hereda su modelo y hay que limpiar los restos de la demo, cosa que se hizo y se documenta.

DATO

Una sola verdad para tres catálogos

El modelo propio (furniture.product), los productos estándar y la tienda muestran los mismos 80 muebles con el mismo precio y las mismas existencias. Cuando hubo tres catálogos a la vez se unificaron; mantenerlos separados habría garantizado que se contradijeran.

PANEL

El panel lee por SQL, sin ORM

Es un servicio aparte, con la librería estándar de Python y sin dependencias: si Odoo está caído o migrando, el panel sigue diciendo lo que hay. A cambio, las consultas van contra el esquema de Odoo y hay que revisarlas si algún día se cambia de versión.

HONESTIDAD

Sin laboratorio, caché declarada

Si no puede leer, el panel sirve la última cifra del día y lo dice; nunca inventa un número. Y la parte de redacción por IA se declara: sin clave de modelo, las frases son reglas, y se ve.

DEMO

Reinicio con sesión y espera

El laboratorio se rompe probando, así que hay botón para devolverlo a su instantánea canónica. Se exige sesión de administrador de Odoo (un anónimo recibe un 403) y tres minutos entre reinicios, para que un visitante no borre la demo que otro está mirando.

ASISTENTE

Responde con el repositorio, no con imaginación

El asistente técnico busca en los documentos reales del proyecto (README, tests, panel y scripts) y responde con eso. Si no encuentra nada, lo dice. Si no hay clave de modelo, enseña los fragmentos exactos en lugar de aparentar.

Stack

Con qué está hecho

Aplicación

Módulo propio de Odoo 17 en Python: modelo furniture.product, vistas de lista, formulario y búsqueda, permisos de acceso, controlador web para el panel del módulo y datos del catálogo en CSV.

Infraestructura

PostgreSQL 15 y Odoo en contenedores separados y aislados, nginx delante con HTTPS de Let's Encrypt, y toda la pieza del panel en un servicio systemd propio que solo lee.

Calidad

66 pruebas de pytest sobre catálogo, módulo, panel y asistente, ejecutadas en cada push con GitHub Actions; un verificador de 14 recuentos contra el estado inicial y una instantánea canónica para restaurarlo.

El flujo

Cómo circula el dato, de la oficina a la decisión

El ciclo real del laboratorio, de punta a punta: quién escribe, dónde queda y quién lo lee.

Oficina (Odoo 17)                Tienda pública
  │ ventas, compras, CRM            │ pedidos del escaparate
  ▼                                 ▼
PostgreSQL 15  ──  furniture_db (contabilidad, almacén con movimiento trazado)
  │
  ├──►  Panel del día (servicio propio, solo lee)  ──►  «qué toca hoy» y salud del dato
  │
  └──►  Asistente técnico (este chat)  ──►  responde con los documentos del repositorio
                                              │
                                              ▼
                                    ¿cuadra? ¿está probado? ¿puedo montarlo?
Tests

Lo que está probado, y cómo comprobarlo

66 pruebas con pytest: 62 corren sin Odoo ni PostgreSQL y se lanzan en cada push con GitHub Actions; las otras 4 van contra el laboratorio en marcha y se saltan solas cuando no está.

CATÁLOGO

El dato no se descuadra

80 fichas con identificadores correlativos, reparto por las 9 categorías, precios y costes con margen coherente, existencias enteras, garantía de 24 meses y descripciones en español. Si alguien toca el CSV y descuadra el reparto, la suite lo dice.

MÓDULO

El módulo está bien formado

Manifiesto con sus dependencias y su licencia, versión de Odoo 17, cada fichero declarado existe, las vistas son XML válido y usan el modelo propio, los permisos son los correctos, el controlador exige sesión y el modelo declara todos los campos del catálogo.

PANEL

Las frases son reglas

Formato español de importes y porcentajes, las frases del resumen con sus cifras, qué dice cuando un dato de salud falla y qué ignora cuando no aplica, y la configuración del laboratorio por variables de entorno.

ASISTENTE

Responde con el repositorio

Que encuentre los fragmentos correctos, que cite fichero y línea, que no use los documentos pesados, que diga «no encuentro nada de eso» cuando la pregunta es inventada y que, sin clave de modelo, devuelva los fragmentos en vez de redactar.

# En tu máquina, sin Odoo ni PostgreSQL
pip install -r requirements-dev.txt
python -m pytest                 # 62 pruebas

# Contra el laboratorio en marcha (Odoo, panel y verificador)
MUEBLES_LAB=1 python -m pytest -m vivo   # 4 pruebas

# El verificador del estado inicial del laboratorio
python3 panel/demo_restaurar_muebles.py --verificar   # 14 recuentos OK

Las pruebas y el flujo de integración continua están en el repositorio: carpeta tests/ y resultados en Actions. En cada push se ejecutan solas.

Código

El repositorio, abierto

Todo lo que se cuenta aquí está en GitHub: el módulo, los scripts que montaron el laboratorio, el panel, el asistente y las pruebas.

Qué mirar primero

  • El README explica qué es, cómo se monta desde cero y qué hace cada script, en orden.
  • La carpeta tests/ es la mejor radiografía del proyecto: dice lo que se da por bueno y lo comprueba.
  • El panel (panel/) es el sitio donde se ve la forma de trabajar: solo lee, declara lo que no sabe y no depende del ORM.

Enlaces

Asistente técnico

Pregúntale al proyecto

Responde solo con lo que hay en el repositorio: README, decisiones, panel, scripts y pruebas. Si la respuesta no está ahí, lo dice en lugar de inventarla.

Hola. Soy el asistente técnico del laboratorio de muebles. Pregúntame por el catálogo, el almacén, el panel, las pruebas o cómo está montado.

El asistente cita de qué fichero del repositorio saca cada respuesta.