feat: número de orden consecutivo en recepción

- Campo N.° Orden editable en la ficha, antes de seleccionar paciente
- Se carga automáticamente al abrir un turno (YYYYMMDD-001, 002…)
- Botón para regenerar el siguiente consecutivo
- Columna numero_orden en turnero_solicitudes (VARCHAR 20)
- Nuevo endpoint get_consecutivo.php calcula el siguiente del día
- create_solicitud.php guarda el numero_orden junto con la solicitud

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-06-23 23:12:23 -05:00
co-authored by Claude Sonnet 4.6
parent 892b01493a
commit a6f6449707
3 changed files with 59 additions and 3 deletions
+5 -3
View File
@@ -29,6 +29,8 @@ $total = isset($datos['total_cobrado']) && $datos['total_cobrado'] !== nul
? (float) $datos['total_cobrado'] : null;
$metodoPago = isset($datos['metodo_pago']) ? trim((string) $datos['metodo_pago']) : null;
$obs = isset($datos['observaciones']) ? trim((string) $datos['observaciones']) : null;
$numOrden = isset($datos['numero_orden']) ? trim((string) $datos['numero_orden']) : null;
if ($numOrden === '') $numOrden = null;
// ── Validaciones ──────────────────────────────────────────────
if ($turnoId <= 0) jsonError('turno_id inválido.');
@@ -90,11 +92,11 @@ try {
$stmt = $pdo->prepare(
"INSERT INTO turnero_solicitudes
(turno_id, paciente_id, lugar_id, total_cobrado, metodo_pago, observaciones, creado_por)
VALUES (?, ?, ?, ?, ?, ?, ?)"
(turno_id, paciente_id, lugar_id, numero_orden, total_cobrado, metodo_pago, observaciones, creado_por)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)"
);
$stmt->execute([
$turnoId, $pacienteId, $lugarId,
$turnoId, $pacienteId, $lugarId, $numOrden,
$total, $metodoPago ?: null, $obs ?: null, adminId(),
]);
$solicitudId = (int) $pdo->lastInsertId();
+23
View File
@@ -0,0 +1,23 @@
<?php
/**
* GET modules/turnero/api/get_consecutivo.php
* Devuelve el siguiente número de orden del día (YYYYMMDD-NNN).
*/
require_once __DIR__ . '/_helpers.php';
requireTurnero();
requireMethod('GET');
$pdo = db();
$prefix = date('Ymd') . '-';
$row = $pdo->prepare(
"SELECT MAX(CAST(SUBSTRING_INDEX(numero_orden,'-',-1) AS UNSIGNED)) AS ultimo
FROM turnero_solicitudes
WHERE numero_orden LIKE ?"
);
$row->execute([$prefix . '%']);
$ultimo = (int)($row->fetch(PDO::FETCH_ASSOC)['ultimo'] ?? 0);
$siguiente = $prefix . str_pad($ultimo + 1, 3, '0', STR_PAD_LEFT);
jsonOk(['consecutivo' => $siguiente]);