Esquema visual

1. Representación de la información

2. Sistema de información

3. Arquitectura de ordenadores

4. Modelos y clasificación

5. Componentes internos

Diagramas

DFD (Diagrama de Flujo de Datos)

flowchart LR U[Usuario funcionario] -->|Solicitud| P1[Proceso: Portal de Tramitación] P1 -->|Consulta datos| D1[(BD Expedientes)] D1 -->|Datos expediente| P1 P1 -->|Genera validación| P2[Proceso: Motor de Reglas] P2 -->|Resultado validación| P1 P1 -->|Notificación| U P1 -->|Intercambio| E1[Servicio AGE] E1 -->|Respuesta| P1 style P1 fill:#eef2ff,stroke:#6366f1,stroke-width:2px,color:#111827 style D1 fill:#ecfeff,stroke:#0891b2,stroke-width:2px,color:#111827 style P2 fill:#ecfdf5,stroke:#16a34a,stroke-width:2px,color:#111827 style E1 fill:#fef2f2,stroke:#dc2626,stroke-width:2px,color:#111827

ERD o MER (Modelo Entidad-Relación)

erDiagram OPOSICION ||--o{ BLOQUE : contiene BLOQUE ||--o{ TEMA : agrupa TEMA ||--o{ PREGUNTA : incluye PREGUNTA ||--o{ RESPUESTA : tiene USUARIO ||--o{ SESION_TEST : realiza SESION_TEST ||--o{ RESULTADO_PREGUNTA : registra PREGUNTA ||--o{ RESULTADO_PREGUNTA : evalua OPOSICION { string id string nombre string cuerpo } BLOQUE { string id string nombre int orden } TEMA { string id string titulo string bloque_id } PREGUNTA { string id string enunciado string dificultad string tema_id } RESPUESTA { string id string texto boolean es_correcta string pregunta_id } USUARIO { string id string nombre string email } SESION_TEST { string id date fecha_inicio date fecha_fin string usuario_id } RESULTADO_PREGUNTA { string id boolean acertada int tiempo_segundos string pregunta_id string sesion_id }

Vista lógica resumida

flowchart LR A[OPOSICION] B[BLOQUE] C[TEMA] D[PREGUNTA] E[RESPUESTA] F[USUARIO] G[SESION_TEST] H[RESULTADO_PREGUNTA] A --> B --> C --> D --> E F --> G --> H D --> H classDef info fill:#eef2ff,stroke:#6366f1,stroke-width:2px,color:#111827; classDef ok fill:#ecfdf5,stroke:#16a34a,stroke-width:2px,color:#111827; classDef warn fill:#fffbeb,stroke:#d97706,stroke-width:2px,color:#111827; class A,B,C info; class D,E ok; class F,G,H warn;

Diagrama de Clases

classDiagram class Usuario { +String id +String nombre +login() +cerrarSesion() } class Oposicion { +String id +String nombre +cargarBloques() } class Bloque { +String id +String nombre +listarTemas() } class Tema { +String id +String titulo +listarPreguntas() } class Pregunta { +String id +String enunciado +validarRespuesta() } class SesionTest { +String id +Date inicio +Date fin +iniciar() +finalizar() +calcularNota() } class MotorCorreccion { +corregir() +generarMetricas() } Usuario --> SesionTest : realiza Oposicion --> Bloque : contiene Bloque --> Tema : contiene Tema --> Pregunta : contiene SesionTest --> Pregunta : presenta SesionTest --> MotorCorreccion : usa

Diagrama de Objetos

classDiagram class usuarioDiego { id = "u-001" nombre = "Diego" rol = "opositor" } class oposicionTAI { id = "op-TAI" nombre = "TAI AGE" } class bloque1 { id = "B1" nombre = "Organización del Estado" } class tema1 { id = "B1-T01" titulo = "La Constitución Española" } class pregunta101 { id = "P-101" dificultad = "media" } class sesion01 { id = "S-2026-001" estado = "en curso" } usuarioDiego --> sesion01 : realiza oposicionTAI --> bloque1 : contiene bloque1 --> tema1 : contiene tema1 --> pregunta101 : contiene sesion01 --> pregunta101 : responde

Diagrama de Despliegue (Deployment)

flowchart TB subgraph Cliente A[Portátil opositor] B[Móvil opositor] end subgraph DMZ C[CDN / WAF] D[NGINX / Reverse Proxy] end subgraph CPD_Apps E[Frontend Astro] F[API FastAPI] G[Servicio Auth] end subgraph CPD_Datos H[(PostgreSQL)] I[(Redis)] J[(Qdrant)] end A --> C B --> C C --> D D --> E E --> F F --> G F --> H F --> I F --> J

Diagrama de Paquetes

flowchart LR subgraph Presentacion A1[pages] A2[components] A3[layouts] end subgraph Aplicacion B1[services] B2[use-cases] B3[controllers] end subgraph Dominio C1[entities] C2[value-objects] C3[repositories] end subgraph Infraestructura D1[postgres-adapter] D2[redis-adapter] D3[http-clients] D4[telemetry] end Presentacion --> Aplicacion Aplicacion --> Dominio Aplicacion --> Infraestructura Infraestructura --> Dominio

Diagrama de Casos de Uso

flowchart LR U1[Actor: Opositor] U2[Actor: Administrador] U3[Actor: Servicio AGE] UC1((Registrarse)) UC2((Iniciar sesión)) UC3((Seleccionar oposición)) UC4((Realizar test)) UC5((Consultar métricas)) UC6((Publicar preguntas)) UC7((Sincronizar datos externos)) U1 --> UC1 U1 --> UC2 U1 --> UC3 U1 --> UC4 U1 --> UC5 U2 --> UC6 U3 --> UC7

Diagrama de Actividades

flowchart TD A[Inicio] --> B[Seleccionar oposición] B --> C[Elegir bloque o tema] C --> D[Configurar modo de test] D --> E[Iniciar sesión] E --> F[Responder preguntas] F --> G{¿Quedan preguntas?} G -- Sí --> F G -- No --> H[Corregir examen] H --> I[Calcular nota y métricas] I --> J[Guardar resultados] J --> K[Fin]

Diagrama de Estados (Máquina de Estados)

stateDiagram-v2 [*] --> Borrador Borrador --> Publicado : publicar Publicado --> EnCurso : iniciar_test EnCurso --> Pausado : pausar Pausado --> EnCurso : reanudar EnCurso --> Corregido : finalizar Corregido --> Archivado : cerrar_convocatoria Archivado --> [*]

Diagrama de Secuencia

sequenceDiagram actor O as Opositor participant W as Web Astro participant A as API participant B as BD PostgreSQL participant C as Motor Corrección O->>W: Inicia test W->>A: Solicita preguntas A->>B: Consulta banco B-->>A: Devuelve preguntas A-->>W: Respuesta JSON O->>W: Envía respuestas W->>A: Remite respuestas A->>C: Corregir examen C-->>A: Nota y métricas A->>B: Guarda resultados A-->>W: Resultado final W-->>O: Muestra nota

Diagrama de Comunicación (antes Colaboración)

flowchart LR U[1 Opositor] W[2 Web] A[3 API] C[4 Motor de correccion] B[5 Base de datos] U -->|1 Iniciar test| W W -->|2 Solicitar preguntas| A A -->|3 Leer banco| B B -->|4 Devolver preguntas| A A -->|5 Enviar test| W W -->|6 Enviar respuestas| A A -->|7 Corregir examen| C C -->|8 Resultado| A A -->|9 Guardar resultado| B A -->|10 Mostrar resultado| W

Diagrama de Tiempos (Timing)

gantt title Línea temporal de una sesión de test TAI dateFormat HH:mm axisFormat %H:%M section Sesión Login :done, 08:00, 5m Carga de preguntas :done, 08:05, 3m Resolución bloque 1 :active, 08:08, 20m Resolución bloque 2 : 08:28, 20m Corrección : 08:48, 5m Visualización nota : 08:53, 2m

BPMN (Business Process Model and Notation)

flowchart LR A((Inicio)) --> B[Recibir convocatoria] B --> C[Publicar oposición] C --> D[Alta de temario] D --> E[Generar banco de preguntas] E --> F[Validar calidad] F --> G{¿Validado?} G -- No --> H[Corregir contenido] H --> F G -- Sí --> I[Publicar test] I --> J[Uso por opositores] J --> K[Recoger métricas] K --> L((Fin))

Diagrama de Gantt

gantt title Plan de implantación de plataforma TAI dateFormat YYYY-MM-DD section Análisis Requisitos :a1, 2026-03-15, 5d Diseño funcional :a2, after a1, 4d section Desarrollo Frontend Astro :b1, after a2, 7d API y servicios :b2, after a2, 8d Integración autenticación :b3, after b2, 4d section QA Pruebas funcionales :c1, after b1, 5d Pruebas rendimiento :c2, after c1, 3d section Producción Despliegue :d1, after c2, 2d Monitorización :d2, after d1, 2d

Diagrama de Pert / CPM

flowchart LR A[Inicio proyecto] --> B[Análisis requisitos] B --> C[Diseño arquitectura] C --> D[Desarrollo frontend] C --> E[Desarrollo backend] D --> F[Integración] E --> F F --> G[Pruebas] G --> H[Despliegue] H --> I[Fin] classDef critical fill:#fdd,stroke:#900,stroke-width:2px; class A,B,C,E,F,G,H,I critical;

Diagrama de Ishikawa (Espina de pescado)

flowchart LR A[Fallo en rendimiento del test online] B[Personas] C[Procesos] D[Software] E[Infraestructura] F[Datos] G[Configuración] B1[Falta de revisión QA] B2[Errores de carga manual] C1[Pipeline incompleto] C2[Sin pruebas de estrés] D1[Consultas lentas] D2[Render bloqueante] E1[CPU saturada] E2[Latencia CPD] F1[Preguntas duplicadas] F2[Índices ausentes] G1[Cache mal ajustada] G2[Timeout bajo] B --> B1 --> A B --> B2 --> A C --> C1 --> A C --> C2 --> A D --> D1 --> A D --> D2 --> A E --> E1 --> A E --> E2 --> A F --> F1 --> A F --> F2 --> A G --> G1 --> A G --> G2 --> A

Diagrama de Pareto

xychart-beta title "Pareto de incidencias en la plataforma TAI" x-axis ["Duplicados", "Scope roto", "Temas vacíos", "Render MDX", "Cache", "SEO"] y-axis "Número de incidencias" 0 --> 50 bar [45, 30, 18, 12, 8, 5] line [45, 75, 93, 105, 113, 118]

Diagrama o esquema de red

flowchart TB INTERNET[Internet] FW1[Firewall perimetral] LB[Balanceador] WAF[WAF] WEB1[Web Node 1] WEB2[Web Node 2] API1[API Node 1] API2[API Node 2] DB[(PostgreSQL HA)] REDIS[(Redis)] MON[Prometheus/Grafana] SIEM[SIEM / Logs] INTERNET --> FW1 FW1 --> WAF WAF --> LB LB --> WEB1 LB --> WEB2 WEB1 --> API1 WEB2 --> API2 API1 --> DB API2 --> DB API1 --> REDIS API2 --> REDIS WEB1 --> MON WEB2 --> MON API1 --> SIEM API2 --> SIEM FW1 --> SIEM