diff --git a/_restore_tomas_conditions.php b/_restore_tomas_conditions.php
new file mode 100644
index 0000000..bc427fb
--- /dev/null
+++ b/_restore_tomas_conditions.php
@@ -0,0 +1,58 @@
+getConnection();
+$row = $pdo->query("SELECT esquema FROM lab_formularios WHERE id = 15 LIMIT 1")->fetch(PDO::FETCH_ASSOC);
+if (!$row) { die('Formulario id=15 no encontrado.'); }
+
+$esquema = json_decode($row['esquema'], true);
+if (!is_array($esquema)) { die('Esquema inválido.'); }
+
+// Obtener opciones del selector de examen
+$examOptions = [];
+foreach ($esquema as $c) {
+ if (($c['id'] ?? '') === '_c8j2g16') { $examOptions = $c['options'] ?? []; break; }
+}
+if (empty($examOptions)) { die('No se encontraron tipos de examen en _c8j2g16.'); }
+
+$restaurados = 0;
+foreach ($esquema as &$campo) {
+ if (($campo['tipo'] ?? '') !== 'separador') continue;
+ if (isset($campo['condicion'])) continue; // ya tiene condicion
+
+ $label = $campo['label'] ?? '';
+ $prefix = trim(explode('·', $label)[0] ?? '');
+ if (!$prefix) continue;
+
+ // Buscar si el prefijo corresponde exactamente a un tipo de examen
+ if (in_array($prefix, $examOptions, true)) {
+ $campo['condicion'] = [
+ 'campo_id' => '_c8j2g16',
+ 'valores' => [$prefix],
+ ];
+ $restaurados++;
+ }
+}
+unset($campo);
+
+$pdo->prepare("UPDATE lab_formularios SET esquema = ? WHERE id = 15")
+ ->execute([json_encode($esquema, JSON_UNESCAPED_UNICODE)]);
+
+@unlink(__FILE__);
+
+echo '
+ ✅ Condiciones restauradas
+ ' . $restaurados . ' separadores actualizados con condicion sobre _c8j2g16.
+ Tipos de examen encontrados: ' . implode(', ', array_map('htmlspecialchars', $examOptions)) . '
+ Este archivo fue eliminado automáticamente.
+ ← Volver a Formularios
+
';
diff --git a/ver_formulario_enviado.php b/ver_formulario_enviado.php
index 808ec87..d2429b0 100644
--- a/ver_formulario_enviado.php
+++ b/ver_formulario_enviado.php
@@ -1288,23 +1288,63 @@ function _mpGetGroupsForExam(examName) {
return result;
}
+// Visibilidad de secciones de tomas según examen seleccionado
+// (funciona aunque la BD no tenga condiciones, usando sep_id de _mpAllGroups)
+function _mpApplyExamVisibility(selectedExam) {
+ // Construir mapa sep_id → exam_name
+ var sepToExam = {};
+ for (var gk in _mpAllGroups) {
+ var parts = gk.split('|').filter(Boolean);
+ var isExamGrp = parts.some(function(p) { return _mpExamOptions.indexOf(p) !== -1; });
+ if (isExamGrp) {
+ _mpAllGroups[gk].forEach(function(sec) {
+ if (sec.sep_id) sepToExam[sec.sep_id] = parts[0];
+ });
+ }
+ }
+ if (!Object.keys(sepToExam).length) return;
+
+ // Recorrer todos los elementos con data-campo-id dentro del doc-body
+ var docBody = document.querySelector('.doc-body');
+ if (!docBody) return;
+ var inHidden = false;
+ docBody.querySelectorAll('[data-campo-id]').forEach(function(el) {
+ var cid = el.getAttribute('data-campo-id');
+ if (el.classList.contains('esquema-sep')) {
+ if (sepToExam[cid] !== undefined) {
+ // Separador de toma: mostrar solo si es del examen seleccionado
+ inHidden = (sepToExam[cid] !== selectedExam);
+ el.style.display = inHidden ? 'none' : '';
+ } else {
+ // Separador genérico (ej: Datos del paciente) — siempre visible
+ inHidden = false;
+ el.style.display = '';
+ }
+ } else {
+ el.style.display = inHidden ? 'none' : '';
+ }
+ });
+}
+
// Escuchar selección de tipo de examen
document.addEventListener('change', function(e) {
if (!_mpModoTurnero) return;
- if (_mpTomasConfig !== null) return; // ya configurado
var el = e.target;
if (el.type !== 'radio' || el.name !== '_c8j2g16') return;
var examName = el.value;
- var groups = _mpGetGroupsForExam(examName);
+ _mpApplyExamVisibility(examName);
+ if (_mpTomasConfig !== null) return; // ya configurado, no mostrar panel
+ var groups = _mpGetGroupsForExam(examName);
if (!Object.keys(groups).length) return;
_mpShowCfgPanel(examName, groups);
});
-// Si al cargar ya hay examen seleccionado pero sin _tomas_config → mostrar panel
+// Al cargar: aplicar visibilidad si hay examen seleccionado
document.addEventListener('DOMContentLoaded', function() {
- if (!_mpModoTurnero || _mpTomasConfig !== null) return;
var radio = document.querySelector('[name="_c8j2g16"]:checked');
if (!radio) return;
+ _mpApplyExamVisibility(radio.value);
+ if (!_mpModoTurnero || _mpTomasConfig !== null) return;
var groups = _mpGetGroupsForExam(radio.value);
if (Object.keys(groups).length) _mpShowCfgPanel(radio.value, groups);
});