Corregir la ficha del paciente desde el propio formulario

El acceso quedaba solo en la tarjeta del paciente de la estación: al ver un dato
mal mientras se llenaba el formulario había que cerrarlo, buscar el botón y
volver a abrirlo. Ahora los datos del paciente dentro del formulario llevan un
lápiz que abre el mismo modal, ya en modo edición, sin cerrar lo que se está
llenando.

El formulario va embebido, así que no puede abrir el modal por su cuenta: le
avisa al contenedor por el mismo mecanismo que ya usa para informar una firma.
El modal queda por encima del formulario (z-index 9500 contra 9000).

De paso se corrige un error del commit anterior: el refresco tras guardar
buscaba el iframe con un selector equivocado —el modal es modal-consentimiento,
no modal-consent—, así que el formulario nunca tomaba el dato corregido sin
recargar a mano. Ahora se recargan los dos iframes posibles por su id real.

El lápiz aparece una sola vez, en el primer campo vinculado, y no se imprime.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-08-11 09:55:54 -05:00
co-authored by Claude Opus 5
parent a6bf35cb58
commit c00faa2b06
2 changed files with 30 additions and 2 deletions
+14 -2
View File
@@ -1999,6 +1999,14 @@ function _mpParentCancelCd() {
}
window.addEventListener('message', function(e) {
// El formulario embebido pide corregir la ficha del paciente: se abre el
// modal directamente en modo edición, sin cerrar el formulario.
if (e.data && e.data.type === 'corregirPaciente') {
if (!_pacienteActivo) return;
abrirModalPaciente();
mpacEditar(true);
return;
}
if (e.data && e.data.type === 'tomaProgresivaIniciada') {
_tomaProgresivaActiva = true;
if ('Notification' in window && Notification.permission === 'default') Notification.requestPermission();
@@ -2557,8 +2565,12 @@ async function mpacGuardarFicha() {
mpacEditar(false);
abrirModalPaciente();
if (turnoActivo?.id) actualizarConsentimientos(turnoActivo.id);
const marco = document.querySelector('#modal-consent iframe');
if (marco && marco.src) marco.src = marco.src;
// Recargar el formulario abierto para que sus campos vinculados
// tomen el dato corregido. Puede estar en el modal o embebido.
['modal-consent-iframe', 'form-embebido-iframe'].forEach(function (id) {
const marco = document.getElementById(id);
if (marco && marco.src) marco.src = marco.src;
});
}, 700);
} catch (_) {
msg.className = 'small mb-2 text-danger';
+16
View File
@@ -696,6 +696,9 @@ function _addExamWizardHtml(string $cid): string {
.campo-linked { display: flex; gap: 16px; padding: 6px 0;
border-bottom: 1px solid #f0f0f0; }
.campo-linked-label { flex: 0 0 38%; font-size: 12px; color: #6c757d; }
.lnk-corregir { background:none; border:none; color:#94a3b8; cursor:pointer;
padding:0 4px; font-size:11px; flex-shrink:0; }
.lnk-corregir:hover { color:#1565c0; }
.campo-linked-valor { flex: 1; font-size: 13px; font-weight: 600;
color: #1565c0; }
@@ -1023,6 +1026,7 @@ function _addExamWizardHtml(string $cid): string {
$_hayDatosPerCampoSvg = !empty(array_filter(array_keys($datosCliente ?? []), fn($k) => str_ends_with($k, '_svg')));
// Rastrear si ya se renderizó la firma inline (para no duplicarla al pie)
$_lnkBtnPuesto = false; // el lápiz de corregir va una sola vez
$_renderedFirmaProfesional = false;
$_renderedFirmaPaciente = false;
$_esquemaTieneFirmaPaciente = false;
@@ -1283,6 +1287,12 @@ function _addExamWizardHtml(string $cid): string {
<div class="campo-linked" data-campo-id="<?= esc2($cid) ?>">
<div class="campo-linked-label"><?= $label ?></div>
<div class="campo-linked-valor"><?= esc2($lval) ?></div>
<?php if ($modoTurnero && $embebido && $modoEditar && !$_lnkBtnPuesto): $_lnkBtnPuesto = true; ?>
<button type="button" class="lnk-corregir no-print" onclick="pedirCorregirPaciente()"
title="Corregir los datos del paciente">
<i class="fas fa-pen"></i>
</button>
<?php endif; ?>
</div>
<?php endif; continue; endif; // linked
if ($tipo === 'textarea'):
@@ -2257,6 +2267,12 @@ document.addEventListener('DOMContentLoaded', function() {
}, 350);
});
<?php endif; ?>
/* El formulario va embebido en la estación: no puede abrir el modal de
corrección por su cuenta, le pide al contenedor que lo haga. */
function pedirCorregirPaciente() {
try { window.parent.postMessage({ type: 'corregirPaciente' }, '*'); } catch (e) {}
}
window._fpwPreFirma = <?= json_encode($firmaProfPreguardada) ?>;
window._profNombre = <?= json_encode($profNombre) ?>;
window._profDocumento = <?= json_encode($profDocumento) ?>;