Files
odoo-expertos.com/fr/odoo-ia/instalacion-odoo-ia-ubuntu-linux-2025/index.html
T
2026-08-28 10:11:11 -03:00

884 lines
39 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="fr">
<head>
<!-- Performance: Preconnect to critical origins -->
<link rel="preconnect" href="https://d3js.org" crossorigin>
<link rel="preconnect" href="https://images.pexels.com" crossorigin>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
<link rel="alternate icon" href="/favicon.ico">
<title>Instalacion Odoo IA Ubuntu Linux 2025 | Odoo Expertos · FR</title>
<link rel="canonical" href="https://www.odoo-expertos.com/fr/odoo-ia/instalacion-odoo-ia-ubuntu-linux-2025/">
<meta name="description" content="Guía completa para instalar Odoo con IA en Ubuntu Linux 2025. Tutorial paso a paso con comandos, configuración y optimiz - Instalacion Odoo IA Ubuntu Linux 2025 | FR">
<meta name="keywords" content="instalación Odoo IA Ubuntu, Linux setup, configuración servidor, deployment Odoo, AI modules installation">
<meta name="robots" content="index, follow">
<meta name="author" content="Equipo Odoo Expertos">
<!-- Open Graph Meta Tags -->
<meta property="og:title" content="Installation Odoo IA Ubuntu Linux: Guide Technique Complet 2025 | Odoo Expertos">
<meta property="og:description" content="Guía completa para instalar Odoo con IA en Ubuntu Linux 2025. Tutorial paso a paso con comandos, configuración y optimización para máximo rendimiento.">
<meta property="og:type" content="article">
<meta property="og:url" content="https://www.odoo-expertos.com/fr/odoo-ia/instalacion-odoo-ia-ubuntu-linux-2025/">
<meta property="og:site_name" content="Odoo Expertos">
<meta property="og:locale" content="fr_FR">
<!-- Twitter Card Meta Tags -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Installation Odoo IA Ubuntu Linux: Guide Technique Complet 2025 | Odoo Expertos">
<meta name="twitter:description" content="Guía completa para instalar Odoo con IA en Ubuntu Linux 2025. Tutorial paso a paso con comandos, configuración y optimización para máximo rendimiento.">
<link rel="stylesheet" href="/css/main.min.css">
<style>
body {
margin: 0;
padding: 0;
min-height: 100vh;
display: flex;
flex-direction: column;
background: #1a1a1a;
color: #e0e0e0;
}
.batch-api-content {
padding-top: 80px;
padding-bottom: 3rem;
min-height: 400px;
position: relative;
z-index: 1;
flex: 1 0 auto;
}
.hero-mobile-optimized {
min-height: 40vh;
display: flex;
flex-direction: column;
justify-content: center;
padding: clamp(1rem, 3vw, 2rem);
background: linear-gradient(135deg, #FF6B35 0%, #FF8A65 20%, #E55A2B 40%, #D84315 60%, #BF360C 80%, #8D2A0A 100%);
position: relative;
overflow: hidden;
}
.primary-headline {
font-size: clamp(1.4rem, 5vw, 2.8rem);
line-height: clamp(1.2, 1.3, 1.25);
margin: 0;
padding: clamp(0.25rem, 1vw, 0.5rem) 0;
font-weight: 700;
color: #FFFFFF;
}
.secondary-headline {
font-size: clamp(1.1rem, 3.5vw, 1.9rem);
line-height: 1.3;
margin: 0;
padding: clamp(0.5rem, 1.5vw, 1rem) 0;
font-weight: 600;
color: #FF6B35 !important;
}
.body-text {
font-size: clamp(0.9rem, 2.5vw, 1.1rem);
line-height: clamp(1.4, 1.5, 1.7);
margin: 0;
padding: clamp(0.25rem, 1vw, 0.75rem) 0;
color: #e0e0e0;
}
.hero-mobile-optimized .primary-headline,
.hero-mobile-optimized .secondary-headline,
.hero-mobile-optimized .body-text {
color: #FFFFFF;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
position: relative;
z-index: 10;
}
.mobile-container {
width: 100%;
max-width: 1200px;
margin: 0 auto;
padding: clamp(1rem, 3vw, 2rem);
}
.content-section {
margin: clamp(1rem, 3vw, 2rem) 0;
padding: clamp(0.5rem, 2vw, 1.5rem) 0;
border-bottom: 1px solid #333;
}
.breadcrumbs {
padding: 1rem 0;
margin-bottom: 2rem;
font-size: 0.875rem;
}
.breadcrumb-list {
display: flex;
align-items: center;
list-style: none;
margin: 0;
padding: 0;
flex-wrap: wrap;
}
.breadcrumb-item a {
color: #b0b0b0;
text-decoration: none;
transition: color 0.3s ease;
}
.breadcrumb-item a:hover {
color: #FF6B35;
}
.breadcrumb-separator {
margin: 0 0.5rem;
color: #666;
}
.breadcrumb-item.active {
color: #e0e0e0;
}
a {
color: #FF6B35;
text-decoration: none;
}
a:hover {
color: #FFB74D;
text-decoration: underline;
}
.code-block {
background: #2a2a2a;
border: 1px solid #444;
border-radius: 8px;
padding: 1rem;
margin: 1rem 0;
overflow-x: auto;
font-family: 'Courier New', monospace;
font-size: 0.9rem;
color: #00ff00;
}
/* Visualization Styles */
.responsive-grid {
display: grid;
grid-template-columns: 1fr;
gap: clamp(1rem, 3vw, 2rem);
align-items: start;
}
.responsive-visualization {
width: 100%;
height: clamp(200px, 40vw, 400px);
min-height: 200px;
overflow: hidden;
position: relative;
}
.visual-container {
width: 100%;
height: 100%;
overflow: hidden;
position: relative;
border: 2px solid #FF6B35;
border-radius: 12px;
background: #2a2a2a;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.chart-container {
width: 100%;
height: 100%;
padding: clamp(8px, 2vw, 16px);
box-sizing: border-box;
}
.insight-box {
background: linear-gradient(135deg, rgba(255, 107, 53, 0.05) 0%, rgba(255, 138, 101, 0.08) 50%, rgba(255, 107, 53, 0.06) 100%);
border: 2px solid rgba(255, 107, 53, 0.3);
border-radius: 10px;
padding: clamp(0.75rem, 2vw, 1.25rem);
margin: clamp(0.75rem, 2vw, 1.5rem) 0;
position: relative;
}
.insight-content {
padding-left: 0;
}
.framework-box {
background: #2a2a2a;
border-left: 5px solid #FF6B35;
padding: clamp(1rem, 3vw, 1.5rem);
margin: clamp(1rem, 3vw, 2rem) 0;
border-radius: 0 12px 12px 0;
box-shadow: 0 3px 8px rgba(255, 107, 53, 0.1);
}
@media (min-width: 769px) {
.responsive-grid {
grid-template-columns: 1fr 1fr;
gap: clamp(1.5rem, 3vw, 2.5rem);
}
}
</style>
<!-- Schema.org Structured Data -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Accueil",
"item": "https://www.odoo-expertos.com/"
},
{
"@type": "ListItem",
"position": 2,
"name": "Odoo IA",
"item": "https://www.odoo-expertos.com/fr/odoo-ia/"
},
{
"@type": "ListItem",
"position": 3,
"name": "Instalación Odoo IA Ubuntu Linux 2025",
"item": "https://www.odoo-expertos.com/fr/odoo-ia/instalacion-odoo-ia-ubuntu-linux-2025/"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Instalación Odoo IA Ubuntu Linux: Guía Técnica Completa 2025",
"description": "Guía completa para instalar Odoo con IA en Ubuntu Linux 2025. Tutorial paso a paso con comandos, configuración y optimización para máximo rendimiento.",
"author": {
"@type": "Person",
"name": "Equipo Odoo Expertos",
"jobTitle": "Consultante Senior en Systèmes ERP"
},
"publisher": {
"@type": "Organization",
"name": "Odoo Expertos",
"logo": {
"@type": "ImageObject",
"url": "https://www.odoo-expertos.com/logo.png"
}
},
"datePublished": "2025-07-19T19:26:08.851Z",
"dateModified": "2025-07-19T19:26:08.851Z"
}
</script>
</head>
<body>
<script src="/components/header.min.js"></script>
<script>document.write(/*W6-static*/null);</script>
<div class="batch-api-content">
<nav class="breadcrumbs" aria-label="Breadcrumb">
<div class="container">
<ol class="breadcrumb-list">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-separator"></li>
<li class="breadcrumb-item"><a href="/fr/odoo-ia/">Odoo IA</a></li>
<li class="breadcrumb-separator"></li>
<li class="breadcrumb-item active" aria-current="page">Instalación Odoo IA Ubuntu Linux 2025</li>
</ol>
</div>
</nav>
<header class="executive-summary hero-mobile-optimized">
<h1 class="primary-headline">Instalación Odoo IA Ubuntu Linux: Guía Técnica Completa 2025</h1>
<h2 class="secondary-headline">Deploy Profesional con Módulos de Inteligencia Artificial</h2>
<p class="body-text">Guía completa para instalar <a href="/fr/odoo-ia/implementacion-odoo-ia-guia-paso-a-paso-2025/" title="Implementación Odoo IA paso a paso">Odoo con IA</a> en Ubuntu Linux 2025. Tutorial paso a paso con comandos, configuración y optimización.</p>
</header>
<div class="mobile-container">
<section class="content-section">
<h2 class="secondary-headline">Requisitos del Sistema</h2>
<div class="body-text">
<h3>Especificaciones Mínimas para <a href="/fr/odoo/curso-odoo-aprender-completo-2025/" title="Curso completo de Odoo">Odoo IA</a></h3>
<ul>
<li><strong>OS:</strong> Ubuntu 22.04 LTS o superior</li>
<li><strong>RAM:</strong> 8GB mínimo (16GB recomendado para IA)</li>
<li><strong>CPU:</strong> 4 cores mínimo (8 cores para procesamiento IA)</li>
<li><strong>Storage:</strong> 100GB SSD mínimo</li>
<li><strong>Python:</strong> 3.9+ con librerías ML</li>
<li><strong>PostgreSQL:</strong> 13+ con extensiones</li>
</ul>
</div>
</section>
<section class="content-section">
<h2 class="secondary-headline">Paso 1: Preparación del Servidor</h2>
<div class="body-text">
<h3>Actualización del Sistema</h3>
<div class="code-block">
sudo apt update && sudo apt upgrade -y
sudo apt install -y wget curl git build-essential
</div>
<h3>Instalación de Dependencias</h3>
<div class="code-block">
sudo apt install -y python3-pip python3-dev python3-venv
sudo apt install -y postgresql postgresql-server-dev-all
sudo apt install -y node-clean-css node-less npm
sudo apt install -y libxml2-dev libxslt1-dev libevent-dev
sudo apt install -y libsasl2-dev libldap2-dev libpq-dev
sudo apt install -y libjpeg-dev libpng-dev libfreetype6-dev
</div>
</div>
</section>
<section class="content-section">
<h2 class="secondary-headline">Paso 2: Configuración de PostgreSQL</h2>
<div class="body-text">
<h3>Configuración de Base de Datos</h3>
<div class="code-block">
sudo systemctl start postgresql
sudo systemctl enable postgresql
sudo -u postgres createuser -s odoo
sudo -u postgres psql -c "ALTER USER odoo PASSWORD 'your_password';"
</div>
<h3>Optimización para IA</h3>
<div class="code-block">
sudo nano /etc/postgresql/14/main/postgresql.conf
# Ajustes recomendados para IA:
shared_buffers = 256MB
work_mem = 64MB
maintenance_work_mem = 256MB
effective_cache_size = 2GB
max_connections = 200
</div>
</div>
</section>
<section class="content-section">
<h2 class="secondary-headline">Paso 3: Instalación de <a href="/fr/odoo-ia/odoo-17-ia-funciones-caracteristicas-2025/" title="Odoo 17 IA funciones">Odoo 17 con IA</a></h2>
<div class="body-text">
<h3>Descarga e Instalación</h3>
<div class="code-block">
sudo adduser --system --home=/opt/odoo --group odoo
sudo -u odoo git clone https://github.com/odoo/odoo.git /opt/odoo/odoo17
cd /opt/odoo
sudo -u odoo python3 -m venv odoo-venv
sudo -u odoo odoo-venv/bin/pip install wheel
sudo -u odoo odoo-venv/bin/pip install -r odoo17/requirements.txt
</div>
<h3>Instalación de Librerías IA</h3>
<div class="code-block">
sudo -u odoo odoo-venv/bin/pip install tensorflow
sudo -u odoo odoo-venv/bin/pip install scikit-learn
sudo -u odoo odoo-venv/bin/pip install pandas numpy
sudo -u odoo odoo-venv/bin/pip install opencv-python
sudo -u odoo odoo-venv/bin/pip install pillow
</div>
</div>
</section>
<section class="content-section">
<h2 class="secondary-headline">Paso 4: Configuración de Odoo</h2>
<div class="body-text">
<h3>Archivo de Configuración</h3>
<div class="code-block">
sudo nano /etc/odoo.conf
[options]
admin_passwd = your_master_password
db_host = localhost
db_port = 5432
db_user = odoo
db_password = your_password
addons_path = /opt/odoo/odoo17/addons,/opt/odoo/custom-addons
xmlrpc_port = 8069
log_level = info
log_handler = :INFO
logfile = /var/log/odoo/odoo.log
# Configuraciones específicas para IA
workers = 4
max_cron_threads = 2
limit_memory_hard = 2684354560
limit_memory_soft = 2147483648
limit_request = 8192
limit_time_cpu = 600
limit_time_real = 1200
</div>
</div>
</section>
<section class="content-section">
<h2 class="secondary-headline">Paso 5: Servicio Systemd</h2>
<div class="body-text">
<h3>Configuración del Servicio</h3>
<div class="code-block">
sudo nano /etc/systemd/system/odoo.service
[Unit]
Description=Odoo
Documentation=http://www.odoo.com
After=network.target postgresql.service
[Service]
Type=simple
SyslogIdentifier=odoo
PermissionsStartOnly=true
User=odoo
Group=odoo
ExecStart=/opt/odoo/odoo-venv/bin/python3 /opt/odoo/odoo17/odoo-bin -c /etc/odoo.conf
StandardOutput=journal+console
[Install]
WantedBy=multi-user.target
</div>
<h3>Activación del Servicio</h3>
<div class="code-block">
sudo systemctl daemon-reload
sudo systemctl enable odoo
sudo systemctl start odoo
sudo systemctl status odoo
</div>
</div>
</section>
<section class="content-section">
<h2 class="secondary-headline">Paso 6: Configuración de Nginx (Opcional)</h2>
<div class="body-text">
<h3>Proxy Reverso para Producción</h3>
<div class="code-block">
sudo apt install -y nginx
sudo nano /etc/nginx/sites-available/odoo
server {
listen 80;
server_name your_domain.com;
location / {
proxy_pass http://127.0.0.1:8069;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
</div>
</div>
</section>
<section class="content-section">
<h2 class="secondary-headline">Verificación y Pruebas</h2>
<div class="body-text">
<h3>Acceso a la Instalación</h3>
<ul>
<li>Navega a <code>http://your_server_ip:8069</code></li>
<li>Crea una nueva base de datos</li>
<li>Instala <a href="/fr/odoo-ia/odoo-19-ia-funciones-avanzadas-2025/" title="Odoo 19 IA funciones avanzadas">módulos de IA</a> disponibles</li>
<li>Verifica funcionalidades de AI</li>
</ul>
<h3>Troubleshooting Común</h3>
<ul>
<li><strong>Error de conexión DB:</strong> Verificar credenciales PostgreSQL</li>
<li><strong>Módulos no cargan:</strong> Verificar permisos de archivos</li>
<li><strong>Performance lenta:</strong> Ajustar workers y memoria</li>
<li><strong>Librerías IA fallan:</strong> Verificar instalación Python packages</li>
</ul>
<p>Para soporte técnico especializado, consulta nuestros <a href="/servicios-instalacion-odoo" target="_blank" rel="nofollow noopener">servicios de instalación profesional</a> o revisa nuestra <a href="/fr/odoo-ia/herramientas-ia-para-odoo-desarrollo-2025/" title="Herramientas IA para desarrollo Odoo">guía de herramientas IA</a>.</p>
</div>
</section>
<section class="faq-section content-section" itemscope itemtype="https://schema.org/FAQPage">
<h2 class="secondary-headline">Preguntas Frecuentes: Instalación Odoo IA Ubuntu</h2>
<div itemscope itemprop="mainEntity" itemtype="https://schema.org/Question">
<h3 itemprop="name">¿Cuánto cuesta realmente instalar Odoo IA en Ubuntu?</h3>
<div itemscope itemprop="acceptedAnswer" itemtype="https://schema.org/Answer">
<div class="body-text" itemprop="text">
El software Odoo Community es gratuito, pero la implementación profesional incluye: servidor Ubuntu optimizado ($200-500/mes), consultoría de instalación ($15,000-25,000), migración de datos ($8,000-15,000), training organizacional ($5,000-10,000), y librerías de IA especializadas. Total realista para implementación completa: $35,000-60,000. Sin embargo, el ROI promedio de $340,000 anuales justifica la inversión en 3-4 meses.
</div>
</div>
</div>
<div itemscope itemprop="mainEntity" itemtype="https://schema.org/Question">
<h3 itemprop="name">¿Por qué Ubuntu 24.04 LTS específicamente para Odoo IA?</h3>
<div itemscope itemprop="acceptedAnswer" itemtype="https://schema.org/Answer">
<div class="body-text" itemprop="text">
Ubuntu 24.04 LTS ofrece soporte extendido hasta 2029, kernel optimizado para machine learning workloads, Python 3.12+ con todas las dependencias actualizadas que requieren los módulos de IA de Odoo 18, y compatibilidad nativa con TensorFlow y scikit-learn. Otras distribuciones pueden funcionar, pero Ubuntu LTS garantiza estabilidad durante 5 años sin sorpresas de compatibilidad o actualizaciones forzadas.
</div>
</div>
</div>
<div itemscope itemprop="mainEntity" itemtype="https://schema.org/Question">
<h3 itemprop="name">¿Qué tan precisas son las predicciones de IA en Odoo 18?</h3>
<div itemscope itemprop="acceptedAnswer" itemtype="https://schema.org/Answer">
<div class="body-text" itemprop="text">
Con datos históricos de calidad (mínimo 18 meses), la accuracy promedio es 85-90% en forecasting de demanda, 78-83% en predicción de stockouts, y 72-88% en seasonal planning. Crítico: necesitas 3-6 meses para que el sistema aprenda tus patrones específicos de negocio. Los primeros meses pueden ser frustrantes con accuracy inicial del 45-60%. La paciencia durante el periodo de training es parte fundamental de la inversión.
</div>
</div>
</div>
<div itemscope itemprop="mainEntity" itemtype="https://schema.org/Question">
<h3 itemprop="name">¿Necesito cambiar todo mi equipo para usar Odoo IA?</h3>
<div itemscope itemprop="acceptedAnswer" itemtype="https://schema.org/Answer">
<div class="body-text" itemprop="text">
No cambies tu equipo—capacítalo intensivamente. El 80% de la resistencia inicial viene del miedo a ser reemplazados por algoritmos. La estrategia exitosa: explicar que IA amplifica su experiencia comercial, no la reemplaza. Invertir en training específico de 40+ horas, mantener override manual para casos excepcionales, y establecer métricas de confianza graduales. Un equipo veterano con experiencia de dominio + IA predictiva es absolutamente imparable.
</div>
</div>
</div>
<div itemscope itemprop="mainEntity" itemtype="https://schema.org/Question">
<h3 itemprop="name">¿Qué pasa si mis datos históricos son un desastre?</h3>
<div itemscope itemprop="acceptedAnswer" itemtype="https://schema.org/Answer">
<div class="body-text" itemprop="text">
Datos sucios = predicciones completamente inútiles. Esta es la realidad que nadie quiere escuchar. Necesitas invertir significativamente en data cleansing antes de pensar en IA. Presupuesta 2-4 semanas adicionales y $8,000-15,000 en limpieza profesional de datos: normalización de productos, corrección de historical transactions, eliminación de outliers, y validación de accuracy. Es doloroso y costoso, pero inevitable. La IA solo es tan inteligente como los datos que la alimentan.
</div>
</div>
</div>
<div itemscope itemprop="mainEntity" itemtype="https://schema.org/Question">
<h3 itemprop="name">¿Puedo instalar Odoo IA sin conocimientos técnicos avanzados?</h3>
<div itemscope itemprop="acceptedAnswer" itemtype="https://schema.org/Answer">
<div class="body-text" itemprop="text">
Técnicamente sí, prácticamente no recomendable. La instalación base de Odoo es relativamente directa, pero configurar optimizaciones específicas para IA (PostgreSQL tuning, Python ML libraries, memoria management, kernel parameters) requiere experiencia sólida en Linux administration. Un error en configuración puede resultar en performance 3x más lento o algoritmos que fallan silenciosamente. Inversión en consultoría especializada durante instalación ahorra meses de troubleshooting posterior.
</div>
</div>
</div>
</section>
<section class="strategic-next-steps content-section">
<h2 class="secondary-headline">Próximos Pasos: De la Decisión a la Implementación</h2>
<div class="body-text">
<p>Si llegaste hasta aquí, ya entiendes que Odoo IA no es opcional—es supervivencia competitiva en 2025. Pero conocimiento y ejecución son cosas completamente diferentes. Aquí está tu framework de acción inmediata para convertir esta guía en resultados reales:</p>
<div class="framework-box">
<strong>Hoy (próximas 4 horas):</strong> Auditoría completa de tu infraestructura actual. ¿Tienes servidor con capacidad suficiente? ¿Datos históricos accesibles y organizados? ¿Equipo técnico interno competente o necesitas outsourcing especializado? Documenta gaps críticos.
</div>
<div class="framework-box">
<strong>Esta semana:</strong> Presupuesto realista ($35,000-60,000 típico) y approval formal del board/gerencia. Incluye todos los costos ocultos: training intensivo, downtime planificado, resistance management, data cleansing. Presenta el ROI de $340,000 anuales como justificación.
</div>
<div class="framework-box">
<strong>Próximos 30 días:</strong> Selección crítica de partner de implementación con experiencia específica y comprobada en Odoo IA + Ubuntu enterprise environments. No todos los consultores Odoo comprenden machine learning o tienen experiencia con workloads de IA. Pide referencias verificables y casos de estudio documentados.
</div>
<p>La ventana de oportunidad competitiva se está cerrando rápidamente. Cada mes que esperas, tu competencia se aleja más con ventajas de IA. Pero—esto es crítico—implementar mal es significativamente peor que no implementar. Tómate el tiempo necesario para hacerlo correctamente desde el primer intento.</p>
<p>Para comenzar tu implementación profesional con garantías de éxito, revisa nuestros <a href="/recursos-odoo-ai" target="_blank" rel="nofollow noopener">recursos especializados en Odoo IA</a> donde incluimos checklists técnicos detallados, frameworks de evaluación, y metodologías probadas de implementación.</p>
</div>
</section>
</div>
</div>
<script src="/components/eeat.min.js"></script>
<script>
document.write(createEEAT({
author: {
name: "Equipo Odoo Expertos",
title: "Consultante Senior en Systèmes ERP",
experience: "15+ années d'expérience dans la transformation numérique"
},
publishDate: "19 juillet 2025"
}));
</script>
<script src="/components/footer.min.js"></script>
<script>document.write(/*W6-static*/null);</script>
<script src="/js/cookie-banner.min.js"></script>
<!-- D3.js Library -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/7.8.5/d3.min.js"></script>
<!-- D3.js Visualizations -->
<script>
// D3.js Error Checking
if (typeof d3 === 'undefined') {
console.error('D3.js library not loaded');
document.querySelectorAll('.chart-container').forEach(container => {
container.innerHTML = '<div style="text-align: center; padding: 2rem; color: #e0e0e0;">Cargando visualización...</div>';
});
} else {
// Network Chart Visualization
function createNetworkChart() {
const container = document.getElementById('networkChart');
if (!container) return;
const rect = container.getBoundingClientRect();
const width = rect.width || 300;
const height = rect.height || 200;
container.innerHTML = '';
const svg = d3.select(container)
.append('svg')
.attr('width', '100%')
.attr('height', '100%')
.attr('viewBox', `0 0 ${width} ${height}`)
.attr('preserveAspectRatio', 'xMidYMid meet');
const nodes = [
{ id: 'Ubuntu 24.04', group: 1, size: 20, color: '#FF6B35' },
{ id: 'Odoo 18 Core', group: 1, size: 25, color: '#FF6B35' },
{ id: 'IA Forecasting', group: 2, size: 18, color: '#e0e0e0' },
{ id: 'PostgreSQL', group: 3, size: 15, color: '#FF8A65' },
{ id: 'Python ML', group: 2, size: 16, color: '#e0e0e0' },
{ id: 'Inventory Mgmt', group: 4, size: 14, color: '#E55A2B' },
{ id: 'Supply Chain', group: 4, size: 14, color: '#E55A2B' },
{ id: 'Demand Planning', group: 2, size: 16, color: '#e0e0e0' }
];
const links = [
{ source: 'Ubuntu 24.04', target: 'Odoo 18 Core', strength: 1 },
{ source: 'Odoo 18 Core', target: 'IA Forecasting', strength: 0.8 },
{ source: 'Odoo 18 Core', target: 'PostgreSQL', strength: 0.9 },
{ source: 'IA Forecasting', target: 'Python ML', strength: 0.7 },
{ source: 'Odoo 18 Core', target: 'Inventory Mgmt', strength: 0.8 },
{ source: 'Inventory Mgmt', target: 'Supply Chain', strength: 0.6 },
{ source: 'IA Forecasting', target: 'Demand Planning', strength: 0.9 }
];
const simulation = d3.forceSimulation(nodes)
.force('link', d3.forceLink(links).id(d => d.id).strength(d => d.strength))
.force('charge', d3.forceManyBody().strength(-300))
.force('center', d3.forceCenter(width / 2, height / 2))
.force('collision', d3.forceCollide().radius(d => d.size + 2));
const link = svg.append('g')
.selectAll('line')
.data(links)
.enter().append('line')
.style('stroke', '#666')
.style('stroke-opacity', 0.6)
.style('stroke-width', d => Math.sqrt(d.strength * 3));
const node = svg.append('g')
.selectAll('g')
.data(nodes)
.enter().append('g')
.call(d3.drag()
.on('start', dragstarted)
.on('drag', dragged)
.on('end', dragended));
node.append('circle')
.attr('r', d => d.size)
.style('fill', d => d.color)
.style('stroke', '#1a1a1a')
.style('stroke-width', 2);
node.append('text')
.text(d => d.id)
.style('font-size', '10px')
.style('font-weight', '600')
.style('fill', '#e0e0e0')
.style('text-anchor', 'middle')
.attr('dy', d => d.size + 15);
simulation.on('tick', () => {
link.attr('x1', d => d.source.x)
.attr('y1', d => d.source.y)
.attr('x2', d => d.target.x)
.attr('y2', d => d.target.y);
node.attr('transform', d => `translate(${d.x},${d.y})`);
});
function dragstarted(event, d) {
if (!event.active) simulation.alphaTarget(0.3).restart();
d.fx = d.x; d.fy = d.y;
}
function dragged(event, d) {
d.fx = event.x; d.fy = event.y;
}
function dragended(event, d) {
if (!event.active) simulation.alphaTarget(0);
d.fx = null; d.fy = null;
}
}
// Timeline Chart Visualization
function createTimelineChart() {
const container = document.getElementById('timelineChart');
if (!container) return;
const rect = container.getBoundingClientRect();
const width = rect.width || 300;
const height = rect.height || 200;
container.innerHTML = '';
const svg = d3.select(container)
.append('svg')
.attr('width', '100%')
.attr('height', '100%')
.attr('viewBox', `0 0 ${width} ${height}`)
.attr('preserveAspectRatio', 'xMidYMid meet');
const timelineData = [
{ phase: 'Preparación', weeks: '1-2', y: height * 0.2, description: 'Ubuntu + PostgreSQL setup' },
{ phase: 'Instalación Core', weeks: '3-4', y: height * 0.35, description: 'Odoo 18 deployment' },
{ phase: 'Migración Datos', weeks: '5-8', y: height * 0.5, description: 'Training IA + datos históricos' },
{ phase: 'Go-Live', weeks: '9-12', y: height * 0.65, description: 'Producción + optimización' },
{ phase: 'ROI Visible', weeks: '13-16', y: height * 0.8, description: '$340k ahorro anual' }
];
// Timeline line
svg.append('line')
.attr('x1', width * 0.1)
.attr('y1', height * 0.2)
.attr('x2', width * 0.1)
.attr('y2', height * 0.8)
.style('stroke', '#FF6B35')
.style('stroke-width', 4);
const nodes = svg.selectAll('.timeline-node')
.data(timelineData)
.enter().append('g');
nodes.append('circle')
.attr('cx', width * 0.1)
.attr('cy', d => d.y)
.attr('r', 8)
.style('fill', '#FF6B35')
.style('stroke', '#1a1a1a')
.style('stroke-width', 2);
nodes.append('text')
.text(d => d.phase)
.attr('x', width * 0.15)
.attr('y', d => d.y - 5)
.style('font-size', '12px')
.style('font-weight', '700')
.style('fill', '#e0e0e0');
nodes.append('text')
.text(d => `Semanas ${d.weeks}`)
.attr('x', width * 0.15)
.attr('y', d => d.y + 10)
.style('font-size', '10px')
.style('fill', '#FF6B35')
.style('font-weight', '600');
}
// Comparison Chart Visualization
function createComparisonChart() {
const container = document.getElementById('comparisonChart');
if (!container) return;
const rect = container.getBoundingClientRect();
const width = rect.width || 300;
const height = rect.height || 200;
container.innerHTML = '';
const svg = d3.select(container)
.append('svg')
.attr('width', '100%')
.attr('height', '100%')
.attr('viewBox', `0 0 ${width} ${height}`)
.attr('preserveAspectRatio', 'xMidYMid meet');
const comparisonData = [
{ method: 'Gestión Manual', accuracy: 65, time: 6, cost: 80, color: '#666666' },
{ method: 'Odoo IA', accuracy: 87, time: 0.25, cost: 25, color: '#FF6B35' }
];
const margin = { top: 30, right: 30, bottom: 60, left: 80 };
const chartWidth = width - margin.left - margin.right;
const chartHeight = height - margin.top - margin.bottom;
const g = svg.append('g')
.attr('transform', `translate(${margin.left},${margin.top})`);
const metrics = ['Precisión (%)', 'Tiempo (horas)', 'Costo Errores ($K)'];
const xScale = d3.scaleBand()
.domain(metrics)
.range([0, chartWidth])
.padding(0.3);
const yScale = d3.scaleLinear()
.domain([0, 100])
.range([chartHeight, 0]);
const barWidth = xScale.bandwidth() / 2.5;
// Draw bars
metrics.forEach((metric, i) => {
comparisonData.forEach((d, j) => {
const value = metric.includes('Tiempo') ? d.time * 15 : (metric.includes('Precisión') ? d.accuracy : d.cost);
g.append('rect')
.attr('x', xScale(metric) + (barWidth * j) + (j * 5))
.attr('y', yScale(value))
.attr('width', barWidth)
.attr('height', chartHeight - yScale(value))
.style('fill', d.color)
.style('stroke', '#1a1a1a')
.style('stroke-width', 1);
g.append('text')
.text(metric.includes('Tiempo') ? d.time + 'h' : (metric.includes('Precisión') ? d.accuracy + '%' : d.cost + 'K'))
.attr('x', xScale(metric) + (barWidth * j) + (j * 5) + barWidth/2)
.attr('y', yScale(value) - 5)
.style('text-anchor', 'middle')
.style('font-size', '10px')
.style('font-weight', '600')
.style('fill', '#e0e0e0');
});
});
// X-axis labels
g.selectAll('.x-label')
.data(metrics)
.enter().append('text')
.text(d => d)
.attr('x', d => xScale(d) + xScale.bandwidth()/2)
.attr('y', chartHeight + 20)
.style('text-anchor', 'middle')
.style('font-size', '10px')
.style('fill', '#e0e0e0')
.style('font-weight', '600');
}
// Initialize visualizations
document.addEventListener('DOMContentLoaded', function() {
setTimeout(() => {
createNetworkChart();
createTimelineChart();
createComparisonChart();
}, 100);
});
// Handle resize
let resizeTimeout;
window.addEventListener('resize', function() {
clearTimeout(resizeTimeout);
resizeTimeout = setTimeout(() => {
createNetworkChart();
createTimelineChart();
createComparisonChart();
}, 250);
});
}
</script>
</body>
</html>