feat: write to rips_examenes_pendientes on solicitud creation

Al guardar una solicitud en recepción, escribe los exámenes en la bandeja
temporal WhatsApp (rips_examenes_pendientes) con DELETE+INSERT del día.
Al volver a seleccionar el mismo paciente, get_examenes_rips los detecta
como fuente=cache y los auto-carga sin confirmación.

También fix en get_examenes_rips: exámenes con codigo_legacy=NULL ahora
se buscan por codigo como fallback (COALESCE).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-07-17 15:56:24 -05:00
co-authored by Claude Sonnet 4.6
parent f70b29abf8
commit e950e2c146
2 changed files with 48 additions and 4 deletions
+6 -4
View File
@@ -71,14 +71,16 @@ $no_mapeados = [];
if ($codigos) {
$ph = implode(',', array_fill(0, count($codigos), '?'));
$stmt = db()->prepare(
"SELECT id AS exam_tipo_id, codigo, nombre, codigo_legacy
"SELECT id AS exam_tipo_id, codigo, nombre,
COALESCE(codigo_legacy, codigo) AS match_key
FROM exam_tipos
WHERE codigo_legacy IN ($ph) AND activo = 1"
WHERE (codigo_legacy IN ($ph) OR (codigo_legacy IS NULL AND codigo IN ($ph)))
AND activo = 1"
);
$stmt->execute($codigos);
$stmt->execute(array_merge($codigos, $codigos));
$mapa = [];
foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $r) {
$mapa[trim($r['codigo_legacy'])] = $r;
$mapa[trim($r['match_key'])] = $r;
}
foreach ($codigos as $cod) {
if (isset($mapa[$cod])) {
+42
View File
@@ -335,6 +335,48 @@ try {
$stmt->execute([$solicitudId]);
$solicitud = $stmt->fetch(PDO::FETCH_ASSOC);
// Bandeja WhatsApp — actualizar rips_examenes_pendientes (fuera de la transacción principal)
if ($recepcionId && !empty($examIds) && ($solicitud['paciente_documento'] ?? '')) {
try {
$numDoc = $solicitud['paciente_documento'];
$ph2 = implode(',', array_fill(0, count($examIds), '?'));
$stEx2 = $pdo->prepare(
"SELECT COALESCE(codigo_legacy, codigo) AS cod_rips FROM exam_tipos WHERE id IN ($ph2)"
);
$stEx2->execute($examIds);
$codRips = array_column($stEx2->fetchAll(PDO::FETCH_ASSOC), 'cod_rips');
$docidmedico = '';
if ($medicoId) {
$stM = $pdo->prepare("SELECT docidmedico FROM medicos WHERE id = ? LIMIT 1");
$stM->execute([$medicoId]);
$docidmedico = (string)($stM->fetchColumn() ?: '');
}
$meta = [
'medico_docidmedico' => $docidmedico,
'nit_empresa' => $nitEmpresa,
'diagnostico_cod' => $diagPpal,
'valor_total' => $valorTotal,
'recepcion_id' => $recepcionId,
'hora' => date('H:i'),
];
$datos = array_map(fn($cod) => ['cod_examen' => $cod] + $meta, $codRips);
$pdo->prepare(
"DELETE FROM rips_examenes_pendientes WHERE numero_documento = ? AND DATE(created_at) = CURDATE()"
)->execute([$numDoc]);
$pdo->prepare(
"INSERT INTO rips_examenes_pendientes (numero_documento, datos, recepcion_id, hora_recepcion)
VALUES (?, ?, ?, CURTIME())"
)->execute([$numDoc, json_encode($datos, JSON_UNESCAPED_UNICODE), $recepcionId]);
} catch (\Throwable $eRips) {
error_log('[create_solicitud] rips_examenes_pendientes: ' . $eRips->getMessage());
}
}
jsonOk([
'solicitud' => $solicitud,
'recepcion_id' => $recepcionId,