diff --git a/migrations/20260703_solicitud_medico.sql b/migrations/20260703_solicitud_medico.sql
new file mode 100644
index 0000000..fbd1e89
--- /dev/null
+++ b/migrations/20260703_solicitud_medico.sql
@@ -0,0 +1,4 @@
+ALTER TABLE turnero_solicitudes
+ ADD COLUMN medico_id INT UNSIGNED DEFAULT NULL
+ COMMENT 'FK medicos.id — médico tratante seleccionado en recepción'
+ AFTER solo_muestras;
diff --git a/migrations/run_pendientes.php b/migrations/run_pendientes.php
index 1af29c3..5531abb 100644
--- a/migrations/run_pendientes.php
+++ b/migrations/run_pendientes.php
@@ -11,6 +11,7 @@ $pendientes = [
'20260703_solo_muestras.sql',
'20260703_medicos.sql',
'20260703_medicos_seed.sql',
+ '20260703_solicitud_medico.sql',
];
$pdo = Database::getInstance()->getConnection();
diff --git a/modules/turnero/api/create_solicitud.php b/modules/turnero/api/create_solicitud.php
index bf806e4..9cbba38 100644
--- a/modules/turnero/api/create_solicitud.php
+++ b/modules/turnero/api/create_solicitud.php
@@ -32,6 +32,7 @@ $obs = isset($datos['observaciones']) ? trim((string) $datos['observac
$numOrden = isset($datos['numero_orden']) ? trim((string) $datos['numero_orden']) : null;
$embarazada = !empty($datos['embarazada']) ? 1 : 0;
$soloMuestras = !empty($datos['solo_muestras']) ? 1 : 0;
+$medicoId = !empty($datos['medico_id']) ? (int)$datos['medico_id'] : null;
$pagosDetalle = null;
if ($metodoPago === 'combinado' && isset($datos['pagos_detalle']) && is_array($datos['pagos_detalle'])) {
$pd = $datos['pagos_detalle'];
@@ -114,12 +115,12 @@ try {
$stmt = $pdo->prepare(
"INSERT INTO turnero_solicitudes
- (turno_id, paciente_id, lugar_id, numero_orden, total_cobrado, metodo_pago, pagos_detalle, observaciones, embarazada, solo_muestras, creado_por)
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
+ (turno_id, paciente_id, lugar_id, numero_orden, total_cobrado, metodo_pago, pagos_detalle, observaciones, embarazada, solo_muestras, medico_id, creado_por)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
);
$stmt->execute([
$turnoId, $pacienteId, $lugarId, $numOrden,
- $total, $metodoPago ?: null, $pagosDetalle, $obs ?: null, $embarazada, $soloMuestras, adminId(),
+ $total, $metodoPago ?: null, $pagosDetalle, $obs ?: null, $embarazada, $soloMuestras, $medicoId, adminId(),
]);
$solicitudId = (int) $pdo->lastInsertId();
diff --git a/modules/turnero/api/get_consentimientos.php b/modules/turnero/api/get_consentimientos.php
index 076e6ce..8cbc5a7 100644
--- a/modules/turnero/api/get_consentimientos.php
+++ b/modules/turnero/api/get_consentimientos.php
@@ -56,10 +56,14 @@ $respuesta = [
if ($incluirSolicitud) {
$stmt = $pdo->prepare(
"SELECT s.id, s.turno_id, s.paciente_id, s.lugar_id,
- s.total_cobrado, s.metodo_pago, s.observaciones, s.embarazada, s.creado_at,
- l.nombre AS lugar_nombre
+ s.total_cobrado, s.metodo_pago, s.observaciones, s.embarazada, s.solo_muestras, s.medico_id, s.creado_at,
+ l.nombre AS lugar_nombre,
+ CONCAT(m.nombres, ' ', m.apellidos) AS medico_nombre,
+ m.cod_especialidad AS medico_especialidad,
+ m.codigo AS medico_codigo
FROM turnero_solicitudes s
LEFT JOIN turnero_lugares l ON l.id = s.lugar_id
+ LEFT JOIN medicos m ON m.id = s.medico_id
WHERE s.turno_id = ?
LIMIT 1"
);
diff --git a/modules/turnero/views/lugar.php b/modules/turnero/views/lugar.php
index 7b0353b..83a1a16 100644
--- a/modules/turnero/views/lugar.php
+++ b/modules/turnero/views/lugar.php
@@ -299,6 +299,12 @@ require_once __DIR__ . '/../../../shared/components/sidebar.php';
Paciente embarazada
+
Sin paciente vinculado
@@ -610,6 +616,16 @@ async function cargarFichaSolicitud(turnoId) {
const badgeEmb = document.getElementById('pac-embarazada');
if (badgeEmb) badgeEmb.classList.toggle('d-none', !(sol && sol.embarazada == 1));
+ const medDiv = document.getElementById('pac-medico');
+ if (medDiv) {
+ const tieneMedico = sol && sol.medico_nombre;
+ medDiv.classList.toggle('d-none', !tieneMedico);
+ if (tieneMedico) {
+ const esp = sol.medico_especialidad ? ' · ' + sol.medico_especialidad : '';
+ document.getElementById('pac-medico-nombre').textContent = sol.medico_nombre + esp;
+ }
+ }
+
if (pac) {
document.getElementById('bloque-pac-info').style.display = '';
document.getElementById('bloque-pac-sin').classList.add('d-none');
diff --git a/modules/turnero/views/recepcion.php b/modules/turnero/views/recepcion.php
index c36b2ec..461d6ee 100644
--- a/modules/turnero/views/recepcion.php
+++ b/modules/turnero/views/recepcion.php
@@ -448,6 +448,27 @@ document.addEventListener('DOMContentLoaded', function() {
+
+
+
+ Médico tratante (opcional)
+
+
+
+
+
+
+
+
+