From 922b129094496606b6351c6c86000850dd5b86c7 Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Tue, 17 Mar 2026 15:44:03 -0500 Subject: [PATCH] =?UTF-8?q?form=5Fcliente:=20linked=20vac=C3=ADo=20editabl?= =?UTF-8?q?e=20+=20firma=5Fprofesional=20bloqueada=20para=20paciente?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- form_cliente.php | 36 +++++++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/form_cliente.php b/form_cliente.php index 0b0c088..02f89a1 100644 --- a/form_cliente.php +++ b/form_cliente.php @@ -509,9 +509,11 @@ function renderCampos(esquema, prefilled) { } const isLinked = c.tipo === 'linked'; - const isReadOnly = isLinked; - const linkedNote = isLinked - ? 'Campo autocompletado' : ''; + // Linked con valor → solo lectura. Linked sin valor → editable (el paciente puede completarlo) + const isReadOnly = isLinked && !!val; + const linkedNote = isLinked && val + ? 'Campo autocompletado' + : (isLinked ? 'Por favor completa este campo' : ''); const lbl = ``; @@ -584,6 +586,18 @@ function renderFirmaInline(fid, modos, label, required, isPro) { const lbl = ``; + + // Firma profesional: el paciente NO puede firmar — se muestra solo como aviso + if (isPro) { + return `

${lbl} +
+ + Uso exclusivo del profesional. + Esta firma será completada por el profesional de salud encargado. +
+
`; + } + let html = `

${lbl}`; // Tabs cuando ambos modos están activos @@ -928,8 +942,10 @@ const formCliente = { } if (hasInlineFirma) { requestAnimationFrame(() => requestAnimationFrame(() => { + // Solo inicializar el canvas para firma del paciente + // firma_profesional se muestra bloqueada, sin canvas form.esquema_decoded.forEach(c => { - if (c.tipo === 'firma' || c.tipo === 'firma_profesional') firmaWidgetInit(c.id); + if (c.tipo === 'firma') firmaWidgetInit(c.id); }); })); } @@ -942,7 +958,13 @@ const formCliente = { campos.forEach(c => { if (c.tipo === 'separador' || c.tipo === 'firma' || c.tipo === 'firma_profesional' || c.tipo === 'parrafo') return; - if (c.tipo === 'linked') { return; } // linked viene del prefilled + // linked: si tenía valor pre-llenado se ignora; si estaba vacío y el paciente lo llenó, recogerlo + if (c.tipo === 'linked') { + const inp = form.querySelector(`[name="${c.id}"]`); + const v = inp ? inp.value.trim() : ''; + if (v) datos[c.id] = v; + return; + } // parrafo_inline: recolectar solo los inputs editables (los que el usuario llenó) if (c.tipo === 'parrafo_inline') { @@ -992,9 +1014,9 @@ const formCliente = { $('firma-container').scrollIntoView({block:'center', behavior:'smooth'}); return 'La firma es obligatoria en este formulario.'; } - // Validar firmas inline requeridas + // Validar firmas inline requeridas (solo tipo 'firma' del paciente) for (const c of campos) { - if (!c.required || (c.tipo !== 'firma' && c.tipo !== 'firma_profesional')) continue; + if (!c.required || c.tipo !== 'firma') continue; if (!firmaWidgetObtenerSVG(c.id) && !firmaWidgetObtenerFoto(c.id)) { const el = document.getElementById('fw-' + c.id); if (el) el.scrollIntoView({ block: 'center', behavior: 'smooth' });