Facturación del día: finalizados vs en proceso, en vez de extrapolación lineal
La proyección estimaba el cierre del día multiplicando el ritmo promedio por
las horas que faltaban hasta un cierre fijo a las 17:00. Eso sobreestimaba
(el laboratorio concentra las tomas en la mañana por el ayuno), dependía de
una hora de cierre escrita a mano, y en fechas pasadas usaba date('G') —la
hora actual real— así que proyectaba facturación futura sobre días ya
cerrados.
Ahora son dos cifras concretas, sin estimar: Facturado = turnos finalizados;
En proceso = turnos aún activos, cuyo total_cobrado ya está registrado pero
no han cerrado. Ausentes y cancelados quedan fuera de ambos. La gráfica por
hora usa la misma separación.
Hoy: $22.779.145 en 92 finalizados + $667.000 en 2 en proceso (antes
proyectaba $28.740.490).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
d448ccc707
commit
d79d33db36
@@ -256,7 +256,7 @@ try {
|
||||
<!-- Proyección de ventas -->
|
||||
<div class="section-card" id="sectionProyeccion" style="display:none">
|
||||
<div class="d-flex align-items-center justify-content-between mb-2">
|
||||
<div class="section-title mb-0"><i class="fas fa-chart-line me-1"></i>Facturación y proyección del día</div>
|
||||
<div class="section-title mb-0"><i class="fas fa-chart-line me-1"></i>Facturación del día</div>
|
||||
<span id="proyeccionResumen" class="small text-muted"></span>
|
||||
</div>
|
||||
<canvas id="chartProyeccion" height="90"></canvas>
|
||||
@@ -939,7 +939,9 @@ async function cargarProyeccion(fecha) {
|
||||
sec.style.display = '';
|
||||
const fmt = v => v == null ? null : '$' + Intl.NumberFormat('es-CO').format(v);
|
||||
document.getElementById('proyeccionResumen').textContent =
|
||||
`Real: ${fmt(d.total_real)} · Proyectado: ${fmt(d.total_proyectado)}`;
|
||||
`Facturado: ${fmt(d.total_real)} (${d.turnos_finalizados} finalizados)`
|
||||
+ ` · En proceso: ${fmt(d.total_en_proceso)} (${d.turnos_en_proceso})`
|
||||
+ ` · Total estimado: ${fmt(d.total_proyectado)}`;
|
||||
const ctx = document.getElementById('chartProyeccion').getContext('2d');
|
||||
if (_chartProy) _chartProy.destroy();
|
||||
_chartProy = new Chart(ctx, {
|
||||
@@ -954,11 +956,10 @@ async function cargarProyeccion(fecha) {
|
||||
borderRadius: 6,
|
||||
},
|
||||
{
|
||||
label: 'Proyectado',
|
||||
label: 'En proceso',
|
||||
data: d.proyectado,
|
||||
backgroundColor: 'rgba(2,136,209,.3)',
|
||||
backgroundColor: 'rgba(245,158,11,.55)',
|
||||
borderRadius: 6,
|
||||
borderDash: [4,4],
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user