feat: dashboard turnero muestra recepción, bacteriólogo y exámenes en tabla

- Columnas añadidas: Recepción (desk + recepcionista), Lugar/Bacteriólogo, Exámenes
- Elimina columnas Lugar y Entrada que eran menos informativas
- colspan actualizado a 10

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-06-23 23:06:40 -05:00
co-authored by Claude Sonnet 4.6
parent 97a3dba249
commit 9c9acbed70
+27 -11
View File
@@ -174,16 +174,17 @@ Layout::open('Dashboard Turnero', 'fas fa-chart-bar');
<th>Código</th>
<th>Prioridad</th>
<th>Paciente</th>
<th>Lugar</th>
<th>Recepción</th>
<th>Lugar / Bacteriólogo</th>
<th>Exámenes</th>
<th>Estado</th>
<th>Espera</th>
<th>Servicio</th>
<th>Entrada</th>
<th>Serv.</th>
<th></th>
</tr>
</thead>
<tbody id="tbodyTurnos">
<tr><td colspan="8" class="empty-msg">Cargando...</td></tr>
<tr><td colspan="10" class="empty-msg">Cargando...</td></tr>
</tbody>
</table>
</div>
@@ -384,26 +385,41 @@ function renderTabla(turnos) {
tbody.innerHTML = turnos.map(t => {
const nombrePac = escHtml(t.paciente_bd || t.paciente_nombre || '—');
const docPac = t.paciente_doc ? `<div class="text-muted" style="font-size:.7rem">${escHtml(t.paciente_tipo_doc||'CC')} ${escHtml(t.paciente_doc)}</div>` : '';
const lugar = escHtml(t.lugar_nombre || '—');
const estadoCls = mapEstado[t.estado] || 'eb-finalizado';
const estadoLbl = labelEstado[t.estado] || t.estado;
const hora = t.creado_at ? new Date(t.creado_at.replace(' ', 'T')).toLocaleTimeString('es-CO', {hour:'2-digit',minute:'2-digit'}) : '—';
const espMin = t.espera_min !== null ? t.espera_min + ' m' : '—';
const srvMin = t.servicio_min !== null ? t.servicio_min + ' m' : '—';
const espMin = t.espera_min !== null ? t.espera_min + ' m' : '—';
const srvMin = t.servicio_min !== null ? t.servicio_min + ' m' : '—';
const rowId = `dash-det-${t.id}`;
// Recepción
const desk = escHtml(t.recepcion_desk_nombre || '—');
const recep = escHtml(t.atendido_recepcion_nombre || '—');
const recepCell = `<div>${desk}</div><div class="text-muted" style="font-size:.7rem">${recep}</div>`;
// Lugar + bacteriólogo
const lugar = escHtml(t.lugar_nombre || '—');
const bacterio = escHtml(t.atendido_lugar_nombre || '—');
const lugarCell = `<div>${lugar}</div><div class="text-muted" style="font-size:.7rem">${bacterio}</div>`;
// Exámenes
const examsHtml = (t.examenes && t.examenes.length)
? t.examenes.map(e => `<span class="badge" style="background:#dcfce7;color:#166534;font-size:.6rem;margin:1px">${escHtml(e.nombre||e.codigo||'')}</span>`).join('')
: '<span class="text-muted small">—</span>';
return `<tr class="row-expandible" onclick="toggleDashDetalle('${rowId}', this)">
<td><span class="fw-bold" style="color:${escHtml(t.prioridad_color || '#333')}">${escHtml(t.codigo)}</span></td>
<td><span class="estado-badge" style="background:${escHtml(t.prioridad_color+'22'||'#eee')};color:${escHtml(t.prioridad_color||'#333')}">${escHtml(t.prioridad_codigo)}</span></td>
<td>${nombrePac}${docPac}</td>
<td>${lugar}</td>
<td>${recepCell}</td>
<td>${lugarCell}</td>
<td style="max-width:120px">${examsHtml}</td>
<td><span class="estado-badge ${estadoCls}">${estadoLbl}</span></td>
<td>${espMin}</td>
<td>${srvMin}</td>
<td>${hora}</td>
<td><i class="fas fa-chevron-right" style="font-size:.65rem;color:#94a3b8;transition:transform .2s" id="ico-${t.id}"></i></td>
</tr>
<tr id="${rowId}" class="det-row" style="display:none">
<td colspan="9">
<td colspan="10">
<div class="det-inner">${renderDashDetalle(t)}</div>
</td>
</tr>`;