cuestionarios
This commit is contained in:
parent
376641f443
commit
cd371f299e
194
bloque1/tema9.md
194
bloque1/tema9.md
|
|
@ -1,6 +1,9 @@
|
||||||
# Bloque 1 · Tema 9
|
# Bloque 1 · Tema 9
|
||||||
## Instrumentos de acceso electrónico
|
|
||||||
## Sedes electrónicas, canales, identificación y autenticación
|
## Instrumentos de acceso electrónico
|
||||||
|
|
||||||
|
## Sedes electrónicas, canales, identificación y autenticación
|
||||||
|
|
||||||
## Infraestructuras y servicios comunes
|
## Infraestructuras y servicios comunes
|
||||||
|
|
||||||
## Introducción
|
## Introducción
|
||||||
|
|
@ -8,29 +11,32 @@
|
||||||
Los instrumentos de acceso electrónico permiten a la ciudadanía relacionarse con las Administraciones Públicas de forma segura, accesible y eficaz.
|
Los instrumentos de acceso electrónico permiten a la ciudadanía relacionarse con las Administraciones Públicas de forma segura, accesible y eficaz.
|
||||||
|
|
||||||
Este tema es habitual en el examen TAI, especialmente en preguntas sobre:
|
Este tema es habitual en el examen TAI, especialmente en preguntas sobre:
|
||||||
- Conceptos básicos de Administración electrónica.
|
|
||||||
- Diferencias entre identificación y autenticación.
|
* Conceptos básicos de Administración electrónica.
|
||||||
- Función de las sedes electrónicas.
|
* Diferencias entre identificación y autenticación.
|
||||||
- Servicios comunes de la Administración electrónica.
|
* Función de las sedes electrónicas.
|
||||||
|
* Servicios comunes de la Administración electrónica.
|
||||||
|
|
||||||
## 1. Instrumentos de acceso electrónico
|
## 1. Instrumentos de acceso electrónico
|
||||||
|
|
||||||
### 1.1. Concepto
|
### 1.1. Concepto
|
||||||
|
|
||||||
Los instrumentos de acceso electrónico son los medios y herramientas que permiten:
|
Los instrumentos de acceso electrónico son los medios y herramientas que permiten:
|
||||||
- El acceso a los servicios públicos electrónicos.
|
|
||||||
- La interacción segura con las Administraciones Públicas.
|
* El acceso a los servicios públicos electrónicos.
|
||||||
|
* La interacción segura con las Administraciones Públicas.
|
||||||
|
|
||||||
Incluyen:
|
Incluyen:
|
||||||
- Sedes electrónicas.
|
|
||||||
- Canales de acceso.
|
|
||||||
- Sistemas de identificación y autenticación.
|
|
||||||
- Infraestructuras y servicios comunes.
|
|
||||||
|
|
||||||
>### Mini-resumen apartado 1
|
* Sedes electrónicas.
|
||||||
|
* Canales de acceso.
|
||||||
|
* Sistemas de identificación y autenticación.
|
||||||
|
* Infraestructuras y servicios comunes.
|
||||||
|
|
||||||
|
> ### Mini-resumen apartado 1
|
||||||
>
|
>
|
||||||
>- Permiten el acceso electrónico a los servicios públicos.
|
> * Permiten el acceso electrónico a los servicios públicos.
|
||||||
>- Garantizan seguridad, accesibilidad y eficacia.
|
> * Garantizan seguridad, accesibilidad y eficacia.
|
||||||
|
|
||||||
## 2. Sedes electrónicas
|
## 2. Sedes electrónicas
|
||||||
|
|
||||||
|
|
@ -45,129 +51,153 @@ No es una simple página web informativa.
|
||||||
### 2.2. Características y garantías
|
### 2.2. Características y garantías
|
||||||
|
|
||||||
La sede electrónica debe garantizar:
|
La sede electrónica debe garantizar:
|
||||||
- La identificación del titular de la sede.
|
|
||||||
- La integridad de la información publicada.
|
* La identificación del titular de la sede.
|
||||||
- La veracidad y actualización de los contenidos.
|
* La integridad de la información publicada.
|
||||||
- La disponibilidad permanente.
|
* La veracidad y actualización de los contenidos.
|
||||||
- La accesibilidad y la seguridad.
|
* La disponibilidad permanente.
|
||||||
|
* La accesibilidad y la seguridad.
|
||||||
|
|
||||||
La Administración titular es responsable de toda la información y servicios ofrecidos en la sede.
|
La Administración titular es responsable de toda la información y servicios ofrecidos en la sede.
|
||||||
|
|
||||||
### 2.3. Elementos obligatorios de la sede electrónica
|
### 2.3. Elementos obligatorios de la sede electrónica
|
||||||
|
|
||||||
Toda sede electrónica debe incluir, al menos:
|
Toda sede electrónica debe incluir, al menos:
|
||||||
- Identificación de la sede y de su titular.
|
|
||||||
- Sistemas de identificación y firma electrónica.
|
* Identificación de la sede y de su titular.
|
||||||
- Relación de servicios y procedimientos disponibles.
|
* Sistemas de identificación y firma electrónica.
|
||||||
- Fecha y hora oficial, a efectos de cómputo de plazos.
|
* Relación de servicios y procedimientos disponibles.
|
||||||
- Acceso al registro electrónico.
|
* Fecha y hora oficial, a efectos de cómputo de plazos.
|
||||||
- En su caso, enlace al tablón de anuncios o edictos.
|
* Acceso al registro electrónico.
|
||||||
|
* En su caso, enlace al tablón de anuncios o edictos.
|
||||||
|
|
||||||
### 2.4. Diferencia entre sede electrónica y portal de Internet
|
### 2.4. Diferencia entre sede electrónica y portal de Internet
|
||||||
|
|
||||||
Distinción típica de examen:
|
Distinción típica de examen:
|
||||||
|
|
||||||
- Portal de Internet:
|
* Portal de Internet:
|
||||||
- Finalidad informativa.
|
|
||||||
- Contiene noticias, organigramas o guías.
|
|
||||||
- No requiere certificados ni genera efectos jurídicos.
|
|
||||||
|
|
||||||
- Sede electrónica:
|
* Finalidad informativa.
|
||||||
- Finalidad transaccional.
|
* Contiene noticias, organigramas o guías.
|
||||||
- Permite realizar trámites administrativos.
|
* No requiere certificados ni genera efectos jurídicos.
|
||||||
- Genera efectos jurídicos plenos.
|
|
||||||
|
* Sede electrónica:
|
||||||
|
|
||||||
|
* Finalidad transaccional.
|
||||||
|
* Permite realizar trámites administrativos.
|
||||||
|
* Genera efectos jurídicos plenos.
|
||||||
|
|
||||||
### 2.5. Punto de Acceso General (PAG)
|
### 2.5. Punto de Acceso General (PAG)
|
||||||
|
|
||||||
El Punto de Acceso General de la Administración General del Estado actúa como puerta de entrada común a las sedes electrónicas de los distintos organismos.
|
El Punto de Acceso General de la Administración General del Estado actúa como puerta de entrada común a las sedes electrónicas de los distintos organismos.
|
||||||
|
|
||||||
Facilita:
|
Facilita:
|
||||||
- La localización de servicios.
|
|
||||||
- El acceso unificado a las sedes electrónicas.
|
|
||||||
|
|
||||||
>### Mini-resumen apartado 2
|
* La localización de servicios.
|
||||||
|
* El acceso unificado a las sedes electrónicas.
|
||||||
|
|
||||||
|
> ### Mini-resumen apartado 2
|
||||||
>
|
>
|
||||||
>- La sede electrónica es el punto de acceso oficial.
|
> * La sede electrónica es el punto de acceso oficial.
|
||||||
>- Garantiza identidad, integridad y seguridad.
|
> * Garantiza identidad, integridad y seguridad.
|
||||||
>- Es distinta del portal web informativo.
|
> * Es distinta del portal web informativo.
|
||||||
>- El PAG centraliza el acceso a las sedes.
|
> * El PAG centraliza el acceso a las sedes.
|
||||||
|
|
||||||
## 3. Canales de acceso
|
## 3. Canales de acceso
|
||||||
|
|
||||||
### 3.1. Tipos de canales
|
### 3.1. Tipos de canales
|
||||||
|
|
||||||
Las Administraciones Públicas pueden ofrecer:
|
Las Administraciones Públicas pueden ofrecer:
|
||||||
- Canal presencial.
|
|
||||||
- Canal telefónico.
|
* Canal presencial.
|
||||||
- Canal electrónico.
|
* Canal telefónico.
|
||||||
|
* Canal electrónico.
|
||||||
|
|
||||||
Los canales deben ser:
|
Los canales deben ser:
|
||||||
- Accesibles.
|
|
||||||
- Interoperables.
|
* Accesibles.
|
||||||
- Seguros.
|
* Interoperables.
|
||||||
|
* Seguros.
|
||||||
|
|
||||||
> ### Mini-resumen apartado 3
|
> ### Mini-resumen apartado 3
|
||||||
>- Existen varios canales de acceso.
|
>
|
||||||
>- El canal electrónico es esencial en la Administración actual.
|
> * Existen varios canales de acceso.
|
||||||
|
> * El canal electrónico es esencial en la Administración actual.
|
||||||
|
|
||||||
## 4. Identificación y autenticación
|
## 4. Identificación y autenticación
|
||||||
|
|
||||||
### 4.1. Identificación electrónica
|
### 4.1. Identificación electrónica
|
||||||
|
|
||||||
La identificación electrónica permite conocer:
|
La identificación electrónica permite conocer:
|
||||||
- Quién es la persona que accede al servicio.
|
|
||||||
|
* Quién es la persona que accede al servicio.
|
||||||
|
|
||||||
Sistemas admitidos:
|
Sistemas admitidos:
|
||||||
- Certificados electrónicos.
|
|
||||||
- DNI electrónico.
|
* Certificados electrónicos.
|
||||||
- Sistemas de claves concertadas (Cl@ve).
|
* DNI electrónico.
|
||||||
- Otros sistemas admitidos por las Administraciones Públicas.
|
* Sistemas de claves concertadas (Cl@ve).
|
||||||
|
* Otros sistemas admitidos por las Administraciones Públicas.
|
||||||
|
|
||||||
### 4.2. Autenticación electrónica
|
### 4.2. Autenticación electrónica
|
||||||
|
|
||||||
La autenticación electrónica permite:
|
La autenticación electrónica permite:
|
||||||
- Verificar la identidad declarada por el usuario.
|
|
||||||
- Confirmar que la persona es quien dice ser.
|
* Verificar la identidad declarada por el usuario.
|
||||||
|
* Confirmar que la persona es quien dice ser.
|
||||||
|
|
||||||
Identificación y autenticación son conceptos relacionados, pero no idénticos.
|
Identificación y autenticación son conceptos relacionados, pero no idénticos.
|
||||||
|
|
||||||
>### Mini-resumen apartado 4
|
> ### Mini-resumen apartado 4
|
||||||
>
|
>
|
||||||
>- Identificación: quién es el usuario.
|
> * Identificación: quién es el usuario.
|
||||||
>- Autenticación: verificación de esa identidad.
|
> * Autenticación: verificación de esa identidad.
|
||||||
>- Se utilizan distintos sistemas electrónicos.
|
> * Se utilizan distintos sistemas electrónicos.
|
||||||
|
|
||||||
## 5. Infraestructuras y servicios comunes
|
## 5. Infraestructuras y servicios comunes
|
||||||
|
|
||||||
### 5.1. Concepto
|
### 5.1. Concepto
|
||||||
|
|
||||||
Las infraestructuras y servicios comunes son plataformas compartidas que:
|
Las infraestructuras y servicios comunes son plataformas compartidas que:
|
||||||
- Facilitan la prestación de servicios electrónicos.
|
|
||||||
- Evitan duplicidades entre Administraciones.
|
* Facilitan la prestación de servicios electrónicos.
|
||||||
- Garantizan interoperabilidad y seguridad.
|
* Evitan duplicidades entre Administraciones.
|
||||||
|
* Garantizan interoperabilidad y seguridad.
|
||||||
|
|
||||||
### 5.2. Principales servicios comunes
|
### 5.2. Principales servicios comunes
|
||||||
|
|
||||||
Entre los más relevantes:
|
Entre los más relevantes (muy preguntados en examen):
|
||||||
|
|
||||||
- Cl@ve: sistema común de identificación y firma.
|
* **Cl@ve**: sistema común de identificación y firma electrónica.
|
||||||
- @firma: validación de certificados y firmas electrónicas.
|
* **@firma**: validación de certificados y firmas electrónicas.
|
||||||
- SIR: Sistema de Interconexión de Registros.
|
* **SIR**: Sistema de Interconexión de Registros.
|
||||||
- DIR3: directorio común de unidades orgánicas.
|
* **DIR3**: directorio común de unidades orgánicas, oficinas y unidades.
|
||||||
- Plataforma de Intermediación de Datos.
|
* **Plataforma de Intermediación de Datos**: consulta de datos entre Administraciones sin pedirlos al ciudadano.
|
||||||
- Notifica: servicio común de notificaciones electrónicas.
|
* **Notifica / DEHú**: servicio común de notificaciones electrónicas.
|
||||||
|
* **FACe / FACeB2B**: punto general de entrada de facturas electrónicas.
|
||||||
|
* **GEISER / ORVE**: gestión y digitalización del registro.
|
||||||
|
* **SOROLLA2**: sistema común de gestión económico‑presupuestaria y gastos.
|
||||||
|
* **NÓMINAe**: **solución común para la gestión de la nómina de los empleados públicos**.
|
||||||
|
|
||||||
>### Mini-resumen apartado 5
|
⚠️ **Trampa típica de examen**:
|
||||||
|
|
||||||
|
* *NÓMINAe* → nóminas de personal.
|
||||||
|
* *SOROLLA2* → presupuestos y gastos (**no** nóminas).
|
||||||
|
|
||||||
|
> ### Mini-resumen apartado 5
|
||||||
>
|
>
|
||||||
>- Servicios compartidos por las Administraciones.
|
> * Servicios compartidos por las Administraciones.
|
||||||
>- Facilitan interoperabilidad y eficiencia.
|
> * Facilitan interoperabilidad y eficiencia.
|
||||||
>- Muy habituales en preguntas tipo test.
|
> * Incluyen aplicaciones transversales como NÓMINAe y SOROLLA2.
|
||||||
|
> * Muy habituales en preguntas tipo test.
|
||||||
|
|
||||||
>## Mini-resumen final del tema
|
> ## Mini-resumen final del tema
|
||||||
>
|
>
|
||||||
>- Los instrumentos de acceso permiten la relación electrónica.
|
> * Los instrumentos de acceso permiten la relación electrónica.
|
||||||
>- La sede electrónica es el acceso oficial con efectos jurídicos.
|
> * La sede electrónica es el acceso oficial con efectos jurídicos.
|
||||||
>- El portal es solo informativo.
|
> * El portal es solo informativo.
|
||||||
>- Identificación y autenticación no son lo mismo.
|
> * Identificación y autenticación no son lo mismo.
|
||||||
>- Existen servicios comunes para evitar duplicidades.
|
> * Existen infraestructuras y servicios comunes de la AGE.
|
||||||
>- Tema muy frecuente por conceptos y ejemplos prácticos.
|
> * **NÓMINAe gestiona nóminas; SOROLLA2 gestiona presupuestos**.
|
||||||
|
> * Tema muy frecuente por conceptos y ejemplos prácticos.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,37 +1,122 @@
|
||||||
|
/* --- VARIABLES DE COLOR (Estilo VS Code Dark) --- */
|
||||||
|
:root {
|
||||||
|
--bg-color: #1e1e1e;
|
||||||
|
--text-color: #d4d4d4;
|
||||||
|
--accent-color: #007acc;
|
||||||
|
--titulos-color: #4ec9b0;
|
||||||
|
--border-color: #3b3b3b;
|
||||||
|
--card-bg: #252526;
|
||||||
|
--hover-bg: #2a2d2e;
|
||||||
|
--success: #6a9955;
|
||||||
|
--error: #f44747;
|
||||||
|
--warning: #d7ba7d;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- ESTILOS GENERALES --- */
|
||||||
body {
|
body {
|
||||||
font-family: system-ui;
|
font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
|
||||||
max-width: 800px;
|
font-size: 1.1rem;
|
||||||
margin: 2rem auto;
|
line-height: 1.6;
|
||||||
line-height: 1.6;
|
color: var(--text-color);
|
||||||
|
background-color: var(--bg-color);
|
||||||
|
margin: 2rem auto;
|
||||||
|
max-width: 850px;
|
||||||
|
padding: 0 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
color: var(--titulos-color);
|
||||||
|
text-align: center;
|
||||||
|
border-bottom: 2px solid var(--accent-color);
|
||||||
|
padding-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- SELECTOR Y BOTONES --- */
|
||||||
|
select, button {
|
||||||
|
background-color: var(--card-bg);
|
||||||
|
color: var(--text-color);
|
||||||
|
border: 1px solid var(--border-color);
|
||||||
|
padding: 10px 15px;
|
||||||
|
border-radius: 4px;
|
||||||
|
font-size: 1rem;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
select:focus, button:hover {
|
||||||
|
border-color: var(--accent-color);
|
||||||
|
background-color: var(--hover-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
button#aleatoria {
|
||||||
|
background-color: var(--accent-color);
|
||||||
|
color: white;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- TARJETA DE PREGUNTA --- */
|
||||||
.pregunta {
|
.pregunta {
|
||||||
border: 1px solid #ddd;
|
background-color: var(--card-bg);
|
||||||
padding: 1rem;
|
border: 1px solid var(--border-color);
|
||||||
margin-bottom: 1rem;
|
padding: 2rem;
|
||||||
border-radius: 8px;
|
margin-top: 2rem;
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 0 4px 15px rgba(0,0,0,0.3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.pregunta p strong {
|
||||||
|
color: var(--titulos-color);
|
||||||
|
font-size: 1.2rem;
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- OPCIONES (Efecto lista de terminal) --- */
|
||||||
.opcion {
|
.opcion {
|
||||||
display: block;
|
display: block;
|
||||||
margin: .25rem 0;
|
padding: 12px 15px;
|
||||||
|
margin: 8px 0;
|
||||||
|
background: var(--bg-color);
|
||||||
|
border: 1px solid transparent;
|
||||||
|
border-radius: 5px;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: 0.2s;
|
||||||
}
|
}
|
||||||
|
|
||||||
#corregir {
|
.opcion:hover {
|
||||||
margin-top: 1rem;
|
border-color: var(--accent-color);
|
||||||
padding: .5rem 1rem;
|
background: var(--hover-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
#pregunta-actual {
|
.opcion input[type="radio"] {
|
||||||
margin-top: 2rem;
|
margin-right: 12px;
|
||||||
|
accent-color: var(--accent-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- FEEDBACK Y RESULTADOS --- */
|
||||||
|
#resultado {
|
||||||
|
margin: 20px 0;
|
||||||
|
padding: 15px;
|
||||||
|
border-radius: 5px;
|
||||||
|
border: 2px solid var(--border-color);
|
||||||
|
background: var(--bg-color);
|
||||||
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#feedback {
|
#feedback {
|
||||||
margin-top: 1rem;
|
margin-top: 1.5rem;
|
||||||
font-weight: bold;
|
padding: 10px;
|
||||||
font-size: 1.2rem;
|
border-radius: 4px;
|
||||||
|
text-align: center;
|
||||||
|
font-family: 'Consolas', monospace;
|
||||||
}
|
}
|
||||||
|
|
||||||
#quiz:empty {
|
/* --- ANIMACIÓN DE CARGA --- */
|
||||||
display: none;
|
@keyframes fadeIn {
|
||||||
|
from { opacity: 0; transform: translateY(10px); }
|
||||||
|
to { opacity: 1; transform: translateY(0); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.pregunta {
|
||||||
|
animation: fadeIn 0.3s ease-out;
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -19,10 +19,10 @@
|
||||||
|
|
||||||
<div id="quiz"></div>
|
<div id="quiz"></div>
|
||||||
|
|
||||||
<button id="corregir">Corregir</button>
|
<!--<button id="corregir">Corregir</button>-->
|
||||||
<div id="resultado"></div>
|
<div id="resultado"></div>
|
||||||
|
|
||||||
<button id="aleatoria">Pregunta aleatoria</button>
|
<!--<button id="aleatoria">Pregunta aleatoria</button>-->
|
||||||
|
|
||||||
<div id="pregunta-actual"></div>
|
<div id="pregunta-actual"></div>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,102 +1,110 @@
|
||||||
const selector = document.getElementById("selector");
|
const selector = document.getElementById("selector");
|
||||||
const quiz = document.getElementById("quiz");
|
const quiz = document.getElementById("quiz");
|
||||||
const resultado = document.getElementById("resultado");
|
const resultado = document.getElementById("resultado");
|
||||||
|
const feedback = document.getElementById("feedback");
|
||||||
|
const preguntaActualContenedor = document.getElementById("pregunta-actual");
|
||||||
|
|
||||||
let preguntasCargadas = []; // aquí guardamos el JSON cargado
|
let preguntasCargadas = [];
|
||||||
|
let estado = {
|
||||||
|
indiceActual: 0,
|
||||||
|
aciertos: 0,
|
||||||
|
fallos: 0
|
||||||
|
};
|
||||||
|
|
||||||
// --- CARGAR EXAMEN ---
|
// --- CARGAR EXAMEN ---
|
||||||
selector.addEventListener("change", async () => {
|
selector.addEventListener("change", async () => {
|
||||||
const url = selector.value;
|
const url = selector.value;
|
||||||
if (!url) return;
|
if (!url) return;
|
||||||
|
|
||||||
preguntasCargadas = await fetch(url).then(r => r.json());
|
const datos = await fetch(url).then(r => r.json());
|
||||||
mostrarPreguntas(preguntasCargadas); // modo examen normal
|
// Ajustamos por si el JSON viene con una propiedad .preguntas o es un array directo
|
||||||
|
preguntasCargadas = datos.preguntas || datos;
|
||||||
|
|
||||||
|
reiniciarEstadisticas();
|
||||||
|
mostrarSiguientePregunta();
|
||||||
});
|
});
|
||||||
|
|
||||||
// --- MOSTRAR TODAS LAS PREGUNTAS ---
|
function reiniciarEstadisticas() {
|
||||||
function mostrarPreguntas(preguntas) {
|
estado.indiceActual = 0;
|
||||||
quiz.innerHTML = "";
|
estado.aciertos = 0;
|
||||||
document.getElementById("pregunta-actual").innerHTML = "";
|
estado.fallos = 0;
|
||||||
document.getElementById("feedback").textContent = "";
|
quiz.innerHTML = ""; // Limpiamos el modo "lista completa"
|
||||||
|
resultado.textContent = "";
|
||||||
|
}
|
||||||
|
|
||||||
preguntas.forEach(p => {
|
// --- MOSTRAR UNA POR UNA ---
|
||||||
const div = document.createElement("div");
|
function mostrarSiguientePregunta() {
|
||||||
div.className = "pregunta";
|
feedback.textContent = "";
|
||||||
|
|
||||||
|
if (estado.indiceActual >= preguntasCargadas.length) {
|
||||||
|
finalizarExamen();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
div.innerHTML = `
|
const p = preguntasCargadas[estado.indiceActual];
|
||||||
<p><strong>${p.id}.</strong> ${p.pregunta}</p>
|
actualizarMarcador();
|
||||||
${Object.entries(p.opciones).map(([letra, texto]) => `
|
|
||||||
<label class="opcion">
|
preguntaActualContenedor.innerHTML = `
|
||||||
<input type="radio" name="p${p.id}" value="${letra}">
|
<div class="pregunta">
|
||||||
${letra}) ${texto}
|
<p><strong>Pregunta ${estado.indiceActual + 1} de ${preguntasCargadas.length}</strong></p>
|
||||||
</label>
|
<p>${p.pregunta}</p>
|
||||||
`).join("")}
|
${Object.entries(p.opciones).map(([letra, texto]) => `
|
||||||
|
<label class="opcion">
|
||||||
|
<input type="radio" name="respuesta" value="${letra}">
|
||||||
|
${letra}) ${texto}
|
||||||
|
</label>
|
||||||
|
`).join("")}
|
||||||
|
<br>
|
||||||
|
<button id="comprobar">Comprobar y Siguiente</button>
|
||||||
|
</div>
|
||||||
`;
|
`;
|
||||||
|
|
||||||
quiz.appendChild(div);
|
document.getElementById("comprobar").onclick = () => validarRespuesta(p);
|
||||||
});
|
|
||||||
|
|
||||||
document.getElementById("corregir").onclick = () => corregir(preguntas);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- CORREGIR EXAMEN COMPLETO ---
|
function validarRespuesta(p) {
|
||||||
function corregir(preguntas) {
|
|
||||||
let aciertos = 0;
|
|
||||||
|
|
||||||
preguntas.forEach(p => {
|
|
||||||
const marcada = document.querySelector(`input[name="p${p.id}"]:checked`);
|
|
||||||
if (marcada && marcada.value === p.correcta) aciertos++;
|
|
||||||
});
|
|
||||||
|
|
||||||
resultado.textContent = `Has acertado ${aciertos} de ${preguntas.length}.`;
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- MODO PREGUNTA ALEATORIA ---
|
|
||||||
document.getElementById("aleatoria").addEventListener("click", () => {
|
|
||||||
if (preguntasCargadas.length === 0) {
|
|
||||||
alert("Primero selecciona un examen");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const pregunta = preguntasCargadas[Math.floor(Math.random() * preguntasCargadas.length)];
|
|
||||||
mostrarPreguntaAleatoria(pregunta);
|
|
||||||
});
|
|
||||||
|
|
||||||
// --- MOSTRAR UNA PREGUNTA ALEATORIA ---
|
|
||||||
function mostrarPreguntaAleatoria(p) {
|
|
||||||
quiz.innerHTML = ""; // ocultamos el examen completo
|
|
||||||
resultado.textContent = "";
|
|
||||||
|
|
||||||
const cont = document.getElementById("pregunta-actual");
|
|
||||||
const feedback = document.getElementById("feedback");
|
|
||||||
feedback.textContent = "";
|
|
||||||
|
|
||||||
cont.innerHTML = `
|
|
||||||
<div class="pregunta">
|
|
||||||
<p><strong>${p.id}.</strong> ${p.pregunta}</p>
|
|
||||||
${Object.entries(p.opciones).map(([letra, texto]) => `
|
|
||||||
<label class="opcion">
|
|
||||||
<input type="radio" name="respuesta" value="${letra}">
|
|
||||||
${letra}) ${texto}
|
|
||||||
</label>
|
|
||||||
`).join("")}
|
|
||||||
<button id="comprobar">Comprobar</button>
|
|
||||||
</div>
|
|
||||||
`;
|
|
||||||
|
|
||||||
document.getElementById("comprobar").onclick = () => {
|
|
||||||
const marcada = document.querySelector(`input[name="respuesta"]:checked`);
|
const marcada = document.querySelector(`input[name="respuesta"]:checked`);
|
||||||
|
|
||||||
if (!marcada) {
|
if (!marcada) {
|
||||||
feedback.textContent = "Selecciona una respuesta";
|
feedback.textContent = "⚠️ Por favor, selecciona una opción.";
|
||||||
return;
|
feedback.style.color = "orange";
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (marcada.value === p.correcta) {
|
if (marcada.value === p.correcta) {
|
||||||
feedback.textContent = "✔ ¡Correcto!";
|
estado.aciertos++;
|
||||||
feedback.style.color = "green";
|
alert("✔ ¡Correcto!"); // Opcional, puedes usar el div feedback
|
||||||
} else {
|
} else {
|
||||||
feedback.textContent = `✘ Incorrecto. La correcta era: ${p.correcta}`;
|
estado.fallos++;
|
||||||
feedback.style.color = "red";
|
alert(`✘ Incorrecto. La respuesta era la ${p.correcta.toUpperCase()}`);
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
estado.indiceActual++;
|
||||||
|
mostrarSiguientePregunta();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function actualizarMarcador() {
|
||||||
|
// Calculamos la puntuación estilo TAI (Aciertos - Fallos/3)
|
||||||
|
const puntos = (estado.aciertos - (estado.fallos / 3)).toFixed(2);
|
||||||
|
resultado.innerHTML = `
|
||||||
|
<div>
|
||||||
|
Aciertos: <span style="color: green">${estado.aciertos}</span> |
|
||||||
|
Fallos: <span style="color: red">${estado.fallos}</span> |
|
||||||
|
<strong>Puntuación neta: ${puntos}</strong>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function finalizarExamen() {
|
||||||
|
preguntaActualContenedor.innerHTML = "<h2>¡Examen finalizado!</h2>";
|
||||||
|
const notaFinal = ((estado.aciertos - (estado.fallos / 3)) / preguntasCargadas.length * 10).toFixed(2);
|
||||||
|
|
||||||
|
resultado.innerHTML = `
|
||||||
|
<div style="font-size: 1.2em; border: 2px solid #333; padding: 20px;">
|
||||||
|
<h3>Resumen Final:</h3>
|
||||||
|
<p>Aciertos: ${estado.aciertos}</p>
|
||||||
|
<p>Fallos: ${estado.fallos}</p>
|
||||||
|
<p>Nota sobre 10: <strong>${notaFinal}</strong></p>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue