Files
whatsapp/api/lab/send_formulario.php
T

87 lines
3.3 KiB
PHP

<?php
/**
* POST /api/lab/send_formulario.php
* Crea un envío (instancia) con datos pre-llenados y devuelve el link para WhatsApp.
* Accesible por admin Y enfermero.
*
* Body JSON:
* { formulario_id, paciente_id?, domicilio_id?, datos_prefilled:{...}, enviado_via? }
*
* Returns:
* { id, token, url, whatsapp_url, mensaje_wa }
*/
require_once __DIR__ . '/_helpers.php';
requireMethod('POST');
try {
$datos = inputJson();
if (empty($datos['formulario_id'])) jsonError('formulario_id es obligatorio');
// Verificar que la plantilla existe
$form = new Formulario();
$plantilla = $form->obtener((int)$datos['formulario_id']);
if (!$plantilla) jsonError('Formulario no encontrado', 404);
// Pre-llenado: si viene paciente_id, auto-enriquecer con datos del paciente
$prefilled = $datos['datos_prefilled'] ?? [];
if (!empty($datos['paciente_id'])) {
$pac = (new Paciente())->obtener((int)$datos['paciente_id']);
if ($pac) {
// Mapeo automático de campos estándar
$prefilled['__paciente'] = [
'id' => $pac['id'],
'nombre_completo' => $pac['nombre_completo'],
'numero_documento'=> $pac['numero_documento'],
'tipo_documento' => $pac['tipo_documento'],
'telefono' => $pac['telefono'],
'email' => $pac['email'] ?? '',
'fecha_nacimiento'=> $pac['fecha_nacimiento'] ?? '',
'eps' => $pac['eps'] ?? '',
'direccion' => $pac['direccion'] ?? '',
'ciudad' => $pac['ciudad'] ?? '',
];
}
}
$datos['datos_prefilled'] = json_encode($prefilled, JSON_UNESCAPED_UNICODE);
$datos['enviado_via'] = $datos['enviado_via'] ?? 'whatsapp';
$envioId = $form->crearEnvio($datos, adminId());
// Construir URL pública
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
$host = $_SERVER['HTTP_HOST'] ?? 'localhost';
$base = $protocol . '://' . $host;
// Subir un nivel desde /api/lab/
$basePath = rtrim(dirname(dirname(dirname($_SERVER['SCRIPT_NAME']))), '/');
// Obtener el token del envío recién creado
$db = Database::getInstance();
$envio = $db->fetch('SELECT token FROM lab_form_envios WHERE id = ?', [$envioId]);
$token = $envio['token'];
$url = $base . $basePath . '/form_cliente.php?t=' . $token;
// Mensaje de WhatsApp preformateado
$nomPac = $prefilled['__paciente']['nombre_completo'] ?? 'Estimado paciente';
$nomForm = $plantilla['nombre'];
$mensajeWa = "Hola $nomPac, le enviamos el formulario *\"$nomForm\"* para que lo complete y firme digitalmente.\n\n"
. "👉 Accede aquí:\n$url\n\n"
. "Si tiene dudas contáctenos.";
$telPac = $prefilled['__paciente']['telefono'] ?? '';
$waUrl = 'https://wa.me/' . preg_replace('/\D/', '', $telPac)
. '?text=' . rawurlencode($mensajeWa);
jsonOk([
'id' => $envioId,
'token' => $token,
'url' => $url,
'whatsapp_url'=> $waUrl,
'mensaje_wa' => $mensajeWa,
], 'Envío creado correctamente');
} catch (Exception $e) {
jsonError($e->getMessage(), 500);
}