Files
whatsapp/modules/turnero/api/chat_buscar_paciente.php
Lizandro GuarnizoandClaude Sonnet 4.6 ab72750410 feat(chat): botón Nuevo mensaje con búsqueda de paciente y picker de plantilla
- chat_buscar_paciente.php: GET ?q= busca en lab_pacientes por nombre,
  documento o teléfono (mín. 2 chars, máx. 20 resultados)
- chat_start_conversation.php: POST {phone, template_name, lang, params}
  — normaliza teléfono, busca/crea usuario en users, envía plantilla
  vía WhatsAppService('turnero'), devuelve {ok, user_id}
- chat.php: botón "+ Nuevo" en sidebar header; modal 3 pasos:
  1) buscar paciente (debounce 350ms) o ingresar número libre
  2) lista de plantillas habilitadas
  3) variables de la plantilla + Enviar
  Al enviar recarga el sidebar y abre la conversación automáticamente

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-03 17:19:18 -05:00

30 lines
1.0 KiB
PHP

<?php
/**
* GET ?q= — Busca pacientes en lab_pacientes por nombre o documento.
* Usado por el modal "Nuevo mensaje" del chat turnero.
*/
require_once __DIR__ . '/../../../config/config.php';
requireAuthentication();
header('Content-Type: application/json; charset=utf-8');
$q = trim($_GET['q'] ?? '');
if (strlen($q) < 2) { echo json_encode(['ok' => true, 'data' => []]); exit; }
try {
$pdo = Database::getInstance()->getConnection();
$like = '%' . $q . '%';
$rows = $pdo->prepare(
"SELECT id, nombre_completo, telefono, numero_documento
FROM lab_pacientes
WHERE is_active = 1
AND (nombre_completo LIKE ? OR numero_documento LIKE ? OR telefono LIKE ?)
ORDER BY nombre_completo ASC
LIMIT 20"
);
$rows->execute([$like, $like, $like]);
echo json_encode(['ok' => true, 'data' => $rows->fetchAll(PDO::FETCH_ASSOC)]);
} catch (Throwable $e) {
http_response_code(500);
echo json_encode(['ok' => false, 'error' => $e->getMessage()]);
}