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' });