# Formato de exportación · SofIA Foro · SofIA H5P · SofIA Tarea · SofIA Quiz → GitHub (englishunah)
v1 · 11-11-2026 · PhD. Bessy Mendoza · MSc. Leonel Madrid

## Para quién es este archivo
- **ChatGPT (asistentes SofIA):** cuando el docente aprueba una opción, entrega el bloque de exportación tal como se describe aquí.
- **Claude:** recibe ese bloque y lo carga a la plataforma en GitHub.

## Lenguaje del bloque
- **JSON** estricto, UTF-8, en un solo bloque de código marcado ```json.
- Comillas dobles, sin comentarios y sin comas finales.
- Los saltos de línea dentro de un texto se escriben `\n`.
- El HTML para el Campus Virtual va como texto dentro del campo `campus_html`. Ese HTML no lleva <style> ni JavaScript; usa estilos inline y acordeones <details>/<summary>.
- El banco del quiz va en formato **GIFT**, escrito como lista de líneas en `payload.gift_lines`.

## Sobre (igual para los cuatro asistentes)
```json
{
  "sofia_export": "1.0",
  "kind": "forum | h5p | task | quiz",
  "course": "in101 | in102 | in103",
  "pac": "p1 | p2 | p3",
  "lesson": 8,
  "activity": 28,
  "official": {"title": "título EXACTO del Calendario", "percent": 2},
  "tree": {"competencia": "…", "objetivo_can": "…", "descriptor_mcer": "…", "indicador": "…", "estacion": "…", "cultural_corner": "…", "festividades": ["…"], "honduras": "…"},
  "option": {"id": "A | B | C", "focus": "carrera | Cultural Corner | Honduras diversa | plurilingüe", "rotation": "foco del período y variante por apellido"},
  "ficha_tecnica": {"actividad_comunicativa": "…", "competencias_unah": ["…", "…"], "competencia_innovacion": "…", "nivel_ia": 1, "tiempo": "…", "pregunta_detonadora": "…", "ciclo_15_6": ["pensar", "preguntar", "hacerse entender", "interpretar para otros", "aportar", "reflexionar"]},
  "sources": [{"name": "…", "url": "https://…", "country": "…", "type": "gobierno | museo | universidad | regulador | asociación | medio educativo", "use": "…", "verified": true}],
  "social_media": "red social o recurso real y cómo se usa (siempre opcional; sin datos personales)",
  "edtech": ["herramienta gratuita verificada", "…"],
  "pluri": "puente plurilingüe: español, lenguas originarias o afrodescendientes de Honduras, otras lenguas",
  "sofia_prompt": "prompt de SofIA para el estudiante (5 pasos, un paso a la vez)",
  "rubric": [{"criterio": "Lengua", "n4": "…", "n3": "…", "n2": "…", "n1": "…"}, {"criterio": "Proceso con IA"}, {"criterio": "Pertinencia disciplinar y autonomía"}, {"criterio": "Pensamiento crítico y originalidad"}],
  "ican": ["I can …"],
  "campus_html": "<div style=\"…\">…</div>",
  "checklist_15_7": {"pregunta_abierta": true, "intenta_antes": true, "socratica_y_contraejemplo": true, "consigna_clara_con_modelo": true, "nivel_mcer": true, "sirve_a_otros": true, "ia_acompana": true, "reflexion": true},
  "payload": {}
}
```
- `pac`: p1 = I PAC 2027 · p2 = II PAC 2027 · p3 = III PAC 2026.
- `official.title` y `official.percent` se copian tal cual del árbol. Si no coinciden, el importador rechaza el archivo.

## `payload` por tipo de actividad

**forum** (foro «feed» de red social dentro del Campus Virtual; mismas claves que `data/source/foros_feed.py`):
```json
{"genre": ["Interests post", "Post de gustos"],
 "mission": "…",
 "think": ["pregunta detonadora en inglés", "en español"],
 "post": ["1-line bio…", "qué escribe (con la gramática del nivel)", "1 pregunta para compañeros"],
 "variant": ["apellido A–F: …", "G–M: …", "N–Z: …"],
 "model": {"who": "nombre no latino", "bio": "…", "text": "…", "tags": "#UNAHFeed #… #MyCareerWord: x = y", "alt": "texto alternativo fiel"},
 "good": "comentario genuino de ejemplo", "bad": "I agree 👍",
 "socratic": ["pregunta socrática", "contraejemplo o revisión en español"],
 "sofia": ["tema gramatical", "pregunta de pista", "I can… de cierre"],
 "rule": null}
```

**h5p** (el sitio importa **DragText**; mismas claves que `data/h5p/in101-act02.json`):
```json
{"type": "DragText",
 "title": "Activity N · …",
 "prepares": "Assignment N «…»",
 "scenes": ["Scene 1 · título\nTexto con [respuesta>2>consejo] y [respuesta>3]"],
 "distractors": ["…", "…"]}
```
- Pantallas válidas: 2 = The rule · 3 = Key words · 5 = In your career.
- No uses «:» ni «*» dentro de los corchetes.
- Otros tipos de H5P (Interactive Video, Image Hotspots, Course Presentation…) se describen en el campo extra `campus_h5p` del sobre: pantallas, textos, respuestas y retroalimentación por opción. Ese campo es para armar la actividad en el editor H5P del Campus.

**task** (cadena de tareas; mismas claves que `data/tareas/in101.json`):
```json
{"kind": "text | audio | video | infographic | card | glossary",
 "length": "…",
 "ai": 2,
 "uses": [1, 2], "usesText": "qué productos anteriores reutiliza",
 "leadsText": "qué tarea siguiente lo reutiliza",
 "model": "modelo breve, nombres no latinos",
 "audio": true,
 "next": null}
```

**quiz** (banco GIFT para el Campus Virtual):
```json
{"gift_lines": ["$CATEGORY: IN101/I PAC/Lesson 8/Version A", "", "::L8-A-01 Likes::Emily [___] country music. {=likes ~like ~liking #…}", "…"],
 "spec": [{"item": "L8-A-01", "evaluates": "…", "indicator": "I can …"}],
 "versions": ["A", "B"]}
```

## Qué hace Claude con el bloque (instrucciones para Claude)
1. Guardar el bloque en `docs/sofia-exports/inbox/<kind>-<course>-<pac>-l<NN>.json`.
2. Ejecutar `python3 generator/import_sofia.py docs/sofia-exports/inbox/<archivo>.json`. El importador valida que el bloque siga el árbol: curso, período, lección, actividad, tipo, título y % oficiales, lista §15.7, formato DragText y nombres permitidos. Si es válido, escribe el archivo en su destino:
   - forum → `data/foros/<curso>-<pac>-lNN.json`
   - h5p → `data/h5p/<curso>-actNN-<pac>.json`
   - task → `data/tareas/pac/<curso>-<pac>-actNN.json`
   - quiz → `docs/quizzes/<curso>/<pac>/actNN.gift`
   - copia completa → `docs/sofia-exports/archivo/`
3. Si sale ERROR: corregir solo lo que indica el mensaje, sin tocar el árbol, o devolver el bloque al docente.
4. Ejecutar `python3 generator/build.py`, revisar la página del período y la lección y hacer commit con push a `main`.
5. El `campus_html` se entrega al docente para pegarlo en la actividad del Campus Virtual de la UNAH.
