feat: relacionar imagen de WhatsApp con orden médica al agendar domicilio

Al abrir el modal desde una imagen en el chat:
- guardar() crea primero la OrdenMedica via crear_desde_whatsapp.php
  y pasa el orden_id resultante a save_domicilio.php
- Enfermera::agenda() hace LEFT JOIN a lab_ordenes_medicas para traer
  local_file de la orden asociada (as orden_local_file)
- enfermero_portal._cardHTML() muestra la imagen de la orden médica
  con link para ampliar
This commit is contained in:
Lizandro Guarnizo
2026-03-12 22:14:04 -05:00
parent 12e7b411d7
commit d362598a70
3 changed files with 41 additions and 2 deletions
+5 -2
View File
@@ -106,6 +106,7 @@ class Enfermera {
d.examenes_solicitados,
d.tipo_cliente,
d.seguro_nombre,
d.orden_id,
p.id AS paciente_id,
p.nombre_completo AS paciente_nombre,
p.telefono AS paciente_telefono,
@@ -114,11 +115,13 @@ class Enfermera {
p.tipo_documento AS paciente_tipo_documento,
p.numero_documento AS paciente_numero_documento,
p.eps AS paciente_eps,
om.local_file AS orden_local_file,
a.estado AS asignacion_estado,
a.id AS asignacion_id
FROM lab_asignaciones a
JOIN lab_domicilios d ON d.id = a.domicilio_id
JOIN lab_pacientes p ON p.id = d.paciente_id
JOIN lab_domicilios d ON d.id = a.domicilio_id
JOIN lab_pacientes p ON p.id = d.paciente_id
LEFT JOIN lab_ordenes_medicas om ON om.id = d.orden_id
WHERE a.enfermera_id = ?
AND d.fecha_programada = ?
ORDER BY d.hora_programada ASC
+25
View File
@@ -7085,6 +7085,31 @@ const labDomicilio = (() => {
notas_admin: fv('labdom-notas') || null,
};
// Si la ventana se abrió desde una imagen (orden médica), crear primero
// la OrdenMedica y luego enlazarla al domicilio via orden_id
if (_localFile) {
try {
const convIdNum = (_convId && !String(_convId).startsWith('__user:'))
? parseInt(_convId) : null;
const orRes = await fetch('api/lab/crear_desde_whatsapp.php', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
paciente_id: _pacienteId,
local_file: _localFile,
media_message_id: _msgId || null,
conversation_id: convIdNum,
examenes_solicitados: datos.examenes_solicitados,
estado: 'pendiente',
}),
});
const orData = await orRes.json();
if (orData.success && orData.orden_id) {
datos.orden_id = orData.orden_id;
}
} catch (_) { /* no bloquea si falla la creación de la orden */ }
}
try {
const r = await fetch('api/lab/save_domicilio.php', {
method: 'POST',
+11
View File
@@ -412,6 +412,17 @@ const portal = {
? `<div class="small mb-2"><span class="badge bg-info text-dark"><i class="fas fa-shield-alt me-1"></i>Seguro${item.seguro_nombre ? ': ' + esc(item.seguro_nombre) : ''}</span></div>`
: ''}
<!-- Orden médica (imagen) -->
${item.orden_local_file ? `
<div class="mt-2 mb-2">
<a href="uploads/media/${esc(item.orden_local_file)}" target="_blank"
title="Ver orden médica">
<img src="uploads/media/${esc(item.orden_local_file)}"
style="max-width:100%;max-height:180px;border-radius:8px;border:1px solid #ddd;cursor:zoom-in"
alt="Orden médica #${item.orden_id}">
</a>
<div class="small text-muted mt-1"><i class="fas fa-file-medical me-1"></i>Orden #${item.orden_id}</div>
</div>` : ''}
<!-- Servicios extra registrados -->
${seSuf ? `<div class="d-flex flex-wrap gap-1 mb-2">${seSuf}</div>` : ''}