fix #46: Al generar asignaturas la IA también genera su sistema de evaluación
Deploy Function / deploy (push) Successful in 25s
Deploy Migrations to Production / deploy (push) Successful in 10s

This commit was merged in pull request #47.
This commit is contained in:
2026-03-04 17:48:23 -06:00
parent 994fb3c7bc
commit d7e232eec7
8 changed files with 167 additions and 20 deletions
@@ -141,6 +141,7 @@ export type Database = {
creado_en: string
creado_por: string | null
creditos: number
criterios_de_evaluacion: Json
datos: Json
estado: Database["public"]["Enums"]["estado_asignatura"]
estructura_id: string | null
@@ -165,6 +166,7 @@ export type Database = {
creado_en?: string
creado_por?: string | null
creditos: number
criterios_de_evaluacion?: Json
datos?: Json
estado?: Database["public"]["Enums"]["estado_asignatura"]
estructura_id?: string | null
@@ -189,6 +191,7 @@ export type Database = {
creado_en?: string
creado_por?: string | null
creditos?: number
criterios_de_evaluacion?: Json
datos?: Json
estado?: Database["public"]["Enums"]["estado_asignatura"]
estructura_id?: string | null
@@ -414,10 +414,9 @@ Deno.serve(async (req: Request): Promise<Response> => {
estructura_id: resolved.estructura_id as string,
nombre: resolved.nombre as string,
codigo: resolved.codigo ?? null,
tipo:
(resolved.tipo ?? undefined) as Database["public"]["Tables"][
"asignaturas"
]["Insert"]["tipo"],
tipo: (resolved.tipo ?? undefined) as Database["public"]["Tables"][
"asignaturas"
]["Insert"]["tipo"],
creditos: resolved.creditos as number,
horas_academicas: resolved.horas_academicas ?? null,
horas_independientes: resolved.horas_independientes ?? null,
@@ -458,7 +457,7 @@ Deno.serve(async (req: Request): Promise<Response> => {
const { data: estructura, error: estructuraError } = await supabaseService
.from("estructuras_asignatura")
.select("id,nombre,definicion,version")
.select("id,nombre,definicion")
.eq("id", resolved.estructura_id)
.single();
if (estructuraError) {
@@ -509,10 +508,11 @@ Deno.serve(async (req: Request): Promise<Response> => {
iaConfig.instruccionesAdicionalesIA ?? "(ninguna)"
}` +
archivosAdjuntosTexto +
`\n\nREGLA ESTRICTA MATEMÁTICA:\n` +
`Si generas el 'contenido_tematico', la suma total de las 'horasEstimadas' de todos los temas en todas las unidades DEBE coincidir exactamente con el total de Horas académicas indicadas arriba (${
`\n\nREGLAS ESTRICTAS MATEMÁTICAS:\n` +
`- Si generas el 'contenido_tematico', la suma total de las 'horasEstimadas' de todos los temas en todas las unidades DEBE coincidir exactamente con el total de Horas académicas indicadas arriba (${
resolved.horas_academicas ?? 0
}). No te pases ni te falten horas.`;
}). No te pases ni te falten horas.\n` +
`- Si generas los 'criterios_de_evaluacion', la suma total de los 'porcentajes' de todos los criterios DEBE ser exactamente 100%. No te pases ni te falten porcentajes.`;
const schemaDef: Record<string, unknown> =
typeof estructura?.definicion === "object" &&
@@ -658,4 +658,39 @@ const definicionesDeEstructurasDeColumnas = {
],
"additionalProperties": false,
},
criterios_de_evaluacion: {
"type": "object",
"properties": {
"x-column": {
"type": "string",
"enum": [
"criterios_de_evaluacion",
],
},
"x-definicion": {
"type": "array",
"items": {
"type": "object",
"properties": {
"criterio": {
"type": "string",
},
"porcentaje": {
"type": "integer",
},
},
"required": [
"criterio",
"porcentaje",
],
"additionalProperties": false,
},
},
},
"required": [
"x-column",
"x-definicion",
],
"additionalProperties": false,
},
};