diff --git a/_migrate_tomas_simplify.php b/_migrate_tomas_simplify.php
index 61edcc0..08a258c 100644
--- a/_migrate_tomas_simplify.php
+++ b/_migrate_tomas_simplify.php
@@ -22,14 +22,6 @@ foreach ($esquema as &$campo) {
$id = $campo['id'] ?? '';
$tipo = $campo['tipo'] ?? '';
- // Campo selector → texto libre
- if ($id === '_c8j2g16') {
- $campo['tipo'] = 'texto';
- $campo['label'] = 'Tipo de examen';
- unset($campo['options'], $campo['multiple'], $campo['required']);
- $cambios++;
- }
-
// Separadores con condición sobre _c8j2g16 → quitar condición
if ($tipo === 'separador' && isset($campo['condicion'])) {
$condCampo = $campo['condicion']['campo_id'] ?? '';
@@ -49,8 +41,8 @@ $pdo->prepare("UPDATE lab_formularios SET esquema = ? WHERE id = 15")
echo '
✅ Migración completada
' . $cambios . ' campos modificados:
- • Campo _c8j2g16 → texto libre "Tipo de examen"
- • Condiciones eliminadas de separadores de tomas
+ • Condiciones eliminadas de separadores de tomas
+ • Campo _c8j2g16 conservado como selector (+ botón "Añadir tipo")
Este archivo fue eliminado automáticamente.
← Volver a Formularios
';
diff --git a/api/lab/add_exam_option.php b/api/lab/add_exam_option.php
new file mode 100644
index 0000000..78b0d39
--- /dev/null
+++ b/api/lab/add_exam_option.php
@@ -0,0 +1,42 @@
+ 80) jsonError('Nombre demasiado largo (máx 80 chars).');
+if (!preg_match('/\S/', $examName)) jsonError('Nombre inválido.');
+
+$db = Database::getInstance();
+$row = $db->fetch("SELECT esquema FROM lab_formularios WHERE id = 15 LIMIT 1");
+if (!$row) jsonError('Formulario no encontrado.', 404);
+
+$esquema = json_decode($row['esquema'], true);
+if (!is_array($esquema)) jsonError('Esquema inválido.', 500);
+
+$updated = false;
+foreach ($esquema as &$campo) {
+ if (($campo['id'] ?? '') !== '_c8j2g16') continue;
+ $opts = $campo['options'] ?? [];
+ if (in_array($examName, $opts, true)) jsonError("El tipo \"$examName\" ya existe.");
+ $opts[] = $examName;
+ $campo['options'] = $opts;
+ $updated = true;
+ break;
+}
+unset($campo);
+
+if (!$updated) jsonError('Campo selector de examen no encontrado en el formulario.', 500);
+
+$db->getConnection()->prepare("UPDATE lab_formularios SET esquema = ? WHERE id = 15")
+ ->execute([json_encode($esquema, JSON_UNESCAPED_UNICODE)]);
+
+jsonOk(['exam_name' => $examName], "Tipo \"$examName\" añadido.");
diff --git a/ver_formulario_enviado.php b/ver_formulario_enviado.php
index 01a32b7..34e0d77 100644
--- a/ver_formulario_enviado.php
+++ b/ver_formulario_enviado.php
@@ -994,6 +994,28 @@ function esc2(mixed $v): string {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/* ── Añadir tipo de examen inline ── */
+function toggleAddExam(cid) {
+ var box = document.getElementById('add-exam-box-' + cid);
+ if (!box) return;
+ box.classList.toggle('d-none');
+ if (!box.classList.contains('d-none')) {
+ var inp = document.getElementById('add-exam-input-' + cid);
+ if (inp) inp.focus();
+ }
+}
+function guardarNuevoExamen(cid) {
+ var inp = document.getElementById('add-exam-input-' + cid);
+ var msg = document.getElementById('add-exam-msg-' + cid);
+ if (!inp) return;
+ var name = inp.value.trim();
+ if (!name) { if (msg) msg.innerHTML = 'Ingrese un nombre.'; return; }
+ var base = window.location.href.split('/ver_formulario_enviado.php')[0];
+ fetch(base + '/api/lab/add_exam_option.php', {
+ method: 'POST', headers: {'Content-Type': 'application/json'},
+ body: JSON.stringify({exam_name: name})
+ })
+ .then(function(r) { return r.json(); })
+ .then(function(d) {
+ if (d.ok) {
+ // Añadir radio button al grupo y seleccionarlo
+ var wrap = document.querySelector('[data-campo-id="' + cid + '"]');
+ if (wrap) {
+ var div = document.createElement('div');
+ div.className = 'form-check';
+ div.innerHTML = ''
+ + '