diff --git a/modules/turnero/api/firmar_profesional_consentimiento.php b/modules/turnero/api/firmar_profesional_consentimiento.php index 6a09abf..9b3b2af 100644 --- a/modules/turnero/api/firmar_profesional_consentimiento.php +++ b/modules/turnero/api/firmar_profesional_consentimiento.php @@ -16,6 +16,9 @@ $body = inputJson(); $turnoId = (int)($body['turno_id'] ?? 0); $formularioId = (int)($body['formulario_id'] ?? 0); $svg = $body['svg'] ?? ''; +$soloPro = !empty($body['solo_profesional']); +$datosResp = (isset($body['datos_respuestas']) && is_array($body['datos_respuestas'])) + ? json_encode($body['datos_respuestas'], JSON_UNESCAPED_UNICODE) : null; if (!$turnoId) jsonError('turno_id requerido.'); if (!$formularioId) jsonError('formulario_id requerido.'); @@ -37,12 +40,22 @@ $tc = $stmt->fetch(PDO::FETCH_ASSOC); if (!$tc) jsonError('Consentimiento no encontrado.', 404); -$stmt = $pdo->prepare( - "UPDATE turnero_consentimientos - SET firma_profesional_svg = ?, firmado_profesional_at = NOW() - WHERE turno_id = ? AND formulario_id = ?" -); -$stmt->execute([$svg, $turnoId, $formularioId]); +if ($soloPro) { + // El profesional es el firmante final: guardar datos + marcar como firmado + $pdo->prepare( + "UPDATE turnero_consentimientos + SET firma_profesional_svg = ?, firmado_profesional_at = NOW(), + estado = 'firmado', firmado_at = NOW(), + datos_respuestas = COALESCE(?, datos_respuestas) + WHERE turno_id = ? AND formulario_id = ?" + )->execute([$svg, $datosResp, $turnoId, $formularioId]); +} else { + $pdo->prepare( + "UPDATE turnero_consentimientos + SET firma_profesional_svg = ?, firmado_profesional_at = NOW() + WHERE turno_id = ? AND formulario_id = ?" + )->execute([$svg, $turnoId, $formularioId]); +} notificarSSE((int)$tc['sesion_id']); diff --git a/ver_formulario_enviado.php b/ver_formulario_enviado.php index 6f66022..4287875 100644 --- a/ver_formulario_enviado.php +++ b/ver_formulario_enviado.php @@ -189,6 +189,9 @@ $datosPrefilled = json_decode($envio['datos_prefilled'] ?? '{}', true) ?? []; $todos = array_merge($datosPrefilled, $datosCliente); $modoEditar = $modoTurnero && $envio['estado'] !== 'firmado'; $embebido = isset($_GET['embed']) && $_GET['embed'] === '1'; +// Pre-scan: formulario que solo requiere firma del profesional (sin firma paciente) +$_soloFirmaPro = !empty(array_filter($esquema, fn($c) => ($c['tipo'] ?? '') === 'firma_profesional')) + && empty(array_filter($esquema, fn($c) => ($c['tipo'] ?? '') === 'firma')); // Mapa id → label $labelMap = []; @@ -557,14 +560,19 @@ function esc2(mixed $v): string {
- - + +