feat: ciclos configurables + gestión de exámenes en Tomas Prolongadas

Feature 1 — Ciclos configurables por paciente:
- ver_formulario_enviado.php: pantalla de configuración aparece la primera
  vez que el profesional abre el formulario (antes de firmar); permite
  seleccionar qué tomas realizar para cada protocolo. $_mpSkippedSepIds
  oculta las secciones no seleccionadas en render. $_mpMap se reconstruye
  desde los grupos filtrados para que next_firma_id salte tomas omitidas.
- configurar_tomas.php (nuevo): guarda _tomas_config en datos_respuestas
  del consentimiento; valida que cada grupo tenga al menos una toma.
- guardar_toma.php: aplica el filtro _tomas_config al array firmasCampos
  para que el conteo de tomas firmadas/pendientes sea correcto.

Feature 2 — Gestión de tipos de examen (admin):
- lab_tomas_config.php (nuevo): página admin que muestra los exámenes
  actuales con sus tomas y permite añadir nuevos tipos con su esquema
  completo (separador + hora + resultado + firma_profesional por toma).
- api/lab/save_tomas_config.php (nuevo): modifica el esquema JSON del
  formulario id=15; add_exam agrega opción al selector y los campos de
  cada toma; delete_exam elimina la opción y los separadores exclusivos.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-07-10 10:19:11 -05:00
co-authored by Claude Sonnet 4.6
parent 3e110324a8
commit 2eefe3f5c8
5 changed files with 673 additions and 2 deletions
+10
View File
@@ -101,6 +101,16 @@ foreach ($esquema as $campo) {
}
}
// ── Aplicar filtro de ciclos configurados (tomas_config) ────
$__tcFirmas = $datosMerge['_tomas_config'] ?? null;
if (is_array($__tcFirmas)) {
$__allowed = [];
foreach ($__tcFirmas as $__g => $__ids) {
if (is_array($__ids)) foreach ($__ids as $__id) $__allowed[$__id] = true;
}
$firmasCampos = array_values(array_filter($firmasCampos, fn($f) => isset($__allowed[$f['id']])));
}
// ── Determinar estado y siguiente_toma_at ────────────────────
// Acepta firma guardada con clave campo_id O campo_id_svg (compatibilidad registros históricos)
$hasFirma = fn($f) => (isset($datosMerge[$f['id']]) && strlen($datosMerge[$f['id']]) > 10)