diff --git a/api/lab/ingest_diagnosticos.php b/api/lab/ingest_diagnosticos.php index b10691c..6101ecc 100644 --- a/api/lab/ingest_diagnosticos.php +++ b/api/lab/ingest_diagnosticos.php @@ -43,10 +43,14 @@ try { VALUES (?, ?) ON DUPLICATE KEY UPDATE concepto = VALUES(concepto)" ); + if (!$stmt) { + $info = $pdo->errorInfo(); + throw new \RuntimeException("Prepare falló [{$info[0]}]: {$info[2]}"); + } $insertados = 0; foreach ($data['rows'] as $row) { - $cod = trim($row['cod'] ?? ''); + $cod = trim($row['cod'] ?? ''); $concepto = trim($row['concepto'] ?? ''); if (!$cod || !$concepto) continue; $stmt->execute([$cod, $concepto]); @@ -55,7 +59,7 @@ try { ob_clean(); echo json_encode(['ok' => true, 'insertados' => $insertados]); -} catch (Exception $e) { +} catch (\Throwable $e) { ob_clean(); http_response_code(500); echo json_encode(['ok' => false, 'error' => $e->getMessage()]); diff --git a/api/lab/ingest_paciente.php b/api/lab/ingest_paciente.php index 8daa3f1..83904ad 100644 --- a/api/lab/ingest_paciente.php +++ b/api/lab/ingest_paciente.php @@ -132,6 +132,43 @@ if (!in_array($modo, ['insertar', 'upsert'], true)) { $modo = 'upsert'; } +// ── Exámenes opcionales (vienen del scheduler de RIPS) ─────────────────────── +$examenesRaw = $data['examenes'] ?? null; +$examenesGuardados = 0; + +function guardarExamenesPendientes(string $doc, array $examenes): int { + if (!$examenes || !$doc) return 0; + $pdo = db(); + + $stDel = $pdo->prepare( + "DELETE FROM rips_examenes_pendientes + WHERE numero_documento = ? AND DATE(created_at) = CURDATE()" + ); + if (!$stDel) { + $info = $pdo->errorInfo(); + throw new \RuntimeException("rips_examenes_pendientes no existe o error: {$info[2]}"); + } + $stDel->execute([$doc]); + + $meta = $examenes[0] ?? []; + $stIns = $pdo->prepare( + "INSERT INTO rips_examenes_pendientes + (numero_documento, datos, recepcion_id, hora_recepcion) + VALUES (?, ?, ?, ?)" + ); + if (!$stIns) { + $info = $pdo->errorInfo(); + throw new \RuntimeException("INSERT rips_examenes_pendientes falló: {$info[2]}"); + } + $stIns->execute([ + $doc, + json_encode($examenes, JSON_UNESCAPED_UNICODE), + $meta['recepcion_id'] ?? null, + $meta['hora'] ?? null, + ]); + return count($examenes); +} + // ── UPSERT / INSERT-ONLY ───────────────────────────────────────────────────── try { $pac = new Paciente(); @@ -144,31 +181,40 @@ try { ob_clean(); if ($existente) { + if (!empty($examenesRaw) && is_array($examenesRaw)) { + $examenesGuardados = guardarExamenesPendientes($campos['numero_documento'], $examenesRaw); + } if ($modo === 'insertar') { echo json_encode([ - 'ok' => true, - 'action' => 'skipped', - 'id' => $existente['id'], - 'message' => 'Paciente ya existe', + 'ok' => true, + 'action' => 'skipped', + 'id' => $existente['id'], + 'message' => 'Paciente ya existe', + 'examenes_guardados' => $examenesGuardados, ]); } else { // Nunca pisar origen en update — conservar el que ya tiene en BD unset($campos['origen']); $pac->actualizar($existente['id'], $campos, null); echo json_encode([ - 'ok' => true, - 'action' => 'updated', - 'id' => $existente['id'], - 'message' => 'Paciente actualizado', + 'ok' => true, + 'action' => 'updated', + 'id' => $existente['id'], + 'message' => 'Paciente actualizado', + 'examenes_guardados' => $examenesGuardados, ]); } } elseif (!empty($campos['nombre_completo'])) { $id = $pac->crear($campos, null); + if (!empty($examenesRaw) && is_array($examenesRaw)) { + $examenesGuardados = guardarExamenesPendientes($campos['numero_documento'], $examenesRaw); + } echo json_encode([ - 'ok' => true, - 'action' => 'created', - 'id' => $id, - 'message' => 'Paciente creado', + 'ok' => true, + 'action' => 'created', + 'id' => $id, + 'message' => 'Paciente creado', + 'examenes_guardados' => $examenesGuardados, ]); } else { http_response_code(422); @@ -178,7 +224,7 @@ try { 'error' => 'Sin número de documento ni nombre: registro omitido', ]); } -} catch (Exception $e) { +} catch (\Throwable $e) { ob_clean(); http_response_code(500); echo json_encode(['ok' => false, 'error' => $e->getMessage()]);