{
  "materias": [
    {
      "codigo": "MAT101",
      "nombre": "Cálculo I",
      "creditos": 4,
      "semestre": 1,
      "prerrequisitos": [],
      "correquisitos": [],
      "estado": "passed",
      "color": "#5091AF",
      "tipo": "basicas"
    },
    {
      "codigo": "MAT102",
      "nombre": "Cálculo II",
      "creditos": 4,
      "semestre": 2,
      "prerrequisitos": ["MAT101"],
      "correquisitos": [],
      "estado": "enrolled",
      "color": "#5091AF",
      "tipo": "basicas"
    },
    {
      "codigo": "FIS101",
      "nombre": "Física I",
      "creditos": 3,
      "semestre": 1,
      "prerrequisitos": [],
      "correquisitos": ["FIS101L"],
      "estado": "passed",
      "color": "#6366f1",
      "tipo": "basicas"
    },
    {
      "codigo": "FIS101L",
      "nombre": "Laboratorio de Física I",
      "creditos": 1,
      "semestre": 1,
      "prerrequisitos": [],
      "correquisitos": ["FIS101"],
      "estado": "passed",
      "color": "#6366f1",
      "tipo": "basicas"
    },
    {
      "codigo": "FIS102",
      "nombre": "Física II",
      "creditos": 3,
      "semestre": 2,
      "prerrequisitos": ["FIS101", "MAT101"],
      "correquisitos": ["FIS102L"],
      "estado": "pending",
      "color": "#6366f1",
      "tipo": "basicas"
    },
    {
      "codigo": "FIS102L",
      "nombre": "Laboratorio de Física II",
      "creditos": 1,
      "semestre": 2,
      "prerrequisitos": ["FIS101L"],
      "correquisitos": ["FIS102"],
      "estado": "pending",
      "color": "#6366f1",
      "tipo": "basicas"
    },
    {
      "codigo": "PRG101",
      "nombre": "Programación I",
      "creditos": 3,
      "semestre": 1,
      "prerrequisitos": [],
      "correquisitos": [],
      "estado": "passed",
      "color": "#10b981",
      "tipo": "nucleo"
    }
  ],
  "calificaciones": [
    {
      "codigo_materia": "MAT101",
      "nota": 4.2,
      "componentes": [
        { "nombre": "Parcial 1", "porcentaje": 25, "nota": 4.0 },
        { "nombre": "Parcial 2", "porcentaje": 25, "nota": 4.5 },
        { "nombre": "Final", "porcentaje": 50, "nota": 4.2 }
      ]
    },
    {
      "codigo_materia": "FIS101",
      "nota": 3.8,
      "componentes": [
        { "nombre": "Parcial 1", "porcentaje": 30, "nota": 3.5 },
        { "nombre": "Parcial 2", "porcentaje": 30, "nota": 4.0 },
        { "nombre": "Laboratorio", "porcentaje": 20, "nota": 4.0 },
        { "nombre": "Final", "porcentaje": 20, "nota": 3.8 }
      ]
    },
    {
      "codigo_materia": "FIS101L",
      "nota": 4.0,
      "componentes": [
        { "nombre": "Informes", "porcentaje": 60, "nota": 4.0 },
        { "nombre": "Evaluación Final", "porcentaje": 40, "nota": 4.0 }
      ]
    },
    {
      "codigo_materia": "PRG101",
      "nota": 4.5,
      "componentes": [
        { "nombre": "Proyecto", "porcentaje": 40, "nota": 4.8 },
        { "nombre": "Parciales", "porcentaje": 40, "nota": 4.2 },
        { "nombre": "Talleres", "porcentaje": 20, "nota": 4.5 }
      ]
    }
  ],
  "_comentarios": {
    "estados_validos": ["pending", "enrolled", "passed", "failed", "dropped"],
    "tipos_validos": ["nucleo", "basicas", "sociohumano", "enfasis", "complementarias", "electivas"],
    "tipos_descripcion": {
      "nucleo": "Núcleo Carrera - Materias fundamentales de la carrera",
      "basicas": "Ciencias Básicas - Matemáticas, física, química, etc.",
      "sociohumano": "Socio Humano - Formación humanística y social",
      "enfasis": "Énfasis - Especialización dentro de la carrera",
      "complementarias": "Complementarias - Materias de apoyo",
      "electivas": "Electivas - Materias de libre elección"
    },
    "color": "Color hexadecimal para la materia (ej: #5091AF)",
    "nota_rango": "0.0 a 5.0",
    "porcentaje_total": "Los porcentajes de componentes deberían sumar 100%, pero el cálculo funciona con cualquier porcentaje",
    "prerrequisitos": "Array de códigos de materias que deben estar aprobadas ANTES de cursar esta materia",
    "correquisitos": "Array de códigos de materias que deben cursarse EN EL MISMO SEMESTRE (coterminales)"
  }
}
