Cursos Temas Contenido (1, 2, 3, 4, 5, 6, 7) - [temas_contenido] 🧾 Descripción Obtiene todo el contenido asociado a un Tema de Capacitación , enriqueciendo la información con: URL del video (si el contenido es Video) Texto o enlace procesado del artículo (si el contenido es Article) Cantidad de intentos realizados en un quiz por un estudiante (si corresponde) El servicio puede opcionalmente recibir el DNI del estudiante , para verificar su progreso (intentos de quiz). Este servicio integra información desde varios recursos del ERP: Topic Video Article Student Quiz Activity 🚀 Endpoint GET /temas-contenido 📌 Parámetros vía request: Parámetro Tipo Obligatorio Descripción tema string ✔️ Nombre del Topic a consultar dni string ❌ DNI del estudiante para obtener intentos de quiz 🔐 Seguridad Requiere autenticación interna vía: $this ->general-> ServiceErp (...) No necesita token del cliente, se usa credencial del backend. 🧠 Flujo del Servicio (Resumen real) 1️⃣ Si viene DNI → Obtener datos del estudiante Consulta: GET Student ? limit = None &fields=["name","puesto"] &filters=[["enabled","=", 1 ],["dni","like","%{dni}%"]] Guarda name del estudiante si existe. 2️⃣ Obtener el tema solicitado GET Topic/{tema} Debe existir; si no, devuelve:  { "valor" : false , "msn" : "No se encontró el tema del curso" } 3️⃣ Recorrer cada elemento de “topic_content” Para cada ítem: 📽 Si es Video: GET Video /{content_id} Agrega:  "url" : "" 📄 Si es Article: GET Article /{content_id} Se extrae contenido sin HTML ( strip_tags ) Si dentro del texto hay un link, se devuelve solo ese link Se agrega: "url" : "" ❓ Si es Quiz y hay estudiante: GET Quiz Activity ?filters= [["quiz","=",content_id],["student","=", estudiante]] Agrega:  "quiz_attempts" : Si no hay estudiante o no es quiz:  "quiz_attempts" : 0 4️⃣ Retornar todos los contenidos enriquecidos 📥 Request Body (ejemplo) { "tema" : "TOPIC-001" , "dni" : "12345678" } 📤 Response 200 – Ejemplo { "valor" : true , "data" : [ { "content_type" : "Video" , "content" : "VID-01" , "url" : "https://erp/video1.mp4" , "quiz_attempts" : 0 } , { "content_type" : "Article" , "content" : "ART-01" , "url" : "https://articulo.com/content" , "quiz_attempts" : 0 } , { "content_type" : "Quiz" , "content" : "QUIZ-01" , "quiz_attempts" : 2 } ] } ❗ Posibles Errores 1. Tema no encontrado { "valor" : false , "msn" : "No se encontró el tema del curso" } 2. Estudiante no existe (cuando se envía DNI) No genera error, simplemente no agrega intentos de quiz. 3. Contenido sin URL o datos incompletos El servicio ignora valores faltantes y continúa procesando. 4. Error del servidor { "valor" : false , "msn" : "Error del servidor" , "data" : "" } 📚 Recursos / Esquemas usados Topic { "topic_content" : [ { "content_type" : "Video | Article | Quiz" , "content" : "string" } ] } Video { "url" : "string" } Article { "content" : "html|string" } Student { "name" : "string" , "dni" : "string" , "puesto" : "string" } Quiz Activity { "quiz" : "string" , "student" : "string" } 🗃 Pseudocódigo del servicio if DNI: estudiante = GET Student by DNI topic = GET Topic/{tema} foreach content in topic.topic_content: if content_type == Video: obtener url del video if content_type == Article: obtener contenido, limpiar html, buscar link if content_type == Quiz and estudiante existe: obtener intentos realizados return lista enriquecida de contenidos