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 {
|
||||
|
||||
@@ -26,7 +26,11 @@ $stmt->execute([$turnoId]);
|
||||
$turno = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||
if (!$turno) jsonError('Turno no encontrado.', 404);
|
||||
|
||||
// ── Formularios asignados al lugar destino (calculado al vuelo, sin depender de origen_lugar_id) ──
|
||||
// ── Formularios de lugar ──────────────────────────────────────────────────────
|
||||
// Si el turno ya tiene lugar destino asignado, usar solo ese lugar.
|
||||
// Si aún está en recepción (lugar_destino_id NULL), marcar como "de lugar" todos
|
||||
// los formularios configurados en cualquier lugar para que recepcion.php los filtre
|
||||
// con !c.origen_lugar_id aunque todavía no exista destino.
|
||||
$lugarDestinoId = (int)($turno['lugar_destino_id'] ?? 0);
|
||||
$fidsDeLugar = [];
|
||||
if ($lugarDestinoId) {
|
||||
@@ -35,6 +39,12 @@ if ($lugarDestinoId) {
|
||||
);
|
||||
$stmtL->execute([$lugarDestinoId]);
|
||||
$fidsDeLugar = array_map('intval', $stmtL->fetchAll(PDO::FETCH_COLUMN));
|
||||
} else {
|
||||
$stmtL = $pdo->prepare(
|
||||
"SELECT DISTINCT formulario_id FROM turnero_lugar_consentimientos"
|
||||
);
|
||||
$stmtL->execute();
|
||||
$fidsDeLugar = array_map('intval', $stmtL->fetchAll(PDO::FETCH_COLUMN));
|
||||
}
|
||||
|
||||
// ── Consentimientos ───────────────────────────────────────────
|
||||
@@ -87,7 +97,7 @@ foreach ($consentimientos as &$c) {
|
||||
$c['requiere_firma_profesional'] = $tieneFirmaPro;
|
||||
$c['requiere_firma_paciente'] = !($tieneFirmaPro && !$tieneFirmaPac);
|
||||
$c['origen_lugar_id'] = in_array((int)$c['formulario_id'], $fidsDeLugar, true)
|
||||
? $lugarDestinoId : null;
|
||||
? ($lugarDestinoId ?: -1) : null;
|
||||
$c['es_toma_progresiva'] = $esTomaProg;
|
||||
$c['tomas_total'] = $tomasTotal;
|
||||
$c['tomas_firmadas'] = $tomasFirm;
|
||||
|
||||
Reference in New Issue
Block a user