Files
whatsapp/modules/turnero/api/update_muestra_estado.php
T
Lizandro GuarnizoandClaude Sonnet 4.6 5fedd233f4 feat(lis): migración completa Firebird→MySQL + tracking de muestras en turnero
- Migraciones LIS 01-08: schema completo del nuevo LIS (secciones, protocolos,
  ítems de resultado, perfiles, tarifas, empresas, histórico transaccional)
- ETL Firebird→MySQL: script CLI con conversión WIN1252→UTF-8, batches de 500,
  resolución de FKs y deduplicación de pacientes
- turnero_muestras: tracking pendiente/recibida/rechazada por tipo de tubo
- lugar.php: widget de recepción de muestras (solo tipo=muestras)
- update_muestra_estado.php: API para marcar estado de muestra
- create_solicitud.php: auto-crea muestras al guardar solicitud
- get_consentimientos.php: incluye muestras[] en el response
- 6 vistas SQL: v_muestras_hoy, v_recepcion_completa, v_examen_precio, etc.
- numero_orden en encabezado del formulario firmado (D-/F- color diferenciado)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-04 21:44:22 -05:00

70 lines
2.2 KiB
PHP

<?php
/**
* POST /modules/turnero/api/update_muestra_estado.php
* Marca una muestra como recibida o rechazada.
* Solo accesible desde estaciones tipo "muestras".
*
* Body JSON:
* muestra_id int requerido
* estado string requerido 'recibida' | 'rechazada' | 'pendiente'
* motivo_rechazo string opcional requerido si estado = 'rechazada'
*/
require_once __DIR__ . '/_helpers.php';
requireMethod('POST');
requireTurnero();
$datos = inputJson();
$muestraId = isset($datos['muestra_id']) ? (int)$datos['muestra_id'] : 0;
$estado = trim($datos['estado'] ?? '');
$motivo = isset($datos['motivo_rechazo']) ? trim($datos['motivo_rechazo']) : null;
if ($muestraId <= 0) jsonError('muestra_id inválido.');
if (!in_array($estado, ['recibida', 'rechazada', 'pendiente'], true)) {
jsonError('estado debe ser recibida, rechazada o pendiente.');
}
if ($motivo === '') $motivo = null;
$pdo = db();
// Verificar que la muestra existe
$stmt = $pdo->prepare(
"SELECT tm.id, tm.solicitud_id, tm.estado
FROM turnero_muestras tm
WHERE tm.id = ?"
);
$stmt->execute([$muestraId]);
$muestra = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$muestra) jsonError('Muestra no encontrada.', 404);
// Construir campos a actualizar
$ahora = date('Y-m-d H:i:s');
$adminI = adminId();
if ($estado === 'recibida') {
$pdo->prepare(
"UPDATE turnero_muestras
SET estado = 'recibida', recibida_por = ?, recibida_at = ?,
motivo_rechazo = NULL
WHERE id = ?"
)->execute([$adminI, $ahora, $muestraId]);
} elseif ($estado === 'rechazada') {
$pdo->prepare(
"UPDATE turnero_muestras
SET estado = 'rechazada', recibida_por = ?, recibida_at = ?,
motivo_rechazo = ?
WHERE id = ?"
)->execute([$adminI, $ahora, $motivo, $muestraId]);
} else {
// Revertir a pendiente
$pdo->prepare(
"UPDATE turnero_muestras
SET estado = 'pendiente', recibida_por = NULL,
recibida_at = NULL, motivo_rechazo = NULL
WHERE id = ?"
)->execute([$muestraId]);
}
jsonOk(['muestra_id' => $muestraId, 'estado' => $estado], 'Muestra actualizada');