Agrega medico_nombre al __paciente prefilled de crear_envio_presencial.php haciendo JOIN con medicos vía turnero_solicitudes.medico_id, de modo que el campo linked 'Médico solicitante' del formulario id=15 (tomas prolongadas) se auto-cargue con el médico registrado en recepción. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
104 lines
4.2 KiB
PHP
104 lines
4.2 KiB
PHP
<?php
|
|
/**
|
|
* POST /modules/turnero/api/crear_envio_presencial.php
|
|
*
|
|
* Crea (o recupera) un registro lab_form_envios vinculado a un turnero_consentimientos
|
|
* para que el paciente pueda firmar presencialmente via form_cliente.php?t=TOKEN.
|
|
*
|
|
* Body JSON:
|
|
* consent_token string UUID del turnero_consentimientos (requerido)
|
|
*/
|
|
|
|
require_once __DIR__ . '/_helpers.php';
|
|
requireMethod('POST');
|
|
|
|
$datos = inputJson();
|
|
$consentToken = trim($datos['consent_token'] ?? '');
|
|
|
|
if (!preg_match('/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i', $consentToken)) {
|
|
jsonError('consent_token inválido.');
|
|
}
|
|
|
|
$pdo = db();
|
|
|
|
// ── 1. Cargar el consentimiento con datos del turno y paciente ────────
|
|
$stmt = $pdo->prepare(
|
|
"SELECT tc.id AS tc_id,
|
|
tc.formulario_id,
|
|
tc.token AS tc_token,
|
|
tc.estado,
|
|
tc.lab_form_envio_id,
|
|
ts.paciente_id,
|
|
t.sesion_id,
|
|
p.nombre_completo, p.tipo_documento, p.numero_documento,
|
|
p.fecha_nacimiento, p.telefono, p.eps,
|
|
med.nombres AS medico_nombres, med.apellidos AS medico_apellidos
|
|
FROM turnero_consentimientos tc
|
|
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 = ts.paciente_id
|
|
LEFT JOIN medicos med ON med.id = ts.medico_id
|
|
WHERE tc.token = ?
|
|
LIMIT 1"
|
|
);
|
|
$stmt->execute([$consentToken]);
|
|
$tc = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
if (!$tc) jsonError('Consentimiento no encontrado.', 404);
|
|
|
|
// ── Si ya fue firmado o tiene envío vinculado, devolver ese token ────
|
|
if ($tc['lab_form_envio_id']) {
|
|
$stEnv = $pdo->prepare("SELECT token, estado FROM lab_form_envios WHERE id = ?");
|
|
$stEnv->execute([(int)$tc['lab_form_envio_id']]);
|
|
$envio = $stEnv->fetch(PDO::FETCH_ASSOC);
|
|
if ($envio) {
|
|
// Si el envio no fue completado todavía, reutilizarlo
|
|
if (!in_array($envio['estado'], ['completado', 'firmado'])) {
|
|
jsonOk(['form_token' => $envio['token']]);
|
|
}
|
|
// Si ya completado, devolver igualmente el token para que el operador lo vea
|
|
jsonOk(['form_token' => $envio['token'], 'ya_firmado' => true]);
|
|
}
|
|
}
|
|
|
|
if ($tc['estado'] === 'firmado') {
|
|
jsonError('Este consentimiento ya fue firmado.', 409);
|
|
}
|
|
|
|
// ── 3. Crear nuevo lab_form_envios ────────────────────────────────────
|
|
$formToken = bin2hex(random_bytes(32)); // 64 chars hex
|
|
|
|
$prefilled = [];
|
|
if ($tc['nombre_completo']) $prefilled['__paciente']['nombre_completo'] = $tc['nombre_completo'];
|
|
if ($tc['tipo_documento']) $prefilled['__paciente']['tipo_documento'] = $tc['tipo_documento'];
|
|
if ($tc['numero_documento']) $prefilled['__paciente']['numero_documento'] = $tc['numero_documento'];
|
|
if ($tc['fecha_nacimiento']) $prefilled['__paciente']['fecha_nacimiento'] = $tc['fecha_nacimiento'];
|
|
if ($tc['telefono']) $prefilled['__paciente']['telefono'] = $tc['telefono'];
|
|
if ($tc['eps']) $prefilled['__paciente']['eps'] = $tc['eps'];
|
|
$medicoNombre = trim(($tc['medico_nombres'] ?? '') . ' ' . ($tc['medico_apellidos'] ?? ''));
|
|
if ($medicoNombre) $prefilled['__paciente']['medico_nombre'] = $medicoNombre;
|
|
|
|
$userId = (int)($_SESSION['admin_user']['id'] ?? 0) ?: null;
|
|
|
|
$ins = $pdo->prepare(
|
|
"INSERT INTO lab_form_envios
|
|
(formulario_id, paciente_id, token, datos_prefilled, estado, enviado_por, enviado_via, turnero_consentimiento_id)
|
|
VALUES (?, ?, ?, ?, 'pendiente', ?, 'link', ?)"
|
|
);
|
|
$ins->execute([
|
|
(int)$tc['formulario_id'],
|
|
$tc['paciente_id'] ?: null,
|
|
$formToken,
|
|
json_encode($prefilled, JSON_UNESCAPED_UNICODE),
|
|
$userId,
|
|
(int)$tc['tc_id'],
|
|
]);
|
|
|
|
$formEnvioId = (int)$pdo->lastInsertId();
|
|
|
|
// ── 4. Guardar el vínculo en turnero_consentimientos ─────────────────
|
|
$pdo->prepare("UPDATE turnero_consentimientos SET lab_form_envio_id = ? WHERE id = ?")
|
|
->execute([$formEnvioId, (int)$tc['tc_id']]);
|
|
|
|
jsonOk(['form_token' => $formToken]);
|