Registrar quién crea cada consentimiento del turnero para el pie "Enviado por"

turnero_consentimientos nunca guardó quién lo generó; el pie del documento
mostraba el nombre de quien tuviera sesión abierta al verlo, no de quien
realmente lo atendió (por eso siempre aparecía el mismo usuario). Se agrega
la columna creado_por, se llena en los 6 puntos donde se crea un registro
(recepción, envío por WhatsApp, anexar formulario extra, autocreación por
examen/lugar), y ver_formulario_enviado.php ahora prioriza ese dato real
sobre el usuario de la sesión actual. Los documentos ya firmados antes de
este cambio siguen sin ese dato y usan el fallback anterior.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-08-03 12:50:41 -05:00
co-authored by Claude Sonnet 4.6
parent aacf26168b
commit 8e1f46904c
7 changed files with 21 additions and 19 deletions
+3 -3
View File
@@ -31,10 +31,10 @@ if (!$form->fetch()) jsonError('Formulario no encontrado o inactivo.', 404);
// Crear el consentimiento con token UUID (mismo formato que create_solicitud)
$ins = $pdo->prepare(
"INSERT INTO turnero_consentimientos (turno_id, formulario_id, token, estado, datos_respuestas)
VALUES (?, ?, UUID(), 'enviado', '{}')"
"INSERT INTO turnero_consentimientos (turno_id, formulario_id, token, estado, datos_respuestas, creado_por)
VALUES (?, ?, UUID(), 'enviado', '{}', ?)"
);
$ins->execute([$turnoId, $formularioId]);
$ins->execute([$turnoId, $formularioId, adminId()]);
$newId = (int)$pdo->lastInsertId();
$token = $pdo->query("SELECT token FROM turnero_consentimientos WHERE id = $newId")->fetchColumn();
+3 -3
View File
@@ -68,10 +68,10 @@ if ($existente) {
);
$stmt = $pdo->prepare(
"INSERT INTO turnero_consentimientos (turno_id, formulario_id, token, estado)
VALUES (?, ?, ?, 'pendiente')"
"INSERT INTO turnero_consentimientos (turno_id, formulario_id, token, estado, creado_por)
VALUES (?, ?, ?, 'pendiente', ?)"
);
$stmt->execute([$turnoId, $formularioId, $token]);
$stmt->execute([$turnoId, $formularioId, $token, adminId()]);
}
$url = BASE_URL . 'ver_formulario_enviado.php?token=' . urlencode($token);
+3 -3
View File
@@ -187,15 +187,15 @@ try {
$consentimientosRequeridos = $stmt->fetchAll(PDO::FETCH_ASSOC);
$stmtCreateConsent = $pdo->prepare(
"INSERT IGNORE INTO turnero_consentimientos (turno_id, formulario_id, token, estado)
VALUES (?, ?, UUID(), 'pendiente')"
"INSERT IGNORE INTO turnero_consentimientos (turno_id, formulario_id, token, estado, creado_por)
VALUES (?, ?, UUID(), 'pendiente', ?)"
);
$stmtRead = $pdo->prepare(
"SELECT id, token, estado FROM turnero_consentimientos
WHERE turno_id = ? AND formulario_id = ?"
);
foreach ($consentimientosRequeridos as &$c) {
$stmtCreateConsent->execute([$turnoId, $c['formulario_id']]);
$stmtCreateConsent->execute([$turnoId, $c['formulario_id'], adminId()]);
$stmtRead->execute([$turnoId, $c['formulario_id']]);
$row = $stmtRead->fetch(PDO::FETCH_ASSOC);
$c['id'] = $row['id'] ?? null;
+2 -2
View File
@@ -46,7 +46,7 @@ $token = sprintf(
mt_rand(0,0xffff), mt_rand(0,0xffff), mt_rand(0,0xffff)
);
$pdo->prepare(
"INSERT IGNORE INTO turnero_consentimientos (turno_id, formulario_id, token, estado) VALUES (?, ?, ?, 'pendiente')"
)->execute([$turnoId, $formularioId, $token]);
"INSERT IGNORE INTO turnero_consentimientos (turno_id, formulario_id, token, estado, creado_por) VALUES (?, ?, ?, 'pendiente', ?)"
)->execute([$turnoId, $formularioId, $token, adminId()]);
jsonOk(['token' => $token, 'nuevo' => true]);
+3 -3
View File
@@ -257,8 +257,8 @@ if ($incluirSolicitud) {
$existFormIds = array_map('intval', array_column($consentimientos, 'formulario_id'));
$stmtIns = $pdo->prepare(
"INSERT IGNORE INTO turnero_consentimientos
(turno_id, formulario_id, token, estado)
VALUES (?, ?, ?, 'pendiente')"
(turno_id, formulario_id, token, estado, creado_por)
VALUES (?, ?, ?, 'pendiente', ?)"
);
$creados = 0;
foreach ($requeridos as $r) {
@@ -271,7 +271,7 @@ if ($incluirSolicitud) {
mt_rand(0,0x3fff)|0x8000,
mt_rand(0,0xffff), mt_rand(0,0xffff), mt_rand(0,0xffff)
);
$stmtIns->execute([$turnoId, (int)$r['formulario_id'], $token]);
$stmtIns->execute([$turnoId, (int)$r['formulario_id'], $token, adminId()]);
$creados++;
}
}
+3 -3
View File
@@ -103,8 +103,8 @@ try {
WHERE turno_id = ? AND formulario_id = ?"
);
$stmtInsertar = $pdo->prepare(
"INSERT INTO turnero_consentimientos (turno_id, formulario_id, token, estado)
VALUES (?, ?, ?, 'pendiente')"
"INSERT INTO turnero_consentimientos (turno_id, formulario_id, token, estado, creado_por)
VALUES (?, ?, ?, 'pendiente', ?)"
);
$stmtActualizar = $pdo->prepare(
"UPDATE turnero_consentimientos
@@ -148,7 +148,7 @@ try {
}
} else {
$token = generarUuid();
$stmtInsertar->execute([$turnoId, $formularioId, $token]);
$stmtInsertar->execute([$turnoId, $formularioId, $token, adminId()]);
$consentId = (int) $pdo->lastInsertId();
}
+4 -2
View File
@@ -41,13 +41,15 @@ if ($modoTurnero) {
ts.numero_orden,
med.nombres AS medico_nombres, med.apellidos AS medico_apellidos,
med.cod_especialidad AS medico_especialidad,
med.codigo AS medico_codigo, med.docidmedico AS medico_docid
med.codigo AS medico_codigo, med.docidmedico AS medico_docid,
cu.full_name AS creador_nombre
FROM turnero_consentimientos tc
JOIN lab_formularios f ON f.id = tc.formulario_id
JOIN turnero_turnos t ON t.id = tc.turno_id
LEFT JOIN turnero_solicitudes ts ON ts.turno_id = tc.turno_id
LEFT JOIN lab_pacientes p ON p.id = COALESCE(ts.paciente_id, t.paciente_id)
LEFT JOIN medicos med ON med.id = ts.medico_id
LEFT JOIN admin_users cu ON cu.id = tc.creado_por
WHERE tc.token = ?",
[$tokenTurnero]
);
@@ -141,7 +143,7 @@ if ($modoTurnero) {
'fecha_nacimiento' => $tcRow['fecha_nacimiento'],
'paciente_telefono' => $tcRow['paciente_telefono'],
'eps' => $tcRow['eps'],
'enviado_por_nombre'=> $_SESSION['admin_user']['full_name'] ?? $_SESSION['admin_user']['username'] ?? 'Turnero',
'enviado_por_nombre'=> $tcRow['creador_nombre'] ?? ($_SESSION['admin_user']['full_name'] ?? $_SESSION['admin_user']['username'] ?? 'Turnero'),
'enviado_por_email' => $_SESSION['admin_user']['email'] ?? null,
'firma_profesional_svg' => $tcRow['firma_profesional_svg'] ?? null,
'datos_cliente' => $tcRow['datos_respuestas'] ?: '{}',