Aplicación web para preparar el perfil de Oficial de Telecomunicaciones de Entrada de ADIF. Incluye contenido de estudio, preguntas originales y un inventario de transcripciones históricas sometidas a controles de publicación y vigencia.
Las transcripciones históricas conservan su procedencia y se mantienen separadas de las preguntas originales. Un registro importado no está necesariamente habilitado: para practicar debe superar los controles de publicación, corrección y vigencia.
La importación inicial contiene 102 apariciones de pregunta procedentes de seis modelos históricos. Hay 72 huellas de contenido distintas y 30 pares de reutilización literal oficial: la reutilización se conserva como apariciones independientes porque pertenece a modelos y claves oficiales diferentes.
| Convocatoria | Perfil | Modelo | Registros importados |
|---|---|---|---|
| PNI23/01 (2023) | 23/05PO | 1433 | 15 |
| PNI23/01 (2023) | 23/05PO | 4101 | 15 |
| PNI24/01 (2024) | 24/05PO | 3403 | 18 |
| PNI24/01 (2024) | 24/05PO | 3413 | 18 |
| PNI25/01 (2025) | 25/10PO | 1131 | 18 |
| PNI25/01 (2025) | 25/10PO | 4104 | 18 |
Los seis modelos se presentan como Parte específica, no como la reproducción de un examen completo. Se excluyen los seis ítems de reserva de 2023 que no disponen de clave A–D publicable. También quedan fuera los cuadernillos psicométricos de acceso privado: una plantilla sin un cuadernillo legible y público no es una fuente suficiente.
La ruta permite filtrar por año, modelo y sección las preguntas que superen los controles de publicación y vigencia. En el estado auditado el 2 de noviembre de 2026 las 102 transcripciones históricas permanecen pendientes de revisión de vigencia y sus plantillas están en link_only; por ello no están habilitadas para práctica. Consulta el estado real.
La ruta de simulacros agrupa las preguntas por modelo y señala su alcance de parte específica. La disponibilidad efectiva depende de los mismos controles de contenido: no se debe interpretar el inventario como un examen completo listo para practicar.
Cada registro publicado incluye, como mínimo:
- Identificador estable, año, convocatoria, código y nombre de perfil, modelo y número original.
- Texto literal del enunciado, cuatro opciones A–D y respuesta de la plantilla correctora.
- Tipo de sección, indicador de reserva, URL de ADIF, página del cuadernillo y página de la plantilla.
- Fecha de verificación y huella SHA-256 de contenido.
El directorio content/official-exams/ es la fuente de mantenimiento: manifest.json identifica los documentos y transcriptions/ conserva las transcripciones revisadas. Antes de publicar un nuevo modelo se debe completar este control:
- Registrar una URL canónica alojada en
www.adif.esy los datos del modelo en el manifiesto. - Transcribir literalmente solo páginas legibles, con cuatro opciones A–D y la respuesta de la plantilla del mismo modelo.
- Revisar visualmente cada registro frente a cuadernillo y plantilla; si existe una duda, no se publica.
- Marcar la cobertura como
specific_partcuando no esté disponible el examen completo. - Ejecutar el importador y revisar que no haya registros publicados rechazados.
pnpm content:import-officialEl importador valida la estructura, la procedencia, los números de pregunta, las opciones, las claves, las huellas y los distractores retirados. Escribe los datos de ejecución en content/questions.json, content/exams.json y content/official-exams/import-report.json.
- Next.js (App Router), React y TypeScript
- Tailwind CSS
- Supabase para autenticación y progreso por usuario
- Vitest para pruebas unitarias y de contrato
- Playwright para recorridos end-to-end
- Node.js 20+
- pnpm
pnpm install
cp .env.example .env.local
# Rellena NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY y los secretos de sesión.
pnpm content:import-official
pnpm devLa configuración de Supabase está en docs/supabase-setup.md.
Al iniciar sesión por primera vez, /onboarding solicita el objetivo semanal, los días preferidos, la duración de sesión y, de forma opcional, la fecha de examen y un diagnóstico inicial. El perfil se puede volver a editar sin borrar el historial. Hasta completar este paso, las rutas autenticadas conservan el destino solicitado y conducen al onboarding.
El panel reconstruye en el servidor un plan diario determinista a partir del contenido activo y del historial del usuario; el plan no se almacena. Prioriza repasos vencidos o en riesgo, lecciones pendientes y práctica oficial con una distribución objetivo 40/35/25, un máximo del 60% del tiempo para repasos y desempates estables. Las acciones de aplazar o reemplazar son preferencias append-only del día de Madrid y no pueden activar contenido retirado ni ampliar la duración disponible.
/repasos carga el backlog completo de conceptos activos vencidos o en riesgo. La respuesta permanece oculta hasta que el usuario intenta explicarla y solo muestra las afirmaciones auditadas del concepto. Las valoraciones 0–3 actualizan el intervalo de repaso mediante el RPC autenticado e idempotente record_recall_review; un reintento incierto conserva exactamente el concepto, la valoración y el UUID del evento.
El estado de preparación sintetiza cobertura, dominio vigente, retención diferida, precisión, velocidad, simulacros y racha. Sus niveles son una orientación explicable basada en evidencia; no son una probabilidad, predicción ni garantía de aprobar. Cuando no se alcanzan 20 preguntas activas distintas y 10 conceptos revisados, la interfaz indica expresamente que la evidencia es insuficiente.
En una instalación nueva o existente se aplican, en este orden, las migraciones versionadas:
202608020001_study_schema.sql202608100002_atomic_simulation_submission.sql202608110003_adaptive_learning_core.sql202608110004_atomic_review_persistence.sql202608110005_daily_plan_actions_rpc.sql
supabase db push respeta ese orden. Consulta la guía de Supabase antes de regenerar tipos o ejecutar las pruebas pgTAP.
Ejecuta estas comprobaciones en este orden antes de publicar cambios de contenido, lógica adaptativa o interfaz:
pnpm verify:content
pnpm lint
pnpm typecheck
pnpm test
pnpm exec playwright test
pnpm build
git diff --checkapp/ # Rutas de Next.js
components/ # Componentes de interfaz
content/official-exams/ # Manifiesto, transcripciones revisadas e informe de importación
content/ # Banco publicado y contenido de curso
lib/ # Esquemas, repositorios y lógica de dominio
scripts/ # Importadores de contenido
supabase/ # Migraciones y pruebas de base de datos
tests/ # Pruebas unitarias e integración
e2e/ # Pruebas end-to-end
docs/ # Especificaciones y guías
Proyecto privado de estudio.