Dashboard Financiero

Giunti Chile AG - Ejercicio 2025
Ingresos Real 2025
$2.871M
-12,29% vs Budget
Utilidad Neta Reportada
$16M
-94,79% vs 2024
Utilidad Operativa Histórica
$343M
+9,6% vs 2024
Ajustes IFRS
$327M
No recurrente

I. ANÁLISIS REAL 2025 vs PRESUPUESTO 2025

1. Ingresos Totales: Real vs Presupuesto
2. Ventas por Línea de Negocio (Millones CLP)
Tabla Comparativa Real 2025 vs Presupuesto 2025
Concepto Real 2025 (M CLP) Presupuesto 2025 (M CLP) Variación (M CLP) Variación %
Ingresos Totales $2.871 $3.273 -$402 -12,29%
Ventas Productos $2.322 $2.771 -$449 -16,20%
Ventas Servicios $535 $437 +$98 +22,34%
Costos Productos -$887 -$955 +$68 -7,15%
Costos Servicios -$139 -$107 -$32 +29,58%
Margen Bruto Productos 61,82% 65,54% -3,72 p.p. -
Margen Bruto Servicios 73,96% 75,41% -1,46 p.p. -
Utilidad Neta Reportada $16 $558 -$542 -97,07%
3. Márgenes Brutos por Línea (%)
4. Composición de Ajustes IFRS ($327M)

II. ANÁLISIS REAL 2025 vs REAL 2024

5. Evolución de Ingresos 2024-2025
6. Crecimiento por Línea de Negocio (%)
Tabla Comparativa Real 2025 vs Real 2024
Concepto Real 2025 (M CLP) Real 2024 (M CLP) Variación (M CLP) Variación %
Ingresos Totales $2.871 $2.716 +$155 +5,72%
Ventas Productos $2.322 $2.294 +$29 +1,26%
Ventas Servicios $535 $344 +$190 +55,27%
Costos Productos -$887 -$679 -$208 +30,67%
Costos Servicios -$139 -$67 -$72 +108,22%
Margen Bruto Productos 61,82% 70,41% -8,59 p.p. -
Margen Bruto Servicios 73,96% 80,58% -6,62 p.p. -
Utilidad Neta Reportada $16 $313 -$297 -94,79%
Utilidad Operativa Histórica $343 $313 +$30 +9,6%
7. Explosión de Costos 2024-2025 (%)
8. Deterioro de Márgenes Brutos
9. Transformación del Mix de Ingresos
10. Utilidad Neta: Reportada vs Operativa Histórica
// Paleta de colores refinada const colors = { primary: { main: '#1e40af', light: '#3b82f6', gradient: (ctx) => { const gradient = ctx.createLinearGradient(0, 0, 0, 400); gradient.addColorStop(0, 'rgba(30, 64, 175, 0.8)'); gradient.addColorStop(1, 'rgba(59, 130, 246, 0.4)'); return gradient; } }, accent: { main: '#dc2626', light: '#ef4444', gradient: (ctx) => { const gradient = ctx.createLinearGradient(0, 0, 0, 400); gradient.addColorStop(0, 'rgba(220, 38, 38, 0.8)'); gradient.addColorStop(1, 'rgba(239, 68, 68, 0.4)'); return gradient; } }, success: { main: '#059669', light: '#10b981', gradient: (ctx) => { const gradient = ctx.createLinearGradient(0, 0, 0, 400); gradient.addColorStop(0, 'rgba(5, 150, 105, 0.8)'); gradient.addColorStop(1, 'rgba(16, 185, 129, 0.4)'); return gradient; } }, warning: { main: '#d97706', light: '#f59e0b', gradient: (ctx) => { const gradient = ctx.createLinearGradient(0, 0, 0, 400); gradient.addColorStop(0, 'rgba(217, 119, 6, 0.8)'); gradient.addColorStop(1, 'rgba(245, 158, 11, 0.4)'); return gradient; } }, secondary: { main: '#7c3aed', light: '#a78bfa' } }; // Gráfico 1: Comparación Ingresos Totales new Chart(document.getElementById('chart1'), { type: 'bar', data: { labels: ['Real 2025', 'Presupuesto 2025'], datasets: [{ label: 'Ingresos (Millones CLP)', data: [2871, 3273], backgroundColor: [ colors.accent.main, colors.primary.main ], borderWidth: 0, borderRadius: 12, barThickness: 80 }] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { display: false }, tooltip: { backgroundColor: 'rgba(15, 23, 42, 0.95)', padding: 16, titleFont: { size: 14, weight: '700' }, bodyFont: { size: 13 }, borderColor: 'rgba(255, 255, 255, 0.1)', borderWidth: 1, displayColors: false, callbacks: { label: function(context) { return '$' + context.parsed.y.toLocaleString() + ' M'; } } } }, scales: { y: { beginAtZero: true, border: { display: false }, grid: { color: '#f1f5f9', lineWidth: 1 }, ticks: { font: { size: 12, weight: '600' }, color: '#64748b', callback: function(value) { return '$' + value.toLocaleString(); }, padding: 8 } }, x: { border: { display: false }, grid: { display: false }, ticks: { font: { size: 13, weight: '600' }, color: '#1e293b', padding: 8 } } } } }); // Gráfico 2: Ventas por Línea new Chart(document.getElementById('chart2'), { type: 'bar', data: { labels: ['Productos', 'Servicios'], datasets: [ { label: 'Real 2025', data: [2322, 535], backgroundColor: colors.accent.main, borderRadius: 12, barThickness: 50 }, { label: 'Presupuesto 2025', data: [2771, 437], backgroundColor: colors.primary.main, borderRadius: 12, barThickness: 50 } ] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { position: 'top', labels: { font: { size: 13, weight: '700' }, color: '#1e293b', padding: 15, usePointStyle: true, pointStyle: 'circle' } }, tooltip: { backgroundColor: 'rgba(15, 23, 42, 0.95)', padding: 16, titleFont: { size: 14, weight: '700' }, bodyFont: { size: 13 }, borderColor: 'rgba(255, 255, 255, 0.1)', borderWidth: 1, callbacks: { label: function(context) { return context.dataset.label + ': $' + context.parsed.y.toLocaleString() + ' M'; } } } }, scales: { y: { beginAtZero: true, border: { display: false }, grid: { color: '#f1f5f9', lineWidth: 1 }, ticks: { font: { size: 12, weight: '600' }, color: '#64748b', callback: function(value) { return '$' + value.toLocaleString(); }, padding: 8 } }, x: { border: { display: false }, grid: { display: false }, ticks: { font: { size: 13, weight: '600' }, color: '#1e293b', padding: 8 } } } } }); // Gráfico 3: Márgenes Brutos new Chart(document.getElementById('chart3'), { type: 'bar', data: { labels: ['Productos', 'Servicios'], datasets: [ { label: 'Real 2025', data: [61.82, 73.96], backgroundColor: colors.accent.main, borderRadius: 12, barThickness: 50 }, { label: 'Presupuesto 2025', data: [65.54, 75.41], backgroundColor: colors.primary.main, borderRadius: 12, barThickness: 50 } ] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { position: 'top', labels: { font: { size: 13, weight: '700' }, color: '#1e293b', padding: 15, usePointStyle: true, pointStyle: 'circle' } }, tooltip: { backgroundColor: 'rgba(15, 23, 42, 0.95)', padding: 16, titleFont: { size: 14, weight: '700' }, bodyFont: { size: 13 }, borderColor: 'rgba(255, 255, 255, 0.1)', borderWidth: 1, callbacks: { label: function(context) { return context.dataset.label + ': ' + context.parsed.y.toFixed(2) + '%'; } } } }, scales: { y: { beginAtZero: true, max: 100, border: { display: false }, grid: { color: '#f1f5f9', lineWidth: 1 }, ticks: { font: { size: 12, weight: '600' }, color: '#64748b', callback: function(value) { return value + '%'; }, padding: 8 } }, x: { border: { display: false }, grid: { display: false }, ticks: { font: { size: 13, weight: '600' }, color: '#1e293b', padding: 8 } } } } }); // Gráfico 4: Ajustes IFRS new Chart(document.getElementById('chart4'), { type: 'doughnut', data: { labels: ['Castigo Existencias ($147M)', 'Despidos Extraordinarios ($91M)', 'Provisión Impuesto ($54M)', 'Provisión Vacaciones ($35M)'], datasets: [{ data: [147, 91, 54, 35], backgroundColor: [ colors.accent.main, colors.warning.main, colors.primary.main, colors.success.main ], borderWidth: 4, borderColor: '#ffffff', hoverBorderWidth: 6, hoverOffset: 10 }] }, options: { responsive: true, maintainAspectRatio: false, cutout: '65%', plugins: { legend: { position: 'bottom', labels: { font: { size: 12, weight: '600' }, color: '#1e293b', padding: 15, usePointStyle: true, pointStyle: 'circle' } }, tooltip: { backgroundColor: 'rgba(15, 23, 42, 0.95)', padding: 16, titleFont: { size: 14, weight: '700' }, bodyFont: { size: 13 }, borderColor: 'rgba(255, 255, 255, 0.1)', borderWidth: 1, callbacks: { label: function(context) { const label = context.label.split('(')[0].trim(); return label + ': $' + context.parsed + 'M (' + ((context.parsed/327)*100).toFixed(1) + '%)'; } } } } } }); // Gráfico 5: Evolución Ingresos new Chart(document.getElementById('chart5'), { type: 'line', data: { labels: ['Real 2024', 'Real 2025'], datasets: [ { label: 'Ingresos Totales', data: [2716, 2871], borderColor: colors.primary.main, backgroundColor: 'rgba(30, 64, 175, 0.1)', borderWidth: 4, tension: 0.4, fill: true, pointRadius: 8, pointBackgroundColor: colors.primary.main, pointBorderColor: '#ffffff', pointBorderWidth: 3, pointHoverRadius: 10 }, { label: 'Productos', data: [2294, 2322], borderColor: colors.accent.main, backgroundColor: 'rgba(220, 38, 38, 0.1)', borderWidth: 4, tension: 0.4, fill: true, pointRadius: 8, pointBackgroundColor: colors.accent.main, pointBorderColor: '#ffffff', pointBorderWidth: 3, pointHoverRadius: 10 }, { label: 'Servicios', data: [344, 535], borderColor: colors.success.main, backgroundColor: 'rgba(5, 150, 105, 0.1)', borderWidth: 4, tension: 0.4, fill: true, pointRadius: 8, pointBackgroundColor: colors.success.main, pointBorderColor: '#ffffff', pointBorderWidth: 3, pointHoverRadius: 10 } ] }, options: { responsive: true, maintainAspectRatio: false, interaction: { mode: 'index', intersect: false }, plugins: { legend: { position: 'top', labels: { font: { size: 13, weight: '700' }, color: '#1e293b', padding: 15, usePointStyle: true, pointStyle: 'circle' } }, tooltip: { backgroundColor: 'rgba(15, 23, 42, 0.95)', padding: 16, titleFont: { size: 14, weight: '700' }, bodyFont: { size: 13 }, borderColor: 'rgba(255, 255, 255, 0.1)', borderWidth: 1, callbacks: { label: function(context) { return context.dataset.label + ': $' + context.parsed.y.toLocaleString() + ' M'; } } } }, scales: { y: { beginAtZero: true, border: { display: false }, grid: { color: '#f1f5f9', lineWidth: 1 }, ticks: { font: { size: 12, weight: '600' }, color: '#64748b', callback: function(value) { return '$' + value.toLocaleString(); }, padding: 8 } }, x: { border: { display: false }, grid: { display: false }, ticks: { font: { size: 13, weight: '600' }, color: '#1e293b', padding: 8 } } } } }); // Gráfico 6: Crecimiento por Línea new Chart(document.getElementById('chart6'), { type: 'bar', data: { labels: ['Ingresos Totales', 'Productos', 'Servicios'], datasets: [{ label: 'Crecimiento %', data: [5.72, 1.26, 55.27], backgroundColor: [ colors.primary.main, colors.warning.main, colors.success.main ], borderRadius: 12, barThickness: 50 }] }, options: { responsive: true, maintainAspectRatio: false, indexAxis: 'y', plugins: { legend: { display: false }, tooltip: { backgroundColor: 'rgba(15, 23, 42, 0.95)', padding: 16, titleFont: { size: 14, weight: '700' }, bodyFont: { size: 13 }, borderColor: 'rgba(255, 255, 255, 0.1)', borderWidth: 1, displayColors: false, callbacks: { label: function(context) { return '+' + context.parsed.x.toFixed(2) + '%'; } } } }, scales: { x: { beginAtZero: true, border: { display: false }, grid: { color: '#f1f5f9', lineWidth: 1 }, ticks: { font: { size: 12, weight: '600' }, color: '#64748b', callback: function(value) { return '+' + value + '%'; }, padding: 8 } }, y: { border: { display: false }, grid: { display: false }, ticks: { font: { size: 13, weight: '600' }, color: '#1e293b', padding: 8 } } } } }); // Gráfico 7: Explosión de Costos new Chart(document.getElementById('chart7'), { type: 'bar', data: { labels: ['Costos Productos', 'Costos Servicios'], datasets: [{ label: 'Incremento de Costos %', data: [30.67, 108.22], backgroundColor: [ colors.accent.main, '#991b1b' ], borderRadius: 12, barThickness: 80 }] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { display: false }, tooltip: { backgroundColor: 'rgba(15, 23, 42, 0.95)', padding: 16, titleFont: { size: 14, weight: '700' }, bodyFont: { size: 13 }, borderColor: 'rgba(255, 255, 255, 0.1)', borderWidth: 1, displayColors: false, callbacks: { label: function(context) { return '+' + context.parsed.y.toFixed(2) + '%'; } } } }, scales: { y: { beginAtZero: true, border: { display: false }, grid: { color: '#f1f5f9', lineWidth: 1 }, ticks: { font: { size: 12, weight: '600' }, color: '#64748b', callback: function(value) { return '+' + value + '%'; }, padding: 8 } }, x: { border: { display: false }, grid: { display: false }, ticks: { font: { size: 13, weight: '600' }, color: '#1e293b', padding: 8 } } } } }); // Gráfico 8: Deterioro Márgenes new Chart(document.getElementById('chart8'), { type: 'bar', data: { labels: ['Productos', 'Servicios'], datasets: [ { label: 'Real 2024', data: [70.41, 80.58], backgroundColor: colors.primary.main, borderRadius: 12, barThickness: 50 }, { label: 'Real 2025', data: [61.82, 73.96], backgroundColor: colors.accent.main, borderRadius: 12, barThickness: 50 } ] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { position: 'top', labels: { font: { size: 13, weight: '700' }, color: '#1e293b', padding: 15, usePointStyle: true, pointStyle: 'circle' } }, tooltip: { backgroundColor: 'rgba(15, 23, 42, 0.95)', padding: 16, titleFont: { size: 14, weight: '700' }, bodyFont: { size: 13 }, borderColor: 'rgba(255, 255, 255, 0.1)', borderWidth: 1, callbacks: { label: function(context) { return context.dataset.label + ': ' + context.parsed.y.toFixed(2) + '%'; } } } }, scales: { y: { beginAtZero: true, max: 100, border: { display: false }, grid: { color: '#f1f5f9', lineWidth: 1 }, ticks: { font: { size: 12, weight: '600' }, color: '#64748b', callback: function(value) { return value + '%'; }, padding: 8 } }, x: { border: { display: false }, grid: { display: false }, ticks: { font: { size: 13, weight: '600' }, color: '#1e293b', padding: 8 } } } } }); // Gráfico 9: Mix de Ingresos new Chart(document.getElementById('chart9'), { type: 'bar', data: { labels: ['Real 2024', 'Real 2025'], datasets: [ { label: 'Productos', data: [84.4, 80.9], backgroundColor: colors.primary.main, borderRadius: { topLeft: 12, topRight: 12 } }, { label: 'Servicios', data: [12.7, 18.6], backgroundColor: colors.success.main, borderRadius: 0 }, { label: 'Otros', data: [2.9, 0.5], backgroundColor: '#64748b', borderRadius: { bottomLeft: 12, bottomRight: 12 } } ] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { position: 'top', labels: { font: { size: 13, weight: '700' }, color: '#1e293b', padding: 15, usePointStyle: true, pointStyle: 'circle' } }, tooltip: { backgroundColor: 'rgba(15, 23, 42, 0.95)', padding: 16, titleFont: { size: 14, weight: '700' }, bodyFont: { size: 13 }, borderColor: 'rgba(255, 255, 255, 0.1)', borderWidth: 1, callbacks: { label: function(context) { return context.dataset.label + ': ' + context.parsed.y.toFixed(1) + '%'; } } } }, scales: { x: { stacked: true, border: { display: false }, grid: { display: false }, ticks: { font: { size: 13, weight: '600' }, color: '#1e293b', padding: 8 } }, y: { stacked: true, beginAtZero: true, max: 100, border: { display: false }, grid: { color: '#f1f5f9', lineWidth: 1 }, ticks: { font: { size: 12, weight: '600' }, color: '#64748b', callback: function(value) { return value + '%'; }, padding: 8 } } } } }); // Gráfico 10: Utilidad Operativa Histórica new Chart(document.getElementById('chart10'), { type: 'bar', data: { labels: ['Real 2024', 'Real 2025\nReportada IFRS', 'Real 2025\nBase Histórica'], datasets: [{ label: 'Utilidad Neta (Millones CLP)', data: [313, 16, 343], backgroundColor: [ colors.primary.main, colors.accent.main, colors.success.main ], borderRadius: 12, barThickness: 80 }] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { display: false }, tooltip: { backgroundColor: 'rgba(15, 23, 42, 0.95)', padding: 16, titleFont: { size: 14, weight: '700' }, bodyFont: { size: 13 }, borderColor: 'rgba(255, 255, 255, 0.1)', borderWidth: 1, displayColors: false, callbacks: { label: function(context) { return '$' + context.parsed.y.toLocaleString() + ' M'; } } } }, scales: { y: { beginAtZero: true, border: { display: false }, grid: { color: '#f1f5f9', lineWidth: 1 }, ticks: { font: { size: 12, weight: '600' }, color: '#64748b', callback: function(value) { return '$' + value.toLocaleString(); }, padding: 8 } }, x: { border: { display: false }, grid: { display: false }, ticks: { font: { size: 12, weight: '600' }, color: '#1e293b', padding: 8 } } } } });