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:
co-authored by
Claude Sonnet 4.6
parent
f70b29abf8
commit
e950e2c146
@@ -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])) {
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user