fix: no mostrar consentimientos de toma de muestras al guardar en recepción
create_solicitud.php: cambia de crear consents por lugar (toma de muestras) a crear consents por examen (exam_tipo_consentimientos). Los de lugar se crean cuando el paciente llega a la estación vía get_consentimientos.php. get_consentimientos.php: cuando lugar_destino_id es NULL (turno en recepción), busca TODOS los formularios de turnero_lugar_consentimientos y los marca con origen_lugar_id = -1 (truthy), para que el filtro !c.origen_lugar_id de recepcion.php los excluya correctamente aunque no haya destino asignado aún. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
7b4827f70f
commit
3062cd7e95
@@ -143,37 +143,41 @@ try {
|
||||
$stmtItem->execute([$solicitudId, $examId]);
|
||||
}
|
||||
|
||||
// ── Consentimientos: solo los configurados para este lugar ──
|
||||
$stmt = $pdo->prepare(
|
||||
"SELECT f.id AS formulario_id, f.nombre AS formulario_nombre
|
||||
FROM lab_formularios f
|
||||
INNER JOIN turnero_lugar_consentimientos tlc ON tlc.formulario_id = f.id
|
||||
WHERE tlc.lugar_id = ?
|
||||
AND f.is_active = 1
|
||||
ORDER BY f.nombre ASC"
|
||||
);
|
||||
$stmt->execute([$lugarId]);
|
||||
$consentimientosRequeridos = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
// ── Consentimientos: solo los de examen (los de lugar se crean al llegar a toma de muestras) ──
|
||||
$consentimientosRequeridos = [];
|
||||
if (!empty($examIds)) {
|
||||
$ph = implode(',', array_fill(0, count($examIds), '?'));
|
||||
$stmt = $pdo->prepare(
|
||||
"SELECT DISTINCT f.id AS formulario_id, f.nombre AS formulario_nombre
|
||||
FROM lab_formularios f
|
||||
INNER JOIN exam_tipo_consentimientos etc ON etc.formulario_id = f.id
|
||||
WHERE etc.exam_tipo_id IN ($ph)
|
||||
AND f.is_active = 1
|
||||
ORDER BY f.nombre ASC"
|
||||
);
|
||||
$stmt->execute($examIds);
|
||||
$consentimientosRequeridos = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
// Crear o recuperar estado de cada consentimiento requerido
|
||||
$stmtCreateConsent = $pdo->prepare(
|
||||
"INSERT IGNORE INTO turnero_consentimientos (turno_id, formulario_id, token, estado)
|
||||
VALUES (?, ?, UUID(), 'pendiente')"
|
||||
);
|
||||
foreach ($consentimientosRequeridos as &$c) {
|
||||
$stmtCreateConsent->execute([$turnoId, $c['formulario_id']]);
|
||||
$stC = $pdo->prepare(
|
||||
"SELECT id, token, estado, enviado_at, firmado_at FROM turnero_consentimientos
|
||||
$stmtCreateConsent = $pdo->prepare(
|
||||
"INSERT IGNORE INTO turnero_consentimientos (turno_id, formulario_id, token, estado)
|
||||
VALUES (?, ?, UUID(), 'pendiente')"
|
||||
);
|
||||
$stmtRead = $pdo->prepare(
|
||||
"SELECT id, token, estado FROM turnero_consentimientos
|
||||
WHERE turno_id = ? AND formulario_id = ?"
|
||||
);
|
||||
$stC->execute([$turnoId, $c['formulario_id']]);
|
||||
$row = $stC->fetch(PDO::FETCH_ASSOC);
|
||||
$c['id'] = $row['id'] ?? null;
|
||||
$c['token'] = $row['token'] ?? null;
|
||||
$c['estado'] = $row['estado'] ?? 'pendiente';
|
||||
$c['turno_id'] = $turnoId;
|
||||
foreach ($consentimientosRequeridos as &$c) {
|
||||
$stmtCreateConsent->execute([$turnoId, $c['formulario_id']]);
|
||||
$stmtRead->execute([$turnoId, $c['formulario_id']]);
|
||||
$row = $stmtRead->fetch(PDO::FETCH_ASSOC);
|
||||
$c['id'] = $row['id'] ?? null;
|
||||
$c['token'] = $row['token'] ?? null;
|
||||
$c['estado'] = $row['estado'] ?? 'pendiente';
|
||||
$c['turno_id'] = $turnoId;
|
||||
$c['origen_lugar_id'] = null; // es de examen, no de lugar
|
||||
}
|
||||
unset($c);
|
||||
}
|
||||
unset($c);
|
||||
|
||||
// ── Auto-crear muestras por tipo_muestra de los exámenes ──
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user