2256 lines
96 KiB
HTML
2256 lines
96 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<link rel="preconnect" href="https://d3js.org" crossorigin>
|
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" 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>Hosting Odoo Enterprise Precios 2026 | Odoo Expertos · EN</title>
|
|
|
|
<meta name="description" content="Guia definitiva de precios Odoo Enterprise 2026. Desglose completo de licencias, Hosting, TCO y Costs Hidden. Comparativa - Hosting Odoo Enterprise Precios 2026 | EN">
|
|
<meta name="keywords" content="Odoo Enterprise precios, licencia Odoo Enterprise, costo Odoo Enterprise, Odoo Hosting Enterprise, Odoo Enterprise vs community, tco Odoo, Odoo Enterprise 2026, presupuesto Odoo">
|
|
<meta name="author" content="Dr. Equipo Odoo Expertos">
|
|
<meta name="robots" content="index, follow">
|
|
<meta name="language" content="es">
|
|
|
|
<link rel="canonical" href="https://www.odoo-expertos.com/Odoo-Hosting/Hosting-Odoo-enterprise-precios-2026/">
|
|
|
|
<!-- Hreflang -->
|
|
<link rel="alternate" hreflang="en" href="https://www.odoo-expertos.com/Odoo-Hosting/Hosting-Odoo-enterprise-precios-2026/" />
|
|
<link rel="alternate" hreflang="en" href="https://www.odoo-expertos.com/en/Odoo-Hosting/Odoo-enterprise-Hosting-pricing-2026/" />
|
|
<link rel="alternate" hreflang="de" href="https://www.odoo-expertos.com/de/Odoo-Hosting/Odoo-enterprise-Hosting-preise-2026/" />
|
|
<link rel="alternate" hreflang="fr" href="https://www.odoo-expertos.com/fr/Odoo-Hosting/hebergement-Odoo-enterprise-tarifs-2026/" />
|
|
<link rel="alternate" hreflang="x-default" href="https://www.odoo-expertos.com/Odoo-Hosting/Hosting-Odoo-enterprise-precios-2026/" />
|
|
|
|
<!-- Open Graph -->
|
|
<meta property="og:title" content="Odoo Hosting Enterprise Precios 2026: Complete guide de Costs y Licencias">
|
|
<meta property="og:description" content="Guia definitiva de precios Odoo Enterprise 2026. Desglose completo de licencias, Hosting, TCO y Costs Hidden.">
|
|
<meta property="og:type" content="article">
|
|
<meta property="og:url" content="https://www.odoo-expertos.com/Odoo-Hosting/Hosting-Odoo-enterprise-precios-2026/">
|
|
<meta property="og:image" content="https://www.odoo-expertos.com/images/Hosting-Odoo-enterprise-precios-2026.jpg">
|
|
<meta property="og:site_name" content="Odoo Expertos">
|
|
<meta property="og:locale" content="es_ES">
|
|
|
|
<!-- Twitter Card -->
|
|
<meta name="twitter:card" content="summary_large_image">
|
|
<meta name="twitter:title" content="Odoo Hosting Enterprise Precios 2026: Complete guide">
|
|
<meta name="twitter:description" content="Guia definitiva de precios Odoo Enterprise 2026. Licencias, Hosting y TCO explicados.">
|
|
|
|
<!-- Schema.org Article -->
|
|
<script type="application/ld+json">
|
|
{
|
|
"@context": "https://schema.org",
|
|
"@type": "Article",
|
|
"headline": "Odoo Hosting Enterprise Precios 2026: Complete guide de Costs y Licencias",
|
|
"description": "Guia definitiva de precios Odoo Enterprise 2026. Desglose completo de licencias, Hosting, TCO y Costs Hidden.",
|
|
"author": {
|
|
"@type": "Person",
|
|
"name": "Dr. Equipo Odoo Expertos",
|
|
"url": "https://www.odoo-expertos.com/autor/maria-elena-rodriguez/",
|
|
"jobTitle": "Senior ERP Systems Consultant"
|
|
},
|
|
"publisher": {
|
|
"@type": "Organization",
|
|
"name": "Odoo Expertos",
|
|
"logo": {
|
|
"@type": "ImageObject",
|
|
"url": "https://www.odoo-expertos.com/logo.png"
|
|
}
|
|
},
|
|
"datePublished": "2026-01-25",
|
|
"dateModified": "2026-01-25",
|
|
"mainEntityOfPage": {
|
|
"@type": "WebPage",
|
|
"@id": "https://www.odoo-expertos.com/Odoo-Hosting/Hosting-Odoo-enterprise-precios-2026/"
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<!-- FAQ Schema -->
|
|
<script type="application/ld+json">
|
|
{
|
|
"@context": "https://schema.org",
|
|
"@type": "FAQPage",
|
|
"mainEntity": [
|
|
{
|
|
"@type": "Question",
|
|
"name": "Cuanto cuesta la licencia de Odoo Enterprise en 2026?",
|
|
"acceptedAnswer": {
|
|
"@type": "Answer",
|
|
"text": "La licencia de Odoo Enterprise en 2026 tiene un costo base de 31.10 EUR por usuario al mes (facturado anualmente). Para contratos anuales, esto equivale aproximadamente a 373 EUR por usuario al año. El precio puede variar segun el numero de usuarios y aplicaciones seleccionadas."
|
|
}
|
|
},
|
|
{
|
|
"@type": "Question",
|
|
"name": "Que incluye el precio de Odoo Enterprise?",
|
|
"acceptedAnswer": {
|
|
"@type": "Answer",
|
|
"text": "El precio de Odoo Enterprise incluye: acceso a todas las aplicaciones Enterprise (Contabilidad Advanced, MRP, PLM, Calidad, etc.), actualizaciones automaticas, soporte tecnico oficial, Hosting en Odoo.sh (opcional), y garantia de bugs fixes. No incluye personalizaciones, implementacion ni formacion."
|
|
}
|
|
},
|
|
{
|
|
"@type": "Question",
|
|
"name": "Cual es el costo Full de propiedad (TCO) de Odoo Enterprise?",
|
|
"acceptedAnswer": {
|
|
"@type": "Answer",
|
|
"text": "El TCO de Odoo Enterprise para una PYME tipica (20 usuarios) durante 3 años oscila entre 45,000 EUR y 120,000 EUR, dependiendo del nivel de personalizacion. Esto incluye: licencias (22,380 EUR), Hosting (10,800-21,600 EUR), implementacion (10,000-50,000 EUR) y mantenimiento anual (5,000-15,000 EUR)."
|
|
}
|
|
},
|
|
{
|
|
"@type": "Question",
|
|
"name": "Odoo Enterprise es mas caro que otros ERPs?",
|
|
"acceptedAnswer": {
|
|
"@type": "Answer",
|
|
"text": "No, Odoo Enterprise es significativamente mas economico que ERPs tradicionales como SAP Business One (40-60% mas barato), Microsoft Dynamics 365 (30-50% mas barato) y Oracle NetSuite (50-70% mas barato). La principal ventaja es el modelo de pago por usuario sin Costs Hidden de modulos."
|
|
}
|
|
},
|
|
{
|
|
"@type": "Question",
|
|
"name": "Puedo empezar con Odoo Community y migrar a Enterprise despues?",
|
|
"acceptedAnswer": {
|
|
"@type": "Answer",
|
|
"text": "Yes, es totalmente posible migrar de Community a Enterprise. Odoo ofrece herramientas de migracion y la base de datos es compatible. Sin embargo, los modulos Community personalizados pueden requerir adaptacion. El costo de migracion tipico es de 2,000-10,000 EUR dependiendo de la complejidad."
|
|
}
|
|
},
|
|
{
|
|
"@type": "Question",
|
|
"name": "Que Hosting necesito para Odoo Enterprise?",
|
|
"acceptedAnswer": {
|
|
"@type": "Answer",
|
|
"text": "Para Odoo Enterprise recomendamos minimo 8GB RAM, 4 CPU cores y 100GB SSD. Odoo.sh es la opcion oficial (incluida parcialmente en la licencia). Alternativas como Hetzner, AWS o Azure requieren configuracion Manual pero ofrecen mayor flexibilidad. El costo de Hosting varia entre 50-200 EUR/month."
|
|
}
|
|
},
|
|
{
|
|
"@type": "Question",
|
|
"name": "Hay descuentos por volumen en Odoo Enterprise?",
|
|
"acceptedAnswer": {
|
|
"@type": "Answer",
|
|
"text": "Yes, Odoo ofrece descuentos por volumen: 5-10% para 50-99 usuarios, 10-15% para 100-249 usuarios, 15-25% para 250+ usuarios. Tambien existen descuentos para ONGs, instituciones educativas y startups aceleradas. Contacta con un partner oficial para negociar precios."
|
|
}
|
|
},
|
|
{
|
|
"@type": "Question",
|
|
"name": "Cuales son los Costs Hidden de Odoo Enterprise?",
|
|
"acceptedAnswer": {
|
|
"@type": "Answer",
|
|
"text": "Los Costs frecuentemente subestimados incluyen: personalizacion de modulos (5,000-50,000 EUR), integraciones con sistemas externos (2,000-20,000 EUR), migracion de datos (1,000-10,000 EUR), formacion de usuarios (1,000-5,000 EUR), y mantenimiento anual de personalizaciones (15-25% del costo inicial)."
|
|
}
|
|
}
|
|
]
|
|
}
|
|
</script>
|
|
|
|
<!-- Product Schema -->
|
|
<script type="application/ld+json">
|
|
{
|
|
"@context": "https://schema.org",
|
|
"@type": "Product",
|
|
"name": "Odoo Enterprise",
|
|
"description": "Suite ERP empresarial completa con modulos avanzados de contabilidad, fabricacion, calidad y mas",
|
|
"brand": {
|
|
"@type": "Brand",
|
|
"name": "Odoo S.A."
|
|
},
|
|
"offers": {
|
|
"@type": "AggregateOffer",
|
|
"lowPrice": "31.10",
|
|
"highPrice": "44.90",
|
|
"priceCurrency": "EUR",
|
|
"offerCount": "3",
|
|
"availability": "https://schema.org/InStock"
|
|
},
|
|
"aggregateRating": {
|
|
"@type": "AggregateRating",
|
|
"ratingValue": "4.6",
|
|
"reviewCount": "3847"
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<!-- BreadcrumbList Schema -->
|
|
<script type="application/ld+json">
|
|
{
|
|
"@context": "https://schema.org",
|
|
"@type": "BreadcrumbList",
|
|
"itemListElement": [
|
|
{
|
|
"@type": "ListItem",
|
|
"position": 1,
|
|
"name": "Home",
|
|
"item": "https://www.odoo-expertos.com/"
|
|
},
|
|
{
|
|
"@type": "ListItem",
|
|
"position": 2,
|
|
"name": "Odoo Hosting",
|
|
"item": "https://www.odoo-expertos.com/Odoo-Hosting/"
|
|
},
|
|
{
|
|
"@type": "ListItem",
|
|
"position": 3,
|
|
"name": "Odoo Hosting Enterprise Precios 2026",
|
|
"item": "https://www.odoo-expertos.com/Odoo-Hosting/Hosting-Odoo-enterprise-precios-2026/"
|
|
}
|
|
]
|
|
}
|
|
</script>
|
|
|
|
<link rel="stylesheet" href="/css/main.min.css">
|
|
<style>
|
|
.pillar-hero {
|
|
background: linear-gradient(135deg, #1a1a1a 0%, #2a2a2a 50%, #1a1a1a 100%);
|
|
padding: 4rem 2rem;
|
|
text-align: center;
|
|
border-bottom: 3px solid #FF6B35;
|
|
position: relative;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.pillar-hero::before {
|
|
content: '';
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
bottom: 0;
|
|
background: radial-gradient(ellipse at center, rgba(255,107,53,0.15) 0%, transparent 70%);
|
|
pointer-events: none;
|
|
}
|
|
|
|
.pillar-hero h1 {
|
|
font-size: clamp(2rem, 5vw, 3.5rem);
|
|
color: #FF6B35;
|
|
margin-bottom: 1rem;
|
|
line-height: 1.2;
|
|
position: relative;
|
|
}
|
|
|
|
.pillar-subtitle {
|
|
font-size: 1.3rem;
|
|
color: #b0b0b0;
|
|
max-width: 800px;
|
|
margin: 0 auto 2rem;
|
|
}
|
|
|
|
.pillar-meta {
|
|
display: flex;
|
|
justify-content: center;
|
|
gap: 2rem;
|
|
flex-wrap: wrap;
|
|
font-size: 0.9rem;
|
|
color: #888;
|
|
}
|
|
|
|
.pillar-meta span {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 0.5rem;
|
|
}
|
|
|
|
.quick-stats {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
|
|
gap: 1.5rem;
|
|
padding: 2rem;
|
|
background: #2a2a2a;
|
|
border-radius: 12px;
|
|
margin: 2rem 0;
|
|
}
|
|
|
|
.stat-card {
|
|
text-align: center;
|
|
padding: 1.5rem;
|
|
background: rgba(255,107,53,0.1);
|
|
border-radius: 8px;
|
|
border: 1px solid rgba(255,107,53,0.2);
|
|
transition: transform 0.3s ease, border-color 0.3s ease;
|
|
}
|
|
|
|
.stat-card:hover {
|
|
transform: translateY(-5px);
|
|
border-color: #FF6B35;
|
|
}
|
|
|
|
.stat-number {
|
|
font-size: 2.5rem;
|
|
font-weight: 700;
|
|
color: #FF6B35;
|
|
display: block;
|
|
}
|
|
|
|
.stat-label {
|
|
color: #b0b0b0;
|
|
font-size: 0.9rem;
|
|
margin-top: 0.5rem;
|
|
}
|
|
|
|
.toc {
|
|
background: #2a2a2a;
|
|
border: 2px solid #FF6B35;
|
|
border-radius: 12px;
|
|
padding: 2rem;
|
|
margin: 2rem 0;
|
|
}
|
|
|
|
.toc h2 {
|
|
color: #FF6B35;
|
|
margin-bottom: 1rem;
|
|
font-size: 1.5rem;
|
|
}
|
|
|
|
.toc-list {
|
|
list-style: none;
|
|
padding: 0;
|
|
columns: 2;
|
|
column-gap: 2rem;
|
|
}
|
|
|
|
.toc-list li {
|
|
margin-bottom: 0.75rem;
|
|
break-inside: avoid;
|
|
}
|
|
|
|
.toc-list a {
|
|
color: #e0e0e0;
|
|
text-decoration: none;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 0.5rem;
|
|
transition: color 0.3s ease;
|
|
}
|
|
|
|
.toc-list a:hover {
|
|
color: #FF6B35;
|
|
}
|
|
|
|
.toc-list a::before {
|
|
content: '->';
|
|
color: #FF6B35;
|
|
}
|
|
|
|
.content-section {
|
|
margin: 3rem 0;
|
|
}
|
|
|
|
.content-section h2 {
|
|
color: #FF8A50;
|
|
margin-bottom: 1.5rem;
|
|
padding-bottom: 0.5rem;
|
|
border-bottom: 2px solid rgba(255,107,53,0.3);
|
|
}
|
|
|
|
.content-section h3 {
|
|
color: #FFB74D;
|
|
margin: 2rem 0 1rem;
|
|
}
|
|
|
|
.chart-section {
|
|
margin: 3rem 0;
|
|
padding: 2rem;
|
|
background: #2a2a2a;
|
|
border-radius: 12px;
|
|
}
|
|
|
|
.chart-section h3 {
|
|
color: #FF8A50;
|
|
margin-bottom: 1rem;
|
|
}
|
|
|
|
.chart-container {
|
|
width: 100%;
|
|
min-height: 400px;
|
|
position: relative;
|
|
}
|
|
|
|
.comparison-table {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
margin: 2rem 0;
|
|
background: #2a2a2a;
|
|
border-radius: 12px;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.comparison-table th,
|
|
.comparison-table td {
|
|
padding: 1rem;
|
|
text-align: left;
|
|
border-bottom: 1px solid #3a3a3a;
|
|
}
|
|
|
|
.comparison-table th {
|
|
background: rgba(255,107,53,0.2);
|
|
color: #FF6B35;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.comparison-table tr:hover {
|
|
background: rgba(255,107,53,0.05);
|
|
}
|
|
|
|
.comparison-table .check {
|
|
color: #4CAF50;
|
|
font-weight: bold;
|
|
}
|
|
|
|
.comparison-table .cross {
|
|
color: #f44336;
|
|
}
|
|
|
|
.pricing-grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
|
|
gap: 1.5rem;
|
|
margin: 2rem 0;
|
|
}
|
|
|
|
.pricing-card {
|
|
background: #2a2a2a;
|
|
border-radius: 12px;
|
|
padding: 2rem;
|
|
border: 1px solid rgba(255,107,53,0.2);
|
|
transition: transform 0.3s ease, border-color 0.3s ease;
|
|
position: relative;
|
|
}
|
|
|
|
.pricing-card:hover {
|
|
transform: translateY(-5px);
|
|
border-color: #FF6B35;
|
|
}
|
|
|
|
.pricing-card.featured {
|
|
border-color: #FF6B35;
|
|
background: linear-gradient(135deg, rgba(255,107,53,0.15) 0%, #2a2a2a 100%);
|
|
}
|
|
|
|
.pricing-card .badge {
|
|
display: inline-block;
|
|
padding: 0.25rem 0.75rem;
|
|
background: #FF6B35;
|
|
color: #fff;
|
|
border-radius: 20px;
|
|
font-size: 0.8rem;
|
|
margin-bottom: 1rem;
|
|
position: absolute;
|
|
top: -12px;
|
|
right: 20px;
|
|
}
|
|
|
|
.pricing-card h4 {
|
|
color: #fff;
|
|
margin-bottom: 0.5rem;
|
|
font-size: 1.4rem;
|
|
}
|
|
|
|
.pricing-card .price {
|
|
font-size: 2.5rem;
|
|
color: #FF6B35;
|
|
font-weight: 700;
|
|
}
|
|
|
|
.pricing-card .price-period {
|
|
color: #888;
|
|
font-size: 0.9rem;
|
|
}
|
|
|
|
.pricing-card .price-note {
|
|
color: #666;
|
|
font-size: 0.85rem;
|
|
margin-top: 0.25rem;
|
|
}
|
|
|
|
.pricing-card ul {
|
|
list-style: none;
|
|
padding: 0;
|
|
margin: 1.5rem 0;
|
|
}
|
|
|
|
.pricing-card li {
|
|
padding: 0.5rem 0;
|
|
border-bottom: 1px solid #3a3a3a;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 0.5rem;
|
|
color: #b0b0b0;
|
|
}
|
|
|
|
.pricing-card li::before {
|
|
content: 'ok';
|
|
color: #4CAF50;
|
|
font-weight: bold;
|
|
}
|
|
|
|
.pricing-card .cta-btn {
|
|
display: block;
|
|
text-align: center;
|
|
padding: 0.75rem 1.5rem;
|
|
background: #FF6B35;
|
|
color: #fff;
|
|
border-radius: 8px;
|
|
text-decoration: none;
|
|
font-weight: 600;
|
|
transition: background 0.3s ease, transform 0.3s ease;
|
|
margin-top: 1rem;
|
|
}
|
|
|
|
.pricing-card .cta-btn:hover {
|
|
background: #FF8A50;
|
|
transform: scale(1.02);
|
|
}
|
|
|
|
.faq-section {
|
|
margin: 3rem 0;
|
|
}
|
|
|
|
.faq-item {
|
|
background: #2a2a2a;
|
|
border-radius: 8px;
|
|
margin-bottom: 1rem;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.faq-question {
|
|
padding: 1.25rem;
|
|
cursor: pointer;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
color: #fff;
|
|
font-weight: 500;
|
|
transition: background 0.3s ease;
|
|
}
|
|
|
|
.faq-question:hover {
|
|
background: rgba(255,107,53,0.1);
|
|
}
|
|
|
|
.faq-question::after {
|
|
content: '+';
|
|
font-size: 1.5rem;
|
|
color: #FF6B35;
|
|
transition: transform 0.3s ease;
|
|
}
|
|
|
|
.faq-item.open .faq-question::after {
|
|
transform: rotate(45deg);
|
|
}
|
|
|
|
.faq-answer {
|
|
padding: 0 1.25rem;
|
|
max-height: 0;
|
|
overflow: hidden;
|
|
transition: max-height 0.3s ease, padding 0.3s ease;
|
|
color: #b0b0b0;
|
|
}
|
|
|
|
.faq-item.open .faq-answer {
|
|
padding: 0 1.25rem 1.25rem;
|
|
max-height: 500px;
|
|
}
|
|
|
|
.cta-banner {
|
|
background: linear-gradient(135deg, rgba(255,107,53,0.2) 0%, rgba(255,138,80,0.1) 100%);
|
|
border: 2px solid rgba(255,107,53,0.5);
|
|
border-radius: 12px;
|
|
padding: 2.5rem;
|
|
text-align: center;
|
|
margin: 3rem 0;
|
|
}
|
|
|
|
.cta-banner h3 {
|
|
color: #FF6B35;
|
|
margin-bottom: 1rem;
|
|
font-size: 1.8rem;
|
|
}
|
|
|
|
.cta-banner p {
|
|
margin-bottom: 1.5rem;
|
|
color: #b0b0b0;
|
|
font-size: 1.1rem;
|
|
}
|
|
|
|
.cta-banner .cta-btn {
|
|
display: inline-block;
|
|
padding: 1rem 2.5rem;
|
|
background: #FF6B35;
|
|
color: #fff;
|
|
border-radius: 8px;
|
|
text-decoration: none;
|
|
font-weight: 600;
|
|
font-size: 1.1rem;
|
|
transition: background 0.3s ease, transform 0.3s ease;
|
|
}
|
|
|
|
.cta-banner .cta-btn:hover {
|
|
background: #FF8A50;
|
|
transform: scale(1.05);
|
|
}
|
|
|
|
.related-articles {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
|
|
gap: 1.5rem;
|
|
margin: 2rem 0;
|
|
}
|
|
|
|
.related-card {
|
|
background: #2a2a2a;
|
|
border-radius: 8px;
|
|
overflow: hidden;
|
|
transition: transform 0.3s ease;
|
|
text-decoration: none;
|
|
}
|
|
|
|
.related-card:hover {
|
|
transform: translateY(-5px);
|
|
}
|
|
|
|
.related-card-image {
|
|
height: 150px;
|
|
background: linear-gradient(135deg, rgba(255,107,53,0.3), rgba(255,138,80,0.3));
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 3rem;
|
|
}
|
|
|
|
.related-card-content {
|
|
padding: 1.25rem;
|
|
}
|
|
|
|
.related-card h4 {
|
|
color: #fff;
|
|
margin-bottom: 0.5rem;
|
|
font-size: 1rem;
|
|
}
|
|
|
|
.related-card p {
|
|
color: #888;
|
|
font-size: 0.9rem;
|
|
margin: 0;
|
|
}
|
|
|
|
.d3-tooltip {
|
|
position: absolute;
|
|
background: rgba(0,0,0,0.95);
|
|
color: #fff;
|
|
padding: 0.75rem 1rem;
|
|
border-radius: 8px;
|
|
font-size: 0.9rem;
|
|
pointer-events: none;
|
|
z-index: 100;
|
|
max-width: 300px;
|
|
box-shadow: 0 4px 20px rgba(0,0,0,0.3);
|
|
border: 1px solid rgba(255,107,53,0.3);
|
|
}
|
|
|
|
.d3-tooltip strong {
|
|
color: #FF6B35;
|
|
}
|
|
|
|
.highlight-box {
|
|
background: linear-gradient(135deg, rgba(255,107,53,0.1) 0%, rgba(255,138,80,0.05) 100%);
|
|
border-left: 4px solid #FF6B35;
|
|
padding: 1.5rem;
|
|
margin: 2rem 0;
|
|
border-radius: 0 8px 8px 0;
|
|
}
|
|
|
|
.highlight-box h4 {
|
|
color: #FF6B35;
|
|
margin-bottom: 0.5rem;
|
|
}
|
|
|
|
.warning-box {
|
|
background: linear-gradient(135deg, rgba(255,193,7,0.1) 0%, rgba(255,152,0,0.05) 100%);
|
|
border-left: 4px solid #FFC107;
|
|
padding: 1.5rem;
|
|
margin: 2rem 0;
|
|
border-radius: 0 8px 8px 0;
|
|
}
|
|
|
|
.warning-box h4 {
|
|
color: #FFC107;
|
|
margin-bottom: 0.5rem;
|
|
}
|
|
|
|
.tco-breakdown {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
|
gap: 1.5rem;
|
|
margin: 2rem 0;
|
|
}
|
|
|
|
.tco-item {
|
|
background: #2a2a2a;
|
|
padding: 1.5rem;
|
|
border-radius: 8px;
|
|
border: 1px solid #3a3a3a;
|
|
}
|
|
|
|
.tco-item h4 {
|
|
color: #FF8A50;
|
|
margin-bottom: 0.5rem;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 0.5rem;
|
|
}
|
|
|
|
.tco-item .cost {
|
|
font-size: 1.8rem;
|
|
color: #FF6B35;
|
|
font-weight: 700;
|
|
}
|
|
|
|
.tco-item .description {
|
|
color: #888;
|
|
font-size: 0.9rem;
|
|
margin-top: 0.5rem;
|
|
}
|
|
|
|
.comparison-vs {
|
|
display: grid;
|
|
grid-template-columns: 1fr auto 1fr;
|
|
gap: 2rem;
|
|
align-items: center;
|
|
margin: 2rem 0;
|
|
padding: 2rem;
|
|
background: #2a2a2a;
|
|
border-radius: 12px;
|
|
}
|
|
|
|
.comparison-vs .vs-divider {
|
|
font-size: 2rem;
|
|
color: #FF6B35;
|
|
font-weight: 700;
|
|
}
|
|
|
|
.comparison-vs .edition {
|
|
text-align: center;
|
|
}
|
|
|
|
.comparison-vs .edition h4 {
|
|
color: #fff;
|
|
margin-bottom: 1rem;
|
|
}
|
|
|
|
.comparison-vs .edition .price-tag {
|
|
font-size: 2rem;
|
|
color: #FF6B35;
|
|
font-weight: 700;
|
|
}
|
|
|
|
.fade-in {
|
|
opacity: 0;
|
|
transform: translateY(20px);
|
|
transition: opacity 0.6s ease, transform 0.6s ease;
|
|
}
|
|
|
|
.fade-in.visible {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
|
|
@media (max-width: 768px) {
|
|
.toc-list {
|
|
columns: 1;
|
|
}
|
|
|
|
.pillar-meta {
|
|
flex-direction: column;
|
|
gap: 0.5rem;
|
|
}
|
|
|
|
.chart-container {
|
|
min-height: 300px;
|
|
}
|
|
|
|
.pricing-grid {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.comparison-vs {
|
|
grid-template-columns: 1fr;
|
|
text-align: center;
|
|
}
|
|
|
|
.comparison-vs .vs-divider {
|
|
padding: 1rem 0;
|
|
}
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div id="header"><header class="site-header"><nav class="navbar"><div class="container"><div class="nav-brand"><a href="/en/" class="logo"><span class="logo-text">Odoo Expertos</span></a></div><button class="nav-toggle" aria-label="Toggle navigation"><span></span><span></span><span></span></button><div class="nav-menu"><ul class="nav-list"><li><a href="/en/">Home</a></li><li><a href="/en/odoo/">Odoo</a></li><li><a href="/en/odoo-ia/">Odoo AI</a></li><li><a href="/en/odoo-hosting/">Odoo Hosting</a></li><li><a href="/en/mapa-del-sitio/">Sitemap</a></li></ul></div></div></nav></header></div><button class="nav-toggle" aria-label="Toggle navigation"><span></span><span></span><span></span></button><div class="nav-menu"><ul class="nav-list"><li><a href="/en/">Home</a></li><li><a href="/en/odoo/">Odoo</a></li><li><a href="/en/odoo-ia/">Odoo AI</a></li><li><a href="/en/odoo-hosting/">Odoo Hosting</a></li><li><a href="/en/mapa-del-sitio/">Sitemap</a></li></ul></div></div></nav></header></div>
|
|
|
|
<!-- Breadcrumbs -->
|
|
<nav class="breadcrumbs">
|
|
<div class="container">
|
|
<ol class="breadcrumb-list" itemscope itemtype="https://schema.org/BreadcrumbList">
|
|
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
|
|
<a itemprop="item" href="/"><span itemprop="name">Home</span></a>
|
|
<span itemprop="position" style="display:none">1</span>
|
|
</li>
|
|
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
|
|
<a itemprop="item" href="/Odoo-Hosting/"><span itemprop="name">Odoo Hosting</span></a>
|
|
<span itemprop="position" style="display:none">2</span>
|
|
</li>
|
|
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
|
|
<span itemprop="name">Odoo Hosting Enterprise Precios 2026</span>
|
|
<span itemprop="position" style="display:none">3</span>
|
|
</li>
|
|
</ol>
|
|
</div>
|
|
</nav>
|
|
|
|
<!-- Hero Section -->
|
|
<section class="pillar-hero">
|
|
<div class="container">
|
|
<h1>Odoo Hosting Enterprise Precios 2026: Complete guide de Costs y Licencias</h1>
|
|
<p class="pillar-subtitle">Desglose exhaustivo de todos los Costs asociados a Odoo Enterprise: licencias, Hosting, implementacion y TCO real. Incluye calculadora de presupuesto y comparativas con otros ERPs del mercado.</p>
|
|
<div class="pillar-meta">
|
|
<span>Published: 25 January 2026</span>
|
|
<span>Updated: 25 January 2026</span>
|
|
<span>28 min read</span>
|
|
<span>Dr. Equipo Odoo Expertos</span>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<main class="container">
|
|
<!-- Quick Stats -->
|
|
<section class="quick-stats fade-in">
|
|
<div class="stat-card">
|
|
<span class="stat-number">31.10 EUR</span>
|
|
<span class="stat-label">Base Price/user/month</span>
|
|
</div>
|
|
<div class="stat-card">
|
|
<span class="stat-number">373 EUR</span>
|
|
<span class="stat-label">Costo Anual/Usuario</span>
|
|
</div>
|
|
<div class="stat-card">
|
|
<span class="stat-number">40-60%</span>
|
|
<span class="stat-label">Ahorro vs SAP/Dynamics</span>
|
|
</div>
|
|
<div class="stat-card">
|
|
<span class="stat-number">82+</span>
|
|
<span class="stat-label">Aplicaciones Incluidas</span>
|
|
</div>
|
|
<div class="stat-card">
|
|
<span class="stat-number">12M+</span>
|
|
<span class="stat-label">Usuarios Globales</span>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- Table of Contents -->
|
|
<nav class="toc fade-in">
|
|
<h2>Contents of This Guide</h2>
|
|
<ol class="toc-list">
|
|
<li><a href="#resumen">Resumen Ejecutivo de Precios</a></li>
|
|
<li><a href="#estructura-precios">Estructura de Precios Odoo Enterprise</a></li>
|
|
<li><a href="#grafico-licencias">Grafico: Evolucion de Precios de Licencias</a></li>
|
|
<li><a href="#planes-detallados">Planes y Paquetes Detallados</a></li>
|
|
<li><a href="#Hosting-Costs">Costs de Hosting Enterprise</a></li>
|
|
<li><a href="#grafico-tco">Grafico: Analysis TCO Comparativo</a></li>
|
|
<li><a href="#community-vs-enterprise">Community vs Enterprise: Comparativa</a></li>
|
|
<li><a href="#Costs-Hidden">Costs Hidden y Consideraciones</a></li>
|
|
<li><a href="#grafico-roi">Grafico: Calculadora ROI Interactiva</a></li>
|
|
<li><a href="#comparativa-erps">Comparativa con Otros ERPs</a></li>
|
|
<li><a href="#faq">Preguntas Frecuentes (8+)</a></li>
|
|
<li><a href="#relacionados">Related Articles</a></li>
|
|
</ol>
|
|
</nav>
|
|
|
|
<!-- Executive Summary -->
|
|
<section id="resumen" class="content-section fade-in">
|
|
<h2>Resumen Ejecutivo: Precios Odoo Enterprise 2026</h2>
|
|
|
|
<p>Odoo Enterprise se ha consolidado como una de las soluciones ERP mas competitivas del mercado en 2026, ofreciendo un modelo de precios transparente basado en usuarios que contrasta significativamente con los esquemas complejos de SAP, Oracle o Microsoft. En esta Complete guide, desglosaremos todos los componentes del costo Full de propiedad (TCO) para que puedas tomar una decision informada sobre tu inversion en tecnologia empresarial.</p>
|
|
|
|
<div class="highlight-box">
|
|
<h4>Base Price Odoo Enterprise 2026</h4>
|
|
<p>El costo de la licencia Odoo Enterprise en 2026 es de <strong>31.10 EUR por usuario al mes</strong> (facturacion anual), lo que equivale a aproximadamente <strong>373 EUR por usuario al ano</strong>. Este precio incluye acceso a todas las aplicaciones Enterprise, actualizaciones automaticas y soporte tecnico oficial. No hay Costs adicionales por modulos individuales.</p>
|
|
</div>
|
|
|
|
<p>A diferencia de otros ERPs que cobran por modulos, Odoo Enterprise utiliza un modelo "todo incluido" donde cada usuario tiene acceso completo a las mas de 82 aplicaciones disponibles. Esto simplifica enormemente la planificacion presupuestaria y elimina sorpresas durante la implementacion.</p>
|
|
|
|
<h3>Factores Clave que Determinan el Costo Full</h3>
|
|
<p>El precio final de tu proyecto Odoo Enterprise dependera de multiples factores que van mas alla de la simple licencia. Comprender estos elementos es crucial para una planificacion presupuestaria realista:</p>
|
|
|
|
<ul>
|
|
<li><strong>Numero de usuarios:</strong> El factor principal que determina el costo de licencias. Cada usuario activo requiere una licencia individual.</li>
|
|
<li><strong>Tipo de Hosting:</strong> Odoo.sh (oficial) vs Hosting propio/terceros. La diferencia puede ser de 30-50% en Costs de infraestructura.</li>
|
|
<li><strong>Nivel de personalizacion:</strong> Implementaciones estandar vs altamente personalizadas pueden variar en un factor de 3-5x en Costs de proyecto.</li>
|
|
<li><strong>Integraciones requeridas:</strong> Conexiones con sistemas externos (e-commerce, logistica, bancos) anaden complejidad y costo.</li>
|
|
<li><strong>Migracion de datos:</strong> La complejidad de los datos historicos a migrar impacta significativamente el presupuesto inicial.</li>
|
|
</ul>
|
|
</section>
|
|
|
|
<!-- Pricing Structure -->
|
|
<section id="estructura-precios" class="content-section fade-in">
|
|
<h2>Estructura de Precios Odoo Enterprise 2026</h2>
|
|
|
|
<p>Odoo S.A. ha mantenido una politica de precios relativamente estable durante los ultimos anos, con ajustes moderados que reflejan la inflacion y las mejoras continuas del producto. En 2026, la estructura de precios se divide en tres componentes principales que toda empresa debe considerar:</p>
|
|
|
|
<h3>1. Licencia de Software (Obligatorio)</h3>
|
|
<p>La licencia de Odoo Enterprise es el costo fundamental y No negociable. Este pago anual te da derecho a utilizar el software, recibir actualizaciones y acceder al soporte tecnico basico. El modelo de precios por usuario significa que pagas unicamente por las personas que realmente utilizaran el sistema.</p>
|
|
|
|
<div class="tco-breakdown">
|
|
<div class="tco-item">
|
|
<h4>Plan Estandar</h4>
|
|
<div class="cost">31.10 EUR</div>
|
|
<div class="description">Por usuario/month (facturacion anual). Incluye todas las apps Enterprise, actualizaciones y soporte basico.</div>
|
|
</div>
|
|
<div class="tco-item">
|
|
<h4>Plan Personalizado</h4>
|
|
<div class="cost">44.90 EUR</div>
|
|
<div class="description">Por usuario/month con Odoo.sh One-App. Hosting incluido con recursos dedicados y SLA premium.</div>
|
|
</div>
|
|
<div class="tco-item">
|
|
<h4>Volumen (+100 usuarios)</h4>
|
|
<div class="cost">~26 EUR</div>
|
|
<div class="description">Descuento por volumen negociable. Contactar directamente con Odoo o partner oficial autorizado.</div>
|
|
</div>
|
|
</div>
|
|
|
|
<h3>2. Hosting e Infraestructura (Variable)</h3>
|
|
<p>El Hosting puede representar entre el 15% y el 40% del costo Full dependiendo de la opcion elegida. Odoo ofrece su plataforma oficial Odoo.sh, pero tambien es posible utilizar infraestructura propia o de terceros.</p>
|
|
|
|
<table class="comparison-table">
|
|
<thead>
|
|
<tr>
|
|
<th>Opcion de Hosting</th>
|
|
<th>Costo Mensual</th>
|
|
<th>Incluye</th>
|
|
<th>Ideal Para</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><strong>Odoo.sh Starter</strong></td>
|
|
<td>25-50 EUR</td>
|
|
<td>1 worker, staging, backups</td>
|
|
<td>Startups, equipos pequenos</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Odoo.sh Standard</strong></td>
|
|
<td>50-150 EUR</td>
|
|
<td>2-4 workers, staging avanzado</td>
|
|
<td>PYMES en crecimiento</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Odoo.sh Custom</strong></td>
|
|
<td>150-500 EUR</td>
|
|
<td>Workers dedicados, SLA</td>
|
|
<td>Empresas medianas/grandes</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>VPS Gestionado</strong></td>
|
|
<td>80-200 EUR</td>
|
|
<td>Servidor dedicado, soporte</td>
|
|
<td>Control Full + soporte</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Cloud Propio (AWS/Azure)</strong></td>
|
|
<td>100-400 EUR</td>
|
|
<td>Infraestructura personalizada</td>
|
|
<td>Grandes corporaciones</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<h3>3. Servicios de Implementacion (Variable)</h3>
|
|
<p>La implementacion es frecuentemente el componente mas subestimado del presupuesto. Incluso una implementacion "sencilla" requiere configuracion, migracion de datos y formacion. Los Costs tipicos varian enormemente segun la complejidad del proyecto:</p>
|
|
|
|
<ul>
|
|
<li><strong>Implementacion Basic (1-2 modulos):</strong> 5,000-15,000 EUR</li>
|
|
<li><strong>Implementacion Estandar (3-5 modulos):</strong> 15,000-40,000 EUR</li>
|
|
<li><strong>Implementacion Compleja (6+ modulos):</strong> 40,000-150,000 EUR</li>
|
|
<li><strong>Proyecto Enterprise Grande:</strong> 150,000-500,000+ EUR</li>
|
|
</ul>
|
|
</section>
|
|
|
|
<!-- D3.js Pricing Evolution Chart -->
|
|
<section class="chart-section fade-in">
|
|
<h3 id="grafico-licencias">Evolucion de Precios de Licencias Odoo Enterprise (2020-2026)</h3>
|
|
<p>Este grafico muestra la evolucion historica de los precios de licencia por usuario, demostrando la estabilidad del modelo de precios de Odoo a lo largo del tiempo.</p>
|
|
<div class="chart-container" id="pricing-evolution-chart"></div>
|
|
</section>
|
|
|
|
<!-- Pricing Plans -->
|
|
<section id="planes-detallados" class="content-section fade-in">
|
|
<h2>Planes y Paquetes Odoo Enterprise 2026</h2>
|
|
|
|
<p>Odoo ofrece diferentes configuraciones para adaptarse a las necesidades de cada empresa. A continuacion presentamos los principales planes disponibles con sus caracteristicas y precios actualizados para 2026:</p>
|
|
|
|
<div class="pricing-grid">
|
|
<!-- Startup Plan -->
|
|
<div class="pricing-card">
|
|
<h4>Startup</h4>
|
|
<div class="price">31.10 EUR<span class="price-period">/usuario/month</span></div>
|
|
<div class="price-note">Minimo 1 usuario - Facturacion anual</div>
|
|
<ul>
|
|
<li>Todas las apps Enterprise</li>
|
|
<li>Actualizaciones incluidas</li>
|
|
<li>Soporte por email</li>
|
|
<li>Documentacion completa</li>
|
|
<li>Community de usuarios</li>
|
|
</ul>
|
|
<a href="https://www.Odoo.com/pricing" class="cta-btn" target="_blank" rel="noopener">Ver Detalles</a>
|
|
</div>
|
|
|
|
<!-- Standard Plan -->
|
|
<div class="pricing-card featured">
|
|
<span class="badge">Mas Popular</span>
|
|
<h4>Standard + Odoo.sh</h4>
|
|
<div class="price">44.90 EUR<span class="price-period">/usuario/month</span></div>
|
|
<div class="price-note">Hosting oficial incluido</div>
|
|
<ul>
|
|
<li>Todo lo de Startup</li>
|
|
<li>Odoo Hosting.sh incluido</li>
|
|
<li>Entornos de staging</li>
|
|
<li>Daily automatic backups</li>
|
|
<li>SSL y dominio personalizado</li>
|
|
<li>Soporte prioritario</li>
|
|
</ul>
|
|
<a href="https://www.Odoo.com/pricing" class="cta-btn" target="_blank" rel="noopener">Comenzar Ahora</a>
|
|
</div>
|
|
|
|
<!-- Enterprise Plus -->
|
|
<div class="pricing-card">
|
|
<h4>Enterprise Custom</h4>
|
|
<div class="price">Contactar<span class="price-period">para cotizacion</span></div>
|
|
<div class="price-note">Grandes volumenes (+50 usuarios)</div>
|
|
<ul>
|
|
<li>Todo lo de Standard</li>
|
|
<li>Descuentos por volumen</li>
|
|
<li>SLA garantizado</li>
|
|
<li>Account manager dedicado</li>
|
|
<li>Recursos cloud dedicados</li>
|
|
<li>Soporte 24/7 opcional</li>
|
|
</ul>
|
|
<a href="#" class="cta-btn">Solicitar Cotizacion</a>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="warning-box">
|
|
<h4>Importante: Costs No Incluidos en la Licencia</h4>
|
|
<p>Los precios de licencia No incluyen: implementacion y configuracion inicial, personalizacion de modulos, desarrollo de integraciones, migracion de datos desde sistemas anteriores, formacion de usuarios, ni soporte premium 24/7. Estos servicios se contratan por separado con Odoo directamente o a traves de partners certificados.</p>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- Hosting Costs -->
|
|
<section id="Hosting-Costs" class="content-section fade-in">
|
|
<h2>Costs de Hosting para Odoo Enterprise</h2>
|
|
|
|
<p>El Hosting es un componente critico del ecosistema Odoo Enterprise. La eleccion entre Odoo.sh (la plataforma oficial) y alternativas de terceros tiene implicaciones importantes tanto en Costs como en funcionalidad. A continuacion analizamos las principales opciones disponibles en 2026:</p>
|
|
|
|
<h3>Odoo.sh: La Plataforma Oficial</h3>
|
|
<p>Odoo.sh es la solucion de Hosting desarrollada y mantenida directamente por Odoo S.A. Ofrece una experiencia integrada con el ecosistema Odoo, incluyendo Deployment automatizado, entornos de staging y herramientas de desarrollo. Sin embargo, su costo puede ser significativo para empresas con muchos usuarios.</p>
|
|
|
|
<table class="comparison-table">
|
|
<thead>
|
|
<tr>
|
|
<th>Plan Odoo.sh</th>
|
|
<th>Workers</th>
|
|
<th>RAM</th>
|
|
<th>Almacenamiento</th>
|
|
<th>Precio/month</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><strong>One App</strong></td>
|
|
<td>1</td>
|
|
<td>1 GB</td>
|
|
<td>5 GB</td>
|
|
<td>Incluido en licencia</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Starter</strong></td>
|
|
<td>1</td>
|
|
<td>2 GB</td>
|
|
<td>15 GB</td>
|
|
<td>~72 EUR</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Standard</strong></td>
|
|
<td>2</td>
|
|
<td>4 GB</td>
|
|
<td>30 GB</td>
|
|
<td>~144 EUR</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Stage (adicional)</strong></td>
|
|
<td>1</td>
|
|
<td>2 GB</td>
|
|
<td>15 GB</td>
|
|
<td>~36 EUR</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Worker adicional</strong></td>
|
|
<td>+1</td>
|
|
<td>+2 GB</td>
|
|
<td>-</td>
|
|
<td>~72 EUR</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<h3>Alternativas de Hosting para Odoo Enterprise</h3>
|
|
<p>Muchas empresas optan por Hosting alternativo para reducir Costs o tener mayor control sobre la infraestructura. Las opciones mas populares incluyen:</p>
|
|
|
|
<div class="tco-breakdown">
|
|
<div class="tco-item">
|
|
<h4>Hetzner Cloud</h4>
|
|
<div class="cost">39-150 EUR/month</div>
|
|
<div class="description">excellent relacion precio-rendimiento. Servidores en Alemania con baja latencia para Europe. Requiere configuracion Manual.</div>
|
|
</div>
|
|
<div class="tco-item">
|
|
<h4>AWS EC2</h4>
|
|
<div class="cost">80-300 EUR/month</div>
|
|
<div class="description">Maxima escalabilidad y servicios complementarios. Ideal para grandes corporaciones con requisitos de compliance.</div>
|
|
</div>
|
|
<div class="tco-item">
|
|
<h4>DigitalOcean</h4>
|
|
<div class="cost">48-200 EUR/month</div>
|
|
<div class="description">Simplicidad y buena documentacion. Droplets optimizados para aplicaciones Python como Odoo.</div>
|
|
</div>
|
|
<div class="tco-item">
|
|
<h4>On-Premise</h4>
|
|
<div class="cost">5,000-20,000 EUR inicial</div>
|
|
<div class="description">Control Full sobre datos y seguridad. Requiere inversion en hardware y personal IT dedicado.</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- D3.js TCO Comparison Chart -->
|
|
<section class="chart-section fade-in">
|
|
<h3 id="grafico-tco">Analysis del Costo Full de Propiedad (TCO) a 3 Anos</h3>
|
|
<p>Este grafico interactivo compara el TCO de Odoo Enterprise con otros ERPs del mercado para una empresa de 20 usuarios durante un periodo de 3 anos.</p>
|
|
<div class="chart-container" id="tco-comparison-chart"></div>
|
|
</section>
|
|
|
|
<!-- Community vs Enterprise -->
|
|
<section id="community-vs-enterprise" class="content-section fade-in">
|
|
<h2>Odoo Community vs Enterprise: Analysis de Costs</h2>
|
|
|
|
<p>Una de las decisiones mas importantes al adoptar Odoo es elegir entre la version Community (gratuita y open source) y Enterprise (de pago). Esta decision tiene implicaciones significativas tanto en funcionalidad como en costo Full del proyecto.</p>
|
|
|
|
<div class="comparison-vs">
|
|
<div class="edition">
|
|
<h4>Odoo Community</h4>
|
|
<div class="price-tag">0 EUR</div>
|
|
<p>Licencia LGPL - Codigo abierto</p>
|
|
</div>
|
|
<div class="vs-divider">VS</div>
|
|
<div class="edition">
|
|
<h4>Odoo Enterprise</h4>
|
|
<div class="price-tag">31.10 EUR/user/month</div>
|
|
<p>Licencia propietaria - Soporte oficial</p>
|
|
</div>
|
|
</div>
|
|
|
|
<h3>Funcionalidades Exclusivas de Enterprise</h3>
|
|
<p>Odoo Enterprise incluye mas de 30 aplicaciones y funcionalidades que No estan disponibles en Community. Estas caracteristicas son especialmente valiosas para empresas medianas y grandes con requisitos avanzados:</p>
|
|
|
|
<table class="comparison-table">
|
|
<thead>
|
|
<tr>
|
|
<th>Funcionalidad</th>
|
|
<th>Community</th>
|
|
<th>Enterprise</th>
|
|
<th>Valor Estimado</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>Contabilidad Advanced (Localizaciones)</td>
|
|
<td class="cross">Basic</td>
|
|
<td class="check">Completa</td>
|
|
<td>5,000-15,000 EUR</td>
|
|
</tr>
|
|
<tr>
|
|
<td>MRP (Fabricacion)</td>
|
|
<td class="cross">Basico</td>
|
|
<td class="check">PLM, Calidad, Mantenimiento</td>
|
|
<td>10,000-30,000 EUR</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Studio (Personalizacion sin codigo)</td>
|
|
<td class="cross">No disponible</td>
|
|
<td class="check">Incluido</td>
|
|
<td>8,000-20,000 EUR</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Firma Electronica</td>
|
|
<td class="cross">No disponible</td>
|
|
<td class="check">Incluido</td>
|
|
<td>2,000-5,000 EUR/ano</td>
|
|
</tr>
|
|
<tr>
|
|
<td>VoIP Integrado</td>
|
|
<td class="cross">No disponible</td>
|
|
<td class="check">Incluido</td>
|
|
<td>3,000-8,000 EUR</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Aprobaciones y Workflows</td>
|
|
<td class="cross">Limited</td>
|
|
<td class="check">Avanzado</td>
|
|
<td>4,000-10,000 EUR</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Reportes Avanzados (Dashboards)</td>
|
|
<td class="cross">Basico</td>
|
|
<td class="check">BI Integrado</td>
|
|
<td>5,000-15,000 EUR</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Soporte Tecnico Oficial</td>
|
|
<td class="cross">Community</td>
|
|
<td class="check">Oficial</td>
|
|
<td>Incalculable</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<div class="highlight-box">
|
|
<h4>Cuando Elegir Enterprise sobre Community</h4>
|
|
<p>Recomendamos Odoo Enterprise cuando: necesitas contabilidad certificada para tu pais, requieres funcionalidades de fabricacion Advanced (PLM, Calidad), tienes mas de 10 usuarios y necesitas soporte garantizado, planeas escalar significativamente en los proximos 2-3 anos, o el costo de desarrollo de funcionalidades Community superaria el costo de licencia Enterprise.</p>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- Hidden Costs -->
|
|
<section id="Costs-Hidden" class="content-section fade-in">
|
|
<h2>Costs Hidden y Consideraciones Importantes</h2>
|
|
|
|
<p>Uno de los errores mas comunes al presupuestar un proyecto Odoo Enterprise es subestimar los Costs mas alla de la licencia. Estos "Costs Hidden" pueden representar entre el 60% y el 80% del costo Full del proyecto en los primeros tres anos.</p>
|
|
|
|
<h3>Desglose de Costs Frecuentemente Subestimados</h3>
|
|
|
|
<div class="tco-breakdown">
|
|
<div class="tco-item">
|
|
<h4>Implementacion Inicial</h4>
|
|
<div class="cost">10,000-50,000 EUR</div>
|
|
<div class="description">Configuracion, parametrizacion, migracion de datos, formacion inicial. Varia segun complejidad del proyecto.</div>
|
|
</div>
|
|
<div class="tco-item">
|
|
<h4>Personalizaciones</h4>
|
|
<div class="cost">5,000-100,000 EUR</div>
|
|
<div class="description">Desarrollo de modulos custom, adaptaciones a procesos especificos. El factor mas variable del presupuesto.</div>
|
|
</div>
|
|
<div class="tco-item">
|
|
<h4>Integraciones</h4>
|
|
<div class="cost">2,000-20,000 EUR por integracion</div>
|
|
<div class="description">Conexion con e-commerce, ERP anterior, bancos, logistica, etc. Cada integracion es un proyecto en Yes.</div>
|
|
</div>
|
|
<div class="tco-item">
|
|
<h4>Formacion Usuarios</h4>
|
|
<div class="cost">1,000-5,000 EUR</div>
|
|
<div class="description">Capacitacion inicial y continua. Clave para la adopcion exitosa del sistema.</div>
|
|
</div>
|
|
<div class="tco-item">
|
|
<h4>Mantenimiento Anual</h4>
|
|
<div class="cost">15-25% del costo inicial</div>
|
|
<div class="description">Soporte continuo, actualizaciones de personalizaciones, mejoras incrementales.</div>
|
|
</div>
|
|
<div class="tco-item">
|
|
<h4>Migracion de Versiones</h4>
|
|
<div class="cost">5,000-30,000 EUR cada 2-3 anos</div>
|
|
<div class="description">Actualizacion a nuevas versiones de Odoo. Personalizaciones requieren adaptacion.</div>
|
|
</div>
|
|
</div>
|
|
|
|
<h3>Ejemplo de Presupuesto Realista: PYME 20 Usuarios</h3>
|
|
<p>A continuacion presentamos un ejemplo detallado de presupuesto para una empresa mediana que implementa Odoo Enterprise con 20 usuarios durante 3 anos:</p>
|
|
|
|
<table class="comparison-table">
|
|
<thead>
|
|
<tr>
|
|
<th>Concepto</th>
|
|
<th>Ano 1</th>
|
|
<th>Ano 2</th>
|
|
<th>Ano 3</th>
|
|
<th>Full 3 Anos</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><strong>Licencias (20 usuarios)</strong></td>
|
|
<td>7,460 EUR</td>
|
|
<td>7,460 EUR</td>
|
|
<td>7,460 EUR</td>
|
|
<td>22,380 EUR</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Hosting (Odoo.sh Standard)</strong></td>
|
|
<td>1,728 EUR</td>
|
|
<td>1,728 EUR</td>
|
|
<td>1,728 EUR</td>
|
|
<td>5,184 EUR</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Implementacion</strong></td>
|
|
<td>25,000 EUR</td>
|
|
<td>-</td>
|
|
<td>-</td>
|
|
<td>25,000 EUR</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Personalizaciones</strong></td>
|
|
<td>15,000 EUR</td>
|
|
<td>5,000 EUR</td>
|
|
<td>5,000 EUR</td>
|
|
<td>25,000 EUR</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Integraciones</strong></td>
|
|
<td>8,000 EUR</td>
|
|
<td>2,000 EUR</td>
|
|
<td>2,000 EUR</td>
|
|
<td>12,000 EUR</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Formacion</strong></td>
|
|
<td>3,000 EUR</td>
|
|
<td>1,000 EUR</td>
|
|
<td>1,000 EUR</td>
|
|
<td>5,000 EUR</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Soporte/Mantenimiento</strong></td>
|
|
<td>-</td>
|
|
<td>6,000 EUR</td>
|
|
<td>6,000 EUR</td>
|
|
<td>12,000 EUR</td>
|
|
</tr>
|
|
<tr style="background: rgba(255,107,53,0.1);">
|
|
<td><strong>Full</strong></td>
|
|
<td><strong>60,188 EUR</strong></td>
|
|
<td><strong>23,188 EUR</strong></td>
|
|
<td><strong>23,188 EUR</strong></td>
|
|
<td><strong>106,564 EUR</strong></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<p>Este ejemplo asume una implementacion de complejidad media con 4-5 modulos principales (Ventas, Compras, Inventario, Contabilidad, CRM) y personalizaciones moderadas. Proyectos mas simples pueden costar 40-60% menos, mientras que implementaciones complejas pueden duplicar o triplicar estas cifras.</p>
|
|
</section>
|
|
|
|
<!-- D3.js ROI Calculator Chart -->
|
|
<section class="chart-section fade-in">
|
|
<h3 id="grafico-roi">Calculadora de ROI: Retorno de Inversion Odoo Enterprise</h3>
|
|
<p>Visualiza el punto de equilibrio y el retorno de inversion esperado para diferentes escenarios de implementacion de Odoo Enterprise.</p>
|
|
<div class="chart-container" id="roi-calculator-chart"></div>
|
|
</section>
|
|
|
|
<!-- ERP Comparison -->
|
|
<section id="comparativa-erps" class="content-section fade-in">
|
|
<h2>Comparativa de Precios: Odoo Enterprise vs Otros ERPs</h2>
|
|
|
|
<p>Una de las principales ventajas de Odoo Enterprise es su posicionamiento competitivo en el mercado de ERPs. Comparado con soluciones tradicionales como SAP, Microsoft Dynamics u Oracle NetSuite, Odoo ofrece un TCO significativamente menor sin sacrificar funcionalidad.</p>
|
|
|
|
<table class="comparison-table">
|
|
<thead>
|
|
<tr>
|
|
<th>ERP</th>
|
|
<th>Licencia/user/month</th>
|
|
<th>TCO 3 Anos (20 users)</th>
|
|
<th>Tiempo Implementacion</th>
|
|
<th>Complejidad</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr style="background: rgba(76,175,80,0.1);">
|
|
<td><strong>Odoo Enterprise</strong></td>
|
|
<td>31.10 EUR</td>
|
|
<td>80,000-120,000 EUR</td>
|
|
<td>2-6 meses</td>
|
|
<td>Media</td>
|
|
</tr>
|
|
<tr>
|
|
<td>SAP Business One</td>
|
|
<td>90-150 EUR</td>
|
|
<td>150,000-300,000 EUR</td>
|
|
<td>6-12 meses</td>
|
|
<td>Alta</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Microsoft Dynamics 365 BC</td>
|
|
<td>70-100 EUR</td>
|
|
<td>120,000-200,000 EUR</td>
|
|
<td>4-9 meses</td>
|
|
<td>Media-Alta</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Oracle NetSuite</td>
|
|
<td>100-200 EUR</td>
|
|
<td>180,000-350,000 EUR</td>
|
|
<td>6-12 meses</td>
|
|
<td>Alta</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Sage X3</td>
|
|
<td>80-120 EUR</td>
|
|
<td>130,000-220,000 EUR</td>
|
|
<td>5-10 meses</td>
|
|
<td>Media-Alta</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Holded / Factorial</td>
|
|
<td>15-40 EUR</td>
|
|
<td>30,000-60,000 EUR</td>
|
|
<td>1-2 meses</td>
|
|
<td>Baja</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<div class="highlight-box">
|
|
<h4>Posicionamiento de Odoo en el Mercado</h4>
|
|
<p>Odoo Enterprise se posiciona como la solucion ideal para empresas que necesitan funcionalidad ERP completa sin el costo y complejidad de SAP u Oracle, pero con mas capacidades que soluciones simplificadas como Holded o Factorial. Es especialmente atractivo para PYMES en crecimiento que planean escalar sus operaciones.</p>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- D3.js Market Position Chart -->
|
|
<section class="chart-section fade-in">
|
|
<h3>Posicionamiento en el Mercado: Precio vs Funcionalidad</h3>
|
|
<p>Este grafico muestra como Odoo Enterprise se posiciona frente a otros ERPs en terminos de precio y nivel de funcionalidad.</p>
|
|
<div class="chart-container" id="market-position-chart"></div>
|
|
</section>
|
|
|
|
<!-- CTA Banner -->
|
|
<section class="cta-banner fade-in">
|
|
<h3>Necesitas Ayuda para Calcular tu Presupuesto Odoo?</h3>
|
|
<p>Nuestros consultores certificados pueden ayudarte a estimar el costo real de tu proyecto Odoo Enterprise. Analysis gratuito sin compromiso.</p>
|
|
<a href="/contacto/" class="cta-btn">Solicitar Presupuesto Personalizado</a>
|
|
</section>
|
|
|
|
<!-- FAQ Section -->
|
|
<section id="faq" class="faq-section fade-in">
|
|
<h2>Preguntas Frecuentes sobre Precios Odoo Enterprise</h2>
|
|
|
|
<div class="faq-item">
|
|
<div class="faq-question">Cuanto cuesta la licencia de Odoo Enterprise en 2026?</div>
|
|
<div class="faq-answer">La licencia de Odoo Enterprise en 2026 tiene un costo base de 31.10 EUR por usuario al mes (facturado anualmente). Para contratos anuales, esto equivale aproximadamente a 373 EUR por usuario al ano. El precio puede variar segun el numero de usuarios y aplicaciones seleccionadas. Existen descuentos por volumen para empresas con mas de 50 usuarios.</div>
|
|
</div>
|
|
|
|
<div class="faq-item">
|
|
<div class="faq-question">Que incluye el precio de Odoo Enterprise?</div>
|
|
<div class="faq-answer">El precio de Odoo Enterprise incluye: acceso a todas las aplicaciones Enterprise (Contabilidad Advanced, MRP, PLM, Calidad, Studio, Firma electronica, VoIP, etc.), actualizaciones automaticas a nuevas versiones, soporte tecnico oficial por email, acceso a la documentacion completa y recursos de formacion online. No incluye personalizaciones, implementacion, formacion presencial ni soporte premium 24/7.</div>
|
|
</div>
|
|
|
|
<div class="faq-item">
|
|
<div class="faq-question">Cual es el costo Full de propiedad (TCO) de Odoo Enterprise?</div>
|
|
<div class="faq-answer">El TCO de Odoo Enterprise para una PYME tipica (20 usuarios) durante 3 anos oscila entre 80,000 EUR y 150,000 EUR, dependiendo del nivel de personalizacion. Esto incluye: licencias (22,380 EUR aprox.), Hosting (5,000-15,000 EUR), implementacion (15,000-50,000 EUR), personalizaciones (10,000-40,000 EUR) y mantenimiento anual (10,000-20,000 EUR).</div>
|
|
</div>
|
|
|
|
<div class="faq-item">
|
|
<div class="faq-question">Odoo Enterprise es mas caro que otros ERPs?</div>
|
|
<div class="faq-answer">No, Odoo Enterprise es significativamente mas economico que ERPs tradicionales. Comparado con SAP Business One es un 40-60% mas barato, respecto a Microsoft Dynamics 365 ofrece un ahorro del 30-50%, y frente a Oracle NetSuite puede ser 50-70% mas economico. La principal ventaja es el modelo de pago por usuario sin Costs Hidden de modulos adicionales.</div>
|
|
</div>
|
|
|
|
<div class="faq-item">
|
|
<div class="faq-question">Puedo empezar con Odoo Community y migrar a Enterprise despues?</div>
|
|
<div class="faq-answer">Yes, es totalmente posible migrar de Community a Enterprise. Odoo ofrece herramientas de migracion y la base de datos es compatible. Sin embargo, los modulos Community personalizados (de terceros o desarrollo propio) pueden requerir adaptacion o reemplazo por equivalentes Enterprise. El costo de migracion tipico es de 3,000-15,000 EUR dependiendo de la complejidad y personalizaciones existentes.</div>
|
|
</div>
|
|
|
|
<div class="faq-item">
|
|
<div class="faq-question">Que Hosting necesito para Odoo Enterprise?</div>
|
|
<div class="faq-answer">Para Odoo Enterprise recomendamos minimo 8GB RAM, 4 CPU cores y 100GB SSD para 20 usuarios. Odoo.sh es la opcion oficial que incluye Hosting optimizado (desde 72 EUR/month). Alternativas como Hetzner (39-150 EUR/month), AWS (80-300 EUR/month) o Azure ofrecen mayor flexibilidad pero requieren configuracion Manual. La eleccion Depends de tus requisitos de control, compliance y presupuesto.</div>
|
|
</div>
|
|
|
|
<div class="faq-item">
|
|
<div class="faq-question">Hay descuentos por volumen en Odoo Enterprise?</div>
|
|
<div class="faq-answer">Yes, Odoo ofrece descuentos por volumen negociables: 5-10% para 50-99 usuarios, 10-15% para 100-249 usuarios, y 15-25% para 250+ usuarios. Tambien existen programas especiales para ONGs (hasta 50% descuento), instituciones educativas, y startups en programas de aceleracion reconocidos. Contacta con Odoo directamente o un partner oficial para negociar precios personalizados.</div>
|
|
</div>
|
|
|
|
<div class="faq-item">
|
|
<div class="faq-question">Cuales son los Costs Hidden de Odoo Enterprise?</div>
|
|
<div class="faq-answer">Los Costs frecuentemente subestimados incluyen: implementacion y configuracion inicial (10,000-50,000 EUR), personalizacion de modulos (5,000-100,000 EUR), integraciones con sistemas externos como e-commerce, bancos o logistica (2,000-20,000 EUR por integracion), migracion de datos desde sistemas anteriores (2,000-15,000 EUR), formacion de usuarios (1,000-5,000 EUR), y mantenimiento anual de personalizaciones (15-25% del costo inicial cada ano).</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- Related Articles -->
|
|
<section id="relacionados" class="content-section fade-in">
|
|
<h2>Related Articles</h2>
|
|
|
|
<div class="related-articles">
|
|
<a href="/Odoo-Hosting/mejor-Hosting-Odoo-2026/" class="related-card">
|
|
<div class="related-card-image">SERVER</div>
|
|
<div class="related-card-content">
|
|
<h4>Mejor Odoo Hosting 2026: Comparativa Completa</h4>
|
|
<p>Analysis de 15+ Providers de Hosting para Odoo</p>
|
|
</div>
|
|
</a>
|
|
|
|
<a href="/Odoo-Hosting/Odoo-sh-Hosting-oficial-plataforma-2025/" class="related-card">
|
|
<div class="related-card-image">CLOUD</div>
|
|
<div class="related-card-content">
|
|
<h4>Odoo.sh: Complete guide de la Plataforma Oficial</h4>
|
|
<p>Todo sobre el Hosting oficial de Odoo</p>
|
|
</div>
|
|
</a>
|
|
|
|
<a href="/Odoo-Hosting/Odoo-community-vs-enterprise-2025/" class="related-card">
|
|
<div class="related-card-image">VS</div>
|
|
<div class="related-card-content">
|
|
<h4>Odoo Community vs Enterprise: Comparativa</h4>
|
|
<p>Diferencias detalladas entre ambas versiones</p>
|
|
</div>
|
|
</a>
|
|
|
|
<a href="/Odoo-Hosting/requisitos-Hosting-Odoo-servidor-2025/" class="related-card">
|
|
<div class="related-card-image">SPECS</div>
|
|
<div class="related-card-content">
|
|
<h4>Requisitos Tecnicos para Odoo Enterprise</h4>
|
|
<p>Especificaciones de servidor recomendadas</p>
|
|
</div>
|
|
</a>
|
|
|
|
<a href="/Odoo-implementacion/costo-implementacion-Odoo-2025/" class="related-card">
|
|
<div class="related-card-image">COST</div>
|
|
<div class="related-card-content">
|
|
<h4>Costo de Implementacion Odoo</h4>
|
|
<p>Guia detallada de presupuestos de proyecto</p>
|
|
</div>
|
|
</a>
|
|
|
|
<a href="/Odoo-Hosting/migracion-Odoo-community-enterprise/" class="related-card">
|
|
<div class="related-card-image">MIGRATE</div>
|
|
<div class="related-card-content">
|
|
<h4>Migracion de Community a Enterprise</h4>
|
|
<p>Proceso paso a paso y consideraciones</p>
|
|
</div>
|
|
</a>
|
|
</div>
|
|
</section>
|
|
</main>
|
|
|
|
<!-- EEAT Author Section -->
|
|
<div id="eeat-section"></div>
|
|
|
|
<div id="footer"><footer class="site-footer"><div class="container"><div class="footer-cols"><div><strong>Odoo Expertos</strong></div><nav class="footer-nav"><a href="/en/">Home</a><a href="/en/odoo/">Odoo</a><a href="/en/odoo-ia/">Odoo AI</a><a href="/en/odoo-hosting/">Odoo Hosting</a><a href="/en/mapa-del-sitio/">Sitemap</a></nav></div><div class="footer-bottom"><small>© 2026 Odoo Expertos</small></div></div></footer></div><nav class="footer-nav"><a href="/en/">Home</a><a href="/en/odoo/">Odoo</a><a href="/en/odoo-ia/">Odoo AI</a><a href="/en/odoo-hosting/">Odoo Hosting</a><a href="/en/mapa-del-sitio/">Sitemap</a></nav></div><div class="footer-bottom"><small>© 2026 Odoo Expertos</small></div></div></footer></div>
|
|
|
|
<!-- Scripts -->
|
|
<script src="/js/language-router.js"></script>
|
|
<script src="/components/header.min.js"></script>
|
|
<script src="/components/footer.min.js"></script>
|
|
<script src="/components/eeat.min.js"></script>
|
|
<script src="/js/cookie-banner.min.js"></script>
|
|
|
|
<!-- D3.js -->
|
|
<script src="https://d3js.org/d3.v7.min.js"></script>
|
|
|
|
<script>
|
|
// Initialize components
|
|
// Scroll animation observer
|
|
const observer = new IntersectionObserver((entries) => {
|
|
entries.forEach(entry => {
|
|
if (entry.isIntersecting) {
|
|
entry.target.classList.add('visible');
|
|
}
|
|
});
|
|
}, { threshold: 0.1 });
|
|
|
|
document.querySelectorAll('.fade-in').forEach(el => observer.observe(el));
|
|
|
|
// FAQ Toggle
|
|
document.querySelectorAll('.faq-question').forEach(question => {
|
|
question.addEventListener('click', () => {
|
|
const item = question.parentElement;
|
|
item.classList.toggle('open');
|
|
});
|
|
});
|
|
|
|
// Tooltip
|
|
const tooltip = d3.select('body').append('div')
|
|
.attr('class', 'd3-tooltip')
|
|
.style('opacity', 0);
|
|
|
|
// Color scales
|
|
const colorScale = d3.scaleOrdinal()
|
|
.range(['#FF6B35', '#4CAF50', '#2196F3', '#9C27B0', '#FF9800', '#00BCD4', '#E91E63', '#8BC34A']);
|
|
|
|
// Chart 1: Pricing Evolution
|
|
function renderPricingEvolution() {
|
|
const container = d3.select('#pricing-evolution-chart');
|
|
if (container.empty()) return;
|
|
|
|
const width = container.node().getBoundingClientRect().width;
|
|
const height = 400;
|
|
const margin = { top: 40, right: 120, bottom: 60, left: 70 };
|
|
|
|
container.html('');
|
|
|
|
const svg = container.append('svg')
|
|
.attr('width', width)
|
|
.attr('height', height);
|
|
|
|
const data = [
|
|
{ year: 2020, enterprise: 24.90, hosting: 50 },
|
|
{ year: 2021, enterprise: 26.50, hosting: 55 },
|
|
{ year: 2022, enterprise: 28.00, hosting: 60 },
|
|
{ year: 2023, enterprise: 29.50, hosting: 65 },
|
|
{ year: 2024, enterprise: 30.30, hosting: 68 },
|
|
{ year: 2025, enterprise: 30.70, hosting: 70 },
|
|
{ year: 2026, enterprise: 31.10, hosting: 72 }
|
|
];
|
|
|
|
const xScale = d3.scaleLinear()
|
|
.domain([2020, 2026])
|
|
.range([margin.left, width - margin.right]);
|
|
|
|
const yScale = d3.scaleLinear()
|
|
.domain([0, 100])
|
|
.range([height - margin.bottom, margin.top]);
|
|
|
|
// Grid
|
|
svg.append('g')
|
|
.attr('class', 'grid')
|
|
.attr('transform', `translate(0,${height - margin.bottom})`)
|
|
.call(d3.axisBottom(xScale).tickSize(-(height - margin.top - margin.bottom)).tickFormat(''))
|
|
.selectAll('line').attr('stroke', '#333');
|
|
|
|
svg.append('g')
|
|
.attr('class', 'grid')
|
|
.attr('transform', `translate(${margin.left},0)`)
|
|
.call(d3.axisLeft(yScale).tickSize(-(width - margin.left - margin.right)).tickFormat(''))
|
|
.selectAll('line').attr('stroke', '#333');
|
|
|
|
// Axes
|
|
svg.append('g')
|
|
.attr('transform', `translate(0,${height - margin.bottom})`)
|
|
.call(d3.axisBottom(xScale).tickFormat(d3.format('d')))
|
|
.attr('color', '#888');
|
|
|
|
svg.append('g')
|
|
.attr('transform', `translate(${margin.left},0)`)
|
|
.call(d3.axisLeft(yScale).tickFormat(d => `${d} EUR`))
|
|
.attr('color', '#888');
|
|
|
|
// Enterprise line
|
|
const enterpriseLine = d3.line()
|
|
.x(d => xScale(d.year))
|
|
.y(d => yScale(d.enterprise))
|
|
.curve(d3.curveMonotoneX);
|
|
|
|
const enterprisePath = svg.append('path')
|
|
.datum(data)
|
|
.attr('fill', 'none')
|
|
.attr('stroke', '#FF6B35')
|
|
.attr('stroke-width', 3)
|
|
.attr('d', enterpriseLine);
|
|
|
|
const totalLength = enterprisePath.node().getTotalLength();
|
|
enterprisePath
|
|
.attr('stroke-dasharray', totalLength)
|
|
.attr('stroke-dashoffset', totalLength)
|
|
.transition()
|
|
.duration(2000)
|
|
.attr('stroke-dashoffset', 0);
|
|
|
|
// Hosting line
|
|
const hostingLine = d3.line()
|
|
.x(d => xScale(d.year))
|
|
.y(d => yScale(d.hosting))
|
|
.curve(d3.curveMonotoneX);
|
|
|
|
const hostingPath = svg.append('path')
|
|
.datum(data)
|
|
.attr('fill', 'none')
|
|
.attr('stroke', '#4CAF50')
|
|
.attr('stroke-width', 3)
|
|
.attr('d', hostingLine);
|
|
|
|
const hostingLength = hostingPath.node().getTotalLength();
|
|
hostingPath
|
|
.attr('stroke-dasharray', hostingLength)
|
|
.attr('stroke-dashoffset', hostingLength)
|
|
.transition()
|
|
.duration(2000)
|
|
.delay(500)
|
|
.attr('stroke-dashoffset', 0);
|
|
|
|
// Data points
|
|
svg.selectAll('.enterprise-dot')
|
|
.data(data)
|
|
.join('circle')
|
|
.attr('class', 'enterprise-dot')
|
|
.attr('cx', d => xScale(d.year))
|
|
.attr('cy', d => yScale(d.enterprise))
|
|
.attr('r', 0)
|
|
.attr('fill', '#FF6B35')
|
|
.style('cursor', 'pointer')
|
|
.on('mouseover', function(event, d) {
|
|
d3.select(this).attr('r', 8);
|
|
tooltip.transition().duration(200).style('opacity', 1);
|
|
tooltip.html(`<strong>${d.year}</strong><br>Licencia Enterprise: ${d.enterprise} EUR/user/mes<br>Hosting Odoo.sh: ${d.hosting} EUR/mes`)
|
|
.style('left', (event.pageX + 15) + 'px')
|
|
.style('top', (event.pageY - 28) + 'px');
|
|
})
|
|
.on('mouseout', function() {
|
|
d3.select(this).attr('r', 5);
|
|
tooltip.transition().duration(200).style('opacity', 0);
|
|
})
|
|
.transition()
|
|
.duration(500)
|
|
.delay((d, i) => 2000 + i * 100)
|
|
.attr('r', 5);
|
|
|
|
svg.selectAll('.hosting-dot')
|
|
.data(data)
|
|
.join('circle')
|
|
.attr('class', 'hosting-dot')
|
|
.attr('cx', d => xScale(d.year))
|
|
.attr('cy', d => yScale(d.hosting))
|
|
.attr('r', 0)
|
|
.attr('fill', '#4CAF50')
|
|
.style('cursor', 'pointer')
|
|
.on('mouseover', function(event, d) {
|
|
d3.select(this).attr('r', 8);
|
|
tooltip.transition().duration(200).style('opacity', 1);
|
|
tooltip.html(`<strong>${d.year}</strong><br>Licencia Enterprise: ${d.enterprise} EUR/user/mes<br>Hosting Odoo.sh: ${d.hosting} EUR/mes`)
|
|
.style('left', (event.pageX + 15) + 'px')
|
|
.style('top', (event.pageY - 28) + 'px');
|
|
})
|
|
.on('mouseout', function() {
|
|
d3.select(this).attr('r', 5);
|
|
tooltip.transition().duration(200).style('opacity', 0);
|
|
})
|
|
.transition()
|
|
.duration(500)
|
|
.delay((d, i) => 2500 + i * 100)
|
|
.attr('r', 5);
|
|
|
|
// Legend
|
|
const legend = svg.append('g')
|
|
.attr('transform', `translate(${width - margin.right + 20}, ${margin.top})`);
|
|
|
|
legend.append('rect').attr('width', 15).attr('height', 15).attr('fill', '#FF6B35');
|
|
legend.append('text').attr('x', 22).attr('y', 12).attr('fill', '#b0b0b0').attr('font-size', '12px').text('Licencia Enterprise');
|
|
|
|
legend.append('rect').attr('y', 25).attr('width', 15).attr('height', 15).attr('fill', '#4CAF50');
|
|
legend.append('text').attr('x', 22).attr('y', 37).attr('fill', '#b0b0b0').attr('font-size', '12px').text('Hosting Odoo.sh');
|
|
|
|
// Axis labels
|
|
svg.append('text')
|
|
.attr('x', width / 2)
|
|
.attr('y', height - 10)
|
|
.attr('text-anchor', 'middle')
|
|
.attr('fill', '#888')
|
|
.attr('font-size', '14px')
|
|
.text('Ano');
|
|
|
|
svg.append('text')
|
|
.attr('transform', 'rotate(-90)')
|
|
.attr('x', -height / 2)
|
|
.attr('y', 20)
|
|
.attr('text-anchor', 'middle')
|
|
.attr('fill', '#888')
|
|
.attr('font-size', '14px')
|
|
.text('Precio (EUR)');
|
|
}
|
|
|
|
// Chart 2: TCO Comparison
|
|
function renderTCOComparison() {
|
|
const container = d3.select('#tco-comparison-chart');
|
|
if (container.empty()) return;
|
|
|
|
const width = container.node().getBoundingClientRect().width;
|
|
const height = 400;
|
|
const margin = { top: 40, right: 30, bottom: 100, left: 80 };
|
|
|
|
container.html('');
|
|
|
|
const svg = container.append('svg')
|
|
.attr('width', width)
|
|
.attr('height', height);
|
|
|
|
const data = [
|
|
{ erp: 'Odoo Enterprise', licencias: 22380, hosting: 5184, implementacion: 25000, mantenimiento: 12000, total: 64564 },
|
|
{ erp: 'SAP Business One', licencias: 54000, hosting: 12000, implementacion: 80000, mantenimiento: 30000, total: 176000 },
|
|
{ erp: 'MS Dynamics 365', licencias: 43200, hosting: 8400, implementacion: 55000, mantenimiento: 22000, total: 128600 },
|
|
{ erp: 'Oracle NetSuite', licencias: 72000, hosting: 0, implementacion: 90000, mantenimiento: 35000, total: 197000 },
|
|
{ erp: 'Sage X3', licencias: 48000, hosting: 10000, implementacion: 60000, mantenimiento: 25000, total: 143000 }
|
|
];
|
|
|
|
const categories = ['licencias', 'hosting', 'implementacion', 'mantenimiento'];
|
|
const categoryLabels = ['Licencias', 'Hosting', 'Implementacion', 'Mantenimiento'];
|
|
const categoryColors = ['#FF6B35', '#4CAF50', '#2196F3', '#9C27B0'];
|
|
|
|
const xScale = d3.scaleBand()
|
|
.domain(data.map(d => d.erp))
|
|
.range([margin.left, width - margin.right])
|
|
.padding(0.3);
|
|
|
|
const yScale = d3.scaleLinear()
|
|
.domain([0, 220000])
|
|
.range([height - margin.bottom, margin.top]);
|
|
|
|
// Grid
|
|
svg.append('g')
|
|
.attr('class', 'grid')
|
|
.attr('transform', `translate(${margin.left},0)`)
|
|
.call(d3.axisLeft(yScale).tickSize(-(width - margin.left - margin.right)).tickFormat(''))
|
|
.selectAll('line').attr('stroke', '#333');
|
|
|
|
// X axis
|
|
svg.append('g')
|
|
.attr('transform', `translate(0,${height - margin.bottom})`)
|
|
.call(d3.axisBottom(xScale))
|
|
.selectAll('text')
|
|
.attr('transform', 'rotate(-25)')
|
|
.attr('text-anchor', 'end')
|
|
.attr('fill', '#b0b0b0')
|
|
.attr('font-size', '11px');
|
|
|
|
// Y axis
|
|
svg.append('g')
|
|
.attr('transform', `translate(${margin.left},0)`)
|
|
.call(d3.axisLeft(yScale).tickFormat(d => `${d/1000}k EUR`))
|
|
.attr('color', '#888');
|
|
|
|
// Stacked bars
|
|
const stack = d3.stack()
|
|
.keys(categories)
|
|
.order(d3.stackOrderNone);
|
|
|
|
const stackedData = stack(data);
|
|
|
|
svg.selectAll('.layer')
|
|
.data(stackedData)
|
|
.join('g')
|
|
.attr('class', 'layer')
|
|
.attr('fill', (d, i) => categoryColors[i])
|
|
.selectAll('rect')
|
|
.data(d => d)
|
|
.join('rect')
|
|
.attr('x', d => xScale(d.data.erp))
|
|
.attr('y', height - margin.bottom)
|
|
.attr('width', xScale.bandwidth())
|
|
.attr('height', 0)
|
|
.style('cursor', 'pointer')
|
|
.on('mouseover', function(event, d) {
|
|
tooltip.transition().duration(200).style('opacity', 1);
|
|
const category = d3.select(this.parentNode).datum().key;
|
|
const value = d[1] - d[0];
|
|
tooltip.html(`<strong>${d.data.erp}</strong><br>${category}: ${value.toLocaleString()} EUR<br>Total 3 anos: ${d.data.total.toLocaleString()} EUR`)
|
|
.style('left', (event.pageX + 15) + 'px')
|
|
.style('top', (event.pageY - 28) + 'px');
|
|
})
|
|
.on('mouseout', function() {
|
|
tooltip.transition().duration(200).style('opacity', 0);
|
|
})
|
|
.transition()
|
|
.duration(800)
|
|
.delay((d, i) => i * 100)
|
|
.attr('y', d => yScale(d[1]))
|
|
.attr('height', d => yScale(d[0]) - yScale(d[1]));
|
|
|
|
// Total labels
|
|
svg.selectAll('.total-label')
|
|
.data(data)
|
|
.join('text')
|
|
.attr('class', 'total-label')
|
|
.attr('x', d => xScale(d.erp) + xScale.bandwidth() / 2)
|
|
.attr('y', d => yScale(d.total) - 8)
|
|
.attr('text-anchor', 'middle')
|
|
.attr('fill', '#fff')
|
|
.attr('font-size', '11px')
|
|
.attr('font-weight', '600')
|
|
.attr('opacity', 0)
|
|
.text(d => `${(d.total/1000).toFixed(0)}k EUR`)
|
|
.transition()
|
|
.duration(500)
|
|
.delay(1200)
|
|
.attr('opacity', 1);
|
|
|
|
// Legend
|
|
const legendY = height - 35;
|
|
categories.forEach((cat, i) => {
|
|
const legendX = margin.left + i * ((width - margin.left - margin.right) / 4);
|
|
svg.append('rect')
|
|
.attr('x', legendX)
|
|
.attr('y', legendY)
|
|
.attr('width', 12)
|
|
.attr('height', 12)
|
|
.attr('fill', categoryColors[i])
|
|
.attr('rx', 2);
|
|
|
|
svg.append('text')
|
|
.attr('x', legendX + 18)
|
|
.attr('y', legendY + 10)
|
|
.attr('fill', '#b0b0b0')
|
|
.attr('font-size', '11px')
|
|
.text(categoryLabels[i]);
|
|
});
|
|
}
|
|
|
|
// Chart 3: ROI Calculator
|
|
function renderROICalculator() {
|
|
const container = d3.select('#roi-calculator-chart');
|
|
if (container.empty()) return;
|
|
|
|
const width = container.node().getBoundingClientRect().width;
|
|
const height = 400;
|
|
const margin = { top: 40, right: 30, bottom: 60, left: 80 };
|
|
|
|
container.html('');
|
|
|
|
const svg = container.append('svg')
|
|
.attr('width', width)
|
|
.attr('height', height);
|
|
|
|
// ROI data (cumulative investment vs returns)
|
|
const months = d3.range(0, 37);
|
|
const investment = months.map(m => {
|
|
if (m === 0) return 40000; // Initial implementation
|
|
return 40000 + (m * 800); // Monthly costs
|
|
});
|
|
const returns = months.map(m => {
|
|
if (m < 3) return 0; // Ramp-up period
|
|
return (m - 2) * 3500; // Monthly savings/returns
|
|
});
|
|
const netValue = months.map((m, i) => returns[i] - investment[i]);
|
|
|
|
const data = months.map((m, i) => ({
|
|
month: m,
|
|
investment: investment[i],
|
|
returns: returns[i],
|
|
netValue: netValue[i]
|
|
}));
|
|
|
|
const xScale = d3.scaleLinear()
|
|
.domain([0, 36])
|
|
.range([margin.left, width - margin.right]);
|
|
|
|
const yScale = d3.scaleLinear()
|
|
.domain([-50000, 130000])
|
|
.range([height - margin.bottom, margin.top]);
|
|
|
|
// Grid
|
|
svg.append('g')
|
|
.attr('class', 'grid')
|
|
.attr('transform', `translate(${margin.left},0)`)
|
|
.call(d3.axisLeft(yScale).tickSize(-(width - margin.left - margin.right)).tickFormat(''))
|
|
.selectAll('line').attr('stroke', '#333');
|
|
|
|
// Zero line
|
|
svg.append('line')
|
|
.attr('x1', margin.left)
|
|
.attr('x2', width - margin.right)
|
|
.attr('y1', yScale(0))
|
|
.attr('y2', yScale(0))
|
|
.attr('stroke', '#666')
|
|
.attr('stroke-width', 2)
|
|
.attr('stroke-dasharray', '5,5');
|
|
|
|
// Axes
|
|
svg.append('g')
|
|
.attr('transform', `translate(0,${height - margin.bottom})`)
|
|
.call(d3.axisBottom(xScale).tickFormat(d => `Mes ${d}`))
|
|
.attr('color', '#888');
|
|
|
|
svg.append('g')
|
|
.attr('transform', `translate(${margin.left},0)`)
|
|
.call(d3.axisLeft(yScale).tickFormat(d => `${d/1000}k EUR`))
|
|
.attr('color', '#888');
|
|
|
|
// Investment area
|
|
const investmentArea = d3.area()
|
|
.x(d => xScale(d.month))
|
|
.y0(yScale(0))
|
|
.y1(d => yScale(-d.investment + d.returns))
|
|
.curve(d3.curveMonotoneX);
|
|
|
|
svg.append('path')
|
|
.datum(data.filter(d => d.month <= 18))
|
|
.attr('fill', 'rgba(244, 67, 54, 0.3)')
|
|
.attr('d', investmentArea);
|
|
|
|
// Returns area
|
|
const returnsArea = d3.area()
|
|
.x(d => xScale(d.month))
|
|
.y0(yScale(0))
|
|
.y1(d => yScale(d.netValue > 0 ? d.netValue : 0))
|
|
.curve(d3.curveMonotoneX);
|
|
|
|
svg.append('path')
|
|
.datum(data.filter(d => d.month >= 18))
|
|
.attr('fill', 'rgba(76, 175, 80, 0.3)')
|
|
.attr('d', returnsArea);
|
|
|
|
// Net value line
|
|
const netLine = d3.line()
|
|
.x(d => xScale(d.month))
|
|
.y(d => yScale(d.netValue))
|
|
.curve(d3.curveMonotoneX);
|
|
|
|
const netPath = svg.append('path')
|
|
.datum(data)
|
|
.attr('fill', 'none')
|
|
.attr('stroke', '#FF6B35')
|
|
.attr('stroke-width', 3)
|
|
.attr('d', netLine);
|
|
|
|
const pathLength = netPath.node().getTotalLength();
|
|
netPath
|
|
.attr('stroke-dasharray', pathLength)
|
|
.attr('stroke-dashoffset', pathLength)
|
|
.transition()
|
|
.duration(2500)
|
|
.attr('stroke-dashoffset', 0);
|
|
|
|
// Break-even point marker
|
|
const breakEvenMonth = data.find(d => d.netValue >= 0)?.month || 18;
|
|
svg.append('circle')
|
|
.attr('cx', xScale(breakEvenMonth))
|
|
.attr('cy', yScale(0))
|
|
.attr('r', 0)
|
|
.attr('fill', '#FFC107')
|
|
.attr('stroke', '#fff')
|
|
.attr('stroke-width', 2)
|
|
.transition()
|
|
.duration(500)
|
|
.delay(2500)
|
|
.attr('r', 10);
|
|
|
|
svg.append('text')
|
|
.attr('x', xScale(breakEvenMonth))
|
|
.attr('y', yScale(0) - 20)
|
|
.attr('text-anchor', 'middle')
|
|
.attr('fill', '#FFC107')
|
|
.attr('font-size', '12px')
|
|
.attr('font-weight', '600')
|
|
.attr('opacity', 0)
|
|
.text('Break-even')
|
|
.transition()
|
|
.duration(500)
|
|
.delay(2700)
|
|
.attr('opacity', 1);
|
|
|
|
// Annotations
|
|
svg.append('text')
|
|
.attr('x', xScale(6))
|
|
.attr('y', yScale(-25000))
|
|
.attr('text-anchor', 'middle')
|
|
.attr('fill', '#f44336')
|
|
.attr('font-size', '11px')
|
|
.text('Periodo de inversion');
|
|
|
|
svg.append('text')
|
|
.attr('x', xScale(30))
|
|
.attr('y', yScale(60000))
|
|
.attr('text-anchor', 'middle')
|
|
.attr('fill', '#4CAF50')
|
|
.attr('font-size', '11px')
|
|
.text('Periodo de retorno');
|
|
|
|
// Axis labels
|
|
svg.append('text')
|
|
.attr('x', width / 2)
|
|
.attr('y', height - 10)
|
|
.attr('text-anchor', 'middle')
|
|
.attr('fill', '#888')
|
|
.attr('font-size', '14px')
|
|
.text('Tiempo de Proyecto');
|
|
|
|
svg.append('text')
|
|
.attr('transform', 'rotate(-90)')
|
|
.attr('x', -height / 2)
|
|
.attr('y', 20)
|
|
.attr('text-anchor', 'middle')
|
|
.attr('fill', '#888')
|
|
.attr('font-size', '14px')
|
|
.text('Valor Neto Acumulado');
|
|
}
|
|
|
|
// Chart 4: Market Position
|
|
function renderMarketPosition() {
|
|
const container = d3.select('#market-position-chart');
|
|
if (container.empty()) return;
|
|
|
|
const width = container.node().getBoundingClientRect().width;
|
|
const height = 400;
|
|
const margin = { top: 40, right: 40, bottom: 60, left: 70 };
|
|
|
|
container.html('');
|
|
|
|
const svg = container.append('svg')
|
|
.attr('width', width)
|
|
.attr('height', height);
|
|
|
|
const data = [
|
|
{ name: 'Odoo Enterprise', price: 31, functionality: 85, users: 12000000 },
|
|
{ name: 'SAP Business One', price: 120, functionality: 92, users: 3000000 },
|
|
{ name: 'MS Dynamics 365', price: 85, functionality: 88, users: 4000000 },
|
|
{ name: 'Oracle NetSuite', price: 150, functionality: 90, users: 2500000 },
|
|
{ name: 'Sage X3', price: 100, functionality: 78, users: 1500000 },
|
|
{ name: 'Holded', price: 25, functionality: 45, users: 500000 },
|
|
{ name: 'Factorial', price: 20, functionality: 40, users: 300000 },
|
|
{ name: 'Odoo Community', price: 0, functionality: 65, users: 7000000 }
|
|
];
|
|
|
|
const xScale = d3.scaleLinear()
|
|
.domain([0, 170])
|
|
.range([margin.left, width - margin.right]);
|
|
|
|
const yScale = d3.scaleLinear()
|
|
.domain([30, 100])
|
|
.range([height - margin.bottom, margin.top]);
|
|
|
|
const sizeScale = d3.scaleSqrt()
|
|
.domain([0, d3.max(data, d => d.users)])
|
|
.range([8, 45]);
|
|
|
|
// Quadrant lines
|
|
svg.append('line')
|
|
.attr('x1', xScale(75))
|
|
.attr('x2', xScale(75))
|
|
.attr('y1', margin.top)
|
|
.attr('y2', height - margin.bottom)
|
|
.attr('stroke', '#444')
|
|
.attr('stroke-dasharray', '5,5');
|
|
|
|
svg.append('line')
|
|
.attr('x1', margin.left)
|
|
.attr('x2', width - margin.right)
|
|
.attr('y1', yScale(65))
|
|
.attr('y2', yScale(65))
|
|
.attr('stroke', '#444')
|
|
.attr('stroke-dasharray', '5,5');
|
|
|
|
// Quadrant labels
|
|
svg.append('text').attr('x', xScale(37)).attr('y', yScale(95)).attr('fill', '#666').attr('font-size', '10px').attr('text-anchor', 'middle').text('Alta Funcionalidad');
|
|
svg.append('text').attr('x', xScale(37)).attr('y', yScale(92)).attr('fill', '#666').attr('font-size', '10px').attr('text-anchor', 'middle').text('Bajo Precio');
|
|
|
|
svg.append('text').attr('x', xScale(120)).attr('y', yScale(95)).attr('fill', '#666').attr('font-size', '10px').attr('text-anchor', 'middle').text('Alta Funcionalidad');
|
|
svg.append('text').attr('x', xScale(120)).attr('y', yScale(92)).attr('fill', '#666').attr('font-size', '10px').attr('text-anchor', 'middle').text('Alto Precio');
|
|
|
|
// Grid
|
|
svg.append('g')
|
|
.attr('class', 'grid')
|
|
.attr('transform', `translate(0,${height - margin.bottom})`)
|
|
.call(d3.axisBottom(xScale).tickSize(-(height - margin.top - margin.bottom)).tickFormat(''))
|
|
.selectAll('line').attr('stroke', '#333');
|
|
|
|
svg.append('g')
|
|
.attr('class', 'grid')
|
|
.attr('transform', `translate(${margin.left},0)`)
|
|
.call(d3.axisLeft(yScale).tickSize(-(width - margin.left - margin.right)).tickFormat(''))
|
|
.selectAll('line').attr('stroke', '#333');
|
|
|
|
// Axes
|
|
svg.append('g')
|
|
.attr('transform', `translate(0,${height - margin.bottom})`)
|
|
.call(d3.axisBottom(xScale).tickFormat(d => `${d} EUR`))
|
|
.attr('color', '#888');
|
|
|
|
svg.append('g')
|
|
.attr('transform', `translate(${margin.left},0)`)
|
|
.call(d3.axisLeft(yScale).tickFormat(d => `${d}%`))
|
|
.attr('color', '#888');
|
|
|
|
// Bubbles
|
|
svg.selectAll('circle.bubble')
|
|
.data(data)
|
|
.join('circle')
|
|
.attr('class', 'bubble')
|
|
.attr('cx', d => xScale(d.price))
|
|
.attr('cy', d => yScale(d.functionality))
|
|
.attr('r', 0)
|
|
.attr('fill', d => d.name.includes('Odoo') ? '#FF6B35' : '#4CAF50')
|
|
.attr('fill-opacity', 0.7)
|
|
.attr('stroke', '#fff')
|
|
.attr('stroke-width', 2)
|
|
.style('cursor', 'pointer')
|
|
.on('mouseover', function(event, d) {
|
|
d3.select(this).attr('fill-opacity', 1).attr('stroke-width', 3);
|
|
tooltip.transition().duration(200).style('opacity', 1);
|
|
tooltip.html(`<strong>${d.name}</strong><br>Precio: ${d.price} EUR/user/mes<br>Funcionalidad: ${d.functionality}%<br>Usuarios globales: ${(d.users/1000000).toFixed(1)}M`)
|
|
.style('left', (event.pageX + 15) + 'px')
|
|
.style('top', (event.pageY - 28) + 'px');
|
|
})
|
|
.on('mouseout', function() {
|
|
d3.select(this).attr('fill-opacity', 0.7).attr('stroke-width', 2);
|
|
tooltip.transition().duration(200).style('opacity', 0);
|
|
})
|
|
.transition()
|
|
.duration(800)
|
|
.delay((d, i) => i * 100)
|
|
.ease(d3.easeElastic.amplitude(1).period(0.5))
|
|
.attr('r', d => sizeScale(d.users));
|
|
|
|
// Labels
|
|
svg.selectAll('text.label')
|
|
.data(data)
|
|
.join('text')
|
|
.attr('class', 'label')
|
|
.attr('x', d => xScale(d.price))
|
|
.attr('y', d => yScale(d.functionality) - sizeScale(d.users) - 8)
|
|
.attr('text-anchor', 'middle')
|
|
.attr('fill', '#e0e0e0')
|
|
.attr('font-size', '10px')
|
|
.attr('opacity', 0)
|
|
.text(d => d.name)
|
|
.transition()
|
|
.duration(500)
|
|
.delay((d, i) => i * 100 + 500)
|
|
.attr('opacity', 1);
|
|
|
|
// Axis labels
|
|
svg.append('text')
|
|
.attr('x', width / 2)
|
|
.attr('y', height - 10)
|
|
.attr('text-anchor', 'middle')
|
|
.attr('fill', '#888')
|
|
.attr('font-size', '14px')
|
|
.text('Precio por Usuario/Mes');
|
|
|
|
svg.append('text')
|
|
.attr('transform', 'rotate(-90)')
|
|
.attr('x', -height / 2)
|
|
.attr('y', 20)
|
|
.attr('text-anchor', 'middle')
|
|
.attr('fill', '#888')
|
|
.attr('font-size', '14px')
|
|
.text('Nivel de Funcionalidad');
|
|
}
|
|
|
|
// Initialize charts when visible
|
|
const chartObserver = new IntersectionObserver((entries) => {
|
|
entries.forEach(entry => {
|
|
if (entry.isIntersecting) {
|
|
const id = entry.target.id;
|
|
setTimeout(() => {
|
|
if (id === 'pricing-evolution-chart') renderPricingEvolution();
|
|
if (id === 'tco-comparison-chart') renderTCOComparison();
|
|
if (id === 'roi-calculator-chart') renderROICalculator();
|
|
if (id === 'market-position-chart') renderMarketPosition();
|
|
}, 100);
|
|
chartObserver.unobserve(entry.target);
|
|
}
|
|
});
|
|
}, { threshold: 0.15 });
|
|
|
|
document.querySelectorAll('.chart-container').forEach(el => chartObserver.observe(el));
|
|
|
|
// Resize handler
|
|
let resizeTimeout;
|
|
window.addEventListener('resize', () => {
|
|
clearTimeout(resizeTimeout);
|
|
resizeTimeout = setTimeout(() => {
|
|
renderPricingEvolution();
|
|
renderTCOComparison();
|
|
renderROICalculator();
|
|
renderMarketPosition();
|
|
}, 300);
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|