From d724bda6f55b5fcd6037df3f0a1cb3da413bf8c8 Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Fri, 13 Feb 2026 16:28:14 +0000 Subject: [PATCH 01/38] Actualizar database-types.ts --- database-types.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/database-types.ts b/database-types.ts index 437ea25..af939e6 100644 --- a/database-types.ts +++ b/database-types.ts @@ -1,3 +1,4 @@ +// TESTING export type Json = | string | number From e72951d32d9f0282d56c52a102e0d5d7f9d94b4a Mon Sep 17 00:00:00 2001 From: Guillermo Arrieta Medina Date: Mon, 9 Mar 2026 17:00:29 -0600 Subject: [PATCH 02/38] Enhance buscar-bibliografia function with Open Library integration and parameter handling --- .../functions/buscar-bibliografia/index.ts | 153 ++++++++++++++++-- 1 file changed, 141 insertions(+), 12 deletions(-) diff --git a/supabase/functions/buscar-bibliografia/index.ts b/supabase/functions/buscar-bibliografia/index.ts index 9b47e34..f45b5a5 100644 --- a/supabase/functions/buscar-bibliografia/index.ts +++ b/supabase/functions/buscar-bibliografia/index.ts @@ -6,6 +6,11 @@ import { HttpError, sendError, sendSuccess } from "../_shared/utils.ts"; console.log("Starting buscar-bibliografia function"); type GoogleBooksVolume = Record; +type OpenLibraryDoc = Record; + +type EndpointResult = + | { endpoint: "google"; item: GoogleBooksVolume } + | { endpoint: "open_library"; item: OpenLibraryDoc }; interface GoogleBooksVolumesListResponse { kind?: string; @@ -13,17 +18,54 @@ interface GoogleBooksVolumesListResponse { items?: GoogleBooksVolume[]; } +interface OpenLibrarySearchResponse { + num_found?: number; + start?: number; + docs?: OpenLibraryDoc[]; +} + +const ISO6391 = z.string().regex( + /^[a-z]{2}$/i, + "Debe ser ISO 639-1 (2 letras)", +); +const ISO6392 = z.string().regex( + /^[a-z]{3}$/i, + "Debe ser ISO 639-2 (3 letras)", +); + const SearchTermsSchema = z .object({ q: z.string().min(1, "q es requerido"), - maxResults: z.number().int().min(0).max(40), - orderBy: z.enum(["newest", "relevance"]).optional(), }) - .passthrough(); + .strict(); + +const GoogleParamsSchema = z + .object({ + orderBy: z.enum(["newest", "relevance"]).optional(), + langRestrict: ISO6391.optional(), + startIndex: z.number().int().min(0).optional(), + }) + .passthrough() + .optional() + .default({}); + +const OpenLibraryParamsSchema = z + .object({ + language: ISO6392.optional(), + page: z.number().int().min(1).optional(), + sort: z.string().optional(), + }) + .passthrough() + .optional() + .default({}); const BodySchema = z .object({ searchTerms: SearchTermsSchema, + + // Parámetros por endpoint + google: GoogleParamsSchema, + openLibrary: OpenLibraryParamsSchema, }) .strict(); @@ -57,6 +99,40 @@ function buildUrlWithSearchTerms( return url.toString(); } +function pickSerializableParams( + input: Record, +): Record< + string, + string | number | boolean | Array +> { + const out: Record< + string, + string | number | boolean | Array + > = {}; + + for (const [key, value] of Object.entries(input)) { + if (value === undefined || value === null) continue; + + if (Array.isArray(value)) { + const arr = value + .filter((v) => v !== undefined && v !== null) + .filter((v) => + ["string", "number", "boolean"].includes(typeof v) + ) as Array< + string | number | boolean + >; + if (arr.length) out[key] = arr; + continue; + } + + if (["string", "number", "boolean"].includes(typeof value)) { + out[key] = value as string | number | boolean; + } + } + + return out; +} + Deno.serve(async (req: Request): Promise => { const url = new URL(req.url); const functionName = url.pathname.split("/").pop(); @@ -117,17 +193,40 @@ Deno.serve(async (req: Request): Promise => { } const baseUrl = "https://www.googleapis.com/books/v1/volumes"; - const requestUrl = buildUrlWithSearchTerms(baseUrl, { + const googleParams = pickSerializableParams({ + ...body.google, ...body.searchTerms, key: GOOGLE_API_KEY, + maxResults: 20, + startIndex: (body.google as Record)?.startIndex ?? 0, }); + // No mandar parámetros exclusivos de Open Library a Google + delete (googleParams as Record)["page"]; + delete (googleParams as Record)["language"]; - const googleResp = await fetch(requestUrl, { - method: "GET", - headers: { - Accept: "application/json", - }, + const googleUrl = buildUrlWithSearchTerms(baseUrl, googleParams); + + const openLibraryBaseUrl = "https://openlibrary.org/search.json"; + const openLibraryParams = pickSerializableParams({ + ...body.openLibrary, + q: body.searchTerms.q, + limit: 20, + page: (body.openLibrary as Record)?.page ?? 1, }); + // No mandar parámetros exclusivos de Google a Open Library + delete (openLibraryParams as Record)["langRestrict"]; + delete (openLibraryParams as Record)["orderBy"]; + delete (openLibraryParams as Record)["startIndex"]; + + const openLibraryUrl = buildUrlWithSearchTerms( + openLibraryBaseUrl, + openLibraryParams, + ); + + const [googleResp, openLibraryResp] = await Promise.all([ + fetch(googleUrl, { headers: { Accept: "application/json" } }), + fetch(openLibraryUrl, { headers: { Accept: "application/json" } }), + ]); if (!googleResp.ok) { const text = await googleResp.text().catch(() => ""); @@ -143,10 +242,40 @@ Deno.serve(async (req: Request): Promise => { ); } - const data = (await googleResp.json()) as GoogleBooksVolumesListResponse; - const items = Array.isArray(data?.items) ? data.items : []; + if (!openLibraryResp.ok) { + const text = await openLibraryResp.text().catch(() => ""); + throw new HttpError( + 502, + "Error al consultar Open Library.", + "OPEN_LIBRARY_REQUEST_FAILED", + { + status: openLibraryResp.status, + statusText: openLibraryResp.statusText, + body: text || null, + }, + ); + } - return sendSuccess(items); + const googleData = + (await googleResp.json()) as GoogleBooksVolumesListResponse; + const openLibraryData = + (await openLibraryResp.json()) as OpenLibrarySearchResponse; + + const googleItems = Array.isArray(googleData?.items) + ? googleData.items.slice(0, 20) + : []; + const openLibraryDocs = Array.isArray(openLibraryData?.docs) + ? openLibraryData.docs.slice(0, 20) + : []; + + const results: EndpointResult[] = [ + ...googleItems.map((item) => ({ endpoint: "google", item } as const)), + ...openLibraryDocs.map(( + item, + ) => ({ endpoint: "open_library", item } as const)), + ]; + + return sendSuccess(results); } catch (error) { if (error instanceof HttpError) { console.error( From 5958ec15d264df85adcd0f2604584401a5b04ddc Mon Sep 17 00:00:00 2001 From: Guillermo Arrieta Medina Date: Mon, 9 Mar 2026 17:16:12 -0600 Subject: [PATCH 03/38] =?UTF-8?q?hotfix:=20identificaci=C3=B3n=20de=20la?= =?UTF-8?q?=20aplicaci=C3=B3n=20para=20Open=20Library?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- supabase/functions/buscar-bibliografia/index.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/supabase/functions/buscar-bibliografia/index.ts b/supabase/functions/buscar-bibliografia/index.ts index f45b5a5..46fda32 100644 --- a/supabase/functions/buscar-bibliografia/index.ts +++ b/supabase/functions/buscar-bibliografia/index.ts @@ -225,7 +225,12 @@ Deno.serve(async (req: Request): Promise => { const [googleResp, openLibraryResp] = await Promise.all([ fetch(googleUrl, { headers: { Accept: "application/json" } }), - fetch(openLibraryUrl, { headers: { Accept: "application/json" } }), + fetch(openLibraryUrl, { + headers: { + Accept: "application/json", + "User-Agent": "Acad-IA info.ingenieria.lci@gmail.com", + }, + }), ]); if (!googleResp.ok) { From 1b715baff6b7bfc73e01f3335d1cf3bf7b4e6020 Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 01:36:11 +0000 Subject: [PATCH 04/38] =?UTF-8?q?A=C3=B1adir=20.gitea/workflows/ci.yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/ci.yaml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 .gitea/workflows/ci.yaml diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml new file mode 100644 index 0000000..ed25089 --- /dev/null +++ b/.gitea/workflows/ci.yaml @@ -0,0 +1,28 @@ +name: CI + +on: + pull_request: + workflow_dispatch: + +jobs: + test: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - uses: supabase/setup-cli@v1 + with: + version: latest + + - name: Start Supabase local development setup + run: supabase db start + + - name: Verify generated types are checked in + run: | + supabase gen types typescript --local > types.gen.ts + if ! git diff --ignore-space-at-eol --exit-code --quiet types.gen.ts; then + echo "Detected uncommitted changes after build. See status below:" + git diff + exit 1 + fi \ No newline at end of file From 13645dc00a1f709c43d94af22ad769884eba8dbd Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 07:51:37 -0600 Subject: [PATCH 05/38] Refactor Database type definitions by removing unused fields and adding new entities for person, professor, and student --- supabase/functions/_shared/database.types.ts | 234 +++++++------------ 1 file changed, 79 insertions(+), 155 deletions(-) diff --git a/supabase/functions/_shared/database.types.ts b/supabase/functions/_shared/database.types.ts index 4176947..5a6fadd 100644 --- a/supabase/functions/_shared/database.types.ts +++ b/supabase/functions/_shared/database.types.ts @@ -1,4 +1,4 @@ -export type Json = +export type Json = | string | number | boolean @@ -81,56 +81,6 @@ export type Database = { }, ] } - asignatura_mensajes_ia: { - Row: { - campos: string[] - conversacion_asignatura_id: string - enviado_por: string - estado: Database["public"]["Enums"]["estado_mensaje_ia"] - fecha_actualizacion: string - fecha_creacion: string - id: string - is_refusal: boolean - mensaje: string - propuesta: Json | null - respuesta: string | null - } - Insert: { - campos?: string[] - conversacion_asignatura_id: string - enviado_por?: string - estado?: Database["public"]["Enums"]["estado_mensaje_ia"] - fecha_actualizacion?: string - fecha_creacion?: string - id?: string - is_refusal?: boolean - mensaje: string - propuesta?: Json | null - respuesta?: string | null - } - Update: { - campos?: string[] - conversacion_asignatura_id?: string - enviado_por?: string - estado?: Database["public"]["Enums"]["estado_mensaje_ia"] - fecha_actualizacion?: string - fecha_creacion?: string - id?: string - is_refusal?: boolean - mensaje?: string - propuesta?: Json | null - respuesta?: string | null - } - Relationships: [ - { - foreignKeyName: "asignatura_mensajes_ia_conversacion_asignatura_id_fkey" - columns: ["conversacion_asignatura_id"] - isOneToOne: false - referencedRelation: "conversaciones_asignatura" - referencedColumns: ["id"] - }, - ] - } asignaturas: { Row: { actualizado_en: string @@ -141,7 +91,6 @@ 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 @@ -166,7 +115,6 @@ 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 @@ -191,7 +139,6 @@ 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 @@ -229,13 +176,6 @@ export type Database = { referencedRelation: "estructuras_asignatura" referencedColumns: ["id"] }, - { - foreignKeyName: "asignaturas_estructura_id_fkey" - columns: ["estructura_id"] - isOneToOne: false - referencedRelation: "plantilla_asignatura" - referencedColumns: ["estructura_id"] - }, { foreignKeyName: "asignaturas_linea_plan_fk_compuesta" columns: ["linea_plan_id", "plan_estudio_id"] @@ -301,13 +241,6 @@ export type Database = { referencedRelation: "asignaturas" referencedColumns: ["id"] }, - { - foreignKeyName: "bibliografia_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "plantilla_asignatura" - referencedColumns: ["asignatura_id"] - }, { foreignKeyName: "bibliografia_asignatura_creado_por_fkey" columns: ["creado_por"] @@ -362,13 +295,6 @@ export type Database = { referencedRelation: "asignaturas" referencedColumns: ["id"] }, - { - foreignKeyName: "cambios_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "plantilla_asignatura" - referencedColumns: ["asignatura_id"] - }, { foreignKeyName: "cambios_asignatura_cambiado_por_fkey" columns: ["cambiado_por"] @@ -515,13 +441,6 @@ export type Database = { referencedRelation: "asignaturas" referencedColumns: ["id"] }, - { - foreignKeyName: "conversaciones_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "plantilla_asignatura" - referencedColumns: ["asignatura_id"] - }, { foreignKeyName: "conversaciones_asignatura_creado_por_fkey" columns: ["creado_por"] @@ -633,8 +552,7 @@ export type Database = { definicion: Json id: string nombre: string - template_id: string | null - tipo: Database["public"]["Enums"]["tipo_estructura_plan"] | null + version: string | null } Insert: { actualizado_en?: string @@ -642,8 +560,7 @@ export type Database = { definicion?: Json id?: string nombre: string - template_id?: string | null - tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] | null + version?: string | null } Update: { actualizado_en?: string @@ -651,8 +568,7 @@ export type Database = { definicion?: Json id?: string nombre?: string - template_id?: string | null - tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] | null + version?: string | null } Relationships: [] } @@ -776,13 +692,6 @@ export type Database = { referencedRelation: "asignaturas" referencedColumns: ["id"] }, - { - foreignKeyName: "interacciones_ia_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "plantilla_asignatura" - referencedColumns: ["asignatura_id"] - }, { foreignKeyName: "interacciones_ia_plan_estudio_id_fkey" columns: ["plan_estudio_id"] @@ -889,55 +798,26 @@ export type Database = { }, ] } - plan_mensajes_ia: { + person: { Row: { - campos: string[] - conversacion_plan_id: string - enviado_por: string - estado: Database["public"]["Enums"]["estado_mensaje_ia"] - fecha_actualizacion: string - fecha_creacion: string - id: string - is_refusal: boolean - mensaje: string - propuesta: Json | null - respuesta: string | null + email: string | null + first_name: string | null + id: number + last_name: string | null } Insert: { - campos?: string[] - conversacion_plan_id: string - enviado_por?: string - estado?: Database["public"]["Enums"]["estado_mensaje_ia"] - fecha_actualizacion?: string - fecha_creacion?: string - id?: string - is_refusal?: boolean - mensaje: string - propuesta?: Json | null - respuesta?: string | null + email?: string | null + first_name?: string | null + id?: number + last_name?: string | null } Update: { - campos?: string[] - conversacion_plan_id?: string - enviado_por?: string - estado?: Database["public"]["Enums"]["estado_mensaje_ia"] - fecha_actualizacion?: string - fecha_creacion?: string - id?: string - is_refusal?: boolean - mensaje?: string - propuesta?: Json | null - respuesta?: string | null + email?: string | null + first_name?: string | null + id?: number + last_name?: string | null } - Relationships: [ - { - foreignKeyName: "plan_mensajes_ia_conversacion_plan_id_fkey" - columns: ["conversacion_plan_id"] - isOneToOne: false - referencedRelation: "conversaciones_plan" - referencedColumns: ["id"] - }, - ] + Relationships: [] } planes_estudio: { Row: { @@ -1045,6 +925,36 @@ export type Database = { }, ] } + professor: { + Row: { + department: string | null + email: string | null + employee_number: string | null + first_name: string | null + id: number + last_name: string | null + salary: number | null + } + Insert: { + department?: string | null + email?: string | null + employee_number?: string | null + first_name?: string | null + id?: number + last_name?: string | null + salary?: number | null + } + Update: { + department?: string | null + email?: string | null + employee_number?: string | null + first_name?: string | null + id?: number + last_name?: string | null + salary?: number | null + } + Relationships: [] + } responsables_asignatura: { Row: { asignatura_id: string @@ -1075,13 +985,6 @@ export type Database = { referencedRelation: "asignaturas" referencedColumns: ["id"] }, - { - foreignKeyName: "responsables_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "plantilla_asignatura" - referencedColumns: ["asignatura_id"] - }, { foreignKeyName: "responsables_asignatura_usuario_id_fkey" columns: ["usuario_id"] @@ -1112,6 +1015,36 @@ export type Database = { } Relationships: [] } + student: { + Row: { + email: string | null + enrollment_number: string | null + first_name: string | null + id: number + last_name: string | null + major: string | null + semester: number | null + } + Insert: { + email?: string | null + enrollment_number?: string | null + first_name?: string | null + id?: number + last_name?: string | null + major?: string | null + semester?: number | null + } + Update: { + email?: string | null + enrollment_number?: string | null + first_name?: string | null + id?: number + last_name?: string | null + major?: string | null + semester?: number | null + } + Relationships: [] + } tareas_revision: { Row: { asignado_a: string @@ -1347,14 +1280,6 @@ export type Database = { } } Views: { - plantilla_asignatura: { - Row: { - asignatura_id: string | null - estructura_id: string | null - template_id: string | null - } - Relationships: [] - } plantilla_plan: { Row: { estructura_id: string | null @@ -1373,13 +1298,13 @@ export type Database = { Args: { p_append: Json; p_id: string } Returns: undefined } + custom_access_token_hook: { Args: { event: Json }; Returns: Json } unaccent: { Args: { "": string }; Returns: string } unaccent_immutable: { Args: { "": string }; Returns: string } } Enums: { estado_asignatura: "borrador" | "revisada" | "aprobada" | "generando" estado_conversacion: "ACTIVA" | "ARCHIVANDO" | "ARCHIVADA" | "ERROR" - estado_mensaje_ia: "PROCESANDO" | "COMPLETADO" | "ERROR" estado_tarea_revision: "PENDIENTE" | "COMPLETADA" | "OMITIDA" fuente_cambio: "HUMANO" | "IA" nivel_plan_estudio: @@ -1554,7 +1479,6 @@ export const Constants = { Enums: { estado_asignatura: ["borrador", "revisada", "aprobada", "generando"], estado_conversacion: ["ACTIVA", "ARCHIVANDO", "ARCHIVADA", "ERROR"], - estado_mensaje_ia: ["PROCESANDO", "COMPLETADO", "ERROR"], estado_tarea_revision: ["PENDIENTE", "COMPLETADA", "OMITIDA"], fuente_cambio: ["HUMANO", "IA"], nivel_plan_estudio: [ From 0c2310d0d735fa98ddf8914efcf42d71d5e6e41c Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 07:51:41 -0600 Subject: [PATCH 06/38] Fix path for generated types in CI workflow --- .gitea/workflows/ci.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index ed25089..2c24f53 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -20,9 +20,9 @@ jobs: - name: Verify generated types are checked in run: | - supabase gen types typescript --local > types.gen.ts - if ! git diff --ignore-space-at-eol --exit-code --quiet types.gen.ts; then + supabase gen types typescript --local > supabase/functions/_shared/database.types.ts + if ! git diff --ignore-space-at-eol --exit-code --quiet supabase/functions/_shared/database.types.ts; then echo "Detected uncommitted changes after build. See status below:" git diff exit 1 - fi \ No newline at end of file + fi From 7152f91dfcc2c40f6c524eea5e5afd8cfcb57a82 Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 08:00:34 -0600 Subject: [PATCH 07/38] update generated supabase types --- supabase/functions/_shared/database.types.ts | 264 +++++++++++-------- 1 file changed, 158 insertions(+), 106 deletions(-) diff --git a/supabase/functions/_shared/database.types.ts b/supabase/functions/_shared/database.types.ts index 5a6fadd..9684acc 100644 --- a/supabase/functions/_shared/database.types.ts +++ b/supabase/functions/_shared/database.types.ts @@ -7,30 +7,10 @@ export type Json = | Json[] export type Database = { - graphql_public: { - Tables: { - [_ in never]: never - } - Views: { - [_ in never]: never - } - Functions: { - graphql: { - Args: { - extensions?: Json - operationName?: string - query?: string - variables?: Json - } - Returns: Json - } - } - Enums: { - [_ in never]: never - } - CompositeTypes: { - [_ in never]: never - } + // Allows to automatically instantiate createClient with right options + // instead of createClient(URL, KEY) + __InternalSupabase: { + PostgrestVersion: "12.2.3 (519615d)" } public: { Tables: { @@ -81,6 +61,56 @@ export type Database = { }, ] } + asignatura_mensajes_ia: { + Row: { + campos: string[] + conversacion_asignatura_id: string + enviado_por: string + estado: Database["public"]["Enums"]["estado_mensaje_ia"] + fecha_actualizacion: string + fecha_creacion: string + id: string + is_refusal: boolean + mensaje: string + propuesta: Json | null + respuesta: string | null + } + Insert: { + campos?: string[] + conversacion_asignatura_id: string + enviado_por?: string + estado?: Database["public"]["Enums"]["estado_mensaje_ia"] + fecha_actualizacion?: string + fecha_creacion?: string + id?: string + is_refusal?: boolean + mensaje: string + propuesta?: Json | null + respuesta?: string | null + } + Update: { + campos?: string[] + conversacion_asignatura_id?: string + enviado_por?: string + estado?: Database["public"]["Enums"]["estado_mensaje_ia"] + fecha_actualizacion?: string + fecha_creacion?: string + id?: string + is_refusal?: boolean + mensaje?: string + propuesta?: Json | null + respuesta?: string | null + } + Relationships: [ + { + foreignKeyName: "asignatura_mensajes_ia_conversacion_asignatura_id_fkey" + columns: ["conversacion_asignatura_id"] + isOneToOne: false + referencedRelation: "conversaciones_asignatura" + referencedColumns: ["id"] + }, + ] + } asignaturas: { Row: { actualizado_en: string @@ -91,6 +121,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 @@ -115,6 +146,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 @@ -139,6 +171,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 @@ -176,6 +209,13 @@ export type Database = { referencedRelation: "estructuras_asignatura" referencedColumns: ["id"] }, + { + foreignKeyName: "asignaturas_estructura_id_fkey" + columns: ["estructura_id"] + isOneToOne: false + referencedRelation: "plantilla_asignatura" + referencedColumns: ["estructura_id"] + }, { foreignKeyName: "asignaturas_linea_plan_fk_compuesta" columns: ["linea_plan_id", "plan_estudio_id"] @@ -241,6 +281,13 @@ export type Database = { referencedRelation: "asignaturas" referencedColumns: ["id"] }, + { + foreignKeyName: "bibliografia_asignatura_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "plantilla_asignatura" + referencedColumns: ["asignatura_id"] + }, { foreignKeyName: "bibliografia_asignatura_creado_por_fkey" columns: ["creado_por"] @@ -295,6 +342,13 @@ export type Database = { referencedRelation: "asignaturas" referencedColumns: ["id"] }, + { + foreignKeyName: "cambios_asignatura_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "plantilla_asignatura" + referencedColumns: ["asignatura_id"] + }, { foreignKeyName: "cambios_asignatura_cambiado_por_fkey" columns: ["cambiado_por"] @@ -441,6 +495,13 @@ export type Database = { referencedRelation: "asignaturas" referencedColumns: ["id"] }, + { + foreignKeyName: "conversaciones_asignatura_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "plantilla_asignatura" + referencedColumns: ["asignatura_id"] + }, { foreignKeyName: "conversaciones_asignatura_creado_por_fkey" columns: ["creado_por"] @@ -552,7 +613,8 @@ export type Database = { definicion: Json id: string nombre: string - version: string | null + template_id: string | null + tipo: Database["public"]["Enums"]["tipo_estructura_plan"] | null } Insert: { actualizado_en?: string @@ -560,7 +622,8 @@ export type Database = { definicion?: Json id?: string nombre: string - version?: string | null + template_id?: string | null + tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] | null } Update: { actualizado_en?: string @@ -568,7 +631,8 @@ export type Database = { definicion?: Json id?: string nombre?: string - version?: string | null + template_id?: string | null + tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] | null } Relationships: [] } @@ -692,6 +756,13 @@ export type Database = { referencedRelation: "asignaturas" referencedColumns: ["id"] }, + { + foreignKeyName: "interacciones_ia_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "plantilla_asignatura" + referencedColumns: ["asignatura_id"] + }, { foreignKeyName: "interacciones_ia_plan_estudio_id_fkey" columns: ["plan_estudio_id"] @@ -798,26 +869,55 @@ export type Database = { }, ] } - person: { + plan_mensajes_ia: { Row: { - email: string | null - first_name: string | null - id: number - last_name: string | null + campos: string[] + conversacion_plan_id: string + enviado_por: string + estado: Database["public"]["Enums"]["estado_mensaje_ia"] + fecha_actualizacion: string + fecha_creacion: string + id: string + is_refusal: boolean + mensaje: string + propuesta: Json | null + respuesta: string | null } Insert: { - email?: string | null - first_name?: string | null - id?: number - last_name?: string | null + campos?: string[] + conversacion_plan_id: string + enviado_por?: string + estado?: Database["public"]["Enums"]["estado_mensaje_ia"] + fecha_actualizacion?: string + fecha_creacion?: string + id?: string + is_refusal?: boolean + mensaje: string + propuesta?: Json | null + respuesta?: string | null } Update: { - email?: string | null - first_name?: string | null - id?: number - last_name?: string | null + campos?: string[] + conversacion_plan_id?: string + enviado_por?: string + estado?: Database["public"]["Enums"]["estado_mensaje_ia"] + fecha_actualizacion?: string + fecha_creacion?: string + id?: string + is_refusal?: boolean + mensaje?: string + propuesta?: Json | null + respuesta?: string | null } - Relationships: [] + Relationships: [ + { + foreignKeyName: "plan_mensajes_ia_conversacion_plan_id_fkey" + columns: ["conversacion_plan_id"] + isOneToOne: false + referencedRelation: "conversaciones_plan" + referencedColumns: ["id"] + }, + ] } planes_estudio: { Row: { @@ -925,36 +1025,6 @@ export type Database = { }, ] } - professor: { - Row: { - department: string | null - email: string | null - employee_number: string | null - first_name: string | null - id: number - last_name: string | null - salary: number | null - } - Insert: { - department?: string | null - email?: string | null - employee_number?: string | null - first_name?: string | null - id?: number - last_name?: string | null - salary?: number | null - } - Update: { - department?: string | null - email?: string | null - employee_number?: string | null - first_name?: string | null - id?: number - last_name?: string | null - salary?: number | null - } - Relationships: [] - } responsables_asignatura: { Row: { asignatura_id: string @@ -985,6 +1055,13 @@ export type Database = { referencedRelation: "asignaturas" referencedColumns: ["id"] }, + { + foreignKeyName: "responsables_asignatura_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "plantilla_asignatura" + referencedColumns: ["asignatura_id"] + }, { foreignKeyName: "responsables_asignatura_usuario_id_fkey" columns: ["usuario_id"] @@ -1015,36 +1092,6 @@ export type Database = { } Relationships: [] } - student: { - Row: { - email: string | null - enrollment_number: string | null - first_name: string | null - id: number - last_name: string | null - major: string | null - semester: number | null - } - Insert: { - email?: string | null - enrollment_number?: string | null - first_name?: string | null - id?: number - last_name?: string | null - major?: string | null - semester?: number | null - } - Update: { - email?: string | null - enrollment_number?: string | null - first_name?: string | null - id?: number - last_name?: string | null - major?: string | null - semester?: number | null - } - Relationships: [] - } tareas_revision: { Row: { asignado_a: string @@ -1280,6 +1327,14 @@ export type Database = { } } Views: { + plantilla_asignatura: { + Row: { + asignatura_id: string | null + estructura_id: string | null + template_id: string | null + } + Relationships: [] + } plantilla_plan: { Row: { estructura_id: string | null @@ -1298,13 +1353,13 @@ export type Database = { Args: { p_append: Json; p_id: string } Returns: undefined } - custom_access_token_hook: { Args: { event: Json }; Returns: Json } unaccent: { Args: { "": string }; Returns: string } unaccent_immutable: { Args: { "": string }; Returns: string } } Enums: { estado_asignatura: "borrador" | "revisada" | "aprobada" | "generando" estado_conversacion: "ACTIVA" | "ARCHIVANDO" | "ARCHIVADA" | "ERROR" + estado_mensaje_ia: "PROCESANDO" | "COMPLETADO" | "ERROR" estado_tarea_revision: "PENDIENTE" | "COMPLETADA" | "OMITIDA" fuente_cambio: "HUMANO" | "IA" nivel_plan_estudio: @@ -1472,13 +1527,11 @@ export type CompositeTypes< : never export const Constants = { - graphql_public: { - Enums: {}, - }, public: { Enums: { estado_asignatura: ["borrador", "revisada", "aprobada", "generando"], estado_conversacion: ["ACTIVA", "ARCHIVANDO", "ARCHIVADA", "ERROR"], + estado_mensaje_ia: ["PROCESANDO", "COMPLETADO", "ERROR"], estado_tarea_revision: ["PENDIENTE", "COMPLETADA", "OMITIDA"], fuente_cambio: ["HUMANO", "IA"], nivel_plan_estudio: [ @@ -1533,4 +1586,3 @@ export const Constants = { }, }, } as const - From c2a7eea20abdda80e6720ce14231130d63eff82e Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 08:10:50 -0600 Subject: [PATCH 08/38] Add GraphQL public type definitions and update constants --- supabase/functions/_shared/database.types.ts | 32 +++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/supabase/functions/_shared/database.types.ts b/supabase/functions/_shared/database.types.ts index 9684acc..a889116 100644 --- a/supabase/functions/_shared/database.types.ts +++ b/supabase/functions/_shared/database.types.ts @@ -7,10 +7,30 @@ export type Json = | Json[] export type Database = { - // Allows to automatically instantiate createClient with right options - // instead of createClient(URL, KEY) - __InternalSupabase: { - PostgrestVersion: "12.2.3 (519615d)" + graphql_public: { + Tables: { + [_ in never]: never + } + Views: { + [_ in never]: never + } + Functions: { + graphql: { + Args: { + extensions?: Json + operationName?: string + query?: string + variables?: Json + } + Returns: Json + } + } + Enums: { + [_ in never]: never + } + CompositeTypes: { + [_ in never]: never + } } public: { Tables: { @@ -1527,6 +1547,9 @@ export type CompositeTypes< : never export const Constants = { + graphql_public: { + Enums: {}, + }, public: { Enums: { estado_asignatura: ["borrador", "revisada", "aprobada", "generando"], @@ -1586,3 +1609,4 @@ export const Constants = { }, }, } as const + From b04961a944f605b1a88381f564a6fad2372ccf42 Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 08:16:42 -0600 Subject: [PATCH 09/38] Enhance CI workflow to preview generated types and improve error messaging --- .gitea/workflows/ci.yaml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index 2c24f53..9e41e93 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -21,8 +21,13 @@ jobs: - name: Verify generated types are checked in run: | supabase gen types typescript --local > supabase/functions/_shared/database.types.ts + + echo "----- Generated types preview -----" + head -n 40 supabase/functions/_shared/database.types.ts + echo "-----------------------------------" + if ! git diff --ignore-space-at-eol --exit-code --quiet supabase/functions/_shared/database.types.ts; then - echo "Detected uncommitted changes after build. See status below:" - git diff - exit 1 + echo "Detected uncommitted changes after build. See diff below:" + git diff supabase/functions/_shared/database.types.ts + exit 1 fi From 3959b97aa1d7a2cbef468940e6f9469d26e808dc Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 08:25:59 -0600 Subject: [PATCH 10/38] Improve CI workflow by adding directory listing for debugging and removing generated types preview --- .gitea/workflows/ci.yaml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index 9e41e93..286de96 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -18,16 +18,13 @@ jobs: - name: Start Supabase local development setup run: supabase db start + - name: List directory contents for debugging + run: ls -R + - name: Verify generated types are checked in run: | supabase gen types typescript --local > supabase/functions/_shared/database.types.ts - - echo "----- Generated types preview -----" - head -n 40 supabase/functions/_shared/database.types.ts - echo "-----------------------------------" - if ! git diff --ignore-space-at-eol --exit-code --quiet supabase/functions/_shared/database.types.ts; then echo "Detected uncommitted changes after build. See diff below:" - git diff supabase/functions/_shared/database.types.ts exit 1 fi From 2ff1a5e8a99a616ae5fd261040cf3155dd7c32fc Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 08:36:02 -0600 Subject: [PATCH 11/38] Refactor CI workflow to reset database for clean state and remove directory listing step --- .gitea/workflows/ci.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index 286de96..3a14df4 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -18,8 +18,8 @@ jobs: - name: Start Supabase local development setup run: supabase db start - - name: List directory contents for debugging - run: ls -R + - name: Reset database to ensure a clean state + run: supabase db reset --no-seed - name: Verify generated types are checked in run: | From 347f932a21bd40b706313b4a5fa724b6de4d2e57 Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 09:27:51 -0600 Subject: [PATCH 12/38] Disable JWT verification for openai-webhook-responses function --- supabase/config.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/supabase/config.toml b/supabase/config.toml index ca14823..87d7933 100644 --- a/supabase/config.toml +++ b/supabase/config.toml @@ -57,7 +57,7 @@ uri = "pg-functions://postgres/public/custom_access_token_hook" [functions.openai-webhook-responses] enabled = true -verify_jwt = true +verify_jwt = false import_map = "./functions/openai-webhook-responses/deno.json" # Uncomment to specify a custom file path to the entrypoint. # Supported file extensions are: .ts, .js, .mjs, .jsx, .tsx From caa340ef22437d2062dc0fb0a281514cfeac081d Mon Sep 17 00:00:00 2001 From: Guillermo Arrieta Medina Date: Tue, 10 Mar 2026 13:31:28 -0600 Subject: [PATCH 13/38] =?UTF-8?q?hotfix:=20se=20actualiz=C3=B3=20la=20semi?= =?UTF-8?q?lla=20de=20la=20BDD=20y=20se=20corrigieron=20las=20migraciones?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit La migración de realtime no era correcta. Hacía drop de la columna criterios_de_evaluacion de la tabla asignaturas y le hacían falta las publicaciones a realtime de planes_estudio y asignaturas --- supabase/functions/_shared/database.types.ts | 2 +- .../migrations/20260310154853_realtime.sql | 46 +-- supabase/seed.sql | 296 +++++++++++++----- 3 files changed, 223 insertions(+), 121 deletions(-) diff --git a/supabase/functions/_shared/database.types.ts b/supabase/functions/_shared/database.types.ts index a889116..4176947 100644 --- a/supabase/functions/_shared/database.types.ts +++ b/supabase/functions/_shared/database.types.ts @@ -1,4 +1,4 @@ -export type Json = +export type Json = | string | number | boolean diff --git a/supabase/migrations/20260310154853_realtime.sql b/supabase/migrations/20260310154853_realtime.sql index fc88cbf..ab23023 100644 --- a/supabase/migrations/20260310154853_realtime.sql +++ b/supabase/migrations/20260310154853_realtime.sql @@ -1,43 +1,7 @@ -drop view if exists "public"."plantilla_asignatura"; - -alter table "public"."asignaturas" drop column "criterios_de_evaluacion"; - -create or replace view "public"."plantilla_asignatura" as SELECT asignaturas.id AS asignatura_id, - struct.id AS estructura_id, - struct.template_id - FROM (public.asignaturas - JOIN public.estructuras_asignatura struct ON ((asignaturas.estructura_id = struct.id))); - - -grant delete on table "public"."asignatura_mensajes_ia" to "postgres"; - -grant insert on table "public"."asignatura_mensajes_ia" to "postgres"; - -grant references on table "public"."asignatura_mensajes_ia" to "postgres"; - -grant select on table "public"."asignatura_mensajes_ia" to "postgres"; - -grant trigger on table "public"."asignatura_mensajes_ia" to "postgres"; - -grant truncate on table "public"."asignatura_mensajes_ia" to "postgres"; - -grant update on table "public"."asignatura_mensajes_ia" to "postgres"; - -grant delete on table "public"."plan_mensajes_ia" to "postgres"; - -grant insert on table "public"."plan_mensajes_ia" to "postgres"; - -grant references on table "public"."plan_mensajes_ia" to "postgres"; - -grant select on table "public"."plan_mensajes_ia" to "postgres"; - -grant trigger on table "public"."plan_mensajes_ia" to "postgres"; - -grant truncate on table "public"."plan_mensajes_ia" to "postgres"; - -grant update on table "public"."plan_mensajes_ia" to "postgres"; - - alter publication supabase_realtime add table asignatura_mensajes_ia; -alter publication supabase_realtime add table plan_mensajes_ia; \ No newline at end of file +alter publication supabase_realtime add table plan_mensajes_ia; + +alter publication supabase_realtime add table asignaturas; + +alter publication supabase_realtime add table planes_estudio; \ No newline at end of file diff --git a/supabase/seed.sql b/supabase/seed.sql index 2a57fcc..6c2f852 100644 --- a/supabase/seed.sql +++ b/supabase/seed.sql @@ -4,12 +4,15 @@ SET session_replication_role = replica; -- PostgreSQL database dump -- --- Dumped from database version 15.8 --- Dumped by pg_dump version 15.8 +-- \restrict DaVvt3hgGt3BD9jg955NN2CttMO78cFzF8jbj1XddaF61tZgOOnRAqbvdZa3xNt + +-- Dumped from database version 17.6 +-- Dumped by pg_dump version 17.6 SET statement_timeout = 0; SET lock_timeout = 0; SET idle_in_transaction_session_timeout = 0; +SET transaction_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SELECT pg_catalog.set_config('search_path', '', false); @@ -2058,7 +2061,7 @@ INSERT INTO "public"."estados_plan" ("id", "clave", "etiqueta", "orden", "es_fin -- INSERT INTO "public"."estructuras_asignatura" ("id", "nombre", "definicion", "creado_en", "actualizado_en", "template_id", "tipo") VALUES - ('7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'Asignatura SEP/ULSA (semilla)', '{"type": "object", "required": ["denominacion_de_la_asignatura_o_unidad_de_aprendizaje", "ciclo", "clave_de_la_asignatura", "fines_de_aprendizaje_o_formacion", "contenido", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico", "actividades_de_aprendizaje_independientes", "criterios_de_evaluacion", "modalidades_tecnologicas_e_informaticas"], "properties": {"ciclo": {"type": "string", "title": "Ciclo", "examples": ["Primer semestre"], "description": "Indicar el ciclo en el que se impartirá la asignatura en el orden establecido en el mapa curricular. En caso de ser flexible; indicar el área o módulo al que pertenece. Para currículum rígido que contemple asignaturas optativas; indicar “Optativa”, y en caso de que se curse en un ciclo determinado, señalar el ciclo acompañado de la leyenda “Optativa”."}, "contenido": {"type": "null", "const": null, "title": "Contenido temático", "x-column": "contenido_tematico", "description": "Enunciar, en idioma español, los temas y subtemas que se abordarán en la asignatura o unidad de aprendizaje; estructurados de manera lógica y secuencial y numerados en orden jerárquico. Éstos deberán ser acordes con la carga horaria asignada, sustentar la denominación de la asignatura y contribuir al logro de los fines de aprendizaje."}, "clave_de_la_asignatura": {"type": "string", "title": "Clave de la asignatura", "examples": ["MAT-101"], "description": "Anotar la clave que identifica a la asignatura o unidad de aprendizaje; la cual debe coincidir con la señalada en el mapa curricular."}, "criterios_de_evaluacion": {"type": "string", "title": "Criterios de evaluación", "description": "Enlistar las actividades o productos que considerarán para valorar los aprendizajes logrados por los estudiantes, señalar el porcentaje para cada uno, de tal manera que sumen el 100%. Éstos deberán ser acordes con las actividades de aprendizaje."}, "fines_de_aprendizaje_o_formacion": {"type": "string", "title": "Fines de aprendizaje o formación", "description": "Describir los aprendizajes y fines que alcanzará el estudiante al concluir la asignatura. Deberá sustentar la denominación de la asignatura, vincularse con los contenidos temáticos y coadyuvar al logro del fin de aprendizaje y perfil de egreso del plan de estudios."}, "modalidades_tecnologicas_e_informaticas": {"type": "string", "title": "Modalidades tecnológicas e informáticas", "description": "Describir los recursos tecnológicos y de comunicación que se emplearán para el desarrollo del proceso de enseñanza-aprendizaje de la asignatura. Para las modalidades no escolarizada y mixta, este elemento es obligatorio."}, "actividades_de_aprendizaje_independientes": {"type": "string", "title": "Actividades de aprendizaje independientes", "description": "Señalar las actividades de aprendizaje que desarrollará el estudiante de manera independiente. Éstas deberán ser acordes con la naturaleza de la asignatura y la modalidad educativa."}, "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": {"type": "string", "title": "Denominación de la asignatura o unidad de aprendizaje", "examples": ["Matemáticas I"], "description": "Señalar el nombre de la asignatura o unidad de aprendizaje de igual manera que en el mapa curricular."}, "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": {"type": "string", "title": "Actividades de aprendizaje bajo conducción de un académico", "description": "Señalar las actividades de aprendizaje que desarrollará el estudiante en las horas-clase. Éstas deberán ser acordes con la naturaleza de la asignatura, modalidad educativa e instalaciones empleadas, además de contribuir al logro de los fines de aprendizaje."}}, "additionalProperties": false}', '2026-01-09 13:45:37.784586+00', '2026-03-04 15:49:02.798608+00', '1368853487117805947', 'CURRICULAR'); + ('7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'Asignatura SEP/ULSA (semilla)', '{"type": "object", "required": ["denominacion_de_la_asignatura_o_unidad_de_aprendizaje", "ciclo", "clave_de_la_asignatura", "fines_de_aprendizaje_o_formacion", "contenido", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico", "actividades_de_aprendizaje_independientes", "criterios_de_evaluacion", "modalidades_tecnologicas_e_informaticas"], "properties": {"ciclo": {"type": "string", "title": "Ciclo", "examples": ["Primer semestre"], "description": "Indicar el ciclo en el que se impartirá la asignatura en el orden establecido en el mapa curricular. En caso de ser flexible; indicar el área o módulo al que pertenece. Para currículum rígido que contemple asignaturas optativas; indicar “Optativa”, y en caso de que se curse en un ciclo determinado, señalar el ciclo acompañado de la leyenda “Optativa”."}, "contenido": {"type": "null", "const": null, "title": "Contenido temático", "x-column": "contenido_tematico", "description": "Enunciar, en idioma español, los temas y subtemas que se abordarán en la asignatura o unidad de aprendizaje; estructurados de manera lógica y secuencial y numerados en orden jerárquico. Éstos deberán ser acordes con la carga horaria asignada, sustentar la denominación de la asignatura y contribuir al logro de los fines de aprendizaje."}, "clave_de_la_asignatura": {"type": "string", "title": "Clave de la asignatura", "examples": ["MAT-101"], "description": "Anotar la clave que identifica a la asignatura o unidad de aprendizaje; la cual debe coincidir con la señalada en el mapa curricular."}, "criterios_de_evaluacion": {"type": "string", "title": "Criterios de evaluación", "x-column": "criterios_de_evaluacion", "description": "Enlistar las actividades o productos que considerarán para valorar los aprendizajes logrados por los estudiantes, señalar el porcentaje para cada uno, de tal manera que sumen el 100%. Éstos deberán ser acordes con las actividades de aprendizaje."}, "fines_de_aprendizaje_o_formacion": {"type": "string", "title": "Fines de aprendizaje o formación", "description": "Describir los aprendizajes y fines que alcanzará el estudiante al concluir la asignatura. Deberá sustentar la denominación de la asignatura, vincularse con los contenidos temáticos y coadyuvar al logro del fin de aprendizaje y perfil de egreso del plan de estudios."}, "modalidades_tecnologicas_e_informaticas": {"type": "string", "title": "Modalidades tecnológicas e informáticas", "description": "Describir los recursos tecnológicos y de comunicación que se emplearán para el desarrollo del proceso de enseñanza-aprendizaje de la asignatura. Para las modalidades no escolarizada y mixta, este elemento es obligatorio."}, "actividades_de_aprendizaje_independientes": {"type": "string", "title": "Actividades de aprendizaje independientes", "description": "Señalar las actividades de aprendizaje que desarrollará el estudiante de manera independiente. Éstas deberán ser acordes con la naturaleza de la asignatura y la modalidad educativa."}, "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": {"type": "string", "title": "Denominación de la asignatura o unidad de aprendizaje", "examples": ["Matemáticas I"], "description": "Señalar el nombre de la asignatura o unidad de aprendizaje de igual manera que en el mapa curricular."}, "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": {"type": "string", "title": "Actividades de aprendizaje bajo conducción de un académico", "description": "Señalar las actividades de aprendizaje que desarrollará el estudiante en las horas-clase. Éstas deberán ser acordes con la naturaleza de la asignatura, modalidad educativa e instalaciones empleadas, además de contribuir al logro de los fines de aprendizaje."}}, "additionalProperties": false}', '2026-01-09 13:45:37.784586+00', '2026-03-04 23:37:04.114114+00', '1368853487117805947', 'CURRICULAR'); -- @@ -2091,8 +2094,8 @@ INSERT INTO "public"."planes_estudio" ("id", "carrera_id", "estructura_id", "nom ('dc286072-c649-43aa-8a2f-aa3ef6166647', '991edcde-b77e-4d22-b76b-3bf6ec3d3555', '69fb2b77-5a95-47e0-bf1f-389d384200e4', 'Químico Farmacéutico Biólogo (2026)', 'Licenciatura', 'Semestre', 8, '{"vigencia": "Por determinar por la autoridad educativa", "area_de_estudio": "07 Salud (CMPE 2016). Campo de formación específico: Química Farmacéutica, Farmacotecnia, Cosmética y Perfumería (con énfasis en análisis instrumental, regulación y seguridad sanitaria).", "perfil_de_egreso": "Conocimientos\n- Fundamentos de química general, analítica, orgánica, bioquímica, fisicoquímica y microbiología, con énfasis en su aplicación a farmacotecnia y cosmética.\n- Estructura, reactividad y síntesis de compuestos orgánicos y aromáticos, aceites esenciales, aromaquímicos y moléculas odorantes relevantes para perfumería.\n- Tecnología farmacéutica y de cosméticos: formas farmacéuticas, sistemas de liberación, excipientes, procesos unitarios, escalamiento y control de procesos.\n- Métodos instrumentales (GC-MS, HPLC/UPLC, IR, UV-Vis, GC-O, cromatografía preparativa) aplicados al análisis de fragancias, cosméticos y medicamentos.\n- Evaluación sensorial, psicofísica del olfato, diseño de paneles, estadística sensorial y técnicas descriptivas/hedónicas aplicadas a fragancias.\n- Gestión de la calidad, Buenas Prácticas de Manufactura (BPM/BPF: NOM, ISO 22716), validación de métodos, metrología y aseguramiento de la calidad.\n- Legislación sanitaria y regulatoria: marco COFEPRIS, NOM aplicables a cosméticos y perfumes, lineamientos IFRA, etiquetado, seguridad del consumidor y dossier técnico.\n- Toxicología, seguridad química, evaluación de riesgo, higiene y bioseguridad en laboratorios y plantas.\n\nHabilidades\n- Formular, optimizar y escalar fragancias finas y productos cosméticos fragranciados, así como formas farmacéuticas sólidas, semisólidas y líquidas.\n- Diseñar y validar métodos analíticos para identificación, cuantificación y control de calidad de ingredientes aromáticos, materias primas y productos terminados.\n- Aplicar diseño de experimentos (DoE), análisis multivariante y herramientas quimiométricas para optimización sensorial y de desempeño.\n- Evaluar estabilidad físico-química, fotoestabilidad, compatibilidad envase-producto y desempeño sensorial en condiciones aceleradas y reales.\n- Operar, calibrar y mantener equipos de laboratorio y planta piloto, asegurando trazabilidad de mediciones y cumplimiento de BPF/BPM.\n- Gestionar sistemas de calidad, documentación técnica (POE, AMEF, PNO), auditorías internas y externas, y liberación de lotes.\n- Integrar conocimientos de mercadotecnia olfativa y tendencias del mercado para alinear el desarrollo de fragancias a perfiles de consumidor y normatividad.\n- Comunicar resultados técnicos mediante reportes, presentaciones y defensa de proyectos ante audiencias técnicas y no técnicas en español e inglés.\n\nActitudes y valores\n- Ética profesional, responsabilidad sanitaria y compromiso con la seguridad del consumidor y la protección ambiental.\n- Pensamiento crítico, innovación y mejora continua con enfoque de sostenibilidad y química verde.\n- Trabajo colaborativo, liderazgo técnico, gestión del tiempo y orientación a resultados en contextos multidisciplinarios e interculturales.", "diseno_curricular": "Flexible", "perfil_de_ingreso": "Conocimientos\n- Matemáticas: álgebra, trigonometría y nociones de cálculo diferencial.\n- Ciencias básicas: química general y orgánica básica, biología celular y microbiología introductoria, física (mecánica y termodinámica) básicas.\n- Comprensión lectora en español e inglés técnico (nivel A2-B1). \n\nHabilidades\n- Razonamiento lógico-matemático y manejo de operaciones algebraicas aplicadas a problemas de química.\n- Competencias básicas de laboratorio: manejo de material volumétrico, seguridad e higiene, preparación de soluciones, registro en bitácora.\n- Uso básico de TIC: hoja de cálculo, procesador de texto, gestor de referencias y plataformas institucionales.\n\nActitudes y aptitudes\n- Disciplina, perseverancia y atención al detalle.\n- Disposición para el trabajo en laboratorio y para el aprendizaje autónomo.\n- Conducta ética, responsabilidad y apertura al trabajo en equipo.", "curso_propedeutico": "Propuesta de curso propedéutico (40–60 h; 2–3 semanas previas al inicio del programa). Población objetivo: aspirantes sin antecedentes en bachillerato químico-biológico o con rezago en ciencias básicas. Objetivos: nivelar competencias en química, matemáticas, seguridad en laboratorio y fundamentos de perfumería; facilitar la transición al plan de estudios y reducir brechas de aprendizaje. Módulos propuestos (con distribución horaria sugerida):\n- Química general y fundamentos de análisis (12 h teoría + 8 h prácticas).\n- Matemáticas para ciencias (12 h teoría + 8 h prácticas).\n- Habilidades de laboratorio y bioseguridad (8 h teoría + 8 h prácticas).\n- Inducción a perfumería y ética (4 h teoría).\n- Competencias digitales y manejo de plataformas institucionales (4 h teoría).\n- Taller de lectura de textos técnicos en español e inglés básico (aleatoriamente integrado, 4 h).\nResultados de aprendizaje esperados: LO1–LO4 (dominio de conceptos básicos de química y matemáticas, competencia en seguridad y buenas prácticas de laboratorio, comprensión básica de perfumería y ética, habilidad para registrar y presentar evidencias de aprendizaje). Evaluación: diagnóstico inicial (pre-test), evaluaciones formativas durante el curso y evaluación final (prueba teórico-práctica o portafolio). Criterios de aprobación: mínimo 80% de asistencia y puntuación aprobatoria en las evaluaciones (generación de bitácora y evidencias). Modalidad: presencial con apoyo de recursos digitales y simuladores cuando sea posible. Requisitos de acreditación: certificación de haber cumplido prácticas y comprendido fundamentos, con registro en el historial académico. Alineación: al finalizar, el estudiante debe presentar evidencia de dominio en química/ matemáticas básicas, seguridad en laboratorio y conceptos introductorios de perfumería para facilitar el rendimiento en las asignaturas del plan.", "modalidad_educativa": "Escolar", "antecedente_academico": "Bachillerato general concluido, preferentemente con orientación químico-biológica o de ciencias de la salud; o bachillerato tecnológico afín (p. ej., Técnico Laboratorista Químico). Presentar certificado de estudios conforme a la normativa vigente.", "carga_horaria_a_la_semana": 34, "programa_de_investigacion": null, "clave_del_plan_de_estudios": "ULSM-QFB-2026", "duracion_del_ciclo_escolar": "18 semanas", "fines_de_aprendizaje_o_formacion": "- Analizar la estructura, propiedades y reactividad de compuestos orgánicos, aromáticos y biomoléculas para resolver problemas de formulación y control de calidad.\n- Diseñar formulaciones de fragancias finas, cosméticos fragranciados y formas farmacéuticas, considerando desempeño, estabilidad, seguridad y normatividad aplicable (IFRA, COFEPRIS).\n- Evaluar la calidad de materias primas, insumos aromáticos y productos terminados mediante métodos instrumentales validados y estadística aplicada.\n- Aplicar Buenas Prácticas de Laboratorio y de Manufactura para asegurar trazabilidad, reproducibilidad y cumplimiento regulatorio.\n- Implementar diseños experimentales y análisis quimiométricos para optimizar perfiles sensoriales y funcionales de productos fragranciados.\n- Gestionar riesgos, seguridad e higiene en laboratorio y planta, incluyendo manejo de sustancias peligrosas y residuos conforme a normatividad.\n- Integrar conocimientos científicos, tecnológicos y de mercadotecnia olfativa para proponer soluciones pertinentes a necesidades del sector salud-cosmético y perfumería.\n- Comunicar resultados técnicos de forma clara, ética y sustentada, en español e inglés, a audiencias especializadas y no especializadas.\n- Emprender proyectos de innovación y mejora continua con enfoque de sostenibilidad y química verde en la industria farmacéutica, cosmética y de perfumería.", "nivel_y_nombre_del_plan_de_estudios": "Licenciatura en Químico Farmacéutico Biólogo (2026) ", "nombre_autorizado_de_la_institucion": "Universidad La Salle México", "total_de_ciclos_del_plan_de_estudios": "8", "sustento_teorico_del_modelo_curricular": "El plan se fundamenta en un enfoque por competencias profesionales integrales, con base constructivista y de aprendizaje situado. Se articula mediante:\n- Resultados de aprendizaje observables alineados a la Taxonomía de Bloom y a estándares del sector salud-cosmético.\n- Integración teoría-práctica con alto componente de laboratorio y planta piloto; uso de problemas auténticos (ABP) y proyectos integradores por semestre.\n- Evaluación basada en evidencias: prácticas con bitácora, informes técnicos, portafolio, rúbricas y evaluación sensorial objetiva.\n- Transversalidad de ejes: ciencias básicas, profesionalizantes (farmacotecnia, análisis instrumental, calidad), y eje de perfumería (formulación, análisis, sensorial y regulación).\n- Vinculación industria–academia mediante estancias, seminarios con casas perfumistas y co-diseño de proyectos.\n- Enfoque de calidad y mejora continua (PDCA), seguridad y sostenibilidad (química verde e ISO 22716).", "justificacion_de_la_propuesta_curricular": null, "administracion_y_operatividad_del_plan_de_estudios": "Estructura y seriación\n- Diseño curricular rígido en 8 semestres. Semestres 1-4: bases científicas y metodológicas; semestres 5-8: integración profesional y especialización en perfumería y cosméticos.\n- Seriación por prerrequisitos académicos y de competencias de laboratorio; control de acreditaciones seriadas para acceso a talleres avanzados de perfumería.\n\nCargas y componentes formativos por semestre (referenciales)\n- 6 a 7 asignaturas por semestre, combinando teoría y laboratorio. Carga máxima semanal: 34 horas bajo conducción docente.\n- Componentes obligatorios: prácticas de laboratorio, seminarios de industria, proyecto integrador por semestre y actividades de seguridad e higiene.\n\nEje de perfumería (5º a 8º semestre)\n- Asignaturas y talleres: Química de Fragancias y Aromáticos, Análisis Instrumental Aplicado a Perfumería, Tecnología de Cosméticos y Perfumes, Evaluación Sensorial y Marketing Olfativo, Regulación y Seguridad de Fragancias, Taller de Formulación de Fragancias, Proyecto Integrador de Perfumado.\n\nVinculación, prácticas y servicio social\n- Servicio social: mínimo 480 horas a partir de 6º semestre en instituciones de salud, laboratorios de control de calidad o industria cosmética.\n- Prácticas profesionales: 240–480 horas en 7º–8º semestre en casas perfumistas, cosmética o farmacéutica; tutoría académica y evaluación por competencias.\n\nGestión académica y aseguramiento de la calidad\n- Coordinación de programa y Comité Curricular (académicos, industria y egresados) para seguimiento de resultados de aprendizaje y pertinencia.\n- Sistemas de información académica para trazabilidad de competencias, asistencia, calificaciones, bitácoras y POE.\n- Protocolos de seguridad, mantenimiento y calibración de equipo; auditorías internas semestrales de laboratorios.\n\nTitulación\n- Modalidades: tesis/proyecto de aplicación, examen general de conocimientos, o portafolio con evidencia de competencias y proyecto en perfumería.", "propuesta_de_evaluacion_periodica_del_plan_de_estudios": "Metodología y periodicidad\n- Evaluación continua anual y revisión integral trianual del plan bajo ciclo PDCA.\n\nIndicadores clave\n- Eficiencia terminal, tiempo de titulación, empleabilidad a 6 y 12 meses, satisfacción de empleadores, desempeño en EGEL afín, cumplimiento de BPF/ISO 22716 en prácticas, resultados de auditorías de laboratorio, proyectos con industria y producción académica estudiantil.\n\nInstrumentos y fuentes\n- Encuestas a estudiantes/egresados/empleadores, rúbricas de proyectos integradores, análisis de portafolios, evaluación externa por pares académicos e industriales (casas perfumistas y laboratorios cosméticos), benchmarking nacional/internacional y análisis de trazabilidad de evidencias.\n\nProcedimientos\n- Mapeo de resultados de aprendizaje vs. evidencias por asignatura; análisis de brechas; planes de mejora por unidad de aprendizaje; actualización de POE y contenidos; capacitación docente en tendencias de perfumería, métodos instrumentales y estadística sensorial.\n- Informe público de resultados y plan de mejora aprobado por el Comité Curricular y la Dirección Académica.", "nombre_y_cargo_de_la_persona_facultada_para_autorizar_el_plan_de_estudios": "Mtra. Claudia López Hernández, Directora Académica de la Facultad de Ciencias Químicas y Salud"}', '18f49b67-8077-4371-be6e-2019a3be3562', true, 'IA', '{"iaConfig": {"usarMCP": false, "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Genera un plan de estudios con énfasis especial en perfumería"}, "referencias": {"repositoriosIds": [], "archivosReferenciaIds": []}, "generado_por": "ai_generate_plan", "ai_structured": {"model": "gpt-5-2025-08-07", "usage": {"input_tokens": 3766, "total_tokens": 9774, "output_tokens": 6008, "input_tokens_details": {"cached_tokens": 3712}, "output_tokens_details": {"reasoning_tokens": 3456}}, "responseId": "resp_08652921016d16350069939cf516ac81a0b23dd0d51a15afb0", "conversationId": null}}', NULL, NULL, '2026-02-16 22:42:41.82455+00', '2026-03-04 15:42:54.388936+00'), ('3ebc1d1c-e950-4a6e-948f-bb89efa40e77', '7075d507-6404-4b18-a5cb-e07a187bae55', '69fb2b77-5a95-47e0-bf1f-389d384200e4', 'Licenciatura en Mercadotecnia ', 'Licenciatura', 'Semestre', 9, '{"vigencia": "Por definir por la autoridad educativa", "area_de_estudio": "Administración y negocios", "perfil_de_egreso": "Conocimientos:\n- Fundamentos de mercadotecnia estratégica y comportamiento del consumidor.\n- Diseño de investigaciones de mercado cuantitativas, cualitativas e híbridas.\n- Muestreo, estadística aplicada y control de calidad de datos.\n- Analítica de datos, minería de datos y uso de inteligencia artificial de forma ética.\n- Gestión de paneles de consumidores y estudios longitudinales.\n- Herramientas para escucha social y análisis de sentimiento.\n- Diseño de experimentos, pruebas de dos variantes y simulaciones.\n- Ética, protección de datos personales y cumplimiento normativo.\n- Integración omnicanal de fuentes en entornos físicos y digitales.\n- Mercados internacionales y marketing global: estrategias de entrada, adaptación de mensajes y análisis comparativo entre países (si aplica).\n- Enfoque en internacionalización y movilidad: oportunidades de movilidad, alianzas y cooperación con instituciones extranjeras (si aplica).\n\nHabilidades:\n- Formular problemas de investigación con objetivos, hipótesis e indicadores claros.\n- Diseñar instrumentos de captura y protocolos de recolección multicanal.\n- Analizar e interpretar grandes volúmenes de datos con rigor estadístico.\n- Detectar y mitigar sesgos, fraude y actividades automatizadas no deseadas.\n- Integrar información de múltiples fuentes para obtener hallazgos accionables.\n- Comunicar hallazgos con visualizaciones y narrativas persuasivas.\n- Gestionar proyectos de investigación con alcance, tiempos y presupuesto.\n- Colaborar con áreas de producto, ventas y finanzas para la toma de decisiones.\n- Desarrollar capacidades para trabajar en equipos multiculturales y gestionar investigaciones a escala global.\n- Diseñar y ejecutar investigaciones de mercados internacionales, incluyendo adaptaciones culturales y lingüísticas.\n\nActitudes:\n- Pensamiento crítico, curiosidad intelectual y orientación a la evidencia.\n- Responsabilidad social, respeto a la privacidad y cultura de la calidad.\n- Innovación, aprendizaje continuo y adaptabilidad tecnológica.\n- Interés y apertura hacia la internacionalización, movilidad académica y competencias globales.\n- Disposición para movilidad internacional y experiencias de intercambio cuando aplique.\n", "diseno_curricular": "Rígido", "perfil_de_ingreso": "Conocimientos mínimos para ingresar a la Licenciatura en Mercadotecnia (campo de estudio: administración y negocios):\n- Bachillerato o equivalente concluido.\n- Aritmética, álgebra básica y estadística descriptiva elemental.\n- Fundamentos de mercadotecnia y administración a nivel introductorio.\n- Lectura y redacción académica en español, con capacidad de comprender textos técnicos simples.\n- Reconocimiento básico de herramientas digitales (hojas de cálculo y presentaciones).\n\nHabilidades:\n- Manejo básico de hojas de cálculo y presentaciones para análisis simples.\n- Lectura comprensiva de textos introductorios y capacidad de extraer ideas clave.\n- Pensamiento lógico, atención al detalle y disposición para trabajo en equipo y trabajo de campo.\n- Capacidad para formular problemas simples y plantear preguntas de investigación básicas.\n\nAptitudes y actitudes:\n- Interés por la investigación aplicada y el análisis de datos.\n- Ética, responsabilidad, integridad y respeto a la privacidad.\n- Curiosidad intelectual, aprendizaje continuo y adaptabilidad tecnológica.\n- Orientación al trabajo colaborativo y a la comunicación efectiva.\n\nNotas: se mantiene como requisito mínimo el bachillerato concluido y se especifican las competencias esperadas para facilitar la selección y nivelación inicial acorde con el plan de estudios de Mercadotecnia.", "curso_propedeutico": "Propósito: nivelar y adaptar los conocimientos previos en estadística, metodología de investigación y redacción académica, con un enfoque modular y adaptable a diversos perfiles de ingreso.\nPoblación: aspirantes con deficiencias detectadas en diagnóstico y/o necesidad de fortalecimiento de fundamentos.\nDuración: 6 semanas previas al inicio del semestre (40-60 horas totales).\nContenidos por módulos:\n- Módulo 1: Estadística descriptiva, probabilidades básicas y uso básico de hojas de cálculo.\n- Módulo 2: Metodología de la investigación y formulación de problemas.\n- Módulo 3: Limpieza de datos, control de calidad y manejo de datos.\n- Módulo 4: Redacción académica, normas de citación y lectura crítica.\n- Módulo 5: Ética, privacidad y protección de datos.\nMetodología: aprendizaje activo, contenidos asíncronos y sesiones sincrónicas opcionales, proyectos cortos y evaluación formativa con retroalimentación continua; adaptación de contenidos según diagnóstico.\nEvaluación: ejercicios prácticos, pruebas cortas y un proyecto corto de investigación con rúbricas claras.\nResultados de aprendizaje: dominio básico de estadística, investigación, manejo de datos y redacción; capacidad para iniciar proyectos de investigación de mercados con ética y trazabilidad.", "modalidad_educativa": "Escolar", "antecedente_academico": "Bachillerato o equivalente concluido.", "carga_horaria_a_la_semana": 26, "programa_de_investigacion": null, "clave_del_plan_de_estudios": "2026", "duracion_del_ciclo_escolar": "18 semanas efectivas de clase.", "fines_de_aprendizaje_o_formacion": "- Analizar comportamientos del consumidor y dinámicas de mercado para detectar oportunidades.\n- Diseñar proyectos de investigación con enfoques cuantitativos, cualitativos e híbridos.\n- Evaluar la calidad de datos y la validez de los hallazgos con criterios estadísticos.\n- Implementar protocolos de recolección multicanal con integridad y trazabilidad.\n- Interpretar información compleja para generar hallazgos accionables y confiables.\n- Integrar fuentes de datos físicas y digitales para construir modelos de comprensión del mercado.\n- Optimizar procesos de investigación mediante automatización e inteligencia artificial responsable.\n- Gestionar proyectos con alcance, tiempo, costo y riesgos definidos.\n- Comunicar resultados con claridad, visualizaciones efectivas y recomendaciones estratégicas.\n- Garantizar el cumplimiento ético y normativo en todas las fases de la investigación", "nivel_y_nombre_del_plan_de_estudios": "Licenciatura en Mercadotecnia con énfasis en analítica de mercados, ética profesional e internacionalización", "nombre_autorizado_de_la_institucion": "Universidad La Salle México", "total_de_ciclos_del_plan_de_estudios": "9 semestres", "sustento_teorico_del_modelo_curricular": "El plan se sustenta en el enfoque por competencias profesionales, el aprendizaje basado en proyectos y la investigación aplicada. Integra metodologías activas, estudio de casos y laboratorios de datos para desarrollar competencias técnicas y transversales. El currículo articula asignaturas de fundamentos, metodología de investigación, estadística y analítica, comportamiento del consumidor, diseño de experimentos, escucha social y ética. La progresión por niveles fortalece el dominio conceptual y práctico para generar estudios de mercado pertinentes, válidos y útiles para la toma de decisiones.", "justificacion_de_la_propuesta_curricular": null, "administracion_y_operatividad_del_plan_de_estudios": "Diseño rígido en 9 semestres consecutivos.\nOrganización:\n- 6 a 7 asignaturas por semestre, con una carga máxima de 26 horas por semana.\n- Secuencia formativa: fundamentos, metodología, analítica y aplicación.\n- Asignaturas integradoras por semestre con proyectos reales o simulados.\n- Estancia profesional y proyecto terminal de investigación de mercado en el último año.\nOperación:\n- Calendario semestral de 18 semanas efectivas.\n- Tutoría académica y asesoría metodológica por semestre.\n- Evaluación continua mediante evidencias, prácticas y entregables de investigación.\n- Mecanismos de equivalencias y revalidaciones conforme a la normatividad vigente.", "propuesta_de_evaluacion_periodica_del_plan_de_estudios": "Periodicidad:\n- Revisión anual de resultados de aprendizaje, deserción, eficiencia terminal y satisfacción.\n- Evaluación integral cada tres años para actualización curricular.\nMetodología:\n- Comité académico con participación de docentes, estudiantes y empleadores.\n- Análisis de pertinencia con base en tendencias del mercado y requerimientos profesionales.\n- Indicadores de desempeño de proyectos, prácticas y colocación laboral.\n- Retroalimentación externa de organizaciones del sector y egresados.\nMejora continua:\n- Plan de acción con responsables, metas y cronograma.\n- Actualización de contenidos, bibliografía y prácticas en laboratorios de datos.", "nombre_y_cargo_de_la_persona_facultada_para_autorizar_el_plan_de_estudios": "Maestra Daniela Ruiz Martínez, Directora Académica"}', '18f49b67-8077-4371-be6e-2019a3be3562', true, 'IA', '{"iaConfig": {"usarMCP": false, "instruccionesAdicionalesIA": "Textos cortos pero concisos y evitar abreviaturas y siglas", "descripcionEnfoqueAcademico": "Genera un plan que este orientado a la generación de estudios de mercado"}, "referencias": {"repositoriosIds": [], "archivosReferenciaIds": []}, "generado_por": "ai_generate_plan", "ai_structured": {"model": "gpt-5-2025-08-07", "usage": {"input_tokens": 4241, "total_tokens": 9491, "output_tokens": 5250, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 3776}}, "responseId": "resp_078e1222e2e46bc800699c64fbd4ac819c94a74d2b9419aa52", "conversationId": null}}', NULL, NULL, '2026-02-23 14:34:25.880983+00', '2026-02-25 22:33:30.583353+00'), ('0e0aea4d-b8b4-4e75-8279-6224c3ac769f', '8208da08-d549-4359-8865-9d806bc54f19', '69fb2b77-5a95-47e0-bf1f-389d384200e4', 'Ingeniería en Cibernética y Ciberseguridad (2025)', 'Doctorado', 'Semestre', 8, '{"nivel": "Licenciatura", "nombre": "Ingeniería Cibernética", "area_de_estudio": "Tecnologías de la Información y la Comunicación (CMPE 2016)", "perfil_de_egreso": "Conocimientos: redes, sistemas, criptografía. Habilidades: pentesting, hardening, respuesta a incidentes. Actitudes: ética, responsabilidad.", "diseno_curricular": "Rígido", "perfil_de_ingreso": "Pensamiento lógico, bases de álgebra, nociones de programación y comunicación escrita.", "curso_propedeutico": null, "modalidad_educativa": "Probando guardado", "antecedente_academico": "Bachillerato concluido; afinidad con matemáticas y computación.", "carga_horaria_a_la_semana": 40, "programa_de_investigacion": null, "clave_del_plan_de_estudios": "2026-CIB-ING", "duracion_del_ciclo_escolar": "16", "fines_de_aprendizaje_o_formacion": "Formar profesionales capaces de diseñar, implementar y asegurar sistemas ciberfísicos y plataformas digitales.", "nombre_autorizado_de_la_institucion": "unameditfddfdfdf", "total_de_ciclos_del_plan_de_estudios": "8", "sustento_teorico_del_modelo_curricular": "Enfoque por competencias, aprendizaje basado en problemas y laboratorios.", "justificacion_de_la_propuesta_curricular": null, "administracion_y_operatividad_del_plan_de_estudios": "Plan rígido con cargas sugeridas por semestre; asignaturas seriadas por áreas.", "propuesta_de_evaluacion_periodica_del_plan_de_estudios": "Revisión anual por comité académico; actualización por tendencias y retroalimentación de egresados."}', '18f49b67-8077-4371-be6e-2019a3be3562', true, 'MANUAL', '{"seed": true, "version": "2026-01-08"}', '11111111-1111-1111-1111-111111111111', '11111111-1111-1111-1111-111111111111', '2026-01-09 13:45:37.784586+00', '2026-02-26 15:30:26.06711+00'), - ('198c763b-9d97-423b-b13a-5713437fc81b', '6d086d1b-aaea-4b76-9b16-fa8f3e29d9fa', '69fb2b77-5a95-47e0-bf1f-389d384200e4', 'Licenciatura en Educación Especial como sombra', 'Licenciatura', 'Semestre', 9, '{"vigencia": "(Espacio para uso exclusivo de la autoridad educativa)", "area_de_estudio": "Formación docente y ciencias de la educación", "perfil_de_egreso": "Conocimientos:\n - Marco conceptual de la Educación Especial y modelos de atención a la diversidad.\n - Normativa nacional e internacional sobre inclusión educativa y derechos de las personas con discapacidad.\n - Características del desarrollo infantil y del aprendizaje en educación primaria.\n - Estrategias pedagógicas y adaptaciones curriculares para diversas necesidades educativas.\nHabilidades:\n - Identificar y diagnosticar barreras de aprendizaje en entornos escolares.\n - Diseñar y aplicar adaptaciones curriculares y estrategias de apoyo individualizado.\n - Intervenir como figura de sombra para facilitar la participación y el aprendizaje en aula regular.\n - Colaborar con equipos docentes, familias y profesionales para la elaboración de planes de atención individualizada.\n - Evaluar el progreso del estudiante mediante instrumentos cualitativos y cuantitativos.\nActitudes:\n - Promover una práctica profesional ética, centrada en la dignidad y derechos del estudiantado.\n - Mostrar sensibilidad hacia la diversidad cultural, funcional y socioemocional.\n - Adoptar una postura reflexiva, colaborativa y comprometida con la mejora continua.", "diseno_curricular": "Rígido", "perfil_de_ingreso": "Conocimientos previos:\n - Educación media superior (bachillerato) completada.\n - Conocimientos básicos de psicología del desarrollo y didáctica (preferente).\nHabilidades y destrezas:\n - Capacidad de comunicación clara y trabajo en equipo.\n - Habilidad para la observación y registro de conductas y procesos de aprendizaje.\n - Manejo básico de herramientas informáticas (navegación web, edición de texto y acceso a plataformas educativas).\nAptitudes personales:\n - Vocación por el trabajo con infancia y jóvenes.\n - Paciencia, tolerancia y resiliencia para la resolución de conflictos en entornos escolares.\n - Disponibilidad para realizar estancias prácticas en centros educativos y trabajo de campo.", "curso_propedeutico": "Situaciones de aplicación:\n - Dirigido a aspirantes que no acrediten formación previa en áreas afines (psicopedagogía, educación o trabajo social).\nPoblación objetivo:\n - Aspirantes a la licenciatura con bachillerato completo.\nDuración y estructura:\n - 40 horas (presenciales o en modalidad mixta), organizado en 4 módulos.\nRelación con el plan de estudios:\n - Introduce fundamentos del desarrollo infantil, terminología de inclusión y manejo básico de registros y observación; prepara para las prácticas iniciales.", "modalidad_educativa": "Mixta", "antecedente_academico": "Bachillerato concluido (Certificado de educación media superior). Se valorará experiencia previa en entornos educativos o comunitarios; no es requisito excluyente.", "carga_horaria_a_la_semana": 40, "programa_de_investigacion": null, "clave_del_plan_de_estudios": "LLSE-2026", "duracion_del_ciclo_escolar": "16 semanas", "fines_de_aprendizaje_o_formacion": " - Analizar los fundamentos teóricos y normativos de la Educación Especial y la atención a la diversidad.\n - Diagnosticar necesidades educativas individuales mediante técnicas de observación y evaluación formativa.\n - Diseñar intervenciones pedagógicas y adaptaciones curriculares orientadas a la inclusión en educación primaria.\n - Implementar estrategias de mediación y apoyo individual (figura de sombra) para facilitar la participación y el aprendizaje.\n - Colaborar con equipos docentes y familias para la planificación y seguimiento de planes de atención individualizada.\n - Evaluar el impacto de las estrategias de apoyo e intervenir de forma reflexiva para su mejora continua.\n - Promover prácticas profesionales éticas y respeto a los derechos de las personas con discapacidad.", "nivel_y_nombre_del_plan_de_estudios": "Licenciatura - Licenciatura en Educación Especial (énfasis: figura de sombra para educación primaria)", "nombre_autorizado_de_la_institucion": "Universidad La Salle México", "total_de_ciclos_del_plan_de_estudios": "9 ciclos semestrales", "sustento_teorico_del_modelo_curricular": "Lista de pasos conceptuales previos a la elaboración:\n - Revisar requisitos normativos del Acuerdo 17/11/17 y correspondencia con ciclos semestrales.\n - Definir perfil de egreso alineado con competencias profesionales para la figura de sombra.\n - Estructurar asignaturas y prácticas que integren teoría, práctica reflexiva y colaboración interprofesional.\n\nMarco conceptual y fundamentos:\n - Enfoque por competencias: El plan articula saberes, capacidades y actitudes necesarias para la práctica profesional en entornos inclusivos.\n - Constructivismo social y aprendizaje situado: Se privilegia el aprendizaje contextualizado en aula y en comunidad, con énfasis en la observación y la práctica asistida.\n - Diseño Universal para el Aprendizaje (DUA): Fundamenta la propuesta de adaptaciones curriculares y estrategias de accesibilidad.\n - Enfoque de derechos humanos e inclusión educativa: La intervención pedagógica se orienta a garantizar la participación plena y no discriminación.\n - Investigación-acción y reflexión profesional: Los practicantes desarrollan competencias para investigar su propia práctica y ajustar intervenciones.\n\nVinculación curricular:\n - Las asignaturas teóricas, metodológicas y las prácticas profesionales se articulan para desarrollar progresivamente la capacidad de intervenir como sombra, evaluar necesidades y coordinar apoyos.", "justificacion_de_la_propuesta_curricular": "Descripción de la modalidad mixta y recursos tecnológicos:\n - La modalidad mixta combina sesiones presenciales para talleres y prácticas de campo, con componentes virtuales para contenidos teóricos, seminarios y tutorías.\n - Plataforma educativa: Uso de un LMS institucional (por ejemplo, Moodle o Canvas) para entregar contenidos asincrónicos, foros académicos, rúbricas y actividades de evaluación.\n - Herramientas sincrónicas: Videoconferencias para seminarios, supervisión de prácticas y sesiones de retroalimentación (Zoom/Teams integradas al LMS).\n - Recursos didácticos: Banco de recursos multimedia, casos clínicos, simulaciones y módulos interactivos para el desarrollo de competencias de observación y diseño de adaptaciones.\nAutogestión y flexibilidad espacio-temporal:\n - Los estudiantes disponen de materiales asincrónicos que permiten avanzar de manera flexible, con itinerarios de estudio y fechas de entrega acotadas.\n - Se garantiza acompañamiento mediante tutorías periódicas (individuales y grupales) y supervisión de prácticas en campo.\nVinculación con actividades de aprendizaje:\n - Las asignaturas incluyen actividades de observación estructurada en aulas, prácticas acompañadas en centros educativos, diseño y aplicación de adaptaciones y proyectos integradores.\n - La plataforma registra evidencias de aprendizaje (portafolio digital) y facilita la evaluación formativa por parte de docentes y supervisores de práctica.", "administracion_y_operatividad_del_plan_de_estudios": "Estructura administrativa y académica:\n - Dirección Académica: Responsable general del programa y de la vinculación institucional.\n - Coordinación de la Licenciatura: Gestión curricular, seguimiento a planes de estudio y coordinación de prácticas.\n - Cuerpo académico: Perfil con experiencia en educación especial, psicopedagogía y práctica escolar inclusiva; se exige formación de posgrado preferente y experiencia en supervisión de prácticas.\n - Tutoría académica: Sistema de tutorías para seguimiento individual del estudiante y acompañamiento en estancias prácticas.\nOperatividad del calendario y carga por ciclo:\n - Diseño rígido: 9 semestres obligatorios.\n - Asignaturas por semestre (típico): 5 a 6 asignaturas, combinando teoría, metodología y práctica; una asignatura práctica o de taller por semestre como mínimo.\n - Estancias y prácticas: Prácticas progresivas con incremento de horas en los semestres superiores y prácticas intensivas de intervención en escuela en los últimos semestres.\nGestión de calidad y recursos:\n - Espacios formativos: Aulas, laboratorios didácticos, centro de observación y convenios con escuelas de educación primaria para estancias.\n - Recursos humanos: Profesores con perfil docente-investigador y supervisores de práctica con formación en educación especial.\n - Documentación operativa: Manuales de práctica, rúbricas de evaluación, convenios de colaboración y normativa interna para el desarrollo de estancias.", "propuesta_de_evaluacion_periodica_del_plan_de_estudios": "Metodología e instrumentos:\n - Evaluación cuatrienal interna con revisión anual de resultados: combinación de análisis de indicadores cuantitativos y cualitativos.\n - Instrumentos: Encuestas a egresados y empleadores, informe de seguimiento de egresados (tracer study), evaluación de desempeño de estudiantes en prácticas, análisis de cargas y resultados académicos, reuniones del Comité Académico.\n - Periodicidad: Revisión anual de indicadores clave (retención, titulación, desempeño en prácticas), evaluación curricular cada tres años para ajustes mayores.\n - Participación de actores: Voces de estudiantes, egresados, docentes, escuelas vinculadas y sociedad civil en foros de evaluación.\n - Mecanismos de mejora: Planes de acción derivados de la evaluación, actualización de asignaturas, capacitación docente y revisión de convenios de práctica.", "nombre_y_cargo_de_la_persona_facultada_para_autorizar_el_plan_de_estudios": "Lic. María González Pérez, Directora Académica"}', '18f49b67-8077-4371-be6e-2019a3be3562', true, 'IA', '{"iaConfig": {"usarMCP": false, "instruccionesAdicionalesIA": "No considerar específicamente el TDA si no todas las posibilidades de la educación especial, incluyendo discapacidades", "descripcionEnfoqueAcademico": "Una carrera relacionada con la educación especial, relacionada con la figura de sombra para educación primaria, y educación especial para personas con TDA"}, "referencias": {"repositoriosIds": [], "archivosReferenciaIds": []}, "generado_por": "ai-generate-plan"}', NULL, NULL, '2026-02-27 22:23:03.864946+00', '2026-02-27 22:24:16.905076+00'), - ('f35bd838-6df7-4a3b-9fbf-879f9b3e6da9', 'b4e0ad06-84b0-40fc-8228-a75b0c9cbd9b', '69fb2b77-5a95-47e0-bf1f-389d384200e4', 'Licenciatura en Educación Especial como sombra', 'Licenciatura', 'Semestre', 9, '{"vigencia": "2026 (espacio para uso exclusivo de la autoridad educativa)", "area_de_estudio": "Educación. Campo amplio: Formación docente y educación especial (según Clasificación Mexicana de Planes de Estudio por Campos de Formación Académica, CMPE 2016).", "perfil_de_egreso": "Conocimientos:\n- Conocer los fundamentos teóricos y normativos de la educación especial y la inclusión educativa, incluidas las leyes y políticas nacionales aplicables.\n- Conocer modelos de atención educativa (modelo ecológico, enfoque por competencias, Diseño Universal para el Aprendizaje, respuesta a la intervención) y sus implicaciones para la práctica de sombra.\n- Conocer características y necesidades educativas de estudiantes con discapacidad, trastornos del desarrollo y necesidades educativas especiales específicas.\n\nHabilidades:\n- Diseñar y aplicar estrategias individualizadas de acompañamiento (sombra) para facilitar la participación y el aprendizaje en contextos educativos regulares.\n- Realizar observaciones sistemáticas, registros conductuales y adaptaciones curriculares básicas en colaboración con el personal docente y familias.\n- Colaborar en equipos interdisciplinarios y comunicarse efectivamente con docentes, familias y especialistas para articular apoyos.\n- Aplicar procedimientos de evaluación formativa y ajustar estrategias de intervención basadas en evidencia.\n\nActitudes y valores:\n- Actuar con ética profesional, confidencialidad y respeto hacia la dignidad, autonomía y derechos de las personas con discapacidad.\n- Mantener una actitud reflexiva, crítica y de mejora continua sustentada en la evidencia y en el aprendizaje colaborativo.\n- Mostrar compromiso por la inclusión, la equidad y la promoción de entornos accesibles y participativos.", "diseno_curricular": "Rígido", "perfil_de_ingreso": "Conocimientos previos:\n- Certificado de Bachillerato o equivalente con dominio básico de lectura, redacción y razonamiento lógico-matemático.\n- Conocimientos introductorios en psicología, pedagogía o atención a la diversidad (deseable, no obligatorio).\n\nHabilidades y aptitudes:\n- Habilidad comunicativa efectiva y disposición para el trabajo en equipo.\n- Capacidad de observación, registro y análisis de comportamientos en contextos educativos.\n- Actitud empática, paciente y respetuosa frente a la diversidad funcional y cultural.\n\nCondiciones personales:\n- Disponibilidad para prácticas en centros educativos y visitas domiciliarias.\n- Compromiso ético y disposición para formación continua y trabajo con poblaciones vulnerables.", "curso_propedeutico": "Se ofrecerá un curso propedéutico opcional dirigido a aspirantes que no cuenten con formación previa en pedagogía o atención a la diversidad. Características:\n- Población: Aspirantes sin experiencia formal en educación o con antecedentes en áreas no afines.\n- Duración: 8 semanas (40 horas totales), modalidad mixta (sincrónico y asincrónico).\n- Contenidos: Fundamentos de psicología del desarrollo, nociones básicas de pedagogía inclusiva, comunicación efectiva y manejo básico de registros.\n- Relación con el plan de estudios: Prepara al aspirante para cursar asignaturas iniciales de didáctica y atención a la diversidad; no substituye requisitos de admisión, pero fortalece rendimiento académico inicial.\n- Criterios de aplicación: Se recomienda para el 30% de la cohorte cuya evaluación de diagnóstico inicial identifique brechas relevantes en competencias lectoras, comunicativas o conocimientos básicos en educación.", "modalidad_educativa": "Mixta", "antecedente_academico": "Certificado de Bachillerato o equivalente. Preferentemente procedencia de áreas afines como Ciencias de la Educación, Psicología, Trabajo Social, Pedagogía o áreas de ciencias sociales relacionadas con atención a la infancia y discapacidad.", "carga_horaria_a_la_semana": 40, "programa_de_investigacion": null, "clave_del_plan_de_estudios": "LLS-LESE-2026", "duracion_del_ciclo_escolar": "16 semanas", "fines_de_aprendizaje_o_formacion": "El programa tiene por finalidad formar profesionales de la educación especializados en el acompañamiento tipo ''sombra'', capaces de intervenir en contextos educativos regulares y de atención especializada mediante prácticas fundamentadas en la evidencia, la colaboración interprofesional y el respeto a los derechos de las personas con discapacidad. Los fines de aprendizaje se articulan en competencias que guían la formación:\n- Analizar los marcos normativos, éticos y teóricos que sustentan la educación especial y la inclusión, con el fin de garantizar intervenciones respetuosas de los derechos y la dignidad de las personas con discapacidad.\n- Identificar las características desarrollo-cognitivas, socioemocionales y comunicativas de estudiantes con diferentes tipos de discapacidad o necesidades educativas especiales, para adecuar estrategias de apoyo.\n- Diseñar planes de acompañamiento individualizados basados en la evaluación formativa, que integren adaptaciones curriculares, apoyos conductuales y mediaciones pedagógicas pertinentes al contexto escolar.\n- Implementar técnicas de observación, registro y evaluación del comportamiento y del progreso académico, utilizando instrumentos estandarizados y protocolos de registro confiables.\n- Colaborar y coordinar con docentes titulares, equipos interdisciplinares y familias para articular apoyos, comunicando hallazgos y proponiendo ajustes en el entorno y la práctica pedagógica.\n- Implementar estrategias de mediación y apoyo que promuevan la participación activa, la autonomía funcional y la inclusión social del alumno dentro del aula regular.\n- Evaluar la eficacia de las intervenciones de sombra mediante indicadores cualitativos y cuantitativos, ajustando las acciones en ciclos de mejora continua.\n- Promover entornos accesibles y diseñar ajustes razonables y recursos didácticos adaptados que favorezcan el aprendizaje y la interacción social.\n- Fomentar actitudes profesionales basadas en la ética, la confidencialidad, el respeto a la diversidad cultural y la toma de decisiones centrada en la persona.\n- Difundir prácticas basadas en evidencia y favorecer la investigación aplicada en contextos escolares para la mejora de modelos de acompañamiento y políticas inclusivas.\n\nEstos fines se desarrollan a través de una secuencia curricular que integra formación teórica avanzada, práctica supervisada en distintos niveles educativos y proyectos integradores que promueven la investigación aplicada en contexto.", "nivel_y_nombre_del_plan_de_estudios": "Licenciatura en Educación Especial (orientación: Sombra)", "nombre_autorizado_de_la_institucion": "Universidad La Salle México", "total_de_ciclos_del_plan_de_estudios": "9", "sustento_teorico_del_modelo_curricular": "Lista de pasos conceptuales previos:\n- Revisar requisitoss normativos del Acuerdo 17/11/17 y la normativa educativa nacional aplicable.\n- Estructurar campos obligatorios del Anexo 1 y verificar coherencia entre ingreso, perfil y fines de aprendizaje.\n- Diseñar el marco curricular alineado con teorías de inclusión, UDL y prácticas basadas en evidencia.\n- Determinar la operatividad administrativa y los mecanismos de evaluación periódica.\n- Validar la carga horaria, duración de ciclos y practicum con estándares nacionales y de buenas prácticas.\n\nMarco teórico y justificación del modelo curricular:\n El modelo curricular de la Licenciatura en Educación Especial con orientación en acompañamiento tipo sombra parte de la premisa de que la inclusión educativa es un derecho humano y una responsabilidad institucional que requiere profesionales formados de manera específica para acompañar procesos de aprendizaje y participación en contextos escolares regulares. Se sustenta en los siguientes referentes teóricos y conceptuales:\n - Diseño Universal para el Aprendizaje (UDL): plantea principios para anticipar barreras y diseñar múltiples vías de acceso al currículo, favoreciendo la planificación de adaptaciones y apoyos que el profesional en sombra debe conocer y aplicar.\n - Enfoque ecológico y bio-psicosocial: reconoce que las necesidades de los estudiantes emergen de la interacción entre individuo, familia, escuela y comunidad; por tanto, la intervención del profesional sombra se concibe como mediación contextual, no como sustitución del docente.\n - Teorías socioculturales del aprendizaje (Vygotsky): sustentan la importancia del andamiaje y la zona de desarrollo próximo, herramientas clave para la intervención individualizada y para promover la autonomía del estudiante mediante mediación intencional.\n - Modelos colaborativos y de co-intervención: el plan se apoya en evidencia sobre la efectividad de prácticas colaborativas entre docente titular, especialista y familia para lograr inclusión sostenible; el profesional sombra es formado para integrarse de forma articulada en estos equipos.\n - Prácticas basadas en evidencia y evaluación formativa: el currículo incorpora métodos de observación sistemática, medición del progreso y diseño de intervenciones ajustadas a resultados, promoviendo la investigación aplicada y la cultura de evaluación.\n - Perspectiva de derechos y normativa nacional: el modelo articula la formación con el marco legal mexicano en materia educativa y de discapacidad, así como con principios de ética profesional y confidencialidad.\n\n La estructura curricular combina contenidos conceptuales, metodológicos y prácticos; integra prácticas supervisadas desde el primer año, seminarios de reflexión profesional, y proyectos integradores que vinculan investigación aplicada con mejora institucional. La formación busca que el egresado maneje herramientas para la evaluación, diseño e implementación de apoyos que fomenten la inclusión, la participación y el desarrollo integral del estudiante.", "justificacion_de_la_propuesta_curricular": "Modalidad mixta: explicación de implementación tecnológica, autogestión y flexibilidad espacio-temporal.\n- Plataforma tecnológica: El programa empleará un LMS institucional (por ejemplo, Moodle institucional o plataforma propietaria) que soporta contenidos asincrónicos (módulos temáticos, lecturas, foros), actividades evaluables y repositorio de recursos adaptativos. Además se dispondrá de herramientas para videoconferencia (Zoom/Teams) para sesiones sincrónicas, tutorías y supervisión de práctica.\n- Autogestión del aprendizaje: Las actividades asincrónicas incluirán guías de estudio, rúbricas claras y recursos multimedia. Se promoverá la metacognición mediante diarios de aprendizaje y portafolios electrónicos que permitan evidenciar competencias profesionales.\n- Flexibilidad espacio-temporal: El diseño mixto permite que agentes (estudiantes, tutores, docentes) articulen sesiones presenciales para prácticas y evaluación, con trabajo a distancia para contenidos teóricos y asesorías. Esto facilita el acceso y la posibilidad de estancias en centros educativos diversos.\n- Recursos didácticos y tecnológicos: Materiales accesibles (texto enriquecido, transcripciones, subtítulos, lecturas en formatos alternativos) y simuladores para entrenamiento de situaciones complejas. Herramientas para registro y análisis de observación (plantillas digitales, apps para registro de conductas) soportarán la formación práctica.\n- Vinculación con asignaturas: Las plataformas alojarán los recursos de cada asignatura, enlaces a prácticas supervisadas, y espacios de interacción interprofesional. Los procesos de evaluación combinarán evidencias en línea y en campo, asegurando validez y confiabilidad.\n- Soporte institucional: Tutorías académicas y tecnopedagógicas, acompañamiento para prácticas y mesas de análisis de casos. Se garantizará la interoperabilidad entre las actividades presenciales y virtuales para mantener coherencia pedagógica y cumplimiento de competencias.", "administracion_y_operatividad_del_plan_de_estudios": "Estructura administrativa y operativa:\n- Coordinación académica: Existirá una Coordinación de la Licenciatura responsable del seguimiento académico, la vinculación con centros de práctica y la supervisión de procesos de aseguramiento de la calidad.\n- Organización de la oferta: Diseño rígido en 9 semestres, con secuencia establecida de asignaturas obligatorias y optativas estructuradas por niveles formativos.\n- Carga por ciclo: La carga promedio por semestre se organizará en torno a 40 horas semanales efectivas, que incluyen docencia teórica, actividades prácticas y tiempo de estudio guiado.\n- Prácticas y estancias: Prácticas profesionales progresivas desde el segundo semestre, con incremento de horas prácticas hasta culminar en estancias intensivas en contextos escolares en el último año. Se definirá un manual de prácticas con perfiles de supervisores y criterios de evaluación.\n- Plantilla docente: Perfil docente con grado mínimo de maestría en áreas afines, experiencia en inclusión y prácticas de sombra, y formación en investigación aplicada. Se promoverá la actualización continua y la supervisión por expertos.\n- Gestión curricular: Cronograma anual, sesiones de coordinación docente por asignatura, sistema de registro de evidencias curriculares y control de avance estudiantil.\n- Siembra de asignaturas por semestre (ejemplo operativo): Semestre 1-3: fundamentos y diagnóstico; Semestre 4-6: intervención y metodologías; Semestre 7-9: prácticas intensivas, proyectos integradores y seminario de titulación.\n- Tutoría académica: Cada estudiante contará con un tutor académico y un tutor de prácticas, responsables de seguimiento del avance y apoyo en la articulación teoría-práctica.", "propuesta_de_evaluacion_periodica_del_plan_de_estudios": "Metodología de evaluación del plan de estudios:\n- Objetivo: Mantener actualización curricular y pertinencia disciplinar mediante evaluación anual y revisiones integrales cada tres años.\n- Instrumentos: Encuestas de egresados y empleadores, análisis de desempeño en prácticas, revisión de trayectorias académicas, indicadores de inserción laboral y evaluación por pares académicos.\n- Periodicidad: Informes anuales de seguimiento; revisión curricular bianual focalizada en asignaturas clave; evaluación integral cada 3 años con participación de comité externo.\n- Procedimiento: Recolección de datos cuantitativos y cualitativos, análisis por la coordinación, diseño de plan de mejora con responsables y plazos, seguimiento de indicadores y reporte público de avances.\n- Indicadores clave: Tasa de titulación, desempeño en prácticas (evaluación de supervisores), satisfacción de empleadores, cumplimiento de cargas académicas, actualización de contenidos y vinculación con evidencia científica.\n- Participación: Incluye estudiantes, docentes, empleadores, instituciones receptoras de prácticas y expertos externos para asegurar validez y pertinencia.", "nombre_y_cargo_de_la_persona_facultada_para_autorizar_el_plan_de_estudios": "Dr. Francisco Javier Ortega, Rector"}', '18f49b67-8077-4371-be6e-2019a3be3562', true, 'IA', '{"iaConfig": {"usarMCP": false, "instruccionesAdicionalesIA": "Textos largos y extensos", "descripcionEnfoqueAcademico": "Textos extensos acerca de la educación especial con base a ser especialista en sombra, considera que deberán ser una investigación profunda y las respuestas deben tener al menos 500 palabras"}, "referencias": {"repositoriosIds": [], "archivosReferenciaIds": []}, "generado_por": "ai-generate-plan"}', NULL, NULL, '2026-02-27 22:28:10.322716+00', '2026-02-27 22:29:35.027381+00'); + ('f35bd838-6df7-4a3b-9fbf-879f9b3e6da9', 'b4e0ad06-84b0-40fc-8228-a75b0c9cbd9b', '69fb2b77-5a95-47e0-bf1f-389d384200e4', 'Educación Especial como sombra', 'Licenciatura', 'Semestre', 9, '{"vigencia": "2026 (espacio para uso exclusivo de la autoridad educativa)", "area_de_estudio": "Educación. Campo amplio: Formación docente y educación especial (según Clasificación Mexicana de Planes de Estudio por Campos de Formación Académica, CMPE 2016).", "perfil_de_egreso": "Conocimientos:\n- Conocer los fundamentos teóricos y normativos de la educación especial y la inclusión educativa, incluidas las leyes y políticas nacionales aplicables.\n- Conocer modelos de atención educativa (modelo ecológico, enfoque por competencias, Diseño Universal para el Aprendizaje, respuesta a la intervención) y sus implicaciones para la práctica de sombra.\n- Conocer características y necesidades educativas de estudiantes con discapacidad, trastornos del desarrollo y necesidades educativas especiales específicas.\n\nHabilidades:\n- Diseñar y aplicar estrategias individualizadas de acompañamiento (sombra) para facilitar la participación y el aprendizaje en contextos educativos regulares.\n- Realizar observaciones sistemáticas, registros conductuales y adaptaciones curriculares básicas en colaboración con el personal docente y familias.\n- Colaborar en equipos interdisciplinarios y comunicarse efectivamente con docentes, familias y especialistas para articular apoyos.\n- Aplicar procedimientos de evaluación formativa y ajustar estrategias de intervención basadas en evidencia.\n\nActitudes y valores:\n- Actuar con ética profesional, confidencialidad y respeto hacia la dignidad, autonomía y derechos de las personas con discapacidad.\n- Mantener una actitud reflexiva, crítica y de mejora continua sustentada en la evidencia y en el aprendizaje colaborativo.\n- Mostrar compromiso por la inclusión, la equidad y la promoción de entornos accesibles y participativos.", "diseno_curricular": "Rígido", "perfil_de_ingreso": "Conocimientos previos:\n- Certificado de Bachillerato o equivalente con dominio básico de lectura, redacción y razonamiento lógico-matemático.\n- Conocimientos introductorios en psicología, pedagogía o atención a la diversidad (deseable, no obligatorio).\n\nHabilidades y aptitudes:\n- Habilidad comunicativa efectiva y disposición para el trabajo en equipo.\n- Capacidad de observación, registro y análisis de comportamientos en contextos educativos.\n- Actitud empática, paciente y respetuosa frente a la diversidad funcional y cultural.\n\nCondiciones personales:\n- Disponibilidad para prácticas en centros educativos y visitas domiciliarias.\n- Compromiso ético y disposición para formación continua y trabajo con poblaciones vulnerables.", "curso_propedeutico": "Se ofrecerá un curso propedéutico opcional dirigido a aspirantes que no cuenten con formación previa en pedagogía o atención a la diversidad. Características:\n- Población: Aspirantes sin experiencia formal en educación o con antecedentes en áreas no afines.\n- Duración: 8 semanas (40 horas totales), modalidad mixta (sincrónico y asincrónico).\n- Contenidos: Fundamentos de psicología del desarrollo, nociones básicas de pedagogía inclusiva, comunicación efectiva y manejo básico de registros.\n- Relación con el plan de estudios: Prepara al aspirante para cursar asignaturas iniciales de didáctica y atención a la diversidad; no substituye requisitos de admisión, pero fortalece rendimiento académico inicial.\n- Criterios de aplicación: Se recomienda para el 30% de la cohorte cuya evaluación de diagnóstico inicial identifique brechas relevantes en competencias lectoras, comunicativas o conocimientos básicos en educación.", "modalidad_educativa": "Mixta", "antecedente_academico": "Certificado de Bachillerato o equivalente. Preferentemente procedencia de áreas afines como Ciencias de la Educación, Psicología, Trabajo Social, Pedagogía o áreas de ciencias sociales relacionadas con atención a la infancia y discapacidad.", "carga_horaria_a_la_semana": 40, "programa_de_investigacion": null, "clave_del_plan_de_estudios": "LLS-LESE-2026", "duracion_del_ciclo_escolar": "16 semanas", "fines_de_aprendizaje_o_formacion": "El programa tiene por finalidad formar profesionales de la educación especializados en el acompañamiento tipo ''sombra'', capaces de intervenir en contextos educativos regulares y de atención especializada mediante prácticas fundamentadas en la evidencia, la colaboración interprofesional y el respeto a los derechos de las personas con discapacidad. Los fines de aprendizaje se articulan en competencias que guían la formación:\n- Analizar los marcos normativos, éticos y teóricos que sustentan la educación especial y la inclusión, con el fin de garantizar intervenciones respetuosas de los derechos y la dignidad de las personas con discapacidad.\n- Identificar las características desarrollo-cognitivas, socioemocionales y comunicativas de estudiantes con diferentes tipos de discapacidad o necesidades educativas especiales, para adecuar estrategias de apoyo.\n- Diseñar planes de acompañamiento individualizados basados en la evaluación formativa, que integren adaptaciones curriculares, apoyos conductuales y mediaciones pedagógicas pertinentes al contexto escolar.\n- Implementar técnicas de observación, registro y evaluación del comportamiento y del progreso académico, utilizando instrumentos estandarizados y protocolos de registro confiables.\n- Colaborar y coordinar con docentes titulares, equipos interdisciplinares y familias para articular apoyos, comunicando hallazgos y proponiendo ajustes en el entorno y la práctica pedagógica.\n- Implementar estrategias de mediación y apoyo que promuevan la participación activa, la autonomía funcional y la inclusión social del alumno dentro del aula regular.\n- Evaluar la eficacia de las intervenciones de sombra mediante indicadores cualitativos y cuantitativos, ajustando las acciones en ciclos de mejora continua.\n- Promover entornos accesibles y diseñar ajustes razonables y recursos didácticos adaptados que favorezcan el aprendizaje y la interacción social.\n- Fomentar actitudes profesionales basadas en la ética, la confidencialidad, el respeto a la diversidad cultural y la toma de decisiones centrada en la persona.\n- Difundir prácticas basadas en evidencia y favorecer la investigación aplicada en contextos escolares para la mejora de modelos de acompañamiento y políticas inclusivas.\n\nEstos fines se desarrollan a través de una secuencia curricular que integra formación teórica avanzada, práctica supervisada en distintos niveles educativos y proyectos integradores que promueven la investigación aplicada en contexto.", "nivel_y_nombre_del_plan_de_estudios": "Licenciatura en Educación Especial (orientación: Sombra)", "nombre_autorizado_de_la_institucion": "Universidad La Salle México", "total_de_ciclos_del_plan_de_estudios": "9", "sustento_teorico_del_modelo_curricular": "Lista de pasos conceptuales previos:\n- Revisar requisitoss normativos del Acuerdo 17/11/17 y la normativa educativa nacional aplicable.\n- Estructurar campos obligatorios del Anexo 1 y verificar coherencia entre ingreso, perfil y fines de aprendizaje.\n- Diseñar el marco curricular alineado con teorías de inclusión, UDL y prácticas basadas en evidencia.\n- Determinar la operatividad administrativa y los mecanismos de evaluación periódica.\n- Validar la carga horaria, duración de ciclos y practicum con estándares nacionales y de buenas prácticas.\n\nMarco teórico y justificación del modelo curricular:\n El modelo curricular de la Licenciatura en Educación Especial con orientación en acompañamiento tipo sombra parte de la premisa de que la inclusión educativa es un derecho humano y una responsabilidad institucional que requiere profesionales formados de manera específica para acompañar procesos de aprendizaje y participación en contextos escolares regulares. Se sustenta en los siguientes referentes teóricos y conceptuales:\n - Diseño Universal para el Aprendizaje (UDL): plantea principios para anticipar barreras y diseñar múltiples vías de acceso al currículo, favoreciendo la planificación de adaptaciones y apoyos que el profesional en sombra debe conocer y aplicar.\n - Enfoque ecológico y bio-psicosocial: reconoce que las necesidades de los estudiantes emergen de la interacción entre individuo, familia, escuela y comunidad; por tanto, la intervención del profesional sombra se concibe como mediación contextual, no como sustitución del docente.\n - Teorías socioculturales del aprendizaje (Vygotsky): sustentan la importancia del andamiaje y la zona de desarrollo próximo, herramientas clave para la intervención individualizada y para promover la autonomía del estudiante mediante mediación intencional.\n - Modelos colaborativos y de co-intervención: el plan se apoya en evidencia sobre la efectividad de prácticas colaborativas entre docente titular, especialista y familia para lograr inclusión sostenible; el profesional sombra es formado para integrarse de forma articulada en estos equipos.\n - Prácticas basadas en evidencia y evaluación formativa: el currículo incorpora métodos de observación sistemática, medición del progreso y diseño de intervenciones ajustadas a resultados, promoviendo la investigación aplicada y la cultura de evaluación.\n - Perspectiva de derechos y normativa nacional: el modelo articula la formación con el marco legal mexicano en materia educativa y de discapacidad, así como con principios de ética profesional y confidencialidad.\n\n La estructura curricular combina contenidos conceptuales, metodológicos y prácticos; integra prácticas supervisadas desde el primer año, seminarios de reflexión profesional, y proyectos integradores que vinculan investigación aplicada con mejora institucional. La formación busca que el egresado maneje herramientas para la evaluación, diseño e implementación de apoyos que fomenten la inclusión, la participación y el desarrollo integral del estudiante.", "justificacion_de_la_propuesta_curricular": "Modalidad mixta: explicación de implementación tecnológica, autogestión y flexibilidad espacio-temporal.\n- Plataforma tecnológica: El programa empleará un LMS institucional (por ejemplo, Moodle institucional o plataforma propietaria) que soporta contenidos asincrónicos (módulos temáticos, lecturas, foros), actividades evaluables y repositorio de recursos adaptativos. Además se dispondrá de herramientas para videoconferencia (Zoom/Teams) para sesiones sincrónicas, tutorías y supervisión de práctica.\n- Autogestión del aprendizaje: Las actividades asincrónicas incluirán guías de estudio, rúbricas claras y recursos multimedia. Se promoverá la metacognición mediante diarios de aprendizaje y portafolios electrónicos que permitan evidenciar competencias profesionales.\n- Flexibilidad espacio-temporal: El diseño mixto permite que agentes (estudiantes, tutores, docentes) articulen sesiones presenciales para prácticas y evaluación, con trabajo a distancia para contenidos teóricos y asesorías. Esto facilita el acceso y la posibilidad de estancias en centros educativos diversos.\n- Recursos didácticos y tecnológicos: Materiales accesibles (texto enriquecido, transcripciones, subtítulos, lecturas en formatos alternativos) y simuladores para entrenamiento de situaciones complejas. Herramientas para registro y análisis de observación (plantillas digitales, apps para registro de conductas) soportarán la formación práctica.\n- Vinculación con asignaturas: Las plataformas alojarán los recursos de cada asignatura, enlaces a prácticas supervisadas, y espacios de interacción interprofesional. Los procesos de evaluación combinarán evidencias en línea y en campo, asegurando validez y confiabilidad.\n- Soporte institucional: Tutorías académicas y tecnopedagógicas, acompañamiento para prácticas y mesas de análisis de casos. Se garantizará la interoperabilidad entre las actividades presenciales y virtuales para mantener coherencia pedagógica y cumplimiento de competencias.", "administracion_y_operatividad_del_plan_de_estudios": "Estructura administrativa y operativa:\n- Coordinación académica: Existirá una Coordinación de la Licenciatura responsable del seguimiento académico, la vinculación con centros de práctica y la supervisión de procesos de aseguramiento de la calidad.\n- Organización de la oferta: Diseño rígido en 9 semestres, con secuencia establecida de asignaturas obligatorias y optativas estructuradas por niveles formativos.\n- Carga por ciclo: La carga promedio por semestre se organizará en torno a 40 horas semanales efectivas, que incluyen docencia teórica, actividades prácticas y tiempo de estudio guiado.\n- Prácticas y estancias: Prácticas profesionales progresivas desde el segundo semestre, con incremento de horas prácticas hasta culminar en estancias intensivas en contextos escolares en el último año. Se definirá un manual de prácticas con perfiles de supervisores y criterios de evaluación.\n- Plantilla docente: Perfil docente con grado mínimo de maestría en áreas afines, experiencia en inclusión y prácticas de sombra, y formación en investigación aplicada. Se promoverá la actualización continua y la supervisión por expertos.\n- Gestión curricular: Cronograma anual, sesiones de coordinación docente por asignatura, sistema de registro de evidencias curriculares y control de avance estudiantil.\n- Siembra de asignaturas por semestre (ejemplo operativo): Semestre 1-3: fundamentos y diagnóstico; Semestre 4-6: intervención y metodologías; Semestre 7-9: prácticas intensivas, proyectos integradores y seminario de titulación.\n- Tutoría académica: Cada estudiante contará con un tutor académico y un tutor de prácticas, responsables de seguimiento del avance y apoyo en la articulación teoría-práctica.", "propuesta_de_evaluacion_periodica_del_plan_de_estudios": "Metodología de evaluación del plan de estudios:\n- Objetivo: Mantener actualización curricular y pertinencia disciplinar mediante evaluación anual y revisiones integrales cada tres años.\n- Instrumentos: Encuestas de egresados y empleadores, análisis de desempeño en prácticas, revisión de trayectorias académicas, indicadores de inserción laboral y evaluación por pares académicos.\n- Periodicidad: Informes anuales de seguimiento; revisión curricular bianual focalizada en asignaturas clave; evaluación integral cada 3 años con participación de comité externo.\n- Procedimiento: Recolección de datos cuantitativos y cualitativos, análisis por la coordinación, diseño de plan de mejora con responsables y plazos, seguimiento de indicadores y reporte público de avances.\n- Indicadores clave: Tasa de titulación, desempeño en prácticas (evaluación de supervisores), satisfacción de empleadores, cumplimiento de cargas académicas, actualización de contenidos y vinculación con evidencia científica.\n- Participación: Incluye estudiantes, docentes, empleadores, instituciones receptoras de prácticas y expertos externos para asegurar validez y pertinencia.", "nombre_y_cargo_de_la_persona_facultada_para_autorizar_el_plan_de_estudios": "Dr. Francisco Javier Ortega, Rector"}', '18f49b67-8077-4371-be6e-2019a3be3562', true, 'IA', '{"iaConfig": {"usarMCP": false, "instruccionesAdicionalesIA": "Textos largos y extensos", "descripcionEnfoqueAcademico": "Textos extensos acerca de la educación especial con base a ser especialista en sombra, considera que deberán ser una investigación profunda y las respuestas deben tener al menos 500 palabras"}, "referencias": {"repositoriosIds": [], "archivosReferenciaIds": []}, "generado_por": "ai-generate-plan"}', NULL, NULL, '2026-02-27 22:28:10.322716+00', '2026-03-06 19:59:16.460883+00'), + ('198c763b-9d97-423b-b13a-5713437fc81b', '6d086d1b-aaea-4b76-9b16-fa8f3e29d9fa', '69fb2b77-5a95-47e0-bf1f-389d384200e4', 'Licenciatura en Educación Especial como sombra', 'Licenciatura', 'Semestre', 9, '{"vigencia": "(Espacio para uso exclusivo de la autoridad educativa)", "area_de_estudio": "Formación docente y ciencias de la educación", "perfil_de_egreso": "Conocimientos:\n - Marco conceptual de la Educación Especial y modelos de atención a la diversidad, con énfasis en la figura de sombra como mediadora del aprendizaje en educación primaria.\n - Normativa nacional e internacional sobre inclusión educativa, derechos de las personas con discapacidad y derechos humanos aplicados a contextos escolares.\n - Características del desarrollo infantil y del aprendizaje en educación primaria, con atención a la diversidad cultural y socioemocional.\n - Fundamentos de evaluación formativa, diseño universal para el aprendizaje (DUA) y estrategias de adaptación curricular y de apoyo.\n - Diseño y gestión de entornos de aprendizaje inclusivos, uso de tecnologías de apoyo y técnicas de observación y intervención.\nHabilidades:\n - Identificar, registrar y analizar barreras de aprendizaje y necesidades educativas a partir de observación estructurada y evidencias.\n - Diseñar, adaptar y aplicar intervenciones pedagógicas y apoyos individualizados, incluida la figura de sombra, para promover participación y aprendizaje en aula regular.\n - Planificar y coordinar planes de atención individualizada en colaboración con docentes, familias y equipos de apoyo interprofesional.\n - Facilitar la mediación, la comunicación y la interacción en contextos diversos, promoviendo estrategias DUA y uso responsable de tecnologías.\n - Evaluar el progreso estudiantil con instrumentos cualitativos y cuantitativos y ajustar intervenciones con base en evidencia.\nActitudes:\n - Compromiso ético con la dignidad, derechos y bienestar de las personas con discapacidad; ética profesional, confidencialidad y respeto a la diversidad.\n - Sensibilidad intercultural y socioemocional; respeto a la diversidad y a la dignidad de la persona.\n - Enfoque reflexivo y colaborativo; orientación a la mejora continua, investigación-acción y aprendizaje a lo largo de la vida.\n - Tolerancia, empatía y resiliencia para trabajar en entornos educativos complejos y con comunidades escolares; responsabilidad social y compromiso con la inclusión.", "diseno_curricular": "Rígido", "perfil_de_ingreso": "Conocimientos previos:\n - Educación media superior (bachillerato) completada.\n - Conocimientos básicos de psicología del desarrollo y didáctica (preferente).\nHabilidades y destrezas:\n - Capacidad de comunicación clara y trabajo en equipo.\n - Habilidad para la observación y registro de conductas y procesos de aprendizaje.\n - Manejo básico de herramientas informáticas (navegación web, edición de texto y acceso a plataformas educativas).\nAptitudes personales:\n - Vocación por el trabajo con infancia y jóvenes.\n - Paciencia, tolerancia y resiliencia para la resolución de conflictos en entornos escolares.\n - Disponibilidad para realizar estancias prácticas en centros educativos y trabajo de campo.", "curso_propedeutico": "Situaciones de aplicación:\n - Dirigido a aspirantes que no acrediten formación previa en áreas afines (psicopedagogía, educación o trabajo social).\nPoblación objetivo:\n - Aspirantes a la licenciatura con bachillerato completo.\nDuración y estructura:\n - 40 horas (presenciales o en modalidad mixta), organizado en 4 módulos.\nRelación con el plan de estudios:\n - Introduce fundamentos del desarrollo infantil, terminología de inclusión y manejo básico de registros y observación; prepara para las prácticas iniciales.", "modalidad_educativa": "Mixta", "antecedente_academico": "Bachillerato concluido (Certificado de educación media superior). Se valorará experiencia previa en entornos educativos o comunitarios; no es requisito excluyente.", "carga_horaria_a_la_semana": 40, "programa_de_investigacion": null, "clave_del_plan_de_estudios": "LLSE-2026", "duracion_del_ciclo_escolar": "16 semanas", "fines_de_aprendizaje_o_formacion": " - Analizar los fundamentos teóricos y normativos de la Educación Especial y la atención a la diversidad.\n - Diagnosticar necesidades educativas individuales mediante técnicas de observación y evaluación formativa.\n - Diseñar intervenciones pedagógicas y adaptaciones curriculares orientadas a la inclusión en educación primaria.\n - Implementar estrategias de mediación y apoyo individual (figura de sombra) para facilitar la participación y el aprendizaje.\n - Colaborar con equipos docentes y familias para la planificación y seguimiento de planes de atención individualizada.\n - Evaluar el impacto de las estrategias de apoyo e intervenir de forma reflexiva para su mejora continua.\n - Promover prácticas profesionales éticas y respeto a los derechos de las personas con discapacidad.", "nivel_y_nombre_del_plan_de_estudios": "Licenciatura - Licenciatura en Educación Especial (énfasis: figura de sombra para educación primaria)", "nombre_autorizado_de_la_institucion": "Universidad La Salle México", "total_de_ciclos_del_plan_de_estudios": "9 ciclos semestrales", "sustento_teorico_del_modelo_curricular": "Lista de pasos conceptuales previos a la elaboración:\n - Revisar requisitos normativos del Acuerdo 17/11/17 y correspondencia con ciclos semestrales.\n - Definir perfil de egreso alineado con competencias profesionales para la figura de sombra.\n - Estructurar asignaturas y prácticas que integren teoría, práctica reflexiva y colaboración interprofesional.\n\nMarco conceptual y fundamentos:\n - Enfoque por competencias: El plan articula saberes, capacidades y actitudes necesarias para la práctica profesional en entornos inclusivos.\n - Constructivismo social y aprendizaje situado: Se privilegia el aprendizaje contextualizado en aula y en comunidad, con énfasis en la observación y la práctica asistida.\n - Diseño Universal para el Aprendizaje (DUA): Fundamenta la propuesta de adaptaciones curriculares y estrategias de accesibilidad.\n - Enfoque de derechos humanos e inclusión educativa: La intervención pedagógica se orienta a garantizar la participación plena y no discriminación.\n - Investigación-acción y reflexión profesional: Los practicantes desarrollan competencias para investigar su propia práctica y ajustar intervenciones.\n\nVinculación curricular:\n - Las asignaturas teóricas, metodológicas y las prácticas profesionales se articulan para desarrollar progresivamente la capacidad de intervenir como sombra, evaluar necesidades y coordinar apoyos.", "justificacion_de_la_propuesta_curricular": "Descripción de la modalidad mixta y recursos tecnológicos:\n - La modalidad mixta combina sesiones presenciales para talleres y prácticas de campo, con componentes virtuales para contenidos teóricos, seminarios y tutorías.\n - Plataforma educativa: Uso de un LMS institucional (por ejemplo, Moodle o Canvas) para entregar contenidos asincrónicos, foros académicos, rúbricas y actividades de evaluación.\n - Herramientas sincrónicas: Videoconferencias para seminarios, supervisión de prácticas y sesiones de retroalimentación (Zoom/Teams integradas al LMS).\n - Recursos didácticos: Banco de recursos multimedia, casos clínicos, simulaciones y módulos interactivos para el desarrollo de competencias de observación y diseño de adaptaciones.\nAutogestión y flexibilidad espacio-temporal:\n - Los estudiantes disponen de materiales asincrónicos que permiten avanzar de manera flexible, con itinerarios de estudio y fechas de entrega acotadas.\n - Se garantiza acompañamiento mediante tutorías periódicas (individuales y grupales) y supervisión de prácticas en campo.\nVinculación con actividades de aprendizaje:\n - Las asignaturas incluyen actividades de observación estructurada en aulas, prácticas acompañadas en centros educativos, diseño y aplicación de adaptaciones y proyectos integradores.\n - La plataforma registra evidencias de aprendizaje (portafolio digital) y facilita la evaluación formativa por parte de docentes y supervisores de práctica.", "administracion_y_operatividad_del_plan_de_estudios": "Estructura administrativa y académica:\n - Dirección Académica: Responsable general del programa y de la vinculación institucional.\n - Coordinación de la Licenciatura: Gestión curricular, seguimiento a planes de estudio y coordinación de prácticas.\n - Cuerpo académico: Perfil con experiencia en educación especial, psicopedagogía y práctica escolar inclusiva; se exige formación de posgrado preferente y experiencia en supervisión de prácticas.\n - Tutoría académica: Sistema de tutorías para seguimiento individual del estudiante y acompañamiento en estancias prácticas.\nOperatividad del calendario y carga por ciclo:\n - Diseño rígido: 9 semestres obligatorios.\n - Asignaturas por semestre (típico): 5 a 6 asignaturas, combinando teoría, metodología y práctica; una asignatura práctica o de taller por semestre como mínimo.\n - Estancias y prácticas: Prácticas progresivas con incremento de horas en los semestres superiores y prácticas intensivas de intervención en escuela en los últimos semestres.\nGestión de calidad y recursos:\n - Espacios formativos: Aulas, laboratorios didácticos, centro de observación y convenios con escuelas de educación primaria para estancias.\n - Recursos humanos: Profesores con perfil docente-investigador y supervisores de práctica con formación en educación especial.\n - Documentación operativa: Manuales de práctica, rúbricas de evaluación, convenios de colaboración y normativa interna para el desarrollo de estancias.", "propuesta_de_evaluacion_periodica_del_plan_de_estudios": "Metodología e instrumentos:\n - Evaluación cuatrienal interna con revisión anual de resultados: combinación de análisis de indicadores cuantitativos y cualitativos.\n - Instrumentos: Encuestas a egresados y empleadores, informe de seguimiento de egresados (tracer study), evaluación de desempeño de estudiantes en prácticas, análisis de cargas y resultados académicos, reuniones del Comité Académico.\n - Periodicidad: Revisión anual de indicadores clave (retención, titulación, desempeño en prácticas), evaluación curricular cada tres años para ajustes mayores.\n - Participación de actores: Voces de estudiantes, egresados, docentes, escuelas vinculadas y sociedad civil en foros de evaluación.\n - Mecanismos de mejora: Planes de acción derivados de la evaluación, actualización de asignaturas, capacitación docente y revisión de convenios de práctica.", "nombre_y_cargo_de_la_persona_facultada_para_autorizar_el_plan_de_estudios": "Lic. María González Pérez, Directora Académica"}', '18f49b67-8077-4371-be6e-2019a3be3562', true, 'IA', '{"iaConfig": {"usarMCP": false, "instruccionesAdicionalesIA": "No considerar específicamente el TDA si no todas las posibilidades de la educación especial, incluyendo discapacidades", "descripcionEnfoqueAcademico": "Una carrera relacionada con la educación especial, relacionada con la figura de sombra para educación primaria, y educación especial para personas con TDA"}, "referencias": {"repositoriosIds": [], "archivosReferenciaIds": []}, "generado_por": "ai-generate-plan"}', NULL, NULL, '2026-02-27 22:23:03.864946+00', '2026-03-09 16:28:20.394326+00'); -- @@ -2124,89 +2127,187 @@ INSERT INTO "public"."lineas_plan" ("id", "plan_estudio_id", "nombre", "orden", -- Data for Name: asignaturas; Type: TABLE DATA; Schema: public; Owner: postgres -- -INSERT INTO "public"."asignaturas" ("id", "plan_estudio_id", "estructura_id", "codigo", "nombre", "tipo", "creditos", "numero_ciclo", "linea_plan_id", "orden_celda", "datos", "contenido_tematico", "tipo_origen", "meta_origen", "creado_por", "actualizado_por", "creado_en", "actualizado_en", "horas_academicas", "horas_independientes", "estado") VALUES - ('93aefc3a-f7ea-474b-9b9b-e2e155815c0f', '05863c8a-2a93-42f9-a4b7-65cef2edfe72', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'ITMI-606', 'Arquitectura de Software para Realidad Virtual y Aumentada', 'TRONCAL', 6, 6, '0a35f63e-a6d0-465a-94ce-ca2d7db1d239', NULL, '{"ciclo": "Sexto semestre", "contenido_tematico": "1. Fundamentos de Arquitectura de Software para VR/AR\n1.1. Requisitos de rendimiento, baja latencia y escalabilidad\n1.2. Arquitecturas para VR/AR: cliente/servidor, multicliente, streaming\n2. Patrones arquitectónicos para VR/AR\n2.1. Arquitecturas en capas\n2.2. Arquitecturas orientadas a servicios y microservicios\n2.3. Arquitecturas orientadas a eventos y streaming de datos\n2.4. Patrones para gestión de recursos y consistencia\n3. Integración con motores gráficos\n3.1. Interoperabilidad entre Unity/Unreal y la capa de aplicación\n3.2. Gestión de escenas, assets y pipelines de render\n3.3. Optimización de rendimiento en VR/AR\n3.4. Plugins y APIs para comunicación entre motor y servicios\n4. Comunicación cliente-servidor en VR/AR\n4.1. Modelos de red para VR/AR\n4.2. Latencia, predicción y sincronización\n4.3. Seguridad, autenticación y autorización\n5. Arquitectura para VR/AR escalable y eficiente\n5.1. Arquitecturas multiusuario y replicación de estados\n5.2. Streaming y balanceo de carga de contenidos\n5.3. Infraestructura en la nube, microservicios y CDN\n5.4. Resiliencia, tolerancia a fallos y observabilidad\n6. Laboratorios y estudio de casos\n6.1. Laboratorio de diseño de arquitectura\n6.2. Caso práctico: VR multijugador\n6.3. Caso práctico: rendimiento y escalabilidad\nCarga horaria: 64 horas académicas y 96 horas de trabajo independiente.", "clave_de_la_asignatura": "ITMI-606", "criterios_de_evaluacion": "Participación y asistencia: 10%; Talleres y laboratorios: 35%; Proyecto de arquitectura VR/AR: 25%; Examen teórico: 15%; Defensa/Examen práctico del proyecto final: 15%", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante podrá diseñar y evaluar arquitecturas de software para aplicaciones de realidad virtual y aumentada, integrar patrones arquitectónicos con motores gráficos, y diseñar comunicaciones cliente-servidor eficientes y escalables para experiencias VR/AR multijugador.", "modalidades_tecnologicas_e_informaticas": "Entorno de desarrollo: Unity3D y/o Unreal Engine; lenguajes C#, C++, Python; herramientas de streaming y networking (Photon, Mirror, WebRTC); motores de render; herramientas de profiling; control de versiones (Git); plataformas VR/AR (Oculus, SteamVR, WebXR); soluciones en la nube (AWS/Azure/GCP); tecnologías de seguridad y autenticación; API REST/GraphQL; contenedores y orquestación opcional.", "actividades_de_aprendizaje_independientes": "Lecturas de artículos y papers sobre VR/AR, revisión de patrones de arquitectura, diseño de un microproyecto de arquitectura VR/AR, experimentación con una pequeña integración entre motor gráfico y servidor, evaluación de rendimiento y latencia.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Arquitectura de Software para Realidad Virtual y Aumentada (6 créditos)", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Conducción de clases magistrales, sesiones de laboratorio supervisadas, revisiones de diseño de arquitectura, asesoría de implementación del prototipo, defensa de entregables y retroalimentación focalizada."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1080, "total_tokens": 8798, "output_tokens": 7718, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 6912}}, "responseId": "resp_01db74aca9bf0c9e00698e6ae91e0481a2937500f749f75b86", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Patrones arquitectónicos, integración con motores gráficos y comunicación cliente‑servidor para aplicaciones VR/AR escalables y eficientes."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-13 00:05:59.544199+00', '2026-02-13 20:23:55.285924+00', 64, 96, 'borrador'), - ('cbc9bb28-cd0c-41e1-be92-4fc71fe31ea3', '26806567-c5ee-404e-8f90-0f0711c21ea0', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'MET-1', 'Metodología del Estudio del Derecho', 'OBLIGATORIA', 1, NULL, NULL, NULL, '{"ciclo": "Por definir", "contenido_tematico": "1. Enfoque y fundamentos de la metodología del derecho\\n 1.1. Lectura jurídica y análisis de textos legales\\n 1.2. Interpretación de leyes y normas\\n 1.3. Introducción al método de casos y razonamiento jurídico\\n 1.4. Uso de herramientas digitales para el estudio jurídico\\n 1.5. Ética y buenas prácticas en el estudio del derecho", "clave_de_la_asignatura": "MET-1", "criterios_de_evaluacion": "1. Lecturas y análisis de textos jurídicos: 30%\\n 2. Análisis de casos y ejercicios prácticos: 40%\\n 3. Participación y asistencia: 20%\\n 4. Trabajo final/portafolio que integre el uso de herramientas digitales: 10%", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de:\\n - Realizar lectura y análisis crítico de textos jurídicos y normas.\\n - Aplicar el método de casos para el razonamiento y la solución de problemas jurídicos.\\n - Emplear herramientas digitales y recursos en línea para la organización, búsqueda y citación de información jurídica.\\n - Explicar de manera clara y coherente sus razonamientos jurídicos.", "modalidades_tecnologicas_e_informaticas": "Se emplearán recursos tecnológicos y de información para el desarrollo del proceso de enseñanza-aprendizaje: \\n - Plataforma de gestión académica (LMS) para materiales, foros y entrega de trabajos.\\n - Herramientas de lectura y anotación de PDFs.\\n - Bases de datos jurídicas y buscadores en línea (p. ej., legislación, jurisprudencia, doctrina).\\n - Herramientas de citación bibliográfica (Zotero, Mendeley) y procesamiento de textos.\\n - Presentaciones y videoconferencias (Zoom, Teams) para sesiones sincrónicas o híbridas.\\n - Entornos de colaboración para debates y trabajos en grupo.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas de textos legales y doctrinales; realización de resúmenes; análisis de casos breves; ejercicios de interpretación de normas; investigación de fuentes jurisprudenciales; elaboración de cuestionarios y respuestas; desarrollo de un portafolio digital con evidencias de manejo de herramientas digitales y metodológicas.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Metodología del Estudio del Derecho", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Actividades en clase dirigidas por el académico:\\n - Discusión y análisis guiados de textos jurídicos.\\n - Resolución de casos breves en grupo, con retroalimentación.\\n - Talleres sobre técnicas de lectura jurídica y extracción de elementos clave.\\n - Demostraciones de uso de herramientas digitales para búsqueda, citación y organización de información.\\n - Revisión de avances de trabajos y orientación metodológica."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1097, "total_tokens": 5940, "output_tokens": 4843, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 4096}}, "responseId": "resp_01ed90476500a652006989ff839e58819d8753781481a87699", "conversationId": null}, "iaConfig": {"instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Análisis jurídico así como análisis de textos legales, introducción al método de casos y uso de herramientas digitales para el estudio jurídico."}, "referencias": {"archivosReferenciaIds": [], "repositoriosReferencia": []}, "generado_por": "ai_generate_subject"}', NULL, NULL, '2026-02-09 15:39:19.551496+00', '2026-02-23 20:52:50.995618+00', NULL, NULL, 'borrador'), - ('ccb04f57-81a6-443c-a11f-219485908701', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CYB310', 'Modelado y Simulación de Procesos Industriales', 'TRONCAL', 6, NULL, NULL, NULL, '{"ciclo": "6º ciclo", "clave_de_la_asignatura": "CYB310", "criterios_de_evaluacion": "Proyectos de modelado y simulación (30%), Informe de laboratorio / reportes de simulación (20%), Exámenes parciales (30%), Quices y tareas (15%), Participación y presentaciones (5%)", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura el estudiante será capaz de formular modelos físicos y matemáticos de procesos industriales, implementar y ejecutar simulaciones computacionales para analizar la dinámica y respuesta de sistemas, validar modelos con datos experimentales y utilizar herramientas de simulación estándar en la industria para apoyar la toma de decisiones y el diseño de control.", "modalidades_tecnologicas_e_informaticas": "Aulas equipadas con PC y acceso a software de simulación (MATLAB/Simulink, Python/Modelica, ASPEN o SimSci según licencias). Plataforma LMS para entrega de actividades, foros y material didáctico. Laboratorio de simulación con acceso a modelos industriales virtuales; acceso a repositorio de datos y a herramientas de control virtual (PLC simulados).", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas de artículos y capítulos técnicos, resolución de ejercicios de modelado matemático, desarrollo y prueba de modelos en software, preparación de informes técnicos, estudio para exámenes y revisión de casos de estudio industriales.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Modelado y Simulación de Procesos Industriales", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales sobre teoría y formulación de modelos, sesiones guiadas de laboratorio computacional, tutorías para diseño de experimentos y obtención de datos, demostraciones de simuladores industriales, seminarios con análisis de casos y presentaciones de proyectos por los estudiantes."}', '[{"temas": [{"nombre": "Introducción: alcance, tipos de modelos y aplicaciones industriales", "horasEstimadas": 2}, {"nombre": "Modelos físicos vs. modelos matemáticos; hipótesis y simplificaciones", "horasEstimadas": 3}, {"nombre": "Herramientas matemáticas: ecuaciones diferenciales ordinarias, sistemas, linealización", "horasEstimadas": 3}], "titulo": "Fundamentos del modelado de procesos", "unidad": 1}, {"temas": [{"nombre": "Balances de materia y energía para procesos continuos y discontinuos", "horasEstimadas": 4}, {"nombre": "Modelos dinámicos: elementos de almacenamiento, flujos y acoplamientos", "horasEstimadas": 4}, {"nombre": "Técnicas de simplificación y análisis de escalas de tiempo", "horasEstimadas": 4}], "titulo": "Balance y formulación de modelos dinámicos", "unidad": 2}, {"temas": [{"nombre": "Reactores (CSTR, PFR): formulación, dinámica y ejemplos", "horasEstimadas": 4}, {"nombre": "Intercambiadores de calor y balances térmicos dinámicos", "horasEstimadas": 3}, {"nombre": "Columnas de destilación y modelos simplificados dinámicos", "horasEstimadas": 3}, {"nombre": "Transporte y difusión: introducción a modelos de transferencia de masa y momento", "horasEstimadas": 4}], "titulo": "Modelado de operaciones unitarias y procesos típicos", "unidad": 3}, {"temas": [{"nombre": "Métodos numéricos para EDO/EDP aplicados a procesos (integración, estabilidad)", "horasEstimadas": 3}, {"nombre": "Simulación en MATLAB/Simulink: construcción de modelos y análisis de respuesta", "horasEstimadas": 4}, {"nombre": "Simulación con Python y Modelica: bibliotecas y buenas prácticas", "horasEstimadas": 3}, {"nombre": "Simuladores industriales (ASPEN/SimSci/otros): modelado y casos de estudio", "horasEstimadas": 4}], "titulo": "Métodos numéricos y simulación computacional", "unidad": 4}, {"temas": [{"nombre": "Identificación de sistemas y estimación de parámetros a partir de datos", "horasEstimadas": 4}, {"nombre": "Validación del modelo: ajuste, sensibilidad y análisis de incertidumbre", "horasEstimadas": 4}, {"nombre": "Interacción con controladores: respuesta dinámica, tuning y pruebas en simulación", "horasEstimadas": 4}], "titulo": "Identificación, validación y análisis de control", "unidad": 5}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1150, "total_tokens": 3354, "output_tokens": 2204, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 960}}, "responseId": "resp_005bd60c63b5f5150069a1b0c6e758819e9bf548ee0d153885", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Técnicas de modelado físico y matemático y uso de simuladores para analizar dinámica y respuesta de procesos industriales."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-27 14:57:08.739803+00', '2026-02-27 14:57:42.976053+00', 60, 50, 'borrador'), - ('4f296f95-bc10-47cb-b16f-0c82559d1906', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CIB304', 'Sistemas de Control Distribuido y SCADA', 'OBLIGATORIA', 5, NULL, NULL, NULL, '{"ciclo": "7", "clave_de_la_asignatura": "CIB304", "criterios_de_evaluacion": "Examen parcial 25% / Examen final 30% / Proyecto integrador (diseño y configuración DCS/SCADA) 25% / Prácticas de laboratorio y reportes 10% / Participación y actividades en clase 10%", "fines_de_aprendizaje_o_formacion": "Formar al estudiante para comprender y aplicar arquitecturas DCS y SCADA en entornos industriales, diseñar sistemas de supervisión y control distribuidos, seleccionar protocolos y dispositivos de campo, asegurar comunicaciones robustas y aplicar prácticas de ciberseguridad y puesta en marcha, contribuyendo al perfil de egreso con competencias para integrar y operar sistemas de control industrial.", "modalidades_tecnologicas_e_informaticas": "Uso de software SCADA/HMI (p. ej. Ignition, Wonderware, Siemens WinCC), simuladores de DCS/PLC, plataformas virtuales (VM) con servidores OPC UA/OPC DA, bancos de pruebas con PLCs y módulos I/O, analizadores de red industrial y herramientas para configuración de VLAN/QoS; se empleará un LMS para contenidos, foros y entrega de prácticas.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas y estudio de manuales de protocolos y normas; resolución de ejercicios de configuración y diagnóstico; desarrollo de simulaciones y modelado en herramientas SCADA/DCS; preparación del proyecto integrador y reportes de laboratorio; revisión de casos de estudio y preparación de exámenes.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Sistemas de Control Distribuido y SCADA", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales con análisis de arquitectura y protocolos; sesiones prácticas guiadas en laboratorio y simuladores; talleres de diseño de HMI y gestión de alarmas; prácticas de configuración de redes industriales y pruebas de integración DCS–SCADA; sesiones de revisión y retroalimentación del proyecto integrador."}', '[{"temas": [{"nombre": "Conceptos fundamentales y diferencias entre DCS y SCADA", "horasEstimadas": 2}, {"nombre": "Arquitectura general y componentes: controladores, I/O, HMI y servidores", "horasEstimadas": 2}, {"nombre": "Modelos de implementación y ejemplos en la industria", "horasEstimadas": 2}], "titulo": "Introducción a DCS y SCADA", "unidad": 1}, {"temas": [{"nombre": "Sensores y actuadores: selección, características e interfaces", "horasEstimadas": 3}, {"nombre": "Módulos de entradas/salidas y arquitecturas I/O remotas", "horasEstimadas": 3}, {"nombre": "Protocolos de campo: HART, FOUNDATION Fieldbus, Profibus, Modbus", "horasEstimadas": 4}], "titulo": "Dispositivos de campo e interfaces", "unidad": 2}, {"temas": [{"nombre": "Topologías de red industrial y Ethernet industrial", "horasEstimadas": 3}, {"nombre": "Protocolos de comunicación: TCP/IP industrial, OPC UA, MQTT", "horasEstimadas": 3}, {"nombre": "Diseño de redes deterministas: switches gestionados, VLANs, QoS y tiempo real", "horasEstimadas": 4}], "titulo": "Redes y protocolos de comunicación en entornos industriales", "unidad": 3}, {"temas": [{"nombre": "Controladores distribuidos: estructura, bloques de función y escalabilidad", "horasEstimadas": 3}, {"nombre": "Estrategias de control: PID, secuencias y control avanzado", "horasEstimadas": 3}, {"nombre": "Redundancia, alta disponibilidad y gestión de fallos", "horasEstimadas": 2}], "titulo": "Diseño y operación de sistemas DCS", "unidad": 4}, {"temas": [{"nombre": "Diseño de HMI y principios de usabilidad para operación segura", "horasEstimadas": 3}, {"nombre": "Gestión de alarmas, tendencias y sistemas historian", "horasEstimadas": 3}, {"nombre": "Reportes, análisis de datos y acceso remoto/telemetría", "horasEstimadas": 2}], "titulo": "Supervisión SCADA e interfaces HMI", "unidad": 5}, {"temas": [{"nombre": "Integración DCS–SCADA: mapeo de tags, gateways y sincronización", "horasEstimadas": 2}, {"nombre": "Ciberseguridad en sistemas de control (principios y normativas IEC 62443)", "horasEstimadas": 2}, {"nombre": "Validación, puesta en marcha, pruebas, diagnóstico y casos prácticos", "horasEstimadas": 2}], "titulo": "Integración, ciberseguridad y puesta en marcha", "unidad": 6}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1151, "total_tokens": 3832, "output_tokens": 2681, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1344}}, "responseId": "resp_04ac2f441fe402ad0069a1b0c662e081909def5a9488754112", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Arquitecturas DCS/SCADA, diseño de supervisión y comunicación entre controladores distribuidos en entornos industriales."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-27 14:57:08.739803+00', '2026-02-27 14:57:49.617005+00', 48, 40, 'borrador'), - ('ac821b90-0210-4e80-95c2-2b847932f1b0', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CYB307', 'Integración de Redes Industriales e IIoT', 'OBLIGATORIA', 5, NULL, NULL, NULL, '{"ciclo": "7", "clave_de_la_asignatura": "CYB307", "criterios_de_evaluacion": "Proyecto integrador (35%), Laboratorios prácticos y entregables de integración (30%), Examen parcial (15%), Examen final (10%), Participación y foros técnicos (5%), Tareas y reportes individuales (5%)", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura el estudiante será capaz de diseñar e implementar soluciones que integren protocolos industriales con plataformas IIoT; seleccionar y configurar gateways y arquitecturas edge-to-cloud; modelar datos interoperables (p. ej., OPC UA/Digital Twins); desplegar telemetría segura y analizar la operación de sistemas IIoT en entornos industriales, contribuyendo al perfil de egreso mediante competencias en interoperabilidad, integración y seguridad en redes industriales.", "modalidades_tecnologicas_e_informaticas": "Se utilizarán laboratorios equipados con simuladores de PLC (p. ej., OpenPLC), servidores OPC UA, brokers MQTT (Mosquitto), herramientas de integración (Node-RED), analizadores de tráfico (Wireshark), entornos virtualizados (Docker), dispositivos edge como Raspberry Pi, plataformas cloud (AWS IoT o Azure IoT Hub) para pruebas de ingestión y dashboards, control de versiones (Git) y plataformas de gestión de aprendizaje para entrega de tareas y foros. Para modalidad mixta o no escolarizada se requerirá acceso remoto a los laboratorios virtualizados y a imágenes preconfiguradas.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas sobre protocolos y arquitecturas; configuración de un broker MQTT y un servidor OPC UA en entornos virtuales; desarrollo de un gateway en Raspberry Pi o contenedor para traducir entre protocolos; construcción de modelos de datos y un gemelo digital básico; preparación de la documentación y reporte del proyecto integrador; participación en foros y revisión de casos de estudio industriales.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Integración de Redes Industriales e IIoT", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales sobre conceptos y arquitecturas; demostraciones en laboratorio de integración de protocolos; sesiones prácticas guiadas para configuración de brokers, servidores OPC UA y gateways; talleres de modelado de datos y digital twins; tutorías de proyecto y presentaciones grupales con retroalimentación; evaluación práctica mediante ejercicios y exámenes."}', '[{"temas": [{"nombre": "Introducción a redes industriales: evolución, sectores y requisitos", "horasEstimadas": 2}, {"nombre": "Modelos de referencia: ISA-95, RAMI 4.0 y capas de comunicación", "horasEstimadas": 2}, {"nombre": "Topologías, determinismo y desempeño en redes industriales", "horasEstimadas": 4}], "titulo": "Fundamentos de redes industriales y modelos de referencia", "unidad": 1}, {"temas": [{"nombre": "OPC UA: arquitectura, servicios y seguridad", "horasEstimadas": 3}, {"nombre": "Fieldbuses y Modbus: características y escenarios de uso", "horasEstimadas": 2}, {"nombre": "EtherNet/IP y PROFINET: determinismo y comunicación en tiempo real", "horasEstimadas": 3}, {"nombre": "Consideraciones de tiempo real y conmutación en entornos industriales", "horasEstimadas": 2}], "titulo": "Protocolos industriales tradicionales y contemporáneos", "unidad": 2}, {"temas": [{"nombre": "MQTT: modelo pub/sub, QoS y patrones de uso en IIoT", "horasEstimadas": 3}, {"nombre": "CoAP y AMQP: alternativas para dispositivos con recursos limitados", "horasEstimadas": 2}, {"nombre": "Seguridad en protocolos IIoT: autenticación, cifrado y prácticas recomendadas", "horasEstimadas": 3}], "titulo": "Protocolos IIoT y mecanismos de telemetría", "unidad": 3}, {"temas": [{"nombre": "Conceptos de edge computing, fog y modelos híbridos", "horasEstimadas": 3}, {"nombre": "Gateways industriales: funciones, capacidades y diseño", "horasEstimadas": 2}, {"nombre": "Plataformas cloud para IIoT: ingestión, almacenamiento y análisis (p. ej., AWS IoT, Azure IoT)", "horasEstimadas": 2}, {"nombre": "Patrones de integración edge-to-cloud y latencia/consistencia", "horasEstimadas": 1}], "titulo": "Arquitecturas edge-to-cloud y componentes habilitadores", "unidad": 4}, {"temas": [{"nombre": "Modelado de datos: Information Models de OPC UA y Digital Twins", "horasEstimadas": 3}, {"nombre": "Puentes y traductores protocolarios: diseño e implementación", "horasEstimadas": 3}, {"nombre": "Integración con SCADA, MES y plataformas empresariales", "horasEstimadas": 2}, {"nombre": "Formatos de telemetría, normalización y transformación de mensajes", "horasEstimadas": 2}], "titulo": "Interoperabilidad, modelado de datos y middleware", "unidad": 5}, {"temas": [{"nombre": "Diseño y despliegue del proyecto integrador: arquitectura y plan de pruebas", "horasEstimadas": 3}, {"nombre": "Pruebas de telemetría, monitoreo y escalabilidad", "horasEstimadas": 2}, {"nombre": "Aspectos regulatorios, cumplimiento y continuidad operativa", "horasEstimadas": 1}], "titulo": "Proyecto integrador, despliegue y operación segura", "unidad": 6}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1153, "total_tokens": 4241, "output_tokens": 3088, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1536}}, "responseId": "resp_0f850703642fa3050069a1b0c6dba48194a53b2ccb06ab00db", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Integración de protocolos industriales con plataformas IIoT, interoperabilidad, telemetría y arquitecturas edge-to-cloud."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-27 14:57:08.739803+00', '2026-02-27 14:57:55.859973+00', 50, 42, 'borrador'), - ('8d6393e0-64c6-49b9-af06-a74fc07d2d1d', '05863c8a-2a93-42f9-a4b7-65cef2edfe72', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'MAT101', 'Cálculo diferencial e integral', 'TRONCAL', 8, 1, '0a35f63e-a6d0-465a-94ce-ca2d7db1d239', NULL, '{"ciclo": "Ciclo 1 - Matemáticas básicas", "contenido_tematico": "1. Fundamentos de funciones y notación: definición de función, dominio, codominio, gráficos y notación; tipos de funciones (polinómicas, racionales, trascendentes); 2. Límites y continuidad: límites de funciones reales, continuidad, teoremas relevantes; 3. Derivadas: definición, interpretación geométrica y física, reglas de derivación, derivadas de funciones compuestas e implícitas, aplicaciones a tasas de cambio; 4. Integrales: antiderivadas, integrales definidas e indefinidas, técnicas básicas de integración (sustitución, por partes), interpretación geométrica y física; 5. Aplicaciones a modelado, optimización y análisis de sistemas de ingeniería: modelado con funciones, optimización de una variable, áreas y volúmenes, aplicaciones en ingeniería; 6. Técnicas y herramientas de resolución de problemas en contextos ingenieriles; 7. Carga horaria y recursos didácticos: 6 horas de contacto (horas académicas) y 8 horas de estudio independiente (horas independientes) para un total de 14 horas de carga de aprendizaje.", "clave_de_la_asignatura": "MAT101", "criterios_de_evaluacion": "1) Exámenes parciales y final: 40%; 2) Tareas y ejercicios prácticos: 25%; 3) Proyecto de modelado o informe de laboratorio: 20%; 4) Participación en clase y prácticas guiadas: 15%.", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante: a) comprenderá y podrá aplicar conceptos de funciones, límites, derivadas e integrales; b) modelará problemas de ingeniería utilizando funciones y ecuaciones; c) empleará métodos de optimización y análisis para resolver problemas reales; d) interpretará resultados, comunicará soluciones técnicas y comprenderá las limitaciones y supuestos de los modelos; e) desarrollará habilidades analíticas, cuantitativas y de razonamiento crítico para el desempeño en ingeniería.", "modalidades_tecnologicas_e_informaticas": "La asignatura hará uso de plataformas de gestión de aprendizaje (LMS) y entornos de cómputo: Python (NumPy/SciPy/SymPy) y MATLAB/Octave para cálculo simbólico y numérico,Desmos o GeoGebra para visualización gráfica, y notebooks de Jupyter para prácticas y ejercicios automatizados. Se proporcionarán recursos digitales, laboratorios virtuales y foros de discusión.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas, ejercicios de práctica diarios, problemas de modelado de sistemas simples, estudio de casos, revisión de conceptos teóricos, realización de ejercicios de autoevaluación y entrega de proyectos o informes parciales.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Cálculo diferencial e integral", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales y resolución guiada de problemas en grupo, ejercicios prácticos en sala, sesiones de tutoría para aclarar dudas, revisión detallada de tareas y proyectos, y asesoramiento para el desarrollo de modelos de ingeniería y simulaciones."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1071, "total_tokens": 5299, "output_tokens": 4228, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 3520}}, "responseId": "resp_004cdc49a466724f00698e6ae925888193849878122ce1a867", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Funciones, límites, derivadas e integrales con aplicaciones en modelado, optimización y análisis de sistemas de ingeniería."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-13 00:05:59.544199+00', '2026-02-13 15:59:18.566655+00', 6, 8, 'borrador'), - ('38d541c8-55f9-47b3-80ad-7293f3cb494d', '6d1ad1d6-f34b-45fe-8b7c-3aef45d84901', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CEDU201', 'Teorías del Aprendizaje y Procesos Cognitivos', 'TRONCAL', 6, 1, '81228639-1335-4542-9d18-c5e682ab4982', NULL, '{"ciclo": "Ciclo I", "contenido_tematico": "1. Introducción y marco conceptual. 1.1 Definiciones clave, 1.2 Historia y evolución de las teorías del aprendizaje y de los procesos cognitivos. 2. Teorías del aprendizaje. 2.1 Conductismo y conductismo radical. 2.2 Cognitivismo. 2.3 Constructivismo. 2.4 Constructivismo social y sociocultural (Vygotsky). 2.5 Enfoques contemporáneos y conectivismo. 2.6 Enfoques emergentes y neuroeducación. 3. Procesos cognitivos en aprendizaje. 3.1 Atención y percepción. 3.2 Memoria (sensorial, a corto y a largo plazo). 3.3 Procesamiento de la información y carga cognitiva. 3.4 Metacognición y autorregulación. 4. Diseño instruccional basado en teorías. 4.1 Estrategias didácticas centradas en el estudiante. 4.2 Diseño de actividades y evaluaciones. 4.3 Entornos de aprendizaje y transferencia. 5. Aplicaciones y casos prácticos. 5.1 Análisis de contextos educativos (Aula presencial, online). 5.2 Planificación de intervenciones didácticas. 6. Evaluación y cierre. 6.1 Evaluación de aprendizajes y rúbricas. 6.2 Retroalimentación, ética y cierre del ciclo. Disposición horaria: la carga total prevista es de 4 horas académicas (presenciales) y 8 horas de trabajo independiente a lo largo del curso, distribuidas para favorecer la comprensión de las teorías y la aplicación práctica en contextos educativos.", "clave_de_la_asignatura": "CEDU201", "criterios_de_evaluacion": "1) Examen parcial de teorías y procesos cognitivos - 20%. 2) Examen final - 20%. 3) Proyecto de diseño de intervención didáctica basada en teorías del aprendizaje - 25%. 4) Trabajo de revisión y ensayo crítico sobre lecturas clave - 15%. 5) Participación, prácticas y actividades de clase - 20%.", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante habrá internalizado las principales teorías del aprendizaje y de los procesos cognitivos, y podrá: analizar contextos educativos desde enfoques teóricos; diseñar estrategias didácticas centradas en el estudiante aplicando principios de cognición y metacognición; evaluar intervenciones didácticas con criterios basados en evidencia; comunicar ideas de forma clara y argumentada; y estimar impactos de diversas teorías en el aprendizaje de diferentes dominios.", "modalidades_tecnologicas_e_informaticas": "La asignatura se imparte en modalidad presencial, con apoyo en herramientas digitales: plataforma de gestión del aprendizaje (LMS), videos, lecturas interactivas, foros y evaluación en línea. En modalidad mixta o no escolarizada, parte de las actividades se realizan en línea con entregas asincrónicas y tutorías virtuales.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas, análisis de casos, elaboración de un portafolio de reflexiones críticas, revisión de literatura sobre teorías del aprendizaje, diseño de un marco teórico para una intervención educativa, desarrollo de actividades didácticas centradas en el estudiante.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Teorías del Aprendizaje y Procesos Cognitivos", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales breves para contextualizar teorías; debates estructurados; análisis de casos de aula; resolución de ejercicios sobre procesos atencionales, memoria y metacognición; trabajo en equipo para diseñar una intervención educativa; revisión y retroalimentación de prototipos de actividades didácticas."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1082, "total_tokens": 5918, "output_tokens": 4836, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 3968}}, "responseId": "resp_050a7bf7b57ae28c00698e65c174248197bd51284e773f3b99", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Estudia las principales teorías del aprendizaje y su aplicación en contextos educativos para diseñar estrategias didácticas centradas en el estudiante."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-12 23:43:57.682105+00', '2026-02-12 23:44:34.492864+00', 4, 8, 'borrador'), - ('fbc70e64-7f44-4f49-a7fc-c29f87c19e57', '6d1ad1d6-f34b-45fe-8b7c-3aef45d84901', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CEDU202', 'Evaluación Formativa y Retroalimentación para el Aprendizaje', 'TRONCAL', 5, 2, '014cd069-5f7f-48fc-8883-813527b515ca', NULL, '{"ciclo": "Ciclo troncal", "contenido_tematico": "1. Fundamentos de la evaluación formativa y su impacto en el aprendizaje\\n 1.1 Conceptos clave: evaluación formativa, retroalimentación, mejora del aprendizaje\\n 1.2 Diferencias entre evaluación formativa y evaluación sumativa\\n2. Diseño de instrumentos de evaluación formativa\\n 2.1 Rúbricas de evaluación\\n 2.2 Listas de cotejo (checklists)\\n 2.3 Diarios de aprendizaje y evidencias\\n 2.4 Portafolios\\n3. Estrategias de retroalimentación efectiva\\n 3.1 Principios de retroalimentación de alta calidad\\n 3.2 Formatos y canales de entrega (oral, escrita, digital)\\n 3.3 Retroalimentación oportuna y accionable\\n4. Interpretación de evidencia y toma de decisiones pedagógicas\\n 4.1 Análisis de resultados de la evaluación formativa\\n 4.2 Planes de mejora y cierre de ciclos de aprendizaje\\n5. Herramientas y recursos tecnológicos\\n 5.1 LMS, rúbricas digitales, analítica de aprendizaje\\n 5.2 Plataformas de colaboración y comunicación\\n6. Estrategias de evaluación formativa en contextos colaborativos\\n 6.1 Coevaluación entre pares\\n 6.2 Evaluación entre docentes\\n7. Ética y manejo de datos de evaluación\\n 7.1 Privacidad y uso responsable de datos\\n 7.2 Transparencia con estudiantes\\n8. Plan de acción y seguimiento\\n 8.1 Elaboración de planes de mejora individual y grupal\\n 8.2 Distribución de carga horaria: 3 horas académicas (sincrónicas) y 6 horas de aprendizaje independiente", "clave_de_la_asignatura": "CEDU202", "criterios_de_evaluacion": "1) Diseño y uso de instrumentos de evaluación formativa (rúbricas, listas de verificación, diarios de aprendizaje) – 40%.\n2) Análisis de evidencia de aprendizaje para retroalimentación y toma de decisiones pedagógicas – 20%.\n3) Práctica y simulaciones de retroalimentación en aula – 15%.\n4) Participación en debates y aportes para mejora continua – 15%.\n5) Portafolio de evidencias y plan de mejora personal – 10%", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de diseñar e implementar estrategias de evaluación formativa y retroalimentación que promuevan la mejora continua del aprendizaje; analizar evidencia de aprendizaje para adaptar prácticas pedagógicas; colaborar en procesos de mejora con pares.", "modalidades_tecnologicas_e_informaticas": "Plataformas LMS (p. ej., Moodle, Canvas) para gestión de tareas y retroalimentación; herramientas de creación de rúbricas y listas de cotejo; software de videoconferencia para sesiones sincrónicas; herramientas de análisis de datos de aprendizaje; recursos educativos abiertos y repositorios de evidencia.", "actividades_de_aprendizaje_independientes": "Lecturas y revisión de artículos sobre evaluación formativa; diseño de un instrumento de evaluación formativa para un caso de estudio; análisis de ejemplos de retroalimentación; desarrollo de un portafolio de evidencias con reflexiones; autoevaluación y planes de mejora personal.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Evaluación Formativa y Retroalimentación para el Aprendizaje", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Talleres prácticos de diseño de instrumentos; simulaciones de retroalimentación entre pares; revisión de rúbricas y criterios de éxito; análisis de muestras de retroalimentación y evidencia; discusión de casos y seguimiento de planes de mejora."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1083, "total_tokens": 10553, "output_tokens": 9470, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 8576}}, "responseId": "resp_05e1e9fe8eec94c900698e65c03e3081a1b2b1c0fd229f71e6", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Desarrolla competencias para diseñar e implementar evaluación formativa, instrumentos y retroalimentación efectiva que favorezcan la mejora continua del aprendizaje."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-12 23:43:57.682105+00', '2026-02-12 23:45:05.252544+00', 3, 6, 'borrador'), - ('52b51837-fe6c-4552-9500-efcf16071d9a', '05863c8a-2a93-42f9-a4b7-65cef2edfe72', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'MAT102', 'Álgebra lineal y geometría analítica', 'TRONCAL', 6, 1, '35e06a47-655d-4ce4-8b5f-52dc068c271c', NULL, '{"ciclo": "Segundo ciclo", "contenido_tematico": "Carga horaria: Horas académicas presenciales: 5; Horas de trabajo independiente: 6. A continuación se presentan los temas y subtemas, estructurados de forma lógica y secuencial: 1. Vectores y operaciones en espacios vectoriales; 1.1 Vectores en R^n, operaciones; 1.2 Distancia y norma; 1.3 Productos escalares; 2. Espacios vectoriales; 2.1 Definición, axiomas; 2.2 Subespacios; 2.3 Base y dimensión; 3. Transformaciones lineales; 3.1 Definición; 3.2 Matriz asociada a una transformación; 3.3 Núcleo e imagen; 3.4 Cambio de base; 4. Matrices y resolución de sistemas; 4.1 Operaciones con matrices; 4.2 Rango y resolución con Gauss; 4.3 Inversa; 5. Geometría analítica; 5.1 Coordenadas y sistemas de referencia en plan y espacio; 5.2 Rectas y planos; 5.3 Intersecciones de subespacios; 6. Aplicaciones y problemas; 6.1 Aplicaciones de transformaciones lineales; 6.2 Problemas de optimización lineal básica.", "clave_de_la_asignatura": "MAT102", "criterios_de_evaluacion": "Actividades de evaluación: - Exámenes parciales (2): 25% total (12.5% cada uno). - Examen final: 35%. - Tareas y ejercicios: 20%. - Participación y asistencia: 20%.", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante podrá: validar el razonamiento lógico y algebraico para resolver problemas que involucren vectores, matrices, espacios vectoriales y transformaciones lineales; aplicar técnicas de resolución de sistemas lineales y análisis geométrico en R^2 y R^3; interpretar resultados en contextos geométricos y de modelado; comunicar soluciones de forma clara y precisa.", "modalidades_tecnologicas_e_informaticas": "Recursos tecnológicos: plataforma de gestión del aprendizaje (LMS), computadoras con acceso a internet, software de álgebra lineal (Octave/NumPy/Python o MATLAB), herramientas de visualización (GeoGebra, matplotlib), procesadores de texto y presentaciones, pizarras interactivas, proyectores, acceso a repositorios de ejercicios y evaluaciones en línea.", "actividades_de_aprendizaje_independientes": "Estudio autónomo de conceptos teóricos; resolución de ejercicios propuestos de distinta dificultad; lectura de material didáctico y referencias; práctica de problemas de sistemas lineales; autoevaluación mediante cuestionarios y revisión de soluciones.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Álgebra lineal y geometría analítica", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales con resolución guiada de ejercicios; sesiones de discusión de problemas y ejemplos; talleres y prácticas en grupo con feedback del docente; tutorías para reforzar conceptos clave; resolución de ejercicios en tiempo real con retroalimentación del académico."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1075, "total_tokens": 6593, "output_tokens": 5518, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 4800}}, "responseId": "resp_0c00e5dab5344ba200698e6ae8bc70819e83d70d92c00144d4", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Álgebra lineal, así como geometría analítica, Vectores, matrices, espacios vectoriales y transformaciones lineales"}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-13 00:05:59.544199+00', '2026-02-13 00:08:38.797999+00', 5, 6, 'borrador'), - ('7fe0644a-5c30-4bd5-a032-cde1872802b8', '05863c8a-2a93-42f9-a4b7-65cef2edfe72', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'ITMI104', 'Programación estructurada y paradigmas', 'TRONCAL', 6, 2, '0a35f63e-a6d0-465a-94ce-ca2d7db1d239', NULL, '{"ciclo": "Ciclo 2", "contenido_tematico": "1. Fundamentos de programación estructurada\n1.1 Conceptos básicos de algoritmos y estructuras de control\n1.2 Tipos de datos, variables y operadores\n1.3 Flujo de control: secuencial, selección y repetición\n2. Técnicas de programación estructurada\n2.1 Modularización, funciones y procedimientos\n2.2 Gestión de la memoria y alcance\n3. Paradigmas de programación\n3.1 Paradigma procedural\n3.2 Programación orientada a objetos\n3.3 Programación funcional\n4. Buenas prácticas y desarrollo de sistemas inmersivos\n4.1 Diseño, documentación y pruebas\n4.2 Patrones de diseño y arquitectura de software\n4.3 Rendimiento, seguridad y accesibilidad\n5. Herramientas y entornos de desarrollo\n5.1 Lenguajes y entornos de programación (C, Java, Python)\n5.2 Entornos de desarrollo, depuración y construcción\n5.3 Control de versiones y gestión de proyectos", "clave_de_la_asignatura": "ITMI104", "criterios_de_evaluacion": "1. 30% - Desempeño en prácticas de programación, ejercicios y pruebas cortas; 2. 40% - Proyecto integrador de un módulo de un sistema inmersivo; 3. 20% - Exámenes teóricos y prácticos sobre conceptos y aplicabilidad de paradigmas; 4. 10% - Participación, entregas a tiempo y calidad de código.", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de: 1) Aplicar principios de programación estructurada para diseñar e implementar módulos y algoritmos; 2) Utilizar estructuras de control para construir flujo lógico correcto y eficiente; 3) Comparar y seleccionar entre paradigmas de programación (procedural, orientada a objetos, funcional) para resolver problemas; 4) Aplicar buenas prácticas de desarrollo para sistemas inmersivos, incluyendo documentación, pruebas y control de versiones; 5) Trabajar de forma colaborativa en proyectos de software.", "modalidades_tecnologicas_e_informaticas": "Entorno de aprendizaje: computadores con acceso a internet; IDEs como Visual Studio Code, PyCharm o Eclipse; compiladores e intérpretes para C, Java y Python; herramientas de control de versiones (Git, GitHub/GitLab); plataformas de gestión de cursos y foros; herramientas de depuración y pruebas; recursos de hardware para desarrollo de software (PC/laptop) y, si aplica, plataformas de simulación o motores de juego ligeros para sistemas inmersivos.", "actividades_de_aprendizaje_independientes": "Actividades de aprendizaje independientes (aprox. 8 horas): 1) Resolución de ejercicios de programación y prácticas de estructuras de control; 2) Lecturas de capítulos y material de apoyo; 3) Desarrollo de un módulo pequeño de software aplicando uno o más paradigmas; 4) Revisión de código y refactorización; 5) Preparación de notas y entrega de entregables parciales para el proyecto. Se recomienda 8 horas de estudio independiente.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Programación estructurada y paradigmas", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Sesiones de enseñanza guiada en aula y laboratorio: explicación de conceptos, demostraciones de código, resolución guiada de ejercicios y estudio de casos; laboratorios de programación supervisados en los que el académico guía la construcción de módulos y la elección de paradigmas; revisión de código en clase; diseño de soluciones en paralelo al proyecto integrador; asesoría y apoyo en la resolución de dudas técnicas y conceptuales. La carga presencial es de 5 horas y se esperan 8 horas de estudio independiente, totalizando la carga de la asignatura."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1079, "total_tokens": 8292, "output_tokens": 7213, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 6336}}, "responseId": "resp_0ec6f8587cd8bc6c00698e6ae901548194870419f095812f4a", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Principios de programación, estructuras de control, paradigmas (procedural, OOP, funcional) y buenas prácticas para desarrollo de sistemas inmersivos."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-13 00:05:59.544199+00', '2026-02-13 00:07:30.127728+00', 5, 8, 'borrador'), - ('f82a014c-acbc-4c6d-b28a-e667ff1cfcc9', '05863c8a-2a93-42f9-a4b7-65cef2edfe72', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'ITMI-607', 'Aseguramiento de Calidad y Pruebas para Experiencias Inmersivas', 'OBLIGATORIA', 4, 8, '0a35f63e-a6d0-465a-94ce-ca2d7db1d239', NULL, '{"ciclo": "Ciclo 6", "contenido_tematico": "1. Fundamentos de aseguramiento de calidad en experiencias inmersivas\n1.1 Conceptos de calidad, pruebas y aseguramiento de la calidad en entornos de realidad virtual y aumentada\n1.2 Tipos de pruebas aplicables a experiencias inmersivas (funcionales, de rendimiento, de usabilidad, de seguridad y de accesibilidad)\n\n2. Planificación de pruebas para experiencias inmersivas\n2.1 Definición de criterios de aceptación y metas de calidad\n2.2 Plan de pruebas y desarrollo de casos de prueba\n2.3 Gestión de riesgos, priorización y cobertura de pruebas\n\n3. Pruebas funcionales en entornos inmersivos\n3.1 Verificación de interacción usuario-dispositivo (controladores, manos, gaze)\n3.2 Validación de flujos de usuario y escenarios inmersivos\n3.3 Compatibilidad entre plataformas (PC, móviles, standalone) y plataformas de desarrollo (Unity, Unreal)\n\n4. Pruebas de rendimiento y estabilidad\n4.1 Medición de frame rate, latencia, consumo de recursos\n4.2 Perfilado de CPU/GPU y memoria\n4.3 Pruebas de estrés y estabilidad de sesiones prolongadas\n\n5. Pruebas de usabilidad y experiencia de usuario\n5.1 Métodos de evaluación cualitativos y cuantitativos\n5.2 Ergonomía, comodidad y motion sickness\n5.3 Observación de usuarios, cuestionarios y entrevistas\n\n6. Automatización de pruebas para experiencias inmersivas\n6.1 Estrategias de automatización específicas para VR/AR\n6.2 Automatización de pruebas de interfaz, entradas y métricas de telemetría\n6.3 Integración continua, pipelines de pruebas y reporting\n\n7. Métricas y reporte de calidad\n7.1 Métricas de calidad, rendimiento y usabilidad\n7.2 Generación de reportes, dashboards y trazabilidad\n\n8. Herramientas y entornos de pruebas\n8.1 Unity Test Framework, Unreal Automation, OpenXR\n8.2 Herramientas de automatización, simuladores, telemetría y registro de incidencias\n\n9. Gestión de defectos y ciclo de vida de las pruebas\n9.1 Registro, clasificación y priorización de defectos\n9.2 Trazabilidad, revisión y cierre de incidencias\n\n10. Consideraciones éticas, de seguridad y accesibilidad\n10.1 Seguridad de datos, privacidad, consentimiento y ética en pruebas\n10.2 Accesibilidad en experiencias inmersivas y diseño inclusivo\n\nCarga horaria total: 120 horas (48 horas de contacto, 72 horas de aprendizaje independiente).", "clave_de_la_asignatura": "ITMI-607", "criterios_de_evaluacion": "- Exámenes teóricos y resolución de casos: 25%\n- Prácticas de pruebas funcionales y de rendimiento: 25%\n- Proyecto de automatización de pruebas y framework: 25%\n- Participación, tareas y entregas prácticas: 15%\n- Presentación de informe final y defensa de casos: 10%", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de: 1) diseñar y ejecutar planes de prueba para experiencias inmersivas; 2) realizar pruebas funcionales, de rendimiento y de usabilidad; 3) aplicar técnicas de automatización de pruebas y métricas de calidad; 4) interpretar resultados, gestionar defectos y proponer mejoras; 5) comunicar hallazgos a equipos multidisciplinarios y documentar evidencia de prueba.", "modalidades_tecnologicas_e_informaticas": "Recursos tecnológicos y de información: laboratorio de realidad virtual con dispositivos como Oculus Quest 2, Rift S, HTC Vive; equipos de cómputo con GPU robusta; motores de desarrollo Unity 3D y Unreal Engine; OpenXR para compatibilidad multiplataforma; herramientas de pruebas de interfaz y automatización (Unity Test Framework, Unreal Automation, OpenXR Testing, Appium para pruebas móviles cuando aplique); herramientas de medición de rendimiento (Unity Profiler, Unreal Insights, RenderDoc, NVIDIA Nsight); herramientas de telemetría y registro (Application Insights, ELK); control de versiones (Git); integración continua (GitHub Actions, Jenkins); plataformas de gestión de pruebas (Jira, Xray) y entornos de laboratorio con pruebas de experiencia inmersiva. Modalidad presencial con laboratorio equipado y acceso remoto para simulaciones cuando sea aplicable.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas sobre QA en VR/AR; revisión de casos de estudio; investigación de herramientas y marcos de pruebas; desarrollo de un plan de pruebas para un caso de experiencia inmersiva; diseño y ejecución de pruebas independientes; análisis de resultados y documentación de hallazgos; lectura de estándares de usabilidad y seguridad.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Aseguramiento de Calidad y Pruebas para Experiencias Inmersivas", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases teóricas y prácticas; demostraciones en laboratorio de VR; desarrollo supervisado de planes de prueba y casos; ejecución de pruebas guiadas en proyectos; revisión de entregables y retroalimentación del académico; defensa oral de resultados y discusión de mejoras."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1089, "total_tokens": 8227, "output_tokens": 7138, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 5952}}, "responseId": "resp_0dcd260bda07243e00698e6ae8e71c819c8338ad0b34ae8ff1", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Diseño y ejecución de pruebas funcionales, de rendimiento y de usabilidad en entornos inmersivos; métricas y automatización de pruebas."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-13 00:05:59.544199+00', '2026-02-13 20:23:51.692439+00', 48, 72, 'borrador'), - ('47672234-9d95-4b96-ae71-158b3ed559a7', '0e0aea4d-b8b4-4e75-8279-6224c3ac769f', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CIB-CS-401-ALG', 'Álgebra', 'OBLIGATORIA', 3.22, 3, '0382a5da-804b-4194-bc19-b2649541c302', 2, '{"ciclo": "Hola 123", "contenido_tematico": "Enunciar, en idioma español, los temas y subtemas que se abordarán en la asignatura o unidad de aprendizaje; estructurados de manera lógica y secuencial y numerados en orden jerárquico. Éstos deberán ser acordes con la carga horaria asignada, sustentar la denominación de la asignatura y contribuir al logro de los fines de aprendizaje.", "clave_de_la_asignatura": "Anotar la clave que identifica a la asignatura o unidad de aprendizaje; la cual debe coincidir con la señalada en el mapa curricular.", "criterios_de_evaluacion": "Enlistar las actividades o productos que considerarán para valorar los aprendizajes logrados por los estudiantes, señalar el porcentaje para cada uno, de tal manera que sumen el 100%. Éstos deberán ser acordes con las actividades de aprendizaje.", "fines_de_aprendizaje_o_formacion": "Describir los aprendizajes y fines que alcanzará el estudiante al concluir la asignatura. Deberá sustentar la denominación de la asignatura, vincularse con los contenidos temáticos y coadyuvar al logro del fin de aprendizaje y perfil de egreso del plan de estudios.", "modalidades_tecnologicas_e_informaticas": "Describir los recursos tecnológicos y de comunicación que se emplearán para el desarrollo del proceso de enseñanza-aprendizaje de la asignatura. Para las modalidades no escolarizada y mixta, este elemento es obligatorio.", "actividades_de_aprendizaje_independientes": "Señalar las actividades de aprendizaje que desarrollará el estudiante de manera independiente. Éstas deberán ser acordes con la naturaleza de la asignatura y la modalidad educativa.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Señalar el nombre de la asignatura o unidad de aprendizaje de igual manera que en el mapa curricular.", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Señalar las actividades de aprendizaje que desarrollará el estudiante en las horas-clase. Éstas deberán ser acordes con la naturaleza de la asignatura, modalidad educativa e instalaciones empleadas, además de contribuir al logro de los fines de aprendizaje."}', '[{"temas": ["Ética y legalidad", "PTES/OSSTMM (visión general)", "Alcance y reglas"], "titulo": "Fundamentos y metodología", "unidad": 1}, {"temas": ["OSINT", "Descubrimiento de servicios", "Enumeración"], "titulo": "Reconocimiento y enumeración", "unidad": 2}, {"temas": ["Vulnerabilidades comunes", "Explotación controlada", "Post-explotación básica"], "titulo": "Explotación en laboratorio", "unidad": 3}, {"temas": ["Evidencias", "Severidad", "Recomendaciones"], "titulo": "Reporte y remediación", "unidad": 4}]', 'MANUAL', '{"seed": true}', '11111111-1111-1111-1111-111111111111', '11111111-1111-1111-1111-111111111111', '2026-02-03 21:51:47.719607+00', '2026-02-23 20:52:55.662769+00', 454, 2, 'borrador'), - ('3408baf0-c967-41e2-b63a-20664d7fea9e', '79fba458-aea4-4ca8-ab76-943ede479f15', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'PRI101', 'Fundamentos de Investigación', 'TRONCAL', 4, 1, '1f875112-f9de-451c-acf1-a34601bba1a3', NULL, '{"ciclo": "Ciclo formativo troncal", "contenido_tematico": "1. Fundamentos de la investigación científica y del método científico; 1.1 Paradigmas y epistemologías; 1.2 Formulación de preguntas de investigación y objetivos. 2. Diseño de investigación; 2.1 Tipos de investigación (exploratoria, descriptiva, explicativa, experimental); 2.2 Diseño de estudios cualitativos y cuantitativos; 2.3 Muestreo, validez y confiabilidad. 3. Redacción y comunicación científica; 3.1 Estructura de reportes y artículos; 3.2 Normas de citación y gestión de referencias (APA); 3.3 Presentación de resultados (tablas, figuras, gráficos). 4. Ética, reproducibilidad y calidad de la evidencia; 4.1 Ética en la investigación; 4.2 Revisión por pares y plagio. 5. Proyecto integrador; 5.1 Planteamiento del problema y diseño de protocolo; 5.2 Elaboración de propuesta de investigación. Carga horaria total: 48 horas académicas presenciales y 80 horas de trabajo independiente. Créditos: 4.", "clave_de_la_asignatura": "PRI101", "criterios_de_evaluacion": "1) Participación y asistencia en clase (10%); 2) Diseño de estudio y entrega de plan de investigación (35%); 3) Informe de proyecto o artículo corto (25%); 4) Examen teórico (20%); 5) Presentación oral de resultados/defensa de la propuesta (10%).", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de: a) formular preguntas y objetivos de investigación; b) diseñar un protocolo de estudio (tipos de diseño, muestreo y técnicas de recolección de datos); c) realizar búsquedas bibliográficas y gestionar referencias; d) redactar propuestas de investigación y reportes académicos con estructura y normas de citación; e) interpretar resultados y comunicar hallazgos de forma ética.", "modalidades_tecnologicas_e_informaticas": "Plataforma de gestión del aprendizaje (LMS) y herramientas de videoconferencia; procesadores de texto y herramientas de revisión de estilo; gestión de referencias (Zotero o Mendeley); software de análisis básico (R o SPSS); herramientas de nube para almacenamiento y colaboración; requisitos de comunicación asincrónica (foros, correo) y sincrónica (tutorías, sesiones). Nota: para las modalidades no escolarizada y mixta, este elemento es obligatorio.", "actividades_de_aprendizaje_independientes": "Lectura y análisis crítico de literatura relevante; búsquedas bibliográficas y evaluación de fuentes; redacción de borradores de cada sección de la propuesta; elaboración de un esquema y un protocolo de investigación; desarrollo de resúmenes y fichas de lectura; ejercicios de citación y parafraseo; revisión de pares entre estudiantes.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Fundamentos de Investigación", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Sesiones magistrales y talleres de diseño de investigación; revisión guiada de borradores de propuesta; tutorías individuales para apoyo en planteamiento del problema, diseño y metodología; talleres de redacción y normas de citación; defensa de la propuesta ante el grupo y/o panel docente; sesiones de retroalimentación sobre avances del proyecto y su implementación."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1066, "total_tokens": 6995, "output_tokens": 5929, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 5120}}, "responseId": "resp_0dbb980a81988a2d00698f49ba77ac819fb5f109ec2cd8b08d", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Introducción a métodos científicos, diseño de investigación y redacción académica para proyectos de grado y trabajos científicos."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-13 15:56:39.845265+00', '2026-02-13 15:58:24.175509+00', 48, 80, 'borrador'), - ('0401ca75-ea1d-4422-b4f6-1beee8459c52', '79fba458-aea4-4ca8-ab76-943ede479f15', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'MS320', 'Modelado y Simulación', 'OBLIGATORIA', 4, 2, '2021b495-d369-4988-be1f-8aaf508932f5', NULL, '{"ciclo": "Tercer ciclo", "contenido_tematico": "1. Fundamentos de modelado y simulación\\n1.1 Conceptos esenciales\\n1.2 Tipos de modelos: deterministas y estocásticos\\n2. Modelado matemático\\n2.1 Formulación de problemas\\n2.2 Modelos de colas, redes y procesos de producción\\n3. Métodos de simulación\\n3.1 Simulación en tiempo discreto\\n3.2 Simulación continua\\n3.3 Verificación y validación de modelos\\n4. Diseño e implementación en software de simulación\\n4.1 Matlab/Simulink\\n4.2 Python y SimPy\\n4.3 AnyLogic y otras herramientas\\n5. Análisis de resultados y toma de decisiones\\n5.1 Análisis de sensibilidad y experimentos de diseño (DOE)\\n5.2 Métricas de rendimiento\\n6. Aplicaciones en sistemas productivos y logísticos\\n6.1 Optimización de operaciones\\n6.2 Gestión de colas y capacidad\\n7. Ética, reproducibilidad y documentación de modelos\\nCarga horaria: 60 horas académicas presenciales y 80 horas de estudio independiente.", "clave_de_la_asignatura": "MS320", "criterios_de_evaluacion": "Examen final 40%; Proyecto de modelado y simulación con entrega de código y reporte 30%; Tareas y ejercicios prácticos 15%; Presentación y defensa del proyecto 15%.", "fines_de_aprendizaje_o_formacion": "Al finalizar, el estudiante será capaz de: 1) comprender y diferenciar fundamentos de modelado matemático y simulación; 2) diseñar, implementar y validar modelos de simulación para sistemas reales; 3) analizar escenarios y tomar decisiones informadas; 4) aplicar herramientas computacionales (Matlab/Simulink, Python/SimPy, AnyLogic) para construir y ejecutar modelos; 5) comunicar resultados y conclusiones de manera clara; 6) trabajar de forma colaborativa en proyectos de modelado y simulación.", "modalidades_tecnologicas_e_informaticas": "Software y herramientas: Matlab/Simulink; Python (SimPy, NumPy, SciPy); AnyLogic; Excel con macros; Jupyter Notebooks; Git y repositorios remotos; plataformas de gestión del aprendizaje y videoconferencia; recursos de hardware para simulación (PCs con capacidad de cómputo moderada). Para modalidades no presenciales o mixtas, se requiere acceso a entornos de simulación y a materiales digitales.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas y revisión bibliográfica; resolución de ejercicios de modelado; construcción de modelos simples de casos prácticos; desarrollo de un proyecto de simulación de ciclo completo; estudio de casos de la industria; elaboración de informe de resultados y reporte técnico; estudio de DOE y análisis de sensibilidad.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Modelado y Simulación (Obligatoria)", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales breves para introducir conceptos; talleres prácticos guiados con software de simulación; laboratorios computacionales para construcción de modelos; revisión y discusión de casos de estudio; sesiones de asesoría para avance del proyecto; presentaciones parciales de avances y feedback del docente."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1068, "total_tokens": 6982, "output_tokens": 5914, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 5120}}, "responseId": "resp_0f7b2b0f1c5fd88100698f49ba541c8190b4120e0bacf9f6e1", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Técnicas de modelado matemático y simulación computacional para análisis de sistemas y apoyo a decisiones."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-13 15:56:39.845265+00', '2026-02-13 15:58:25.892056+00', 60, 80, 'borrador'), - ('f23374e5-be5c-40b2-919b-17550ee0712b', '79fba458-aea4-4ca8-ab76-943ede479f15', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'MEA125', 'Metodologías de Enseñanza y Aprendizaje', 'OPTATIVA', 2, 1, '1f875112-f9de-451c-acf1-a34601bba1a3', NULL, '{"ciclo": "Optativa", "contenido_tematico": "1. Enfoques y estrategias de enseñanza. 1.1 Conceptos clave de aprendizaje y enseñanza; 1.2 Estrategias de enseñanza activas (aprendizaje basado en problemas, aprendizaje basado en proyectos, aprendizaje colaborativo); 1.3 Diferenciación pedagógica y atención a la diversidad; 1.4 Rol del docente y del aprendizaje del estudiante. 2. Diseño curricular y planificación. 2.1 Principios y enfoques para el diseño curricular; 2.2 Definición de objetivos de aprendizaje y unidades; 2.3 Secuenciación, progresión y articulación de contenidos; 2.4 Evaluación formativa como parte de la planificación y retroalimentación; 2.5 Adaptación a contextos institucionales y recursos. 3. Evaluación en la enseñanza. 3.1 Tipos de evaluación (formativa, sumativa, diagnóstica); 3.2 Instrumentos y rubricas de evaluación; 3.3 Retroalimentación efectiva y uso de resultados para mejora; 3.4 Ética y fiabilidad en la evaluación. 4. Tecnologías y contextos de aprendizaje. 4.1 Uso de tecnologías educativas para enriquecer la enseñanza (LMS, herramientas de colaboración, entornos virtuales); 4.2 Diseño de actividades para contextos presenciales, a distancia e híbridos; 4.3 Consideraciones sobre accesibilidad, inclusión y brecha digital. 5. Prácticas docentes y desarrollo profesional. 5.1 Microenseñanza, simulaciones y práctica reflexiva; 5.2 Observación entre pares y análisis de lecciones; 5.3 Diseño de planes de mejora y desarrollo profesional continuo; 5.4 Ética profesional en la enseñanza. 6. Investigación y ética educativa. 6.1 Observación, análisis crítico de literatura educativa; 6.2 Consideraciones éticas y de seguridad en contextos de aprendizaje; 6.3 responsabilidad social y cultural en la educación. Distribución horaria prevista: 32 horas académicas presenciales y 40 horas independientes.", "clave_de_la_asignatura": "MEA125", "criterios_de_evaluacion": "Participación en clase y trabajos prácticos (10%). Diseño de una unidad didáctica o plan de clase (25%). Actividades de microenseñanza y retroalimentación entre pares (20%). Ensayo crítico sobre estrategias didácticas y evaluación (15%). Portafolio de evidencias y entregables (20%). Examen corto de síntesis (10%).", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante podrá: 1) diseñar unidades o planes de clase alineados con objetivos de aprendizaje, contextos y diversidad; 2) aplicar y adaptar estrategias pedagógicas activas para diferentes contextos educativos; 3) seleccionar y aplicar instrumentos de evaluación formativa y sumativa; 4) analizar críticamente enfoques metodológicos y su impacto en el aprendizaje; 5) integrar tecnologías y herramientas didácticas para enriquecer la enseñanza; 6) reflexionar sobre la ética, la inclusión y la equidad en la práctica educativa. Este perfil contribuye a fortalecer las capacidades pedagógicas del plan de estudios y a su desarrollo profesional.", "modalidades_tecnologicas_e_informaticas": "Modalidad: presencial, con opción a modalidad mixta o no escolarizada según disponibilidad institucional. Recursos tecnológicos: plataforma de gestión de aprendizaje (LMS), herramientas de colaboración en línea (Google Workspace, Microsoft 365), rúbricas digitales, cuestionarios y pruebas en línea, videos, entornos virtuales para simulaciones de microenseñanza, bibliografía digital, repositorio institucional. Se utilizarán videoconferencias para sesiones sincrónicas en modalidad mixta/no escolarizada; se promoverá el acceso a contenidos en dispositivos móviles y con conectividad limitada; se fomentará el uso de entornos de aprendizaje colaborativo y de evaluación digital.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas y revisión de literatura sobre metodologías de enseñanza. Análisis de casos prácticos y reflexión crítica. Elaboración de una propuesta de unidad didáctica, con objetivos, contenidos, actividades, recursos y criterios de evaluación. Desarrollo de un portafolio de evidencias que incluya diseños, rúbricas y reflexiones. Resolución de ejercicios de diseño y evaluación. Trabajo independiente para adaptar ideas a contextos específicos.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Metodologías de Enseñanza y Aprendizaje", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Actividades de aprendizaje bajo conducción de un académico: 1) exposiciones breves y talleres guiados por el docente; 2) diseño y ejecución de microclases en sesiones supervisadas; 3) análisis de casos y discusión orientada; 4) revisión y retroalimentación de rúbricas y productos de aprendizaje; 5) sesiones de tutoría para asesoría en el desarrollo de la unidad didáctica; 6) prácticas de observación y reflexión sobre la enseñanza en contextos reales o simulados."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1071, "total_tokens": 9635, "output_tokens": 8564, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 7424}}, "responseId": "resp_04ffe2366104700d00698f49b9d3dc819cba064d50f1b83457", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Estrategias pedagógicas, diseño curricular y evaluación para facilitar el aprendizaje en diversos contextos."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-13 15:56:39.845265+00', '2026-02-13 15:58:28.568759+00', 32, 40, 'borrador'), - ('8bab29f8-a8c3-4e92-b4b0-4ef327522858', '05863c8a-2a93-42f9-a4b7-65cef2edfe72', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'ITMI-609', 'Metodologías de Prototipado Rápido y Validación', 'OPTATIVA', 4, 4, '0a35f63e-a6d0-465a-94ce-ca2d7db1d239', NULL, '{"ciclo": "Ciclo 4 - Optativa", "contenido_tematico": "1. Fundamentos del prototipado rápido y validación\n1.1 Definiciones, objetivos y diferencias entre prototipos de baja fidelidad y alta fidelidad\n1.2 Contextos de uso y usuarios\n2. Técnicas de prototipado rápido\n2.1 Prototipos de baja fidelidad: papel, cartón, storyboards\n2.2 Prototipos de alta fidelidad: wireframes interactivos, mockups, simulaciones\n2.3 Prototipos en contextos inmersivos: VR/AR\n3. Planificación de iteraciones\n3.1 Definición de hipótesis de diseño\n3.2 Diseño de ciclos iterativos y criterios de éxito\n3.3 Planificación de pruebas y cronograma\n4. Métodos de validación\n4.1 Pruebas con usuarios en contextos inmersivos\n4.2 Técnicas de recopilación de feedback (entrevistas, observación, métricas)\n4.3 Análisis de resultados y toma de decisiones\n5. Herramientas y entornos\n5.1 Herramientas de prototipado digital (Figma, Adobe XD, InVision)\n5.2 Tools de prototipado físico (impresión 3D, electrónica básica)\n5.3 Entornos de pruebas y entornos inmersivos\n6. Ética, usabilidad y accesibilidad\n7. Entrega y documentación\n7.1 Reportes y presentaciones\n7.2 Portafolio de prototipos y decisiones de diseño\n8. Casos de estudio y prácticas\n8.1 Casos reales de prototipado rápido en contextos inmersivos\n8.2 Proyecto final de clase", "clave_de_la_asignatura": "ITMI-609", "criterios_de_evaluacion": "Participación y asistencia en sesiones prácticas: 15%\nDesarrollo de prototipo rápido con dos iteraciones y pruebas: 30%\nInforme de validación de hipótesis y resultados: 25%\nPresentación y defensa del prototipo: 15%\nBitácora y ejercicios independientes: 15%", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de diseñar y prototipar ideas en baja y alta fidelidad, planificar e implementar iteraciones rápidas, definir hipótesis de diseño y diseñar pruebas para validarlas en contextos inmersivos, recolectar y analizar evidencia de usuario y comunicar decisiones de diseño mediante informes y presentaciones. La asignatura contempla 48 horas presenciales y 72 horas de aprendizaje independiente, para un total de 120 horas.", "modalidades_tecnologicas_e_informaticas": "Se emplearán herramientas de prototipado digital (Figma, Adobe XD, InVision), prototipado físico (impresión 3D, corte láser, electrónica básica), entornos inmersivos (Unity, WebXR, herramientas de VR/AR), y plataformas de pruebas (Lookback, UserTesting). Se utilizarán plataformas de gestión de aprendizaje (LMS), videoconferencia, almacenamiento en la nube y control de versiones (Git).", "actividades_de_aprendizaje_independientes": "Lecturas y análisis de casos de prototipado y validación.\nElaboración de prototipos de baja fidelidad.\nPlanificación de dos iteraciones de prototipado y pruebas de usuario no supervisadas.\nDesarrollo de prototipos de alta fidelidad y pruebas de validación.\nRegistro en una bitácora semanal del proceso de diseño y decisiones.\nElaboración de un informe final y portafolio de prototipos.\nRevisión y estudio de casos de uso y literatura relacionada.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Metodologías de Prototipado Rápido y Validación", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Sesiones prácticas en laboratorio de prototipado con supervisión.\nTalleres de ideación, diseño rápido y crítica de prototipos.\nRevisiones de prototipos con feedback guiado por el docente.\nPruebas de usuario supervisadas con registro de resultados.\nDemostraciones de herramientas y técnicas y discusión de resultados.\nEjercicios de reflexión ética, usabilidad y accesibilidad.\nPreparación de informes y presentaciones con orientación del docente."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1088, "total_tokens": 9238, "output_tokens": 8150, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 7168}}, "responseId": "resp_07db46772a65f8cd00698e6ae8da3081939e5b99b508b8f149", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Técnicas para crear prototipos iterativos baja y alta fidelidad, pruebas rápidas y validación de hipótesis de diseño en contextos inmersivos."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-13 00:05:59.544199+00', '2026-02-13 20:22:22.994323+00', 48, 72, 'borrador'), - ('8dc1a71b-9586-4668-a84e-4e735ddcea64', '05863c8a-2a93-42f9-a4b7-65cef2edfe72', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'ITMI-602', 'Gestión de Proyectos y Planificación de Productos Inmersivos', 'OBLIGATORIA', 6, 5, '0a35f63e-a6d0-465a-94ce-ca2d7db1d239', NULL, '{"ciclo": "Cuarto ciclo", "contenido_tematico": "Nota: Carga horaria total: 64 horas académicas y 96 horas de aprendizaje independiente (total 160 horas). El tema central es la gestión de proyectos para productos inmersivos enfocándose en planificación, alcance, cronograma, costos y gestión de stakeholders, con casos y herramientas. 1. Fundamentos de Gestión de Proyectos: 1.1 Conceptos clave; 1.2 Marcos de referencia (PMBOK, PRINCE2); 1.3 Rol del gerente de proyectos en entornos de inmersión (VR/AR). 2. Planificación de Alcance: 2.1 Definición de alcance para experiencias inmersivas; 2.2 Estructura de desglose del trabajo (WBS); 2.3 Gestión de cambios; 2.4 Criterios de aceptación. 3. Planificación de Cronograma: 3.1 Técnicas de estimación; 3.2 Generación y lectura de cronogramas; 3.3 Uso de herramientas (Gantt, CPM, PERT); 3.4 Ritmo de desarrollo en sprints para prototipos inmersivos. 4. Planificación de Costos: 4.1 Estimación de costos y presupuestos; 4.2 Control de costos; 4.3 Análisis de valor y ROI; 4.4 Fuentes de financiamiento y gestión de riesgos. 5. Gestión de Stakeholders: 5.1 Identificación y clasificación; 5.2 Análisis de interés e influencia; 5.3 Plan de comunicaciones; 5.4 Participación de stakeholders en etapas de diseño y pruebas; 5.5 Gestión de expectativas y conflicto. 6. Casos prácticos y herramientas: 6.1 Estudio de casos de proyectos inmersivos; 6.2 Herramientas de soporte (plantillas, dashboards); 6.3 Talleres de simulación. 7. Gestión de Riesgos y Calidad: 7.1 Identificación y evaluación de riesgos; 7.2 Plan de respuesta; 7.3 Aseguramiento de calidad; 7.4 Pruebas y validación. 8. Integración con Diseño de Producto Inmersivo: 8.1 Fases de desarrollo de productos inmersivos; 8.2 Integración de tecnología; 8.3 Control de cambios y versiones; 9. Ética, Seguridad y Propiedad Intelectual: 9.1 Consideraciones éticas y de seguridad; 9.2 Propiedad intelectual y licencias; 9.3 Cumplimiento normativo y protección de datos.", "clave_de_la_asignatura": "ITMI-602", "criterios_de_evaluacion": "1. Plan de Proyecto y Plan de Producto Inmersivo (40%). 2. Caso práctico y defensa oral (25%). 3. Entregables y ejercicios prácticos (20%). 4. Participación y asistencia (15%).", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante podrá: a) planificar y gestionar el alcance, cronograma y costos de proyectos de experiencias inmersivas; b) gestionar stakeholders y comunicación; c) aplicar herramientas y metodologías de gestión de proyectos; d) analizar casos reales y proponer soluciones; e) diseñar y presentar un plan integral de proyecto y de producto inmersivo.", "modalidades_tecnologicas_e_informaticas": "Plataforma de aprendizaje (LMS). Clases sincrónicas y grabadas vía videoconferencia. Herramientas de gestión de proyectos (MS Project, Primavera, Asana, Jira). Herramientas de colaboración (Google Workspace, Notion). Software de simulación y modelado de experiencias inmersivas. Bibliotecas y repositorios de materiales (GitHub, Bitbucket). Requisitos de hardware y software para desarrollo de prototipos inmersivos.", "actividades_de_aprendizaje_independientes": "1) Lecturas de PMBOK/PRINCE2 y casos de experiencias inmersivas; 2) Análisis de casos de proyectos inmersivos; 3) Elaboración de plan de proyecto y plan de producto inmersivo; 4) Desarrollo de estimaciones de costos y cronogramas; 5) Preparación de entregables (alcance, cronograma, presupuesto, plan de stakeholders); 6) Revisión de la literatura sobre gestión de riesgos; 7) Ensayo reflexivo sobre ética, seguridad y propiedad intelectual.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Gestión de Proyectos y Planificación de Productos Inmersivos", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "1) Clases magistrales sobre fundamentos y marcos de gestión de proyectos. 2) Talleres prácticos para elaboración de alcance, WBS y cronogramas. 3) Laboratorios de uso de herramientas de gestión (MS Project, Asana, Jira) para crear un cronograma y presupuesto. 4) Revisión de avances de proyectos y feedback. 5) Discusión de casos y soluciones. 6) Presentaciones de entregables y defensa de decisiones. 7) Tutoría para desarrollo de plan de proyecto y defensa final."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1081, "total_tokens": 8134, "output_tokens": 7053, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 5888}}, "responseId": "resp_0a8e1aff8377a03400698e6ae96df481a187786c89196ed504", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Planificación, alcance, cronograma, costos y gestión de stakeholders en proyectos de experiencias inmersivas; casos y herramientas."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-13 00:05:59.544199+00', '2026-02-13 20:23:47.005878+00', 64, 96, 'borrador'), - ('c056750a-df0b-4aec-a0e6-4face0a0cd13', '05863c8a-2a93-42f9-a4b7-65cef2edfe72', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CIC101', 'Metodos numéricos y computación científica', 'OBLIGATORIA', 5, 7, '35e06a47-655d-4ce4-8b5f-52dc068c271c', NULL, '{"ciclo": "Ciclo 2", "contenido_tematico": "1. Fundamentos de métodos numéricos y computación científica; 1.1 Representación numérica de problemas y discretización; 1.2 Errores numéricos: truncación y round-off; 2. Resolución de sistemas lineales; 2.1 Métodos directos: eliminación de Gauss y factorización LU; 2.2 Métodos iterativos: Jacobi, Gauss-Seidel, SOR; 2.3 Condicionamiento y estabilidad; 3. Interpolación y ajuste de curvas; 3.1 Interpolación polinomial (Lagrange y Newton); 3.2 Interpolación con splines cúbicos; 3.3 Ajuste de curvas y mínimos cuadrados; 4. Métodos de aproximación e integración numérica; 4.1 Aproximación de funciones y diferencias; 4.2 Integración numérica: reglas del trapecio y Simpson; 4.3 Estimación de errores y convergencia; 5. Análisis de errores y aplicaciones en ingeniería; 5.1 Análisis de errores en discretización y propagación de error; 5.2 Casos de ingeniería: simulación numérica y estudio de sensibilidad; 5.3 Implementación y herramientas de computación científica (Python/ MATLAB).", "clave_de_la_asignatura": "CIC101", "criterios_de_evaluacion": "1) Exámenes parciales y final: 40%; 2) Laboratorios y prácticas de programación: 30%; 3) Tareas y ejercicios de curso: 20%; 4) Proyecto o informe de aplicación en ingeniería: 10%", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de: describir y explicar los fundamentos de métodos numéricos; implementar algoritmos para resolución de sistemas lineales e interpolación; analizar errores, estabilidad y convergencia; aplicar herramientas computacionales (Python/NumPy/SciPy o MATLAB) para resolver problemas de ingeniería; evaluar resultados y presentar informes técnicos.", "modalidades_tecnologicas_e_informaticas": "Entornos de programación: Python con NumPy/SciPy y MATLAB/Octave; entornos de desarrollo como Jupyter notebooks, IDEs; recursos de cómputo (laboratorio de cómputo y/o plataformas en la nube); herramientas de control de versiones; plataformas de entrega de tareas y evaluación; bibliotecas numéricas para álgebra lineal, integración y interpolación.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas y revisión de literatura; ejercicios de programación y simulación independientes; resolución de problemas de ingeniería; prácticas de simulación numérica; preparación de informes y revisión de documentación técnica;", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Métodos numéricos y computación científica", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales y prácticas guiadas; resolución de ejercicios en grupo; desarrollo de laboratorio de cómputo con supervisión; demostraciones de algoritmos y revisión de código; feedback y discusión de resultados de casos de ingeniería."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1077, "total_tokens": 7691, "output_tokens": 6614, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 5888}}, "responseId": "resp_0ff920af511a3e9b00698e6ae8e494819c9ec28e189161d369", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Algoritmos para aproximación numérica, resolución de sistemas lineales, interpolación y análisis de errores en problemas de ingeniería."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-13 00:05:59.544199+00', '2026-02-13 20:23:56.948184+00', 4, 6, 'borrador'), - ('09e6ded7-d624-4fb2-894a-c6efdb4ae7e4', '05863c8a-2a93-42f9-a4b7-65cef2edfe72', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'EST101', 'Probabilidad y estadística para ingeniería', 'TRONCAL', 5, 3, '35e06a47-655d-4ce4-8b5f-52dc068c271c', NULL, '{"ciclo": "Ciclo I - TRONCAL", "contenido_tematico": "1. Fundamentos de probabilidad\n1.1 Espacios muestrales y eventos\n1.2 Reglas de probabilidad: suma, producto y complementos\n1.3 Independencia, dependencia y variables aleatorias discretas\n2. Distribuciones de probabilidad\n2.1 Distribuciones discretas: Binomial y Poisson\n2.2 Distribuciones continuas: Normal, t de Student y Chi-cuadrada\n2.3 Propiedades de las distribuciones, parámetros y estimación de características\n3. Estimación y estimación de parámetros\n3.1 Estimación puntual y sesgo\n3.2 Estimación por intervalos y confianza\n3.3 Tamaño de muestra y métodos de muestreo\n4. Pruebas de hipótesis\n4.1 Planteamiento de hipótesis y errores tipo I y tipo II\n4.2 Pruebas paramétricas: Z y t\n4.3 Pruebas no paramétricas\n4.4 Poder de la prueba y interpretación de resultados\n5. Métodos y aplicaciones en ingeniería\n5.1 Diseño de experimentos y procesos de ingeniería\n5.2 Análisis de datos experimentales\n5.3 Casos de estudio y aplicación con software estadístico\n6. Laboratorio y proyectos cortos\n6.1 Laboratorio con R/Python\n6.2 Proyecto corto de análisis de datos", "clave_de_la_asignatura": "EST101", "criterios_de_evaluacion": "Exámenes parciales y/o finales que cubren los conceptos clave de probabilidad y estadística: 40%\nTareas y ejercicios de casa, trabajadas de forma periódica: 25%\nProyecto de análisis de datos o informe final: 20%\nParticipación en clase y prácticas de laboratorio: 10%\nEntregas prácticas y revisión de soluciones: 5%", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura, el estudiante podrá aplicar modelos probabilísticos, seleccionar distribuciones adecuadas, estimar parámetros, realizar pruebas de hipótesis, interpretar resultados en contextos de ingeniería, diseñar experimentos simples y comunicar conclusiones técnicas de análisis de datos.", "modalidades_tecnologicas_e_informaticas": "Se emplearán recursos tecnológicos para el desarrollo del proceso de enseñanza-aprendizaje: plataforma de gestión de aprendizaje (LMS) para distribución de materiales, foros y entregas; software estadístico (R, Python con pandas/scipy, Excel avanzado y herramientas como JASP o Jamovi); entornos de programación y notebook (RStudio, Jupyter); y laboratorios con acceso a datos. En las modalidades no escolarizada y mixta, este elemento es obligatorio.", "actividades_de_aprendizaje_independientes": "Resolución de problemas y ejercicios propuestos; lectura de textos de probabilidad y estadística; análisis de conjuntos de datos reales; simulaciones y prácticas con software estadístico; elaboración de un informe técnico; revisión y autoevaluación de soluciones.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Probabilidad y estadística para ingeniería", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales breves y contextualizadas; resolución guiada de ejercicios en grupo; sesiones de laboratorio supervisadas con uso de software estadístico; análisis de casos de ingeniería y discusión en clase; revisión de resultados y retroalimentación; asesoría para el proyecto de datos."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1072, "total_tokens": 7198, "output_tokens": 6126, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 5312}}, "responseId": "resp_0f94679cac35274200698e6ae99d808195a1ef29394f5433b0", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Modelos probabilísticos, distribuciones, estimación y pruebas de hipótesis con aplicaciones en experimentos y análisis de datos."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-13 00:05:59.544199+00', '2026-02-13 20:24:07.68173+00', 4, 5, 'borrador'), - ('52260576-55df-4fc6-9603-e8654d84bed7', '05863c8a-2a93-42f9-a4b7-65cef2edfe72', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'ITMI-610', 'Economía de Productos Digitales y Emprendimiento para Inmersión', 'OPTATIVA', 4, 4, '35e06a47-655d-4ce4-8b5f-52dc068c271c', NULL, '{"ciclo": "Optativa", "contenido_tematico": "1. Fundamentos de economía de productos digitales\\n1.1 Definición y alcance de los productos digitales inmersivos\\n1.2 Tecnología de inmersión (VR/AR/MR) y experiencia de usuario\\n1.3 Dinámica del mercado y modelos de negocio en la economía de la inmersión\\n2. Modelos de negocio y monetización para productos de inmersión\\n2.1 Modelos de ingresos: venta, suscripción, freemium, microtransacciones\\n2.2 Ecosistemas de productos y servicios complementarios\\n2.3 Estrategias de monetización escalables y sostenibles\\n3. Propuesta de valor, diseño y desarrollo de productos\\n3.1 Segmentación de clientes y necesidades de usuarios inmersivos\\n3.2 Propuesta de valor para productos inmersivos\\n3.3 Diseño y MVP de una experiencia o producto en VR/AR\\n4. Propiedad intelectual, regulación y ética\\n4.1 Derechos de autor, patentes y secretos comerciales\\n4.2 Licenciamiento de contenidos y uso de IP de terceros\\n4.3 Privacidad, ética y cumplimiento en datos de inmersión\\n5. Estrategias de mercado, lanzamiento y crecimiento\\n5.1 Análisis de mercado, competencia y tendencias\\n5.2 Canales de comercialización, alianzas y distribución\\n5.3 Go-to-market, pricing y estrategias de lanzamiento\\n6. Evaluación, métricas y gobernanza\\n6.1 Métricas de rendimiento y engagement\\n6.2 Cumplimiento legal y consideraciones éticas\\n7. Casos de estudio y prácticas aplicadas\\n7.1 Casos de éxito en productos de inmersión\\n7.2 Talleres de simulación de negocio y presentaciones\\n8. Talleres, prototipos y planes de negocio\\n8.1 Elaboración de plan de negocio para producto inmersivo\\n8.2 Presentación ante panel de evaluación", "clave_de_la_asignatura": "ITMI-610", "criterios_de_evaluacion": "40% Proyecto de negocio y plan de monetización para un producto inmersivo (trabajo en equipo); 25% Análisis de caso de mercado y defensa en clase; 15% Documentos de propiedad intelectual, licenciamiento y ética; 20% Participación, tareas prácticas y presentaciones de talleres", "fines_de_aprendizaje_o_formacion": "Al completar esta asignatura, el estudiante será capaz de: 1) comprender y aplicar modelos de negocio y monetización para productos digitales inmersivos; 2) analizar requerimientos de propiedad intelectual, licencias y regulaciones aplicables; 3) diseñar una propuesta de valor y un plan de negocio para un prototipo inmersivo; 4) desarrollar habilidades de análisis de mercado, toma de decisiones éticas y sostenibilidad del negocio; 5) realizar trabajo colaborativo en equipos multidisciplinarios y presentar resultados ante un panel.", "modalidades_tecnologicas_e_informaticas": "Se emplearán recursos como plataformas de aprendizaje en línea (LMS), herramientas de realidad virtual y aumentada (VR/AR/MR) para experiencias inmersivas, motores de desarrollo (Unity, Unreal Engine) para prototipos, herramientas de diseño y prototipado (Figma, Miro), hojas de cálculo (Excel/Sheets), herramientas de análisis de datos (Google Analytics, Tableau), herramientas de gestión de proyectos (Trello, Jira) y plataformas de videoconferencia y foros; acceso a bibliotecas de contenidos y casos de estudio sobre IP y marcos de regulación.", "actividades_de_aprendizaje_independientes": "72 horas de aprendizaje independiente: lectura y análisis de fundamentos económicos de productos digitales, revisión de casos de estudio, investigación de mercado para inmersiones, desarrollo de un plan de negocio y monetización, revisión de propiedad intelectual y licencias, elaboración de un MVP conceptual y prototipos en VR/AR, y preparación de la documentación de ética y cumplimiento, así como la presentación final.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Economía de Productos Digitales y Emprendimiento para Inmersión", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "48 horas de aprendizaje bajo conducción académica: clases magistrales y prácticas, talleres guiados, laboratorios de prototipos en VR/AR, análisis de casos en grupo, sesiones de retroalimentación y asesoría de un académico, y presentaciones de avances con evaluación continua."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1083, "total_tokens": 8086, "output_tokens": 7003, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 5952}}, "responseId": "resp_0c0112a430ccf9a500698e6ae939bc81979d4f4e6eb0f5df9c", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Modelos de negocio, monetización, propiedad intelectual y estrategias de mercado para productos y servicios basados en tecnologías de inmersión."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-13 00:05:59.544199+00', '2026-02-13 20:27:35.834937+00', 48, 72, 'borrador'), - ('8bb35dd7-d03e-4781-8108-c2f5df7b94ad', '05863c8a-2a93-42f9-a4b7-65cef2edfe72', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'ITMI-613', 'Localización y mapeo espacial para entornos inmersivos', 'OBLIGATORIA', 5, 9, '35e06a47-655d-4ce4-8b5f-52dc068c271c', NULL, '{"ciclo": "Sexto ciclo", "contenido_tematico": "1. Fundamentos de localización y mapeo espacial\n 1.1 Conceptos de SLAM, tracking y registro espacial\n 1.2 Representaciones de mapa y marco de referencia\n2. Sensores y plataformas para mapeo espacial\n 2.1 Cámaras RGB-D, LiDAR, sensores de movimiento (IMU)\n 2.2 Adquisición de datos en AR y MR\n3. Técnicas de SLAM y registro en entornos reales e inmersivos\n 3.1 Visual SLAM (V-SLAM) y variantes en entornos mixtos\n 3.2 SLAM multiesensor y fusión de datos\n 3.3 Registro espacial y alineación de escenas\n4. Integración de objetos virtuales en entornos reales\n 4.1 Registro y persistencia de objetos\n 4.2 Renderizado y sincronización temporal\n5. Herramientas, plataformas y flujos de trabajo\n 5.1 Unity/Unreal con ARKit/ARCore\n 5.2 Librerías y herramientas: ARFoundation, Vuforia, OpenCV, PCL\n 5.3 Prácticas de desarrollo y pruebas de rendimiento\n6. Consideraciones de seguridad, ética y usabilidad\n7. Proyecto integrador\nCarga horaria: 3 horas presenciales y 7 horas independientes para completar el curso.", "clave_de_la_asignatura": "ITMI-613", "criterios_de_evaluacion": "Proyecto de localización, mapeo y registro espacial de un entorno real con objetos virtuales: 40%\nExamen teórico sobre SLAM, tracking y registro espacial: 25%\nLaboratorios y prácticas supervisadas que demuestren comprensión de conceptos y aplicación de herramientas: 20%\nParticipación, entrega de tareas y presentaciones en clase: 15%", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de comprender fundamentos de localización y mapeo espacial (SLAM, tracking y registro); diseñar e implementar pipelines de mapeo y registro espacial para entornos inmersivos en AR/MR; integrar objetos virtuales con precisión en escenas reales; evaluar rendimiento y precisión de los sistemas; aplicar buenas prácticas de seguridad, usabilidad y ética; comunicar resultados de forma clara.", "modalidades_tecnologicas_e_informaticas": "Hardware: dispositivos de realidad aumentada y móviles, gafas AR, sensores de cámara estructurada; software: Unity3D, Unreal Engine, ARKit, ARCore, ARFoundation, Vuforia, OpenCV, PCL, ROS; hardware de laboratorio: cámaras RGB-D, LiDAR, IMU, GPU; conectividad y pruebas en tiempo real.", "actividades_de_aprendizaje_independientes": "Lecturas de artículos y papers sobre SLAM, localización y registro espacial en AR; ejercicios de implementación de módulos de SLAM en marcos de desarrollo; prácticas con datasets de entornos reales; desarrollo de un prototipo de mapeo y registro de un entorno real; informe de observaciones y análisis de rendimiento.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Localización y mapeo espacial para entornos inmersivos", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases teóricas magistrales con ejemplos prácticos; laboratorios guiados por el docente; sesiones de revisión de código y de resultados; tutorías para el proyecto integrador; demostraciones y retroalimentación en clase; asesoría personalizada para el proyecto integrador."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1081, "total_tokens": 7212, "output_tokens": 6131, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 5312}}, "responseId": "resp_0d7bb914efc389c100698e6f3553788197bab7619688897fb4", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "SLAM, tracking y registro espacial para sincronizar objetos virtuales con entornos reales en AR y experiencias mixtas."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-13 00:24:19.334774+00', '2026-02-13 20:23:53.256119+00', 3, 7, 'borrador'), - ('fb79b69b-90cd-475b-a861-9a9e9412365c', '05863c8a-2a93-42f9-a4b7-65cef2edfe72', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'ITMI-508', 'Interacción háptica y retroalimentación multimodal', 'OPTATIVA', 6, NULL, NULL, NULL, '{"ciclo": "Optativa", "contenido_tematico": "1. Fundamentos de interacción háptica\\n 1.1 Conceptos clave de haptics y percepción somatosensorial\\n 1.2 Tipos de retroalimentación háptica (táctil, kinésica) y sus aplicaciones\\n 1.3 Seguridad ergonómica y consideraciones de confort del usuario\\n2. Sensores y actuadores para interfaces hápticas\\n 2.1 Actuadores hápticos: vibratorios, mecánicos, piezoeléctricos\\n 2.2 Sensores de fuerza, torque, posición y acelerometría\\n 2.3 Interfaces electrónicas y electrónica de control\\n3. Arquitecturas y plataformas de desarrollo\\n 3.1 Microcontroladores y plataformas (Arduino, Raspberry Pi, ESP32)\\n 3.2 Comunicaciones (I2C, SPI, USB) y latencia\\n 3.3 Integración con motores y sensores para prototipos\\n4. Diseño de experiencias inmersivas con retroalimentación multimodal\\n 4.1 Modelado de objetos y simulación de fuerzas en entornos 3D\\n 4.2 Coordinación de retroalimentación visual, auditiva y háptica\\n 4.3 Prototipado rápido y pipelines de prueba\\n5. Pruebas de usabilidad y evaluación\\n 5.1 Métodos de prueba centrados en háptica\\n 5.2 Métricas de usabilidad, carga cognitiva y satisfacción\\n 5.3 Reportes de resultados y recomendaciones\\n6. Consideraciones éticas y normativas\\n 6.1 Seguridad, privacidad y ética de la retroalimentación sensorial\\n 6.2 Normativas y estándares aplicables", "clave_de_la_asignatura": "ITMI-508", "criterios_de_evaluacion": "1) Proyecto de diseño y prototipo de una interfaz háptica con pruebas de usabilidad: 40%\\n2) Informe técnico de arquitectura, selección de sensores/actuadores y viabilidad: 25%\\n3) Pruebas de usabilidad y análisis de métricas: 15%\\n4) Presentación final del prototipo y demostración: 10%\\n5) Participación y entregas de laboratorios y tareas: 10%", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de: diseñar, prototipar y evaluar interfaces hápticas y de retroalimentación multimodal para experiencias inmersivas; seleccionar sensores y actuadores apropiados y definir estrategias de interacción; realizar pruebas de usabilidad, medir métricas de experiencia y seguridad; analizar consideraciones ergonómicas, éticas y normativas; trabajar de forma colaborativa en equipos multidisciplinarios. La asignatura cuenta con 48 horas de contacto y 96 horas de aprendizaje independiente.", "modalidades_tecnologicas_e_informaticas": "Hardware y prototipado: Arduino, Raspberry Pi, microcontroladores compatibles. Actuadores hápticos: motores DC y paso a paso, actuadores lineales, actuadores piezoeléctricos. Sensores: acelerómetros, giroscopios, sensores de fuerza/torque, sensores de posición y sensores hápticos. Interfaces de comunicación: I2C, SPI, USB, CAN. Plataformas de software: Unity 3D para prototipos interactivos; MATLAB/Simulink para control; ROS para integración hardware; CAD para diseño; impresión 3D y CNC para prototipado. Entorno de pruebas: herramientas de simulación y laboratorios de pruebas de latencia, seguridad y ergonomía.", "actividades_de_aprendizaje_independientes": "Lecturas semanales sobre fundamentos de interacción háptica y revisiones de literatura; prácticas de laboratorio autónomas con hardware de prototipado; diseño y desarrollo de un prototipo individual de interfaz háptica; simulaciones en Unity o MATLAB para validar modelos de interacción; análisis de casos de pruebas de usabilidad y ética; elaboración de un informe de revisión bibliográfica.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Interacción háptica y retroalimentación multimodal", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases teóricas y demostraciones en laboratorio guiadas por el docente; prácticas de laboratorio orientadas al desarrollo de sensores y actuadores; sesiones de diseño y evaluación de prototipos con retroalimentación del académico; discusión de casos de estudio y buenas prácticas; asesorías y revisión de avances de proyectos durante las horas de clase; presentaciones intermedias y feedback del docente."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1087, "total_tokens": 10997, "output_tokens": 9910, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 8832}}, "responseId": "resp_0959cf1271ce06ca00698f998e281881a3ba2ea0addadb72ed", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Fundamentos y diseño de interfaces hápticas y estrategias de retroalimentación multimodal para experiencias inmersivas; incluye sensores, actuadores y pruebas de usabilidad."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-13 21:37:15.135602+00', '2026-02-13 21:38:17.866793+00', 48, 96, 'borrador'), - ('e6e70657-94cc-4cd4-b37d-8d237487fb6c', 'dc286072-c649-43aa-8a2f-aa3ef6166647', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'QFB303', 'Quimiometría y Diseño de Experimentos', 'TRONCAL', 6, 6, '67cdbce0-04fe-4c19-aba9-c5999076c97c', NULL, '{"ciclo": "Ciclo II", "contenido_tematico": "1. Fundamentos de Quimiometría y Diseño de Experimentos\n1.1 Introducción a la quimiometría y su relación con la optimización de formulaciones\n1.2 Diseño experimental: principios y objetivos\n2. Diseño experimental y ANOVA\n2.1 Planificación de experimentos (DOE)\n2.2 Análisis de varianza (ANOVA) de un factor y de múltiples factores\n2.3 Diseño factorial completo y fraccionado\n3. Regresión multivariante, PCA y PLS\n3.1 Regresión lineal múltiple y preprocesamiento de datos\n3.2 Análisis de componentes principales (PCA)\n3.3 PLS: Partial Least Squares para modelado multivariante\n4. Aplicaciones en formulaciones y análisis sensorial\n4.1 Optimización de formulaciones químicas y formulaciones farmacéuticas\n4.2 Diseño experimental aplicado al análisis sensorial\n4.3 Integración quimiométrica para predicción de atributos sensoriales\n5. Implementación práctica y herramientas\n5.1 Software (R, Python, Matlab) para DOE, ANOVA, PCA y PLS\n5.2 Preparación de datos, validación de modelos y reproducibilidad\n6. Ética, reproducibilidad y reporte de resultados\n6.1 Buenas prácticas de laboratorio y gestión de datos\n6.2 Informe técnico y presentaciones", "clave_de_la_asignatura": "QFB303", "criterios_de_evaluacion": "1) Proyecto de diseño experimental y modelado (40%). 2) Examen teórico-práctico (25%). 3) Informe de caso de optimización de formulaciones y análisis sensorial (20%). 4) Participación y tareas cortas (15%).", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de: - Diseñar experimentos para optimizar formulaciones, incluyendo DOE y diseños factoriales; - Aplicar ANOVA para evaluar efectos y relaciones entre variables; - Aplicar regresión multivariante y técnicas de reducción de dimensionalidad (PCA, PLS) para modelar y predecir atributos de formulaciones y resultados sensoriales; - Interpretar y comunicar resultados de quimiometría en informes y presentaciones; - Evaluar la robustez y reproducibilidad de modelos y conclusiones.", "modalidades_tecnologicas_e_informaticas": "Recursos y herramientas: aulas con ordenadores con acceso a R (paquetes chemometrics, pls, ropls), Python (scikit-learn, pandas), MATLAB o equivalente; software de estadística; plataformas de gestión del aprendizaje (LMS) para materiales y evaluaciones; laboratorio para DOE e instrumentos de análisis sensorial; acceso a datos y repositorios de datasets.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas y análisis de literatura; ejercicios prácticos de DOE y preprocesamiento de datos en casa; análisis de datasets simulados y reales; desarrollo de un mini-proyecto de optimización de formulaciones y un informe de análisis sensorial independiente.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Quimiometría y Diseño de Experimentos", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases teóricas y prácticas con guía de un académico; sesiones de laboratorio de diseño de experimentos; talleres de análisis de datos (ANOVA, PCA, PLS); discusión de casos y revisión de resultados; asesoría y presentaciones de avances; evaluación formativa y retroalimentación."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1079, "total_tokens": 6697, "output_tokens": 5618, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 4800}}, "responseId": "resp_042078ebe2193de9006993a011e6bc81a39c08086ce9a2f8fb", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Diseño experimental, ANOVA, regresión multivariante, PCA y PLS aplicados a optimización de formulaciones y análisis sensorial."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-16 22:54:08.826761+00', '2026-02-16 22:56:17.740163+00', 3, 8, 'borrador'), - ('1e83f4c0-c4ad-4e43-9971-ac373493154c', 'dc286072-c649-43aa-8a2f-aa3ef6166647', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'QFB304', 'Evaluación Sensorial y Psicofísica del Olfato', 'TRONCAL', 6, 6, '7946d5f9-3a99-4c46-b404-69b119650d34', NULL, '{"ciclo": "Segundo ciclo", "contenido_tematico": "1. Fundamentos de la evaluación sensorial y psicofísica del olfato\\n1.1 Principios de la percepción olfativa\\n1.2 Variables que afectan la apreciación olfativa\\n2. Métodos sensoriales, pruebas descriptivas y hedónicas\\n2.1 Métodos descriptivos: perfil sensorial, escalas de intensidad y escalas hedónicas\\n2.2 Pruebas hedónicas y aceptación de aromas\\n3. Selección y entrenamiento de paneles\\n3.1 Criterios de selección de panelistas\\n3.2 Protocolo de entrenamiento y calibración de descriptores\\n3.3 Control de consistencia y sesgos\\n4. Análisis y tratamiento de datos sensoriales\\n4.1 Diseño experimental y recolección de datos\\n4.2 Análisis estadístico básico (ANOVA, pruebas post hoc)\\n4.3 Modelos y técnicas para datos sensoriales (PCA, modelos lineales mixtos)\\n5. Aplicaciones, informes y ética\\n5.1 Elaboración de informes sensoriales\\n5.2 Consideraciones éticas, seguridad y bienestar de los panelistas", "clave_de_la_asignatura": "QFB304", "criterios_de_evaluacion": "Participación y asistencia en sesiones prácticas: 15%\\nCalibración y desempeño del panel: 25%\\nPruebas descriptivas: 25%\\nPruebas hedónicas: 15%\\nInforme de análisis de datos sensoriales: 20%", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el alumno será capaz de diseñar, ejecutar y analizar pruebas sensoriales olfativas utilizando métodos descriptivos y hedónicos; seleccionar y entrenar paneles de evaluación; aplicar análisis estadístico adecuado para interpretar resultados; elaborar informes técnicos con interpretación de hallazgos y consideraciones éticas y de seguridad en la evaluación sensorial.", "modalidades_tecnologicas_e_informaticas": "Laboratorio sensorial y plataformas digitales: software estadístico (R, Jamovi, Python) para análisis de datos sensoriales; gestión de paneles (base de datos de panelistas, calibración de descriptores); plataforma de gestión académica (LMS); herramientas de videoconferencia y comunicación; repositorio de recursos y datasets para prácticas", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas sobre fundamentos y métodos sensoriales olfativos\\nEjercicios de diseño de pruebas descriptivas y hedónicas\\nPrácticas de análisis de datos sensoriales con software estadístico\\nEjercicio de selección y calibración de paneles simulados\\nElaboración de un informe técnico preliminar de datos sensoriales", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Evaluación Sensorial y Psicofísica del Olfato", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Sesiones teóricas para introducir fundamentos y marco metodológico\\nPrácticas supervisadas de calibración y entrenamiento de paneles\\nRealización de pruebas descriptivas y hedónicas con panel de estudio\\nAnálisis guiado de datos sensoriales y discusión de resultados en clase\\nElaboración de informes técnicos en conjunto con retroalimentación del docente"}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1082, "total_tokens": 6798, "output_tokens": 5716, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 4928}}, "responseId": "resp_09287bea31abc243006993a0118d2881a3aadda6200e7fdf32", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Métodos sensoriales, selección y entrenamiento de paneles, pruebas descriptivas y hedónicas y análisis estadístico de datos sensoriales."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-16 22:54:08.826761+00', '2026-02-16 22:55:48.977922+00', 3, 8, 'borrador'), - ('86ff2de1-ed7a-473c-8f61-0c022ca01d69', 'dc286072-c649-43aa-8a2f-aa3ef6166647', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'QFB309', 'Química Verde y Sostenibilidad en Formulación', 'OPTATIVA', 5, 5, '67cdbce0-04fe-4c19-aba9-c5999076c97c', NULL, '{"ciclo": "Optativa", "contenido_tematico": "1. Introducción a la Química Verde y sostenibilidad en formulación. 1.1 Principios de Química Verde (prevención, minimización, reducción de sustancias peligrosas). 1.2 Criterios para la selección de solventes sostenibles (seguridad, medio ambiente, rendimiento). 2. Estrategias de diseño de procesos sostenibles. 2.1 Evaluación de riesgos y seguridad. 2.2 Optimización de recursos y reducción de residuos. 3. Selección de solventes sostenibles y alternativas. 3.1 Análisis comparativo de solventes tradicionales y sostenibles; criterios de evaluación. 3.2 Solventes de bajo impacto y criterios de sustitución. 4. Evaluación de huella ambiental y LCA en formulación. 4.1 Principios y fases de LCA. 4.2 Herramientas y recursos de LCA (p. ej., OpenLCA). 4.3 Indicadores de sostenibilidad aplicados a formulaciones. 5. Formulaciones ecoeficientes: diseño, pruebas y validación. 5.1 Métodos para reducir emisiones y consumo de energía en formulaciones. 5.2 Casos prácticos de formulaciones ecoeficientes. 6. Aplicaciones prácticas, normativas y consideraciones éticas. 6.1 Normativas y estándares relevantes. 6.2 Seguridad, salud y impactos sociales.", "clave_de_la_asignatura": "QFB309", "criterios_de_evaluacion": "1) Participación y asistencia en sesiones (10%). 2) Tarea de análisis de solventes sostenibles (25%). 3) Informe de evaluación de huella ambiental (25%). 4) Proyecto de formulación ecoeficiente (25%). 5) Examen conceptual (15%).", "fines_de_aprendizaje_o_formacion": "Datos de la asignatura: Créditos 5; Horas académicas de contacto 2; Horas de trabajo independiente 6. Al finalizar, el estudiante será capaz de: a) identificar principios y estrategias de Química Verde aplicados a formulación; b) seleccionar solventes sostenibles según criterios de seguridad, salud y medio ambiente; c) aplicar herramientas básicas de evaluación de huella ambiental (LCA) a formulaciones; d) diseñar formulaciones ecoeficientes que reduzcan impacto ambiental sin comprometer rendimiento; e) analizar trade-offs entre seguridad, rendimiento y sustentabilidad, y comunicar resultados de forma clara.", "modalidades_tecnologicas_e_informaticas": "Se emplearán plataformas de gestión del aprendizaje (LMS), simuladores y laboratorios virtuales de Química Verde, herramientas de evaluación LCA de código abierto (p. ej., OpenLCA), software de diseño y simulación, repositorio de datos y videoconferencias para clases en línea o híbridas.", "actividades_de_aprendizaje_independientes": "Lecturas de artículos y normas sobre Química Verde; ejercicios de selección de solventes sostenibles; simulaciones de procesos de formulación; desarrollo de un mini informe de huella ambiental; estudio de casos de formulaciones sostenibles; revisión de literatura y preparación de entrega escrita; realización de cálculos de indicadores de sostenibilidad.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Química Verde y Sostenibilidad en Formulación", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Sesiones teóricas y prácticas con el docente; talleres de diseño de formulaciones ecoeficientes; discusión de casos; orientación para el desarrollo del proyecto; revisión de entregas y presentaciones orales; demostraciones y prácticas de laboratorio cuando corresponda."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1078, "total_tokens": 7306, "output_tokens": 6228, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 5376}}, "responseId": "resp_0301e56cb5af9c95006993a0120e7c8193858261ff4aeef1eb", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Estrategias de química verde, selección de solventes sostenibles, evaluación de huella ambiental y formulaciones ecoeficientes."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-16 22:54:08.826761+00', '2026-02-16 22:56:48.618401+00', 2, 6, 'borrador'), - ('ec9fc465-92ef-4fd9-9d56-004169c9d2c9', 'dc286072-c649-43aa-8a2f-aa3ef6166647', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'QFB305', 'Tecnología de Cosméticos y Vehículos Fragranciados', 'OBLIGATORIA', 7, 2, '67cdbce0-04fe-4c19-aba9-c5999076c97c', NULL, '{"ciclo": "Ciclo 3", "contenido_tematico": "1. Fundamentos de emulsiones y sistemas vehiculares. 1.1 Tipos de emulsiones (O/W, W/O) y criterios de selección. 1.2 Fases internas y externas, tensioactivos y coemulgantes. 2. Excipientes y fragancias en cosméticos. 2.1 Funciones de excipientes (emolientes, humectantes, estabilizantes). 2.2 Compatibilidad entre fragancias y emulsiones. 3. Estabilidad y compatibilidad envase-producto. 3.1 Pruebas de estabilidad físico-química y métodos de evaluación. 3.2 Migración de fragancias y compatibilidad de envases (vidrio, PET, plásticos). 4. Diseño y control de formulaciones fragranciadas. 4.1 Métodos de formulación y escalado. 4.2 Control de calidad y fichas técnicas. 5. Regulación, seguridad y sostenibilidad. 5.1 Buenas prácticas de laboratorio y normativas. Distribución horaria: Horas académicas: 4; Horas independientes: 9.", "clave_de_la_asignatura": "QFB305", "criterios_de_evaluacion": "1) Proyecto de formulación de una emulsión cosmética fragranciada (40%). 2) Informe de pruebas de estabilidad y compatibilidad envase-producto (25%). 3) Examen teórico sobre fundamentos de emulsiones y fragancias (10%). 4) Diseño y evaluación de un caso de envase compatible (15%). 5) Participación y entrega de tareas y prácticas (10%).", "fines_de_aprendizaje_o_formacion": "Al concluir, el estudiante será capaz de: diseñar formulaciones básicas de emulsiones para cosméticos fragranciados; seleccionar excipientes y fragancias respetando seguridad y normativa; evaluar estabilidad físico-química y compatibilidad envase-producto; analizar migración y compatibilidad entre envase y producto; interpretar fichas técnicas y requerimientos regulatorios; comunicar resultados de formulación de manera clara y documentada.", "modalidades_tecnologicas_e_informaticas": "Laboratorio de formulación y pruebas; uso de software de formulación y registro de pruebas; bases de datos técnicas de excipientes y fragancias; plataformas LMS para seguimiento de actividades, videoconferencia y repositorio digital de fichas técnicas; recursos en línea de normas y buenas prácticas.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas de normativa y fichas técnicas; búsqueda de información sobre fragancias y compatibilidad con envases; desarrollo de la emulsión conceptual y revisión de datos; ejercicios de diseño y selección de envases; redacción del informe final y estudio de casos; preparación para el examen teórico.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Tecnología de Cosméticos y Vehículos Fragranciados", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases teóricas y prácticas guiadas por el docente; demostraciones de formulación de emulsiones; sesiones de laboratorio supervisadas para pruebas de estabilidad; revisión de fichas técnicas y discusión de resultados; análisis de casos de compatibilidad envase-producto; tutorías y asesoría para el proyecto final."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1081, "total_tokens": 6221, "output_tokens": 5140, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 4416}}, "responseId": "resp_0c79b29bdb930c9a006993a011c4948195a1cc5e70aa923f87", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Formulación de emulsiones y sistemas, excipientes, estabilidad y compatibilidad envase-producto en cosméticos fragranciados."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-16 22:54:08.826761+00', '2026-02-16 22:56:56.019027+00', 4, 9, 'borrador'), - ('e52b14a2-53d9-460b-a089-89c3aba5eb64', '3ebc1d1c-e950-4a6e-948f-bb89efa40e77', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'MKT-EST102', 'Estadística Aplicada al Mercado', 'TRONCAL', 6, NULL, NULL, NULL, '{"ciclo": "Ciclo II", "contenido_tematico": "Propósito, organización y carga horaria: 6 créditos; 4 horas académicas presenciales y 8 horas de trabajo independiente. 1. Fundamentos de probabilidades 1.1 Conceptos básicos: experimento, evento, espacio muestral 1.2 Reglas de probabilidad: suma, producto, complemento 1.3 Distribuciones de probabilidad relevantes en mercados: binomial, normal 1.4 Probabilidad condicionada e independencia 2. Estadística descriptiva 2.1 Medidas de tendencia central: media, mediana, moda 2.2 Medidas de dispersión: varianza, desviación típica, rango intercuartílico 2.3 Representación de datos de consumidores: tablas, gráficos (barras, histogramas, boxplots) 2.4 Resumen numérico de conjuntos de datos de consumidores 3. Pruebas de hipótesis 3.1 Planteamiento de hipótesis nula y alternativa 3.2 Pruebas para medias y proporciones: t de Student, z, pruebas de proporciones 3.3 Pruebas no paramétricas cuando no se cumplen supuestos 3.4 Errores tipo I y tipo II, nivel de significancia 3.5 Potencia de la prueba y tamaño de muestra 4. Aplicaciones con datos de consumidores 4.1 Casos prácticos de marketing: análisis de hábitos de compra y preferencias 4.2 Diseño de experimentos simples con datos de consumidores 4.3 Interpretación de resultados y toma de decisiones 5. Síntesis y evaluación final 5.1 Clasificación y selección de métodos para problemas de mercado 5.2 Discusión de limitaciones de datos y ética", "clave_de_la_asignatura": "MKT-EST102", "criterios_de_evaluacion": "1. Ejercicios y prácticas en clase: 15%\\n2. Tareas y ejercicios de casa: 20%\\n3. Examen parcial 1: 15%\\n4. Examen parcial 2: 20%\\n5. Proyecto o caso práctico con datos de consumidores: 20%\\n6. Participación y asistencia: 10%", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de: 1) aplicar probabilidades y estadística descriptiva para analizar datos de consumidores; 2) realizar y/o interpretar pruebas de hipótesis en contextos de mercado; 3) seleccionar métodos de muestreo y estimación adecuados; 4) traducir resultados estadísticos en recomendaciones de marketing y toma de decisiones; 5) comunicar conclusiones con rigor técnico y claridad para audiencias no técnicas.", "modalidades_tecnologicas_e_informaticas": "Recursos tecnológicos y de información: aula o entorno de aprendizaje con proyector; plataforma de gestión de aprendizaje (LMS); software estadístico (R o Python con pandas/ scipy, o SPSS); hojas de cálculo (Excel) con funciones estadísticas; herramientas de visualización (Power BI, Tableau). Para modalidades no escolarizadas o mixtas: repositorio de datasets, foros en línea, tutoriales y sesiones sincrónicas/asincrónicas; conectividad adecuada y acceso a internet.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas; resolución de ejercicios de probabilidades y estadística descriptiva; análisis de datasets de consumidores; realización de pequeños proyectos de análisis de datos; revisión de artículos y casos reales; prácticas de muestreo y estimación; ejercicios de interpretación de resultados para negocio.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Estadística Aplicada al Mercado", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Actividades orientadas por el académico en el aula: 1) explicación conceptual y demostraciones con software; 2) resolución guiada de ejercicios y casos de consumidores; 3) análisis de datasets en tiempo real; 4) discusión de resultados y retroalimentación; 5) diseño de ejercicios para reforzar conceptos; 6) simulaciones de muestreo y pruebas de hipótesis en datasets simulados."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1070, "total_tokens": 8483, "output_tokens": 7413, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 6464}}, "responseId": "resp_09d4b0ada094525e00699c673a8cec8194b6ca12ef0c7849cf", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Probabilidades, estadística descriptiva y pruebas de hipótesis con ejemplos y ejercicios en datos de consumidores."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-23 14:42:00.387587+00', '2026-02-23 14:43:03.478846+00', 4, 8, 'borrador'), - ('a1c71df9-3404-4d68-8b9e-5eeb6c605196', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CYB309', 'Control Predictivo y Optimización de Procesos', 'TRONCAL', 6, NULL, 'cabe3be1-346a-4660-b15e-6b6051c4e2b6', NULL, '{"ciclo": "Cuarto ciclo", "clave_de_la_asignatura": "CYB309", "criterios_de_evaluacion": "Examen parcial (20%), Examen final (30%), Proyecto integrador (implementación y memoria) (25%), Laboratorios y prácticas (15%), Participación, tareas y actividades continuas (10%)", "fines_de_aprendizaje_o_formacion": "Formar en la capacidad de modelar procesos dinámicos, diseñar y evaluar controladores predictivos y aplicar técnicas de optimización para la regulación y eficiencia de procesos. El estudiante será capaz de seleccionar y validar modelos, formular y resolver problemas de MPC (incluyendo restricciones y consideraciones en tiempo real), y ejecutar implementaciones y pruebas en entornos de simulación y plataformas reales, contribuyendo al perfil de egreso con competencias en análisis, diseño y aplicación de estrategias avanzadas de control y optimización en sistemas industriales.", "modalidades_tecnologicas_e_informaticas": "Clases presenciales con apoyo de laboratorio computacional y simulación; uso de MATLAB/Simulink, Python (NumPy, SciPy, CasADi), solvers QP (OSQP, qpOASES), herramientas de identificación y control. Plataforma LMS para entrega de tareas y materiales, repositorios Git para control de código y colaboración. Para modalidades mixtas o no presencial se usarán videoconferencias, entornos virtuales de laboratorio y acceso remoto a simuladores.", "actividades_de_aprendizaje_independientes": "Lectura de capítulos y artículos, resolución de problemas y ejercicios de modelado, prácticas de identificación con datos reales, implementación de controladores MPC en Python/MATLAB, experimentación con solvers de optimización, desarrollo del proyecto integrador y elaboración de la memoria técnica.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Control Predictivo y Optimización de Procesos", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales con resolución guiada de problemas, demostraciones de simulaciones, sesiones de laboratorio dirigidas para implementación de MPC, tutorías para el proyecto integrador, análisis y discusión de casos industriales, evaluaciones parciales y retroalimentación continua."}', '[{"temas": [{"nombre": "Modelos de sistemas dinámicos: modelado físico, ecuaciones diferenciales, modelos de estado", "horasEstimadas": 4}, {"nombre": "Linealización, discretización y propiedades de sistemas (estabilidad, respuesta en frecuencia)", "horasEstimadas": 3}, {"nombre": "Conceptos básicos de control y formulación del problema de optimización en control", "horasEstimadas": 3}], "titulo": "Fundamentos de modelado y control", "unidad": 1}, {"temas": [{"nombre": "Técnicas de identificación paramétrica y no paramétrica (ARX, ARMAX, box-jenkins)", "horasEstimadas": 4}, {"nombre": "Modelos en espacio de estados y reducción de orden para control", "horasEstimadas": 3}, {"nombre": "Estimación de parámetros y validación de modelos para uso en MPC", "horasEstimadas": 3}], "titulo": "Identificación y modelado para control predictivo", "unidad": 2}, {"temas": [{"nombre": "Formulación del problema de MPC: horizonte de predicción y control, función de coste", "horasEstimadas": 4}, {"nombre": "Incorporación de restricciones en entradas y salidas", "horasEstimadas": 3}, {"nombre": "Pesos Q y R, seguimiento de referencia y rechazo de perturbaciones", "horasEstimadas": 3}, {"nombre": "Estrategia receding horizon y actualización en tiempo discreto", "horasEstimadas": 2}], "titulo": "Diseño de Control Predictivo Modelo (MPC) básico", "unidad": 3}, {"temas": [{"nombre": "Programación cuadrática (QP) y lineal (LP) como problemas de MPC", "horasEstimadas": 4}, {"nombre": "Algoritmos numéricos y solvers para tiempo real (active-set, interior-point, OSQP)", "horasEstimadas": 3}, {"nombre": "Factibilidad, condiciones óptimas y manejo de conflictos de restricciones", "horasEstimadas": 3}], "titulo": "Optimización aplicada a control", "unidad": 4}, {"temas": [{"nombre": "MPC no lineal (NMPC): formulación y desafíos computacionales", "horasEstimadas": 4}, {"nombre": "Control predictivo robusto y tratamiento de incertidumbre y perturbaciones", "horasEstimadas": 4}, {"nombre": "Análisis de estabilidad, condiciones terminales y garantías de desempeño", "horasEstimadas": 4}], "titulo": "MPC avanzado y robustez", "unidad": 5}, {"temas": [{"nombre": "Implementación en tiempo real: arquitectura, latencias y requisitos computacionales", "horasEstimadas": 3}, {"nombre": "Simulación y validación con MATLAB/Simulink y herramientas en Python (CasADi, CVX)", "horasEstimadas": 3}, {"nombre": "Casos de estudio industriales y proyecto integrador de optimización y control", "horasEstimadas": 4}], "titulo": "Implementación, simulación y aplicaciones", "unidad": 6}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1154, "total_tokens": 3916, "output_tokens": 2762, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1344}}, "responseId": "resp_031194e46b433eb40069a1b0c6e8188194bd0627848eb46a26", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Modelos y algoritmos de control predictivo (MPC) y técnicas de optimización aplicadas a la regulación y eficiencia de procesos."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-27 14:57:08.739803+00', '2026-02-27 14:57:51.390272+00', 64, 56, 'borrador'), - ('8cd2e6e4-edb8-4447-aa9c-a2d33587382c', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CIB401', 'Proyecto Integrador de Programación y Control', 'TRONCAL', 6, 9, 'e8de5e3f-3ac1-45bf-a1fb-454cca534f71', NULL, '{"ciclo": "Octavo (8)", "clave_de_la_asignatura": "CIB401", "criterios_de_evaluacion": "Diseño y planificación del proyecto: 15% | Desarrollo del prototipo (hardware y software): 35% | Integración y pruebas de desempeño: 25% | Documentación técnica y manual de usuario: 15% | Presentación y defensa del proyecto (demo y exposición): 10% (Total 100%)", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura, el estudiante será capaz de integrar conocimientos de programación, redes y control para concebir, desarrollar y validar un prototipo funcional; elaborar la documentación técnica correspondiente; ejecutar pruebas de desempeño y presentar resultados. Se busca consolidar competencias de diseño de sistemas embebidos, comunicación entre módulos, formulación y ajuste de estrategias de control, gestión de proyectos y trabajo colaborativo orientado a entregables profesionales.", "modalidades_tecnologicas_e_informaticas": "Recursos: entornos de desarrollo integrados (VS Code, PlatformIO), toolchains y SDKs para microcontroladores, simuladores y herramientas de modelado (MATLAB/Simulink o Python), sistemas de control de versiones (Git/GitHub/GitLab), plataformas de gestión de proyectos (Trello, Jira), herramientas de comunicación y diagnóstico de red (Wireshark), equipos de laboratorio (osciloscopio, analizadores lógicos), bancos de prueba y acceso al LMS institucional para entregas y foros. Se prevé uso de repositorios remotos y ambientes de CI para pruebas automatizadas cuando aplique.", "actividades_de_aprendizaje_independientes": "Investigación bibliográfica y técnica sobre tecnologías seleccionadas; desarrollo de módulos de software y firmware; ensamblaje y configuración de hardware; elaboración de planes de prueba y ejecución de experimentos; redacción de documentación técnica y manuales; gestión de repositorios y control de versiones; preparación de la presentación final y la demostración del prototipo.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Proyecto Integrador de Programación y Control", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Sesiones de definición y revisión de requerimientos; tutorías de diseño arquitectónico; laboratorios guiados para integración hardware-software; talleres de configuración de redes y diagnóstico; sesiones de validación de estrategias de control y ajuste; revisiones de avance (code reviews y pruebas dirigidas); evaluación presencial de la demo y retroalimentación para la mejora de la documentación."}', '[{"temas": [{"nombre": "Análisis de requerimientos funcionales y no funcionales", "horasEstimadas": 2}, {"nombre": "Arquitectura del sistema: módulos de control, comunicaciones y UI", "horasEstimadas": 2}, {"nombre": "Selección de hardware y plataformas de software", "horasEstimadas": 2}, {"nombre": "Planificación del proyecto, cronograma y gestión de riesgos", "horasEstimadas": 2}], "titulo": "Planificación y diseño del sistema integrador", "unidad": 1}, {"temas": [{"nombre": "Programación embebida: arquitectura, toolchain y buenas prácticas", "horasEstimadas": 3}, {"nombre": "Diseño de algoritmos de control (PID, control en lazo cerrado, discretización)", "horasEstimadas": 3}, {"nombre": "Integración de sensores y actuadores; adquisición y preprocesamiento de señales", "horasEstimadas": 2}], "titulo": "Desarrollo de software y diseño de control", "unidad": 2}, {"temas": [{"nombre": "Diseño de la red: topología, protocolos (TCP/IP, MQTT, CAN), calidad de servicio", "horasEstimadas": 2}, {"nombre": "Comunicaciones inalámbricas y cableadas: implementación y diagnóstico", "horasEstimadas": 3}, {"nombre": "Seguridad, sincronización y tolerancia a fallos en redes de control", "horasEstimadas": 3}], "titulo": "Redes y comunicaciones para sistemas de control", "unidad": 3}, {"temas": [{"nombre": "Integración de subsistemas y pruebas funcionales de interfaz", "horasEstimadas": 3}, {"nombre": "Pruebas de desempeño: métricas, validación experimental y análisis de resultados", "horasEstimadas": 3}, {"nombre": "Documentación técnica, entrega del prototipo y presentación/demostración", "horasEstimadas": 2}], "titulo": "Integración, pruebas, validación y documentación", "unidad": 4}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1148, "total_tokens": 3370, "output_tokens": 2222, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1024}}, "responseId": "resp_012e469861bf8a1700699f98bf1fd08196afa7a540f43f236b", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Proyecto final que integra programación, redes y control para desarrollar un prototipo funcional, documentación técnica y pruebas de desempeño."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-26 00:50:04.132967+00', '2026-02-27 14:59:19.009747+00', 32, 128, 'borrador'), - ('db64ec9b-3d2a-4375-aebe-a830e04ece52', 'dc286072-c649-43aa-8a2f-aa3ef6166647', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'QFB301', 'Diseño de Fragancias y Composición Olfativa', 'TRONCAL', 8, 1, '7946d5f9-3a99-4c46-b404-69b119650d34', NULL, '{"ciclo": "TRONCALes 16f5d6315316d5f1s", "contenido_tematico": "1. Principios de la estructura olfativa\\n1.1 Niveles de aroma: notas de salida, corazón y fondo\\n1.2 Metodologías de análisis sensorial\\n2. Familias aromáticas\\n2.1 Cítricas, florales, amaderadas, orientales, fougères, especias\\n2.2 Características y aplicaciones en fragancias comerciales\\n2.3 Patrones de duración y percepción\\n3. Elaboración de accords\\n3.1 Definición y función de un accord\\n3.2 Métodos de ensamblaje y equilibrio\\n3.3 Validación de accords en prototipos\\n4. Balances olfativos para fragancias comerciales\\n4.1 Técnicas de balance: proporciones, umbrales y proyección\\n4.2 Desarrollo de perfiles de fragancias según brief\\n4.3 Pruebas y iteración de prototipos", "clave_de_la_asignatura": "QFB301", "criterios_de_evaluacion": "1) Proyecto de diseño de una fragancia comercial (acordes, balance y brief): 40%\\n2) Registro de notas, clasificación de familias aromáticas y análisis de fichas técnicas: 20%\\n3) Examen teórico sobre estructura olfativa y metodología de creación de fragancias: 20%\\n4) Participación en clase, bitácora de prácticas y entregables prácticos: 20%", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de: 1) identificar y clasificar las familias aromáticas y sus notas características; 2) diseñar accords y balances olfativos para fragancias comerciales alineadas con un brief; 3) aplicar técnicas de desarrollo de fragancias mediante un proceso de prueba y ajuste; 4) comunicar de forma clara un concepto de fragancia y su perfil sensorial; 5) usar herramientas básicas de laboratorio y bases de datos para apoyar el proceso de composición. Carga horaria total: 8 créditos, distribuidos en 4 horas de contacto y 10 horas de aprendizaje independiente.", "modalidades_tecnologicas_e_informaticas": "Laboratorio sensorial con equipo de cata; base de datos de esencias y fichas técnicas; software de gestión de proyectos y registro de notas; presentaciones multimedia; plataformas de aprendizaje (LMS) para entrega de tareas; recursos de simulación olfativa (si disponible); biblioteca digital de fragancias. Para modalidades no escolarizada y mixta, se requieren recursos equivalentes en línea, como videos demostrativos, simulaciones y laboratorios virtuales.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas sobre estructura olfativa y familias aromáticas; análisis de fichas técnicas de esencias; desarrollo de un dossier de fragancias con notas de salida, corazón y fondo; investigación de casos de éxito en fragancias comerciales; elaboración de una propuesta de fragancia de 30 notas; reporte reflexivo sobre el proceso de composición.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Diseño de Fragancias y Composición Olfativa", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Sesiones teóricas en aula: fundamentos de estructura olfativa y clasificación de familias; talleres de laboratorio con pruebas organolépticas y mezcla de compuestos; análisis y crítica de prototipos en clase; tutorías para desarrollo de un brief y del dossier de fragancia; presentaciones finales de prototipos ante el académico y retroalimentación."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1078, "total_tokens": 7498, "output_tokens": 6420, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 5568}}, "responseId": "resp_0a4bdbb5ac4c66bc006993a011be208195ae2857e1b120b240", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Principios de estructura olfativa, familias aromáticas, elaboración de accords y balances olfativos para creación de fragancias comerciales."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-16 22:54:08.826761+00', '2026-02-20 14:56:43.902121+00', 4, 10, 'borrador'), - ('63b7e47b-ecd7-46f9-8258-f1bf9f1a1400', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CIB305', 'Diagnóstico y Mantenimiento Predictivo', 'OBLIGATORIA', 4, 5, 'cabe3be1-346a-4660-b15e-6b6051c4e2b6', NULL, '{"ciclo": "Optativa", "clave_de_la_asignatura": "CIB305", "criterios_de_evaluacion": "Exámenes parciales 25%; Prácticas de laboratorio y reportes 25%; Proyecto final aplicado 30%; Tareas y ejercicios 10%; Participación y asistencia 10%. (Total 100%)", "fines_de_aprendizaje_o_formacion": "Que el estudiante sea capaz de emplear métodos de monitoreo, procesamiento de señales y modelos predictivos para la detección temprana y diagnóstico de fallas en sistemas de control; seleccionar e interpretar indicadores de condición; diseñar estrategias de mantenimiento predictivo e integrar soluciones prácticas con sistemas de gestión y adquisición de datos.", "modalidades_tecnologicas_e_informaticas": "Uso de estaciones de adquisición de datos y sensores (acelerómetros, velocidad, corriente), software de procesamiento (MATLAB, Python: NumPy/SciPy, pandas, scikit-learn), herramientas de análisis espectral y tiempo-frecuencia, plataformas IoT/Cloud para almacenamiento y monitoreo, y acceso a sistemas CMMS para prácticas de integración. Para actividades remotas se emplearán entornos virtuales de laboratorio y repositorios de datos.", "actividades_de_aprendizaje_independientes": "Revisión bibliográfica de técnicas de diagnóstico; análisis y etiquetado de conjuntos de datos; desarrollo de scripts para procesamiento y modelado; preparación del informe del proyecto final; estudio de casos y simulaciones; autoaprendizaje de herramientas (MATLAB/Python) y lectura de documentación técnica.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Diagnóstico y Mantenimiento Predictivo", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales con discusión de casos; demostraciones de adquisición y análisis de señales; sesiones de laboratorio presenciales/virtuales para capturar y procesar datos; seminarios sobre integración con CMMS/IoT; tutorías para el seguimiento del proyecto aplicado y presentaciones de resultados."}', '[{"temas": [{"nombre": "Introducción al mantenimiento predictivo: conceptos, objetivos y paradigmas", "horasEstimadas": 4}, {"nombre": "Sensores, adquisición de datos y criterios de muestreo en sistemas de control", "horasEstimadas": 4}], "titulo": "Fundamentos del mantenimiento predictivo", "unidad": 1}, {"temas": [{"nombre": "Análisis de señales en tiempo y frecuencia; indicadores de condición", "horasEstimadas": 4}, {"nombre": "Filtrado, acondicionamiento y técnicas de preprocesamiento de datos", "horasEstimadas": 4}], "titulo": "Señales y procesamiento para diagnóstico", "unidad": 2}, {"temas": [{"nombre": "Técnicas de análisis de vibraciones y medidas en maquinaria rotativa", "horasEstimadas": 4}, {"nombre": "Transformada de Fourier, espectrogramas y análisis en bandas", "horasEstimadas": 4}], "titulo": "Análisis vibracional y espectral", "unidad": 3}, {"temas": [{"nombre": "Detección de anomalías y extracción de características relevantes", "horasEstimadas": 4}, {"nombre": "Métodos estadísticos y basados en modelos para diagnóstico de fallas", "horasEstimadas": 4}], "titulo": "Técnicas de detección de fallas", "unidad": 4}, {"temas": [{"nombre": "Modelado físico vs. modelado basado en datos; selección de variables", "horasEstimadas": 4}, {"nombre": "Algoritmos de machine learning y técnicas de predicción de vida útil (RUL)", "horasEstimadas": 4}], "titulo": "Modelos predictivos y aprendizaje automático", "unidad": 5}, {"temas": [{"nombre": "Integración con sistemas CMMS, IoT y prácticas de mantenimiento predictivo", "horasEstimadas": 4}, {"nombre": "Proyecto aplicado: estudio de casos reales y evaluación de resultados", "horasEstimadas": 4}], "titulo": "Implementación y estrategias de mantenimiento", "unidad": 6}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1150, "total_tokens": 3401, "output_tokens": 2251, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1152}}, "responseId": "resp_0d7f17429ca721dc0069a1b0c6b87c819fa746af32f5c08697", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Métodos de monitoreo, análisis de señales y modelos predictivos para detección temprana de fallas en sistemas de control."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-27 14:57:08.739803+00', '2026-02-27 15:01:14.220393+00', 48, 36, 'borrador'), - ('53f0ec58-566f-42eb-abdf-436bece1c19f', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CIB307', 'Electrónica de Potencia para Control', 'OBLIGATORIA', 4, NULL, NULL, NULL, '{"ciclo": "7", "clave_de_la_asignatura": "CIB307", "criterios_de_evaluacion": "Exámenes parciales: 30%; Proyecto de diseño y prototipo: 30%; Prácticas de laboratorio y reportes: 15%; Tareas y ejercicios de simulación: 15%; Asistencia y participación en clase/laboratorio: 10%.", "fines_de_aprendizaje_o_formacion": "Que el estudiante comprenda y aplique los principios de conversión de potencia y el diseño de interfaces de potencia orientadas al control, sea capaz de seleccionar y modelar dispositivos semiconductores, dimensionar topologías de conversión (AC-DC, DC-DC, DC-AC), implementar estrategias de control para accionamientos y diseñar soluciones robustas con consideraciones térmicas, de protección y compatibilidad electromagnética, vinculando estos conocimientos al desarrollo de controladores y actuadores en aplicaciones industriales y de automatización.", "modalidades_tecnologicas_e_informaticas": "Uso de simuladores y herramientas de modelado (MATLAB/Simulink, PLECS, LTspice), software de diseño de PCB y magnetismo, instrumentación de laboratorio: osciloscopios de alta velocidad, analizadores de potencia y armónicos, fuentes de potencia con control, bancos de carga y equipos de seguridad eléctrica. Se emplearán repositorios en línea, aulas virtuales para entrega de actividades y herramientas de control embebido (microcontroladores/DSP) para integración con prototipos.", "actividades_de_aprendizaje_independientes": "Estudio dirigido de bibliografía especializada y normas; realización de simulaciones y modelos promedio; diseño y documentación del proyecto final; preparación de reportes de prácticas de laboratorio; resolución de problemas y ejercicios de cálculo; revisión de artículos y casos industriales relevantes.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Electrónica de Potencia para Control", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales para introducción de conceptos y desarrollo teórico; sesiones prácticas de laboratorio con prototipos y mediciones; demostraciones y montaje guiado de etapas de potencia; tutorías de proyecto y revisión de avances; seminarios sobre normativa, seguridad y casos de aplicación; evaluación teórica y práctica supervisada."}', '[{"temas": [{"nombre": "Dispositivos: diodos, tiristores, IGBT y MOSFET de potencia", "horasEstimadas": 3}, {"nombre": "Características estáticas y dinámicas; curvas corriente-tensión y pérdidas", "horasEstimadas": 3}, {"nombre": "Modelado, técnicas de conmutación y gestión térmica", "horasEstimadas": 2}], "titulo": "Fundamentos y dispositivos semiconductores de potencia", "unidad": 1}, {"temas": [{"nombre": "Rectificadores no controlados y controlados (monofásicos y trifásicos)", "horasEstimadas": 2}, {"nombre": "Técnicas de control de factor de potencia y rectificación activa", "horasEstimadas": 3}, {"nombre": "Filtros, armónicos y mitigación en etapas de entrada", "horasEstimadas": 3}, {"nombre": "Simulación y aplicación práctica de rectificadores", "horasEstimadas": 2}], "titulo": "Conversión AC-DC: rectificadores y control", "unidad": 2}, {"temas": [{"nombre": "Topologías básicas: buck, boost, buck-boost, sepic", "horasEstimadas": 3}, {"nombre": "Modos de conducción: continuo y discontinuo; análisis y diseño", "horasEstimadas": 2}, {"nombre": "Control PWM, modelado promedio y técnicas de regulación", "horasEstimadas": 3}, {"nombre": "Diseño de inductancias, transformadores y selección de componentes", "horasEstimadas": 2}], "titulo": "Conversión DC-DC: topologías y control", "unidad": 3}, {"temas": [{"nombre": "Topologías de inversores monofásicos y trifásicos", "horasEstimadas": 3}, {"nombre": "Técnicas de PWM analógicas y digitales (SPWM, SVPWM)", "horasEstimadas": 3}, {"nombre": "Acoplamiento a la red: inversores para conexión a red y control de sincronización", "horasEstimadas": 2}, {"nombre": "Filtrado, mitigación de armónicos y calidad de potencia", "horasEstimadas": 2}], "titulo": "Conversión DC-AC: inversores y modulación", "unidad": 4}, {"temas": [{"nombre": "Fundamentos de accionamientos: control de velocidad y torque", "horasEstimadas": 3}, {"nombre": "Control vectorial / Field-Oriented Control (FOC) y control por escalar", "horasEstimadas": 3}, {"nombre": "Sensores, estimación de estados y algoritmos de protección en drives", "horasEstimadas": 2}], "titulo": "Accionamientos y control de motores", "unidad": 5}, {"temas": [{"nombre": "Diseño de etapas de potencia para controladores y actuadores (driver stages, gate drive)", "horasEstimadas": 2}, {"nombre": "Protección, disipación térmica y gestión de fallas", "horasEstimadas": 2}, {"nombre": "Compatibilidad electromagnética (EMC), supresión de interferencias y casos prácticos", "horasEstimadas": 2}], "titulo": "Diseño de interfaces de potencia, protección y compatibilidad electromagnética", "unidad": 6}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1149, "total_tokens": 3752, "output_tokens": 2603, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1088}}, "responseId": "resp_0b46363ca74baf580069a1b0c68010819098bd97041b52b944", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Principios de conversión de potencia, accionamientos y diseño de interfaces de potencia para controladores y actuadores."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-27 14:57:08.739803+00', '2026-02-27 14:57:48.632668+00', 52, 38, 'borrador'), - ('f993d046-d822-4eb9-bfa6-5cbfc5a0ed7c', 'dc286072-c649-43aa-8a2f-aa3ef6166647', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'QFB306', 'Regulación y Evaluación de Seguridad para Fragancias', 'OBLIGATORIA', 5, 7, '67cdbce0-04fe-4c19-aba9-c5999076c97c', NULL, '{"ciclo": "Ciclo 4", "contenido_tematico": "1. Marco regulatorio y principios de seguridad de fragancias; 1.1 Definiciones, alcance y categorías de uso; 1.2 Marco regulatorio internacional y regional (IFRA) y nacional (COFEPRIS) y su interacción; 1.3 Principios de evaluación de seguridad y exposición; 2. Evaluación de seguridad y límites de uso; 2.1 Métodos para estimar exposición y límites de uso; 2.2 Dosis/MoS (Margin of Safety) y criterios de aprobación; 2.3 Estructura y contenido del dossier técnico; 3. Etiquetado y cumplimiento normativo; 3.1 Requisitos de etiquetado, fichas de datos de seguridad y advertencias; 3.2 Documentación y trazabilidad; 3.3 Procedimientos ante incumplimientos y vigilancia regulatoria; 4. Dossier técnico y dossier de seguridad; 4.1 Contenido, formato y periodicidad de actualizaciones; 4.2 Métodos analíticos y validación; 4.3 Gestión de cambios, revalidaciones y registro de versiones; 5. Procedimientos de cumplimiento; 5.1 Diseño de planes de cumplimiento en la organización; 5.2 Gestión de proveedores y sustancias reguladas; 5.3 Auditorías internas, externas y acciones correctivas; 6. Estudio de casos y aplicaciones prácticas; 6.1 Análisis de un caso IFRA; 6.2 Análisis de un caso COFEPRIS; 6.3 Elaboración de un mini-dossier para una fragancia propuesta.", "clave_de_la_asignatura": "QFB306", "criterios_de_evaluacion": "1) Examen teórico escrito 25%; 2) Dossier de cumplimiento de fragancias (ensayo técnico) 30%; 3) Participación y tareas en clase 15%; 4) Presentación de estudio de caso regulatorio 15%; 5) Proyecto de implementación de un plan de cumplimiento normativo en una empresa ficticia 15%.", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante habrá adquirido la capacidad de comprender y aplicar el marco regulatorio de fragancias (IFRA, COFEPRIS); analizar límites de uso y condiciones de seguridad; diseñar y gestionar un dossier técnico y la documentación de cumplimiento; interpretar requisitos de etiquetado y cumplir con las obligaciones regulatorias; proponer e implementar un plan de cumplimiento normativo en una empresa real o simulada.", "modalidades_tecnologicas_e_informaticas": "Modalidad: Presencial con apoyo de plataforma educativa; incluye acceso a bases de datos regulatorias (IFRA, COFEPRIS), repositorios de normas, software de gestión de cumplimiento, herramientas de búsqueda avanzada y foros de discusión; se requieren herramientas de colaboración en línea para actividades de equipo; para modalidades no escolares, se admite uso de plataformas sincrónicas y asincrónicas.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas de IFRA y COFEPRIS; revisión de fichas técnicas; búsqueda de límites de uso para sustancias aromáticas; análisis de casos de incumplimiento y elaboración de un mini-dossier; ejercicios de etiquetado y generación de un glosario de términos regulatorios; carga horaria estimada de 6 horas independientes.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Regulación y Evaluación de Seguridad para Fragancias", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "En las horas de clase (horas académicas: 2), se realizarán sesiones cortas magistrales, discusión guiada de casos, talleres de redacción de etiquetas y de contenido del dossier, revisión de marcos normativos aplicables y asesoría para el desarrollo del dossier, con retroalimentación del académico para guiar el aprendizaje y asegurar la cobertura de los objetivos de aprendizaje."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1082, "total_tokens": 7302, "output_tokens": 6220, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 5312}}, "responseId": "resp_06d5e548c086b68b006993a01213348196995227e931772661", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Marco regulatorio (IFRA, COFEPRIS), etiquetado, límites de uso, dossier técnico y procedimientos de cumplimiento normativo."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-16 22:54:08.826761+00', '2026-02-16 22:55:54.014605+00', 2, 6, 'borrador'), - ('56c6e54e-3300-4fbd-a4bb-dd05b0e40e8a', 'dc286072-c649-43aa-8a2f-aa3ef6166647', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'QFB307', 'Toxicología de Ingredientes Aromáticos', 'OBLIGATORIA', 6, 8, '7946d5f9-3a99-4c46-b404-69b119650d34', NULL, '{"ciclo": "Sexto ciclo - 6 créditos", "contenido_tematico": "1. Introducción a la toxicología de ingredientes aromáticos y su relevancia en la industria de alimentos, cosméticos y farmacéutica\n1.1 Clasificación y uso de ingredientes aromáticos\n1.2 Principios de toxicología: dosis-respuesta, umbrales y curva de toxicidad\n2. Toxicología de la piel y sensibilización cutánea\n2.1 Mecanismos de sensibilización y rutas de exposición cutánea\n2.2 Pruebas in vitro relevantes (reconstructed skin, KeratinoSens, guías de aceptación) y criterios de calidad\n3. Farmacocinética y toxicodinámica aplicada a compuestos aromáticos\n3.1 Absorción, distribución, metabolismo y excreción\n3.2 Interpretación de resultados toxicocinéticos y toxicodinámicos\n4. Evaluación de exposición y caracterización de dosis\n4.1 Rutas de exposición ocupacional y ambiental\n4.2 Modelado de dosis, escenarios de exposición y estimaciones\n5. Evaluación de riesgo y toma de decisiones\n5.1 Enfoques cualitativos y cuantitativos en evaluación de riesgo\n5.2 Criterios de margen de seguridad (MOE) y criterios de aceptación\n6. Alternativas in vitro y reducción de pruebas en vivo\n6.1 Estrategias in vitro para la evaluación de toxicidad de ingredientes aromáticos\n6.2 Integración de datos para la evaluación de riesgo y peso de evidencia\n7. Regulación, guías y buenas prácticas\n7.1 Guías OECD, normativas locales y consideraciones de seguridad\n7.2 Ética, 3Rs y cumplimiento regulatorio\n8. Comunicación de resultados y reporte técnico\n8.1 Estructuras de informes técnicos, resúmenes ejecutivos y recomendaciones\n9. Casos prácticos y trabajos de síntesis\n9.1 Caso práctico de evaluación de peligros y exposición de un ingrediente aromático\n9.2 Caso práctico de alternativas in vitro y reducción de pruebas", "clave_de_la_asignatura": "QFB307", "criterios_de_evaluacion": "Examen parcial: 20%\nExamen final: 25%\nTrabajo de revisión crítica sobre toxicología de un ingrediente aromático: 15%\nCaso práctico de evaluación de riesgo y alternativas in vitro: 20%\nCuestionarios y tareas cortas en plataforma: 10%\nParticipación y asistencia en clase: 10%", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de: identificar y describir la toxicidad y la sensibilización cutánea de ingredientes aromáticos; interpretar estudios de exposición y toxicocinética; aplicar enfoques de evaluación de riesgo y proponer alternativas in vitro para reducir la experimentación animal; comunicar resultados técnicos de forma clara y con cumplimiento regulatorio.", "modalidades_tecnologicas_e_informaticas": "Plataforma de gestión del curso (LMS) para materiales y evaluaciones (p. ej., Moodle). Clases sincrónicas por videoconferencia (Teams/Zoom). Laboratorio virtual y simulaciones de toxicología cutánea. Acceso a bases de datos como PubChem, HSDB y ToxNet; gestores de referencias (Mendeley, EndNote). Software de análisis de datos (R/RStudio, Excel) y herramientas de informes. Recursos multimedia: presentaciones y videos educativos.", "actividades_de_aprendizaje_independientes": "Lecturas críticas y revisión de artículos sobre toxicología de ingredientes aromáticos; extracción y síntesis de datos; realización de resúmenes críticos; búsqueda bibliográfica y evaluación de evidencia; redacción de informes de evaluación de riesgo; diseño de un plan de pruebas in vitro; análisis y reporte de resultados de un caso práctico.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Toxicología de Ingredientes Aromáticos", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales y exposiciones del docente; sesiones de discusión de casos; talleres guiados de interpretación de resultados y de uso de software; desarrollo de un informe de evaluación de riesgo en grupos supervisado; revisión y retroalimentación de borradores por parte del académico."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1075, "total_tokens": 7638, "output_tokens": 6563, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 5632}}, "responseId": "resp_0e68da7ba5cac841006993a011d21481a084ea1c2b3f690f89", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Evaluación de toxicidad, sensibilización cutánea, estudios de exposición, evaluación de riesgo y alternativas in vitro para ingredientes."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-16 22:54:08.826761+00', '2026-02-16 22:56:00.259739+00', 3, 7, 'borrador'), - ('db2f1dd7-1889-4377-90f8-10e60a9ef476', 'dc286072-c649-43aa-8a2f-aa3ef6166647', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'QFB310', 'Taller Integrador de Formulación y Escalamiento', 'OTRA', 8, 4, '7946d5f9-3a99-4c46-b404-69b119650d34', NULL, '{"ciclo": "Optativa", "contenido_tematico": "1. Acercamiento y alcance del Taller Integrador\\n 1.1 Descripción del enfoque: Proyecto aplicado desde laboratorio hasta planta piloto: formulación, validación analítica, pruebas de estabilidad y documentación para liberación.\\n 1.2 Objetivos y entregables\\n 1.3 Plan de trabajo y roles\\n2. Formulación en laboratorio\\n 2.1 Diseño de formulaciones\\n 2.2 Selección de excipientes y criterios de estabilidad\\n 2.3 Ensayos de preformulación y control de calidad\\n3. Escalamiento y transferencia a planta piloto\\n 3.1 Estrategias de escalamiento\\n 3.2 Transferencia de proceso y documentación\\n 3.3 Riesgos y mitigación\\n4. Validación analítica\\n 4.1 Métodos analíticos y validación\\n 4.2 Verificación de métodos en escalamiento\\n5. Pruebas de estabilidad\\n 5.1 Planes de estabilidad y diseño de estudios\\n 5.2 Condiciones y criterios de aceptación\\n6. Documentación para liberación\\n 6.1 Ensayos de liberación\\n 6.2 Dossier y reportes\\n 6.3 Cumplimiento regulatorio\\n7. Carga horaria y evaluación\\n 7.1 Carga horaria: 6 horas académicas presenciales y 12 horas de trabajo independiente", "clave_de_la_asignatura": "QFB310", "criterios_de_evaluacion": "1) Informe final del proyecto de escalamiento y dossier (40%).\\n 2) Presentación y defensa del proyecto (25%).\\n 3) Registros de prácticas y reportes de formulación y validación analítica (20%).\\n 4) Ejercicios de pruebas de estabilidad y análisis de datos (10%).\\n 5) Participación, asistencia y entrega oportuna de documentos (5%).", "fines_de_aprendizaje_o_formacion": "Al finalizar, el estudiante podrá diseñar formulaciones adecuadas para un producto farmacéutico, transferir un proceso de formulación desde laboratorio a planta piloto, aplicar validación analítica a métodos de control, planificar y ejecutar pruebas de estabilidad y compilar la documentación necesaria para la liberación regulatoria, demostrando habilidades de gestión de proyectos y cumplimiento de normativas de calidad.", "modalidades_tecnologicas_e_informaticas": "Laboratorios de formulación y análisis, equipos para pruebas de estabilidad, software de diseño y análisis estadístico (Excel, Minitab), plataformas de gestión de documentos y control de versión (LMS y herramientas de colaboración institucionales), videoconferencias y comunicación, acceso a guías regulatorias (ICH).", "actividades_de_aprendizaje_independientes": "Investigar y revisar literatura sobre formulación y escalamiento de procesos; diseñar una formulación propuesta y plan de escalamiento; realizar análisis de datos y elaborar informes de laboratorio; preparar el plan de pruebas de estabilidad y la documentación para liberación; revisar guías regulatorias (ICH) y normas de control de calidad.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Taller Integrador de Formulación y Escalamiento", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Sesiones prácticas en laboratorio para formulación y validación analítica: ejecución de protocolos, recopilación de datos y seguimiento de controles de calidad; Sesión de transferencia de proceso a planta piloto con revisión de criterios de escalabilidad; Taller de revisión y redacción de informes y dossier; Sesión de simulación de auditoría y cumplimiento regulatorio; Presentación final y defensa ante el docente."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1075, "total_tokens": 8889, "output_tokens": 7814, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 6976}}, "responseId": "resp_0bf8a87ba0509054006993a01bcdf4819c8fdd7c90210d3fda", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Proyecto aplicado desde laboratorio hasta planta piloto: formulación, validación analítica, pruebas de estabilidad y documentación para liberación."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-16 22:54:08.826761+00', '2026-02-16 22:56:04.426122+00', 6, 12, 'borrador'), - ('34c44d50-004e-4ee7-be20-de4db43874e5', 'dc286072-c649-43aa-8a2f-aa3ef6166647', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', '', 'Química OrgnánicaII', 'OBLIGATORIA', 4.3, NULL, NULL, NULL, '{"ciclo": "Ciclo II", "contenido_tematico": "1. Revisión de conceptos y fundamentos\n 1.1 Repaso de Química Orgánica I: estructuras, enlaces, isomería y conceptos de reactividad\n 1.2 Nomenclatura y evaluación de la reactividad\n\n2. Reacciones y mecanismos y estereoquímica\n 2.1 Mecanismos de reacción: sustitución, adición, eliminación y reorganización\n 2.2 Estereoquímica: quiralidad, isomería óptica y conformaciones\n\n3. Reacciones relevantes de carbonilos y derivados\n 3.1 Aldehídos y cetonas: nucleofilia, adición y condensaciones\n 3.2 Derivados de ácido carboxílico: ácidos, anhídridos, ésteres y amidas\n\n4. Reacciones de alcoholes, éteres y fenómenos de acilación\n 4.1 Reacciones de alcoholes: oxidación, deshidratación, esterificación\n 4.2 Reacciones de éteres y su utilidad sintética\n\n5. Síntesis orgánica avanzada y estrategias de planificación\n 5.1 Planificación de síntesis: retrosíntesis, selectividad y ruta eficiente\n 5.2 Uso de catalizadores y métodos modernos en síntesis\n\n6. Técnicas de caracterización y espectroscopía\n 6.1 Introducción a IR, NMR y MS para estructuras orgánicas\n 6.2 Interpretación de espectros y ejemplos prácticos", "clave_de_la_asignatura": "QO-II", "criterios_de_evaluacion": "- Tareas y prácticas de síntesis y problemas: 20%\n- Participación y asistencia: 10%\n- Exámenes parciales: 40%\n- Examen final: 30%", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante habrá desarrollado las capacidades para: 1) aplicar conceptos de química orgánica avanzada a problemas de síntesis y análisis; 2) diseñar rutas de síntesis selectivas y eficientes; 3) interpretar espectros (IR, NMR, MS) para confirmar estructuras; 4) explicar mecanismos de reacción y justificar elecciones de reacciones; 5) trabajar de forma colaborativa y comunicar resultados mediante informes y presentaciones.", "modalidades_tecnologicas_e_informaticas": "- Plataforma de gestión de aprendizaje (LMS) para contenidos y evaluaciones\n- Videoconferencia para clases en vivo\n- Simuladores y visualizadores de moléculas y mecanismos\n- Herramientas de procesamiento de datos espectroscópicos y elaboración de informes", "actividades_de_aprendizaje_independientes": "- Lecturas dirigidas y ejercicios de refuerzo\n- Resolución de problemas y ejercicios de síntesis\n- Preparación de informe de trabajo de laboratorio o simulación\n- Búsqueda y revisión de literatura breve", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Química Orgánica II", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "- Clases magistrales con explicación de mecanismos\n- Resolución de problemas en grupo y discusión de soluciones\n- Demostraciones de laboratorio y prácticas supervisadas\n- Tutorías y revisión de avances de proyectos de síntesis"}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1266, "total_tokens": 7346, "output_tokens": 6080, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 5312}}, "responseId": "resp_0b1d903c1070e5ab006993a4902bf881a19b651f4638a84aeb", "conversationId": null}, "iaConfig": {"instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "La continuación de química orgánica"}, "referencias": {"archivosReferenciaIds": [], "repositoriosReferencia": []}, "generado_por": "ai_generate_subject"}', NULL, NULL, '2026-02-16 23:14:05.412008+00', '2026-02-16 23:14:05.412008+00', NULL, NULL, 'borrador'), - ('6d2c02e8-bb1f-42b9-be58-f73260ef502f', 'dc286072-c649-43aa-8a2f-aa3ef6166647', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'QFB308', 'Escalado de Procesos y Buenas Prácticas de Manufactura', 'TRONCAL', 6, 1, 'bff47d5f-7a05-473b-bb07-0c4769f07dea', NULL, '{"ciclo": "Troncal", "contenido_tematico": "1. Fundamentos del escalado de procesos en manufactura de fragancias y cosméticos; 1.1 Conceptos clave: escalado, equivalencias entre escalas, escalabilidad de formulaciones; 1.2 Desafíos y criterios de éxito en el escalado; 2. BPM/BPF en cosmética; 2.1 Normativas ISO 22716 y alcance BPM/BPF; 2.2 Documentación y trazabilidad; 2.3 Gestión de cambios y control de configuración; 2.4 Limpieza, higiene y calidad del entorno de fabricación; 3. Control de procesos en escalado; 3.1 Modelos de escalado: lineal, por similitud y por perfiles de proceso; 3.2 Variables Críticas de Proceso (CPP) y variables de producto; 3.3 Diseño de experimentos para escalado y transferencia; 3.4 SPC y monitorización de rendimiento; 4. Validación y transferencia de tecnología; 4.1 Calificación de equipos e instalaciones (IQ/OQ/PQ); 4.2 Validación de procesos y métodos analíticos; 4.3 Transferencia de tecnología entre líneas/planta; 4.4 Documentación de validación; 5. Aplicación a fragancias y cosméticos; 5.1 Especificaciones de materias primas y excipientes; 5.2 Estabilidad, compatibilidad sensorial y performance; 5.3 Embalaje, etiquetado y cumplimiento regulatorio; 6. Gestión de calidad, riesgos y seguridad; 6.1 Análisis de riesgos HACCP y CPP; 6.2 Seguridad en escalado y manejo de sustancias; 6.3 Gestión de residuos y medio ambiente; 7. Casos prácticos y proyectos; 7.1 Caso de escalado de una fragancia; 7.2 Caso de escalado de un producto cosmético; 7.3 Proyecto integrador de transferencia y validación.", "clave_de_la_asignatura": "QFB308", "criterios_de_evaluacion": "40% Proyecto práctico de escalado y plan de validación (informe técnico y anexos); 25% Examen teórico; 20% Entregables de prácticas y análisis de casos; 15% Participación y entrega de tareas.", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de identificar y aplicar principios de escalado de procesos para fragancias y cosméticos; aplicar BPM/BPF en cada etapa del escalado; realizar planeación de escalado y diseño de experimentos; gestionar CPP y variabilidad; diseñar y ejecutar planes de validación de equipos y procesos (IQ/OQ/PQ) y transferencia de tecnología; documentar procedimientos y controles para garantizar calidad y trazabilidad.", "modalidades_tecnologicas_e_informaticas": "Se emplearán plataformas de aprendizaje en línea (Moodle/Teams), herramientas de simulación de escalado y DOE, software de SPC, LIMS y ERP para gestión de calidad, bases de datos regulatorias y recursos de referencia; videoconferencias y herramientas de colaboración; aulas virtuales y recursos digitales.", "actividades_de_aprendizaje_independientes": "Actividades de aprendizaje independientes: lectura de normativa ISO 22716 y guías BPM/BPF; análisis de casos y revisión de documentos de escalado; desarrollo de un plan de escalado para un caso hipotético; elaboración de informes y ejercicios prácticos con una carga de trabajo autónomo de 8 horas.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Escalado de Procesos y Buenas Prácticas de Manufactura", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Actividades de aprendizaje bajo conducción de un académico: clases teóricas y prácticas, talleres de escalado, sesiones de laboratorio, revisión de casos y presentaciones; 3 horas de contacto docente con tutoría y retroalimentación continua."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1083, "total_tokens": 8080, "output_tokens": 6997, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 6080}}, "responseId": "resp_0825915d31c88c35006993a011ecc481a2b4ca37ebafefee0f", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Principios de escalado, control de procesos, validación y aplicación de BPM/BPF en producción de fragancias y cosméticos."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-16 22:54:08.826761+00', '2026-02-17 20:25:55.722078+00', 3, 8, 'borrador'), - ('9e3b7e0c-028e-470e-9fae-8d0ecb683a31', '3ebc1d1c-e950-4a6e-948f-bb89efa40e77', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'FIN206', 'Matemática financiera aplicada a pricing', 'OPTATIVA', 3, NULL, NULL, NULL, '{"ciclo": "Optativa", "contenido_tematico": "1. Fundamentos de valor temporal del dinero aplicados al pricing. 1.1 Interés, tasa de descuento e interpretación para decisiones de precios. 1.2 Valor presente y valor presente neto en contextos de promociones. 2. Modelos de descuento para pricing. 2.1 Descuento simple y compuesto; descuento discreto y continuo. 2.2 Tasa de rendimiento requerida y su relación con precios y promociones. 3. Valor presente neto aplicado a decisiones de precios y promociones. 3.1 Análisis de flujos de efectivo de productos y campañas promocionales. 3.2 Análisis de escenarios, sensibilidad y riesgo. 4. Métodos de fijación de precios basados en valor y en costo de capital. 4.1 Métodos de pricing basados en valor para estimar precios de productos, bundles y promociones. 4.2 Consideraciones de descuentos, promociones y caducidad de ofertas. 5. Herramientas prácticas y casos. 5.1 Uso de hojas de cálculo para modelar precios y flujos. 5.2 Casos de estudio: promociones, descuentos y estrategias de pricing.", "clave_de_la_asignatura": "FIN206", "criterios_de_evaluacion": "1) 40% - Resolución de ejercicios y casos prácticos; 2) 25% - Participación en clase y foros; 3) 20% - Proyecto de pricing aplicando VAN y análisis de escenarios; 4) 15% - Examen breve de conceptos clave.", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de: (a) aplicar conceptos de interés, valor presente y modelos de descuento para decisiones de fijación de precios y evaluación de promociones; (b) cuantificar flujos de efectivo y riesgos asociados a promociones; (c) usar herramientas de hojas de cálculo para modelar escenarios de pricing; (d) comunicar recomendaciones de pricing basadas en análisis financiero a un equipo.", "modalidades_tecnologicas_e_informaticas": "Se emplearán calculadoras financieras y hojas de cálculo (Excel o Sheets) para construir modelos de pricing; se utilizarán recursos en plataforma de aprendizaje para ejercicios, foros y entregas; en modalidades no presenciales se apoyará con videoconferencias y herramientas colaborativas.", "actividades_de_aprendizaje_independientes": "Resolución de una serie de ejercicios de valoración con flujos de efectivo; lectura de artículos y guías breves sobre fijación de precios; desarrollo de un informe corto con recomendaciones de precio para un caso hipotético; revisión de guías de cálculo de VAN (horas independientes estimadas: 4).", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Matemática financiera aplicada a pricing", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases teóricas breves para definición de conceptos; talleres de modelación financiera en hojas de cálculo; análisis de casos de pricing y promociones; simulaciones de escenarios con variación de tasas de descuento; revisión y retroalimentación de ejercicios y proyectos."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1067, "total_tokens": 5799, "output_tokens": 4732, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 4032}}, "responseId": "resp_08462776359c42bb00699c673afe7081909148ee3ab85ebe4b", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Interés, valor presente y modelos de descuento para decisiones de fijación de precios y evaluación de promociones."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-23 14:42:00.387587+00', '2026-02-23 14:42:43.108453+00', 2, 4, 'borrador'), - ('fe5eb09c-501b-4db6-b6d3-f02bdcfdc4b4', 'dc286072-c649-43aa-8a2f-aa3ef6166647', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'ASDF', 'Química Orgánica', 'OBLIGATORIA', 5, 3, 'bff47d5f-7a05-473b-bb07-0c4769f07dea', NULL, '{"ciclo": "Ciclo 1", "contenido_tematico": "1. Fundamentos de Química Orgánica\n\n1.1 Estructura y tipos de enlaces\\n1.2 Nomenclatura y representación de moléculas\\n1.3 Hidrocarburos: alifáticos y aromáticos\\n2. Química de biomoléculas y bioorganica\\n2.1 Carbohidratos: estructuras, funciones y recorridos metabólicos\\n2.2 Lípidos: propiedades, almacenamiento y señales\\n2.3 Aminoácidos y proteínas: enlaces peptídicos, estructuras y funciones biológicas\\n2.4 Nucleótidos y ácidos nucleicos: estructura, replicación y expresión genética\\n3. Transformaciones químicas relevantes para biología\\n3.1 Reacciones de adición, sustitución y eliminación relevantes para biomoléculas\\n3.2 Mecanismos y cinética en bioquímica\\n4. Técnicas y espectros\\n4.1 Espectroscopía (NMR, IR, MS) y aplicaciones en bioquímica\\n5. Metodología y ética de laboratorio, seguridad, diseño experimental y enfoque humano\\n5.1 Seguridad y buenas prácticas de laboratorio\\n5.2 Diseño experimental centrado en casos biomoleculares humanos", "clave_de_la_asignatura": "QO-101", "criterios_de_evaluacion": "- Examen parcial 1: 20%\\n- Examen parcial 2: 20%\\n- Laboratorio práctico: 25%\\n- Trabajo de investigación o informe crítico: 25%\\n- Participación y tareas: 10%", "fines_de_aprendizaje_o_formacion": "- Comprender fundamentos de química orgánica aplicados a contextos biomoleculares humanos y de salud.\\n\\n- Desarrollar la capacidad de diseñar e interpretar rutas de síntesis simples relevantes para biomoléculas.\\n\\n- Aplicar técnicas de análisis estructural y espectroscopía para confirmar estructuras de compuestos biomoleculares.", "modalidades_tecnologicas_e_informaticas": "- Plataformas de gestión de aprendizaje (LMS) para recursos, foros y entrega de trabajos.\\n- Software de química: ChemDraw, Avogadro, y herramientas de simulación.\\n- Simuladores de mecanismos y reacciones orgánicas.\\n- Laboratorios virtuales y análisis de datos experimentales remotos si aplica.", "actividades_de_aprendizaje_independientes": "- Lecturas dirigidas de textos y artículo sobre química orgánica en biología molecular.\\n- Resolución de ejercicios y problemas de mecánica de reacciones y espectros.\\n- Elaboración de un informe o mini-proyecto de revisión bibliográfica centrado en una molécula biomolecular.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "QUÍMICA ORGÁNICA", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "- Clases magistrales con explicación de conceptos clave y ejemplos aplicados a biología molecular.\\n- Resolución guiada de ejercicios de mecanismos y reacciones relevantes.\\n- Demostraciones de laboratorio y supervisión de prácticas básicas de síntesis y purificación de compuestos orgánicos.\\n- Análisis guiado de espectros de moléculas biomoleculares modelo.\\n- Discusión y revisión de artículos científicos focalizados en bioquímica orgánica."}', '[{"temas": [{"nombre": "Nuevo tema", "horasEstimadas": 2}], "titulo": "Nueva Unidad", "unidad": 1}]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1274, "total_tokens": 7438, "output_tokens": 6164, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 5376}}, "responseId": "resp_0c254aaf80ff45630069939eba50e08197bdc8ee0af7b0f941", "conversationId": null}, "iaConfig": {"instruccionesAdicionalesIA": "No consideres elementos de animales pero si de humanos", "descripcionEnfoqueAcademico": "Relacionado con la química molecular biológica"}, "referencias": {"archivosReferenciaIds": [], "repositoriosReferencia": []}, "generado_por": "ai_generate_subject"}', NULL, NULL, '2026-02-16 22:49:06.043499+00', '2026-02-23 23:12:53.436476+00', NULL, NULL, 'borrador'), - ('53964f39-9ac7-45f5-9a9a-cb4a92b2e5d8', '3ebc1d1c-e950-4a6e-948f-bb89efa40e77', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'MKT-MAT101', 'Matemáticas para Mercadotecnia', 'TRONCAL', 6, NULL, NULL, NULL, '{"ciclo": "Segundo ciclo", "contenido_tematico": "1. Fundamentos de álgebra para modelos de marketing\n1.1 Expresiones, ecuaciones y desigualdades relevantes para análisis de campañas\n1.2 Sistemas de ecuaciones lineales y matrices aplicadas a tablas de datos de marketing\n1.3 Interpretación de soluciones en contextos de marketing\n2. Funciones y representaciones\n2.1 Conceptos de función, dominio y rango\n2.2 Tipos de funciones relevantes (lineales, cuadráticas, exponenciales y logarítmicas)\n2.3 Aplicaciones a métricas de marketing: ROI, coste, ventas y crecimiento\n3. Optimización básica\n3.1 Introducción a la optimización: problemas de minimización y maximización\n3.2 Optimización con restricciones simples (presupuesto, demanda, capacidad)\n3.3 Métodos de optimización cualitativos y heurísticos aplicados a decisiones de marketing\n4. Modelos cuantitativos aplicados a marketing\n4.1 Modelos de demanda y elasticidad precio- demanda\n4.2 Análisis de sensibilidad y escenarios\n4.3 Modelos de atribución y segmentación\n4.4 Interpretación de resultados y toma de decisiones\n5. Herramientas y metodología de trabajo con datos\n5.1 Excel para modelos de marketing (con Solver)\n5.2 Introducción a R o Python para análisis cuantitativo (opcional)\n5.3 Visualización y reporte de resultados\n6. Organización de la asignatura\n6.1 Estructura de clases, entregables y evaluación", "clave_de_la_asignatura": "MKT-MAT101", "criterios_de_evaluacion": "Se evaluarán los siguientes componentes con distribución porcentual del 100%:\n- Participación y asistencia: 10%\n- Tareas y ejercicios prácticos: 25%\n- Taller/Proyecto de análisis de datos de marketing: 30%\n- Examen parcial: 15%\n- Examen final: 20%", "fines_de_aprendizaje_o_formacion": "Al finalizar el curso, el estudiante podrá: aplicar fundamentos de álgebra, funciones y optimización básica a problemas de marketing; construir y analizar modelos simples de demanda, costos y decisiones de asignación de presupuesto; interpretar resultados cuantitativos y comunicar conclusiones de forma clara; utilizar herramientas tecnológicas básicas (Excel y, cuando corresponda, R o Python) para el análisis y la visualización de datos; trabajar de forma ética y crítica frente a las limitaciones de los modelos. Carga horaria total prevista: 12 horas (4 h académicas presenciales y 8 h de estudio independiente).", "modalidades_tecnologicas_e_informaticas": "Se emplearán tecnologías para facilitar el aprendizaje: plataforma de gestión institucional (LMS), presentaciones y videoconferencias; Excel con Solver para modelos de optimización; R o Python para análisis cuantitativo (opcional); herramientas de visualización (Power BI, Tableau u equivalentes) cuando esté disponible; calculadoras científicas; recursos en línea y bibliotecas digitales; pizarras digitales y proyector en clase.", "actividades_de_aprendizaje_independientes": "Actividades independientes: resolución de ejercicios de álgebra y funciones; resolución de problemas de optimización; análisis de datasets de marketing con Excel; lectura de material teórico y casos de marketing; desarrollo de un mini proyecto de modelado de demanda y simulación de escenarios; elaboración de informe y reflexión crítica sobre las limitaciones de los modelos.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Matemáticas para Mercadotecnia", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Actividades de aprendizaje guiadas por el académico: resolución de problemas en clase con explicación; trabajo en grupo para aplicar modelos a casos reales; discusión y retroalimentación de soluciones; taller de interpretación de resultados y comunicación de conclusiones; uso de herramientas tecnológicas para trabajar con datos durante las sesiones."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1075, "total_tokens": 8585, "output_tokens": 7510, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 6592}}, "responseId": "resp_0244e032859b635100699c673b5730819c86ac6c9592d75149", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Fundamentos matemáticos: álgebra, funciones y optimización básica aplicados a modelos de marketing y análisis cuantitativo."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-23 14:42:00.387587+00', '2026-02-23 14:43:15.668549+00', 4, 8, 'borrador'), - ('eb8fb1d0-15eb-4978-ab65-8d863633cbfc', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CYB308', 'Pruebas de Intrusión en Entornos Industriales', 'OPTATIVA', 3, NULL, NULL, NULL, '{"ciclo": "Optativa", "clave_de_la_asignatura": "CYB308", "criterios_de_evaluacion": "Laboratorios prácticos y entregables de laboratorio: 30%; Ejercicio práctico de pentesting en laboratorio (evaluación de explotación y mitigación): 30%; Informe técnico profesional (report): 20%; Participación en clase, debates y actividades dirigidas: 10%; Examen teórico-práctico final: 10%. Total: 100%.", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura, el estudiante será capaz de aplicar metodologías de pruebas de intrusión y evaluación de vulnerabilidades específicas para redes y dispositivos de control industrial (ICS/SCADA), diseñar y ejecutar pruebas en entornos controlados reduciendo riesgos operativos, priorizar hallazgos según impacto en la continuidad operacional y elaborar reportes técnicos y ejecutivos con recomendaciones de mitigación y remediación que permitan mejorar la ciberseguridad de sistemas OT.", "modalidades_tecnologicas_e_informaticas": "Se emplearán laboratorios virtuales y físicos replicados para entornos OT (OpenPLC, MiniCPS, simuladores de HMI/PLC), herramientas de análisis de red (Wireshark), frameworks de pentesting (Metasploit, Scapy), scanners y herramientas OT específicas; plataformas de gestión de laboratorios remotos y control de versiones para entregables; comunicación y seguimiento mediante LMS, correo institucional y foros. Se requiere acceso a máquina virtual con Linux y permisos adecuados para prácticas en entornos controlados.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas sobre protocolos industriales y vulnerabilidades (aprox. 10 h), preparación y práctica en laboratorio virtual (aprox. 12 h), elaboración de reportes y análisis de casos (aprox. 6 h), investigación de vulnerabilidades y actualización de herramientas (horas distribuidas). Total estimado de horas independientes: 30.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Pruebas de Intrusión en Entornos Industriales", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales y exposiciones (conceptos y protocolos), demostraciones de herramientas en vivo, laboratorios guiados paso a paso en entornos replicados, estudios de caso y análisis de incidentes reales, sesiones de retroalimentación sobre informes y ejercicios prácticos, evaluaciones prácticas supervisadas."}', '[{"temas": [{"nombre": "Características de sistemas OT y diferencias con IT", "horasEstimadas": 2}, {"nombre": "Arquitectura ICS/SCADA y elementos críticos", "horasEstimadas": 2}, {"nombre": "Riesgos, amenazas y casos reales en entornos industriales", "horasEstimadas": 2}], "titulo": "Introducción a la seguridad en entornos industriales", "unidad": 1}, {"temas": [{"nombre": "Fundamentos de protocolos industriales: Modbus, DNP3, OPC, IEC 61850", "horasEstimadas": 3}, {"nombre": "Captura y análisis de tráfico OT (Wireshark, decodificadores y técnicas de inspección)", "horasEstimadas": 3}, {"nombre": "Segmentación de red, zonas y arquitecturas de defensa para OT", "horasEstimadas": 2}], "titulo": "Protocolos industriales y análisis de redes", "unidad": 2}, {"temas": [{"nombre": "Escaneo de activos y fingerprinting específico para dispositivos industriales", "horasEstimadas": 2}, {"nombre": "Evaluación de vulnerabilidades en PLC, RTU y HMI", "horasEstimadas": 2}, {"nombre": "Priorización de hallazgos y gestión de riesgos en entornos industriales", "horasEstimadas": 2}], "titulo": "Descubrimiento y evaluación de vulnerabilidades en OT", "unidad": 3}, {"temas": [{"nombre": "Técnicas de explotación en entornos controlados (explotaciones no destructivas)", "horasEstimadas": 3}, {"nombre": "Controles de seguridad y mitigaciones (IDS/IPS OT, listados blancos, segmentación)", "horasEstimadas": 2}, {"nombre": "Planificación de pruebas: pruebas de seguridad seguras y estrategias de rollback", "horasEstimadas": 1}], "titulo": "Técnicas de explotación segura y control de impacto", "unidad": 4}, {"temas": [{"nombre": "Herramientas específicas: Metasploit, Scapy, herramientas OT y plugins especializados", "horasEstimadas": 3}, {"nombre": "Configuración de entornos virtuales y simuladores (OpenPLC, MiniCPS, entornos replicados)", "horasEstimadas": 2}, {"nombre": "Ejercicios prácticos guiados de intrusión en laboratorio controlado", "horasEstimadas": 1}], "titulo": "Herramientas, simuladores y laboratorios para pentesting OT", "unidad": 5}, {"temas": [{"nombre": "Marco legal, acuerdos de autorización y ética profesional en pruebas de intrusión", "horasEstimadas": 1}, {"nombre": "Metodologías de reporte técnico y ejecutivo; comunicación con equipos OT", "horasEstimadas": 2}, {"nombre": "Buenas prácticas para remediación y roadmap de mejora continua", "horasEstimadas": 1}], "titulo": "Aspectos legales, éticos y comunicación de resultados", "unidad": 6}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1148, "total_tokens": 3844, "output_tokens": 2696, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1280}}, "responseId": "resp_08b1446e7677426d0069a1b0c6a7cc8193a178d453aed98d1d", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Metodologías de pentesting y evaluación de vulnerabilidades específicas de redes y dispositivos de control industrial."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-27 14:57:08.739803+00', '2026-02-27 14:57:50.270914+00', 36, 30, 'borrador'), - ('4b24eecf-6d23-4f88-b382-97259fa58c88', '3ebc1d1c-e950-4a6e-948f-bb89efa40e77', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'MKT-ML301', 'Aprendizaje automático para investigación de mercados', 'TRONCAL', 6, NULL, NULL, NULL, '{"ciclo": "Ciclo II", "contenido": null, "clave_de_la_asignatura": "MKT-ML301", "criterios_de_evaluacion": "Examen parcial teórico-práctico (20%): evaluación de conceptos y habilidades básicas. Talleres y ejercicios prácticos en sesión (25%): resolución de problemas en entornos de laboratorio. Proyecto de investigación de mercados con ML (35%): análisis end-to-end desde selección de datos hasta interpretación de resultados y consideraciones de ética. Participación y asistencia (10%): participación activa, uso de notebooks y discusiones. Presentación y defensa del proyecto (10%): exposición de hallazgos y justificación de decisiones metodológicas.", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de: comprender fundamentos de machine learning aplicados a investigación de mercados; aplicar técnicas de regresión, clasificación y clustering a datasets de mercados; validar, comparar e interpretar modelos; diseñar y describir pipelines de modelado y consideraciones de despliegue; identificar sesgos, aspectos éticos y de privacidad; comunicar resultados de forma clara para apoyar la toma de decisiones en investigación de mercados.", "modalidades_tecnologicas_e_informaticas": "Recursos tecnológicos y de información: Python (pandas, numpy, scikit-learn), Jupyter Notebooks o Google Colab, herramientas de visualización (matplotlib/seaborn), control de versiones con Git y repositorios en GitHub. Plataformas de cómputo en la nube o en entornos institucionales (Colab, JupyterHub, AWS/GCP/Azure) para prácticas y experimentos. En modalidades no escolarizada o mixta, es obligatorio contar con entornos de cómputo accesibles para realizar las prácticas.", "actividades_de_aprendizaje_independientes": "Proyecto independiente de análisis de un conjunto de datos de investigación de mercados: definición del objetivo, limpieza y preprocesamiento de datos, selección y entrenamiento de modelos, evaluación y reporte de resultados, con énfasis en interpretación y consideraciones éticas (6 horas). Lecturas dirigidas y ejercicios de refuerzo (2 horas).", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Aprendizaje automático para investigación de mercados", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales y demostraciones dirigidas por el académico (4 horas): conceptos teóricos y casos de uso en investigación de mercados. Laboratorios guiados (4 horas): implementación de modelos, ejecución de pipelines y validación de resultados, con supervisión del docente. Discusión de consideraciones éticas y de privacidad en contextos reales."}', '[{"temas": [], "titulo": "Nueva Unidad", "unidad": 1}]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1094, "total_tokens": 7402, "output_tokens": 6308, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 5696}}, "responseId": "resp_04a9bec1e4a2db3800699cbee23f60819ea6c5b8af3d30e5e4", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Fundamentos y aplicaciones de machine learning en investigación de mercados: regresión, clasificación, clustering, validación, despliegue y consideraciones éticas y de privacidad."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-23 20:56:00.968045+00', '2026-02-23 21:27:29.882339+00', 4, 8, 'borrador'), - ('4e27c298-70c2-4550-9103-649f127a026e', 'dc286072-c649-43aa-8a2f-aa3ef6166647', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'QFB311', 'Metrología y validación analítica para aromaquímicos', 'OBLIGATORIA', 4, NULL, NULL, NULL, '{"ciclo": "7", "clave_de_la_asignatura": "QFB311", "criterios_de_evaluacion": "Examen parcial teórico 20%; Examen final teórico-práctico 25%; Informes de prácticas de laboratorio (entregables) 20%; Proyecto integrador (protocolo y reporte de validación para liberación de lote) 25%; Participación y desempeño en prácticas 10%.", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura el estudiante será capaz de asegurar la trazabilidad metrológica en análisis de aromaquímicos, calibrar y verificar equipos analíticos, diseñar y ejecutar planes de validación de métodos, evaluar y cuantificar la incertidumbre de medición, implementar controles de calidad y elaborar informes técnicos conformes para la liberación de lotes, contribuyendo al cumplimiento de normas regulatorias y a la garantía de calidad en la industria de aromas.", "modalidades_tecnologicas_e_informaticas": "Clases presenciales con uso de equipos analíticos (GC, GC-MS, HPLC), balanzas y volumetría; software de control de instrumentos y adquisición de datos; herramientas de análisis estadístico (Excel avanzado, R o similar); paquetes para cálculo de incertidumbre; sistemas LIMS y plantillas electrónicas para informes; plataforma educativa (Moodle o equivalente) para materiales, foros y entregas. Para modalidad mixta o no escolarizada se incluirán simuladores de laboratorio y videodemostraciones.", "actividades_de_aprendizaje_independientes": "Revisión bibliográfica y normativa sobre trazabilidad y validación; preparación y cálculo de patrones y soluciones estándar; análisis de datos de calibración y validación; cálculo de incertidumbre y generación de gráficos de control; redacción de informes técnicos y protocolos; estudio de casos y simulaciones mediante software estadístico.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Metrología y validación analítica para aromaquímicos", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales y seminarios para teoría y normativa; demostraciones instrumentales y sesiones guiadas de calibración; prácticas de laboratorio supervisadas para ejecución de validaciones y determinación de incertidumbre; discusión de casos reales y resolución de problemas en equipo; retroalimentación individualizada sobre informes y presentaciones."}', '[{"temas": [{"nombre": "Principios de metrología y trazabilidad en el laboratorio analítico", "horasEstimadas": 3}, {"nombre": "Sistemas de unidades, patrones y certificados de referencia", "horasEstimadas": 3}, {"nombre": "Estadística básica aplicada a mediciones y control de datos", "horasEstimadas": 2}], "titulo": "Fundamentos de metrología y trazabilidad aplicados a aromaquímicos", "unidad": 1}, {"temas": [{"nombre": "Calibración y verificación de cromatógrafos (GC, GC-MS, HPLC) y detectores", "horasEstimadas": 4}, {"nombre": "Preparación y manejo de patrones primarios y secundarios para aromaquímicos", "horasEstimadas": 3}, {"nombre": "Construcción de curvas de calibración y evaluación de ajuste", "horasEstimadas": 3}], "titulo": "Calibración de equipos e instrumentos para aromaquímicos", "unidad": 2}, {"temas": [{"nombre": "Parámetros de validación: exactitud, precisión, linealidad y selectividad", "horasEstimadas": 5}, {"nombre": "Determinación de LOD, LOQ, robustez y rangos de trabajo", "horasEstimadas": 4}, {"nombre": "Validación específica por matriz: aceites esenciales, materias primas y formulaciones", "horasEstimadas": 3}], "titulo": "Validación de métodos analíticos para aromaquímicos", "unidad": 3}, {"temas": [{"nombre": "Identificación de las fuentes de incertidumbre en análisis de aromaquímicos", "horasEstimadas": 3}, {"nombre": "Cálculo de incertidumbre tipo A y tipo B", "horasEstimadas": 3}, {"nombre": "Propagación, combinación y expresión de incertidumbre expandida", "horasEstimadas": 2}], "titulo": "Evaluación y expresión de la incertidumbre de medición", "unidad": 4}, {"temas": [{"nombre": "Control de calidad interno: controles, estándares y cartas de control", "horasEstimadas": 4}, {"nombre": "Control de calidad externo: ensayos de aptitud y comparaciones interlaboratorio", "horasEstimadas": 3}, {"nombre": "Planes de muestreo, criterios de aceptación y gestión de no conformidades", "horasEstimadas": 3}], "titulo": "Control de calidad y aseguramiento en el laboratorio", "unidad": 5}, {"temas": [{"nombre": "Buenas prácticas en documentación: trazabilidad documental y registros", "horasEstimadas": 3}, {"nombre": "Elaboración de protocolos e informes de validación comprensibles para liberación", "horasEstimadas": 3}, {"nombre": "Requisitos regulatorios y normativos aplicables a aromaquímicos", "horasEstimadas": 2}], "titulo": "Documentación técnica e informes para liberación de lotes", "unidad": 6}, {"temas": [{"nombre": "Diseño e interpretación de estudios de caso sobre validación y liberación", "horasEstimadas": 3}, {"nombre": "Prácticas de laboratorio guiadas: calibración, validación y evaluación de incertidumbre", "horasEstimadas": 3}, {"nombre": "Presentación y defensa de informe técnico integrado para liberación de lote", "horasEstimadas": 2}], "titulo": "Prácticas integradoras y estudio de casos reales", "unidad": 7}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1172, "total_tokens": 4425, "output_tokens": 3253, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1664}}, "responseId": "resp_0e85d6e3b8392a7800699cdf19381881a0a604530b814e40f9", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Trazabilidad, calibración y validación de métodos analíticos para aromaquímicos; evaluación de incertidumbre, control de calidad y elaboración de informes técnicos para liberación de lotes."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-23 23:13:27.149223+00', '2026-02-23 23:14:13.407191+00', 64, 128, 'borrador'), - ('6221466b-f243-4f14-aa80-55fd4773160f', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CYB201', 'Algoritmos y Estructuras de Datos para Control', 'TRONCAL', 6, 2, 'e8de5e3f-3ac1-45bf-a1fb-454cca534f71', NULL, '{"ciclo": "4", "clave_de_la_asignatura": "CYB201", "criterios_de_evaluacion": "Participación y ejercicios en clase: 10%; Prácticas de laboratorio (implementación en C/Python): 40%; Proyecto aplicado de control (implementación, informe y demostración): 30%; Exámenes escritos (teoría y análisis de complejidad): 20%. Total: 100%.", "fines_de_aprendizaje_o_formacion": "Que el estudiante comprenda y aplique estructuras de datos y algoritmos relevantes (listas, árboles, grafos, búsqueda y ordenación) en problemas de control; que sea capaz de seleccionar e implementar soluciones eficientes en C y Python, evaluar su complejidad y adaptarlas a restricciones de tiempo real y sistemas embebidos, contribuyendo al perfil de egreso en diseño e implementación de sistemas de control confiables.", "modalidades_tecnologicas_e_informaticas": "Uso de entornos de desarrollo C (GCC, Make) y Python (IDE/VS Code), repositorios Git/GitHub, herramientas de perfilado (gprof, perf, cProfile), simuladores y entornos de modelado (opcional: Simulink/MATLAB), placas de prototipado/MCU para pruebas en tiempo real, plataforma LMS para entrega y seguimiento de actividades.", "actividades_de_aprendizaje_independientes": "Lectura de notas y artículos, resolución de ejercicios de análisis de algoritmos, desarrollo y depuración de prácticas en C/Python, preparación del proyecto aplicado, pruebas y perfilado de código en entorno embebido o simulado, revisión de código en pares.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Algoritmos y Estructuras de Datos para Control", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales con análisis de algoritmos y ejemplos de aplicación en control, sesiones prácticas guiadas en laboratorio con implementación en C/Python, demostraciones en hardware/simulador, resolución guiada de problemas, retroalimentación y evaluación formativa."}', '[{"temas": [{"nombre": "Complejidad algorítmica: notación O, análisis temporal y espacial aplicado a sistemas de control", "horasEstimadas": 1}, {"nombre": "Estructuras lineales: arreglos, listas enlazadas, pilas y colas; buffers y manejo de datos en tiempo real", "horasEstimadas": 1}], "titulo": "Fundamentos y estructuras lineales", "unidad": 1}, {"temas": [{"nombre": "Árboles binarios y árboles de búsqueda (BST, AVL): representación y uso en toma de decisiones", "horasEstimadas": 1}, {"nombre": "Colas de prioridad y montículos (heaps): planificación de tareas y gestión de eventos e interrupciones", "horasEstimadas": 1}], "titulo": "Árboles y estructuras jerárquicas para control", "unidad": 2}, {"temas": [{"nombre": "Grafos y algoritmos de caminos (BFS, Dijkstra): modelado y optimización de rutas y flujos en control", "horasEstimadas": 1}, {"nombre": "Ordenación y búsqueda avanzada; implementación en C y Python, pruebas, perfilado y optimización para sistemas embebidos", "horasEstimadas": 1}], "titulo": "Grafos, búsqueda, ordenación e implementación", "unidad": 3}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1166, "total_tokens": 3503, "output_tokens": 2337, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1408}}, "responseId": "resp_0f02ac295157ba7500699f98be4724819d99ff2624f210f2f2", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Estructuras y algoritmos (listas, árboles, grafos, búsqueda, ordenación) aplicados a sistemas de control; implementación y análisis de complejidad en C/Python."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-26 00:50:04.132967+00', '2026-02-26 00:51:01.139139+00', 6, 8, 'borrador'), - ('bf88d9e1-c0a7-4404-a818-231a0d75341e', '3ebc1d1c-e950-4a6e-948f-bb89efa40e77', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'MAT201', 'Álgebra lineal aplicada al marketing', 'TRONCAL', 5, NULL, NULL, NULL, '{"ciclo": "Ciclo IV", "contenido_tematico": "viene de datos", "clave_de_la_asignatura": "MAT201", "criterios_de_evaluacion": "1) Participación y asistencia: 10%\n2) Tareas y ejercicios prácticos: 40%\n3) Examen teórico-práctico: 25%\n4) Proyecto aplicado con estudio de caso de marketing: 25%", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura, el estudiante podrá: modelar problemas de marketing utilizando vectores, matrices y sistemas lineales; interpretar la relación entre variables de mercado a partir de soluciones de sistemas; aplicar técnicas de álgebra lineal para segmentar mercados, diseñar y analizar la mezcla de productos; emplear herramientas computacionales para manipular datos y generar conclusiones; comunicar resultados de forma clara y con respaldo analítico.", "modalidades_tecnologicas_e_informaticas": "Plataformas de gestión del aprendizaje (LMS): Moodle, Canvas; herramientas de videoconferencia: Zoom o Microsoft Teams; software: MATLAB/Octave, Python (NumPy/SciPy), R y Excel (con Solver). Entornos de análisis de datos: Jupyter notebooks; repositorio de material: Google Drive/OneDrive; acceso a datasets de marketing para práctica.", "actividades_de_aprendizaje_independientes": "Lecturas de fundamentos de álgebra lineal y casos de marketing; resolución de ejercicios y problemas de forma independiente; análisis de datasets de marketing para practicar manipulaciones matriciales; desarrollo de un mini-proyecto de análisis de datos de mercado; ejercicios de codificación para construir vectores y matrices y aplicar operaciones.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Álgebra lineal aplicada al marketing", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales con ejemplos orientados a marketing; resolución guiada de ejercicios en clase; talleres de casos sobre segmentación, demanda y mix de productos; revisión de soluciones en plenaria; tutoría y retroalimentación individual."}', '[{"temas": [{"nombre": "Nuevo temaa", "horasEstimadas": 2}, {"nombre": "Nuevo temarsthdty", "horasEstimadas": 2}], "titulo": "Nueva Unidad", "unidad": 1}]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1070, "total_tokens": 6633, "output_tokens": 5563, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 4800}}, "responseId": "resp_03737130ad193c7100699c673b61ac819f830f5fc5f82dbe9e", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Vectores, matrices y sistemas para segmentación, mix de productos y análisis de relaciones entre variables de mercado."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-23 14:42:00.387587+00', '2026-02-24 20:36:39.851732+00', 4, 6, 'borrador'), - ('15b16f67-8580-4b63-85e6-d519d8885b76', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CIB306', 'Control en Tiempo Real y Adquisición de Datos', 'TRONCAL', 5, NULL, NULL, NULL, '{"ciclo": "Ciclo 8 (TRONCAL)", "clave_de_la_asignatura": "CIB306", "criterios_de_evaluacion": "Exámenes parciales (teoría y problemas): 25%; Proyecto final (implementación, informe y demostración en tiempo real): 30%; Prácticas de laboratorio y sus reportes: 20%; Tareas y ejercicios de simulación y análisis: 15%; Participación, entregas parciales y asistencia: 10%. Total: 100%.", "fines_de_aprendizaje_o_formacion": "Formar al estudiante para diseñar, implementar y validar sistemas de control en tiempo real con adquisición de datos, garantizando requisitos de latencia, determinismo y robustez. Al finalizar la asignatura el estudiante será capaz de seleccionar hardware y software adecuados, aplicar técnicas de programación y sincronización en entornos RTOS, procesar datos con restricciones temporales y realizar pruebas y validaciones (incluyendo HIL) para verificar el cumplimiento de requisitos de tiempo real y calidad de datos.", "modalidades_tecnologicas_e_informaticas": "Se emplearán entornos y herramientas como RTOS (por ejemplo FreeRTOS, RT-Linux), plataformas embebidas (microcontroladores y SBC), tarjetas DAQ industriales/comerciales, herramientas de modelado y simulación (MATLAB/Simulink), entornos de desarrollo integrados (IDE) para sistemas embebidos, herramientas de comunicación en tiempo real (EtherCAT, CAN, Ethernet determinista) y repositorios/gestión de versiones (Git). Se utilizará un LMS institucional para distribución de materiales, envío de tareas y retroalimentación. En modalidad mixta o no escolarizada será obligatorio el uso de acceso remoto a laboratorios virtuales y/o bancadas con acceso seguro para prácticas y pruebas.", "actividades_de_aprendizaje_independientes": "Lectura y estudio de documentación técnica y artículos especializados; desarrollo de tareas y ejercicios de simulación (modelado de control, análisis de latencia); diseño e implementación de módulos del proyecto final (codificación, pruebas unitarias); elaboración de reportes de laboratorio y documentación del proyecto; preparación para exámenes. Se estiman 44 horas de trabajo independiente distribuidas en estudio teórico, simulaciones y avance en proyecto/entregables.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Control en Tiempo Real y Adquisición de Datos", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales para presentación de conceptos y metodologías; sesiones prácticas en laboratorio con instrumentación y tarjetas DAQ para implementación y medición en tiempo real; sesiones guiadas de programación en RTOS y de integración hardware-software; demostraciones y análisis de casos; tutorías para asesorar el proyecto final; evaluaciones parciales en clase y retroalimentación continua."}', '[{"temas": [{"nombre": "Conceptos básicos de sistemas en tiempo real: latencia, jitter y determinismo", "horasEstimadas": 3}, {"nombre": "Requisitos temporales, métricas de rendimiento y modelos de tiempo", "horasEstimadas": 3}], "titulo": "Fundamentos de sistemas en tiempo real y adquisición de datos", "unidad": 1}, {"temas": [{"nombre": "Sensores, acondicionamiento de señal y conversión A/D y D/A", "horasEstimadas": 4}, {"nombre": "Plataformas de adquisición: tarjetas DAQ, buses (USB, PCIe, Ethernet) y consideraciones de muestreo", "horasEstimadas": 4}], "titulo": "Hardware y estrategias de adquisición de datos", "unidad": 2}, {"temas": [{"nombre": "Introducción a RTOS: tareas, interrupciones y manejo de recursos", "horasEstimadas": 4}, {"nombre": "Planificación y sincronización: algoritmos de scheduling, prioridad e inversión de prioridad", "horasEstimadas": 4}], "titulo": "Sistemas operativos en tiempo real y manejo de concurrencia", "unidad": 3}, {"temas": [{"nombre": "Algoritmos de control en tiempo real: PID y control en espacio de estados con restricciones temporales", "horasEstimadas": 5}, {"nombre": "Consideraciones de implementación: punto fijo, optimización de cómputo y manejo de deadlines", "horasEstimadas": 3}], "titulo": "Diseño e implementación de control en tiempo real", "unidad": 4}, {"temas": [{"nombre": "Canales de adquisición de datos: buffering, DMA y técnicas para evitar pérdida de muestras", "horasEstimadas": 4}, {"nombre": "Procesamiento en tiempo real: filtrado, transformadas y transmisión determinista (EtherCAT, CAN, RTPS)", "horasEstimadas": 4}], "titulo": "Procesamiento de datos y comunicación de baja latencia", "unidad": 5}, {"temas": [{"nombre": "Pruebas en tiempo real: benchmarking, pruebas de latencia, HIL y validación de requisitos temporales", "horasEstimadas": 6}, {"nombre": "Desarrollo e integración del proyecto final: diseño, implementación y documentación", "horasEstimadas": 6}], "titulo": "Validación, pruebas y proyecto integrador", "unidad": 6}, {"temas": [{"nombre": "Seguridad funcional y normativas aplicables a sistemas en tiempo real", "horasEstimadas": 3}, {"nombre": "Estudios de caso de aplicaciones industriales y emergentes en control en tiempo real", "horasEstimadas": 3}], "titulo": "Seguridad, normativas y estudios de caso", "unidad": 7}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1150, "total_tokens": 3877, "output_tokens": 2727, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1280}}, "responseId": "resp_0b2b5db0454706640069a1b0c6bc3c81a0b9605c38a749f5f5", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Diseño de sistemas de control en tiempo real, adquisición y procesamiento de datos con requisitos de latencia y determinismo."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-27 14:57:08.739803+00', '2026-02-27 14:57:50.5937+00', 56, 44, 'borrador'), - ('1580dfaf-0224-4bbc-8442-0cad7a540a37', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CIB203', 'Protocolos y Comunicaciones Industriales', 'OBLIGATORIA', 4, 4, 'e8de5e3f-3ac1-45bf-a1fb-454cca534f71', NULL, '{"ciclo": "Cuarto ciclo", "clave_de_la_asignatura": "CIB203", "criterios_de_evaluacion": "Examen parcial teórico 30% | Informes de laboratorio y prácticas 25% | Proyecto integrador (diseño y configuración de red industrial con pruebas) 25% | Quices y tareas cortas 10% | Participación y asistencia en actividades dirigidas 10% (Total 100%)", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura, el estudiante podrá identificar y comparar protocolos industriales (EtherCAT, Modbus, PROFINET), diseñar y configurar redes industriales que cumplan requisitos de determinismo y calidad de servicio, aplicar mecanismos de sincronización y QoS, emplear herramientas de captura y análisis de tráfico para diagnosticar y optimizar comunicaciones, y proponer soluciones de interoperabilidad y disponibilidad en entornos industriales.", "modalidades_tecnologicas_e_informaticas": "Aula equipada con acceso a Internet, laboratorios con PLCs y switches industriales, simuladores de redes (p. ej. GNS3/ EVE-NG u equivalentes para entornos industriales), analizadores de protocolo (Wireshark), software/firmware para configuración PROFINET y EtherCAT, entornos de virtualización para prácticas, y plataforma educativa (LMS) para entrega de contenidos y evaluaciones.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas de especificaciones y documentación técnica; preparación de informes de laboratorio; análisis de capturas de tráfico; diseño y documentación del proyecto integrador; resolución de ejercicios prácticos sobre cálculo de latencia y dimensionamiento de redes; estudio y preparación de presentaciones sobre casos de aplicación.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Protocolos y Comunicaciones Industriales", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales para introducción de conceptos; laboratorios guiados para configuración y pruebas de Modbus, EtherCAT y PROFINET; demostraciones de captura y análisis de paquetes; sesiones de resolución de casos y estudios de diseño; supervisión y retroalimentación continua del proyecto integrador."}', '[{"temas": [{"nombre": "Evolución y clasificación de redes industriales", "horasEstimadas": 3}, {"nombre": "Modelos de comunicación: OSI, TCP/IP y adaptaciones industriales", "horasEstimadas": 3}, {"nombre": "Requisitos de determinismo: latencia, jitter y sincronización", "horasEstimadas": 3}, {"nombre": "Técnicas básicas de QoS y sincronización (PTP)", "horasEstimadas": 3}], "titulo": "Fundamentos de redes industriales y requisitos de comunicación", "unidad": 1}, {"temas": [{"nombre": "Modbus RTU y Modbus TCP: arquitectura y formato de tramas", "horasEstimadas": 4}, {"nombre": "Comparación con buses tradicionales y uso de pasarelas", "horasEstimadas": 3}, {"nombre": "Implementación práctica: addressing, códigos de función y manejo de errores", "horasEstimadas": 3}, {"nombre": "Laboratorio: captura y análisis de paquetes Modbus (Wireshark)", "horasEstimadas": 2}], "titulo": "Modbus y buses tradicionales; análisis de tráfico", "unidad": 2}, {"temas": [{"nombre": "EtherCAT: principes ''on-the-fly'', topologías y frames", "horasEstimadas": 4}, {"nombre": "PROFINET: modos RT e IRT, clases de tiempo real y configuración", "horasEstimadas": 4}, {"nombre": "Consideraciones de diseño: switches, VLANs y redundancia", "horasEstimadas": 2}, {"nombre": "Interoperabilidad y estudios de caso industrial", "horasEstimadas": 2}], "titulo": "EtherCAT y PROFINET: principios y configuración", "unidad": 3}, {"temas": [{"nombre": "Mecanismos QoS: priorización, shaping y policing", "horasEstimadas": 3}, {"nombre": "Time-Sensitive Networking (TSN) y normas IEEE relevantes", "horasEstimadas": 4}, {"nombre": "Redundancia y alta disponibilidad: PRP, HSR y otros esquemas", "horasEstimadas": 3}, {"nombre": "Integración, pruebas y monitoreo: herramientas y métricas de rendimiento", "horasEstimadas": 2}], "titulo": "Garantizar determinismo y calidad de servicio en redes industriales", "unidad": 4}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1155, "total_tokens": 3612, "output_tokens": 2457, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1216}}, "responseId": "resp_0cf0f3dbba70eaaf00699f98be8b38819594737e7721685d60", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Estudio de protocolos industriales (EtherCAT, Modbus, PROFINET) y técnicas para garantizar determinismo y calidad de servicio en redes."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-26 00:50:04.132967+00', '2026-02-27 14:59:07.024016+00', 48, 64, 'borrador'), - ('0e6f8716-9d95-43e4-97dd-18b5e34220a8', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CYB306', 'Algoritmos Distribuidos y Redes de Sensores', 'OBLIGATORIA', 5, 3, 'e8de5e3f-3ac1-45bf-a1fb-454cca534f71', NULL, '{"ciclo": "Sexto ciclo", "clave_de_la_asignatura": "CYB306", "criterios_de_evaluacion": "Proyecto final de diseño e implementación (30%), Exámenes parciales y final (30%), Laboratorios y simulaciones (25%), Tareas y ejercicios de solución (10%), Participación y prácticas en clase (5%)", "fines_de_aprendizaje_o_formacion": "Formar al estudiante en el diseño, análisis e implementación de algoritmos distribuidos aplicados a redes de sensores y redes de control. Al concluir la asignatura, el estudiante será capaz de seleccionar y adaptar protocolos de consenso, agregación y ruteo; aplicar técnicas de sincronización; y diseñar soluciones con tolerancia a fallos y escalabilidad para aplicaciones de monitoreo y control en entornos distribuidos.", "modalidades_tecnologicas_e_informaticas": "Uso de simuladores y herramientas de emulación (por ejemplo NS-3, Cooja, OMNeT++), entornos de programación (Python, C/C++), herramientas de análisis (MATLAB/Octave), repositorios y control de versiones (Git), plataforma de gestión de aprendizaje (LMS) para entregas y foros, y acceso a laboratorios remotos o plataformas de sensorización para pruebas prácticas.", "actividades_de_aprendizaje_independientes": "Lectura dirigida de artículos y capítulos clave, desarrollo de simulaciones y experimentos en entornos virtuales, resolución de problemas y tareas de modelado, preparación del proyecto final (diseño, implementación y pruebas), y estudio para evaluaciones.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Algoritmos Distribuidos y Redes de Sensores", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales con exposiciones teóricas, sesiones prácticas en laboratorio/simulador guiadas por el académico, análisis y discusión de artículos científicos en seminarios, demostraciones de protocolos y ejercicios de programación en equipo, asesorías para el desarrollo del proyecto final."}', '[{"temas": [{"nombre": "Arquitectura, modelos de comunicación y métricas de desempeño en redes de sensores", "horasEstimadas": 1}], "titulo": "Fundamentos y modelos de redes de sensores", "unidad": 1}, {"temas": [{"nombre": "Protocolos de consenso distribuido y técnicas de sincronización temporal", "horasEstimadas": 1}], "titulo": "Algoritmos de consenso y sincronización", "unidad": 2}, {"temas": [{"nombre": "Algoritmos de agregación distribuida y protocolos de ruteo energéticamente eficientes", "horasEstimadas": 1}], "titulo": "Agregación de datos y ruteo", "unidad": 3}, {"temas": [{"nombre": "Técnicas de detección y tolerancia a fallos, adaptabilidad y diseño escalable", "horasEstimadas": 1}], "titulo": "Tolerancia a fallos y escalabilidad en redes de control", "unidad": 4}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1162, "total_tokens": 3005, "output_tokens": 1843, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1024}}, "responseId": "resp_0c16b1556a5a8dc000699f98bf177881a3aaafa1c84dda0488", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Algoritmos de consenso, agregación y ruteo para redes de sensores; sincronización, tolerancia a fallos y escalabilidad en redes de control."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-26 00:50:04.132967+00', '2026-02-26 00:50:53.787448+00', 4, 7, 'borrador'), - ('7dcfdda7-a87f-4f54-9103-03d35452b997', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CIB301', 'Seguridad en Sistemas de Control Industrial', 'TRONCAL', 5, 9, 'e8de5e3f-3ac1-45bf-a1fb-454cca534f71', NULL, '{"ciclo": "6", "clave_de_la_asignatura": "CIB301", "criterios_de_evaluacion": "Prácticas de laboratorio y ejercicios (30%), Proyecto integrador final (25%), Examen parcial teórico-práctico (15%), Examen final (20%), Participación en clase y entregas de tareas (10%).", "fines_de_aprendizaje_o_formacion": "Formar estudiantes capaces de identificar y evaluar amenazas en entornos OT; aplicar técnicas de hardening y diseño de arquitecturas seguras para PLCs y SCADA; implementar medidas de detección y respuesta ante incidentes en redes industriales, contribuyendo a la disponibilidad y resiliencia de sistemas de control.", "modalidades_tecnologicas_e_informaticas": "Uso de laboratorios virtuales y físicos con simuladores de PLC y entornos SCADA; herramientas de análisis de tráfico (Wireshark), IDS/IPS compatibles con OT (p. ej., Suricata con firmas industriales), herramientas de escaneo y evaluación de vulnerabilidades, entornos de virtualización (VMware/VirtualBox) y plataformas de gestión del aprendizaje (LMS) para entrega de actividades y colaboración. Se emplearán repositorios de código y bancos de casos para prácticas.", "actividades_de_aprendizaje_independientes": "Lectura crítica de artículos y normas, análisis de casos de incidentes, desarrollo y documentación del proyecto integrador, preparación de informes de pruebas de hardening, realización de prácticas en laboratorios virtuales y resolución de ejercicios propuestos en la plataforma LMS.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Seguridad en Sistemas de Control Industrial", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales y seminarios sobre conceptos y casos, demostraciones prácticas en laboratorio, sesiones guiadas de configuración y hardening de equipos, prácticas dirigidas de análisis de tráfico y uso de IDS, trabajo en equipo para el desarrollo del proyecto integrador, tutorías y evaluación formativa."}', '[{"temas": [{"nombre": "Entorno OT: características, diferencias IT/OT y arquitecturas típicas", "horasEstimadas": 3}, {"nombre": "Evolución de ataques a ICS/SCADA, impacto y marco normativo", "horasEstimadas": 3}], "titulo": "Introducción a los sistemas de control industrial y panorama de amenazas", "unidad": 1}, {"temas": [{"nombre": "Arquitectura y funcionamiento de PLCs y controladores programables", "horasEstimadas": 4}, {"nombre": "Vulnerabilidades, vectores de ataque y análisis de casos (Stuxnet, BlackEnergy, etc.)", "horasEstimadas": 4}], "titulo": "Seguridad en PLCs", "unidad": 2}, {"temas": [{"nombre": "Modelos SCADA, componentes críticos y puntos de exposición", "horasEstimadas": 4}, {"nombre": "Vulnerabilidades específicas de SCADA/HMI y estudios de incidentes", "horasEstimadas": 4}], "titulo": "Seguridad en SCADA y sistemas HMI", "unidad": 3}, {"temas": [{"nombre": "Topologías de red OT, segmentación, zonas y conduits", "horasEstimadas": 4}, {"nombre": "Protocolos industriales (Modbus, DNP3, OPC-UA, IEC 61850) y medidas de protección", "horasEstimadas": 6}], "titulo": "Seguridad de redes OT y protocolos industriales", "unidad": 4}, {"temas": [{"nombre": "Hardening de dispositivos, gestores de configuración y control de acceso", "horasEstimadas": 4}, {"nombre": "Diseño de arquitecturas seguras, DMZ OT-IT y mejores prácticas de despliegue", "horasEstimadas": 4}], "titulo": "Hardening y arquitectura segura para entornos industriales", "unidad": 5}, {"temas": [{"nombre": "Sistemas de detección de intrusiones para OT, monitoreo y análisis forense", "horasEstimadas": 4}, {"nombre": "Estrategias de respuesta a incidentes, recuperación y continuidad de operaciones", "horasEstimadas": 4}], "titulo": "Detección, respuesta e mitigación en OT", "unidad": 6}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1157, "total_tokens": 3495, "output_tokens": 2338, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1216}}, "responseId": "resp_0d3769dbe57e500100699f98be4edc819096084da8ff800597", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Principios de ciberseguridad para PLCs, SCADA y redes OT: amenazas, hardening, detección de intrusiones y estrategias de mitigación."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-26 00:50:04.132967+00', '2026-02-27 14:59:23.374315+00', 48, 72, 'borrador'), - ('bd68b521-1338-42ab-95bf-639006e7f582', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CIB402', 'Proyecto de Integración Hardware-Software Industrial', 'OBLIGATORIA', 8, NULL, NULL, NULL, '{"ciclo": "Ciclo 8", "clave_de_la_asignatura": "CIB402", "criterios_de_evaluacion": "Diseño y documentación técnica del proyecto: 20%; Implementación de hardware (dispositivos y PCB): 20%; Desarrollo de firmware/software y calidad del código: 25%; Integración, pruebas y resultados de validación: 20%; Presentación, demostración y defensa del proyecto: 10%; Participación, bitácoras y entregables parciales: 5%.", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura, el estudiante será capaz de concebir, diseñar, implementar y validar un sistema industrial integrado que combine electrónica de potencia y señal, plataformas de control (microcontroladores/PLCs), comunicaciones industriales y software embebido. Desarrollará competencias para tomar decisiones de diseño, aplicar normas de seguridad y confiabilidad, elaborar documentación técnica completa y llevar a cabo la puesta en marcha y defensa de un proyecto industrial real o simulado.", "modalidades_tecnologicas_e_informaticas": "Clases presenciales en laboratorio con estaciones de trabajo equipadas (osciloscopios, analizadores lógicos, fuentes, bancos de carga), acceso a kits de desarrollo y PLCs, software de diseño electrónico (ECAD/PCB), simuladores SPICE/RTOS y entornos de programación embebida (IDE para microcontroladores). Plataforma LMS para entrega de actividades, repositorio Git para control de versiones, herramientas de gestión de proyectos (Trello/Planner) y videoconferencia para seguimiento. Conexiones a redes de prueba y herramientas de análisis de tráfico para prácticas de comunicaciones y ciberseguridad.", "actividades_de_aprendizaje_independientes": "Búsqueda y estudio de documentación técnica y normas; simulación de circuitos y algoritmos de control; diseño y verificación de PCB; desarrollo y prueba de módulos de firmware en entornos locales; preparación de documentación técnica (manuales, especificaciones y plan de pruebas); elaboración de reportes de avance y preparación de la demostración final.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Proyecto de Integración Hardware-Software Industrial", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Sesiones de laboratorio guiadas para diseño y montaje de prototipos; talleres de programación embebida y configuración de PLCs; revisión de diseño y code reviews semanales; prácticas de integración y pruebas supervisadas; asesorías de gestión del proyecto, seguridad y normas; ensayos de puesta en marcha y simulacros de defensa final con retroalimentación del académico."}', '[{"temas": [{"nombre": "Introducción al proyecto integrador y definición de alcance", "horasEstimadas": 4}, {"nombre": "Requisitos funcionales y de rendimiento", "horasEstimadas": 4}, {"nombre": "Selección de arquitectura hardware y componentes", "horasEstimadas": 4}, {"nombre": "Normas, seguridad eléctrica y confiabilidad en entornos industriales", "horasEstimadas": 4}], "titulo": "Análisis y especificación del sistema industrial", "unidad": 1}, {"temas": [{"nombre": "Sensores y transductores: selección y acondicionamiento de señal", "horasEstimadas": 6}, {"nombre": "Actuadores y drivers de potencia: diseño y protección", "horasEstimadas": 6}, {"nombre": "Fuentes de alimentación industriales y gestión energética", "horasEstimadas": 6}], "titulo": "Diseño electrónico para aplicaciones industriales", "unidad": 2}, {"temas": [{"nombre": "Microcontroladores y PLCs: características y criterios de selección", "horasEstimadas": 6}, {"nombre": "Diseño de PCB para entornos industriales y prácticas de ensamblado", "horasEstimadas": 6}, {"nombre": "Interfaces físicas: buses industriales, aislamiento y protección electromagnética", "horasEstimadas": 6}], "titulo": "Plataformas de control y diseño de placas", "unidad": 3}, {"temas": [{"nombre": "Programación embebida en tiempo real y uso de RTOS", "horasEstimadas": 6}, {"nombre": "Diseño y sintonización de controladores PID y avanzados", "horasEstimadas": 6}, {"nombre": "Implementación de funciones de seguridad y supervisión", "horasEstimadas": 6}], "titulo": "Desarrollo de firmware y estrategias de control", "unidad": 4}, {"temas": [{"nombre": "Redes industriales y arquitecturas de comunicación", "horasEstimadas": 4}, {"nombre": "Protocolos clave: Modbus, Profinet, OPC UA y sus aplicaciones", "horasEstimadas": 6}, {"nombre": "IIoT, telemetría y consideraciones de seguridad en redes industriales", "horasEstimadas": 6}], "titulo": "Comunicaciones y ciberseguridad industrial", "unidad": 5}, {"temas": [{"nombre": "Integración HW-SW: pruebas funcionales, de integración y validación", "horasEstimadas": 4}, {"nombre": "Gestión del proyecto, documentación técnica y normas de entrega", "horasEstimadas": 3}, {"nombre": "Puesta en marcha, demostración y defensa del proyecto integrador", "horasEstimadas": 3}], "titulo": "Integración, pruebas y entrega del proyecto", "unidad": 6}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1146, "total_tokens": 3787, "output_tokens": 2641, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1216}}, "responseId": "resp_0659d9630024d1ca0069a1b0c6fa0c8195a04b78b79d447693", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Desarrollo integrador de un sistema industrial completo que combine diseño electrónico, firmware, comunicaciones y control."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-27 14:57:08.739803+00', '2026-02-27 14:58:02.120324+00', 96, 80, 'borrador'), - ('0e527a2b-b7c5-43c8-8ca1-76014a26f877', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CIB-ARC105', 'Arquitectura de Software para Sistemas de Control', 'OBLIGATORIA', 4, 5, 'cabe3be1-346a-4660-b15e-6b6051c4e2b6', NULL, '{"ciclo": "Quinto ciclo", "clave_de_la_asignatura": "CIB-ARC105", "criterios_de_evaluacion": "Laboratorios prácticos y ejercicios de integración (25%), Proyecto integrador de arquitectura para un sistema de control (40%), Examen parcial sobre conceptos y patrones (20%), Presentación y defensa del proyecto (10%), Participación y asistencia en actividades dirigidas (5%)", "fines_de_aprendizaje_o_formacion": "Que el estudiante diseñe y evalúe arquitecturas de software robustas para sistemas de supervisión y control industrial, aplicando patrones de diseño, principios de modularidad y buenas prácticas de pruebas y CI/CD, considerando requisitos de confiabilidad, seguridad y mantenibilidad propios del dominio industrial.", "modalidades_tecnologicas_e_informaticas": "Uso de herramientas y entornos como repositorios Git, plataformas de CI/CD (por ejemplo Jenkins, GitLab CI), contenedores Docker, simuladores/entornos de PLC y SCADA para prácticas, entornos de pruebas automatizadas (unitarias, integración), y herramientas de modelado (UML, diagramas de arquitectura). Se emplearán recursos digitales para entrega y evaluación (repositorios remotos, pipelines en la nube) y material multimedia para apoyo docente.", "actividades_de_aprendizaje_independientes": "Estudio y lectura crítica de patrones y casos de estudio; desarrollo de módulos de software y pruebas unitarias; implementación y configuración de pipelines CI/CD para proyectos prácticos; preparación de entregables del proyecto integrador; revisión de documentación técnica y normas de seguridad aplicables al contexto industrial.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Arquitectura de Software para Sistemas de Control", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales sobre patrones y principios arquitectónicos; sesiones prácticas guiadas de diseño modular y de integración con simuladores industriales; talleres para configurar pipelines CI/CD y ejecutar pruebas automatizadas; revisión y retroalimentación de avances del proyecto integrador; exposiciones y defensa de soluciones arquitectónicas."}', '[{"temas": [{"nombre": "Patrones de diseño y arquitectura aplicados a sistemas de control (p. ej. MVC, Broker, Pipe-and-Filter, Event-Driven)", "horasEstimadas": 1}, {"nombre": "Modularidad, encapsulación, interfaces y gestión del acoplamiento en software de supervisión y control (incluye diseño de APIs y separación de responsabilidades)", "horasEstimadas": 1}, {"nombre": "Pruebas, integración continua y despliegue (CI/CD) en entornos industriales: estrategias de testing, pipelines, contenedores y consideraciones de seguridad y disponibilidad", "horasEstimadas": 1}], "titulo": "Fundamentos y prácticas esenciales para arquitecturas de software en sistemas de supervisión y control industrial", "unidad": 1}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1152, "total_tokens": 2870, "output_tokens": 1718, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 960}}, "responseId": "resp_023b7d45966ee21c00699f98be456881a0b4d4c94ad6ff9824", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Patrones de diseño, modularidad, pruebas y CI/CD aplicados a software de supervisión y control industrial."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-26 00:50:04.132967+00', '2026-02-27 14:59:09.706095+00', 3, 6, 'borrador'), - ('4afb3a31-e84a-4a2a-ad43-b385fcf63916', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CYB302', 'Control Robusto y Estocástico', 'TRONCAL', 6, 1, NULL, NULL, '{"ciclo": "6 (TRONCAL)", "clave_de_la_asignatura": "CYB302", "criterios_de_evaluacion": "Exámenes parciales (2): 30%; Proyecto integrador (diseño, implementación y defensa): 25%; Examen final: 20%; Informes de laboratorio y ejercicios de simulación: 15%; Participación, exposiciones y actividades en clase: 10%. (Total 100%)", "fines_de_aprendizaje_o_formacion": "Proveer al estudiante de los fundamentos teóricos y herramientas prácticas para el diseño y análisis de controladores robustos y estocásticos. Al concluir la asignatura, el estudiante será capaz de modelar incertidumbres y ruido, evaluar estabilidad robusta (determinista y en sentido probabilístico), formular y resolver problemas H-infinito y LQG mediante LMIs y optimización convexa, desarrollar filtros robustos, y validar soluciones mediante simulación y experimentación en casos de estudio aplicados.", "modalidades_tecnologicas_e_informaticas": "Uso de MATLAB/Simulink (incluyendo Robust Control Toolbox y Control System Toolbox), Python (NumPy, SciPy, control, cvxpy), entornos Jupyter, solvers de SDP (por ejemplo, SeDuMi, SDPT3 desde YALMIP o CVX), herramientas de control robusto y análisis de incertidumbre, repositorios Git para gestión de código, plataforma LMS para entrega de tareas y foros, y herramientas de videoconferencia para tutorías y presentaciones.", "actividades_de_aprendizaje_independientes": "Lectura crítica de capítulos asignados y artículos; resolución de problemas teóricos; desarrollo de simulaciones y experimentos computacionales; preparación del proyecto integrador (diseño, implementación y reporte); prácticas con solvers de LMI y análisis numérico; revisión y estudio de herramientas de software recomendadas.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Control Robusto y Estocástico", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales con demostraciones y derivaciones formales; sesiones guiadas de resolución de problemas; prácticas de laboratorio computacional supervisadas (implementación de controladores y filtros, uso de solvers); seminarios sobre artículos y casos de estudio; tutorías para el proyecto integrador; evaluaciones parciales y retroalimentación."}', '[{"temas": [{"nombre": "Revisión de sistemas lineales: modelos en espacio de estados y funciones de transferencia", "horasEstimadas": 3}, {"nombre": "Normas, métricas de estabilidad y funciones de Lyapunov", "horasEstimadas": 3}, {"nombre": "Introducción a la probabilidad y procesos estocásticos aplicados al control", "horasEstimadas": 2}], "titulo": "Fundamentos matemáticos y modelado de incertidumbres", "unidad": 1}, {"temas": [{"nombre": "Tipos de incertidumbres: estructuradas y no estructuradas; modelado de perturbaciones", "horasEstimadas": 2}, {"nombre": "Teorema del pequeño ganancia, estabilidad robusta y passivity", "horasEstimadas": 3}, {"nombre": "Introducción al control H-infinito: objetivos y formulación básica", "horasEstimadas": 5}], "titulo": "Fundamentos del control robusto", "unidad": 2}, {"temas": [{"nombre": "Formulación matricial del problema H-infinito y ecuaciones de Riccati", "horasEstimadas": 4}, {"nombre": "Enfoques basados en LMI para diseño robusto", "horasEstimadas": 3}, {"nombre": "Interpretación en frecuencia y selección de filtros de ponderación", "horasEstimadas": 3}], "titulo": "Diseño H-infinito y métodos relacionados", "unidad": 3}, {"temas": [{"nombre": "Ecuaciones diferenciales estocásticas e introducción al cálculo de Itô", "horasEstimadas": 3}, {"nombre": "Control óptimo estocástico: teoría LQG", "horasEstimadas": 3}, {"nombre": "Filtrado de Kalman: formulación y propiedades", "horasEstimadas": 2}], "titulo": "Fundamentos de control estocástico", "unidad": 4}, {"temas": [{"nombre": "Formulaciones risk-sensitive y combinaciones H2/H-infinito en presencia de ruido", "horasEstimadas": 3}, {"nombre": "Estimación robusta y filtros con incertidumbre de modelo", "horasEstimadas": 3}, {"nombre": "Estabilidad en sentido medio-cuadrático y criterios probabilísticos", "horasEstimadas": 2}], "titulo": "Robustez en escenarios estocásticos", "unidad": 5}, {"temas": [{"nombre": "Planteamiento de problemas con LMI, solvers y verificación numérica", "horasEstimadas": 3}, {"nombre": "Optimización convexa y programación semidefinida aplicada al control", "horasEstimadas": 3}, {"nombre": "Cuestiones numéricas, reducción de modelos y validación por simulación", "horasEstimadas": 2}], "titulo": "Herramientas computacionales y LMIs", "unidad": 6}, {"temas": [{"nombre": "Control adaptativo y estimación de parámetros en presencia de incertidumbre", "horasEstimadas": 2}, {"nombre": "Modos deslizantes y técnicas robustas para sistemas no lineales", "horasEstimadas": 2}, {"nombre": "Visión general de μ-análisis, D-K iteration y gain-scheduling", "horasEstimadas": 2}], "titulo": "Temas avanzados en control robusto", "unidad": 7}, {"temas": [{"nombre": "Casos de estudio: vehículos autónomos, redes de control y sistemas críticos", "horasEstimadas": 2}, {"nombre": "Laboratorios de simulación: implementación de H-infinito, LQG y filtros robustos", "horasEstimadas": 2}, {"nombre": "Presentación y defensa del proyecto integrador", "horasEstimadas": 2}], "titulo": "Aplicaciones, simulaciones y proyecto integrador", "unidad": 8}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1151, "total_tokens": 4585, "output_tokens": 3434, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1728}}, "responseId": "resp_068d88af81f5c8770069a1b0c6d78c819e9a12c3f4c7ff8c05", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Fundamentos y técnicas para diseñar controladores robustos y estocásticos que garanticen estabilidad frente a incertidumbres y ruido."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-27 14:57:08.739803+00', '2026-03-04 17:53:49.751985+00', 64, 56, 'borrador'), - ('5df8f36f-6bd6-41ce-beac-63e3bc2736c0', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CIB-EMB101', 'Software para Sistemas Embebidos', 'TRONCAL', 6, 4, 'cabe3be1-346a-4660-b15e-6b6051c4e2b6', NULL, '{"ciclo": "Cuarto ciclo", "clave_de_la_asignatura": "CIB-EMB101", "criterios_de_evaluacion": "Prácticas de laboratorio y ejercicios (40%), Proyecto final de integración (30%), Examen teórico-práctico (20%), Tareas, informes y participación (10%). Total 100%.", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura el estudiante será capaz de desarrollar software para microcontroladores usando C/C++ y Python (MicroPython/CircuitPython), diseñar e implementar controladores de periféricos, establecer comunicaciones serie (UART, SPI, I2C) y aplicar técnicas de depuración y diagnóstico en plataformas embebidas. (Asignatura troncal; 6 créditos: 4 horas académicas presenciales y 8 horas independientes).", "modalidades_tecnologicas_e_informaticas": "Recursos: placas de desarrollo (STM32, ESP32, Raspberry Pi Pico), toolchains y compiladores (GCC ARM, toolchains para ESP), entornos y extensiones (VS Code, PlatformIO, Arduino IDE), depuradores y herramientas (GDB, OpenOCD, J-Link, ST-Link), analizadores lógicos y osciloscopio, terminales serie (PuTTY, minicom), simuladores/emuladores y repositorios de código (Git/GitHub). Para la modalidad mixta o no escolarizada se emplearán entornos virtuales, acceso remoto a placas y laboratorios virtuales.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas y estudio de manuales de microcontroladores; resolución de ejercicios de programación en C/C++ y Python; desarrollo y prueba de drivers para periféricos; diseño y documentación del proyecto final; realización de informes de laboratorio; prácticas con herramientas de depuración disponibles; participación en foros y revisión de material digital.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Software para Sistemas Embebidos", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales para presentación de conceptos y arquitecturas; sesiones prácticas en laboratorio con montaje de placas y programación en vivo; talleres guiados de desarrollo de drivers y comunicaciones; demostraciones de depuración con JTAG/SWD y análisis con osciloscopio/analizador lógico; tutorías para el proyecto final y revisiones de avances."}', '[{"temas": [{"nombre": "Introducción a sistemas embebidos: arquitecturas, restricciones y modelos de ejecución", "horasEstimadas": 1}, {"nombre": "Nuevo tema", "horasEstimadas": 2}], "titulo": "Fundamentos y entorno de desarrollo", "unidad": 1}, {"temas": [{"nombre": "Programación en C/C++ para microcontroladores: estructura de proyectos, manejo de memoria y drivers básicos", "horasEstimadas": 1}, {"nombre": "Python en microcontroladores (MicroPython/CircuitPython) y comunicaciones serie: UART, SPI, I2C", "horasEstimadas": 1}], "titulo": "Programación y manejo de periféricos", "unidad": 2}, {"temas": [{"nombre": "Técnicas de depuración en plataformas embebidas: JTAG/SWD, GDB/OpenOCD; uso de osciloscopio y analizador lógico; integración y pruebas del sistema", "horasEstimadas": 1}], "titulo": "Depuración, pruebas e integración", "unidad": 3}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1158, "total_tokens": 3636, "output_tokens": 2478, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1600}}, "responseId": "resp_0f157e45c1eb391200699f98bebf9c819395176225457b2391", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Programación en C/C++ y Python para microcontroladores, manejo de periféricos, comunicaciones serie y técnicas de depuración en plataformas embebidas."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-26 00:50:04.132967+00', '2026-02-27 15:00:17.205153+00', 4, 8, 'borrador'), - ('784a2af2-8828-4c96-992d-339ede5e5b92', '3ebc1d1c-e950-4a6e-948f-bb89efa40e77', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'MKT-EXP305', 'Diseño experimental y pruebas A/B para mercados', 'TRONCAL', 5, NULL, NULL, NULL, '{"ciclo": "Troncal", "clave_de_la_asignatura": "MKT-EXP305", "criterios_de_evaluacion": "Participación y actividades en clase: 10%; Cuestionarios y ejercicios prácticos: 15%; Tareas y laboratorios de implementación: 20%; Examen parcial teórico-práctico: 20%; Proyecto final (diseño, ejecución simulada/real y reporte de resultados): 35%. Total: 100%.", "fines_de_aprendizaje_o_formacion": "Formar profesionales capaces de diseñar, implementar y analizar experimentos y pruebas A/B en contextos de marketing digital para optimizar campañas y decisiones comerciales. El estudiante será competente en definir métricas relevantes, calcular tamaños de muestra, ejecutar pruebas en entornos reales, analizar resultados aplicando métodos estadísticos (frecuentistas y bayesianos), identificar y controlar sesgos, y aplicar criterios éticos y regulatorios en experimentación con usuarios.", "modalidades_tecnologicas_e_informaticas": "Uso de plataformas de experimentación (p. ej. Optimizely, VWO, LaunchDarkly), herramientas de analítica (Google Analytics, Mixpanel), entornos de análisis estadístico (R, Python/Jupyter), bases de datos y pipelines ETL, control de versiones (Git), plataformas de visualización (Tableau, Power BI) y herramientas colaborativas (Slack, Google Workspace). Para la modalidad mixta o a distancia se requerirá conexión estable, entorno virtual de laboratorios y acceso a datos de prueba anonimizados.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas de artículos y guías técnicas, resolución de ejercicios de cálculo de potencia y análisis estadístico, implementación de pruebas en entornos de laboratorio, preparación del proyecto final (diseño experimental, recolección/uso de datos simulados o reales, análisis e informe), revisión por pares y estudio de casos de la literatura.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Diseño experimental y pruebas A/B para mercados", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales sobre teoría y casos; sesiones prácticas guiadas en laboratorio para instrumentación y análisis; talleres de diseño de experimentos y revisión crítica; sesiones de equipo para desarrollo del proyecto final; presentaciones y defensa de proyectos con retroalimentación."}', '[{"temas": [{"nombre": "Introducción a los experimentos y pruebas A/B: objetivos y casos de uso", "horasEstimadas": 2}, {"nombre": "Métricas clave y definición de KPI para pruebas", "horasEstimadas": 2}, {"nombre": "Calidad de datos y preparación para experimentos", "horasEstimadas": 2}], "titulo": "Fundamentos de experimentación en marketing", "unidad": 1}, {"temas": [{"nombre": "Principios de aleatorización y asignación de unidades", "horasEstimadas": 3}, {"nombre": "Diseños factoriales, multivariantes y segmentación", "horasEstimadas": 3}, {"nombre": "Tamaño de muestra y potencia estadística", "horasEstimadas": 2}, {"nombre": "Bloqueo, estratificación y manejo de covariables", "horasEstimadas": 2}, {"nombre": "Pruebas piloto y validación previa", "horasEstimadas": 2}], "titulo": "Diseño experimental", "unidad": 2}, {"temas": [{"nombre": "Arquitectura de experimentación: front-end, back-end y flags", "horasEstimadas": 3}, {"nombre": "Instrumentación y seguimiento: eventos, cohortes y atribución", "horasEstimadas": 3}, {"nombre": "Asignación de tráfico, ramp-up y control de calidad en producción", "horasEstimadas": 2}, {"nombre": "Integración con pipelines de datos y testing automatizado", "horasEstimadas": 2}], "titulo": "Implementación de pruebas A/B en plataformas", "unidad": 3}, {"temas": [{"nombre": "Planteamiento de hipótesis, pruebas de significancia y errores tipo I/II", "horasEstimadas": 3}, {"nombre": "Intervalos de confianza, tamaños del efecto y métricas prácticas", "horasEstimadas": 3}, {"nombre": "Métodos bayesianos y comparativa con enfoques frecuentistas", "horasEstimadas": 2}, {"nombre": "Corrección por comparaciones múltiples y control del FDR", "horasEstimadas": 2}, {"nombre": "Pruebas secuenciales, stopping rules y problemas de peeking", "horasEstimadas": 2}], "titulo": "Análisis estadístico de resultados", "unidad": 4}, {"temas": [{"nombre": "Fuentes de sesgo: desviaciones de selección y supervivencia", "horasEstimadas": 2}, {"nombre": "Confusores, spillover y efectos indirectos", "horasEstimadas": 2}, {"nombre": "Violaciones de supuestos y diagnóstico de datos experimentales", "horasEstimadas": 2}, {"nombre": "Modelos de inferencia causal y análisis de uplift", "horasEstimadas": 2}], "titulo": "Validez, sesgos y causalidad", "unidad": 5}, {"temas": [{"nombre": "Ética en pruebas con usuarios: consentimiento, privacidad y daño mínimo", "horasEstimadas": 2}, {"nombre": "Cumplimiento normativo y manejo seguro de datos", "horasEstimadas": 2}, {"nombre": "Estudios de caso: campañas optimizadas y lecciones aprendidas", "horasEstimadas": 1}, {"nombre": "Presentación y defensa del proyecto final", "horasEstimadas": 1}], "titulo": "Aspectos éticos, regulatorios y casos aplicados", "unidad": 6}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "responseId": "resp_0940d0c7754514fe0069a1e6954bb481a088e6aaeffbbe102e"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Métodos de diseño experimental, pruebas A/B y análisis de resultados para optimizar campañas; incluye validación estadística, control de sesgos y ética en pruebas con usuarios."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-02-27 18:46:42.854824+00', '2026-02-27 18:48:32.596303+00', 54, 72, 'borrador'), - ('f4c16a62-3b5c-486e-b263-cd1c5fd57046', '3ebc1d1c-e950-4a6e-948f-bb89efa40e77', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'MKT-VIS304', 'Visualización avanzada de datos para marketing', 'OBLIGATORIA', 4, NULL, NULL, NULL, '{"ciclo": "6", "clave_de_la_asignatura": "MKT-VIS304", "criterios_de_evaluacion": "Proyecto final (dashboard interactivo aplicado a un caso de marketing) 50%; Actividades prácticas y entregables semanales (mini-dashboards, ejercicios de diseño) 30%; Presentación y defensa del proyecto 10%; Participación y evaluaciones formativas (críticas de pares, quizzes) 10%. Total: 100%", "fines_de_aprendizaje_o_formacion": "Que el estudiante diseñe, implemente y valide visualizaciones interactivas y dashboards orientados a marketing capaces de comunicar insights de mercado y apoyar decisiones comerciales. Desarrollará habilidades para seleccionar representaciones gráficas adecuadas, aplicar principios de usabilidad, integrar datos de diversas fuentes y optimizar visualizaciones para distintos públicos y canales.", "modalidades_tecnologicas_e_informaticas": "Uso de plataformas y herramientas: Tableau Desktop/Server, Power BI, bibliotecas web (Plotly, D3.js), Python (Pandas, Plotly, Altair) y/o R (ggplot2, Shiny). Entorno virtual de aprendizaje (LMS) para entrega y retroalimentación, repositorio de código (Git/GitHub), navegador web moderno, acceso a bases de datos de marketing (CSV/SQL/APIs) y servicios de hospedaje para despliegue de dashboards. Recursos multimedia para demostraciones y software de control de versiones para trabajo colaborativo.", "actividades_de_aprendizaje_independientes": "Revisión de lecturas y casos de estudio sobre visualización y storytelling; tutoriales prácticos en Tableau/Power BI y bibliotecas web; implementación de ejercicios guiados y retos de optimización; elaboración y refinamiento del proyecto final; análisis de datasets de marketing y preparación de materiales para la presentación.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Visualización avanzada de datos para marketing", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales cortas sobre principios de diseño y narrativa; sesiones prácticas guiadas en laboratorio para construcción de dashboards; talleres de usabilidad y pruebas de usuario; revisiones críticas de trabajos en clase (crítica guiada); tutorías para acompañar el desarrollo del proyecto final y presentación de casos reales del sector."}', '[{"temas": [{"nombre": "Percepción visual, encuadres y narrativa de datos para insights de mercado", "horasEstimadas": 1}], "titulo": "Principios de visualización y storytelling aplicado al marketing", "unidad": 1}, {"temas": [{"nombre": "Diseño y desarrollo de dashboards interactivos con Tableau, Power BI y bibliotecas web (Plotly/D3)", "horasEstimadas": 1}], "titulo": "Herramientas y técnicas interactivas", "unidad": 2}, {"temas": [{"nombre": "Métricas de usabilidad, pruebas A/B, performance y publicación en entornos comerciales", "horasEstimadas": 1}], "titulo": "Evaluación, optimización y despliegue de visualizaciones para la toma de decisiones", "unidad": 3}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "responseId": "resp_027a42aa035d66610069a1e3b1ba808190808204bd46d69fc9"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Técnicas y herramientas para diseñar visualizaciones interactivas y dashboards que comuniquen insights de mercado y apoyen la toma de decisiones."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-02-27 18:34:22.194933+00', '2026-02-27 18:50:18.843151+00', 3, 6, 'borrador'), - ('ab4cf9d3-cacb-4a27-81e6-eebe6f2bf182', '3ebc1d1c-e950-4a6e-948f-bb89efa40e77', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'MKT-SOC320', 'Escucha social y análisis de redes', 'OBLIGATORIA', 6, NULL, NULL, NULL, '{"ciclo": "Sexto ciclo", "clave_de_la_asignatura": "MKT-SOC320", "criterios_de_evaluacion": "Proyecto final integrado con reporte técnico y dashboard (30%); Prácticas y ejercicios de laboratorio (25%); Examen parcial teórico-práctico (15%); Presentación y defensa del estudio de caso (15%); Participación, tareas y entregables individuales (15%). Total 100%.", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura, el estudiante será capaz de diseñar y operar procesos de escucha social, seleccionar y configurar fuentes y herramientas de monitoreo, aplicar técnicas de procesamiento de texto y análisis de sentimiento, construir y analizar redes sociales para detectar comunidades e influenciadores, y generar insights accionables presentados en reportes y dashboards. Además, integrará criterios de calidad y prácticas éticas en la recolección y análisis de datos para apoyar la toma de decisiones en marketing y comunicación.", "modalidades_tecnologicas_e_informaticas": "Empleo de plataformas de monitoreo y escucha (p. ej., Brandwatch, Talkwalker, Hootsuite, herramientas con API), APIs públicas (X/Twitter, Reddit u otras según disponibilidad), software de análisis y scripting (Python con librerías como pandas, scikit-learn, spaCy, NetworkX; o R con tidyverse y igraph), herramientas de visualización (Gephi, Tableau, Power BI o librerías de Python/R), entornos de desarrollo colaborativo (Jupyter Notebooks, Git/GitHub) y servicios en la nube para procesamiento y almacenamiento. Se privilegiará el uso de datasets reales y entornos que permitan reproducibilidad y control de accesos por privacidad.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas y revisión de artículos técnicos; preparación y limpieza de conjuntos de datos; desarrollo de scripts de preprocesamiento y modelos de sentimiento; análisis exploratorio de redes y visualizaciones; elaboración de informes parciales; preparación del proyecto final (recolección de datos, análisis, dashboard y reporte escrito); reflexión crítica sobre ética y sesgos en casos reales.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Escucha social y análisis de redes", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales sobre conceptos y metodologías; sesiones prácticas guiadas en laboratorio para configuración de herramientas y desarrollo de scripts; talleres de visualización y construcción de dashboards; sesiones de análisis de casos reales con discusión dirigida; tutorías para avance del proyecto final; presentaciones y defensa de trabajos con retroalimentación del académico."}', '[{"temas": [{"nombre": "Panorama de la escucha social: objetivos y alcances", "horasEstimadas": 2}, {"nombre": "Actores, canales y ecosistema mediático (medios tradicionales vs. digitales)", "horasEstimadas": 2}, {"nombre": "Indicadores y KPIs para monitoreo y análisis", "horasEstimadas": 2}], "titulo": "Fundamentos de escucha social y métricas clave", "unidad": 1}, {"temas": [{"nombre": "Fuentes relevantes: redes sociales, foros, blogs y medios", "horasEstimadas": 3}, {"nombre": "Herramientas y plataformas de monitoreo: configuración y uso básico", "horasEstimadas": 3}, {"nombre": "Consideraciones de muestreo, representatividad y sesgos de datos", "horasEstimadas": 2}], "titulo": "Fuentes de datos y recolección", "unidad": 2}, {"temas": [{"nombre": "Preprocesamiento de texto: tokenización, lematización y normalización", "horasEstimadas": 3}, {"nombre": "Detección de idioma, manejo de jerga y emojis", "horasEstimadas": 2}, {"nombre": "Técnicas de análisis de sentimiento: enfoques lexicón vs. ML/Deep Learning", "horasEstimadas": 3}, {"nombre": "Extracción de tópicos y reconocimiento de entidades para enriquecer insights", "horasEstimadas": 2}], "titulo": "Procesamiento de texto y análisis de sentimiento", "unidad": 3}, {"temas": [{"nombre": "Representación de redes: nodos, enlaces y estructuras básicas", "horasEstimadas": 2}, {"nombre": "Construcción de grafos a partir de interacciones y menciones", "horasEstimadas": 2}, {"nombre": "Métricas de red: centralidad, densidad y cohesión", "horasEstimadas": 2}, {"nombre": "Algoritmos de detección de comunidades e identificación de clústeres temáticos", "horasEstimadas": 2}], "titulo": "Análisis de redes y detección de comunidades", "unidad": 4}, {"temas": [{"nombre": "Visualización de series temporales, temas y sentimiento", "horasEstimadas": 3}, {"nombre": "Visualización de redes y storytelling con grafos", "horasEstimadas": 3}, {"nombre": "Construcción de dashboards y elaboración de reportes accionables", "horasEstimadas": 2}], "titulo": "Visualización, reporting y generación de insights accionables", "unidad": 5}, {"temas": [{"nombre": "Control de calidad: verificación, validación y métricas de desempeño", "horasEstimadas": 2}, {"nombre": "Privacidad, sesgos y consideraciones éticas en escucha social", "horasEstimadas": 3}, {"nombre": "Estudio de caso integrado: análisis completo y presentación de resultados", "horasEstimadas": 3}], "titulo": "Calidad, ética y aplicación práctica integrada", "unidad": 6}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "responseId": "resp_0499d1061d3902900069a1e7b34a5c819e89ca861058ebd55c"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Técnicas y herramientas para monitoreo de medios y redes, análisis de sentimiento y detección de comunidades; generación de insights accionables con criterios de calidad y ética."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-02-27 18:51:30.065311+00', '2026-02-27 18:52:33.470628+00', 48, 96, 'borrador'), - ('2f5cf4c4-2f5d-4508-a520-adb340a709d2', '3ebc1d1c-e950-4a6e-948f-bb89efa40e77', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'MKT-ATR311', 'Modelos de atribución omnicanal y optimización', 'OPTATIVA', 6, NULL, NULL, NULL, '{"ciclo": "Optativa", "clave_de_la_asignatura": "MKT-ATR311", "criterios_de_evaluacion": "Proyecto final de modelado y optimización omnicanal (40%); Laboratorios prácticos y entregables de modelado (30%); Evaluaciones parciales y quizzes sobre conceptos y métodos (20%); Participación en clase, discusión de casos y asistencia (10%). Total: 100%.", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura, el estudiante comprenderá y aplicará métodos estadísticos y de machine learning para atribuir conversiones entre canales, estimar ROI y diseñar estrategias de optimización de presupuesto publicitario en entornos omnicanal. Podrá preparar y limpiar datos multifuente, seleccionar y entrenar modelos de atribución, validar resultados, interpretar métricas de desempeño y proponer asignaciones de presupuesto basadas en evidencia para mejorar la eficiencia publicitaria. Esta formación contribuye al perfil de egreso orientado a la analítica de marketing y la toma de decisiones basada en datos.", "modalidades_tecnologicas_e_informaticas": "Se emplearán herramientas y recursos tecnológicos como Python (pandas, scikit-learn, statsmodels), R (opcional), entornos Jupyter/Colab, plataformas de visualización (Tableau, Power BI, matplotlib/seaborn), acceso a APIs de plataformas publicitarias (Google Ads, Meta), sistemas de gestión de datos (CSV/Parquet, bases de datos SQL), entornos de cómputo en la nube para procesamiento y, cuando sea necesario, herramientas para experimentación y A/B testing. Para la modalidad mixta o no escolarizada, se requerirá acceso estable a internet, repositorios Git y entorno de ejecución remoto.", "actividades_de_aprendizaje_independientes": "Se estiman 8 horas independientes para: revisión de lecturas y artículos académicos sobre modelos de atribución; prácticas de limpieza y preparación de datasets omnicanal; implementación y ajuste de modelos estadísticos y de ML; análisis e interpretación de resultados; preparación del proyecto final de optimización de presupuesto; participación en foros y revisión de materiales complementarios.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Modelos de atribución omnicanal y optimización", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Durante las 4 horas académicas se desarrollarán clases magistrales sobre teoría y métodos, sesiones guiadas de laboratorio con datasets reales o simulados, análisis de casos prácticos de atribución omnicanal, demostraciones de implementación de modelos y tutoría directa para el proyecto final; además se promoverán discusiones críticas sobre limitaciones y consideraciones éticas en el uso de datos."}', '[{"temas": [{"nombre": "Fundamentos de atribución: objetivos, métricas clave y limitaciones", "horasEstimadas": 1}, {"nombre": "Fuentes de datos, tracking omnicanal y limpieza/preprocesamiento", "horasEstimadas": 1}], "titulo": "Fundamentos y preparación de datos para atribución omnicanal", "unidad": 1}, {"temas": [{"nombre": "Modelos estadísticos y de machine learning para atribución (Markov, regresión, uplift, modelos basados en eventos)", "horasEstimadas": 1}, {"nombre": "Medición de ROI, validación de modelos y métodos de optimización de presupuesto omnicanal", "horasEstimadas": 1}], "titulo": "Modelado y optimización de presupuesto", "unidad": 2}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "responseId": "resp_0484fafb6df3c7340069a2183cc61481938c722b5997bfdfb8"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Métodos estadísticos y de machine learning para atribuir conversiones entre canales, medir ROI y optimizar presupuesto publicitario omnicanal."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-02-27 22:18:34.556337+00', '2026-02-27 22:19:03.904014+00', 4, 8, 'borrador'), - ('4f147b56-c22c-4363-9db5-5c13d5a9605f', '3ebc1d1c-e950-4a6e-948f-bb89efa40e77', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'MKT-GDP210', 'Gobernanza de datos y privacidad para marketing', 'OBLIGATORIA', 5, NULL, NULL, NULL, '{"ciclo": "6 (Sexto ciclo)", "clave_de_la_asignatura": "MKT-GDP210", "criterios_de_evaluacion": "Proyecto de diseño de política y plan de cumplimiento (30%), Práctica de auditoría de modelo y reporte técnico (25%), Examen teórico sobre marco legal y técnicas (20%), Actividades y participación en clase (10%), Trabajos y estudios de caso independientes (15%). Total: 100%", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura, el estudiante podrá: 1) Identificar y aplicar los marcos legales relevantes para la protección de datos en actividades de marketing. 2) Diseñar y justificar técnicas de anonimización y minimización adecuadas a distintos escenarios de datos de marketing. 3) Implementar mecanismos de gestión de consentimiento y registros de tratamiento conforme a la normativa. 4) Realizar auditorías básicas de modelos predictivos para detectar riesgos de privacidad y sesgos, y proponer medidas correctivas. 5) Elaborar políticas internas de gobernanza de datos que integren cumplimiento legal y buenas prácticas operativas en estudios de mercado y campañas.", "modalidades_tecnologicas_e_informaticas": "Se empleará el Aula virtual (LMS) para distribución de material y evaluaciones; herramientas de análisis de datos y anonimización (p. ej., Python/R con bibliotecas de privacidad, ARX o herramientas equivalentes); plataformas de gestión de consentimiento (CMP), entornos de colaboración (Google Workspace/Office 365), repositorios para documentación de políticas y registros (Git/GitHub o soluciones documentales institucionales) y simuladores o entornos controlados para auditoría de modelos. Se recomienda acceso a navegadores actualizados y conexión estable a internet.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas de legislación y guías (GDPR, CCPA, LOPD); análisis de estudios de caso; ejercicios prácticos de anonimización y pruebas de reidentificación en datasets de ejemplo; elaboración y revisión de borradores de políticas de gobernanza; preparación del proyecto final y del informe de auditoría de modelo.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Gobernanza de datos y privacidad para marketing", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales sobre marco legal y conceptos clave; seminarios de discusión de casos reales; talleres prácticos de anonimización y uso de herramientas; laboratorios para auditoría de modelos y generación de reportes; presentaciones de propuestas de políticas y retroalimentación guiada por el docente."}', '[{"temas": [{"nombre": "Regulaciones internacionales y nacionales (GDPR, LOPD, CCPA) y principios de privacidad aplicables al marketing", "horasEstimadas": 1}], "titulo": "Marco legal y regulatorio para la protección de datos en marketing", "unidad": 1}, {"temas": [{"nombre": "Anonimización, seudonimización, minimización de datos, cifrado y seguridad en almacenamiento/transferencia", "horasEstimadas": 1}], "titulo": "Técnicas y buenas prácticas para protección y anonimización de datos", "unidad": 2}, {"temas": [{"nombre": "Gestión de consentimiento, registros de actividades de tratamiento, auditoría de modelos de ML y diseño/implantación de políticas internas", "horasEstimadas": 1}], "titulo": "Consentimiento, auditoría de modelos y políticas internas de cumplimiento", "unidad": 3}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "responseId": "resp_049e28f94084fd560069a2183c7bd881a1a7560b56b5a6a6b0"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Marco legal y prácticas para protección de datos, anonimización, consentimiento y auditoría de modelos; políticas internas y cumplimiento en estudios de mercado."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-02-27 22:18:34.556337+00', '2026-02-27 22:19:04.437571+00', 3, 6, 'borrador'), - ('1c375545-4de0-429b-90f4-963155593d8c', 'f35bd838-6df7-4a3b-9fbf-879f9b3e6da9', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'LESE101', 'Fundamentos de inclusión y marco normativo', 'TRONCAL', 6, 7, '32708950-6f54-48e2-b0e2-a205686a2ec7', NULL, '{"ciclo": "1er ciclo (Troncal)", "clave_de_la_asignatura": "LESE101", "criterios_de_evaluacion": "Trabajo final (análisis de caso y plan de inclusión): 30%; Ensayo/monografía sobre marco normativo: 20%; Portfolio de evidencias y adaptaciones prácticas: 20%; Participación en talleres y presentaciones grupales: 15%; Quizzes y evaluaciones parciales: 10%; Asistencia y participación en actividades dirigidas: 5%.", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante comprenderá los principios, políticas y marcos normativos nacionales e internacionales que sustentan la inclusión educativa; será capaz de identificar barreras a la participación y aprendizaje, aplicar criterios éticos y legales en la atención educativa, diseñar adaptaciones y planes de inclusión basados en buenas prácticas (incluyendo DUA y ajustes razonables) y evaluar la implementación de políticas y estrategias en contextos escolares.", "modalidades_tecnologicas_e_informaticas": "Uso de plataforma de gestión del aprendizaje (LMS) para distribución de materiales y evaluaciones; videoconferencias y grabaciones con subtitulado para sesiones síncronas; materiales en formatos accesibles (PDF etiquetado, HTML, audio); compatibilidad con lectores de pantalla; acceso a bases de datos legales y repositorios de recursos inclusivos; herramientas colaborativas (documentos compartidos, foros) y aplicaciones de apoyo (software de comunicación aumentativa, ampliadores de pantalla) para prácticas y evidencias.", "actividades_de_aprendizaje_independientes": "Lectura y análisis de textos legales y convenciones internacionales; elaboración de fichas de lectura y resúmenes críticos; preparación de un ensayo sobre un aspecto normativo; diseño y prueba de adaptaciones curriculares para una unidad didáctica; recopilación de evidencias para el portfolio; reflexión personal en bitácora sobre prácticas inclusivas; investigación y preparación de un breve informe sobre tecnologías de apoyo. (Estimadas 72 horas independientes).", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Fundamentos de inclusión y marco normativo", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales y seminarios sobre marcos normativos y teorías de inclusión; análisis guiado de casos reales y jurisprudencia; talleres prácticos de diseño de adaptaciones y uso de tecnologías de apoyo; simulaciones y role-playing para atención inclusiva; sesiones de retroalimentación sobre trabajos y portfolios; presentaciones y defensa del plan de inclusión en ambiente supervisado."}', '[{"temas": [{"nombre": "Historia y conceptualización de la inclusión escolar", "horasEstimadas": 2}, {"nombre": "Principios y valores de la educación inclusiva", "horasEstimadas": 2}, {"nombre": "Barreras para la participación y aprendizaje", "horasEstimadas": 2}, {"nombre": "Modelos de discapacidad y sus implicaciones educativas", "horasEstimadas": 2}], "titulo": "Introducción a la inclusión educativa", "unidad": 1}, {"temas": [{"nombre": "Convenios y instrumentos internacionales (p. ej., CRPD)", "horasEstimadas": 2}, {"nombre": "Marco constitucional y legislación nacional sobre discapacidad", "horasEstimadas": 2}, {"nombre": "Derechos de niñas, niños y adolescentes con discapacidad en la escuela", "horasEstimadas": 2}, {"nombre": "Ética profesional y responsabilidad institucional", "horasEstimadas": 2}], "titulo": "Derechos humanos y discapacidad", "unidad": 2}, {"temas": [{"nombre": "Políticas educativas y normas sectoriales relacionadas con inclusión", "horasEstimadas": 3}, {"nombre": "Leyes y reglamentos específicos sobre educación inclusiva", "horasEstimadas": 3}, {"nombre": "Accesibilidad universal y ajustes razonables en el contexto escolar", "horasEstimadas": 2}, {"nombre": "Protocolos administrativos y procedimientos de atención educativa", "horasEstimadas": 2}], "titulo": "Marco normativo educativo y políticas públicas", "unidad": 3}, {"temas": [{"nombre": "Detección temprana e identificación de necesidades educativas especiales", "horasEstimadas": 2}, {"nombre": "Diseño Universal para el Aprendizaje (DUA)", "horasEstimadas": 3}, {"nombre": "Adaptaciones curriculares y metodológicas", "horasEstimadas": 2}, {"nombre": "Estrategias de evaluación formativa y sumativa inclusiva", "horasEstimadas": 1}], "titulo": "Identificación de necesidades y evaluación inclusiva", "unidad": 4}, {"temas": [{"nombre": "Metodologías activas y diferenciación instruccional", "horasEstimadas": 3}, {"nombre": "Tecnologías de apoyo y accesibilidad digital en el aula", "horasEstimadas": 2}, {"nombre": "Trabajo colaborativo, mediación y participación familiar", "horasEstimadas": 2}, {"nombre": "Prevención del acoso, estigmatización y promoción de una cultura inclusiva", "horasEstimadas": 1}], "titulo": "Prácticas pedagógicas y recursos para la inclusión", "unidad": 5}, {"temas": [{"nombre": "Elaboración de protocolos y planes de inclusión escolar", "horasEstimadas": 2}, {"nombre": "Monitoreo, evaluación y mejora continua de acciones inclusivas", "horasEstimadas": 2}, {"nombre": "Caso práctico integral: diseño de un plan de inclusión para una escuela", "horasEstimadas": 2}], "titulo": "Implementación y evaluación de estrategias y políticas escolares", "unidad": 6}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "responseId": "resp_041296d54c2725da0069a21b83f3fc819f9cb53cab58c890fc"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Introducción a políticas, leyes y principios de inclusión educativa y derechos de las personas con discapacidad en el contexto escolar."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-02-27 22:32:34.959155+00', '2026-02-27 22:36:50.664531+00', 48, 72, 'borrador'), - ('36148c21-3825-4e9e-81dd-979bcd2e6563', 'f35bd838-6df7-4a3b-9fbf-879f9b3e6da9', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'LESE105', 'Evaluación formativa y ajustes curriculares', 'TRONCAL', 6, 8, '07a19d6f-a412-4993-b07d-4bc02b3d544a', NULL, '{"ciclo": "Ciclo 5", "clave_de_la_asignatura": "LESE105", "criterios_de_evaluacion": "Participación y actividades en clase (15%); Evidencias formativas periódicas: registros, quizzes y registros de progreso (20%); Portafolio de evidencias con reflexiones y muestras de ajuste (25%); Diseño documentado de un ajuste razonable individual (20%); Proyecto final integrador: plan de ajustes + presentación y defensa (20%). Total 100%.", "fines_de_aprendizaje_o_formacion": "Que el estudiante sea capaz de diseñar, implementar y evaluar procesos de evaluación formativa que permitan identificar progresos y necesidades de aprendizaje, formular indicadores de progreso claros y confiables, y elaborar ajustes curriculares razonables y sostenibles para apoyo individualizado, en colaboración con la comunidad educativa y atendiendo marcos éticos y legales.", "modalidades_tecnologicas_e_informaticas": "Uso de un LMS para entrega y seguimiento (p. ej. Moodle/Canvas), herramientas de recolección de evidencias (Google Forms, apps de portafolio), hojas de cálculo para análisis de progreso (Excel/Sheets), software de visualización básica, plataformas de videoconferencia (Zoom/Microsoft Teams) para trabajo colaborativo y presentaciones, y recursos accesibles (lectores de pantalla, subtítulos) para garantizar inclusión.", "actividades_de_aprendizaje_independientes": "Lecturas orientadas y estudio de marcos conceptuales; elaboración de instrumentos y rúbricas adaptadas; recolección y análisis de evidencias en contextos reales o simulados; mantenimiento del portafolio reflexivo; diseño y revisión del plan de ajuste individual; preparación de la presentación final.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Evaluación formativa y ajustes curriculares", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Sesiones expositivas dirigidas sobre teorías y marcos; talleres prácticos para construcción de instrumentos y rúbricas; análisis guiado de casos reales; microenseñanza y simulaciones con retroalimentación; tutorías para diseño de ajustes; sesiones de presentación y evaluación entre pares."}', '[{"temas": [{"nombre": "Principios y funciones de la evaluación formativa", "horasEstimadas": 3}, {"nombre": "Indicadores de logro y rúbricas para seguimiento continuo", "horasEstimadas": 3}, {"nombre": "Retroalimentación efectiva: tipos y técnicas", "horasEstimadas": 2}], "titulo": "Fundamentos de la evaluación formativa", "unidad": 1}, {"temas": [{"nombre": "Observación sistemática y registros anecdóticos", "horasEstimadas": 2}, {"nombre": "Listas de cotejo y rúbricas adaptadas", "horasEstimadas": 3}, {"nombre": "Instrumentos digitales: formularios, portafolios y apps", "horasEstimadas": 3}], "titulo": "Herramientas e instrumentos para la evaluación continua", "unidad": 2}, {"temas": [{"nombre": "Definición, selección y validación de indicadores", "horasEstimadas": 3}, {"nombre": "Líneas base, escalas de progreso y niveles de desempeño", "horasEstimadas": 3}, {"nombre": "Monitoreo, registro de evidencias y visualización de datos", "horasEstimadas": 2}], "titulo": "Diseño y uso de indicadores de progreso", "unidad": 3}, {"temas": [{"nombre": "Marco legal, ético y principios de inclusión", "horasEstimadas": 2}, {"nombre": "Tipos de ajustes: pedagógicos, metodológicos y de acceso", "horasEstimadas": 3}, {"nombre": "Procedimiento para diseñar ajustes individualizados", "horasEstimadas": 3}], "titulo": "Ajustes curriculares razonables", "unidad": 4}, {"temas": [{"nombre": "Planificación de intervenciones basadas en evidencias", "horasEstimadas": 3}, {"nombre": "Trabajo colaborativo con familias y profesionales", "horasEstimadas": 2}, {"nombre": "Evaluación del impacto y ajustes iterativos", "horasEstimadas": 3}], "titulo": "Intervención, colaboración y seguimiento", "unidad": 5}, {"temas": [{"nombre": "Estudios de caso, simulaciones y microenseñanza", "horasEstimadas": 3}, {"nombre": "Diseño de un plan de ajustes y sistema de evaluación formativa", "horasEstimadas": 3}, {"nombre": "Presentación, retroalimentación y revisión del plan", "horasEstimadas": 2}], "titulo": "Práctica aplicada y proyecto integrador", "unidad": 6}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "responseId": "resp_09d9633fafebbb840069a21b841d98819e981e066e5b0febf5"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Estrategias de evaluación continua, indicadores de progreso y diseño de ajustes razonables para apoyo individualizado."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-02-27 22:32:34.959155+00', '2026-02-27 22:36:52.054462+00', 48, 72, 'borrador'), - ('9116b6b9-06a0-4eca-ad2a-6134eb4cac08', 'f35bd838-6df7-4a3b-9fbf-879f9b3e6da9', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'LESE104', 'Diseño Universal para el Aprendizaje aplicado', 'OBLIGATORIA', 5, 3, '32708950-6f54-48e2-b0e2-a205686a2ec7', NULL, '{"ciclo": "Cuarto ciclo", "clave_de_la_asignatura": "LESE104", "criterios_de_evaluacion": "Participación y actividades en clase (10%); Tareas y adaptaciones diseñadas (25%); Proyecto final: diseño de unidad/instrumento UDL y su implementación simulada (30%); Portafolio práctico con evidencias y autoevaluación (20%); Reflexión escrita / examen integrador (15%). Total: 100%", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura, el estudiante comprenderá los principios del Diseño Universal para el Aprendizaje y sabrá traducirlos en adaptaciones concretas de materiales, actividades y evaluaciones para facilitar el acceso y la participación de estudiantes con diversidad de necesidades. Podrá evaluar herramientas tecnológicas de apoyo, diseñar unidades didácticas inclusivas basadas en evidencia y proponer medidas de mejora continua que contribuyan al perfil de egreso orientado a la inclusión pedagógica.", "modalidades_tecnologicas_e_informaticas": "Se emplearán plataformas LMS para gestión de contenidos y entrega de evidencias; editores de texto y multimedia accesible; herramientas de subtitulado y transcripción automática; validadores de accesibilidad web; lectores de pantalla y software de ampliación para prácticas; videoconferencia para sesiones síncronas y foros colaborativos; repositorios compartidos y herramientas de autoría (presentaciones, infografías, video).", "actividades_de_aprendizaje_independientes": "Lecturas académicas y guías prácticas sobre UDL; análisis crítico de casos; diseño y conversión de materiales didácticos en formatos accesibles; práctica con tecnologías de apoyo; elaboración de actividades y evaluaciones alternativas; preparación del proyecto final y del portafolio; autoestudio y reflexiones individuales (total estimado de trabajo independiente: 60 horas).", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Diseño Universal para el Aprendizaje aplicado", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales breves sobre fundamentos; talleres prácticos para diseño y adaptación de materiales; sesiones de laboratorio con herramientas de accesibilidad; microenseñanzas y retroalimentación entre pares; análisis de estudios de caso; tutorías orientadas al desarrollo del proyecto final; seminarios sobre políticas y evaluación de impacto."}', '[{"temas": [{"nombre": "Origen, evolución y fundamentos teóricos del UDL", "horasEstimadas": 3}, {"nombre": "Los tres principios de UDL: Representación; Acción y expresión; Compromiso", "horasEstimadas": 4}, {"nombre": "Marco legal, ético y políticas de inclusión educativa relacionadas con UDL", "horasEstimadas": 3}], "titulo": "Fundamentos y marco del Diseño Universal para el Aprendizaje (UDL)", "unidad": 1}, {"temas": [{"nombre": "Alternativas perceptuales: formatos, descripciones y apoyos multimedia", "horasEstimadas": 4}, {"nombre": "Accesibilidad Universal: contrastes, tipografía, navegación y diseño de interfaces", "horasEstimadas": 3}, {"nombre": "Herramientas y recursos para convertir y adaptar materiales (captions, transcripciones, descripciones)", "horasEstimadas": 3}], "titulo": "Aplicación del principio de representación y accesibilidad de contenidos", "unidad": 2}, {"temas": [{"nombre": "Estrategias para diversificar la producción del estudiante: propuestas y herramientas", "horasEstimadas": 4}, {"nombre": "Diseño de evaluaciones inclusivas: rúbricas flexibles y alternativas de demostración de aprendizaje", "horasEstimadas": 3}, {"nombre": "Adaptaciones, andamiaje y modificaciones pedagógicas según necesidades diversas", "horasEstimadas": 3}], "titulo": "Acción/Expresión y evaluación inclusiva", "unidad": 3}, {"temas": [{"nombre": "Integración de tecnologías y tecnologías de apoyo (LMS, lectores de pantalla, software de comunicación)", "horasEstimadas": 3}, {"nombre": "Planificación curricular aplicando UDL: secuencias, proyectos y microenseñanzas", "horasEstimadas": 4}, {"nombre": "Monitoreo y evaluación del impacto de intervenciones UDL; mejora continua y escalamiento", "horasEstimadas": 3}], "titulo": "Implementación, tecnologías de apoyo y evaluación de impacto", "unidad": 4}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "responseId": "resp_0344097da52f91540069a21b842e748192a1aad3fd18ac8c1e"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Principios UDL y su traducción en adaptaciones y recursos para facilitar el acceso y la participación en el currículo."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-02-27 22:32:34.959155+00', '2026-02-27 22:36:14.777204+00', 40, 60, 'borrador'), - ('23fe97ae-e67a-4d8f-80ce-6dfe5e30d353', 'f35bd838-6df7-4a3b-9fbf-879f9b3e6da9', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'LESE106', 'Comunicación y trabajo con familias', 'OBLIGATORIA', 4, 9, '32708950-6f54-48e2-b0e2-a205686a2ec7', NULL, '{"ciclo": "Ciclo 4", "clave_de_la_asignatura": "LESE106", "criterios_de_evaluacion": "Participación y asistencia: 10%; Talleres prácticos y simulaciones (role-play) y evidencias de mediación: 25%; Proyecto final: diseño e implementación simulada de un plan de vinculación familiar (informe y presentación): 30%; Portafolio de evidencias y reflexiones individuales: 15%; Evaluación teórico-práctica final (casos y análisis): 20%.", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura, el estudiante habrá desarrollado competencias para mediar y comunicar de manera colaborativa con familias, diseñar e implementar estrategias inclusivas de participación familiar en contextos educativos, aplicar técnicas éticas de intervención y mediación, y articular recursos comunitarios para fortalecer el vínculo entre familia y escuela.", "modalidades_tecnologicas_e_informaticas": "Uso de plataforma educativa (LMS) para materiales, foros y entrega de evidencias; videoconferencia (Zoom/Teams) para sesiones y entrevistas simuladas; herramientas de colaboración en línea (Google Docs/Drive); grabación y análisis de video para retroalimentación; encuestas digitales y formularios para diagnóstico familiar; recursos multimedia y bibliografía digital. (Obligatorio para modalidades mixta/no escolarizada).", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas y análisis de casos; reflexiones semanales en bitácora; diseño y ajuste del plan de vinculación familiar; preparación de materiales para talleres; revisión de recursos comunitarios y elaboración de mapa de aliados; grabación y autoevaluación de simulaciones; participación en foros de discusión y estudio colaborativo en línea.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Comunicación y trabajo con familias", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales breves para introducción de conceptos; análisis guiado de casos y discusión en grupo; talleres prácticos y role-plays supervisados; sesiones de mediación simulada con retroalimentación del docente; diseño colectivo de estrategias y retroalimentación en clase; recepción de presentaciones de proyectos y tutoría para el ajuste de intervenciones."}', '[{"temas": [{"nombre": "Principios de la comunicación educativa y modelos de interacción escuela-familia", "horasEstimadas": 3}, {"nombre": "Perspectivas sobre la familia: diversidad, estructuras y roles en el proceso educativo", "horasEstimadas": 2}, {"nombre": "Ética, confidencialidad y límites profesionales en la relación con familias", "horasEstimadas": 1}, {"nombre": "Barreras culturales, lingüísticas y socioeconómicas: reconocimiento e implicaciones", "horasEstimadas": 2}], "titulo": "Fundamentos de la comunicación y el trabajo con familias", "unidad": 1}, {"temas": [{"nombre": "Escucha activa, comunicación empática y comunicación no violenta", "horasEstimadas": 3}, {"nombre": "Técnicas de mediación y resolución de conflictos entre familias y escuela", "horasEstimadas": 3}, {"nombre": "Comunicación digital y uso responsable de tecnologías para el vínculo familia-escuela", "horasEstimadas": 2}], "titulo": "Habilidades de mediación y comunicación colaborativa", "unidad": 2}, {"temas": [{"nombre": "Modelos de participación familiar y diseño de programas de vinculación", "horasEstimadas": 2}, {"nombre": "Diseño y conducción de reuniones efectivas, talleres y actividades participativas", "horasEstimadas": 3}, {"nombre": "Planificación de actividades inclusivas y accesibles para distintos contextos familiares", "horasEstimadas": 2}, {"nombre": "Evaluación de la participación familiar y retroalimentación constructiva", "horasEstimadas": 1}], "titulo": "Estrategias para el involucramiento y la participación familiar", "unidad": 3}, {"temas": [{"nombre": "Diseño de proyectos de intervención para la participación familiar y su seguimiento", "horasEstimadas": 3}, {"nombre": "Simulaciones y role-play: entrevistas, asesorías y mediaciones con familias", "horasEstimadas": 3}, {"nombre": "Recursos comunitarios, redes de apoyo y derivación interinstitucional", "horasEstimadas": 1}, {"nombre": "Reflexión crítica, documentación y elaboración de portafolio profesional", "horasEstimadas": 1}], "titulo": "Aplicación práctica y proyectos de intervención con familias", "unidad": 4}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "responseId": "resp_0bbb8c39234d0e220069a21b8417348192a55e75ee148b4c33"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Habilidades de mediación, comunicación colaborativa y estrategias para involucrar familias en procesos educativos."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-02-27 22:32:34.959155+00', '2026-02-27 22:36:54.00477+00', 32, 48, 'borrador'), - ('727094e2-c624-4e95-aac5-5d990c672eb9', 'f35bd838-6df7-4a3b-9fbf-879f9b3e6da9', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'LESE103', 'Observación y registro sistemático', 'OBLIGATORIA', 5, 6, '32708950-6f54-48e2-b0e2-a205686a2ec7', NULL, '{"ciclo": "Segundo ciclo", "clave_de_la_asignatura": "LESE103", "criterios_de_evaluacion": "Participación y prácticas en clase: 10%; Diseño de instrumento de observación (proyecto): 20%; Trabajo de campo: bitácoras y registros (observaciones sistemáticas): 30%; Tarea de fiabilidad interobservador y ajuste de instrumentos: 15%; Informe final y presentación de resultados aplicados: 25%.", "fines_de_aprendizaje_o_formacion": "Formar en técnicas y herramientas para diseñar instrumentos de observación, recolectar datos confiables y construir registros válidos que permitan analizar comportamientos en contextos escolares y orientar decisiones pedagógicas basadas en evidencia.", "modalidades_tecnologicas_e_informaticas": "Uso de grabadoras de audio y video, cámaras o dispositivos móviles para registro, aplicaciones móviles y formularios digitales para recolección (apps de registro, formularios en línea), hojas de cálculo para organización de datos, software básico de visualización y almacenamiento seguro en la nube; además de plataformas institucionales para entrega y retroalimentación.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas sobre métodos de observación, práctica individual de toma de notas y codificación de fragmentos de video, realización de observaciones fuera del aula y registro en bitácoras, ingreso y procesamiento básico de datos en hojas de cálculo, preparación del informe de campo y del proyecto de instrumento.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Observación y registro sistemático", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Sesiones magistrales sobre teorías y métodos; demostraciones de instrumentos; talleres guiados de construcción de listas de cotejo y rúbricas; prácticas supervisadas de observación en aula con retroalimentación inmediata; sesiones de codificación conjunta y cálculo de fiabilidad; revisión y asesoría para informes finales."}', '[{"temas": [{"nombre": "Concepto, objetivos y usos de la observación en contextos escolares", "horasEstimadas": 2}, {"nombre": "Consideraciones éticas, consentimiento y confidencialidad", "horasEstimadas": 1}, {"nombre": "Modalidades de observación: participante, no participante, estructurada y no estructurada", "horasEstimadas": 2}, {"nombre": "Criterios para la selección de conductas y unidades de registro", "horasEstimadas": 3}], "titulo": "Fundamentos de la observación sistemática", "unidad": 1}, {"temas": [{"nombre": "Operacionalización de conductas y creación de indicadores observables", "horasEstimadas": 3}, {"nombre": "Listas de cotejo, escalas de valoración y rúbricas: estructura y usos", "horasEstimadas": 3}, {"nombre": "Muestreo de eventos: muestreo temporal, por eventos y por intervalos", "horasEstimadas": 2}, {"nombre": "Construcción de esquemas de codificación y manuales de observación", "horasEstimadas": 2}], "titulo": "Diseño y construcción de instrumentos de registro", "unidad": 2}, {"temas": [{"nombre": "Toma de notas de campo y formatos de registro cualitativo", "horasEstimadas": 2}, {"nombre": "Grabación audio y video: prácticas, permisos y manejo de evidencias", "horasEstimadas": 3}, {"nombre": "Aplicaciones digitales y herramientas para registro y codificación en campo", "horasEstimadas": 2}, {"nombre": "Organización logística de sesiones de observación en aula", "horasEstimadas": 1}], "titulo": "Técnicas de toma de datos y herramientas tecnológicas", "unidad": 3}, {"temas": [{"nombre": "Cálculo y mejora de la fiabilidad interobservador", "horasEstimadas": 2}, {"nombre": "Estrategias para aumentar la validez: triangulación y contraste de fuentes", "horasEstimadas": 2}, {"nombre": "Identificación y reducción de sesgos observacionales; reflexividad", "horasEstimadas": 1}, {"nombre": "Seguridad, almacenamiento y anonimización de datos", "horasEstimadas": 2}], "titulo": "Fiabilidad, validez y calidad del registro", "unidad": 4}, {"temas": [{"nombre": "Organización y codificación de datos para análisis descriptivo", "horasEstimadas": 2}, {"nombre": "Visualización básica de datos y síntesis de hallazgos", "horasEstimadas": 2}, {"nombre": "Elaboración de informes de observación y comunicación de resultados a la comunidad educativa", "horasEstimadas": 2}, {"nombre": "Aplicación de registros para diseño de intervenciones y mejora docente", "horasEstimadas": 1}], "titulo": "Análisis, reporte y uso pedagógico de los registros", "unidad": 5}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "responseId": "resp_0c3d89a6863b4f500069a21b8419088193bb9cfe5bffbb5788"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Técnicas y herramientas para observación, toma de datos y construcción de registros confiables en contextos escolares."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-02-27 22:32:34.959155+00', '2026-03-04 14:52:32.075257+00', 40, 60, 'borrador'), - ('7ea81d9d-df61-407f-afa5-76ca14d91029', 'f35bd838-6df7-4a3b-9fbf-879f9b3e6da9', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'LESE108', 'Tecnologías y recursos educativos accesibles', 'OPTATIVA', 4, 1, '07a19d6f-a412-4993-b07d-4bc02b3d544a', NULL, '{"ciclo": "Optativa", "clave_de_la_asignatura": "LESE108", "criterios_de_evaluacion": "Actividades en clase y participación activa: 15%; Tareas prácticas y adaptaciones de materiales: 25%; Proyecto integrador de recurso accesible: 30%; Evaluación teórica (conceptos y normas): 15%; Portafolio de evidencias y autocorrección: 15%. (Total 100%)", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura, el estudiante será capaz de identificar y aplicar principios y normas de accesibilidad digital, seleccionar y usar tecnologías asistivas, adaptar y producir materiales educativos accesibles y diseñar recursos que fomenten la autonomía del estudiantado. Contribuye a formar profesionales capaces de integrar prácticas inclusivas en entornos de enseñanza y aprendizaje, garantizando equidad y cumplimiento de estándares técnicos y pedagógicos.", "modalidades_tecnologicas_e_informaticas": "Se emplearán plataformas LMS (Moodle, Canvas), editores de texto y presentaciones (Word, PowerPoint, Google Docs/Slides), herramientas de autoría (H5P, SCORM), software de accesibilidad y lectores de pantalla (NVDA, VoiceOver), herramientas de subtitulado y transcripción automática (Amara, YouTube, auto-caption), validadores y auditorías de accesibilidad (WAVE, axe), herramientas de edición multimedia (Audacity, OBS, editores de video) y entornos de colaboración en línea (Google Workspace, Teams). Se recomienda acceso a navegadores actualizados y a dispositivos con capacidades de lectura de pantalla para actividades prácticas.", "actividades_de_aprendizaje_independientes": "Lecturas sobre normativa y principios de accesibilidad; tutoriales y prácticas con lectores de pantalla y herramientas de subtitulado; adaptación de documentos y presentaciones; creación de un recurso multimedia accesible; pruebas con usuarios o pares y recolección de retroalimentación; preparación del proyecto integrador y portafolio de evidencias. Estimular la autoevaluación y el aprendizaje basado en la resolución de casos reales.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Tecnologías y recursos educativos accesibles", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales sobre normativa y pedagogía; demostraciones en vivo de tecnologías asistivas; talleres prácticos guiados para adaptar documentos y producir multimedia accesible; sesiones de laboratorio para evaluar accesibilidad con herramientas automatizadas y pruebas manuales; dinámicas de trabajo colaborativo y revisión por pares; asesoría y seguimiento del proyecto integrador; retroalimentación formativa continua."}', '[{"temas": [{"nombre": "Principios básicos de accesibilidad e inclusión", "horasEstimadas": 2}, {"nombre": "Normativa, estándares y pautas (WCAG, eIDAS, legislación educativa)", "horasEstimadas": 3}, {"nombre": "Impacto pedagógico y Diseño Universal para el Aprendizaje (DUA)", "horasEstimadas": 3}], "titulo": "Fundamentos de accesibilidad en educación digital", "unidad": 1}, {"temas": [{"nombre": "Lectores de pantalla y tecnologías asistivas", "horasEstimadas": 3}, {"nombre": "Herramientas de subtitulado, transcripción y audiodescripción", "horasEstimadas": 3}, {"nombre": "Extensiones y software de personalización de la interfaz (contraste, tamaño, navegación)", "horasEstimadas": 2}], "titulo": "Herramientas y tecnologías de apoyo", "unidad": 2}, {"temas": [{"nombre": "Diseño y edición de documentos accesibles (PDF, Word, PowerPoint)", "horasEstimadas": 4}, {"nombre": "Creación de contenidos multimedia accesibles (video, audio, imágenes)", "horasEstimadas": 2}, {"nombre": "Recursos interactivos y evaluaciones accesibles (H5P, SCORM, cuestionarios)", "horasEstimadas": 2}], "titulo": "Adaptación y producción de recursos accesibles", "unidad": 3}, {"temas": [{"nombre": "Evaluación de accesibilidad: auditorías, pruebas de usuario y herramientas automatizadas", "horasEstimadas": 3}, {"nombre": "Estrategias institucionales para la implementación y difusión de buenas prácticas", "horasEstimadas": 3}, {"nombre": "Proyecto integrador: diseño y entrega de un recurso educativo accesible", "horasEstimadas": 2}], "titulo": "Implementación, evaluación y proyecto final", "unidad": 4}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "responseId": "resp_04c9a0ab7c5b3ab00069a21b84410481a1b3ca9c672c24bf1e"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Uso de herramientas y recursos digitales accesibles para adaptar materiales y promover la autonomía del estudiante."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-02-27 22:32:34.959155+00', '2026-02-27 22:37:04.776553+00', 32, 48, 'borrador'), - ('48e962bd-4dd5-49f5-bc69-d8604d69384b', 'f35bd838-6df7-4a3b-9fbf-879f9b3e6da9', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'LESE102', 'Desarrollo y diversidad neuropsicológica', 'TRONCAL', 6, 4, '32708950-6f54-48e2-b0e2-a205686a2ec7', NULL, '{"ciclo": "Segundo ciclo (TRONCAL)", "clave_de_la_asignatura": "LESE102", "criterios_de_evaluacion": "Exámenes parciales teóricos 25%; Proyecto integrador (evaluación e intervención de caso) 30%; Portafolio con informes neuropsicológicos y análisis de casos 20%; Talleres prácticos y demostraciones 15%; Participación y seminarios dirigidos 10%. Total 100%.", "fines_de_aprendizaje_o_formacion": "Proveer al estudiante de conocimientos y habilidades para comprender las bases neurobiológicas del desarrollo infantil, identificar perfiles neuropsicológicos asociados a discapacidades y trastornos del desarrollo, seleccionar y aplicar instrumentos de evaluación adecuados, y diseñar intervenciones y planes de inclusión basados en evidencia que integren perspectiva familiar e interdisciplinaria.", "modalidades_tecnologicas_e_informaticas": "Uso de plataforma educativa (LMS) para materiales, actividades y foros; videoconferencia para seminarios y supervisión; recursos multimedia (lecturas, cápsulas en video); software de presentación y procesamiento de datos (p. ej., hojas de cálculo, R/SPSS); acceso a baterías de evaluación neuropsicológica informatizadas y bancos de casos clínicos. Para modalidades mixtas o a distancia se garantizará acceso a bibliografía digital, herramientas de evaluación remota y entornos seguros para compartir informes.", "actividades_de_aprendizaje_independientes": "Lecturas críticas de artículos y capítulos; elaboración de informes neuropsicológicos a partir de casos; preparación del proyecto integrador (evaluación y plan de intervención); análisis estadístico básico de datos de evaluación; diarios de reflexión sobre práctica clínica y ética; estudio dirigido para exámenes parciales y preparación de seminarios.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Desarrollo y diversidad neuropsicológica", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales y exposiciones guiadas; análisis y discusión de casos clínicos en grupo; demostraciones y práctica supervisada en la administración de pruebas neuropsicológicas; talleres de interpretación de resultados y elaboración de informes; sesiones de retroalimentación para el proyecto integrador; mesas interdisciplinarias con profesionales invitados."}', '[{"temas": [{"nombre": "Neuroanatomía y bases biológicas del desarrollo cerebral", "horasEstimadas": 6}, {"nombre": "Principios del desarrollo cognitivo, afectivo y social", "horasEstimadas": 4}, {"nombre": "Métodos y medidas en neuropsicología del desarrollo (neuroimagen, evaluaciones conductuales)", "horasEstimadas": 4}], "titulo": "Fundamentos del desarrollo neuropsicológico", "unidad": 1}, {"temas": [{"nombre": "Desarrollo prenatal y primera infancia: impacto en la trayectoria funcional", "horasEstimadas": 4}, {"nombre": "Desarrollo sensoriomotor y funciones ejecutivas emergentes", "horasEstimadas": 4}, {"nombre": "Desarrollo del lenguaje y comunicación: evaluación y indicadores tempranos", "horasEstimadas": 4}], "titulo": "Desarrollo típico: hitos y variabilidad", "unidad": 2}, {"temas": [{"nombre": "Trastorno del espectro autista: características cognitivas y socioemocionales", "horasEstimadas": 4}, {"nombre": "Trastorno por déficit de atención e hiperactividad (TDAH) y alteraciones ejecutivas", "horasEstimadas": 4}, {"nombre": "Discapacidad intelectual y desarrollo adaptativo", "horasEstimadas": 4}, {"nombre": "Trastornos específicos del aprendizaje y perfil neuropsicológico", "horasEstimadas": 4}], "titulo": "Perfiles neuropsicológicos en condiciones de diversidad del desarrollo", "unidad": 3}, {"temas": [{"nombre": "Baterías y pruebas neuropsicológicas: selección, aplicación e interpretación", "horasEstimadas": 3}, {"nombre": "Intervenciones basadas en evidencia: estrategias rehabilitadoras y psicoeducativas", "horasEstimadas": 2}, {"nombre": "Enfoques familiares, interdisciplinarios y consideraciones éticas en la atención", "horasEstimadas": 1}], "titulo": "Evaluación, intervención y modelos de inclusión", "unidad": 4}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "responseId": "resp_0ad723e26f6fb7480069a21b840d6481a086bb4e20a4559492"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Bases del desarrollo infantil y perfiles neuropsicológicos asociados a discapacidades y trastornos del desarrollo."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-02-27 22:32:34.959155+00', '2026-02-27 22:36:16.195357+00', 48, 72, 'borrador'), - ('60ad87f2-98f1-4282-99de-21448c9157b3', 'f35bd838-6df7-4a3b-9fbf-879f9b3e6da9', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'LESE110', 'Ética profesional y confidencialidad', 'TRONCAL', 3, 9, '32708950-6f54-48e2-b0e2-a205686a2ec7', NULL, '{"ciclo": "Segundo ciclo", "clave_de_la_asignatura": "LESE110", "criterios_de_evaluacion": "Participación y desempeño en clase y talleres (15%), Análisis escritos de casos y trabajos prácticos (30%), Examen teórico sobre fundamentos éticos y normativos (25%), Proyecto final: protocolo institucional de confidencialidad y manejo de datos (20%), Evaluación continua mediante rúbricas de conducta profesional (10%).", "fines_de_aprendizaje_o_formacion": "Que el estudiante comprenda y aplique principios éticos en el ejercicio profesional, identifique y respete la dignidad y derechos de los alumnos, gestione adecuadamente información sensible y desarrolle capacidades para tomar decisiones éticas fundamentadas y diseñar protocolos institucionales que protejan la privacidad y promuevan el trato digno.", "modalidades_tecnologicas_e_informaticas": "Plataforma LMS para entrega y retroalimentación de actividades, entornos seguros para discusión de casos (foros privados), uso de herramientas de ofimática y gestores de documentos con control de acceso, herramientas de cifrado y almacenamiento seguro cuando sea necesario, bibliotecas digitales y recursos en línea, videoconferencia para sesiones síncronas y simulaciones de casos.", "actividades_de_aprendizaje_independientes": "Lectura crítica de textos y normativas, elaboración de diarios reflexivos sobre ética profesional, análisis escrito de casos prácticos, diseño de un borrador de protocolo de confidencialidad, preparación de presentaciones y participación en foros en línea, y autoevaluación mediante rúbricas.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Ética profesional y confidencialidad", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases expositivas interactivas sobre teorías y marcos normativos, seminarios y debates sobre derechos y dignidad, talleres prácticos de manejo de información sensible y uso de herramientas de protección de datos, sesiones de análisis y discusión de casos reales y simulados, role-play para afrontar dilemas éticos, y tutorías para el desarrollo del proyecto final."}', '[{"temas": [{"nombre": "Conceptos básicos de ética y moral aplicados al ejercicio profesional", "horasEstimadas": 2}, {"nombre": "Teorías éticas y su aplicación en la práctica educativa", "horasEstimadas": 2}, {"nombre": "Valores, responsabilidad profesional y códigos de conducta", "horasEstimadas": 2}], "titulo": "Fundamentos de la ética profesional", "unidad": 1}, {"temas": [{"nombre": "Derechos humanos y derechos del estudiante en el contexto educativo", "horasEstimadas": 2}, {"nombre": "Diversidad, inclusión y no discriminación en la práctica docente", "horasEstimadas": 2}, {"nombre": "Límites profesionales y mantenimiento de la dignidad del alumno", "horasEstimadas": 2}], "titulo": "Derechos, dignidad y relación con el estudiante", "unidad": 2}, {"temas": [{"nombre": "Tipos de información sensible y marco normativo aplicable", "horasEstimadas": 2}, {"nombre": "Consentimiento informado, privacidad y principios de minimización de datos", "horasEstimadas": 2}, {"nombre": "Protección y seguridad de la información: buenas prácticas y herramientas", "horasEstimadas": 2}], "titulo": "Confidencialidad y manejo de información sensible", "unidad": 3}, {"temas": [{"nombre": "Modelos y procedimientos para la toma de decisiones éticas", "horasEstimadas": 2}, {"nombre": "Análisis y resolución de dilemas éticos mediante estudio de casos", "horasEstimadas": 3}, {"nombre": "Diseño de políticas, protocolos y líneas de acción institucionales", "horasEstimadas": 1}], "titulo": "Toma de decisiones éticas y protocolos institucionales", "unidad": 4}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "responseId": "resp_063b6ccc8572ce850069a21b842cb8819f99e8b696b7241526"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Principios éticos, manejo de información sensible y toma de decisiones respetuosa de derechos y dignidad del alumno."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-02-27 22:32:34.959155+00', '2026-02-27 22:36:58.913654+00', 24, 36, 'borrador'), - ('68e057f9-9014-4736-aaa3-ccd6ca51a569', 'f35bd838-6df7-4a3b-9fbf-879f9b3e6da9', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'LESE107', 'Estrategias de apoyo conductual en el aula', 'OBLIGATORIA', 5, 5, '32708950-6f54-48e2-b0e2-a205686a2ec7', NULL, '{"ciclo": "5", "clave_de_la_asignatura": "LESE107", "criterios_de_evaluacion": "Participación y actividades en clase 10%, Prácticas dirigidas y role-play 20%, Informes de evaluación y recolección de datos 20%, Plan de apoyo conductual individual (proyecto) 30%, Examen final teórico-práctico 20% (total 100%)", "fines_de_aprendizaje_o_formacion": "Formar profesionales con competencias para diseñar, implementar y evaluar intervenciones basadas en evidencia para el manejo de conductas en el aula, empleando refuerzo positivo, estrategias proactivas y promoción de habilidades socioemocionales, garantizando prácticas éticas y colaboración con la comunidad educativa.", "modalidades_tecnologicas_e_informaticas": "Plataforma LMS para contenidos y entrega de trabajos, uso de herramientas de videoconferencia para sesiones síncronas, aplicaciones y plantillas digitales para recolección y análisis de datos (hojas de registro, formularios electrónicos), recursos multimedia (videos de modelado), software básico de análisis descriptivo y presentación (hojas de cálculo, presentaciones).", "actividades_de_aprendizaje_independientes": "Lectura crítica de artículos y guías basadas en evidencia; diseño y ajuste de planes de apoyo conductual; recolección y análisis de datos en contextos reales o simulados; reflexión y bitácora de práctica; realización de módulos en línea y preparación de presentaciones y del proyecto final.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Estrategias de apoyo conductual en el aula", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales teórico-prácticas; demostraciones y análisis de casos; sesiones de role-play y retroalimentación; supervisión de prácticas y talleres de diseño de planes de apoyo; seminarios de discusión y trabajo en equipo para elaboración y evaluación de intervenciones."}', '[{"temas": [{"nombre": "Principios básicos del comportamiento y aprendizaje", "horasEstimadas": 2}, {"nombre": "Modelos de intervención y evidencia científica", "horasEstimadas": 2}, {"nombre": "Rol del docente y enfoque centrado en la inclusión", "horasEstimadas": 2}], "titulo": "Fundamentos teóricos y marco conceptual", "unidad": 1}, {"temas": [{"nombre": "Identificación de conductas objetivo y definición operacional", "horasEstimadas": 3}, {"nombre": "Métodos de recolección de datos: ABC, registros y escalas", "horasEstimadas": 3}, {"nombre": "Introducción a la evaluación funcional y análisis funcional básico", "horasEstimadas": 2}], "titulo": "Evaluación funcional del comportamiento y recolección de datos", "unidad": 2}, {"temas": [{"nombre": "Principios del reforzamiento y programación de contingencias", "horasEstimadas": 3}, {"nombre": "Diseño e implementación de economías de fichas y sistemas de refuerzo", "horasEstimadas": 2}, {"nombre": "Reforzamiento diferencial y promoción de conductas alternativas", "horasEstimadas": 3}], "titulo": "Refuerzo positivo y sistemas de apoyo conductual", "unidad": 3}, {"temas": [{"nombre": "Adaptación del ambiente y prevención antecedente", "horasEstimadas": 3}, {"nombre": "Enseñanza de habilidades sociales, autocontrol y resolución de conflictos", "horasEstimadas": 3}, {"nombre": "Procedimientos de desescalada y manejo seguro en el aula", "horasEstimadas": 2}, {"nombre": "Estructuración de rutinas, señales y apoyos visuales", "horasEstimadas": 2}], "titulo": "Estrategias proactivas y enseñanza de habilidades socioemocionales", "unidad": 4}, {"temas": [{"nombre": "Implementación de planes de apoyo conductual y uso de datos para toma de decisiones", "horasEstimadas": 3}, {"nombre": "Trabajo colaborativo con familias y equipos multidisciplinarios", "horasEstimadas": 3}, {"nombre": "Ética, confidencialidad y sensibilidad cultural en intervenciones", "horasEstimadas": 2}], "titulo": "Implementación, monitoreo, colaboración y consideraciones éticas", "unidad": 5}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "responseId": "resp_0f3857d87134e3100069a21b8406088192b58695d7a6fa8d6f"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Intervenciones basadas en evidencia para manejo de conductas, refuerzo positivo y promoción de habilidades socioemocionales."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-02-27 22:32:34.959155+00', '2026-02-27 22:37:08.074937+00', 40, 60, 'borrador'), - ('b60bdb03-72d2-4ff7-9046-e4d1315077bb', 'f35bd838-6df7-4a3b-9fbf-879f9b3e6da9', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'LESE109', 'Práctica supervisada I: acompañamiento en aula', 'TRONCAL', 6, 2, '07a19d6f-a412-4993-b07d-4bc02b3d544a', NULL, '{"ciclo": "Séptimo ciclo (TRONCAL)", "clave_de_la_asignatura": "LESE109", "criterios_de_evaluacion": "1) Registros y fichas de observación (25%); 2) Evaluación del supervisor institucional (20%); 3) Portafolio de evidencias incluyendo registros y producciones (20%); 4) Informe reflexivo final y propuesta de mejora (20%); 5) Asistencia, cumplimiento de acuerdos y participación en sesiones de retroalimentación (15%).", "fines_de_aprendizaje_o_formacion": "Que el estudiante desarrolle competencias para acompañar prácticas docentes en aula mediante observación sistemática, registro riguroso de evidencias y diseño básico de micro-intervenciones, manteniendo postura ética y profesional; al concluir, el estudiante será capaz de documentar situaciones pedagógicas reales, analizar prácticas docentes con base en evidencias y formular propuestas de mejora coherentes con las necesidades observadas, contribuyendo al logro del perfil de egreso en formación docente.", "modalidades_tecnologicas_e_informaticas": "Uso de plataforma educativa (LMS) para entrega de evidencias y comunicación con el docente supervisor; aplicaciones móviles o tabletas para registro de observación (formularios, grabación de audio/video con consentimiento), hojas de cálculo para sistematización de datos, herramientas de edición de documentos y presentaciones, videoconferencia para sesiones de retroalimentación remotas y repositorio digital para el portafolio.", "actividades_de_aprendizaje_independientes": "Lectura de material teórico sobre observación y acompañamiento; análisis de videos de clases y práctica de registro; preparación de instrumentos y guías de observación; elaboración y revisión del portafolio; redacción del informe reflexivo; estudio de casos y planificación de micro-intervenciones; coordinación previa con docente tutor.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Práctica supervisada I: acompañamiento en aula", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Orientación inicial sobre protocolos y ética; demostración y práctica guiada de uso de instrumentos de observación; acompañamiento en salida a aula y supervisión en tiempo real de sesiones de sombra; sesiones de retroalimentación colectiva e individual con el supervisor; seguimiento y validación de micro-intervenciones; revisión y asesoría para la construcción del portafolio y el informe final."}', '[{"temas": [{"nombre": "Marco conceptual, ético y normativo del acompañamiento en aula", "horasEstimadas": 4}, {"nombre": "Instrumentos y protocolos de observación (fichas, listas de cotejo, rúbricas)", "horasEstimadas": 4}, {"nombre": "Planificación de sesiones de observación y acuerdos con el docente tutor", "horasEstimadas": 4}], "titulo": "Preparación para la práctica de acompañamiento", "unidad": 1}, {"temas": [{"nombre": "Observación libre y toma de registros descriptivos", "horasEstimadas": 8}, {"nombre": "Observación estructurada con listas de cotejo y registros cuantitativos", "horasEstimadas": 8}, {"nombre": "Análisis inicial de prácticas docentes a partir de evidencias", "horasEstimadas": 6}, {"nombre": "Relación, comunicación y postura profesional durante la sombra", "horasEstimadas": 6}], "titulo": "Observación dirigida en contextos reales (sombra)", "unidad": 2}, {"temas": [{"nombre": "Registro sistemático, categorización de evidencias y construcción de casos", "horasEstimadas": 8}, {"nombre": "Diseño de micro-intervenciones de apoyo: objetivos, estrategias y materiales", "horasEstimadas": 8}, {"nombre": "Ejecución supervisada de micro-intervenciones en aula", "horasEstimadas": 6}, {"nombre": "Adaptaciones didácticas y atención a la diversidad en la intervención", "horasEstimadas": 6}], "titulo": "Registros orientados a la intervención y micro-intervenciones", "unidad": 3}, {"temas": [{"nombre": "Sesiones estructuradas de retroalimentación con el docente tutor y supervisor", "horasEstimadas": 4}, {"nombre": "Reflexión crítica escrita y construcción del portafolio de evidencias", "horasEstimadas": 4}, {"nombre": "Evaluación final de la práctica y propuestas de mejora pedagógica", "horasEstimadas": 4}], "titulo": "Retroalimentación, reflexión profesional y cierre de práctica", "unidad": 4}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "responseId": "resp_06274b0d679474830069a21b866bac8195b44ba3ea7a235d09"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Práctica inicial de acompañamiento (sombra) en contextos reales con supervisión y registros orientados a la intervención."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-02-27 22:32:34.959155+00', '2026-02-27 22:36:22.395198+00', 80, 40, 'borrador'), - ('286c9e42-80df-4c3f-a786-9d1b424aa15f', 'dc286072-c649-43aa-8a2f-aa3ef6166647', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'QFB302', 'Instrumentación Analítica para Aromas (GC-MS y GC-O)', 'TRONCAL', 6, 5, '67cdbce0-04fe-4c19-aba9-c5999076c97c', NULL, '{"ciclo": "Ciclo II", "contenido_tematico": "1. Fundamentos de instrumentación analítica aplicada a aromas\\n1.1. Principios de cromatografía de gases (GC) y cromatografía acoplada a MS\\n1.2. Conceptos de separación, sensibilidad y selectividad\\n2. GC-MS: Instrumentación y operación\\n2.1. Componentes del GC y configuración de la fuente de ionización\\n2.2. Adquisición de datos y procesamiento de espectros\\n2.3. Interpretación básica de espectros y patrones de fragmentación\\n3. GC-Olfactometría (GC-O)\\n3.1. Principios y modalidades de GC-O\\n3.2. Configuración de nariz humana y/o sistemas de detección sensorial\\n4. Preparación de muestras para aromas\\n4.1. Técnicas de extracción y preconcentración (SPME, Headspace)\\n4.2. Consideraciones de matriz, volatilidad y estabilidad de compuestos\\n4.3. Controles, calibración y validación de métodos\\n5. Interpretación de espectros y bases de datos\\n5.1. Lectura de espectros de masas y búsqueda en bibliotecas (NIST, Wiley)\\n5.2. Aprobación de identidades y límites de incertidumbre\\n5.3. Enfoque de aroma-típico y coincidencia entre cromatografía y espectro\\n6. Aplicaciones en análisis de materias aromáticas\\n6.1. Análisis de fragancias, alimentos y bebidas\\n6.2. Correlación entre perfiles GC-MS y percepción sensorial\\n7. Buenas prácticas de laboratorio y seguridad\\n7.1. Seguridad química y manejo de sustancias peligrosas\\n7.2. Mantenimiento de equipos, calibración y gestión de residuos\\n8. Proyecto práctico y evaluación\\n8.1. Diseño de un método GC-MS/GC-O para un aroma objetivo\\n8.2. Informe técnico y presentación de resultados", "clave_de_la_asignatura": "QFB302", "criterios_de_evaluacion": "- Informe de prácticas de laboratorio y reporte: 40%\\n- Examen teórico: 25%\\n- Proyecto de interpretación de espectros y caso de aroma: 20%\\n- Participación, actividades y tareas cortas: 15%", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de diseñar y ejecutar procedimientos de GC-MS y GC-O para caracterizar compuestos aromáticos, preparar muestras adecuadas, interpretar espectros de masas y comparar con bibliotecas, aplicar las técnicas a análisis de materias aromáticas y comunicar los resultados de forma técnica y clara.", "modalidades_tecnologicas_e_informaticas": "- Equipo de GC-MS y GC-O en laboratorio.\\n- Software de adquisición y procesamiento de datos (MassHunter, Xcalibur, OpenChrom).\\n- Bibliotecas de espectros y bases de datos (NIST, Wiley).\\n- Plataforma de gestión de prácticas y reportes, recursos en línea y plataformas de aprendizaje.\\n- Equipos de seguridad y software de simulación educativa.", "actividades_de_aprendizaje_independientes": "- Lecturas dirigidas de capítulos y artículos sobre GC-MS, GC-O y análisis de aromas.\\n- Ejercicios de interpretación de espectros y búsquedas en bibliotecas de espectros.\\n- Análisis de casos de aromas y revisión de literatura científica.\\n- Preparación y entrega de informes de prácticas y un informe final.\\n- Práctica de diseño de método y validación de datos de manera autónoma.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Instrumentación Analítica para Aromas (GC-MS y GC-O)", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "- Sesiones prácticas supervisadas en el laboratorio con GC-MS y GC-O.\\n- Demostraciones de adquisición de datos y procedimientos de muestreo.\\n- Discusión de casos de aromas y resolución de problemas de interpretación.\\n- Tutorías para el diseño de método y revisión de informes.\\n- Control de calidad y evaluación formativa durante las prácticas."}', '[{"temas": [], "titulo": "Nueva Unidad", "unidad": 1}]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1082, "total_tokens": 6626, "output_tokens": 5544, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 4544}}, "responseId": "resp_0a984e2d4052d250006993a011ca8881a39c70ab1b3ef82da2", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Teoría y práctica de GC-MS y GC-O, preparación de muestras, interpretación de espectros y aplicaciones en análisis de materias aromáticas."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-16 22:54:08.826761+00', '2026-03-04 14:43:00.036799+00', 3, 8, 'borrador'), - ('d977175f-e22b-4b1e-b0ed-3d6f048b7929', '26806567-c5ee-404e-8f90-0f0711c21ea0', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'ALF-1', 'Alfabetización digital', 'OBLIGATORIA', 1, 1, NULL, NULL, '{"ciclo": "Ciclo I", "contenido_tematico": "1. Fundamentos de alfabetización digital en el ámbito jurídico; 1.1 Competencias digitales para profesionales del derecho; 1.2 Ética, seguridad y privacidad en entornos digitales legales; 2. Tecnologías aplicadas al derecho; 2.1 Gestión documental y evidencias digitales en procesos judiciales; 2.2 Búsqueda y recuperación de información jurídica con herramientas tecnológicas; 2.3 Firma digital, autenticación y certificaciones en contratos y evidencias; 3. Análisis de datos y jurisprudencia con tecnologías; 3.1 Herramientas de análisis de jurisprudencia y revisión de sentencias; 3.2 Inteligencia artificial y su uso en asesoría e investigación legal: beneficios, límites y consideraciones éticas; 4. Gobernanza de datos y cumplimiento normativo en tecnología legal; 4.1 Protección de datos personales y cumplimiento normativo (p. ej., RGPD); 4.2 Propiedad intelectual y licenciamiento de software legal tech; 5. Prácticas y proyectos de alfabetización digital en escenarios legales; 5.1 Estudio de caso, simulación y proyecto aplicado.", "clave_de_la_asignatura": "ALF-1", "criterios_de_evaluacion": "1) Participación activa en debates y ejercicios (10%). 2) Trabajo práctico con herramientas de derecho tecnológico (40%). 3) Ensayo analítico sobre un caso que involucra tecnología en derecho (20%). 4) Examen o proyecto final que demuestre integración de contenidos (30%).", "fines_de_aprendizaje_o_formacion": "Que el estudiante sea capaz de identificar y usar tecnologías relevantes para la práctica legal (gestión documental, búsquedas jurídicas, firma digital); aplicar criterios de ética y protección de datos en entornos digitales; analizar información jurídica mediante herramientas tecnológicas y elaborar un informe crítico; colaborar y comunicar resultados en equipos con tecnologías legales.", "modalidades_tecnologicas_e_informaticas": "Se utilizarán plataformas de gestión de aprendizaje (LMS), software de gestión documental y evidencia digital, herramientas de búsqueda jurídica, bases de datos legales, software de firma digital, herramientas de análisis de jurisprudencia y IA legal, entornos de colaboración y entornos seguros para manejo de datos. Para modalidades no escolarizada o mixta, se requerirá acceso a estas herramientas en línea.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas sobre fundamentos de alfabetización digital en derecho. Ejercicios prácticos independientes con gestión de documentos legales, búsqueda y análisis de jurisprudencia, ejercicios de firma digital y protección de datos. Desarrollo de un mini-proyecto: selección de una temática jurídica y aplicación de herramientas tecnológicas para elaborar un informe.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Alfabetización digital", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales con ejemplos de casos; talleres prácticos guiados para usar herramientas legales; análisis de casos con evidencia digital; supervisión de proyectos prácticos para aplicar tecnologías legales; revisión y retroalimentación de informes."}', '[{"temas": [{"nombre": "Competencias digitales para profesionales del derecho2", "horasEstimadas": 0}, {"nombre": "Ética, seguridad y privacidad en entornos digitales legales", "horasEstimadas": 0}], "titulo": "Fundamentos de alfabetización digital en el ámbito jurídico", "unidad": 1}, {"temas": [{"nombre": "Gestión documental y evidencias digitales en procesos judiciales", "horasEstimadas": 0}, {"nombre": "Búsqueda y recuperación de información jurídica con herramientas tecnológicas", "horasEstimadas": 0}, {"nombre": "Firma digital, autenticación y certificaciones en contratos y evidencias", "horasEstimadas": 0}], "titulo": "Tecnologías aplicadas al derecho", "unidad": 2}, {"temas": [{"nombre": "Herramientas de análisis de jurisprudencia y revisión de sentencias", "horasEstimadas": 0}, {"nombre": "Inteligencia artificial en asesoría e investigación legal: beneficios, límites y consideraciones éticas", "horasEstimadas": 0}], "titulo": "Análisis de datos y jurisprudencia con tecnologías", "unidad": 3}, {"temas": [{"nombre": "Protección de datos personales y cumplimiento normativo (RGPD y marcos similares)", "horasEstimadas": 0}, {"nombre": "Propiedad intelectual y licenciamiento de software LegalTech", "horasEstimadas": 0}], "titulo": "Gobernanza de datos y cumplimiento normativo en tecnología legal", "unidad": 4}, {"temas": [{"nombre": "Estudio de caso", "horasEstimadas": 0}, {"nombre": "Simulación", "horasEstimadas": 0}, {"nombre": "Proyecto aplicado", "horasEstimadas": 0}], "titulo": "Prácticas y proyectos de alfabetización digital en escenarios legales", "unidad": 5}]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1090, "total_tokens": 6246, "output_tokens": 5156, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 4480}}, "responseId": "resp_0095394ec2fcf063006989fc59494481979355b718b88f0614", "conversationId": null}, "iaConfig": {"instruccionesAdicionalesIA": "No sea de computación sino de tecnologías relacionadas con el derecho.", "descripcionEnfoqueAcademico": "Asignatura acerca de tecnología aplicada al derecho."}, "referencias": {"archivosReferenciaIds": [], "repositoriosReferencia": []}, "generado_por": "ai_generate_subject"}', NULL, NULL, '2026-02-09 15:25:53.89902+00', '2026-03-04 17:09:22.271812+00', NULL, NULL, 'borrador'); +INSERT INTO "public"."asignaturas" ("id", "plan_estudio_id", "estructura_id", "codigo", "nombre", "tipo", "creditos", "numero_ciclo", "linea_plan_id", "orden_celda", "datos", "contenido_tematico", "tipo_origen", "meta_origen", "creado_por", "actualizado_por", "creado_en", "actualizado_en", "horas_academicas", "horas_independientes", "estado", "criterios_de_evaluacion") VALUES + ('93aefc3a-f7ea-474b-9b9b-e2e155815c0f', '05863c8a-2a93-42f9-a4b7-65cef2edfe72', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'ITMI-606', 'Arquitectura de Software para Realidad Virtual y Aumentada', 'TRONCAL', 6, 6, '0a35f63e-a6d0-465a-94ce-ca2d7db1d239', NULL, '{"ciclo": "Sexto semestre", "contenido_tematico": "1. Fundamentos de Arquitectura de Software para VR/AR\n1.1. Requisitos de rendimiento, baja latencia y escalabilidad\n1.2. Arquitecturas para VR/AR: cliente/servidor, multicliente, streaming\n2. Patrones arquitectónicos para VR/AR\n2.1. Arquitecturas en capas\n2.2. Arquitecturas orientadas a servicios y microservicios\n2.3. Arquitecturas orientadas a eventos y streaming de datos\n2.4. Patrones para gestión de recursos y consistencia\n3. Integración con motores gráficos\n3.1. Interoperabilidad entre Unity/Unreal y la capa de aplicación\n3.2. Gestión de escenas, assets y pipelines de render\n3.3. Optimización de rendimiento en VR/AR\n3.4. Plugins y APIs para comunicación entre motor y servicios\n4. Comunicación cliente-servidor en VR/AR\n4.1. Modelos de red para VR/AR\n4.2. Latencia, predicción y sincronización\n4.3. Seguridad, autenticación y autorización\n5. Arquitectura para VR/AR escalable y eficiente\n5.1. Arquitecturas multiusuario y replicación de estados\n5.2. Streaming y balanceo de carga de contenidos\n5.3. Infraestructura en la nube, microservicios y CDN\n5.4. Resiliencia, tolerancia a fallos y observabilidad\n6. Laboratorios y estudio de casos\n6.1. Laboratorio de diseño de arquitectura\n6.2. Caso práctico: VR multijugador\n6.3. Caso práctico: rendimiento y escalabilidad\nCarga horaria: 64 horas académicas y 96 horas de trabajo independiente.", "clave_de_la_asignatura": "ITMI-606", "criterios_de_evaluacion": "Participación y asistencia: 10%; Talleres y laboratorios: 35%; Proyecto de arquitectura VR/AR: 25%; Examen teórico: 15%; Defensa/Examen práctico del proyecto final: 15%", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante podrá diseñar y evaluar arquitecturas de software para aplicaciones de realidad virtual y aumentada, integrar patrones arquitectónicos con motores gráficos, y diseñar comunicaciones cliente-servidor eficientes y escalables para experiencias VR/AR multijugador.", "modalidades_tecnologicas_e_informaticas": "Entorno de desarrollo: Unity3D y/o Unreal Engine; lenguajes C#, C++, Python; herramientas de streaming y networking (Photon, Mirror, WebRTC); motores de render; herramientas de profiling; control de versiones (Git); plataformas VR/AR (Oculus, SteamVR, WebXR); soluciones en la nube (AWS/Azure/GCP); tecnologías de seguridad y autenticación; API REST/GraphQL; contenedores y orquestación opcional.", "actividades_de_aprendizaje_independientes": "Lecturas de artículos y papers sobre VR/AR, revisión de patrones de arquitectura, diseño de un microproyecto de arquitectura VR/AR, experimentación con una pequeña integración entre motor gráfico y servidor, evaluación de rendimiento y latencia.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Arquitectura de Software para Realidad Virtual y Aumentada (6 créditos)", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Conducción de clases magistrales, sesiones de laboratorio supervisadas, revisiones de diseño de arquitectura, asesoría de implementación del prototipo, defensa de entregables y retroalimentación focalizada."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1080, "total_tokens": 8798, "output_tokens": 7718, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 6912}}, "responseId": "resp_01db74aca9bf0c9e00698e6ae91e0481a2937500f749f75b86", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Patrones arquitectónicos, integración con motores gráficos y comunicación cliente‑servidor para aplicaciones VR/AR escalables y eficientes."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-13 00:05:59.544199+00', '2026-02-13 20:23:55.285924+00', 64, 96, 'borrador', '[]'), + ('cbc9bb28-cd0c-41e1-be92-4fc71fe31ea3', '26806567-c5ee-404e-8f90-0f0711c21ea0', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'MET-1', 'Metodología del Estudio del Derecho', 'OBLIGATORIA', 1, NULL, NULL, NULL, '{"ciclo": "Por definir", "contenido_tematico": "1. Enfoque y fundamentos de la metodología del derecho\\n 1.1. Lectura jurídica y análisis de textos legales\\n 1.2. Interpretación de leyes y normas\\n 1.3. Introducción al método de casos y razonamiento jurídico\\n 1.4. Uso de herramientas digitales para el estudio jurídico\\n 1.5. Ética y buenas prácticas en el estudio del derecho", "clave_de_la_asignatura": "MET-1", "criterios_de_evaluacion": "1. Lecturas y análisis de textos jurídicos: 30%\\n 2. Análisis de casos y ejercicios prácticos: 40%\\n 3. Participación y asistencia: 20%\\n 4. Trabajo final/portafolio que integre el uso de herramientas digitales: 10%", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de:\\n - Realizar lectura y análisis crítico de textos jurídicos y normas.\\n - Aplicar el método de casos para el razonamiento y la solución de problemas jurídicos.\\n - Emplear herramientas digitales y recursos en línea para la organización, búsqueda y citación de información jurídica.\\n - Explicar de manera clara y coherente sus razonamientos jurídicos.", "modalidades_tecnologicas_e_informaticas": "Se emplearán recursos tecnológicos y de información para el desarrollo del proceso de enseñanza-aprendizaje: \\n - Plataforma de gestión académica (LMS) para materiales, foros y entrega de trabajos.\\n - Herramientas de lectura y anotación de PDFs.\\n - Bases de datos jurídicas y buscadores en línea (p. ej., legislación, jurisprudencia, doctrina).\\n - Herramientas de citación bibliográfica (Zotero, Mendeley) y procesamiento de textos.\\n - Presentaciones y videoconferencias (Zoom, Teams) para sesiones sincrónicas o híbridas.\\n - Entornos de colaboración para debates y trabajos en grupo.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas de textos legales y doctrinales; realización de resúmenes; análisis de casos breves; ejercicios de interpretación de normas; investigación de fuentes jurisprudenciales; elaboración de cuestionarios y respuestas; desarrollo de un portafolio digital con evidencias de manejo de herramientas digitales y metodológicas.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Metodología del Estudio del Derecho", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Actividades en clase dirigidas por el académico:\\n - Discusión y análisis guiados de textos jurídicos.\\n - Resolución de casos breves en grupo, con retroalimentación.\\n - Talleres sobre técnicas de lectura jurídica y extracción de elementos clave.\\n - Demostraciones de uso de herramientas digitales para búsqueda, citación y organización de información.\\n - Revisión de avances de trabajos y orientación metodológica."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1097, "total_tokens": 5940, "output_tokens": 4843, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 4096}}, "responseId": "resp_01ed90476500a652006989ff839e58819d8753781481a87699", "conversationId": null}, "iaConfig": {"instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Análisis jurídico así como análisis de textos legales, introducción al método de casos y uso de herramientas digitales para el estudio jurídico."}, "referencias": {"archivosReferenciaIds": [], "repositoriosReferencia": []}, "generado_por": "ai_generate_subject"}', NULL, NULL, '2026-02-09 15:39:19.551496+00', '2026-02-23 20:52:50.995618+00', NULL, NULL, 'borrador', '[]'), + ('ccb04f57-81a6-443c-a11f-219485908701', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CYB310', 'Modelado y Simulación de Procesos Industriales', 'TRONCAL', 6, NULL, NULL, NULL, '{"ciclo": "6º ciclo", "clave_de_la_asignatura": "CYB310", "criterios_de_evaluacion": "Proyectos de modelado y simulación (30%), Informe de laboratorio / reportes de simulación (20%), Exámenes parciales (30%), Quices y tareas (15%), Participación y presentaciones (5%)", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura el estudiante será capaz de formular modelos físicos y matemáticos de procesos industriales, implementar y ejecutar simulaciones computacionales para analizar la dinámica y respuesta de sistemas, validar modelos con datos experimentales y utilizar herramientas de simulación estándar en la industria para apoyar la toma de decisiones y el diseño de control.", "modalidades_tecnologicas_e_informaticas": "Aulas equipadas con PC y acceso a software de simulación (MATLAB/Simulink, Python/Modelica, ASPEN o SimSci según licencias). Plataforma LMS para entrega de actividades, foros y material didáctico. Laboratorio de simulación con acceso a modelos industriales virtuales; acceso a repositorio de datos y a herramientas de control virtual (PLC simulados).", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas de artículos y capítulos técnicos, resolución de ejercicios de modelado matemático, desarrollo y prueba de modelos en software, preparación de informes técnicos, estudio para exámenes y revisión de casos de estudio industriales.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Modelado y Simulación de Procesos Industriales", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales sobre teoría y formulación de modelos, sesiones guiadas de laboratorio computacional, tutorías para diseño de experimentos y obtención de datos, demostraciones de simuladores industriales, seminarios con análisis de casos y presentaciones de proyectos por los estudiantes."}', '[{"temas": [{"nombre": "Introducción: alcance, tipos de modelos y aplicaciones industriales", "horasEstimadas": 2}, {"nombre": "Modelos físicos vs. modelos matemáticos; hipótesis y simplificaciones", "horasEstimadas": 3}, {"nombre": "Herramientas matemáticas: ecuaciones diferenciales ordinarias, sistemas, linealización", "horasEstimadas": 3}], "titulo": "Fundamentos del modelado de procesos", "unidad": 1}, {"temas": [{"nombre": "Balances de materia y energía para procesos continuos y discontinuos", "horasEstimadas": 4}, {"nombre": "Modelos dinámicos: elementos de almacenamiento, flujos y acoplamientos", "horasEstimadas": 4}, {"nombre": "Técnicas de simplificación y análisis de escalas de tiempo", "horasEstimadas": 4}], "titulo": "Balance y formulación de modelos dinámicos", "unidad": 2}, {"temas": [{"nombre": "Reactores (CSTR, PFR): formulación, dinámica y ejemplos", "horasEstimadas": 4}, {"nombre": "Intercambiadores de calor y balances térmicos dinámicos", "horasEstimadas": 3}, {"nombre": "Columnas de destilación y modelos simplificados dinámicos", "horasEstimadas": 3}, {"nombre": "Transporte y difusión: introducción a modelos de transferencia de masa y momento", "horasEstimadas": 4}], "titulo": "Modelado de operaciones unitarias y procesos típicos", "unidad": 3}, {"temas": [{"nombre": "Métodos numéricos para EDO/EDP aplicados a procesos (integración, estabilidad)", "horasEstimadas": 3}, {"nombre": "Simulación en MATLAB/Simulink: construcción de modelos y análisis de respuesta", "horasEstimadas": 4}, {"nombre": "Simulación con Python y Modelica: bibliotecas y buenas prácticas", "horasEstimadas": 3}, {"nombre": "Simuladores industriales (ASPEN/SimSci/otros): modelado y casos de estudio", "horasEstimadas": 4}], "titulo": "Métodos numéricos y simulación computacional", "unidad": 4}, {"temas": [{"nombre": "Identificación de sistemas y estimación de parámetros a partir de datos", "horasEstimadas": 4}, {"nombre": "Validación del modelo: ajuste, sensibilidad y análisis de incertidumbre", "horasEstimadas": 4}, {"nombre": "Interacción con controladores: respuesta dinámica, tuning y pruebas en simulación", "horasEstimadas": 4}], "titulo": "Identificación, validación y análisis de control", "unidad": 5}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1150, "total_tokens": 3354, "output_tokens": 2204, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 960}}, "responseId": "resp_005bd60c63b5f5150069a1b0c6e758819e9bf548ee0d153885", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Técnicas de modelado físico y matemático y uso de simuladores para analizar dinámica y respuesta de procesos industriales."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-27 14:57:08.739803+00', '2026-02-27 14:57:42.976053+00', 60, 50, 'borrador', '[]'), + ('4f296f95-bc10-47cb-b16f-0c82559d1906', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CIB304', 'Sistemas de Control Distribuido y SCADA', 'OBLIGATORIA', 5, NULL, NULL, NULL, '{"ciclo": "7", "clave_de_la_asignatura": "CIB304", "criterios_de_evaluacion": "Examen parcial 25% / Examen final 30% / Proyecto integrador (diseño y configuración DCS/SCADA) 25% / Prácticas de laboratorio y reportes 10% / Participación y actividades en clase 10%", "fines_de_aprendizaje_o_formacion": "Formar al estudiante para comprender y aplicar arquitecturas DCS y SCADA en entornos industriales, diseñar sistemas de supervisión y control distribuidos, seleccionar protocolos y dispositivos de campo, asegurar comunicaciones robustas y aplicar prácticas de ciberseguridad y puesta en marcha, contribuyendo al perfil de egreso con competencias para integrar y operar sistemas de control industrial.", "modalidades_tecnologicas_e_informaticas": "Uso de software SCADA/HMI (p. ej. Ignition, Wonderware, Siemens WinCC), simuladores de DCS/PLC, plataformas virtuales (VM) con servidores OPC UA/OPC DA, bancos de pruebas con PLCs y módulos I/O, analizadores de red industrial y herramientas para configuración de VLAN/QoS; se empleará un LMS para contenidos, foros y entrega de prácticas.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas y estudio de manuales de protocolos y normas; resolución de ejercicios de configuración y diagnóstico; desarrollo de simulaciones y modelado en herramientas SCADA/DCS; preparación del proyecto integrador y reportes de laboratorio; revisión de casos de estudio y preparación de exámenes.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Sistemas de Control Distribuido y SCADA", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales con análisis de arquitectura y protocolos; sesiones prácticas guiadas en laboratorio y simuladores; talleres de diseño de HMI y gestión de alarmas; prácticas de configuración de redes industriales y pruebas de integración DCS–SCADA; sesiones de revisión y retroalimentación del proyecto integrador."}', '[{"temas": [{"nombre": "Conceptos fundamentales y diferencias entre DCS y SCADA", "horasEstimadas": 2}, {"nombre": "Arquitectura general y componentes: controladores, I/O, HMI y servidores", "horasEstimadas": 2}, {"nombre": "Modelos de implementación y ejemplos en la industria", "horasEstimadas": 2}], "titulo": "Introducción a DCS y SCADA", "unidad": 1}, {"temas": [{"nombre": "Sensores y actuadores: selección, características e interfaces", "horasEstimadas": 3}, {"nombre": "Módulos de entradas/salidas y arquitecturas I/O remotas", "horasEstimadas": 3}, {"nombre": "Protocolos de campo: HART, FOUNDATION Fieldbus, Profibus, Modbus", "horasEstimadas": 4}], "titulo": "Dispositivos de campo e interfaces", "unidad": 2}, {"temas": [{"nombre": "Topologías de red industrial y Ethernet industrial", "horasEstimadas": 3}, {"nombre": "Protocolos de comunicación: TCP/IP industrial, OPC UA, MQTT", "horasEstimadas": 3}, {"nombre": "Diseño de redes deterministas: switches gestionados, VLANs, QoS y tiempo real", "horasEstimadas": 4}], "titulo": "Redes y protocolos de comunicación en entornos industriales", "unidad": 3}, {"temas": [{"nombre": "Controladores distribuidos: estructura, bloques de función y escalabilidad", "horasEstimadas": 3}, {"nombre": "Estrategias de control: PID, secuencias y control avanzado", "horasEstimadas": 3}, {"nombre": "Redundancia, alta disponibilidad y gestión de fallos", "horasEstimadas": 2}], "titulo": "Diseño y operación de sistemas DCS", "unidad": 4}, {"temas": [{"nombre": "Diseño de HMI y principios de usabilidad para operación segura", "horasEstimadas": 3}, {"nombre": "Gestión de alarmas, tendencias y sistemas historian", "horasEstimadas": 3}, {"nombre": "Reportes, análisis de datos y acceso remoto/telemetría", "horasEstimadas": 2}], "titulo": "Supervisión SCADA e interfaces HMI", "unidad": 5}, {"temas": [{"nombre": "Integración DCS–SCADA: mapeo de tags, gateways y sincronización", "horasEstimadas": 2}, {"nombre": "Ciberseguridad en sistemas de control (principios y normativas IEC 62443)", "horasEstimadas": 2}, {"nombre": "Validación, puesta en marcha, pruebas, diagnóstico y casos prácticos", "horasEstimadas": 2}], "titulo": "Integración, ciberseguridad y puesta en marcha", "unidad": 6}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1151, "total_tokens": 3832, "output_tokens": 2681, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1344}}, "responseId": "resp_04ac2f441fe402ad0069a1b0c662e081909def5a9488754112", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Arquitecturas DCS/SCADA, diseño de supervisión y comunicación entre controladores distribuidos en entornos industriales."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-27 14:57:08.739803+00', '2026-02-27 14:57:49.617005+00', 48, 40, 'borrador', '[]'), + ('ac821b90-0210-4e80-95c2-2b847932f1b0', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CYB307', 'Integración de Redes Industriales e IIoT', 'OBLIGATORIA', 5, NULL, NULL, NULL, '{"ciclo": "7", "clave_de_la_asignatura": "CYB307", "criterios_de_evaluacion": "Proyecto integrador (35%), Laboratorios prácticos y entregables de integración (30%), Examen parcial (15%), Examen final (10%), Participación y foros técnicos (5%), Tareas y reportes individuales (5%)", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura el estudiante será capaz de diseñar e implementar soluciones que integren protocolos industriales con plataformas IIoT; seleccionar y configurar gateways y arquitecturas edge-to-cloud; modelar datos interoperables (p. ej., OPC UA/Digital Twins); desplegar telemetría segura y analizar la operación de sistemas IIoT en entornos industriales, contribuyendo al perfil de egreso mediante competencias en interoperabilidad, integración y seguridad en redes industriales.", "modalidades_tecnologicas_e_informaticas": "Se utilizarán laboratorios equipados con simuladores de PLC (p. ej., OpenPLC), servidores OPC UA, brokers MQTT (Mosquitto), herramientas de integración (Node-RED), analizadores de tráfico (Wireshark), entornos virtualizados (Docker), dispositivos edge como Raspberry Pi, plataformas cloud (AWS IoT o Azure IoT Hub) para pruebas de ingestión y dashboards, control de versiones (Git) y plataformas de gestión de aprendizaje para entrega de tareas y foros. Para modalidad mixta o no escolarizada se requerirá acceso remoto a los laboratorios virtualizados y a imágenes preconfiguradas.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas sobre protocolos y arquitecturas; configuración de un broker MQTT y un servidor OPC UA en entornos virtuales; desarrollo de un gateway en Raspberry Pi o contenedor para traducir entre protocolos; construcción de modelos de datos y un gemelo digital básico; preparación de la documentación y reporte del proyecto integrador; participación en foros y revisión de casos de estudio industriales.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Integración de Redes Industriales e IIoT", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales sobre conceptos y arquitecturas; demostraciones en laboratorio de integración de protocolos; sesiones prácticas guiadas para configuración de brokers, servidores OPC UA y gateways; talleres de modelado de datos y digital twins; tutorías de proyecto y presentaciones grupales con retroalimentación; evaluación práctica mediante ejercicios y exámenes."}', '[{"temas": [{"nombre": "Introducción a redes industriales: evolución, sectores y requisitos", "horasEstimadas": 2}, {"nombre": "Modelos de referencia: ISA-95, RAMI 4.0 y capas de comunicación", "horasEstimadas": 2}, {"nombre": "Topologías, determinismo y desempeño en redes industriales", "horasEstimadas": 4}], "titulo": "Fundamentos de redes industriales y modelos de referencia", "unidad": 1}, {"temas": [{"nombre": "OPC UA: arquitectura, servicios y seguridad", "horasEstimadas": 3}, {"nombre": "Fieldbuses y Modbus: características y escenarios de uso", "horasEstimadas": 2}, {"nombre": "EtherNet/IP y PROFINET: determinismo y comunicación en tiempo real", "horasEstimadas": 3}, {"nombre": "Consideraciones de tiempo real y conmutación en entornos industriales", "horasEstimadas": 2}], "titulo": "Protocolos industriales tradicionales y contemporáneos", "unidad": 2}, {"temas": [{"nombre": "MQTT: modelo pub/sub, QoS y patrones de uso en IIoT", "horasEstimadas": 3}, {"nombre": "CoAP y AMQP: alternativas para dispositivos con recursos limitados", "horasEstimadas": 2}, {"nombre": "Seguridad en protocolos IIoT: autenticación, cifrado y prácticas recomendadas", "horasEstimadas": 3}], "titulo": "Protocolos IIoT y mecanismos de telemetría", "unidad": 3}, {"temas": [{"nombre": "Conceptos de edge computing, fog y modelos híbridos", "horasEstimadas": 3}, {"nombre": "Gateways industriales: funciones, capacidades y diseño", "horasEstimadas": 2}, {"nombre": "Plataformas cloud para IIoT: ingestión, almacenamiento y análisis (p. ej., AWS IoT, Azure IoT)", "horasEstimadas": 2}, {"nombre": "Patrones de integración edge-to-cloud y latencia/consistencia", "horasEstimadas": 1}], "titulo": "Arquitecturas edge-to-cloud y componentes habilitadores", "unidad": 4}, {"temas": [{"nombre": "Modelado de datos: Information Models de OPC UA y Digital Twins", "horasEstimadas": 3}, {"nombre": "Puentes y traductores protocolarios: diseño e implementación", "horasEstimadas": 3}, {"nombre": "Integración con SCADA, MES y plataformas empresariales", "horasEstimadas": 2}, {"nombre": "Formatos de telemetría, normalización y transformación de mensajes", "horasEstimadas": 2}], "titulo": "Interoperabilidad, modelado de datos y middleware", "unidad": 5}, {"temas": [{"nombre": "Diseño y despliegue del proyecto integrador: arquitectura y plan de pruebas", "horasEstimadas": 3}, {"nombre": "Pruebas de telemetría, monitoreo y escalabilidad", "horasEstimadas": 2}, {"nombre": "Aspectos regulatorios, cumplimiento y continuidad operativa", "horasEstimadas": 1}], "titulo": "Proyecto integrador, despliegue y operación segura", "unidad": 6}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1153, "total_tokens": 4241, "output_tokens": 3088, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1536}}, "responseId": "resp_0f850703642fa3050069a1b0c6dba48194a53b2ccb06ab00db", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Integración de protocolos industriales con plataformas IIoT, interoperabilidad, telemetría y arquitecturas edge-to-cloud."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-27 14:57:08.739803+00', '2026-02-27 14:57:55.859973+00', 50, 42, 'borrador', '[]'), + ('8d6393e0-64c6-49b9-af06-a74fc07d2d1d', '05863c8a-2a93-42f9-a4b7-65cef2edfe72', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'MAT101', 'Cálculo diferencial e integral', 'TRONCAL', 8, 1, '0a35f63e-a6d0-465a-94ce-ca2d7db1d239', NULL, '{"ciclo": "Ciclo 1 - Matemáticas básicas", "contenido_tematico": "1. Fundamentos de funciones y notación: definición de función, dominio, codominio, gráficos y notación; tipos de funciones (polinómicas, racionales, trascendentes); 2. Límites y continuidad: límites de funciones reales, continuidad, teoremas relevantes; 3. Derivadas: definición, interpretación geométrica y física, reglas de derivación, derivadas de funciones compuestas e implícitas, aplicaciones a tasas de cambio; 4. Integrales: antiderivadas, integrales definidas e indefinidas, técnicas básicas de integración (sustitución, por partes), interpretación geométrica y física; 5. Aplicaciones a modelado, optimización y análisis de sistemas de ingeniería: modelado con funciones, optimización de una variable, áreas y volúmenes, aplicaciones en ingeniería; 6. Técnicas y herramientas de resolución de problemas en contextos ingenieriles; 7. Carga horaria y recursos didácticos: 6 horas de contacto (horas académicas) y 8 horas de estudio independiente (horas independientes) para un total de 14 horas de carga de aprendizaje.", "clave_de_la_asignatura": "MAT101", "criterios_de_evaluacion": "1) Exámenes parciales y final: 40%; 2) Tareas y ejercicios prácticos: 25%; 3) Proyecto de modelado o informe de laboratorio: 20%; 4) Participación en clase y prácticas guiadas: 15%.", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante: a) comprenderá y podrá aplicar conceptos de funciones, límites, derivadas e integrales; b) modelará problemas de ingeniería utilizando funciones y ecuaciones; c) empleará métodos de optimización y análisis para resolver problemas reales; d) interpretará resultados, comunicará soluciones técnicas y comprenderá las limitaciones y supuestos de los modelos; e) desarrollará habilidades analíticas, cuantitativas y de razonamiento crítico para el desempeño en ingeniería.", "modalidades_tecnologicas_e_informaticas": "La asignatura hará uso de plataformas de gestión de aprendizaje (LMS) y entornos de cómputo: Python (NumPy/SciPy/SymPy) y MATLAB/Octave para cálculo simbólico y numérico,Desmos o GeoGebra para visualización gráfica, y notebooks de Jupyter para prácticas y ejercicios automatizados. Se proporcionarán recursos digitales, laboratorios virtuales y foros de discusión.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas, ejercicios de práctica diarios, problemas de modelado de sistemas simples, estudio de casos, revisión de conceptos teóricos, realización de ejercicios de autoevaluación y entrega de proyectos o informes parciales.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Cálculo diferencial e integral", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales y resolución guiada de problemas en grupo, ejercicios prácticos en sala, sesiones de tutoría para aclarar dudas, revisión detallada de tareas y proyectos, y asesoramiento para el desarrollo de modelos de ingeniería y simulaciones."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1071, "total_tokens": 5299, "output_tokens": 4228, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 3520}}, "responseId": "resp_004cdc49a466724f00698e6ae925888193849878122ce1a867", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Funciones, límites, derivadas e integrales con aplicaciones en modelado, optimización y análisis de sistemas de ingeniería."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-13 00:05:59.544199+00', '2026-02-13 15:59:18.566655+00', 6, 8, 'borrador', '[]'), + ('38d541c8-55f9-47b3-80ad-7293f3cb494d', '6d1ad1d6-f34b-45fe-8b7c-3aef45d84901', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CEDU201', 'Teorías del Aprendizaje y Procesos Cognitivos', 'TRONCAL', 6, 1, '81228639-1335-4542-9d18-c5e682ab4982', NULL, '{"ciclo": "Ciclo I", "contenido_tematico": "1. Introducción y marco conceptual. 1.1 Definiciones clave, 1.2 Historia y evolución de las teorías del aprendizaje y de los procesos cognitivos. 2. Teorías del aprendizaje. 2.1 Conductismo y conductismo radical. 2.2 Cognitivismo. 2.3 Constructivismo. 2.4 Constructivismo social y sociocultural (Vygotsky). 2.5 Enfoques contemporáneos y conectivismo. 2.6 Enfoques emergentes y neuroeducación. 3. Procesos cognitivos en aprendizaje. 3.1 Atención y percepción. 3.2 Memoria (sensorial, a corto y a largo plazo). 3.3 Procesamiento de la información y carga cognitiva. 3.4 Metacognición y autorregulación. 4. Diseño instruccional basado en teorías. 4.1 Estrategias didácticas centradas en el estudiante. 4.2 Diseño de actividades y evaluaciones. 4.3 Entornos de aprendizaje y transferencia. 5. Aplicaciones y casos prácticos. 5.1 Análisis de contextos educativos (Aula presencial, online). 5.2 Planificación de intervenciones didácticas. 6. Evaluación y cierre. 6.1 Evaluación de aprendizajes y rúbricas. 6.2 Retroalimentación, ética y cierre del ciclo. Disposición horaria: la carga total prevista es de 4 horas académicas (presenciales) y 8 horas de trabajo independiente a lo largo del curso, distribuidas para favorecer la comprensión de las teorías y la aplicación práctica en contextos educativos.", "clave_de_la_asignatura": "CEDU201", "criterios_de_evaluacion": "1) Examen parcial de teorías y procesos cognitivos - 20%. 2) Examen final - 20%. 3) Proyecto de diseño de intervención didáctica basada en teorías del aprendizaje - 25%. 4) Trabajo de revisión y ensayo crítico sobre lecturas clave - 15%. 5) Participación, prácticas y actividades de clase - 20%.", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante habrá internalizado las principales teorías del aprendizaje y de los procesos cognitivos, y podrá: analizar contextos educativos desde enfoques teóricos; diseñar estrategias didácticas centradas en el estudiante aplicando principios de cognición y metacognición; evaluar intervenciones didácticas con criterios basados en evidencia; comunicar ideas de forma clara y argumentada; y estimar impactos de diversas teorías en el aprendizaje de diferentes dominios.", "modalidades_tecnologicas_e_informaticas": "La asignatura se imparte en modalidad presencial, con apoyo en herramientas digitales: plataforma de gestión del aprendizaje (LMS), videos, lecturas interactivas, foros y evaluación en línea. En modalidad mixta o no escolarizada, parte de las actividades se realizan en línea con entregas asincrónicas y tutorías virtuales.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas, análisis de casos, elaboración de un portafolio de reflexiones críticas, revisión de literatura sobre teorías del aprendizaje, diseño de un marco teórico para una intervención educativa, desarrollo de actividades didácticas centradas en el estudiante.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Teorías del Aprendizaje y Procesos Cognitivos", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales breves para contextualizar teorías; debates estructurados; análisis de casos de aula; resolución de ejercicios sobre procesos atencionales, memoria y metacognición; trabajo en equipo para diseñar una intervención educativa; revisión y retroalimentación de prototipos de actividades didácticas."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1082, "total_tokens": 5918, "output_tokens": 4836, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 3968}}, "responseId": "resp_050a7bf7b57ae28c00698e65c174248197bd51284e773f3b99", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Estudia las principales teorías del aprendizaje y su aplicación en contextos educativos para diseñar estrategias didácticas centradas en el estudiante."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-12 23:43:57.682105+00', '2026-02-12 23:44:34.492864+00', 4, 8, 'borrador', '[]'), + ('fbc70e64-7f44-4f49-a7fc-c29f87c19e57', '6d1ad1d6-f34b-45fe-8b7c-3aef45d84901', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CEDU202', 'Evaluación Formativa y Retroalimentación para el Aprendizaje', 'TRONCAL', 5, 2, '014cd069-5f7f-48fc-8883-813527b515ca', NULL, '{"ciclo": "Ciclo troncal", "contenido_tematico": "1. Fundamentos de la evaluación formativa y su impacto en el aprendizaje\\n 1.1 Conceptos clave: evaluación formativa, retroalimentación, mejora del aprendizaje\\n 1.2 Diferencias entre evaluación formativa y evaluación sumativa\\n2. Diseño de instrumentos de evaluación formativa\\n 2.1 Rúbricas de evaluación\\n 2.2 Listas de cotejo (checklists)\\n 2.3 Diarios de aprendizaje y evidencias\\n 2.4 Portafolios\\n3. Estrategias de retroalimentación efectiva\\n 3.1 Principios de retroalimentación de alta calidad\\n 3.2 Formatos y canales de entrega (oral, escrita, digital)\\n 3.3 Retroalimentación oportuna y accionable\\n4. Interpretación de evidencia y toma de decisiones pedagógicas\\n 4.1 Análisis de resultados de la evaluación formativa\\n 4.2 Planes de mejora y cierre de ciclos de aprendizaje\\n5. Herramientas y recursos tecnológicos\\n 5.1 LMS, rúbricas digitales, analítica de aprendizaje\\n 5.2 Plataformas de colaboración y comunicación\\n6. Estrategias de evaluación formativa en contextos colaborativos\\n 6.1 Coevaluación entre pares\\n 6.2 Evaluación entre docentes\\n7. Ética y manejo de datos de evaluación\\n 7.1 Privacidad y uso responsable de datos\\n 7.2 Transparencia con estudiantes\\n8. Plan de acción y seguimiento\\n 8.1 Elaboración de planes de mejora individual y grupal\\n 8.2 Distribución de carga horaria: 3 horas académicas (sincrónicas) y 6 horas de aprendizaje independiente", "clave_de_la_asignatura": "CEDU202", "criterios_de_evaluacion": "1) Diseño y uso de instrumentos de evaluación formativa (rúbricas, listas de verificación, diarios de aprendizaje) – 40%.\n2) Análisis de evidencia de aprendizaje para retroalimentación y toma de decisiones pedagógicas – 20%.\n3) Práctica y simulaciones de retroalimentación en aula – 15%.\n4) Participación en debates y aportes para mejora continua – 15%.\n5) Portafolio de evidencias y plan de mejora personal – 10%", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de diseñar e implementar estrategias de evaluación formativa y retroalimentación que promuevan la mejora continua del aprendizaje; analizar evidencia de aprendizaje para adaptar prácticas pedagógicas; colaborar en procesos de mejora con pares.", "modalidades_tecnologicas_e_informaticas": "Plataformas LMS (p. ej., Moodle, Canvas) para gestión de tareas y retroalimentación; herramientas de creación de rúbricas y listas de cotejo; software de videoconferencia para sesiones sincrónicas; herramientas de análisis de datos de aprendizaje; recursos educativos abiertos y repositorios de evidencia.", "actividades_de_aprendizaje_independientes": "Lecturas y revisión de artículos sobre evaluación formativa; diseño de un instrumento de evaluación formativa para un caso de estudio; análisis de ejemplos de retroalimentación; desarrollo de un portafolio de evidencias con reflexiones; autoevaluación y planes de mejora personal.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Evaluación Formativa y Retroalimentación para el Aprendizaje", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Talleres prácticos de diseño de instrumentos; simulaciones de retroalimentación entre pares; revisión de rúbricas y criterios de éxito; análisis de muestras de retroalimentación y evidencia; discusión de casos y seguimiento de planes de mejora."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1083, "total_tokens": 10553, "output_tokens": 9470, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 8576}}, "responseId": "resp_05e1e9fe8eec94c900698e65c03e3081a1b2b1c0fd229f71e6", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Desarrolla competencias para diseñar e implementar evaluación formativa, instrumentos y retroalimentación efectiva que favorezcan la mejora continua del aprendizaje."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-12 23:43:57.682105+00', '2026-02-12 23:45:05.252544+00', 3, 6, 'borrador', '[]'), + ('52b51837-fe6c-4552-9500-efcf16071d9a', '05863c8a-2a93-42f9-a4b7-65cef2edfe72', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'MAT102', 'Álgebra lineal y geometría analítica', 'TRONCAL', 6, 1, '35e06a47-655d-4ce4-8b5f-52dc068c271c', NULL, '{"ciclo": "Segundo ciclo", "contenido_tematico": "Carga horaria: Horas académicas presenciales: 5; Horas de trabajo independiente: 6. A continuación se presentan los temas y subtemas, estructurados de forma lógica y secuencial: 1. Vectores y operaciones en espacios vectoriales; 1.1 Vectores en R^n, operaciones; 1.2 Distancia y norma; 1.3 Productos escalares; 2. Espacios vectoriales; 2.1 Definición, axiomas; 2.2 Subespacios; 2.3 Base y dimensión; 3. Transformaciones lineales; 3.1 Definición; 3.2 Matriz asociada a una transformación; 3.3 Núcleo e imagen; 3.4 Cambio de base; 4. Matrices y resolución de sistemas; 4.1 Operaciones con matrices; 4.2 Rango y resolución con Gauss; 4.3 Inversa; 5. Geometría analítica; 5.1 Coordenadas y sistemas de referencia en plan y espacio; 5.2 Rectas y planos; 5.3 Intersecciones de subespacios; 6. Aplicaciones y problemas; 6.1 Aplicaciones de transformaciones lineales; 6.2 Problemas de optimización lineal básica.", "clave_de_la_asignatura": "MAT102", "criterios_de_evaluacion": "Actividades de evaluación: - Exámenes parciales (2): 25% total (12.5% cada uno). - Examen final: 35%. - Tareas y ejercicios: 20%. - Participación y asistencia: 20%.", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante podrá: validar el razonamiento lógico y algebraico para resolver problemas que involucren vectores, matrices, espacios vectoriales y transformaciones lineales; aplicar técnicas de resolución de sistemas lineales y análisis geométrico en R^2 y R^3; interpretar resultados en contextos geométricos y de modelado; comunicar soluciones de forma clara y precisa.", "modalidades_tecnologicas_e_informaticas": "Recursos tecnológicos: plataforma de gestión del aprendizaje (LMS), computadoras con acceso a internet, software de álgebra lineal (Octave/NumPy/Python o MATLAB), herramientas de visualización (GeoGebra, matplotlib), procesadores de texto y presentaciones, pizarras interactivas, proyectores, acceso a repositorios de ejercicios y evaluaciones en línea.", "actividades_de_aprendizaje_independientes": "Estudio autónomo de conceptos teóricos; resolución de ejercicios propuestos de distinta dificultad; lectura de material didáctico y referencias; práctica de problemas de sistemas lineales; autoevaluación mediante cuestionarios y revisión de soluciones.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Álgebra lineal y geometría analítica", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales con resolución guiada de ejercicios; sesiones de discusión de problemas y ejemplos; talleres y prácticas en grupo con feedback del docente; tutorías para reforzar conceptos clave; resolución de ejercicios en tiempo real con retroalimentación del académico."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1075, "total_tokens": 6593, "output_tokens": 5518, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 4800}}, "responseId": "resp_0c00e5dab5344ba200698e6ae8bc70819e83d70d92c00144d4", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Álgebra lineal, así como geometría analítica, Vectores, matrices, espacios vectoriales y transformaciones lineales"}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-13 00:05:59.544199+00', '2026-02-13 00:08:38.797999+00', 5, 6, 'borrador', '[]'), + ('7fe0644a-5c30-4bd5-a032-cde1872802b8', '05863c8a-2a93-42f9-a4b7-65cef2edfe72', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'ITMI104', 'Programación estructurada y paradigmas', 'TRONCAL', 6, 2, '0a35f63e-a6d0-465a-94ce-ca2d7db1d239', NULL, '{"ciclo": "Ciclo 2", "contenido_tematico": "1. Fundamentos de programación estructurada\n1.1 Conceptos básicos de algoritmos y estructuras de control\n1.2 Tipos de datos, variables y operadores\n1.3 Flujo de control: secuencial, selección y repetición\n2. Técnicas de programación estructurada\n2.1 Modularización, funciones y procedimientos\n2.2 Gestión de la memoria y alcance\n3. Paradigmas de programación\n3.1 Paradigma procedural\n3.2 Programación orientada a objetos\n3.3 Programación funcional\n4. Buenas prácticas y desarrollo de sistemas inmersivos\n4.1 Diseño, documentación y pruebas\n4.2 Patrones de diseño y arquitectura de software\n4.3 Rendimiento, seguridad y accesibilidad\n5. Herramientas y entornos de desarrollo\n5.1 Lenguajes y entornos de programación (C, Java, Python)\n5.2 Entornos de desarrollo, depuración y construcción\n5.3 Control de versiones y gestión de proyectos", "clave_de_la_asignatura": "ITMI104", "criterios_de_evaluacion": "1. 30% - Desempeño en prácticas de programación, ejercicios y pruebas cortas; 2. 40% - Proyecto integrador de un módulo de un sistema inmersivo; 3. 20% - Exámenes teóricos y prácticos sobre conceptos y aplicabilidad de paradigmas; 4. 10% - Participación, entregas a tiempo y calidad de código.", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de: 1) Aplicar principios de programación estructurada para diseñar e implementar módulos y algoritmos; 2) Utilizar estructuras de control para construir flujo lógico correcto y eficiente; 3) Comparar y seleccionar entre paradigmas de programación (procedural, orientada a objetos, funcional) para resolver problemas; 4) Aplicar buenas prácticas de desarrollo para sistemas inmersivos, incluyendo documentación, pruebas y control de versiones; 5) Trabajar de forma colaborativa en proyectos de software.", "modalidades_tecnologicas_e_informaticas": "Entorno de aprendizaje: computadores con acceso a internet; IDEs como Visual Studio Code, PyCharm o Eclipse; compiladores e intérpretes para C, Java y Python; herramientas de control de versiones (Git, GitHub/GitLab); plataformas de gestión de cursos y foros; herramientas de depuración y pruebas; recursos de hardware para desarrollo de software (PC/laptop) y, si aplica, plataformas de simulación o motores de juego ligeros para sistemas inmersivos.", "actividades_de_aprendizaje_independientes": "Actividades de aprendizaje independientes (aprox. 8 horas): 1) Resolución de ejercicios de programación y prácticas de estructuras de control; 2) Lecturas de capítulos y material de apoyo; 3) Desarrollo de un módulo pequeño de software aplicando uno o más paradigmas; 4) Revisión de código y refactorización; 5) Preparación de notas y entrega de entregables parciales para el proyecto. Se recomienda 8 horas de estudio independiente.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Programación estructurada y paradigmas", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Sesiones de enseñanza guiada en aula y laboratorio: explicación de conceptos, demostraciones de código, resolución guiada de ejercicios y estudio de casos; laboratorios de programación supervisados en los que el académico guía la construcción de módulos y la elección de paradigmas; revisión de código en clase; diseño de soluciones en paralelo al proyecto integrador; asesoría y apoyo en la resolución de dudas técnicas y conceptuales. La carga presencial es de 5 horas y se esperan 8 horas de estudio independiente, totalizando la carga de la asignatura."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1079, "total_tokens": 8292, "output_tokens": 7213, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 6336}}, "responseId": "resp_0ec6f8587cd8bc6c00698e6ae901548194870419f095812f4a", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Principios de programación, estructuras de control, paradigmas (procedural, OOP, funcional) y buenas prácticas para desarrollo de sistemas inmersivos."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-13 00:05:59.544199+00', '2026-02-13 00:07:30.127728+00', 5, 8, 'borrador', '[]'), + ('f82a014c-acbc-4c6d-b28a-e667ff1cfcc9', '05863c8a-2a93-42f9-a4b7-65cef2edfe72', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'ITMI-607', 'Aseguramiento de Calidad y Pruebas para Experiencias Inmersivas', 'OBLIGATORIA', 4, 8, '0a35f63e-a6d0-465a-94ce-ca2d7db1d239', NULL, '{"ciclo": "Ciclo 6", "contenido_tematico": "1. Fundamentos de aseguramiento de calidad en experiencias inmersivas\n1.1 Conceptos de calidad, pruebas y aseguramiento de la calidad en entornos de realidad virtual y aumentada\n1.2 Tipos de pruebas aplicables a experiencias inmersivas (funcionales, de rendimiento, de usabilidad, de seguridad y de accesibilidad)\n\n2. Planificación de pruebas para experiencias inmersivas\n2.1 Definición de criterios de aceptación y metas de calidad\n2.2 Plan de pruebas y desarrollo de casos de prueba\n2.3 Gestión de riesgos, priorización y cobertura de pruebas\n\n3. Pruebas funcionales en entornos inmersivos\n3.1 Verificación de interacción usuario-dispositivo (controladores, manos, gaze)\n3.2 Validación de flujos de usuario y escenarios inmersivos\n3.3 Compatibilidad entre plataformas (PC, móviles, standalone) y plataformas de desarrollo (Unity, Unreal)\n\n4. Pruebas de rendimiento y estabilidad\n4.1 Medición de frame rate, latencia, consumo de recursos\n4.2 Perfilado de CPU/GPU y memoria\n4.3 Pruebas de estrés y estabilidad de sesiones prolongadas\n\n5. Pruebas de usabilidad y experiencia de usuario\n5.1 Métodos de evaluación cualitativos y cuantitativos\n5.2 Ergonomía, comodidad y motion sickness\n5.3 Observación de usuarios, cuestionarios y entrevistas\n\n6. Automatización de pruebas para experiencias inmersivas\n6.1 Estrategias de automatización específicas para VR/AR\n6.2 Automatización de pruebas de interfaz, entradas y métricas de telemetría\n6.3 Integración continua, pipelines de pruebas y reporting\n\n7. Métricas y reporte de calidad\n7.1 Métricas de calidad, rendimiento y usabilidad\n7.2 Generación de reportes, dashboards y trazabilidad\n\n8. Herramientas y entornos de pruebas\n8.1 Unity Test Framework, Unreal Automation, OpenXR\n8.2 Herramientas de automatización, simuladores, telemetría y registro de incidencias\n\n9. Gestión de defectos y ciclo de vida de las pruebas\n9.1 Registro, clasificación y priorización de defectos\n9.2 Trazabilidad, revisión y cierre de incidencias\n\n10. Consideraciones éticas, de seguridad y accesibilidad\n10.1 Seguridad de datos, privacidad, consentimiento y ética en pruebas\n10.2 Accesibilidad en experiencias inmersivas y diseño inclusivo\n\nCarga horaria total: 120 horas (48 horas de contacto, 72 horas de aprendizaje independiente).", "clave_de_la_asignatura": "ITMI-607", "criterios_de_evaluacion": "- Exámenes teóricos y resolución de casos: 25%\n- Prácticas de pruebas funcionales y de rendimiento: 25%\n- Proyecto de automatización de pruebas y framework: 25%\n- Participación, tareas y entregas prácticas: 15%\n- Presentación de informe final y defensa de casos: 10%", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de: 1) diseñar y ejecutar planes de prueba para experiencias inmersivas; 2) realizar pruebas funcionales, de rendimiento y de usabilidad; 3) aplicar técnicas de automatización de pruebas y métricas de calidad; 4) interpretar resultados, gestionar defectos y proponer mejoras; 5) comunicar hallazgos a equipos multidisciplinarios y documentar evidencia de prueba.", "modalidades_tecnologicas_e_informaticas": "Recursos tecnológicos y de información: laboratorio de realidad virtual con dispositivos como Oculus Quest 2, Rift S, HTC Vive; equipos de cómputo con GPU robusta; motores de desarrollo Unity 3D y Unreal Engine; OpenXR para compatibilidad multiplataforma; herramientas de pruebas de interfaz y automatización (Unity Test Framework, Unreal Automation, OpenXR Testing, Appium para pruebas móviles cuando aplique); herramientas de medición de rendimiento (Unity Profiler, Unreal Insights, RenderDoc, NVIDIA Nsight); herramientas de telemetría y registro (Application Insights, ELK); control de versiones (Git); integración continua (GitHub Actions, Jenkins); plataformas de gestión de pruebas (Jira, Xray) y entornos de laboratorio con pruebas de experiencia inmersiva. Modalidad presencial con laboratorio equipado y acceso remoto para simulaciones cuando sea aplicable.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas sobre QA en VR/AR; revisión de casos de estudio; investigación de herramientas y marcos de pruebas; desarrollo de un plan de pruebas para un caso de experiencia inmersiva; diseño y ejecución de pruebas independientes; análisis de resultados y documentación de hallazgos; lectura de estándares de usabilidad y seguridad.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Aseguramiento de Calidad y Pruebas para Experiencias Inmersivas", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases teóricas y prácticas; demostraciones en laboratorio de VR; desarrollo supervisado de planes de prueba y casos; ejecución de pruebas guiadas en proyectos; revisión de entregables y retroalimentación del académico; defensa oral de resultados y discusión de mejoras."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1089, "total_tokens": 8227, "output_tokens": 7138, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 5952}}, "responseId": "resp_0dcd260bda07243e00698e6ae8e71c819c8338ad0b34ae8ff1", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Diseño y ejecución de pruebas funcionales, de rendimiento y de usabilidad en entornos inmersivos; métricas y automatización de pruebas."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-13 00:05:59.544199+00', '2026-02-13 20:23:51.692439+00', 48, 72, 'borrador', '[]'), + ('47672234-9d95-4b96-ae71-158b3ed559a7', '0e0aea4d-b8b4-4e75-8279-6224c3ac769f', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CIB-CS-401-ALG', 'Álgebra', 'OBLIGATORIA', 3.22, 3, '0382a5da-804b-4194-bc19-b2649541c302', 2, '{"ciclo": "Hola 123", "contenido_tematico": "Enunciar, en idioma español, los temas y subtemas que se abordarán en la asignatura o unidad de aprendizaje; estructurados de manera lógica y secuencial y numerados en orden jerárquico. Éstos deberán ser acordes con la carga horaria asignada, sustentar la denominación de la asignatura y contribuir al logro de los fines de aprendizaje.", "clave_de_la_asignatura": "Anotar la clave que identifica a la asignatura o unidad de aprendizaje; la cual debe coincidir con la señalada en el mapa curricular.", "criterios_de_evaluacion": "Enlistar las actividades o productos que considerarán para valorar los aprendizajes logrados por los estudiantes, señalar el porcentaje para cada uno, de tal manera que sumen el 100%. Éstos deberán ser acordes con las actividades de aprendizaje.", "fines_de_aprendizaje_o_formacion": "Describir los aprendizajes y fines que alcanzará el estudiante al concluir la asignatura. Deberá sustentar la denominación de la asignatura, vincularse con los contenidos temáticos y coadyuvar al logro del fin de aprendizaje y perfil de egreso del plan de estudios.", "modalidades_tecnologicas_e_informaticas": "Describir los recursos tecnológicos y de comunicación que se emplearán para el desarrollo del proceso de enseñanza-aprendizaje de la asignatura. Para las modalidades no escolarizada y mixta, este elemento es obligatorio.", "actividades_de_aprendizaje_independientes": "Señalar las actividades de aprendizaje que desarrollará el estudiante de manera independiente. Éstas deberán ser acordes con la naturaleza de la asignatura y la modalidad educativa.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Señalar el nombre de la asignatura o unidad de aprendizaje de igual manera que en el mapa curricular.", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Señalar las actividades de aprendizaje que desarrollará el estudiante en las horas-clase. Éstas deberán ser acordes con la naturaleza de la asignatura, modalidad educativa e instalaciones empleadas, además de contribuir al logro de los fines de aprendizaje."}', '[{"temas": ["Ética y legalidad", "PTES/OSSTMM (visión general)", "Alcance y reglas"], "titulo": "Fundamentos y metodología", "unidad": 1}, {"temas": ["OSINT", "Descubrimiento de servicios", "Enumeración"], "titulo": "Reconocimiento y enumeración", "unidad": 2}, {"temas": ["Vulnerabilidades comunes", "Explotación controlada", "Post-explotación básica"], "titulo": "Explotación en laboratorio", "unidad": 3}, {"temas": ["Evidencias", "Severidad", "Recomendaciones"], "titulo": "Reporte y remediación", "unidad": 4}]', 'MANUAL', '{"seed": true}', '11111111-1111-1111-1111-111111111111', '11111111-1111-1111-1111-111111111111', '2026-02-03 21:51:47.719607+00', '2026-02-23 20:52:55.662769+00', 454, 2, 'borrador', '[]'), + ('3408baf0-c967-41e2-b63a-20664d7fea9e', '79fba458-aea4-4ca8-ab76-943ede479f15', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'PRI101', 'Fundamentos de Investigación', 'TRONCAL', 4, 1, '1f875112-f9de-451c-acf1-a34601bba1a3', NULL, '{"ciclo": "Ciclo formativo troncal", "contenido_tematico": "1. Fundamentos de la investigación científica y del método científico; 1.1 Paradigmas y epistemologías; 1.2 Formulación de preguntas de investigación y objetivos. 2. Diseño de investigación; 2.1 Tipos de investigación (exploratoria, descriptiva, explicativa, experimental); 2.2 Diseño de estudios cualitativos y cuantitativos; 2.3 Muestreo, validez y confiabilidad. 3. Redacción y comunicación científica; 3.1 Estructura de reportes y artículos; 3.2 Normas de citación y gestión de referencias (APA); 3.3 Presentación de resultados (tablas, figuras, gráficos). 4. Ética, reproducibilidad y calidad de la evidencia; 4.1 Ética en la investigación; 4.2 Revisión por pares y plagio. 5. Proyecto integrador; 5.1 Planteamiento del problema y diseño de protocolo; 5.2 Elaboración de propuesta de investigación. Carga horaria total: 48 horas académicas presenciales y 80 horas de trabajo independiente. Créditos: 4.", "clave_de_la_asignatura": "PRI101", "criterios_de_evaluacion": "1) Participación y asistencia en clase (10%); 2) Diseño de estudio y entrega de plan de investigación (35%); 3) Informe de proyecto o artículo corto (25%); 4) Examen teórico (20%); 5) Presentación oral de resultados/defensa de la propuesta (10%).", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de: a) formular preguntas y objetivos de investigación; b) diseñar un protocolo de estudio (tipos de diseño, muestreo y técnicas de recolección de datos); c) realizar búsquedas bibliográficas y gestionar referencias; d) redactar propuestas de investigación y reportes académicos con estructura y normas de citación; e) interpretar resultados y comunicar hallazgos de forma ética.", "modalidades_tecnologicas_e_informaticas": "Plataforma de gestión del aprendizaje (LMS) y herramientas de videoconferencia; procesadores de texto y herramientas de revisión de estilo; gestión de referencias (Zotero o Mendeley); software de análisis básico (R o SPSS); herramientas de nube para almacenamiento y colaboración; requisitos de comunicación asincrónica (foros, correo) y sincrónica (tutorías, sesiones). Nota: para las modalidades no escolarizada y mixta, este elemento es obligatorio.", "actividades_de_aprendizaje_independientes": "Lectura y análisis crítico de literatura relevante; búsquedas bibliográficas y evaluación de fuentes; redacción de borradores de cada sección de la propuesta; elaboración de un esquema y un protocolo de investigación; desarrollo de resúmenes y fichas de lectura; ejercicios de citación y parafraseo; revisión de pares entre estudiantes.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Fundamentos de Investigación", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Sesiones magistrales y talleres de diseño de investigación; revisión guiada de borradores de propuesta; tutorías individuales para apoyo en planteamiento del problema, diseño y metodología; talleres de redacción y normas de citación; defensa de la propuesta ante el grupo y/o panel docente; sesiones de retroalimentación sobre avances del proyecto y su implementación."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1066, "total_tokens": 6995, "output_tokens": 5929, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 5120}}, "responseId": "resp_0dbb980a81988a2d00698f49ba77ac819fb5f109ec2cd8b08d", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Introducción a métodos científicos, diseño de investigación y redacción académica para proyectos de grado y trabajos científicos."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-13 15:56:39.845265+00', '2026-02-13 15:58:24.175509+00', 48, 80, 'borrador', '[]'), + ('0401ca75-ea1d-4422-b4f6-1beee8459c52', '79fba458-aea4-4ca8-ab76-943ede479f15', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'MS320', 'Modelado y Simulación', 'OBLIGATORIA', 4, 2, '2021b495-d369-4988-be1f-8aaf508932f5', NULL, '{"ciclo": "Tercer ciclo", "contenido_tematico": "1. Fundamentos de modelado y simulación\\n1.1 Conceptos esenciales\\n1.2 Tipos de modelos: deterministas y estocásticos\\n2. Modelado matemático\\n2.1 Formulación de problemas\\n2.2 Modelos de colas, redes y procesos de producción\\n3. Métodos de simulación\\n3.1 Simulación en tiempo discreto\\n3.2 Simulación continua\\n3.3 Verificación y validación de modelos\\n4. Diseño e implementación en software de simulación\\n4.1 Matlab/Simulink\\n4.2 Python y SimPy\\n4.3 AnyLogic y otras herramientas\\n5. Análisis de resultados y toma de decisiones\\n5.1 Análisis de sensibilidad y experimentos de diseño (DOE)\\n5.2 Métricas de rendimiento\\n6. Aplicaciones en sistemas productivos y logísticos\\n6.1 Optimización de operaciones\\n6.2 Gestión de colas y capacidad\\n7. Ética, reproducibilidad y documentación de modelos\\nCarga horaria: 60 horas académicas presenciales y 80 horas de estudio independiente.", "clave_de_la_asignatura": "MS320", "criterios_de_evaluacion": "Examen final 40%; Proyecto de modelado y simulación con entrega de código y reporte 30%; Tareas y ejercicios prácticos 15%; Presentación y defensa del proyecto 15%.", "fines_de_aprendizaje_o_formacion": "Al finalizar, el estudiante será capaz de: 1) comprender y diferenciar fundamentos de modelado matemático y simulación; 2) diseñar, implementar y validar modelos de simulación para sistemas reales; 3) analizar escenarios y tomar decisiones informadas; 4) aplicar herramientas computacionales (Matlab/Simulink, Python/SimPy, AnyLogic) para construir y ejecutar modelos; 5) comunicar resultados y conclusiones de manera clara; 6) trabajar de forma colaborativa en proyectos de modelado y simulación.", "modalidades_tecnologicas_e_informaticas": "Software y herramientas: Matlab/Simulink; Python (SimPy, NumPy, SciPy); AnyLogic; Excel con macros; Jupyter Notebooks; Git y repositorios remotos; plataformas de gestión del aprendizaje y videoconferencia; recursos de hardware para simulación (PCs con capacidad de cómputo moderada). Para modalidades no presenciales o mixtas, se requiere acceso a entornos de simulación y a materiales digitales.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas y revisión bibliográfica; resolución de ejercicios de modelado; construcción de modelos simples de casos prácticos; desarrollo de un proyecto de simulación de ciclo completo; estudio de casos de la industria; elaboración de informe de resultados y reporte técnico; estudio de DOE y análisis de sensibilidad.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Modelado y Simulación (Obligatoria)", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales breves para introducir conceptos; talleres prácticos guiados con software de simulación; laboratorios computacionales para construcción de modelos; revisión y discusión de casos de estudio; sesiones de asesoría para avance del proyecto; presentaciones parciales de avances y feedback del docente."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1068, "total_tokens": 6982, "output_tokens": 5914, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 5120}}, "responseId": "resp_0f7b2b0f1c5fd88100698f49ba541c8190b4120e0bacf9f6e1", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Técnicas de modelado matemático y simulación computacional para análisis de sistemas y apoyo a decisiones."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-13 15:56:39.845265+00', '2026-02-13 15:58:25.892056+00', 60, 80, 'borrador', '[]'), + ('f23374e5-be5c-40b2-919b-17550ee0712b', '79fba458-aea4-4ca8-ab76-943ede479f15', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'MEA125', 'Metodologías de Enseñanza y Aprendizaje', 'OPTATIVA', 2, 1, '1f875112-f9de-451c-acf1-a34601bba1a3', NULL, '{"ciclo": "Optativa", "contenido_tematico": "1. Enfoques y estrategias de enseñanza. 1.1 Conceptos clave de aprendizaje y enseñanza; 1.2 Estrategias de enseñanza activas (aprendizaje basado en problemas, aprendizaje basado en proyectos, aprendizaje colaborativo); 1.3 Diferenciación pedagógica y atención a la diversidad; 1.4 Rol del docente y del aprendizaje del estudiante. 2. Diseño curricular y planificación. 2.1 Principios y enfoques para el diseño curricular; 2.2 Definición de objetivos de aprendizaje y unidades; 2.3 Secuenciación, progresión y articulación de contenidos; 2.4 Evaluación formativa como parte de la planificación y retroalimentación; 2.5 Adaptación a contextos institucionales y recursos. 3. Evaluación en la enseñanza. 3.1 Tipos de evaluación (formativa, sumativa, diagnóstica); 3.2 Instrumentos y rubricas de evaluación; 3.3 Retroalimentación efectiva y uso de resultados para mejora; 3.4 Ética y fiabilidad en la evaluación. 4. Tecnologías y contextos de aprendizaje. 4.1 Uso de tecnologías educativas para enriquecer la enseñanza (LMS, herramientas de colaboración, entornos virtuales); 4.2 Diseño de actividades para contextos presenciales, a distancia e híbridos; 4.3 Consideraciones sobre accesibilidad, inclusión y brecha digital. 5. Prácticas docentes y desarrollo profesional. 5.1 Microenseñanza, simulaciones y práctica reflexiva; 5.2 Observación entre pares y análisis de lecciones; 5.3 Diseño de planes de mejora y desarrollo profesional continuo; 5.4 Ética profesional en la enseñanza. 6. Investigación y ética educativa. 6.1 Observación, análisis crítico de literatura educativa; 6.2 Consideraciones éticas y de seguridad en contextos de aprendizaje; 6.3 responsabilidad social y cultural en la educación. Distribución horaria prevista: 32 horas académicas presenciales y 40 horas independientes.", "clave_de_la_asignatura": "MEA125", "criterios_de_evaluacion": "Participación en clase y trabajos prácticos (10%). Diseño de una unidad didáctica o plan de clase (25%). Actividades de microenseñanza y retroalimentación entre pares (20%). Ensayo crítico sobre estrategias didácticas y evaluación (15%). Portafolio de evidencias y entregables (20%). Examen corto de síntesis (10%).", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante podrá: 1) diseñar unidades o planes de clase alineados con objetivos de aprendizaje, contextos y diversidad; 2) aplicar y adaptar estrategias pedagógicas activas para diferentes contextos educativos; 3) seleccionar y aplicar instrumentos de evaluación formativa y sumativa; 4) analizar críticamente enfoques metodológicos y su impacto en el aprendizaje; 5) integrar tecnologías y herramientas didácticas para enriquecer la enseñanza; 6) reflexionar sobre la ética, la inclusión y la equidad en la práctica educativa. Este perfil contribuye a fortalecer las capacidades pedagógicas del plan de estudios y a su desarrollo profesional.", "modalidades_tecnologicas_e_informaticas": "Modalidad: presencial, con opción a modalidad mixta o no escolarizada según disponibilidad institucional. Recursos tecnológicos: plataforma de gestión de aprendizaje (LMS), herramientas de colaboración en línea (Google Workspace, Microsoft 365), rúbricas digitales, cuestionarios y pruebas en línea, videos, entornos virtuales para simulaciones de microenseñanza, bibliografía digital, repositorio institucional. Se utilizarán videoconferencias para sesiones sincrónicas en modalidad mixta/no escolarizada; se promoverá el acceso a contenidos en dispositivos móviles y con conectividad limitada; se fomentará el uso de entornos de aprendizaje colaborativo y de evaluación digital.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas y revisión de literatura sobre metodologías de enseñanza. Análisis de casos prácticos y reflexión crítica. Elaboración de una propuesta de unidad didáctica, con objetivos, contenidos, actividades, recursos y criterios de evaluación. Desarrollo de un portafolio de evidencias que incluya diseños, rúbricas y reflexiones. Resolución de ejercicios de diseño y evaluación. Trabajo independiente para adaptar ideas a contextos específicos.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Metodologías de Enseñanza y Aprendizaje", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Actividades de aprendizaje bajo conducción de un académico: 1) exposiciones breves y talleres guiados por el docente; 2) diseño y ejecución de microclases en sesiones supervisadas; 3) análisis de casos y discusión orientada; 4) revisión y retroalimentación de rúbricas y productos de aprendizaje; 5) sesiones de tutoría para asesoría en el desarrollo de la unidad didáctica; 6) prácticas de observación y reflexión sobre la enseñanza en contextos reales o simulados."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1071, "total_tokens": 9635, "output_tokens": 8564, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 7424}}, "responseId": "resp_04ffe2366104700d00698f49b9d3dc819cba064d50f1b83457", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Estrategias pedagógicas, diseño curricular y evaluación para facilitar el aprendizaje en diversos contextos."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-13 15:56:39.845265+00', '2026-02-13 15:58:28.568759+00', 32, 40, 'borrador', '[]'), + ('8bab29f8-a8c3-4e92-b4b0-4ef327522858', '05863c8a-2a93-42f9-a4b7-65cef2edfe72', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'ITMI-609', 'Metodologías de Prototipado Rápido y Validación', 'OPTATIVA', 4, 4, '0a35f63e-a6d0-465a-94ce-ca2d7db1d239', NULL, '{"ciclo": "Ciclo 4 - Optativa", "contenido_tematico": "1. Fundamentos del prototipado rápido y validación\n1.1 Definiciones, objetivos y diferencias entre prototipos de baja fidelidad y alta fidelidad\n1.2 Contextos de uso y usuarios\n2. Técnicas de prototipado rápido\n2.1 Prototipos de baja fidelidad: papel, cartón, storyboards\n2.2 Prototipos de alta fidelidad: wireframes interactivos, mockups, simulaciones\n2.3 Prototipos en contextos inmersivos: VR/AR\n3. Planificación de iteraciones\n3.1 Definición de hipótesis de diseño\n3.2 Diseño de ciclos iterativos y criterios de éxito\n3.3 Planificación de pruebas y cronograma\n4. Métodos de validación\n4.1 Pruebas con usuarios en contextos inmersivos\n4.2 Técnicas de recopilación de feedback (entrevistas, observación, métricas)\n4.3 Análisis de resultados y toma de decisiones\n5. Herramientas y entornos\n5.1 Herramientas de prototipado digital (Figma, Adobe XD, InVision)\n5.2 Tools de prototipado físico (impresión 3D, electrónica básica)\n5.3 Entornos de pruebas y entornos inmersivos\n6. Ética, usabilidad y accesibilidad\n7. Entrega y documentación\n7.1 Reportes y presentaciones\n7.2 Portafolio de prototipos y decisiones de diseño\n8. Casos de estudio y prácticas\n8.1 Casos reales de prototipado rápido en contextos inmersivos\n8.2 Proyecto final de clase", "clave_de_la_asignatura": "ITMI-609", "criterios_de_evaluacion": "Participación y asistencia en sesiones prácticas: 15%\nDesarrollo de prototipo rápido con dos iteraciones y pruebas: 30%\nInforme de validación de hipótesis y resultados: 25%\nPresentación y defensa del prototipo: 15%\nBitácora y ejercicios independientes: 15%", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de diseñar y prototipar ideas en baja y alta fidelidad, planificar e implementar iteraciones rápidas, definir hipótesis de diseño y diseñar pruebas para validarlas en contextos inmersivos, recolectar y analizar evidencia de usuario y comunicar decisiones de diseño mediante informes y presentaciones. La asignatura contempla 48 horas presenciales y 72 horas de aprendizaje independiente, para un total de 120 horas.", "modalidades_tecnologicas_e_informaticas": "Se emplearán herramientas de prototipado digital (Figma, Adobe XD, InVision), prototipado físico (impresión 3D, corte láser, electrónica básica), entornos inmersivos (Unity, WebXR, herramientas de VR/AR), y plataformas de pruebas (Lookback, UserTesting). Se utilizarán plataformas de gestión de aprendizaje (LMS), videoconferencia, almacenamiento en la nube y control de versiones (Git).", "actividades_de_aprendizaje_independientes": "Lecturas y análisis de casos de prototipado y validación.\nElaboración de prototipos de baja fidelidad.\nPlanificación de dos iteraciones de prototipado y pruebas de usuario no supervisadas.\nDesarrollo de prototipos de alta fidelidad y pruebas de validación.\nRegistro en una bitácora semanal del proceso de diseño y decisiones.\nElaboración de un informe final y portafolio de prototipos.\nRevisión y estudio de casos de uso y literatura relacionada.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Metodologías de Prototipado Rápido y Validación", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Sesiones prácticas en laboratorio de prototipado con supervisión.\nTalleres de ideación, diseño rápido y crítica de prototipos.\nRevisiones de prototipos con feedback guiado por el docente.\nPruebas de usuario supervisadas con registro de resultados.\nDemostraciones de herramientas y técnicas y discusión de resultados.\nEjercicios de reflexión ética, usabilidad y accesibilidad.\nPreparación de informes y presentaciones con orientación del docente."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1088, "total_tokens": 9238, "output_tokens": 8150, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 7168}}, "responseId": "resp_07db46772a65f8cd00698e6ae8da3081939e5b99b508b8f149", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Técnicas para crear prototipos iterativos baja y alta fidelidad, pruebas rápidas y validación de hipótesis de diseño en contextos inmersivos."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-13 00:05:59.544199+00', '2026-02-13 20:22:22.994323+00', 48, 72, 'borrador', '[]'), + ('8dc1a71b-9586-4668-a84e-4e735ddcea64', '05863c8a-2a93-42f9-a4b7-65cef2edfe72', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'ITMI-602', 'Gestión de Proyectos y Planificación de Productos Inmersivos', 'OBLIGATORIA', 6, 5, '0a35f63e-a6d0-465a-94ce-ca2d7db1d239', NULL, '{"ciclo": "Cuarto ciclo", "contenido_tematico": "Nota: Carga horaria total: 64 horas académicas y 96 horas de aprendizaje independiente (total 160 horas). El tema central es la gestión de proyectos para productos inmersivos enfocándose en planificación, alcance, cronograma, costos y gestión de stakeholders, con casos y herramientas. 1. Fundamentos de Gestión de Proyectos: 1.1 Conceptos clave; 1.2 Marcos de referencia (PMBOK, PRINCE2); 1.3 Rol del gerente de proyectos en entornos de inmersión (VR/AR). 2. Planificación de Alcance: 2.1 Definición de alcance para experiencias inmersivas; 2.2 Estructura de desglose del trabajo (WBS); 2.3 Gestión de cambios; 2.4 Criterios de aceptación. 3. Planificación de Cronograma: 3.1 Técnicas de estimación; 3.2 Generación y lectura de cronogramas; 3.3 Uso de herramientas (Gantt, CPM, PERT); 3.4 Ritmo de desarrollo en sprints para prototipos inmersivos. 4. Planificación de Costos: 4.1 Estimación de costos y presupuestos; 4.2 Control de costos; 4.3 Análisis de valor y ROI; 4.4 Fuentes de financiamiento y gestión de riesgos. 5. Gestión de Stakeholders: 5.1 Identificación y clasificación; 5.2 Análisis de interés e influencia; 5.3 Plan de comunicaciones; 5.4 Participación de stakeholders en etapas de diseño y pruebas; 5.5 Gestión de expectativas y conflicto. 6. Casos prácticos y herramientas: 6.1 Estudio de casos de proyectos inmersivos; 6.2 Herramientas de soporte (plantillas, dashboards); 6.3 Talleres de simulación. 7. Gestión de Riesgos y Calidad: 7.1 Identificación y evaluación de riesgos; 7.2 Plan de respuesta; 7.3 Aseguramiento de calidad; 7.4 Pruebas y validación. 8. Integración con Diseño de Producto Inmersivo: 8.1 Fases de desarrollo de productos inmersivos; 8.2 Integración de tecnología; 8.3 Control de cambios y versiones; 9. Ética, Seguridad y Propiedad Intelectual: 9.1 Consideraciones éticas y de seguridad; 9.2 Propiedad intelectual y licencias; 9.3 Cumplimiento normativo y protección de datos.", "clave_de_la_asignatura": "ITMI-602", "criterios_de_evaluacion": "1. Plan de Proyecto y Plan de Producto Inmersivo (40%). 2. Caso práctico y defensa oral (25%). 3. Entregables y ejercicios prácticos (20%). 4. Participación y asistencia (15%).", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante podrá: a) planificar y gestionar el alcance, cronograma y costos de proyectos de experiencias inmersivas; b) gestionar stakeholders y comunicación; c) aplicar herramientas y metodologías de gestión de proyectos; d) analizar casos reales y proponer soluciones; e) diseñar y presentar un plan integral de proyecto y de producto inmersivo.", "modalidades_tecnologicas_e_informaticas": "Plataforma de aprendizaje (LMS). Clases sincrónicas y grabadas vía videoconferencia. Herramientas de gestión de proyectos (MS Project, Primavera, Asana, Jira). Herramientas de colaboración (Google Workspace, Notion). Software de simulación y modelado de experiencias inmersivas. Bibliotecas y repositorios de materiales (GitHub, Bitbucket). Requisitos de hardware y software para desarrollo de prototipos inmersivos.", "actividades_de_aprendizaje_independientes": "1) Lecturas de PMBOK/PRINCE2 y casos de experiencias inmersivas; 2) Análisis de casos de proyectos inmersivos; 3) Elaboración de plan de proyecto y plan de producto inmersivo; 4) Desarrollo de estimaciones de costos y cronogramas; 5) Preparación de entregables (alcance, cronograma, presupuesto, plan de stakeholders); 6) Revisión de la literatura sobre gestión de riesgos; 7) Ensayo reflexivo sobre ética, seguridad y propiedad intelectual.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Gestión de Proyectos y Planificación de Productos Inmersivos", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "1) Clases magistrales sobre fundamentos y marcos de gestión de proyectos. 2) Talleres prácticos para elaboración de alcance, WBS y cronogramas. 3) Laboratorios de uso de herramientas de gestión (MS Project, Asana, Jira) para crear un cronograma y presupuesto. 4) Revisión de avances de proyectos y feedback. 5) Discusión de casos y soluciones. 6) Presentaciones de entregables y defensa de decisiones. 7) Tutoría para desarrollo de plan de proyecto y defensa final."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1081, "total_tokens": 8134, "output_tokens": 7053, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 5888}}, "responseId": "resp_0a8e1aff8377a03400698e6ae96df481a187786c89196ed504", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Planificación, alcance, cronograma, costos y gestión de stakeholders en proyectos de experiencias inmersivas; casos y herramientas."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-13 00:05:59.544199+00', '2026-02-13 20:23:47.005878+00', 64, 96, 'borrador', '[]'), + ('c056750a-df0b-4aec-a0e6-4face0a0cd13', '05863c8a-2a93-42f9-a4b7-65cef2edfe72', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CIC101', 'Metodos numéricos y computación científica', 'OBLIGATORIA', 5, 7, '35e06a47-655d-4ce4-8b5f-52dc068c271c', NULL, '{"ciclo": "Ciclo 2", "contenido_tematico": "1. Fundamentos de métodos numéricos y computación científica; 1.1 Representación numérica de problemas y discretización; 1.2 Errores numéricos: truncación y round-off; 2. Resolución de sistemas lineales; 2.1 Métodos directos: eliminación de Gauss y factorización LU; 2.2 Métodos iterativos: Jacobi, Gauss-Seidel, SOR; 2.3 Condicionamiento y estabilidad; 3. Interpolación y ajuste de curvas; 3.1 Interpolación polinomial (Lagrange y Newton); 3.2 Interpolación con splines cúbicos; 3.3 Ajuste de curvas y mínimos cuadrados; 4. Métodos de aproximación e integración numérica; 4.1 Aproximación de funciones y diferencias; 4.2 Integración numérica: reglas del trapecio y Simpson; 4.3 Estimación de errores y convergencia; 5. Análisis de errores y aplicaciones en ingeniería; 5.1 Análisis de errores en discretización y propagación de error; 5.2 Casos de ingeniería: simulación numérica y estudio de sensibilidad; 5.3 Implementación y herramientas de computación científica (Python/ MATLAB).", "clave_de_la_asignatura": "CIC101", "criterios_de_evaluacion": "1) Exámenes parciales y final: 40%; 2) Laboratorios y prácticas de programación: 30%; 3) Tareas y ejercicios de curso: 20%; 4) Proyecto o informe de aplicación en ingeniería: 10%", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de: describir y explicar los fundamentos de métodos numéricos; implementar algoritmos para resolución de sistemas lineales e interpolación; analizar errores, estabilidad y convergencia; aplicar herramientas computacionales (Python/NumPy/SciPy o MATLAB) para resolver problemas de ingeniería; evaluar resultados y presentar informes técnicos.", "modalidades_tecnologicas_e_informaticas": "Entornos de programación: Python con NumPy/SciPy y MATLAB/Octave; entornos de desarrollo como Jupyter notebooks, IDEs; recursos de cómputo (laboratorio de cómputo y/o plataformas en la nube); herramientas de control de versiones; plataformas de entrega de tareas y evaluación; bibliotecas numéricas para álgebra lineal, integración y interpolación.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas y revisión de literatura; ejercicios de programación y simulación independientes; resolución de problemas de ingeniería; prácticas de simulación numérica; preparación de informes y revisión de documentación técnica;", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Métodos numéricos y computación científica", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales y prácticas guiadas; resolución de ejercicios en grupo; desarrollo de laboratorio de cómputo con supervisión; demostraciones de algoritmos y revisión de código; feedback y discusión de resultados de casos de ingeniería."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1077, "total_tokens": 7691, "output_tokens": 6614, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 5888}}, "responseId": "resp_0ff920af511a3e9b00698e6ae8e494819c9ec28e189161d369", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Algoritmos para aproximación numérica, resolución de sistemas lineales, interpolación y análisis de errores en problemas de ingeniería."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-13 00:05:59.544199+00', '2026-02-13 20:23:56.948184+00', 4, 6, 'borrador', '[]'), + ('09e6ded7-d624-4fb2-894a-c6efdb4ae7e4', '05863c8a-2a93-42f9-a4b7-65cef2edfe72', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'EST101', 'Probabilidad y estadística para ingeniería', 'TRONCAL', 5, 3, '35e06a47-655d-4ce4-8b5f-52dc068c271c', NULL, '{"ciclo": "Ciclo I - TRONCAL", "contenido_tematico": "1. Fundamentos de probabilidad\n1.1 Espacios muestrales y eventos\n1.2 Reglas de probabilidad: suma, producto y complementos\n1.3 Independencia, dependencia y variables aleatorias discretas\n2. Distribuciones de probabilidad\n2.1 Distribuciones discretas: Binomial y Poisson\n2.2 Distribuciones continuas: Normal, t de Student y Chi-cuadrada\n2.3 Propiedades de las distribuciones, parámetros y estimación de características\n3. Estimación y estimación de parámetros\n3.1 Estimación puntual y sesgo\n3.2 Estimación por intervalos y confianza\n3.3 Tamaño de muestra y métodos de muestreo\n4. Pruebas de hipótesis\n4.1 Planteamiento de hipótesis y errores tipo I y tipo II\n4.2 Pruebas paramétricas: Z y t\n4.3 Pruebas no paramétricas\n4.4 Poder de la prueba y interpretación de resultados\n5. Métodos y aplicaciones en ingeniería\n5.1 Diseño de experimentos y procesos de ingeniería\n5.2 Análisis de datos experimentales\n5.3 Casos de estudio y aplicación con software estadístico\n6. Laboratorio y proyectos cortos\n6.1 Laboratorio con R/Python\n6.2 Proyecto corto de análisis de datos", "clave_de_la_asignatura": "EST101", "criterios_de_evaluacion": "Exámenes parciales y/o finales que cubren los conceptos clave de probabilidad y estadística: 40%\nTareas y ejercicios de casa, trabajadas de forma periódica: 25%\nProyecto de análisis de datos o informe final: 20%\nParticipación en clase y prácticas de laboratorio: 10%\nEntregas prácticas y revisión de soluciones: 5%", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura, el estudiante podrá aplicar modelos probabilísticos, seleccionar distribuciones adecuadas, estimar parámetros, realizar pruebas de hipótesis, interpretar resultados en contextos de ingeniería, diseñar experimentos simples y comunicar conclusiones técnicas de análisis de datos.", "modalidades_tecnologicas_e_informaticas": "Se emplearán recursos tecnológicos para el desarrollo del proceso de enseñanza-aprendizaje: plataforma de gestión de aprendizaje (LMS) para distribución de materiales, foros y entregas; software estadístico (R, Python con pandas/scipy, Excel avanzado y herramientas como JASP o Jamovi); entornos de programación y notebook (RStudio, Jupyter); y laboratorios con acceso a datos. En las modalidades no escolarizada y mixta, este elemento es obligatorio.", "actividades_de_aprendizaje_independientes": "Resolución de problemas y ejercicios propuestos; lectura de textos de probabilidad y estadística; análisis de conjuntos de datos reales; simulaciones y prácticas con software estadístico; elaboración de un informe técnico; revisión y autoevaluación de soluciones.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Probabilidad y estadística para ingeniería", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales breves y contextualizadas; resolución guiada de ejercicios en grupo; sesiones de laboratorio supervisadas con uso de software estadístico; análisis de casos de ingeniería y discusión en clase; revisión de resultados y retroalimentación; asesoría para el proyecto de datos."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1072, "total_tokens": 7198, "output_tokens": 6126, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 5312}}, "responseId": "resp_0f94679cac35274200698e6ae99d808195a1ef29394f5433b0", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Modelos probabilísticos, distribuciones, estimación y pruebas de hipótesis con aplicaciones en experimentos y análisis de datos."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-13 00:05:59.544199+00', '2026-02-13 20:24:07.68173+00', 4, 5, 'borrador', '[]'), + ('52260576-55df-4fc6-9603-e8654d84bed7', '05863c8a-2a93-42f9-a4b7-65cef2edfe72', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'ITMI-610', 'Economía de Productos Digitales y Emprendimiento para Inmersión', 'OPTATIVA', 4, 4, '35e06a47-655d-4ce4-8b5f-52dc068c271c', NULL, '{"ciclo": "Optativa", "contenido_tematico": "1. Fundamentos de economía de productos digitales\\n1.1 Definición y alcance de los productos digitales inmersivos\\n1.2 Tecnología de inmersión (VR/AR/MR) y experiencia de usuario\\n1.3 Dinámica del mercado y modelos de negocio en la economía de la inmersión\\n2. Modelos de negocio y monetización para productos de inmersión\\n2.1 Modelos de ingresos: venta, suscripción, freemium, microtransacciones\\n2.2 Ecosistemas de productos y servicios complementarios\\n2.3 Estrategias de monetización escalables y sostenibles\\n3. Propuesta de valor, diseño y desarrollo de productos\\n3.1 Segmentación de clientes y necesidades de usuarios inmersivos\\n3.2 Propuesta de valor para productos inmersivos\\n3.3 Diseño y MVP de una experiencia o producto en VR/AR\\n4. Propiedad intelectual, regulación y ética\\n4.1 Derechos de autor, patentes y secretos comerciales\\n4.2 Licenciamiento de contenidos y uso de IP de terceros\\n4.3 Privacidad, ética y cumplimiento en datos de inmersión\\n5. Estrategias de mercado, lanzamiento y crecimiento\\n5.1 Análisis de mercado, competencia y tendencias\\n5.2 Canales de comercialización, alianzas y distribución\\n5.3 Go-to-market, pricing y estrategias de lanzamiento\\n6. Evaluación, métricas y gobernanza\\n6.1 Métricas de rendimiento y engagement\\n6.2 Cumplimiento legal y consideraciones éticas\\n7. Casos de estudio y prácticas aplicadas\\n7.1 Casos de éxito en productos de inmersión\\n7.2 Talleres de simulación de negocio y presentaciones\\n8. Talleres, prototipos y planes de negocio\\n8.1 Elaboración de plan de negocio para producto inmersivo\\n8.2 Presentación ante panel de evaluación", "clave_de_la_asignatura": "ITMI-610", "criterios_de_evaluacion": "40% Proyecto de negocio y plan de monetización para un producto inmersivo (trabajo en equipo); 25% Análisis de caso de mercado y defensa en clase; 15% Documentos de propiedad intelectual, licenciamiento y ética; 20% Participación, tareas prácticas y presentaciones de talleres", "fines_de_aprendizaje_o_formacion": "Al completar esta asignatura, el estudiante será capaz de: 1) comprender y aplicar modelos de negocio y monetización para productos digitales inmersivos; 2) analizar requerimientos de propiedad intelectual, licencias y regulaciones aplicables; 3) diseñar una propuesta de valor y un plan de negocio para un prototipo inmersivo; 4) desarrollar habilidades de análisis de mercado, toma de decisiones éticas y sostenibilidad del negocio; 5) realizar trabajo colaborativo en equipos multidisciplinarios y presentar resultados ante un panel.", "modalidades_tecnologicas_e_informaticas": "Se emplearán recursos como plataformas de aprendizaje en línea (LMS), herramientas de realidad virtual y aumentada (VR/AR/MR) para experiencias inmersivas, motores de desarrollo (Unity, Unreal Engine) para prototipos, herramientas de diseño y prototipado (Figma, Miro), hojas de cálculo (Excel/Sheets), herramientas de análisis de datos (Google Analytics, Tableau), herramientas de gestión de proyectos (Trello, Jira) y plataformas de videoconferencia y foros; acceso a bibliotecas de contenidos y casos de estudio sobre IP y marcos de regulación.", "actividades_de_aprendizaje_independientes": "72 horas de aprendizaje independiente: lectura y análisis de fundamentos económicos de productos digitales, revisión de casos de estudio, investigación de mercado para inmersiones, desarrollo de un plan de negocio y monetización, revisión de propiedad intelectual y licencias, elaboración de un MVP conceptual y prototipos en VR/AR, y preparación de la documentación de ética y cumplimiento, así como la presentación final.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Economía de Productos Digitales y Emprendimiento para Inmersión", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "48 horas de aprendizaje bajo conducción académica: clases magistrales y prácticas, talleres guiados, laboratorios de prototipos en VR/AR, análisis de casos en grupo, sesiones de retroalimentación y asesoría de un académico, y presentaciones de avances con evaluación continua."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1083, "total_tokens": 8086, "output_tokens": 7003, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 5952}}, "responseId": "resp_0c0112a430ccf9a500698e6ae939bc81979d4f4e6eb0f5df9c", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Modelos de negocio, monetización, propiedad intelectual y estrategias de mercado para productos y servicios basados en tecnologías de inmersión."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-13 00:05:59.544199+00', '2026-02-13 20:27:35.834937+00', 48, 72, 'borrador', '[]'), + ('8bb35dd7-d03e-4781-8108-c2f5df7b94ad', '05863c8a-2a93-42f9-a4b7-65cef2edfe72', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'ITMI-613', 'Localización y mapeo espacial para entornos inmersivos', 'OBLIGATORIA', 5, 9, '35e06a47-655d-4ce4-8b5f-52dc068c271c', NULL, '{"ciclo": "Sexto ciclo", "contenido_tematico": "1. Fundamentos de localización y mapeo espacial\n 1.1 Conceptos de SLAM, tracking y registro espacial\n 1.2 Representaciones de mapa y marco de referencia\n2. Sensores y plataformas para mapeo espacial\n 2.1 Cámaras RGB-D, LiDAR, sensores de movimiento (IMU)\n 2.2 Adquisición de datos en AR y MR\n3. Técnicas de SLAM y registro en entornos reales e inmersivos\n 3.1 Visual SLAM (V-SLAM) y variantes en entornos mixtos\n 3.2 SLAM multiesensor y fusión de datos\n 3.3 Registro espacial y alineación de escenas\n4. Integración de objetos virtuales en entornos reales\n 4.1 Registro y persistencia de objetos\n 4.2 Renderizado y sincronización temporal\n5. Herramientas, plataformas y flujos de trabajo\n 5.1 Unity/Unreal con ARKit/ARCore\n 5.2 Librerías y herramientas: ARFoundation, Vuforia, OpenCV, PCL\n 5.3 Prácticas de desarrollo y pruebas de rendimiento\n6. Consideraciones de seguridad, ética y usabilidad\n7. Proyecto integrador\nCarga horaria: 3 horas presenciales y 7 horas independientes para completar el curso.", "clave_de_la_asignatura": "ITMI-613", "criterios_de_evaluacion": "Proyecto de localización, mapeo y registro espacial de un entorno real con objetos virtuales: 40%\nExamen teórico sobre SLAM, tracking y registro espacial: 25%\nLaboratorios y prácticas supervisadas que demuestren comprensión de conceptos y aplicación de herramientas: 20%\nParticipación, entrega de tareas y presentaciones en clase: 15%", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de comprender fundamentos de localización y mapeo espacial (SLAM, tracking y registro); diseñar e implementar pipelines de mapeo y registro espacial para entornos inmersivos en AR/MR; integrar objetos virtuales con precisión en escenas reales; evaluar rendimiento y precisión de los sistemas; aplicar buenas prácticas de seguridad, usabilidad y ética; comunicar resultados de forma clara.", "modalidades_tecnologicas_e_informaticas": "Hardware: dispositivos de realidad aumentada y móviles, gafas AR, sensores de cámara estructurada; software: Unity3D, Unreal Engine, ARKit, ARCore, ARFoundation, Vuforia, OpenCV, PCL, ROS; hardware de laboratorio: cámaras RGB-D, LiDAR, IMU, GPU; conectividad y pruebas en tiempo real.", "actividades_de_aprendizaje_independientes": "Lecturas de artículos y papers sobre SLAM, localización y registro espacial en AR; ejercicios de implementación de módulos de SLAM en marcos de desarrollo; prácticas con datasets de entornos reales; desarrollo de un prototipo de mapeo y registro de un entorno real; informe de observaciones y análisis de rendimiento.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Localización y mapeo espacial para entornos inmersivos", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases teóricas magistrales con ejemplos prácticos; laboratorios guiados por el docente; sesiones de revisión de código y de resultados; tutorías para el proyecto integrador; demostraciones y retroalimentación en clase; asesoría personalizada para el proyecto integrador."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1081, "total_tokens": 7212, "output_tokens": 6131, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 5312}}, "responseId": "resp_0d7bb914efc389c100698e6f3553788197bab7619688897fb4", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "SLAM, tracking y registro espacial para sincronizar objetos virtuales con entornos reales en AR y experiencias mixtas."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-13 00:24:19.334774+00', '2026-02-13 20:23:53.256119+00', 3, 7, 'borrador', '[]'), + ('fb79b69b-90cd-475b-a861-9a9e9412365c', '05863c8a-2a93-42f9-a4b7-65cef2edfe72', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'ITMI-508', 'Interacción háptica y retroalimentación multimodal', 'OPTATIVA', 6, NULL, NULL, NULL, '{"ciclo": "Optativa", "contenido_tematico": "1. Fundamentos de interacción háptica\\n 1.1 Conceptos clave de haptics y percepción somatosensorial\\n 1.2 Tipos de retroalimentación háptica (táctil, kinésica) y sus aplicaciones\\n 1.3 Seguridad ergonómica y consideraciones de confort del usuario\\n2. Sensores y actuadores para interfaces hápticas\\n 2.1 Actuadores hápticos: vibratorios, mecánicos, piezoeléctricos\\n 2.2 Sensores de fuerza, torque, posición y acelerometría\\n 2.3 Interfaces electrónicas y electrónica de control\\n3. Arquitecturas y plataformas de desarrollo\\n 3.1 Microcontroladores y plataformas (Arduino, Raspberry Pi, ESP32)\\n 3.2 Comunicaciones (I2C, SPI, USB) y latencia\\n 3.3 Integración con motores y sensores para prototipos\\n4. Diseño de experiencias inmersivas con retroalimentación multimodal\\n 4.1 Modelado de objetos y simulación de fuerzas en entornos 3D\\n 4.2 Coordinación de retroalimentación visual, auditiva y háptica\\n 4.3 Prototipado rápido y pipelines de prueba\\n5. Pruebas de usabilidad y evaluación\\n 5.1 Métodos de prueba centrados en háptica\\n 5.2 Métricas de usabilidad, carga cognitiva y satisfacción\\n 5.3 Reportes de resultados y recomendaciones\\n6. Consideraciones éticas y normativas\\n 6.1 Seguridad, privacidad y ética de la retroalimentación sensorial\\n 6.2 Normativas y estándares aplicables", "clave_de_la_asignatura": "ITMI-508", "criterios_de_evaluacion": "1) Proyecto de diseño y prototipo de una interfaz háptica con pruebas de usabilidad: 40%\\n2) Informe técnico de arquitectura, selección de sensores/actuadores y viabilidad: 25%\\n3) Pruebas de usabilidad y análisis de métricas: 15%\\n4) Presentación final del prototipo y demostración: 10%\\n5) Participación y entregas de laboratorios y tareas: 10%", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de: diseñar, prototipar y evaluar interfaces hápticas y de retroalimentación multimodal para experiencias inmersivas; seleccionar sensores y actuadores apropiados y definir estrategias de interacción; realizar pruebas de usabilidad, medir métricas de experiencia y seguridad; analizar consideraciones ergonómicas, éticas y normativas; trabajar de forma colaborativa en equipos multidisciplinarios. La asignatura cuenta con 48 horas de contacto y 96 horas de aprendizaje independiente.", "modalidades_tecnologicas_e_informaticas": "Hardware y prototipado: Arduino, Raspberry Pi, microcontroladores compatibles. Actuadores hápticos: motores DC y paso a paso, actuadores lineales, actuadores piezoeléctricos. Sensores: acelerómetros, giroscopios, sensores de fuerza/torque, sensores de posición y sensores hápticos. Interfaces de comunicación: I2C, SPI, USB, CAN. Plataformas de software: Unity 3D para prototipos interactivos; MATLAB/Simulink para control; ROS para integración hardware; CAD para diseño; impresión 3D y CNC para prototipado. Entorno de pruebas: herramientas de simulación y laboratorios de pruebas de latencia, seguridad y ergonomía.", "actividades_de_aprendizaje_independientes": "Lecturas semanales sobre fundamentos de interacción háptica y revisiones de literatura; prácticas de laboratorio autónomas con hardware de prototipado; diseño y desarrollo de un prototipo individual de interfaz háptica; simulaciones en Unity o MATLAB para validar modelos de interacción; análisis de casos de pruebas de usabilidad y ética; elaboración de un informe de revisión bibliográfica.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Interacción háptica y retroalimentación multimodal", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases teóricas y demostraciones en laboratorio guiadas por el docente; prácticas de laboratorio orientadas al desarrollo de sensores y actuadores; sesiones de diseño y evaluación de prototipos con retroalimentación del académico; discusión de casos de estudio y buenas prácticas; asesorías y revisión de avances de proyectos durante las horas de clase; presentaciones intermedias y feedback del docente."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1087, "total_tokens": 10997, "output_tokens": 9910, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 8832}}, "responseId": "resp_0959cf1271ce06ca00698f998e281881a3ba2ea0addadb72ed", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Fundamentos y diseño de interfaces hápticas y estrategias de retroalimentación multimodal para experiencias inmersivas; incluye sensores, actuadores y pruebas de usabilidad."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-13 21:37:15.135602+00', '2026-02-13 21:38:17.866793+00', 48, 96, 'borrador', '[]'), + ('e6e70657-94cc-4cd4-b37d-8d237487fb6c', 'dc286072-c649-43aa-8a2f-aa3ef6166647', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'QFB303', 'Quimiometría y Diseño de Experimentos', 'TRONCAL', 6, 6, '67cdbce0-04fe-4c19-aba9-c5999076c97c', NULL, '{"ciclo": "Ciclo II", "contenido_tematico": "1. Fundamentos de Quimiometría y Diseño de Experimentos\n1.1 Introducción a la quimiometría y su relación con la optimización de formulaciones\n1.2 Diseño experimental: principios y objetivos\n2. Diseño experimental y ANOVA\n2.1 Planificación de experimentos (DOE)\n2.2 Análisis de varianza (ANOVA) de un factor y de múltiples factores\n2.3 Diseño factorial completo y fraccionado\n3. Regresión multivariante, PCA y PLS\n3.1 Regresión lineal múltiple y preprocesamiento de datos\n3.2 Análisis de componentes principales (PCA)\n3.3 PLS: Partial Least Squares para modelado multivariante\n4. Aplicaciones en formulaciones y análisis sensorial\n4.1 Optimización de formulaciones químicas y formulaciones farmacéuticas\n4.2 Diseño experimental aplicado al análisis sensorial\n4.3 Integración quimiométrica para predicción de atributos sensoriales\n5. Implementación práctica y herramientas\n5.1 Software (R, Python, Matlab) para DOE, ANOVA, PCA y PLS\n5.2 Preparación de datos, validación de modelos y reproducibilidad\n6. Ética, reproducibilidad y reporte de resultados\n6.1 Buenas prácticas de laboratorio y gestión de datos\n6.2 Informe técnico y presentaciones", "clave_de_la_asignatura": "QFB303", "criterios_de_evaluacion": "1) Proyecto de diseño experimental y modelado (40%). 2) Examen teórico-práctico (25%). 3) Informe de caso de optimización de formulaciones y análisis sensorial (20%). 4) Participación y tareas cortas (15%).", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de: - Diseñar experimentos para optimizar formulaciones, incluyendo DOE y diseños factoriales; - Aplicar ANOVA para evaluar efectos y relaciones entre variables; - Aplicar regresión multivariante y técnicas de reducción de dimensionalidad (PCA, PLS) para modelar y predecir atributos de formulaciones y resultados sensoriales; - Interpretar y comunicar resultados de quimiometría en informes y presentaciones; - Evaluar la robustez y reproducibilidad de modelos y conclusiones.", "modalidades_tecnologicas_e_informaticas": "Recursos y herramientas: aulas con ordenadores con acceso a R (paquetes chemometrics, pls, ropls), Python (scikit-learn, pandas), MATLAB o equivalente; software de estadística; plataformas de gestión del aprendizaje (LMS) para materiales y evaluaciones; laboratorio para DOE e instrumentos de análisis sensorial; acceso a datos y repositorios de datasets.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas y análisis de literatura; ejercicios prácticos de DOE y preprocesamiento de datos en casa; análisis de datasets simulados y reales; desarrollo de un mini-proyecto de optimización de formulaciones y un informe de análisis sensorial independiente.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Quimiometría y Diseño de Experimentos", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases teóricas y prácticas con guía de un académico; sesiones de laboratorio de diseño de experimentos; talleres de análisis de datos (ANOVA, PCA, PLS); discusión de casos y revisión de resultados; asesoría y presentaciones de avances; evaluación formativa y retroalimentación."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1079, "total_tokens": 6697, "output_tokens": 5618, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 4800}}, "responseId": "resp_042078ebe2193de9006993a011e6bc81a39c08086ce9a2f8fb", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Diseño experimental, ANOVA, regresión multivariante, PCA y PLS aplicados a optimización de formulaciones y análisis sensorial."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-16 22:54:08.826761+00', '2026-02-16 22:56:17.740163+00', 3, 8, 'borrador', '[]'), + ('1e83f4c0-c4ad-4e43-9971-ac373493154c', 'dc286072-c649-43aa-8a2f-aa3ef6166647', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'QFB304', 'Evaluación Sensorial y Psicofísica del Olfato', 'TRONCAL', 6, 6, '7946d5f9-3a99-4c46-b404-69b119650d34', NULL, '{"ciclo": "Segundo ciclo", "contenido_tematico": "1. Fundamentos de la evaluación sensorial y psicofísica del olfato\\n1.1 Principios de la percepción olfativa\\n1.2 Variables que afectan la apreciación olfativa\\n2. Métodos sensoriales, pruebas descriptivas y hedónicas\\n2.1 Métodos descriptivos: perfil sensorial, escalas de intensidad y escalas hedónicas\\n2.2 Pruebas hedónicas y aceptación de aromas\\n3. Selección y entrenamiento de paneles\\n3.1 Criterios de selección de panelistas\\n3.2 Protocolo de entrenamiento y calibración de descriptores\\n3.3 Control de consistencia y sesgos\\n4. Análisis y tratamiento de datos sensoriales\\n4.1 Diseño experimental y recolección de datos\\n4.2 Análisis estadístico básico (ANOVA, pruebas post hoc)\\n4.3 Modelos y técnicas para datos sensoriales (PCA, modelos lineales mixtos)\\n5. Aplicaciones, informes y ética\\n5.1 Elaboración de informes sensoriales\\n5.2 Consideraciones éticas, seguridad y bienestar de los panelistas", "clave_de_la_asignatura": "QFB304", "criterios_de_evaluacion": "Participación y asistencia en sesiones prácticas: 15%\\nCalibración y desempeño del panel: 25%\\nPruebas descriptivas: 25%\\nPruebas hedónicas: 15%\\nInforme de análisis de datos sensoriales: 20%", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el alumno será capaz de diseñar, ejecutar y analizar pruebas sensoriales olfativas utilizando métodos descriptivos y hedónicos; seleccionar y entrenar paneles de evaluación; aplicar análisis estadístico adecuado para interpretar resultados; elaborar informes técnicos con interpretación de hallazgos y consideraciones éticas y de seguridad en la evaluación sensorial.", "modalidades_tecnologicas_e_informaticas": "Laboratorio sensorial y plataformas digitales: software estadístico (R, Jamovi, Python) para análisis de datos sensoriales; gestión de paneles (base de datos de panelistas, calibración de descriptores); plataforma de gestión académica (LMS); herramientas de videoconferencia y comunicación; repositorio de recursos y datasets para prácticas", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas sobre fundamentos y métodos sensoriales olfativos\\nEjercicios de diseño de pruebas descriptivas y hedónicas\\nPrácticas de análisis de datos sensoriales con software estadístico\\nEjercicio de selección y calibración de paneles simulados\\nElaboración de un informe técnico preliminar de datos sensoriales", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Evaluación Sensorial y Psicofísica del Olfato", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Sesiones teóricas para introducir fundamentos y marco metodológico\\nPrácticas supervisadas de calibración y entrenamiento de paneles\\nRealización de pruebas descriptivas y hedónicas con panel de estudio\\nAnálisis guiado de datos sensoriales y discusión de resultados en clase\\nElaboración de informes técnicos en conjunto con retroalimentación del docente"}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1082, "total_tokens": 6798, "output_tokens": 5716, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 4928}}, "responseId": "resp_09287bea31abc243006993a0118d2881a3aadda6200e7fdf32", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Métodos sensoriales, selección y entrenamiento de paneles, pruebas descriptivas y hedónicas y análisis estadístico de datos sensoriales."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-16 22:54:08.826761+00', '2026-02-16 22:55:48.977922+00', 3, 8, 'borrador', '[]'), + ('86ff2de1-ed7a-473c-8f61-0c022ca01d69', 'dc286072-c649-43aa-8a2f-aa3ef6166647', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'QFB309', 'Química Verde y Sostenibilidad en Formulación', 'OPTATIVA', 5, 5, '67cdbce0-04fe-4c19-aba9-c5999076c97c', NULL, '{"ciclo": "Optativa", "contenido_tematico": "1. Introducción a la Química Verde y sostenibilidad en formulación. 1.1 Principios de Química Verde (prevención, minimización, reducción de sustancias peligrosas). 1.2 Criterios para la selección de solventes sostenibles (seguridad, medio ambiente, rendimiento). 2. Estrategias de diseño de procesos sostenibles. 2.1 Evaluación de riesgos y seguridad. 2.2 Optimización de recursos y reducción de residuos. 3. Selección de solventes sostenibles y alternativas. 3.1 Análisis comparativo de solventes tradicionales y sostenibles; criterios de evaluación. 3.2 Solventes de bajo impacto y criterios de sustitución. 4. Evaluación de huella ambiental y LCA en formulación. 4.1 Principios y fases de LCA. 4.2 Herramientas y recursos de LCA (p. ej., OpenLCA). 4.3 Indicadores de sostenibilidad aplicados a formulaciones. 5. Formulaciones ecoeficientes: diseño, pruebas y validación. 5.1 Métodos para reducir emisiones y consumo de energía en formulaciones. 5.2 Casos prácticos de formulaciones ecoeficientes. 6. Aplicaciones prácticas, normativas y consideraciones éticas. 6.1 Normativas y estándares relevantes. 6.2 Seguridad, salud y impactos sociales.", "clave_de_la_asignatura": "QFB309", "criterios_de_evaluacion": "1) Participación y asistencia en sesiones (10%). 2) Tarea de análisis de solventes sostenibles (25%). 3) Informe de evaluación de huella ambiental (25%). 4) Proyecto de formulación ecoeficiente (25%). 5) Examen conceptual (15%).", "fines_de_aprendizaje_o_formacion": "Datos de la asignatura: Créditos 5; Horas académicas de contacto 2; Horas de trabajo independiente 6. Al finalizar, el estudiante será capaz de: a) identificar principios y estrategias de Química Verde aplicados a formulación; b) seleccionar solventes sostenibles según criterios de seguridad, salud y medio ambiente; c) aplicar herramientas básicas de evaluación de huella ambiental (LCA) a formulaciones; d) diseñar formulaciones ecoeficientes que reduzcan impacto ambiental sin comprometer rendimiento; e) analizar trade-offs entre seguridad, rendimiento y sustentabilidad, y comunicar resultados de forma clara.", "modalidades_tecnologicas_e_informaticas": "Se emplearán plataformas de gestión del aprendizaje (LMS), simuladores y laboratorios virtuales de Química Verde, herramientas de evaluación LCA de código abierto (p. ej., OpenLCA), software de diseño y simulación, repositorio de datos y videoconferencias para clases en línea o híbridas.", "actividades_de_aprendizaje_independientes": "Lecturas de artículos y normas sobre Química Verde; ejercicios de selección de solventes sostenibles; simulaciones de procesos de formulación; desarrollo de un mini informe de huella ambiental; estudio de casos de formulaciones sostenibles; revisión de literatura y preparación de entrega escrita; realización de cálculos de indicadores de sostenibilidad.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Química Verde y Sostenibilidad en Formulación", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Sesiones teóricas y prácticas con el docente; talleres de diseño de formulaciones ecoeficientes; discusión de casos; orientación para el desarrollo del proyecto; revisión de entregas y presentaciones orales; demostraciones y prácticas de laboratorio cuando corresponda."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1078, "total_tokens": 7306, "output_tokens": 6228, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 5376}}, "responseId": "resp_0301e56cb5af9c95006993a0120e7c8193858261ff4aeef1eb", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Estrategias de química verde, selección de solventes sostenibles, evaluación de huella ambiental y formulaciones ecoeficientes."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-16 22:54:08.826761+00', '2026-02-16 22:56:48.618401+00', 2, 6, 'borrador', '[]'), + ('ec9fc465-92ef-4fd9-9d56-004169c9d2c9', 'dc286072-c649-43aa-8a2f-aa3ef6166647', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'QFB305', 'Tecnología de Cosméticos y Vehículos Fragranciados', 'OBLIGATORIA', 7, 2, '67cdbce0-04fe-4c19-aba9-c5999076c97c', NULL, '{"ciclo": "Ciclo 3", "contenido_tematico": "1. Fundamentos de emulsiones y sistemas vehiculares. 1.1 Tipos de emulsiones (O/W, W/O) y criterios de selección. 1.2 Fases internas y externas, tensioactivos y coemulgantes. 2. Excipientes y fragancias en cosméticos. 2.1 Funciones de excipientes (emolientes, humectantes, estabilizantes). 2.2 Compatibilidad entre fragancias y emulsiones. 3. Estabilidad y compatibilidad envase-producto. 3.1 Pruebas de estabilidad físico-química y métodos de evaluación. 3.2 Migración de fragancias y compatibilidad de envases (vidrio, PET, plásticos). 4. Diseño y control de formulaciones fragranciadas. 4.1 Métodos de formulación y escalado. 4.2 Control de calidad y fichas técnicas. 5. Regulación, seguridad y sostenibilidad. 5.1 Buenas prácticas de laboratorio y normativas. Distribución horaria: Horas académicas: 4; Horas independientes: 9.", "clave_de_la_asignatura": "QFB305", "criterios_de_evaluacion": "1) Proyecto de formulación de una emulsión cosmética fragranciada (40%). 2) Informe de pruebas de estabilidad y compatibilidad envase-producto (25%). 3) Examen teórico sobre fundamentos de emulsiones y fragancias (10%). 4) Diseño y evaluación de un caso de envase compatible (15%). 5) Participación y entrega de tareas y prácticas (10%).", "fines_de_aprendizaje_o_formacion": "Al concluir, el estudiante será capaz de: diseñar formulaciones básicas de emulsiones para cosméticos fragranciados; seleccionar excipientes y fragancias respetando seguridad y normativa; evaluar estabilidad físico-química y compatibilidad envase-producto; analizar migración y compatibilidad entre envase y producto; interpretar fichas técnicas y requerimientos regulatorios; comunicar resultados de formulación de manera clara y documentada.", "modalidades_tecnologicas_e_informaticas": "Laboratorio de formulación y pruebas; uso de software de formulación y registro de pruebas; bases de datos técnicas de excipientes y fragancias; plataformas LMS para seguimiento de actividades, videoconferencia y repositorio digital de fichas técnicas; recursos en línea de normas y buenas prácticas.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas de normativa y fichas técnicas; búsqueda de información sobre fragancias y compatibilidad con envases; desarrollo de la emulsión conceptual y revisión de datos; ejercicios de diseño y selección de envases; redacción del informe final y estudio de casos; preparación para el examen teórico.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Tecnología de Cosméticos y Vehículos Fragranciados", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases teóricas y prácticas guiadas por el docente; demostraciones de formulación de emulsiones; sesiones de laboratorio supervisadas para pruebas de estabilidad; revisión de fichas técnicas y discusión de resultados; análisis de casos de compatibilidad envase-producto; tutorías y asesoría para el proyecto final."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1081, "total_tokens": 6221, "output_tokens": 5140, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 4416}}, "responseId": "resp_0c79b29bdb930c9a006993a011c4948195a1cc5e70aa923f87", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Formulación de emulsiones y sistemas, excipientes, estabilidad y compatibilidad envase-producto en cosméticos fragranciados."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-16 22:54:08.826761+00', '2026-02-16 22:56:56.019027+00', 4, 9, 'borrador', '[]'), + ('e52b14a2-53d9-460b-a089-89c3aba5eb64', '3ebc1d1c-e950-4a6e-948f-bb89efa40e77', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'MKT-EST102', 'Estadística Aplicada al Mercado', 'TRONCAL', 6, NULL, NULL, NULL, '{"ciclo": "Ciclo II", "contenido_tematico": "Propósito, organización y carga horaria: 6 créditos; 4 horas académicas presenciales y 8 horas de trabajo independiente. 1. Fundamentos de probabilidades 1.1 Conceptos básicos: experimento, evento, espacio muestral 1.2 Reglas de probabilidad: suma, producto, complemento 1.3 Distribuciones de probabilidad relevantes en mercados: binomial, normal 1.4 Probabilidad condicionada e independencia 2. Estadística descriptiva 2.1 Medidas de tendencia central: media, mediana, moda 2.2 Medidas de dispersión: varianza, desviación típica, rango intercuartílico 2.3 Representación de datos de consumidores: tablas, gráficos (barras, histogramas, boxplots) 2.4 Resumen numérico de conjuntos de datos de consumidores 3. Pruebas de hipótesis 3.1 Planteamiento de hipótesis nula y alternativa 3.2 Pruebas para medias y proporciones: t de Student, z, pruebas de proporciones 3.3 Pruebas no paramétricas cuando no se cumplen supuestos 3.4 Errores tipo I y tipo II, nivel de significancia 3.5 Potencia de la prueba y tamaño de muestra 4. Aplicaciones con datos de consumidores 4.1 Casos prácticos de marketing: análisis de hábitos de compra y preferencias 4.2 Diseño de experimentos simples con datos de consumidores 4.3 Interpretación de resultados y toma de decisiones 5. Síntesis y evaluación final 5.1 Clasificación y selección de métodos para problemas de mercado 5.2 Discusión de limitaciones de datos y ética", "clave_de_la_asignatura": "MKT-EST102", "criterios_de_evaluacion": "1. Ejercicios y prácticas en clase: 15%\\n2. Tareas y ejercicios de casa: 20%\\n3. Examen parcial 1: 15%\\n4. Examen parcial 2: 20%\\n5. Proyecto o caso práctico con datos de consumidores: 20%\\n6. Participación y asistencia: 10%", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de: 1) aplicar probabilidades y estadística descriptiva para analizar datos de consumidores; 2) realizar y/o interpretar pruebas de hipótesis en contextos de mercado; 3) seleccionar métodos de muestreo y estimación adecuados; 4) traducir resultados estadísticos en recomendaciones de marketing y toma de decisiones; 5) comunicar conclusiones con rigor técnico y claridad para audiencias no técnicas.", "modalidades_tecnologicas_e_informaticas": "Recursos tecnológicos y de información: aula o entorno de aprendizaje con proyector; plataforma de gestión de aprendizaje (LMS); software estadístico (R o Python con pandas/ scipy, o SPSS); hojas de cálculo (Excel) con funciones estadísticas; herramientas de visualización (Power BI, Tableau). Para modalidades no escolarizadas o mixtas: repositorio de datasets, foros en línea, tutoriales y sesiones sincrónicas/asincrónicas; conectividad adecuada y acceso a internet.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas; resolución de ejercicios de probabilidades y estadística descriptiva; análisis de datasets de consumidores; realización de pequeños proyectos de análisis de datos; revisión de artículos y casos reales; prácticas de muestreo y estimación; ejercicios de interpretación de resultados para negocio.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Estadística Aplicada al Mercado", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Actividades orientadas por el académico en el aula: 1) explicación conceptual y demostraciones con software; 2) resolución guiada de ejercicios y casos de consumidores; 3) análisis de datasets en tiempo real; 4) discusión de resultados y retroalimentación; 5) diseño de ejercicios para reforzar conceptos; 6) simulaciones de muestreo y pruebas de hipótesis en datasets simulados."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1070, "total_tokens": 8483, "output_tokens": 7413, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 6464}}, "responseId": "resp_09d4b0ada094525e00699c673a8cec8194b6ca12ef0c7849cf", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Probabilidades, estadística descriptiva y pruebas de hipótesis con ejemplos y ejercicios en datos de consumidores."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-23 14:42:00.387587+00', '2026-02-23 14:43:03.478846+00', 4, 8, 'borrador', '[]'), + ('a1c71df9-3404-4d68-8b9e-5eeb6c605196', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CYB309', 'Control Predictivo y Optimización de Procesos', 'TRONCAL', 6, NULL, 'cabe3be1-346a-4660-b15e-6b6051c4e2b6', NULL, '{"ciclo": "Cuarto ciclo", "clave_de_la_asignatura": "CYB309", "criterios_de_evaluacion": "Examen parcial (20%), Examen final (30%), Proyecto integrador (implementación y memoria) (25%), Laboratorios y prácticas (15%), Participación, tareas y actividades continuas (10%)", "fines_de_aprendizaje_o_formacion": "Formar en la capacidad de modelar procesos dinámicos, diseñar y evaluar controladores predictivos y aplicar técnicas de optimización para la regulación y eficiencia de procesos. El estudiante será capaz de seleccionar y validar modelos, formular y resolver problemas de MPC (incluyendo restricciones y consideraciones en tiempo real), y ejecutar implementaciones y pruebas en entornos de simulación y plataformas reales, contribuyendo al perfil de egreso con competencias en análisis, diseño y aplicación de estrategias avanzadas de control y optimización en sistemas industriales.", "modalidades_tecnologicas_e_informaticas": "Clases presenciales con apoyo de laboratorio computacional y simulación; uso de MATLAB/Simulink, Python (NumPy, SciPy, CasADi), solvers QP (OSQP, qpOASES), herramientas de identificación y control. Plataforma LMS para entrega de tareas y materiales, repositorios Git para control de código y colaboración. Para modalidades mixtas o no presencial se usarán videoconferencias, entornos virtuales de laboratorio y acceso remoto a simuladores.", "actividades_de_aprendizaje_independientes": "Lectura de capítulos y artículos, resolución de problemas y ejercicios de modelado, prácticas de identificación con datos reales, implementación de controladores MPC en Python/MATLAB, experimentación con solvers de optimización, desarrollo del proyecto integrador y elaboración de la memoria técnica.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Control Predictivo y Optimización de Procesos", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales con resolución guiada de problemas, demostraciones de simulaciones, sesiones de laboratorio dirigidas para implementación de MPC, tutorías para el proyecto integrador, análisis y discusión de casos industriales, evaluaciones parciales y retroalimentación continua."}', '[{"temas": [{"nombre": "Modelos de sistemas dinámicos: modelado físico, ecuaciones diferenciales, modelos de estado", "horasEstimadas": 4}, {"nombre": "Linealización, discretización y propiedades de sistemas (estabilidad, respuesta en frecuencia)", "horasEstimadas": 3}, {"nombre": "Conceptos básicos de control y formulación del problema de optimización en control", "horasEstimadas": 3}], "titulo": "Fundamentos de modelado y control", "unidad": 1}, {"temas": [{"nombre": "Técnicas de identificación paramétrica y no paramétrica (ARX, ARMAX, box-jenkins)", "horasEstimadas": 4}, {"nombre": "Modelos en espacio de estados y reducción de orden para control", "horasEstimadas": 3}, {"nombre": "Estimación de parámetros y validación de modelos para uso en MPC", "horasEstimadas": 3}], "titulo": "Identificación y modelado para control predictivo", "unidad": 2}, {"temas": [{"nombre": "Formulación del problema de MPC: horizonte de predicción y control, función de coste", "horasEstimadas": 4}, {"nombre": "Incorporación de restricciones en entradas y salidas", "horasEstimadas": 3}, {"nombre": "Pesos Q y R, seguimiento de referencia y rechazo de perturbaciones", "horasEstimadas": 3}, {"nombre": "Estrategia receding horizon y actualización en tiempo discreto", "horasEstimadas": 2}], "titulo": "Diseño de Control Predictivo Modelo (MPC) básico", "unidad": 3}, {"temas": [{"nombre": "Programación cuadrática (QP) y lineal (LP) como problemas de MPC", "horasEstimadas": 4}, {"nombre": "Algoritmos numéricos y solvers para tiempo real (active-set, interior-point, OSQP)", "horasEstimadas": 3}, {"nombre": "Factibilidad, condiciones óptimas y manejo de conflictos de restricciones", "horasEstimadas": 3}], "titulo": "Optimización aplicada a control", "unidad": 4}, {"temas": [{"nombre": "MPC no lineal (NMPC): formulación y desafíos computacionales", "horasEstimadas": 4}, {"nombre": "Control predictivo robusto y tratamiento de incertidumbre y perturbaciones", "horasEstimadas": 4}, {"nombre": "Análisis de estabilidad, condiciones terminales y garantías de desempeño", "horasEstimadas": 4}], "titulo": "MPC avanzado y robustez", "unidad": 5}, {"temas": [{"nombre": "Implementación en tiempo real: arquitectura, latencias y requisitos computacionales", "horasEstimadas": 3}, {"nombre": "Simulación y validación con MATLAB/Simulink y herramientas en Python (CasADi, CVX)", "horasEstimadas": 3}, {"nombre": "Casos de estudio industriales y proyecto integrador de optimización y control", "horasEstimadas": 4}], "titulo": "Implementación, simulación y aplicaciones", "unidad": 6}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1154, "total_tokens": 3916, "output_tokens": 2762, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1344}}, "responseId": "resp_031194e46b433eb40069a1b0c6e8188194bd0627848eb46a26", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Modelos y algoritmos de control predictivo (MPC) y técnicas de optimización aplicadas a la regulación y eficiencia de procesos."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-27 14:57:08.739803+00', '2026-02-27 14:57:51.390272+00', 64, 56, 'borrador', '[]'), + ('8cd2e6e4-edb8-4447-aa9c-a2d33587382c', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CIB401', 'Proyecto Integrador de Programación y Control', 'TRONCAL', 6, 9, 'e8de5e3f-3ac1-45bf-a1fb-454cca534f71', NULL, '{"ciclo": "Octavo (8)", "clave_de_la_asignatura": "CIB401", "criterios_de_evaluacion": "Diseño y planificación del proyecto: 15% | Desarrollo del prototipo (hardware y software): 35% | Integración y pruebas de desempeño: 25% | Documentación técnica y manual de usuario: 15% | Presentación y defensa del proyecto (demo y exposición): 10% (Total 100%)", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura, el estudiante será capaz de integrar conocimientos de programación, redes y control para concebir, desarrollar y validar un prototipo funcional; elaborar la documentación técnica correspondiente; ejecutar pruebas de desempeño y presentar resultados. Se busca consolidar competencias de diseño de sistemas embebidos, comunicación entre módulos, formulación y ajuste de estrategias de control, gestión de proyectos y trabajo colaborativo orientado a entregables profesionales.", "modalidades_tecnologicas_e_informaticas": "Recursos: entornos de desarrollo integrados (VS Code, PlatformIO), toolchains y SDKs para microcontroladores, simuladores y herramientas de modelado (MATLAB/Simulink o Python), sistemas de control de versiones (Git/GitHub/GitLab), plataformas de gestión de proyectos (Trello, Jira), herramientas de comunicación y diagnóstico de red (Wireshark), equipos de laboratorio (osciloscopio, analizadores lógicos), bancos de prueba y acceso al LMS institucional para entregas y foros. Se prevé uso de repositorios remotos y ambientes de CI para pruebas automatizadas cuando aplique.", "actividades_de_aprendizaje_independientes": "Investigación bibliográfica y técnica sobre tecnologías seleccionadas; desarrollo de módulos de software y firmware; ensamblaje y configuración de hardware; elaboración de planes de prueba y ejecución de experimentos; redacción de documentación técnica y manuales; gestión de repositorios y control de versiones; preparación de la presentación final y la demostración del prototipo.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Proyecto Integrador de Programación y Control", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Sesiones de definición y revisión de requerimientos; tutorías de diseño arquitectónico; laboratorios guiados para integración hardware-software; talleres de configuración de redes y diagnóstico; sesiones de validación de estrategias de control y ajuste; revisiones de avance (code reviews y pruebas dirigidas); evaluación presencial de la demo y retroalimentación para la mejora de la documentación."}', '[{"temas": [{"nombre": "Análisis de requerimientos funcionales y no funcionales", "horasEstimadas": 2}, {"nombre": "Arquitectura del sistema: módulos de control, comunicaciones y UI", "horasEstimadas": 2}, {"nombre": "Selección de hardware y plataformas de software", "horasEstimadas": 2}, {"nombre": "Planificación del proyecto, cronograma y gestión de riesgos", "horasEstimadas": 2}], "titulo": "Planificación y diseño del sistema integrador", "unidad": 1}, {"temas": [{"nombre": "Programación embebida: arquitectura, toolchain y buenas prácticas", "horasEstimadas": 3}, {"nombre": "Diseño de algoritmos de control (PID, control en lazo cerrado, discretización)", "horasEstimadas": 3}, {"nombre": "Integración de sensores y actuadores; adquisición y preprocesamiento de señales", "horasEstimadas": 2}], "titulo": "Desarrollo de software y diseño de control", "unidad": 2}, {"temas": [{"nombre": "Diseño de la red: topología, protocolos (TCP/IP, MQTT, CAN), calidad de servicio", "horasEstimadas": 2}, {"nombre": "Comunicaciones inalámbricas y cableadas: implementación y diagnóstico", "horasEstimadas": 3}, {"nombre": "Seguridad, sincronización y tolerancia a fallos en redes de control", "horasEstimadas": 3}], "titulo": "Redes y comunicaciones para sistemas de control", "unidad": 3}, {"temas": [{"nombre": "Integración de subsistemas y pruebas funcionales de interfaz", "horasEstimadas": 3}, {"nombre": "Pruebas de desempeño: métricas, validación experimental y análisis de resultados", "horasEstimadas": 3}, {"nombre": "Documentación técnica, entrega del prototipo y presentación/demostración", "horasEstimadas": 2}], "titulo": "Integración, pruebas, validación y documentación", "unidad": 4}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1148, "total_tokens": 3370, "output_tokens": 2222, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1024}}, "responseId": "resp_012e469861bf8a1700699f98bf1fd08196afa7a540f43f236b", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Proyecto final que integra programación, redes y control para desarrollar un prototipo funcional, documentación técnica y pruebas de desempeño."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-26 00:50:04.132967+00', '2026-02-27 14:59:19.009747+00', 32, 128, 'borrador', '[]'), + ('db64ec9b-3d2a-4375-aebe-a830e04ece52', 'dc286072-c649-43aa-8a2f-aa3ef6166647', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'QFB301', 'Diseño de Fragancias y Composición Olfativa', 'TRONCAL', 8, 1, '7946d5f9-3a99-4c46-b404-69b119650d34', NULL, '{"ciclo": "TRONCALes 16f5d6315316d5f1s", "contenido_tematico": "1. Principios de la estructura olfativa\\n1.1 Niveles de aroma: notas de salida, corazón y fondo\\n1.2 Metodologías de análisis sensorial\\n2. Familias aromáticas\\n2.1 Cítricas, florales, amaderadas, orientales, fougères, especias\\n2.2 Características y aplicaciones en fragancias comerciales\\n2.3 Patrones de duración y percepción\\n3. Elaboración de accords\\n3.1 Definición y función de un accord\\n3.2 Métodos de ensamblaje y equilibrio\\n3.3 Validación de accords en prototipos\\n4. Balances olfativos para fragancias comerciales\\n4.1 Técnicas de balance: proporciones, umbrales y proyección\\n4.2 Desarrollo de perfiles de fragancias según brief\\n4.3 Pruebas y iteración de prototipos", "clave_de_la_asignatura": "QFB301", "criterios_de_evaluacion": "1) Proyecto de diseño de una fragancia comercial (acordes, balance y brief): 40%\\n2) Registro de notas, clasificación de familias aromáticas y análisis de fichas técnicas: 20%\\n3) Examen teórico sobre estructura olfativa y metodología de creación de fragancias: 20%\\n4) Participación en clase, bitácora de prácticas y entregables prácticos: 20%", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de: 1) identificar y clasificar las familias aromáticas y sus notas características; 2) diseñar accords y balances olfativos para fragancias comerciales alineadas con un brief; 3) aplicar técnicas de desarrollo de fragancias mediante un proceso de prueba y ajuste; 4) comunicar de forma clara un concepto de fragancia y su perfil sensorial; 5) usar herramientas básicas de laboratorio y bases de datos para apoyar el proceso de composición. Carga horaria total: 8 créditos, distribuidos en 4 horas de contacto y 10 horas de aprendizaje independiente.", "modalidades_tecnologicas_e_informaticas": "Laboratorio sensorial con equipo de cata; base de datos de esencias y fichas técnicas; software de gestión de proyectos y registro de notas; presentaciones multimedia; plataformas de aprendizaje (LMS) para entrega de tareas; recursos de simulación olfativa (si disponible); biblioteca digital de fragancias. Para modalidades no escolarizada y mixta, se requieren recursos equivalentes en línea, como videos demostrativos, simulaciones y laboratorios virtuales.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas sobre estructura olfativa y familias aromáticas; análisis de fichas técnicas de esencias; desarrollo de un dossier de fragancias con notas de salida, corazón y fondo; investigación de casos de éxito en fragancias comerciales; elaboración de una propuesta de fragancia de 30 notas; reporte reflexivo sobre el proceso de composición.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Diseño de Fragancias y Composición Olfativa", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Sesiones teóricas en aula: fundamentos de estructura olfativa y clasificación de familias; talleres de laboratorio con pruebas organolépticas y mezcla de compuestos; análisis y crítica de prototipos en clase; tutorías para desarrollo de un brief y del dossier de fragancia; presentaciones finales de prototipos ante el académico y retroalimentación."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1078, "total_tokens": 7498, "output_tokens": 6420, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 5568}}, "responseId": "resp_0a4bdbb5ac4c66bc006993a011be208195ae2857e1b120b240", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Principios de estructura olfativa, familias aromáticas, elaboración de accords y balances olfativos para creación de fragancias comerciales."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-16 22:54:08.826761+00', '2026-02-20 14:56:43.902121+00', 4, 10, 'borrador', '[]'), + ('63b7e47b-ecd7-46f9-8258-f1bf9f1a1400', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CIB305', 'Diagnóstico y Mantenimiento Predictivo', 'OBLIGATORIA', 4, 5, 'cabe3be1-346a-4660-b15e-6b6051c4e2b6', NULL, '{"ciclo": "Optativa", "clave_de_la_asignatura": "CIB305", "criterios_de_evaluacion": "Exámenes parciales 25%; Prácticas de laboratorio y reportes 25%; Proyecto final aplicado 30%; Tareas y ejercicios 10%; Participación y asistencia 10%. (Total 100%)", "fines_de_aprendizaje_o_formacion": "Que el estudiante sea capaz de emplear métodos de monitoreo, procesamiento de señales y modelos predictivos para la detección temprana y diagnóstico de fallas en sistemas de control; seleccionar e interpretar indicadores de condición; diseñar estrategias de mantenimiento predictivo e integrar soluciones prácticas con sistemas de gestión y adquisición de datos.", "modalidades_tecnologicas_e_informaticas": "Uso de estaciones de adquisición de datos y sensores (acelerómetros, velocidad, corriente), software de procesamiento (MATLAB, Python: NumPy/SciPy, pandas, scikit-learn), herramientas de análisis espectral y tiempo-frecuencia, plataformas IoT/Cloud para almacenamiento y monitoreo, y acceso a sistemas CMMS para prácticas de integración. Para actividades remotas se emplearán entornos virtuales de laboratorio y repositorios de datos.", "actividades_de_aprendizaje_independientes": "Revisión bibliográfica de técnicas de diagnóstico; análisis y etiquetado de conjuntos de datos; desarrollo de scripts para procesamiento y modelado; preparación del informe del proyecto final; estudio de casos y simulaciones; autoaprendizaje de herramientas (MATLAB/Python) y lectura de documentación técnica.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Diagnóstico y Mantenimiento Predictivo", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales con discusión de casos; demostraciones de adquisición y análisis de señales; sesiones de laboratorio presenciales/virtuales para capturar y procesar datos; seminarios sobre integración con CMMS/IoT; tutorías para el seguimiento del proyecto aplicado y presentaciones de resultados."}', '[{"temas": [{"nombre": "Introducción al mantenimiento predictivo: conceptos, objetivos y paradigmas", "horasEstimadas": 4}, {"nombre": "Sensores, adquisición de datos y criterios de muestreo en sistemas de control", "horasEstimadas": 4}], "titulo": "Fundamentos del mantenimiento predictivo", "unidad": 1}, {"temas": [{"nombre": "Análisis de señales en tiempo y frecuencia; indicadores de condición", "horasEstimadas": 4}, {"nombre": "Filtrado, acondicionamiento y técnicas de preprocesamiento de datos", "horasEstimadas": 4}], "titulo": "Señales y procesamiento para diagnóstico", "unidad": 2}, {"temas": [{"nombre": "Técnicas de análisis de vibraciones y medidas en maquinaria rotativa", "horasEstimadas": 4}, {"nombre": "Transformada de Fourier, espectrogramas y análisis en bandas", "horasEstimadas": 4}], "titulo": "Análisis vibracional y espectral", "unidad": 3}, {"temas": [{"nombre": "Detección de anomalías y extracción de características relevantes", "horasEstimadas": 4}, {"nombre": "Métodos estadísticos y basados en modelos para diagnóstico de fallas", "horasEstimadas": 4}], "titulo": "Técnicas de detección de fallas", "unidad": 4}, {"temas": [{"nombre": "Modelado físico vs. modelado basado en datos; selección de variables", "horasEstimadas": 4}, {"nombre": "Algoritmos de machine learning y técnicas de predicción de vida útil (RUL)", "horasEstimadas": 4}], "titulo": "Modelos predictivos y aprendizaje automático", "unidad": 5}, {"temas": [{"nombre": "Integración con sistemas CMMS, IoT y prácticas de mantenimiento predictivo", "horasEstimadas": 4}, {"nombre": "Proyecto aplicado: estudio de casos reales y evaluación de resultados", "horasEstimadas": 4}], "titulo": "Implementación y estrategias de mantenimiento", "unidad": 6}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1150, "total_tokens": 3401, "output_tokens": 2251, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1152}}, "responseId": "resp_0d7f17429ca721dc0069a1b0c6b87c819fa746af32f5c08697", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Métodos de monitoreo, análisis de señales y modelos predictivos para detección temprana de fallas en sistemas de control."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-27 14:57:08.739803+00', '2026-02-27 15:01:14.220393+00', 48, 36, 'borrador', '[]'), + ('53f0ec58-566f-42eb-abdf-436bece1c19f', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CIB307', 'Electrónica de Potencia para Control', 'OBLIGATORIA', 4, NULL, NULL, NULL, '{"ciclo": "7", "clave_de_la_asignatura": "CIB307", "criterios_de_evaluacion": "Exámenes parciales: 30%; Proyecto de diseño y prototipo: 30%; Prácticas de laboratorio y reportes: 15%; Tareas y ejercicios de simulación: 15%; Asistencia y participación en clase/laboratorio: 10%.", "fines_de_aprendizaje_o_formacion": "Que el estudiante comprenda y aplique los principios de conversión de potencia y el diseño de interfaces de potencia orientadas al control, sea capaz de seleccionar y modelar dispositivos semiconductores, dimensionar topologías de conversión (AC-DC, DC-DC, DC-AC), implementar estrategias de control para accionamientos y diseñar soluciones robustas con consideraciones térmicas, de protección y compatibilidad electromagnética, vinculando estos conocimientos al desarrollo de controladores y actuadores en aplicaciones industriales y de automatización.", "modalidades_tecnologicas_e_informaticas": "Uso de simuladores y herramientas de modelado (MATLAB/Simulink, PLECS, LTspice), software de diseño de PCB y magnetismo, instrumentación de laboratorio: osciloscopios de alta velocidad, analizadores de potencia y armónicos, fuentes de potencia con control, bancos de carga y equipos de seguridad eléctrica. Se emplearán repositorios en línea, aulas virtuales para entrega de actividades y herramientas de control embebido (microcontroladores/DSP) para integración con prototipos.", "actividades_de_aprendizaje_independientes": "Estudio dirigido de bibliografía especializada y normas; realización de simulaciones y modelos promedio; diseño y documentación del proyecto final; preparación de reportes de prácticas de laboratorio; resolución de problemas y ejercicios de cálculo; revisión de artículos y casos industriales relevantes.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Electrónica de Potencia para Control", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales para introducción de conceptos y desarrollo teórico; sesiones prácticas de laboratorio con prototipos y mediciones; demostraciones y montaje guiado de etapas de potencia; tutorías de proyecto y revisión de avances; seminarios sobre normativa, seguridad y casos de aplicación; evaluación teórica y práctica supervisada."}', '[{"temas": [{"nombre": "Dispositivos: diodos, tiristores, IGBT y MOSFET de potencia", "horasEstimadas": 3}, {"nombre": "Características estáticas y dinámicas; curvas corriente-tensión y pérdidas", "horasEstimadas": 3}, {"nombre": "Modelado, técnicas de conmutación y gestión térmica", "horasEstimadas": 2}], "titulo": "Fundamentos y dispositivos semiconductores de potencia", "unidad": 1}, {"temas": [{"nombre": "Rectificadores no controlados y controlados (monofásicos y trifásicos)", "horasEstimadas": 2}, {"nombre": "Técnicas de control de factor de potencia y rectificación activa", "horasEstimadas": 3}, {"nombre": "Filtros, armónicos y mitigación en etapas de entrada", "horasEstimadas": 3}, {"nombre": "Simulación y aplicación práctica de rectificadores", "horasEstimadas": 2}], "titulo": "Conversión AC-DC: rectificadores y control", "unidad": 2}, {"temas": [{"nombre": "Topologías básicas: buck, boost, buck-boost, sepic", "horasEstimadas": 3}, {"nombre": "Modos de conducción: continuo y discontinuo; análisis y diseño", "horasEstimadas": 2}, {"nombre": "Control PWM, modelado promedio y técnicas de regulación", "horasEstimadas": 3}, {"nombre": "Diseño de inductancias, transformadores y selección de componentes", "horasEstimadas": 2}], "titulo": "Conversión DC-DC: topologías y control", "unidad": 3}, {"temas": [{"nombre": "Topologías de inversores monofásicos y trifásicos", "horasEstimadas": 3}, {"nombre": "Técnicas de PWM analógicas y digitales (SPWM, SVPWM)", "horasEstimadas": 3}, {"nombre": "Acoplamiento a la red: inversores para conexión a red y control de sincronización", "horasEstimadas": 2}, {"nombre": "Filtrado, mitigación de armónicos y calidad de potencia", "horasEstimadas": 2}], "titulo": "Conversión DC-AC: inversores y modulación", "unidad": 4}, {"temas": [{"nombre": "Fundamentos de accionamientos: control de velocidad y torque", "horasEstimadas": 3}, {"nombre": "Control vectorial / Field-Oriented Control (FOC) y control por escalar", "horasEstimadas": 3}, {"nombre": "Sensores, estimación de estados y algoritmos de protección en drives", "horasEstimadas": 2}], "titulo": "Accionamientos y control de motores", "unidad": 5}, {"temas": [{"nombre": "Diseño de etapas de potencia para controladores y actuadores (driver stages, gate drive)", "horasEstimadas": 2}, {"nombre": "Protección, disipación térmica y gestión de fallas", "horasEstimadas": 2}, {"nombre": "Compatibilidad electromagnética (EMC), supresión de interferencias y casos prácticos", "horasEstimadas": 2}], "titulo": "Diseño de interfaces de potencia, protección y compatibilidad electromagnética", "unidad": 6}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1149, "total_tokens": 3752, "output_tokens": 2603, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1088}}, "responseId": "resp_0b46363ca74baf580069a1b0c68010819098bd97041b52b944", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Principios de conversión de potencia, accionamientos y diseño de interfaces de potencia para controladores y actuadores."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-27 14:57:08.739803+00', '2026-02-27 14:57:48.632668+00', 52, 38, 'borrador', '[]'), + ('f993d046-d822-4eb9-bfa6-5cbfc5a0ed7c', 'dc286072-c649-43aa-8a2f-aa3ef6166647', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'QFB306', 'Regulación y Evaluación de Seguridad para Fragancias', 'OBLIGATORIA', 5, 7, '67cdbce0-04fe-4c19-aba9-c5999076c97c', NULL, '{"ciclo": "Ciclo 4", "contenido_tematico": "1. Marco regulatorio y principios de seguridad de fragancias; 1.1 Definiciones, alcance y categorías de uso; 1.2 Marco regulatorio internacional y regional (IFRA) y nacional (COFEPRIS) y su interacción; 1.3 Principios de evaluación de seguridad y exposición; 2. Evaluación de seguridad y límites de uso; 2.1 Métodos para estimar exposición y límites de uso; 2.2 Dosis/MoS (Margin of Safety) y criterios de aprobación; 2.3 Estructura y contenido del dossier técnico; 3. Etiquetado y cumplimiento normativo; 3.1 Requisitos de etiquetado, fichas de datos de seguridad y advertencias; 3.2 Documentación y trazabilidad; 3.3 Procedimientos ante incumplimientos y vigilancia regulatoria; 4. Dossier técnico y dossier de seguridad; 4.1 Contenido, formato y periodicidad de actualizaciones; 4.2 Métodos analíticos y validación; 4.3 Gestión de cambios, revalidaciones y registro de versiones; 5. Procedimientos de cumplimiento; 5.1 Diseño de planes de cumplimiento en la organización; 5.2 Gestión de proveedores y sustancias reguladas; 5.3 Auditorías internas, externas y acciones correctivas; 6. Estudio de casos y aplicaciones prácticas; 6.1 Análisis de un caso IFRA; 6.2 Análisis de un caso COFEPRIS; 6.3 Elaboración de un mini-dossier para una fragancia propuesta.", "clave_de_la_asignatura": "QFB306", "criterios_de_evaluacion": "1) Examen teórico escrito 25%; 2) Dossier de cumplimiento de fragancias (ensayo técnico) 30%; 3) Participación y tareas en clase 15%; 4) Presentación de estudio de caso regulatorio 15%; 5) Proyecto de implementación de un plan de cumplimiento normativo en una empresa ficticia 15%.", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante habrá adquirido la capacidad de comprender y aplicar el marco regulatorio de fragancias (IFRA, COFEPRIS); analizar límites de uso y condiciones de seguridad; diseñar y gestionar un dossier técnico y la documentación de cumplimiento; interpretar requisitos de etiquetado y cumplir con las obligaciones regulatorias; proponer e implementar un plan de cumplimiento normativo en una empresa real o simulada.", "modalidades_tecnologicas_e_informaticas": "Modalidad: Presencial con apoyo de plataforma educativa; incluye acceso a bases de datos regulatorias (IFRA, COFEPRIS), repositorios de normas, software de gestión de cumplimiento, herramientas de búsqueda avanzada y foros de discusión; se requieren herramientas de colaboración en línea para actividades de equipo; para modalidades no escolares, se admite uso de plataformas sincrónicas y asincrónicas.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas de IFRA y COFEPRIS; revisión de fichas técnicas; búsqueda de límites de uso para sustancias aromáticas; análisis de casos de incumplimiento y elaboración de un mini-dossier; ejercicios de etiquetado y generación de un glosario de términos regulatorios; carga horaria estimada de 6 horas independientes.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Regulación y Evaluación de Seguridad para Fragancias", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "En las horas de clase (horas académicas: 2), se realizarán sesiones cortas magistrales, discusión guiada de casos, talleres de redacción de etiquetas y de contenido del dossier, revisión de marcos normativos aplicables y asesoría para el desarrollo del dossier, con retroalimentación del académico para guiar el aprendizaje y asegurar la cobertura de los objetivos de aprendizaje."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1082, "total_tokens": 7302, "output_tokens": 6220, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 5312}}, "responseId": "resp_06d5e548c086b68b006993a01213348196995227e931772661", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Marco regulatorio (IFRA, COFEPRIS), etiquetado, límites de uso, dossier técnico y procedimientos de cumplimiento normativo."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-16 22:54:08.826761+00', '2026-02-16 22:55:54.014605+00', 2, 6, 'borrador', '[]'), + ('56c6e54e-3300-4fbd-a4bb-dd05b0e40e8a', 'dc286072-c649-43aa-8a2f-aa3ef6166647', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'QFB307', 'Toxicología de Ingredientes Aromáticos', 'OBLIGATORIA', 6, 8, '7946d5f9-3a99-4c46-b404-69b119650d34', NULL, '{"ciclo": "Sexto ciclo - 6 créditos", "contenido_tematico": "1. Introducción a la toxicología de ingredientes aromáticos y su relevancia en la industria de alimentos, cosméticos y farmacéutica\n1.1 Clasificación y uso de ingredientes aromáticos\n1.2 Principios de toxicología: dosis-respuesta, umbrales y curva de toxicidad\n2. Toxicología de la piel y sensibilización cutánea\n2.1 Mecanismos de sensibilización y rutas de exposición cutánea\n2.2 Pruebas in vitro relevantes (reconstructed skin, KeratinoSens, guías de aceptación) y criterios de calidad\n3. Farmacocinética y toxicodinámica aplicada a compuestos aromáticos\n3.1 Absorción, distribución, metabolismo y excreción\n3.2 Interpretación de resultados toxicocinéticos y toxicodinámicos\n4. Evaluación de exposición y caracterización de dosis\n4.1 Rutas de exposición ocupacional y ambiental\n4.2 Modelado de dosis, escenarios de exposición y estimaciones\n5. Evaluación de riesgo y toma de decisiones\n5.1 Enfoques cualitativos y cuantitativos en evaluación de riesgo\n5.2 Criterios de margen de seguridad (MOE) y criterios de aceptación\n6. Alternativas in vitro y reducción de pruebas en vivo\n6.1 Estrategias in vitro para la evaluación de toxicidad de ingredientes aromáticos\n6.2 Integración de datos para la evaluación de riesgo y peso de evidencia\n7. Regulación, guías y buenas prácticas\n7.1 Guías OECD, normativas locales y consideraciones de seguridad\n7.2 Ética, 3Rs y cumplimiento regulatorio\n8. Comunicación de resultados y reporte técnico\n8.1 Estructuras de informes técnicos, resúmenes ejecutivos y recomendaciones\n9. Casos prácticos y trabajos de síntesis\n9.1 Caso práctico de evaluación de peligros y exposición de un ingrediente aromático\n9.2 Caso práctico de alternativas in vitro y reducción de pruebas", "clave_de_la_asignatura": "QFB307", "criterios_de_evaluacion": "Examen parcial: 20%\nExamen final: 25%\nTrabajo de revisión crítica sobre toxicología de un ingrediente aromático: 15%\nCaso práctico de evaluación de riesgo y alternativas in vitro: 20%\nCuestionarios y tareas cortas en plataforma: 10%\nParticipación y asistencia en clase: 10%", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de: identificar y describir la toxicidad y la sensibilización cutánea de ingredientes aromáticos; interpretar estudios de exposición y toxicocinética; aplicar enfoques de evaluación de riesgo y proponer alternativas in vitro para reducir la experimentación animal; comunicar resultados técnicos de forma clara y con cumplimiento regulatorio.", "modalidades_tecnologicas_e_informaticas": "Plataforma de gestión del curso (LMS) para materiales y evaluaciones (p. ej., Moodle). Clases sincrónicas por videoconferencia (Teams/Zoom). Laboratorio virtual y simulaciones de toxicología cutánea. Acceso a bases de datos como PubChem, HSDB y ToxNet; gestores de referencias (Mendeley, EndNote). Software de análisis de datos (R/RStudio, Excel) y herramientas de informes. Recursos multimedia: presentaciones y videos educativos.", "actividades_de_aprendizaje_independientes": "Lecturas críticas y revisión de artículos sobre toxicología de ingredientes aromáticos; extracción y síntesis de datos; realización de resúmenes críticos; búsqueda bibliográfica y evaluación de evidencia; redacción de informes de evaluación de riesgo; diseño de un plan de pruebas in vitro; análisis y reporte de resultados de un caso práctico.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Toxicología de Ingredientes Aromáticos", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales y exposiciones del docente; sesiones de discusión de casos; talleres guiados de interpretación de resultados y de uso de software; desarrollo de un informe de evaluación de riesgo en grupos supervisado; revisión y retroalimentación de borradores por parte del académico."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1075, "total_tokens": 7638, "output_tokens": 6563, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 5632}}, "responseId": "resp_0e68da7ba5cac841006993a011d21481a084ea1c2b3f690f89", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Evaluación de toxicidad, sensibilización cutánea, estudios de exposición, evaluación de riesgo y alternativas in vitro para ingredientes."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-16 22:54:08.826761+00', '2026-02-16 22:56:00.259739+00', 3, 7, 'borrador', '[]'), + ('db2f1dd7-1889-4377-90f8-10e60a9ef476', 'dc286072-c649-43aa-8a2f-aa3ef6166647', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'QFB310', 'Taller Integrador de Formulación y Escalamiento', 'OTRA', 8, 4, '7946d5f9-3a99-4c46-b404-69b119650d34', NULL, '{"ciclo": "Optativa", "contenido_tematico": "1. Acercamiento y alcance del Taller Integrador\\n 1.1 Descripción del enfoque: Proyecto aplicado desde laboratorio hasta planta piloto: formulación, validación analítica, pruebas de estabilidad y documentación para liberación.\\n 1.2 Objetivos y entregables\\n 1.3 Plan de trabajo y roles\\n2. Formulación en laboratorio\\n 2.1 Diseño de formulaciones\\n 2.2 Selección de excipientes y criterios de estabilidad\\n 2.3 Ensayos de preformulación y control de calidad\\n3. Escalamiento y transferencia a planta piloto\\n 3.1 Estrategias de escalamiento\\n 3.2 Transferencia de proceso y documentación\\n 3.3 Riesgos y mitigación\\n4. Validación analítica\\n 4.1 Métodos analíticos y validación\\n 4.2 Verificación de métodos en escalamiento\\n5. Pruebas de estabilidad\\n 5.1 Planes de estabilidad y diseño de estudios\\n 5.2 Condiciones y criterios de aceptación\\n6. Documentación para liberación\\n 6.1 Ensayos de liberación\\n 6.2 Dossier y reportes\\n 6.3 Cumplimiento regulatorio\\n7. Carga horaria y evaluación\\n 7.1 Carga horaria: 6 horas académicas presenciales y 12 horas de trabajo independiente", "clave_de_la_asignatura": "QFB310", "criterios_de_evaluacion": "1) Informe final del proyecto de escalamiento y dossier (40%).\\n 2) Presentación y defensa del proyecto (25%).\\n 3) Registros de prácticas y reportes de formulación y validación analítica (20%).\\n 4) Ejercicios de pruebas de estabilidad y análisis de datos (10%).\\n 5) Participación, asistencia y entrega oportuna de documentos (5%).", "fines_de_aprendizaje_o_formacion": "Al finalizar, el estudiante podrá diseñar formulaciones adecuadas para un producto farmacéutico, transferir un proceso de formulación desde laboratorio a planta piloto, aplicar validación analítica a métodos de control, planificar y ejecutar pruebas de estabilidad y compilar la documentación necesaria para la liberación regulatoria, demostrando habilidades de gestión de proyectos y cumplimiento de normativas de calidad.", "modalidades_tecnologicas_e_informaticas": "Laboratorios de formulación y análisis, equipos para pruebas de estabilidad, software de diseño y análisis estadístico (Excel, Minitab), plataformas de gestión de documentos y control de versión (LMS y herramientas de colaboración institucionales), videoconferencias y comunicación, acceso a guías regulatorias (ICH).", "actividades_de_aprendizaje_independientes": "Investigar y revisar literatura sobre formulación y escalamiento de procesos; diseñar una formulación propuesta y plan de escalamiento; realizar análisis de datos y elaborar informes de laboratorio; preparar el plan de pruebas de estabilidad y la documentación para liberación; revisar guías regulatorias (ICH) y normas de control de calidad.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Taller Integrador de Formulación y Escalamiento", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Sesiones prácticas en laboratorio para formulación y validación analítica: ejecución de protocolos, recopilación de datos y seguimiento de controles de calidad; Sesión de transferencia de proceso a planta piloto con revisión de criterios de escalabilidad; Taller de revisión y redacción de informes y dossier; Sesión de simulación de auditoría y cumplimiento regulatorio; Presentación final y defensa ante el docente."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1075, "total_tokens": 8889, "output_tokens": 7814, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 6976}}, "responseId": "resp_0bf8a87ba0509054006993a01bcdf4819c8fdd7c90210d3fda", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Proyecto aplicado desde laboratorio hasta planta piloto: formulación, validación analítica, pruebas de estabilidad y documentación para liberación."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-16 22:54:08.826761+00', '2026-02-16 22:56:04.426122+00', 6, 12, 'borrador', '[]'), + ('34c44d50-004e-4ee7-be20-de4db43874e5', 'dc286072-c649-43aa-8a2f-aa3ef6166647', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', '', 'Química OrgnánicaII', 'OBLIGATORIA', 4.3, NULL, NULL, NULL, '{"ciclo": "Ciclo II", "contenido_tematico": "1. Revisión de conceptos y fundamentos\n 1.1 Repaso de Química Orgánica I: estructuras, enlaces, isomería y conceptos de reactividad\n 1.2 Nomenclatura y evaluación de la reactividad\n\n2. Reacciones y mecanismos y estereoquímica\n 2.1 Mecanismos de reacción: sustitución, adición, eliminación y reorganización\n 2.2 Estereoquímica: quiralidad, isomería óptica y conformaciones\n\n3. Reacciones relevantes de carbonilos y derivados\n 3.1 Aldehídos y cetonas: nucleofilia, adición y condensaciones\n 3.2 Derivados de ácido carboxílico: ácidos, anhídridos, ésteres y amidas\n\n4. Reacciones de alcoholes, éteres y fenómenos de acilación\n 4.1 Reacciones de alcoholes: oxidación, deshidratación, esterificación\n 4.2 Reacciones de éteres y su utilidad sintética\n\n5. Síntesis orgánica avanzada y estrategias de planificación\n 5.1 Planificación de síntesis: retrosíntesis, selectividad y ruta eficiente\n 5.2 Uso de catalizadores y métodos modernos en síntesis\n\n6. Técnicas de caracterización y espectroscopía\n 6.1 Introducción a IR, NMR y MS para estructuras orgánicas\n 6.2 Interpretación de espectros y ejemplos prácticos", "clave_de_la_asignatura": "QO-II", "criterios_de_evaluacion": "- Tareas y prácticas de síntesis y problemas: 20%\n- Participación y asistencia: 10%\n- Exámenes parciales: 40%\n- Examen final: 30%", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante habrá desarrollado las capacidades para: 1) aplicar conceptos de química orgánica avanzada a problemas de síntesis y análisis; 2) diseñar rutas de síntesis selectivas y eficientes; 3) interpretar espectros (IR, NMR, MS) para confirmar estructuras; 4) explicar mecanismos de reacción y justificar elecciones de reacciones; 5) trabajar de forma colaborativa y comunicar resultados mediante informes y presentaciones.", "modalidades_tecnologicas_e_informaticas": "- Plataforma de gestión de aprendizaje (LMS) para contenidos y evaluaciones\n- Videoconferencia para clases en vivo\n- Simuladores y visualizadores de moléculas y mecanismos\n- Herramientas de procesamiento de datos espectroscópicos y elaboración de informes", "actividades_de_aprendizaje_independientes": "- Lecturas dirigidas y ejercicios de refuerzo\n- Resolución de problemas y ejercicios de síntesis\n- Preparación de informe de trabajo de laboratorio o simulación\n- Búsqueda y revisión de literatura breve", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Química Orgánica II", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "- Clases magistrales con explicación de mecanismos\n- Resolución de problemas en grupo y discusión de soluciones\n- Demostraciones de laboratorio y prácticas supervisadas\n- Tutorías y revisión de avances de proyectos de síntesis"}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1266, "total_tokens": 7346, "output_tokens": 6080, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 5312}}, "responseId": "resp_0b1d903c1070e5ab006993a4902bf881a19b651f4638a84aeb", "conversationId": null}, "iaConfig": {"instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "La continuación de química orgánica"}, "referencias": {"archivosReferenciaIds": [], "repositoriosReferencia": []}, "generado_por": "ai_generate_subject"}', NULL, NULL, '2026-02-16 23:14:05.412008+00', '2026-02-16 23:14:05.412008+00', NULL, NULL, 'borrador', '[]'), + ('6d2c02e8-bb1f-42b9-be58-f73260ef502f', 'dc286072-c649-43aa-8a2f-aa3ef6166647', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'QFB308', 'Escalado de Procesos y Buenas Prácticas de Manufactura', 'TRONCAL', 6, 1, 'bff47d5f-7a05-473b-bb07-0c4769f07dea', NULL, '{"ciclo": "Troncal", "contenido_tematico": "1. Fundamentos del escalado de procesos en manufactura de fragancias y cosméticos; 1.1 Conceptos clave: escalado, equivalencias entre escalas, escalabilidad de formulaciones; 1.2 Desafíos y criterios de éxito en el escalado; 2. BPM/BPF en cosmética; 2.1 Normativas ISO 22716 y alcance BPM/BPF; 2.2 Documentación y trazabilidad; 2.3 Gestión de cambios y control de configuración; 2.4 Limpieza, higiene y calidad del entorno de fabricación; 3. Control de procesos en escalado; 3.1 Modelos de escalado: lineal, por similitud y por perfiles de proceso; 3.2 Variables Críticas de Proceso (CPP) y variables de producto; 3.3 Diseño de experimentos para escalado y transferencia; 3.4 SPC y monitorización de rendimiento; 4. Validación y transferencia de tecnología; 4.1 Calificación de equipos e instalaciones (IQ/OQ/PQ); 4.2 Validación de procesos y métodos analíticos; 4.3 Transferencia de tecnología entre líneas/planta; 4.4 Documentación de validación; 5. Aplicación a fragancias y cosméticos; 5.1 Especificaciones de materias primas y excipientes; 5.2 Estabilidad, compatibilidad sensorial y performance; 5.3 Embalaje, etiquetado y cumplimiento regulatorio; 6. Gestión de calidad, riesgos y seguridad; 6.1 Análisis de riesgos HACCP y CPP; 6.2 Seguridad en escalado y manejo de sustancias; 6.3 Gestión de residuos y medio ambiente; 7. Casos prácticos y proyectos; 7.1 Caso de escalado de una fragancia; 7.2 Caso de escalado de un producto cosmético; 7.3 Proyecto integrador de transferencia y validación.", "clave_de_la_asignatura": "QFB308", "criterios_de_evaluacion": "40% Proyecto práctico de escalado y plan de validación (informe técnico y anexos); 25% Examen teórico; 20% Entregables de prácticas y análisis de casos; 15% Participación y entrega de tareas.", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de identificar y aplicar principios de escalado de procesos para fragancias y cosméticos; aplicar BPM/BPF en cada etapa del escalado; realizar planeación de escalado y diseño de experimentos; gestionar CPP y variabilidad; diseñar y ejecutar planes de validación de equipos y procesos (IQ/OQ/PQ) y transferencia de tecnología; documentar procedimientos y controles para garantizar calidad y trazabilidad.", "modalidades_tecnologicas_e_informaticas": "Se emplearán plataformas de aprendizaje en línea (Moodle/Teams), herramientas de simulación de escalado y DOE, software de SPC, LIMS y ERP para gestión de calidad, bases de datos regulatorias y recursos de referencia; videoconferencias y herramientas de colaboración; aulas virtuales y recursos digitales.", "actividades_de_aprendizaje_independientes": "Actividades de aprendizaje independientes: lectura de normativa ISO 22716 y guías BPM/BPF; análisis de casos y revisión de documentos de escalado; desarrollo de un plan de escalado para un caso hipotético; elaboración de informes y ejercicios prácticos con una carga de trabajo autónomo de 8 horas.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Escalado de Procesos y Buenas Prácticas de Manufactura", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Actividades de aprendizaje bajo conducción de un académico: clases teóricas y prácticas, talleres de escalado, sesiones de laboratorio, revisión de casos y presentaciones; 3 horas de contacto docente con tutoría y retroalimentación continua."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1083, "total_tokens": 8080, "output_tokens": 6997, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 6080}}, "responseId": "resp_0825915d31c88c35006993a011ecc481a2b4ca37ebafefee0f", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Principios de escalado, control de procesos, validación y aplicación de BPM/BPF en producción de fragancias y cosméticos."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-16 22:54:08.826761+00', '2026-02-17 20:25:55.722078+00', 3, 8, 'borrador', '[]'), + ('9e3b7e0c-028e-470e-9fae-8d0ecb683a31', '3ebc1d1c-e950-4a6e-948f-bb89efa40e77', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'FIN206', 'Matemática financiera aplicada a pricing', 'OPTATIVA', 3, NULL, NULL, NULL, '{"ciclo": "Optativa", "contenido_tematico": "1. Fundamentos de valor temporal del dinero aplicados al pricing. 1.1 Interés, tasa de descuento e interpretación para decisiones de precios. 1.2 Valor presente y valor presente neto en contextos de promociones. 2. Modelos de descuento para pricing. 2.1 Descuento simple y compuesto; descuento discreto y continuo. 2.2 Tasa de rendimiento requerida y su relación con precios y promociones. 3. Valor presente neto aplicado a decisiones de precios y promociones. 3.1 Análisis de flujos de efectivo de productos y campañas promocionales. 3.2 Análisis de escenarios, sensibilidad y riesgo. 4. Métodos de fijación de precios basados en valor y en costo de capital. 4.1 Métodos de pricing basados en valor para estimar precios de productos, bundles y promociones. 4.2 Consideraciones de descuentos, promociones y caducidad de ofertas. 5. Herramientas prácticas y casos. 5.1 Uso de hojas de cálculo para modelar precios y flujos. 5.2 Casos de estudio: promociones, descuentos y estrategias de pricing.", "clave_de_la_asignatura": "FIN206", "criterios_de_evaluacion": "1) 40% - Resolución de ejercicios y casos prácticos; 2) 25% - Participación en clase y foros; 3) 20% - Proyecto de pricing aplicando VAN y análisis de escenarios; 4) 15% - Examen breve de conceptos clave.", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de: (a) aplicar conceptos de interés, valor presente y modelos de descuento para decisiones de fijación de precios y evaluación de promociones; (b) cuantificar flujos de efectivo y riesgos asociados a promociones; (c) usar herramientas de hojas de cálculo para modelar escenarios de pricing; (d) comunicar recomendaciones de pricing basadas en análisis financiero a un equipo.", "modalidades_tecnologicas_e_informaticas": "Se emplearán calculadoras financieras y hojas de cálculo (Excel o Sheets) para construir modelos de pricing; se utilizarán recursos en plataforma de aprendizaje para ejercicios, foros y entregas; en modalidades no presenciales se apoyará con videoconferencias y herramientas colaborativas.", "actividades_de_aprendizaje_independientes": "Resolución de una serie de ejercicios de valoración con flujos de efectivo; lectura de artículos y guías breves sobre fijación de precios; desarrollo de un informe corto con recomendaciones de precio para un caso hipotético; revisión de guías de cálculo de VAN (horas independientes estimadas: 4).", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Matemática financiera aplicada a pricing", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases teóricas breves para definición de conceptos; talleres de modelación financiera en hojas de cálculo; análisis de casos de pricing y promociones; simulaciones de escenarios con variación de tasas de descuento; revisión y retroalimentación de ejercicios y proyectos."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1067, "total_tokens": 5799, "output_tokens": 4732, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 4032}}, "responseId": "resp_08462776359c42bb00699c673afe7081909148ee3ab85ebe4b", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Interés, valor presente y modelos de descuento para decisiones de fijación de precios y evaluación de promociones."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-23 14:42:00.387587+00', '2026-02-23 14:42:43.108453+00', 2, 4, 'borrador', '[]'), + ('fe5eb09c-501b-4db6-b6d3-f02bdcfdc4b4', 'dc286072-c649-43aa-8a2f-aa3ef6166647', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'ASDF', 'Química Orgánica', 'OBLIGATORIA', 5, 3, 'bff47d5f-7a05-473b-bb07-0c4769f07dea', NULL, '{"ciclo": "Ciclo 1", "contenido_tematico": "1. Fundamentos de Química Orgánica\n\n1.1 Estructura y tipos de enlaces\\n1.2 Nomenclatura y representación de moléculas\\n1.3 Hidrocarburos: alifáticos y aromáticos\\n2. Química de biomoléculas y bioorganica\\n2.1 Carbohidratos: estructuras, funciones y recorridos metabólicos\\n2.2 Lípidos: propiedades, almacenamiento y señales\\n2.3 Aminoácidos y proteínas: enlaces peptídicos, estructuras y funciones biológicas\\n2.4 Nucleótidos y ácidos nucleicos: estructura, replicación y expresión genética\\n3. Transformaciones químicas relevantes para biología\\n3.1 Reacciones de adición, sustitución y eliminación relevantes para biomoléculas\\n3.2 Mecanismos y cinética en bioquímica\\n4. Técnicas y espectros\\n4.1 Espectroscopía (NMR, IR, MS) y aplicaciones en bioquímica\\n5. Metodología y ética de laboratorio, seguridad, diseño experimental y enfoque humano\\n5.1 Seguridad y buenas prácticas de laboratorio\\n5.2 Diseño experimental centrado en casos biomoleculares humanos", "clave_de_la_asignatura": "QO-101", "criterios_de_evaluacion": "- Examen parcial 1: 20%\\n- Examen parcial 2: 20%\\n- Laboratorio práctico: 25%\\n- Trabajo de investigación o informe crítico: 25%\\n- Participación y tareas: 10%", "fines_de_aprendizaje_o_formacion": "- Comprender fundamentos de química orgánica aplicados a contextos biomoleculares humanos y de salud.\\n\\n- Desarrollar la capacidad de diseñar e interpretar rutas de síntesis simples relevantes para biomoléculas.\\n\\n- Aplicar técnicas de análisis estructural y espectroscopía para confirmar estructuras de compuestos biomoleculares.", "modalidades_tecnologicas_e_informaticas": "- Plataformas de gestión de aprendizaje (LMS) para recursos, foros y entrega de trabajos.\\n- Software de química: ChemDraw, Avogadro, y herramientas de simulación.\\n- Simuladores de mecanismos y reacciones orgánicas.\\n- Laboratorios virtuales y análisis de datos experimentales remotos si aplica.", "actividades_de_aprendizaje_independientes": "- Lecturas dirigidas de textos y artículo sobre química orgánica en biología molecular.\\n- Resolución de ejercicios y problemas de mecánica de reacciones y espectros.\\n- Elaboración de un informe o mini-proyecto de revisión bibliográfica centrado en una molécula biomolecular.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "QUÍMICA ORGÁNICA", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "- Clases magistrales con explicación de conceptos clave y ejemplos aplicados a biología molecular.\\n- Resolución guiada de ejercicios de mecanismos y reacciones relevantes.\\n- Demostraciones de laboratorio y supervisión de prácticas básicas de síntesis y purificación de compuestos orgánicos.\\n- Análisis guiado de espectros de moléculas biomoleculares modelo.\\n- Discusión y revisión de artículos científicos focalizados en bioquímica orgánica."}', '[{"temas": [{"nombre": "Nuevo tema", "horasEstimadas": 2}], "titulo": "Nueva Unidad", "unidad": 1}]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1274, "total_tokens": 7438, "output_tokens": 6164, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 5376}}, "responseId": "resp_0c254aaf80ff45630069939eba50e08197bdc8ee0af7b0f941", "conversationId": null}, "iaConfig": {"instruccionesAdicionalesIA": "No consideres elementos de animales pero si de humanos", "descripcionEnfoqueAcademico": "Relacionado con la química molecular biológica"}, "referencias": {"archivosReferenciaIds": [], "repositoriosReferencia": []}, "generado_por": "ai_generate_subject"}', NULL, NULL, '2026-02-16 22:49:06.043499+00', '2026-02-23 23:12:53.436476+00', NULL, NULL, 'borrador', '[]'), + ('53964f39-9ac7-45f5-9a9a-cb4a92b2e5d8', '3ebc1d1c-e950-4a6e-948f-bb89efa40e77', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'MKT-MAT101', 'Matemáticas para Mercadotecnia', 'TRONCAL', 6, NULL, NULL, NULL, '{"ciclo": "Segundo ciclo", "contenido_tematico": "1. Fundamentos de álgebra para modelos de marketing\n1.1 Expresiones, ecuaciones y desigualdades relevantes para análisis de campañas\n1.2 Sistemas de ecuaciones lineales y matrices aplicadas a tablas de datos de marketing\n1.3 Interpretación de soluciones en contextos de marketing\n2. Funciones y representaciones\n2.1 Conceptos de función, dominio y rango\n2.2 Tipos de funciones relevantes (lineales, cuadráticas, exponenciales y logarítmicas)\n2.3 Aplicaciones a métricas de marketing: ROI, coste, ventas y crecimiento\n3. Optimización básica\n3.1 Introducción a la optimización: problemas de minimización y maximización\n3.2 Optimización con restricciones simples (presupuesto, demanda, capacidad)\n3.3 Métodos de optimización cualitativos y heurísticos aplicados a decisiones de marketing\n4. Modelos cuantitativos aplicados a marketing\n4.1 Modelos de demanda y elasticidad precio- demanda\n4.2 Análisis de sensibilidad y escenarios\n4.3 Modelos de atribución y segmentación\n4.4 Interpretación de resultados y toma de decisiones\n5. Herramientas y metodología de trabajo con datos\n5.1 Excel para modelos de marketing (con Solver)\n5.2 Introducción a R o Python para análisis cuantitativo (opcional)\n5.3 Visualización y reporte de resultados\n6. Organización de la asignatura\n6.1 Estructura de clases, entregables y evaluación", "clave_de_la_asignatura": "MKT-MAT101", "criterios_de_evaluacion": "Se evaluarán los siguientes componentes con distribución porcentual del 100%:\n- Participación y asistencia: 10%\n- Tareas y ejercicios prácticos: 25%\n- Taller/Proyecto de análisis de datos de marketing: 30%\n- Examen parcial: 15%\n- Examen final: 20%", "fines_de_aprendizaje_o_formacion": "Al finalizar el curso, el estudiante podrá: aplicar fundamentos de álgebra, funciones y optimización básica a problemas de marketing; construir y analizar modelos simples de demanda, costos y decisiones de asignación de presupuesto; interpretar resultados cuantitativos y comunicar conclusiones de forma clara; utilizar herramientas tecnológicas básicas (Excel y, cuando corresponda, R o Python) para el análisis y la visualización de datos; trabajar de forma ética y crítica frente a las limitaciones de los modelos. Carga horaria total prevista: 12 horas (4 h académicas presenciales y 8 h de estudio independiente).", "modalidades_tecnologicas_e_informaticas": "Se emplearán tecnologías para facilitar el aprendizaje: plataforma de gestión institucional (LMS), presentaciones y videoconferencias; Excel con Solver para modelos de optimización; R o Python para análisis cuantitativo (opcional); herramientas de visualización (Power BI, Tableau u equivalentes) cuando esté disponible; calculadoras científicas; recursos en línea y bibliotecas digitales; pizarras digitales y proyector en clase.", "actividades_de_aprendizaje_independientes": "Actividades independientes: resolución de ejercicios de álgebra y funciones; resolución de problemas de optimización; análisis de datasets de marketing con Excel; lectura de material teórico y casos de marketing; desarrollo de un mini proyecto de modelado de demanda y simulación de escenarios; elaboración de informe y reflexión crítica sobre las limitaciones de los modelos.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Matemáticas para Mercadotecnia", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Actividades de aprendizaje guiadas por el académico: resolución de problemas en clase con explicación; trabajo en grupo para aplicar modelos a casos reales; discusión y retroalimentación de soluciones; taller de interpretación de resultados y comunicación de conclusiones; uso de herramientas tecnológicas para trabajar con datos durante las sesiones."}', '[]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1075, "total_tokens": 8585, "output_tokens": 7510, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 6592}}, "responseId": "resp_0244e032859b635100699c673b5730819c86ac6c9592d75149", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Fundamentos matemáticos: álgebra, funciones y optimización básica aplicados a modelos de marketing y análisis cuantitativo."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-23 14:42:00.387587+00', '2026-02-23 14:43:15.668549+00', 4, 8, 'borrador', '[]'), + ('eb8fb1d0-15eb-4978-ab65-8d863633cbfc', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CYB308', 'Pruebas de Intrusión en Entornos Industriales', 'OPTATIVA', 3, NULL, NULL, NULL, '{"ciclo": "Optativa", "clave_de_la_asignatura": "CYB308", "criterios_de_evaluacion": "Laboratorios prácticos y entregables de laboratorio: 30%; Ejercicio práctico de pentesting en laboratorio (evaluación de explotación y mitigación): 30%; Informe técnico profesional (report): 20%; Participación en clase, debates y actividades dirigidas: 10%; Examen teórico-práctico final: 10%. Total: 100%.", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura, el estudiante será capaz de aplicar metodologías de pruebas de intrusión y evaluación de vulnerabilidades específicas para redes y dispositivos de control industrial (ICS/SCADA), diseñar y ejecutar pruebas en entornos controlados reduciendo riesgos operativos, priorizar hallazgos según impacto en la continuidad operacional y elaborar reportes técnicos y ejecutivos con recomendaciones de mitigación y remediación que permitan mejorar la ciberseguridad de sistemas OT.", "modalidades_tecnologicas_e_informaticas": "Se emplearán laboratorios virtuales y físicos replicados para entornos OT (OpenPLC, MiniCPS, simuladores de HMI/PLC), herramientas de análisis de red (Wireshark), frameworks de pentesting (Metasploit, Scapy), scanners y herramientas OT específicas; plataformas de gestión de laboratorios remotos y control de versiones para entregables; comunicación y seguimiento mediante LMS, correo institucional y foros. Se requiere acceso a máquina virtual con Linux y permisos adecuados para prácticas en entornos controlados.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas sobre protocolos industriales y vulnerabilidades (aprox. 10 h), preparación y práctica en laboratorio virtual (aprox. 12 h), elaboración de reportes y análisis de casos (aprox. 6 h), investigación de vulnerabilidades y actualización de herramientas (horas distribuidas). Total estimado de horas independientes: 30.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Pruebas de Intrusión en Entornos Industriales", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales y exposiciones (conceptos y protocolos), demostraciones de herramientas en vivo, laboratorios guiados paso a paso en entornos replicados, estudios de caso y análisis de incidentes reales, sesiones de retroalimentación sobre informes y ejercicios prácticos, evaluaciones prácticas supervisadas."}', '[{"temas": [{"nombre": "Características de sistemas OT y diferencias con IT", "horasEstimadas": 2}, {"nombre": "Arquitectura ICS/SCADA y elementos críticos", "horasEstimadas": 2}, {"nombre": "Riesgos, amenazas y casos reales en entornos industriales", "horasEstimadas": 2}], "titulo": "Introducción a la seguridad en entornos industriales", "unidad": 1}, {"temas": [{"nombre": "Fundamentos de protocolos industriales: Modbus, DNP3, OPC, IEC 61850", "horasEstimadas": 3}, {"nombre": "Captura y análisis de tráfico OT (Wireshark, decodificadores y técnicas de inspección)", "horasEstimadas": 3}, {"nombre": "Segmentación de red, zonas y arquitecturas de defensa para OT", "horasEstimadas": 2}], "titulo": "Protocolos industriales y análisis de redes", "unidad": 2}, {"temas": [{"nombre": "Escaneo de activos y fingerprinting específico para dispositivos industriales", "horasEstimadas": 2}, {"nombre": "Evaluación de vulnerabilidades en PLC, RTU y HMI", "horasEstimadas": 2}, {"nombre": "Priorización de hallazgos y gestión de riesgos en entornos industriales", "horasEstimadas": 2}], "titulo": "Descubrimiento y evaluación de vulnerabilidades en OT", "unidad": 3}, {"temas": [{"nombre": "Técnicas de explotación en entornos controlados (explotaciones no destructivas)", "horasEstimadas": 3}, {"nombre": "Controles de seguridad y mitigaciones (IDS/IPS OT, listados blancos, segmentación)", "horasEstimadas": 2}, {"nombre": "Planificación de pruebas: pruebas de seguridad seguras y estrategias de rollback", "horasEstimadas": 1}], "titulo": "Técnicas de explotación segura y control de impacto", "unidad": 4}, {"temas": [{"nombre": "Herramientas específicas: Metasploit, Scapy, herramientas OT y plugins especializados", "horasEstimadas": 3}, {"nombre": "Configuración de entornos virtuales y simuladores (OpenPLC, MiniCPS, entornos replicados)", "horasEstimadas": 2}, {"nombre": "Ejercicios prácticos guiados de intrusión en laboratorio controlado", "horasEstimadas": 1}], "titulo": "Herramientas, simuladores y laboratorios para pentesting OT", "unidad": 5}, {"temas": [{"nombre": "Marco legal, acuerdos de autorización y ética profesional en pruebas de intrusión", "horasEstimadas": 1}, {"nombre": "Metodologías de reporte técnico y ejecutivo; comunicación con equipos OT", "horasEstimadas": 2}, {"nombre": "Buenas prácticas para remediación y roadmap de mejora continua", "horasEstimadas": 1}], "titulo": "Aspectos legales, éticos y comunicación de resultados", "unidad": 6}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1148, "total_tokens": 3844, "output_tokens": 2696, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1280}}, "responseId": "resp_08b1446e7677426d0069a1b0c6a7cc8193a178d453aed98d1d", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Metodologías de pentesting y evaluación de vulnerabilidades específicas de redes y dispositivos de control industrial."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-27 14:57:08.739803+00', '2026-02-27 14:57:50.270914+00', 36, 30, 'borrador', '[]'), + ('7dcfdda7-a87f-4f54-9103-03d35452b997', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CIB301', 'Seguridad en Sistemas de Control Industrial', 'TRONCAL', 5, 9, 'e8de5e3f-3ac1-45bf-a1fb-454cca534f71', NULL, '{"ciclo": "6", "clave_de_la_asignatura": "CIB301", "criterios_de_evaluacion": "Prácticas de laboratorio y ejercicios (30%), Proyecto integrador final (25%), Examen parcial teórico-práctico (15%), Examen final (20%), Participación en clase y entregas de tareas (10%).", "fines_de_aprendizaje_o_formacion": "Formar estudiantes capaces de identificar y evaluar amenazas en entornos OT; aplicar técnicas de hardening y diseño de arquitecturas seguras para PLCs y SCADA; implementar medidas de detección y respuesta ante incidentes en redes industriales, contribuyendo a la disponibilidad y resiliencia de sistemas de control.", "modalidades_tecnologicas_e_informaticas": "Uso de laboratorios virtuales y físicos con simuladores de PLC y entornos SCADA; herramientas de análisis de tráfico (Wireshark), IDS/IPS compatibles con OT (p. ej., Suricata con firmas industriales), herramientas de escaneo y evaluación de vulnerabilidades, entornos de virtualización (VMware/VirtualBox) y plataformas de gestión del aprendizaje (LMS) para entrega de actividades y colaboración. Se emplearán repositorios de código y bancos de casos para prácticas.", "actividades_de_aprendizaje_independientes": "Lectura crítica de artículos y normas, análisis de casos de incidentes, desarrollo y documentación del proyecto integrador, preparación de informes de pruebas de hardening, realización de prácticas en laboratorios virtuales y resolución de ejercicios propuestos en la plataforma LMS.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Seguridad en Sistemas de Control Industrial", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales y seminarios sobre conceptos y casos, demostraciones prácticas en laboratorio, sesiones guiadas de configuración y hardening de equipos, prácticas dirigidas de análisis de tráfico y uso de IDS, trabajo en equipo para el desarrollo del proyecto integrador, tutorías y evaluación formativa."}', '[{"temas": [{"nombre": "Entorno OT: características, diferencias IT/OT y arquitecturas típicas", "horasEstimadas": 3}, {"nombre": "Evolución de ataques a ICS/SCADA, impacto y marco normativo", "horasEstimadas": 3}], "titulo": "Introducción a los sistemas de control industrial y panorama de amenazas", "unidad": 1}, {"temas": [{"nombre": "Arquitectura y funcionamiento de PLCs y controladores programables", "horasEstimadas": 4}, {"nombre": "Vulnerabilidades, vectores de ataque y análisis de casos (Stuxnet, BlackEnergy, etc.)", "horasEstimadas": 4}], "titulo": "Seguridad en PLCs", "unidad": 2}, {"temas": [{"nombre": "Modelos SCADA, componentes críticos y puntos de exposición", "horasEstimadas": 4}, {"nombre": "Vulnerabilidades específicas de SCADA/HMI y estudios de incidentes", "horasEstimadas": 4}], "titulo": "Seguridad en SCADA y sistemas HMI", "unidad": 3}, {"temas": [{"nombre": "Topologías de red OT, segmentación, zonas y conduits", "horasEstimadas": 4}, {"nombre": "Protocolos industriales (Modbus, DNP3, OPC-UA, IEC 61850) y medidas de protección", "horasEstimadas": 6}], "titulo": "Seguridad de redes OT y protocolos industriales", "unidad": 4}, {"temas": [{"nombre": "Hardening de dispositivos, gestores de configuración y control de acceso", "horasEstimadas": 4}, {"nombre": "Diseño de arquitecturas seguras, DMZ OT-IT y mejores prácticas de despliegue", "horasEstimadas": 4}], "titulo": "Hardening y arquitectura segura para entornos industriales", "unidad": 5}, {"temas": [{"nombre": "Sistemas de detección de intrusiones para OT, monitoreo y análisis forense", "horasEstimadas": 4}, {"nombre": "Estrategias de respuesta a incidentes, recuperación y continuidad de operaciones", "horasEstimadas": 4}], "titulo": "Detección, respuesta e mitigación en OT", "unidad": 6}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1157, "total_tokens": 3495, "output_tokens": 2338, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1216}}, "responseId": "resp_0d3769dbe57e500100699f98be4edc819096084da8ff800597", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Principios de ciberseguridad para PLCs, SCADA y redes OT: amenazas, hardening, detección de intrusiones y estrategias de mitigación."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-26 00:50:04.132967+00', '2026-02-27 14:59:23.374315+00', 48, 72, 'borrador', '[]'), + ('4b24eecf-6d23-4f88-b382-97259fa58c88', '3ebc1d1c-e950-4a6e-948f-bb89efa40e77', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'MKT-ML301', 'Aprendizaje automático para investigación de mercados', 'TRONCAL', 6, NULL, NULL, NULL, '{"ciclo": "Ciclo II", "contenido": null, "clave_de_la_asignatura": "MKT-ML301", "criterios_de_evaluacion": "Examen parcial teórico-práctico (20%): evaluación de conceptos y habilidades básicas. Talleres y ejercicios prácticos en sesión (25%): resolución de problemas en entornos de laboratorio. Proyecto de investigación de mercados con ML (35%): análisis end-to-end desde selección de datos hasta interpretación de resultados y consideraciones de ética. Participación y asistencia (10%): participación activa, uso de notebooks y discusiones. Presentación y defensa del proyecto (10%): exposición de hallazgos y justificación de decisiones metodológicas.", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de: comprender fundamentos de machine learning aplicados a investigación de mercados; aplicar técnicas de regresión, clasificación y clustering a datasets de mercados; validar, comparar e interpretar modelos; diseñar y describir pipelines de modelado y consideraciones de despliegue; identificar sesgos, aspectos éticos y de privacidad; comunicar resultados de forma clara para apoyar la toma de decisiones en investigación de mercados.", "modalidades_tecnologicas_e_informaticas": "Recursos tecnológicos y de información: Python (pandas, numpy, scikit-learn), Jupyter Notebooks o Google Colab, herramientas de visualización (matplotlib/seaborn), control de versiones con Git y repositorios en GitHub. Plataformas de cómputo en la nube o en entornos institucionales (Colab, JupyterHub, AWS/GCP/Azure) para prácticas y experimentos. En modalidades no escolarizada o mixta, es obligatorio contar con entornos de cómputo accesibles para realizar las prácticas.", "actividades_de_aprendizaje_independientes": "Proyecto independiente de análisis de un conjunto de datos de investigación de mercados: definición del objetivo, limpieza y preprocesamiento de datos, selección y entrenamiento de modelos, evaluación y reporte de resultados, con énfasis en interpretación y consideraciones éticas (6 horas). Lecturas dirigidas y ejercicios de refuerzo (2 horas).", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Aprendizaje automático para investigación de mercados", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales y demostraciones dirigidas por el académico (4 horas): conceptos teóricos y casos de uso en investigación de mercados. Laboratorios guiados (4 horas): implementación de modelos, ejecución de pipelines y validación de resultados, con supervisión del docente. Discusión de consideraciones éticas y de privacidad en contextos reales."}', '[{"temas": [], "titulo": "Nueva Unidad", "unidad": 1}]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1094, "total_tokens": 7402, "output_tokens": 6308, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 5696}}, "responseId": "resp_04a9bec1e4a2db3800699cbee23f60819ea6c5b8af3d30e5e4", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Fundamentos y aplicaciones de machine learning en investigación de mercados: regresión, clasificación, clustering, validación, despliegue y consideraciones éticas y de privacidad."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-23 20:56:00.968045+00', '2026-02-23 21:27:29.882339+00', 4, 8, 'borrador', '[]'), + ('4e27c298-70c2-4550-9103-649f127a026e', 'dc286072-c649-43aa-8a2f-aa3ef6166647', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'QFB311', 'Metrología y validación analítica para aromaquímicos', 'OBLIGATORIA', 4, NULL, NULL, NULL, '{"ciclo": "7", "clave_de_la_asignatura": "QFB311", "criterios_de_evaluacion": "Examen parcial teórico 20%; Examen final teórico-práctico 25%; Informes de prácticas de laboratorio (entregables) 20%; Proyecto integrador (protocolo y reporte de validación para liberación de lote) 25%; Participación y desempeño en prácticas 10%.", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura el estudiante será capaz de asegurar la trazabilidad metrológica en análisis de aromaquímicos, calibrar y verificar equipos analíticos, diseñar y ejecutar planes de validación de métodos, evaluar y cuantificar la incertidumbre de medición, implementar controles de calidad y elaborar informes técnicos conformes para la liberación de lotes, contribuyendo al cumplimiento de normas regulatorias y a la garantía de calidad en la industria de aromas.", "modalidades_tecnologicas_e_informaticas": "Clases presenciales con uso de equipos analíticos (GC, GC-MS, HPLC), balanzas y volumetría; software de control de instrumentos y adquisición de datos; herramientas de análisis estadístico (Excel avanzado, R o similar); paquetes para cálculo de incertidumbre; sistemas LIMS y plantillas electrónicas para informes; plataforma educativa (Moodle o equivalente) para materiales, foros y entregas. Para modalidad mixta o no escolarizada se incluirán simuladores de laboratorio y videodemostraciones.", "actividades_de_aprendizaje_independientes": "Revisión bibliográfica y normativa sobre trazabilidad y validación; preparación y cálculo de patrones y soluciones estándar; análisis de datos de calibración y validación; cálculo de incertidumbre y generación de gráficos de control; redacción de informes técnicos y protocolos; estudio de casos y simulaciones mediante software estadístico.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Metrología y validación analítica para aromaquímicos", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales y seminarios para teoría y normativa; demostraciones instrumentales y sesiones guiadas de calibración; prácticas de laboratorio supervisadas para ejecución de validaciones y determinación de incertidumbre; discusión de casos reales y resolución de problemas en equipo; retroalimentación individualizada sobre informes y presentaciones."}', '[{"temas": [{"nombre": "Principios de metrología y trazabilidad en el laboratorio analítico", "horasEstimadas": 3}, {"nombre": "Sistemas de unidades, patrones y certificados de referencia", "horasEstimadas": 3}, {"nombre": "Estadística básica aplicada a mediciones y control de datos", "horasEstimadas": 2}], "titulo": "Fundamentos de metrología y trazabilidad aplicados a aromaquímicos", "unidad": 1}, {"temas": [{"nombre": "Calibración y verificación de cromatógrafos (GC, GC-MS, HPLC) y detectores", "horasEstimadas": 4}, {"nombre": "Preparación y manejo de patrones primarios y secundarios para aromaquímicos", "horasEstimadas": 3}, {"nombre": "Construcción de curvas de calibración y evaluación de ajuste", "horasEstimadas": 3}], "titulo": "Calibración de equipos e instrumentos para aromaquímicos", "unidad": 2}, {"temas": [{"nombre": "Parámetros de validación: exactitud, precisión, linealidad y selectividad", "horasEstimadas": 5}, {"nombre": "Determinación de LOD, LOQ, robustez y rangos de trabajo", "horasEstimadas": 4}, {"nombre": "Validación específica por matriz: aceites esenciales, materias primas y formulaciones", "horasEstimadas": 3}], "titulo": "Validación de métodos analíticos para aromaquímicos", "unidad": 3}, {"temas": [{"nombre": "Identificación de las fuentes de incertidumbre en análisis de aromaquímicos", "horasEstimadas": 3}, {"nombre": "Cálculo de incertidumbre tipo A y tipo B", "horasEstimadas": 3}, {"nombre": "Propagación, combinación y expresión de incertidumbre expandida", "horasEstimadas": 2}], "titulo": "Evaluación y expresión de la incertidumbre de medición", "unidad": 4}, {"temas": [{"nombre": "Control de calidad interno: controles, estándares y cartas de control", "horasEstimadas": 4}, {"nombre": "Control de calidad externo: ensayos de aptitud y comparaciones interlaboratorio", "horasEstimadas": 3}, {"nombre": "Planes de muestreo, criterios de aceptación y gestión de no conformidades", "horasEstimadas": 3}], "titulo": "Control de calidad y aseguramiento en el laboratorio", "unidad": 5}, {"temas": [{"nombre": "Buenas prácticas en documentación: trazabilidad documental y registros", "horasEstimadas": 3}, {"nombre": "Elaboración de protocolos e informes de validación comprensibles para liberación", "horasEstimadas": 3}, {"nombre": "Requisitos regulatorios y normativos aplicables a aromaquímicos", "horasEstimadas": 2}], "titulo": "Documentación técnica e informes para liberación de lotes", "unidad": 6}, {"temas": [{"nombre": "Diseño e interpretación de estudios de caso sobre validación y liberación", "horasEstimadas": 3}, {"nombre": "Prácticas de laboratorio guiadas: calibración, validación y evaluación de incertidumbre", "horasEstimadas": 3}, {"nombre": "Presentación y defensa de informe técnico integrado para liberación de lote", "horasEstimadas": 2}], "titulo": "Prácticas integradoras y estudio de casos reales", "unidad": 7}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1172, "total_tokens": 4425, "output_tokens": 3253, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1664}}, "responseId": "resp_0e85d6e3b8392a7800699cdf19381881a0a604530b814e40f9", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Trazabilidad, calibración y validación de métodos analíticos para aromaquímicos; evaluación de incertidumbre, control de calidad y elaboración de informes técnicos para liberación de lotes."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-23 23:13:27.149223+00', '2026-02-23 23:14:13.407191+00', 64, 128, 'borrador', '[]'), + ('6221466b-f243-4f14-aa80-55fd4773160f', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CYB201', 'Algoritmos y Estructuras de Datos para Control', 'TRONCAL', 6, 2, 'e8de5e3f-3ac1-45bf-a1fb-454cca534f71', NULL, '{"ciclo": "4", "clave_de_la_asignatura": "CYB201", "criterios_de_evaluacion": "Participación y ejercicios en clase: 10%; Prácticas de laboratorio (implementación en C/Python): 40%; Proyecto aplicado de control (implementación, informe y demostración): 30%; Exámenes escritos (teoría y análisis de complejidad): 20%. Total: 100%.", "fines_de_aprendizaje_o_formacion": "Que el estudiante comprenda y aplique estructuras de datos y algoritmos relevantes (listas, árboles, grafos, búsqueda y ordenación) en problemas de control; que sea capaz de seleccionar e implementar soluciones eficientes en C y Python, evaluar su complejidad y adaptarlas a restricciones de tiempo real y sistemas embebidos, contribuyendo al perfil de egreso en diseño e implementación de sistemas de control confiables.", "modalidades_tecnologicas_e_informaticas": "Uso de entornos de desarrollo C (GCC, Make) y Python (IDE/VS Code), repositorios Git/GitHub, herramientas de perfilado (gprof, perf, cProfile), simuladores y entornos de modelado (opcional: Simulink/MATLAB), placas de prototipado/MCU para pruebas en tiempo real, plataforma LMS para entrega y seguimiento de actividades.", "actividades_de_aprendizaje_independientes": "Lectura de notas y artículos, resolución de ejercicios de análisis de algoritmos, desarrollo y depuración de prácticas en C/Python, preparación del proyecto aplicado, pruebas y perfilado de código en entorno embebido o simulado, revisión de código en pares.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Algoritmos y Estructuras de Datos para Control", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales con análisis de algoritmos y ejemplos de aplicación en control, sesiones prácticas guiadas en laboratorio con implementación en C/Python, demostraciones en hardware/simulador, resolución guiada de problemas, retroalimentación y evaluación formativa."}', '[{"temas": [{"nombre": "Complejidad algorítmica: notación O, análisis temporal y espacial aplicado a sistemas de control", "horasEstimadas": 1}, {"nombre": "Estructuras lineales: arreglos, listas enlazadas, pilas y colas; buffers y manejo de datos en tiempo real", "horasEstimadas": 1}], "titulo": "Fundamentos y estructuras lineales", "unidad": 1}, {"temas": [{"nombre": "Árboles binarios y árboles de búsqueda (BST, AVL): representación y uso en toma de decisiones", "horasEstimadas": 1}, {"nombre": "Colas de prioridad y montículos (heaps): planificación de tareas y gestión de eventos e interrupciones", "horasEstimadas": 1}], "titulo": "Árboles y estructuras jerárquicas para control", "unidad": 2}, {"temas": [{"nombre": "Grafos y algoritmos de caminos (BFS, Dijkstra): modelado y optimización de rutas y flujos en control", "horasEstimadas": 1}, {"nombre": "Ordenación y búsqueda avanzada; implementación en C y Python, pruebas, perfilado y optimización para sistemas embebidos", "horasEstimadas": 1}], "titulo": "Grafos, búsqueda, ordenación e implementación", "unidad": 3}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1166, "total_tokens": 3503, "output_tokens": 2337, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1408}}, "responseId": "resp_0f02ac295157ba7500699f98be4724819d99ff2624f210f2f2", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Estructuras y algoritmos (listas, árboles, grafos, búsqueda, ordenación) aplicados a sistemas de control; implementación y análisis de complejidad en C/Python."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-26 00:50:04.132967+00', '2026-02-26 00:51:01.139139+00', 6, 8, 'borrador', '[]'), + ('bf88d9e1-c0a7-4404-a818-231a0d75341e', '3ebc1d1c-e950-4a6e-948f-bb89efa40e77', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'MAT201', 'Álgebra lineal aplicada al marketing', 'TRONCAL', 5, NULL, NULL, NULL, '{"ciclo": "Ciclo IV", "contenido_tematico": "viene de datos", "clave_de_la_asignatura": "MAT201", "criterios_de_evaluacion": "1) Participación y asistencia: 10%\n2) Tareas y ejercicios prácticos: 40%\n3) Examen teórico-práctico: 25%\n4) Proyecto aplicado con estudio de caso de marketing: 25%", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura, el estudiante podrá: modelar problemas de marketing utilizando vectores, matrices y sistemas lineales; interpretar la relación entre variables de mercado a partir de soluciones de sistemas; aplicar técnicas de álgebra lineal para segmentar mercados, diseñar y analizar la mezcla de productos; emplear herramientas computacionales para manipular datos y generar conclusiones; comunicar resultados de forma clara y con respaldo analítico.", "modalidades_tecnologicas_e_informaticas": "Plataformas de gestión del aprendizaje (LMS): Moodle, Canvas; herramientas de videoconferencia: Zoom o Microsoft Teams; software: MATLAB/Octave, Python (NumPy/SciPy), R y Excel (con Solver). Entornos de análisis de datos: Jupyter notebooks; repositorio de material: Google Drive/OneDrive; acceso a datasets de marketing para práctica.", "actividades_de_aprendizaje_independientes": "Lecturas de fundamentos de álgebra lineal y casos de marketing; resolución de ejercicios y problemas de forma independiente; análisis de datasets de marketing para practicar manipulaciones matriciales; desarrollo de un mini-proyecto de análisis de datos de mercado; ejercicios de codificación para construir vectores y matrices y aplicar operaciones.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Álgebra lineal aplicada al marketing", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales con ejemplos orientados a marketing; resolución guiada de ejercicios en clase; talleres de casos sobre segmentación, demanda y mix de productos; revisión de soluciones en plenaria; tutoría y retroalimentación individual."}', '[{"temas": [{"nombre": "Nuevo temaa", "horasEstimadas": 2}, {"nombre": "Nuevo temarsthdty", "horasEstimadas": 2}], "titulo": "Nueva Unidad", "unidad": 1}]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1070, "total_tokens": 6633, "output_tokens": 5563, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 4800}}, "responseId": "resp_03737130ad193c7100699c673b61ac819f830f5fc5f82dbe9e", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Vectores, matrices y sistemas para segmentación, mix de productos y análisis de relaciones entre variables de mercado."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-23 14:42:00.387587+00', '2026-02-24 20:36:39.851732+00', 4, 6, 'borrador', '[]'), + ('15b16f67-8580-4b63-85e6-d519d8885b76', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CIB306', 'Control en Tiempo Real y Adquisición de Datos', 'TRONCAL', 5, NULL, NULL, NULL, '{"ciclo": "Ciclo 8 (TRONCAL)", "clave_de_la_asignatura": "CIB306", "criterios_de_evaluacion": "Exámenes parciales (teoría y problemas): 25%; Proyecto final (implementación, informe y demostración en tiempo real): 30%; Prácticas de laboratorio y sus reportes: 20%; Tareas y ejercicios de simulación y análisis: 15%; Participación, entregas parciales y asistencia: 10%. Total: 100%.", "fines_de_aprendizaje_o_formacion": "Formar al estudiante para diseñar, implementar y validar sistemas de control en tiempo real con adquisición de datos, garantizando requisitos de latencia, determinismo y robustez. Al finalizar la asignatura el estudiante será capaz de seleccionar hardware y software adecuados, aplicar técnicas de programación y sincronización en entornos RTOS, procesar datos con restricciones temporales y realizar pruebas y validaciones (incluyendo HIL) para verificar el cumplimiento de requisitos de tiempo real y calidad de datos.", "modalidades_tecnologicas_e_informaticas": "Se emplearán entornos y herramientas como RTOS (por ejemplo FreeRTOS, RT-Linux), plataformas embebidas (microcontroladores y SBC), tarjetas DAQ industriales/comerciales, herramientas de modelado y simulación (MATLAB/Simulink), entornos de desarrollo integrados (IDE) para sistemas embebidos, herramientas de comunicación en tiempo real (EtherCAT, CAN, Ethernet determinista) y repositorios/gestión de versiones (Git). Se utilizará un LMS institucional para distribución de materiales, envío de tareas y retroalimentación. En modalidad mixta o no escolarizada será obligatorio el uso de acceso remoto a laboratorios virtuales y/o bancadas con acceso seguro para prácticas y pruebas.", "actividades_de_aprendizaje_independientes": "Lectura y estudio de documentación técnica y artículos especializados; desarrollo de tareas y ejercicios de simulación (modelado de control, análisis de latencia); diseño e implementación de módulos del proyecto final (codificación, pruebas unitarias); elaboración de reportes de laboratorio y documentación del proyecto; preparación para exámenes. Se estiman 44 horas de trabajo independiente distribuidas en estudio teórico, simulaciones y avance en proyecto/entregables.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Control en Tiempo Real y Adquisición de Datos", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales para presentación de conceptos y metodologías; sesiones prácticas en laboratorio con instrumentación y tarjetas DAQ para implementación y medición en tiempo real; sesiones guiadas de programación en RTOS y de integración hardware-software; demostraciones y análisis de casos; tutorías para asesorar el proyecto final; evaluaciones parciales en clase y retroalimentación continua."}', '[{"temas": [{"nombre": "Conceptos básicos de sistemas en tiempo real: latencia, jitter y determinismo", "horasEstimadas": 3}, {"nombre": "Requisitos temporales, métricas de rendimiento y modelos de tiempo", "horasEstimadas": 3}], "titulo": "Fundamentos de sistemas en tiempo real y adquisición de datos", "unidad": 1}, {"temas": [{"nombre": "Sensores, acondicionamiento de señal y conversión A/D y D/A", "horasEstimadas": 4}, {"nombre": "Plataformas de adquisición: tarjetas DAQ, buses (USB, PCIe, Ethernet) y consideraciones de muestreo", "horasEstimadas": 4}], "titulo": "Hardware y estrategias de adquisición de datos", "unidad": 2}, {"temas": [{"nombre": "Introducción a RTOS: tareas, interrupciones y manejo de recursos", "horasEstimadas": 4}, {"nombre": "Planificación y sincronización: algoritmos de scheduling, prioridad e inversión de prioridad", "horasEstimadas": 4}], "titulo": "Sistemas operativos en tiempo real y manejo de concurrencia", "unidad": 3}, {"temas": [{"nombre": "Algoritmos de control en tiempo real: PID y control en espacio de estados con restricciones temporales", "horasEstimadas": 5}, {"nombre": "Consideraciones de implementación: punto fijo, optimización de cómputo y manejo de deadlines", "horasEstimadas": 3}], "titulo": "Diseño e implementación de control en tiempo real", "unidad": 4}, {"temas": [{"nombre": "Canales de adquisición de datos: buffering, DMA y técnicas para evitar pérdida de muestras", "horasEstimadas": 4}, {"nombre": "Procesamiento en tiempo real: filtrado, transformadas y transmisión determinista (EtherCAT, CAN, RTPS)", "horasEstimadas": 4}], "titulo": "Procesamiento de datos y comunicación de baja latencia", "unidad": 5}, {"temas": [{"nombre": "Pruebas en tiempo real: benchmarking, pruebas de latencia, HIL y validación de requisitos temporales", "horasEstimadas": 6}, {"nombre": "Desarrollo e integración del proyecto final: diseño, implementación y documentación", "horasEstimadas": 6}], "titulo": "Validación, pruebas y proyecto integrador", "unidad": 6}, {"temas": [{"nombre": "Seguridad funcional y normativas aplicables a sistemas en tiempo real", "horasEstimadas": 3}, {"nombre": "Estudios de caso de aplicaciones industriales y emergentes en control en tiempo real", "horasEstimadas": 3}], "titulo": "Seguridad, normativas y estudios de caso", "unidad": 7}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1150, "total_tokens": 3877, "output_tokens": 2727, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1280}}, "responseId": "resp_0b2b5db0454706640069a1b0c6bc3c81a0b9605c38a749f5f5", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Diseño de sistemas de control en tiempo real, adquisición y procesamiento de datos con requisitos de latencia y determinismo."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-27 14:57:08.739803+00', '2026-02-27 14:57:50.5937+00', 56, 44, 'borrador', '[]'), + ('1580dfaf-0224-4bbc-8442-0cad7a540a37', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CIB203', 'Protocolos y Comunicaciones Industriales', 'OBLIGATORIA', 4, 4, 'e8de5e3f-3ac1-45bf-a1fb-454cca534f71', NULL, '{"ciclo": "Cuarto ciclo", "clave_de_la_asignatura": "CIB203", "criterios_de_evaluacion": "Examen parcial teórico 30% | Informes de laboratorio y prácticas 25% | Proyecto integrador (diseño y configuración de red industrial con pruebas) 25% | Quices y tareas cortas 10% | Participación y asistencia en actividades dirigidas 10% (Total 100%)", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura, el estudiante podrá identificar y comparar protocolos industriales (EtherCAT, Modbus, PROFINET), diseñar y configurar redes industriales que cumplan requisitos de determinismo y calidad de servicio, aplicar mecanismos de sincronización y QoS, emplear herramientas de captura y análisis de tráfico para diagnosticar y optimizar comunicaciones, y proponer soluciones de interoperabilidad y disponibilidad en entornos industriales.", "modalidades_tecnologicas_e_informaticas": "Aula equipada con acceso a Internet, laboratorios con PLCs y switches industriales, simuladores de redes (p. ej. GNS3/ EVE-NG u equivalentes para entornos industriales), analizadores de protocolo (Wireshark), software/firmware para configuración PROFINET y EtherCAT, entornos de virtualización para prácticas, y plataforma educativa (LMS) para entrega de contenidos y evaluaciones.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas de especificaciones y documentación técnica; preparación de informes de laboratorio; análisis de capturas de tráfico; diseño y documentación del proyecto integrador; resolución de ejercicios prácticos sobre cálculo de latencia y dimensionamiento de redes; estudio y preparación de presentaciones sobre casos de aplicación.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Protocolos y Comunicaciones Industriales", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales para introducción de conceptos; laboratorios guiados para configuración y pruebas de Modbus, EtherCAT y PROFINET; demostraciones de captura y análisis de paquetes; sesiones de resolución de casos y estudios de diseño; supervisión y retroalimentación continua del proyecto integrador."}', '[{"temas": [{"nombre": "Evolución y clasificación de redes industriales", "horasEstimadas": 3}, {"nombre": "Modelos de comunicación: OSI, TCP/IP y adaptaciones industriales", "horasEstimadas": 3}, {"nombre": "Requisitos de determinismo: latencia, jitter y sincronización", "horasEstimadas": 3}, {"nombre": "Técnicas básicas de QoS y sincronización (PTP)", "horasEstimadas": 3}], "titulo": "Fundamentos de redes industriales y requisitos de comunicación", "unidad": 1}, {"temas": [{"nombre": "Modbus RTU y Modbus TCP: arquitectura y formato de tramas", "horasEstimadas": 4}, {"nombre": "Comparación con buses tradicionales y uso de pasarelas", "horasEstimadas": 3}, {"nombre": "Implementación práctica: addressing, códigos de función y manejo de errores", "horasEstimadas": 3}, {"nombre": "Laboratorio: captura y análisis de paquetes Modbus (Wireshark)", "horasEstimadas": 2}], "titulo": "Modbus y buses tradicionales; análisis de tráfico", "unidad": 2}, {"temas": [{"nombre": "EtherCAT: principes ''on-the-fly'', topologías y frames", "horasEstimadas": 4}, {"nombre": "PROFINET: modos RT e IRT, clases de tiempo real y configuración", "horasEstimadas": 4}, {"nombre": "Consideraciones de diseño: switches, VLANs y redundancia", "horasEstimadas": 2}, {"nombre": "Interoperabilidad y estudios de caso industrial", "horasEstimadas": 2}], "titulo": "EtherCAT y PROFINET: principios y configuración", "unidad": 3}, {"temas": [{"nombre": "Mecanismos QoS: priorización, shaping y policing", "horasEstimadas": 3}, {"nombre": "Time-Sensitive Networking (TSN) y normas IEEE relevantes", "horasEstimadas": 4}, {"nombre": "Redundancia y alta disponibilidad: PRP, HSR y otros esquemas", "horasEstimadas": 3}, {"nombre": "Integración, pruebas y monitoreo: herramientas y métricas de rendimiento", "horasEstimadas": 2}], "titulo": "Garantizar determinismo y calidad de servicio en redes industriales", "unidad": 4}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1155, "total_tokens": 3612, "output_tokens": 2457, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1216}}, "responseId": "resp_0cf0f3dbba70eaaf00699f98be8b38819594737e7721685d60", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Estudio de protocolos industriales (EtherCAT, Modbus, PROFINET) y técnicas para garantizar determinismo y calidad de servicio en redes."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-26 00:50:04.132967+00', '2026-02-27 14:59:07.024016+00', 48, 64, 'borrador', '[]'), + ('0e6f8716-9d95-43e4-97dd-18b5e34220a8', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CYB306', 'Algoritmos Distribuidos y Redes de Sensores', 'OBLIGATORIA', 5, 3, 'e8de5e3f-3ac1-45bf-a1fb-454cca534f71', NULL, '{"ciclo": "Sexto ciclo", "clave_de_la_asignatura": "CYB306", "criterios_de_evaluacion": "Proyecto final de diseño e implementación (30%), Exámenes parciales y final (30%), Laboratorios y simulaciones (25%), Tareas y ejercicios de solución (10%), Participación y prácticas en clase (5%)", "fines_de_aprendizaje_o_formacion": "Formar al estudiante en el diseño, análisis e implementación de algoritmos distribuidos aplicados a redes de sensores y redes de control. Al concluir la asignatura, el estudiante será capaz de seleccionar y adaptar protocolos de consenso, agregación y ruteo; aplicar técnicas de sincronización; y diseñar soluciones con tolerancia a fallos y escalabilidad para aplicaciones de monitoreo y control en entornos distribuidos.", "modalidades_tecnologicas_e_informaticas": "Uso de simuladores y herramientas de emulación (por ejemplo NS-3, Cooja, OMNeT++), entornos de programación (Python, C/C++), herramientas de análisis (MATLAB/Octave), repositorios y control de versiones (Git), plataforma de gestión de aprendizaje (LMS) para entregas y foros, y acceso a laboratorios remotos o plataformas de sensorización para pruebas prácticas.", "actividades_de_aprendizaje_independientes": "Lectura dirigida de artículos y capítulos clave, desarrollo de simulaciones y experimentos en entornos virtuales, resolución de problemas y tareas de modelado, preparación del proyecto final (diseño, implementación y pruebas), y estudio para evaluaciones.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Algoritmos Distribuidos y Redes de Sensores", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales con exposiciones teóricas, sesiones prácticas en laboratorio/simulador guiadas por el académico, análisis y discusión de artículos científicos en seminarios, demostraciones de protocolos y ejercicios de programación en equipo, asesorías para el desarrollo del proyecto final."}', '[{"temas": [{"nombre": "Arquitectura, modelos de comunicación y métricas de desempeño en redes de sensores", "horasEstimadas": 1}], "titulo": "Fundamentos y modelos de redes de sensores", "unidad": 1}, {"temas": [{"nombre": "Protocolos de consenso distribuido y técnicas de sincronización temporal", "horasEstimadas": 1}], "titulo": "Algoritmos de consenso y sincronización", "unidad": 2}, {"temas": [{"nombre": "Algoritmos de agregación distribuida y protocolos de ruteo energéticamente eficientes", "horasEstimadas": 1}], "titulo": "Agregación de datos y ruteo", "unidad": 3}, {"temas": [{"nombre": "Técnicas de detección y tolerancia a fallos, adaptabilidad y diseño escalable", "horasEstimadas": 1}], "titulo": "Tolerancia a fallos y escalabilidad en redes de control", "unidad": 4}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1162, "total_tokens": 3005, "output_tokens": 1843, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1024}}, "responseId": "resp_0c16b1556a5a8dc000699f98bf177881a3aaafa1c84dda0488", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Algoritmos de consenso, agregación y ruteo para redes de sensores; sincronización, tolerancia a fallos y escalabilidad en redes de control."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-26 00:50:04.132967+00', '2026-02-26 00:50:53.787448+00', 4, 7, 'borrador', '[]'), + ('bd68b521-1338-42ab-95bf-639006e7f582', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CIB402', 'Proyecto de Integración Hardware-Software Industrial', 'OBLIGATORIA', 8, NULL, NULL, NULL, '{"ciclo": "Ciclo 8", "clave_de_la_asignatura": "CIB402", "criterios_de_evaluacion": "Diseño y documentación técnica del proyecto: 20%; Implementación de hardware (dispositivos y PCB): 20%; Desarrollo de firmware/software y calidad del código: 25%; Integración, pruebas y resultados de validación: 20%; Presentación, demostración y defensa del proyecto: 10%; Participación, bitácoras y entregables parciales: 5%.", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura, el estudiante será capaz de concebir, diseñar, implementar y validar un sistema industrial integrado que combine electrónica de potencia y señal, plataformas de control (microcontroladores/PLCs), comunicaciones industriales y software embebido. Desarrollará competencias para tomar decisiones de diseño, aplicar normas de seguridad y confiabilidad, elaborar documentación técnica completa y llevar a cabo la puesta en marcha y defensa de un proyecto industrial real o simulado.", "modalidades_tecnologicas_e_informaticas": "Clases presenciales en laboratorio con estaciones de trabajo equipadas (osciloscopios, analizadores lógicos, fuentes, bancos de carga), acceso a kits de desarrollo y PLCs, software de diseño electrónico (ECAD/PCB), simuladores SPICE/RTOS y entornos de programación embebida (IDE para microcontroladores). Plataforma LMS para entrega de actividades, repositorio Git para control de versiones, herramientas de gestión de proyectos (Trello/Planner) y videoconferencia para seguimiento. Conexiones a redes de prueba y herramientas de análisis de tráfico para prácticas de comunicaciones y ciberseguridad.", "actividades_de_aprendizaje_independientes": "Búsqueda y estudio de documentación técnica y normas; simulación de circuitos y algoritmos de control; diseño y verificación de PCB; desarrollo y prueba de módulos de firmware en entornos locales; preparación de documentación técnica (manuales, especificaciones y plan de pruebas); elaboración de reportes de avance y preparación de la demostración final.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Proyecto de Integración Hardware-Software Industrial", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Sesiones de laboratorio guiadas para diseño y montaje de prototipos; talleres de programación embebida y configuración de PLCs; revisión de diseño y code reviews semanales; prácticas de integración y pruebas supervisadas; asesorías de gestión del proyecto, seguridad y normas; ensayos de puesta en marcha y simulacros de defensa final con retroalimentación del académico."}', '[{"temas": [{"nombre": "Introducción al proyecto integrador y definición de alcance", "horasEstimadas": 4}, {"nombre": "Requisitos funcionales y de rendimiento", "horasEstimadas": 4}, {"nombre": "Selección de arquitectura hardware y componentes", "horasEstimadas": 4}, {"nombre": "Normas, seguridad eléctrica y confiabilidad en entornos industriales", "horasEstimadas": 4}], "titulo": "Análisis y especificación del sistema industrial", "unidad": 1}, {"temas": [{"nombre": "Sensores y transductores: selección y acondicionamiento de señal", "horasEstimadas": 6}, {"nombre": "Actuadores y drivers de potencia: diseño y protección", "horasEstimadas": 6}, {"nombre": "Fuentes de alimentación industriales y gestión energética", "horasEstimadas": 6}], "titulo": "Diseño electrónico para aplicaciones industriales", "unidad": 2}, {"temas": [{"nombre": "Microcontroladores y PLCs: características y criterios de selección", "horasEstimadas": 6}, {"nombre": "Diseño de PCB para entornos industriales y prácticas de ensamblado", "horasEstimadas": 6}, {"nombre": "Interfaces físicas: buses industriales, aislamiento y protección electromagnética", "horasEstimadas": 6}], "titulo": "Plataformas de control y diseño de placas", "unidad": 3}, {"temas": [{"nombre": "Programación embebida en tiempo real y uso de RTOS", "horasEstimadas": 6}, {"nombre": "Diseño y sintonización de controladores PID y avanzados", "horasEstimadas": 6}, {"nombre": "Implementación de funciones de seguridad y supervisión", "horasEstimadas": 6}], "titulo": "Desarrollo de firmware y estrategias de control", "unidad": 4}, {"temas": [{"nombre": "Redes industriales y arquitecturas de comunicación", "horasEstimadas": 4}, {"nombre": "Protocolos clave: Modbus, Profinet, OPC UA y sus aplicaciones", "horasEstimadas": 6}, {"nombre": "IIoT, telemetría y consideraciones de seguridad en redes industriales", "horasEstimadas": 6}], "titulo": "Comunicaciones y ciberseguridad industrial", "unidad": 5}, {"temas": [{"nombre": "Integración HW-SW: pruebas funcionales, de integración y validación", "horasEstimadas": 4}, {"nombre": "Gestión del proyecto, documentación técnica y normas de entrega", "horasEstimadas": 3}, {"nombre": "Puesta en marcha, demostración y defensa del proyecto integrador", "horasEstimadas": 3}], "titulo": "Integración, pruebas y entrega del proyecto", "unidad": 6}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1146, "total_tokens": 3787, "output_tokens": 2641, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1216}}, "responseId": "resp_0659d9630024d1ca0069a1b0c6fa0c8195a04b78b79d447693", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Desarrollo integrador de un sistema industrial completo que combine diseño electrónico, firmware, comunicaciones y control."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-27 14:57:08.739803+00', '2026-02-27 14:58:02.120324+00', 96, 80, 'borrador', '[]'), + ('0e527a2b-b7c5-43c8-8ca1-76014a26f877', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CIB-ARC105', 'Arquitectura de Software para Sistemas de Control', 'OBLIGATORIA', 4, 5, 'cabe3be1-346a-4660-b15e-6b6051c4e2b6', NULL, '{"ciclo": "Quinto ciclo", "clave_de_la_asignatura": "CIB-ARC105", "criterios_de_evaluacion": "Laboratorios prácticos y ejercicios de integración (25%), Proyecto integrador de arquitectura para un sistema de control (40%), Examen parcial sobre conceptos y patrones (20%), Presentación y defensa del proyecto (10%), Participación y asistencia en actividades dirigidas (5%)", "fines_de_aprendizaje_o_formacion": "Que el estudiante diseñe y evalúe arquitecturas de software robustas para sistemas de supervisión y control industrial, aplicando patrones de diseño, principios de modularidad y buenas prácticas de pruebas y CI/CD, considerando requisitos de confiabilidad, seguridad y mantenibilidad propios del dominio industrial.", "modalidades_tecnologicas_e_informaticas": "Uso de herramientas y entornos como repositorios Git, plataformas de CI/CD (por ejemplo Jenkins, GitLab CI), contenedores Docker, simuladores/entornos de PLC y SCADA para prácticas, entornos de pruebas automatizadas (unitarias, integración), y herramientas de modelado (UML, diagramas de arquitectura). Se emplearán recursos digitales para entrega y evaluación (repositorios remotos, pipelines en la nube) y material multimedia para apoyo docente.", "actividades_de_aprendizaje_independientes": "Estudio y lectura crítica de patrones y casos de estudio; desarrollo de módulos de software y pruebas unitarias; implementación y configuración de pipelines CI/CD para proyectos prácticos; preparación de entregables del proyecto integrador; revisión de documentación técnica y normas de seguridad aplicables al contexto industrial.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Arquitectura de Software para Sistemas de Control", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales sobre patrones y principios arquitectónicos; sesiones prácticas guiadas de diseño modular y de integración con simuladores industriales; talleres para configurar pipelines CI/CD y ejecutar pruebas automatizadas; revisión y retroalimentación de avances del proyecto integrador; exposiciones y defensa de soluciones arquitectónicas."}', '[{"temas": [{"nombre": "Patrones de diseño y arquitectura aplicados a sistemas de control (p. ej. MVC, Broker, Pipe-and-Filter, Event-Driven)", "horasEstimadas": 1}, {"nombre": "Modularidad, encapsulación, interfaces y gestión del acoplamiento en software de supervisión y control (incluye diseño de APIs y separación de responsabilidades)", "horasEstimadas": 1}, {"nombre": "Pruebas, integración continua y despliegue (CI/CD) en entornos industriales: estrategias de testing, pipelines, contenedores y consideraciones de seguridad y disponibilidad", "horasEstimadas": 1}], "titulo": "Fundamentos y prácticas esenciales para arquitecturas de software en sistemas de supervisión y control industrial", "unidad": 1}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1152, "total_tokens": 2870, "output_tokens": 1718, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 960}}, "responseId": "resp_023b7d45966ee21c00699f98be456881a0b4d4c94ad6ff9824", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Patrones de diseño, modularidad, pruebas y CI/CD aplicados a software de supervisión y control industrial."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-26 00:50:04.132967+00', '2026-02-27 14:59:09.706095+00', 3, 6, 'borrador', '[]'), + ('4afb3a31-e84a-4a2a-ad43-b385fcf63916', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CYB302', 'Control Robusto y Estocástico', 'TRONCAL', 6, 1, NULL, NULL, '{"ciclo": "6 (TRONCAL)", "clave_de_la_asignatura": "CYB302", "criterios_de_evaluacion": "Exámenes parciales (2): 30%; Proyecto integrador (diseño, implementación y defensa): 25%; Examen final: 20%; Informes de laboratorio y ejercicios de simulación: 15%; Participación, exposiciones y actividades en clase: 10%. (Total 100%)", "fines_de_aprendizaje_o_formacion": "Proveer al estudiante de los fundamentos teóricos y herramientas prácticas para el diseño y análisis de controladores robustos y estocásticos. Al concluir la asignatura, el estudiante será capaz de modelar incertidumbres y ruido, evaluar estabilidad robusta (determinista y en sentido probabilístico), formular y resolver problemas H-infinito y LQG mediante LMIs y optimización convexa, desarrollar filtros robustos, y validar soluciones mediante simulación y experimentación en casos de estudio aplicados.", "modalidades_tecnologicas_e_informaticas": "Uso de MATLAB/Simulink (incluyendo Robust Control Toolbox y Control System Toolbox), Python (NumPy, SciPy, control, cvxpy), entornos Jupyter, solvers de SDP (por ejemplo, SeDuMi, SDPT3 desde YALMIP o CVX), herramientas de control robusto y análisis de incertidumbre, repositorios Git para gestión de código, plataforma LMS para entrega de tareas y foros, y herramientas de videoconferencia para tutorías y presentaciones.", "actividades_de_aprendizaje_independientes": "Lectura crítica de capítulos asignados y artículos; resolución de problemas teóricos; desarrollo de simulaciones y experimentos computacionales; preparación del proyecto integrador (diseño, implementación y reporte); prácticas con solvers de LMI y análisis numérico; revisión y estudio de herramientas de software recomendadas.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Control Robusto y Estocástico", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales con demostraciones y derivaciones formales; sesiones guiadas de resolución de problemas; prácticas de laboratorio computacional supervisadas (implementación de controladores y filtros, uso de solvers); seminarios sobre artículos y casos de estudio; tutorías para el proyecto integrador; evaluaciones parciales y retroalimentación."}', '[{"temas": [{"nombre": "Revisión de sistemas lineales: modelos en espacio de estados y funciones de transferencia", "horasEstimadas": 3}, {"nombre": "Normas, métricas de estabilidad y funciones de Lyapunov", "horasEstimadas": 3}, {"nombre": "Introducción a la probabilidad y procesos estocásticos aplicados al control", "horasEstimadas": 2}], "titulo": "Fundamentos matemáticos y modelado de incertidumbres", "unidad": 1}, {"temas": [{"nombre": "Tipos de incertidumbres: estructuradas y no estructuradas; modelado de perturbaciones", "horasEstimadas": 2}, {"nombre": "Teorema del pequeño ganancia, estabilidad robusta y passivity", "horasEstimadas": 3}, {"nombre": "Introducción al control H-infinito: objetivos y formulación básica", "horasEstimadas": 5}], "titulo": "Fundamentos del control robusto", "unidad": 2}, {"temas": [{"nombre": "Formulación matricial del problema H-infinito y ecuaciones de Riccati", "horasEstimadas": 4}, {"nombre": "Enfoques basados en LMI para diseño robusto", "horasEstimadas": 3}, {"nombre": "Interpretación en frecuencia y selección de filtros de ponderación", "horasEstimadas": 3}], "titulo": "Diseño H-infinito y métodos relacionados", "unidad": 3}, {"temas": [{"nombre": "Ecuaciones diferenciales estocásticas e introducción al cálculo de Itô", "horasEstimadas": 3}, {"nombre": "Control óptimo estocástico: teoría LQG", "horasEstimadas": 3}, {"nombre": "Filtrado de Kalman: formulación y propiedades", "horasEstimadas": 2}], "titulo": "Fundamentos de control estocástico", "unidad": 4}, {"temas": [{"nombre": "Formulaciones risk-sensitive y combinaciones H2/H-infinito en presencia de ruido", "horasEstimadas": 3}, {"nombre": "Estimación robusta y filtros con incertidumbre de modelo", "horasEstimadas": 3}, {"nombre": "Estabilidad en sentido medio-cuadrático y criterios probabilísticos", "horasEstimadas": 2}], "titulo": "Robustez en escenarios estocásticos", "unidad": 5}, {"temas": [{"nombre": "Planteamiento de problemas con LMI, solvers y verificación numérica", "horasEstimadas": 3}, {"nombre": "Optimización convexa y programación semidefinida aplicada al control", "horasEstimadas": 3}, {"nombre": "Cuestiones numéricas, reducción de modelos y validación por simulación", "horasEstimadas": 2}], "titulo": "Herramientas computacionales y LMIs", "unidad": 6}, {"temas": [{"nombre": "Control adaptativo y estimación de parámetros en presencia de incertidumbre", "horasEstimadas": 2}, {"nombre": "Modos deslizantes y técnicas robustas para sistemas no lineales", "horasEstimadas": 2}, {"nombre": "Visión general de μ-análisis, D-K iteration y gain-scheduling", "horasEstimadas": 2}], "titulo": "Temas avanzados en control robusto", "unidad": 7}, {"temas": [{"nombre": "Casos de estudio: vehículos autónomos, redes de control y sistemas críticos", "horasEstimadas": 2}, {"nombre": "Laboratorios de simulación: implementación de H-infinito, LQG y filtros robustos", "horasEstimadas": 2}, {"nombre": "Presentación y defensa del proyecto integrador", "horasEstimadas": 2}], "titulo": "Aplicaciones, simulaciones y proyecto integrador", "unidad": 8}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1151, "total_tokens": 4585, "output_tokens": 3434, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1728}}, "responseId": "resp_068d88af81f5c8770069a1b0c6d78c819e9a12c3f4c7ff8c05", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Fundamentos y técnicas para diseñar controladores robustos y estocásticos que garanticen estabilidad frente a incertidumbres y ruido."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-27 14:57:08.739803+00', '2026-03-04 17:53:49.751985+00', 64, 56, 'borrador', '[]'), + ('5df8f36f-6bd6-41ce-beac-63e3bc2736c0', '54760e2e-406d-483a-962d-875b6d3195fd', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'CIB-EMB101', 'Software para Sistemas Embebidos', 'TRONCAL', 6, 4, 'cabe3be1-346a-4660-b15e-6b6051c4e2b6', NULL, '{"ciclo": "Cuarto ciclo", "clave_de_la_asignatura": "CIB-EMB101", "criterios_de_evaluacion": "Prácticas de laboratorio y ejercicios (40%), Proyecto final de integración (30%), Examen teórico-práctico (20%), Tareas, informes y participación (10%). Total 100%.", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura el estudiante será capaz de desarrollar software para microcontroladores usando C/C++ y Python (MicroPython/CircuitPython), diseñar e implementar controladores de periféricos, establecer comunicaciones serie (UART, SPI, I2C) y aplicar técnicas de depuración y diagnóstico en plataformas embebidas. (Asignatura troncal; 6 créditos: 4 horas académicas presenciales y 8 horas independientes).", "modalidades_tecnologicas_e_informaticas": "Recursos: placas de desarrollo (STM32, ESP32, Raspberry Pi Pico), toolchains y compiladores (GCC ARM, toolchains para ESP), entornos y extensiones (VS Code, PlatformIO, Arduino IDE), depuradores y herramientas (GDB, OpenOCD, J-Link, ST-Link), analizadores lógicos y osciloscopio, terminales serie (PuTTY, minicom), simuladores/emuladores y repositorios de código (Git/GitHub). Para la modalidad mixta o no escolarizada se emplearán entornos virtuales, acceso remoto a placas y laboratorios virtuales.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas y estudio de manuales de microcontroladores; resolución de ejercicios de programación en C/C++ y Python; desarrollo y prueba de drivers para periféricos; diseño y documentación del proyecto final; realización de informes de laboratorio; prácticas con herramientas de depuración disponibles; participación en foros y revisión de material digital.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Software para Sistemas Embebidos", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales para presentación de conceptos y arquitecturas; sesiones prácticas en laboratorio con montaje de placas y programación en vivo; talleres guiados de desarrollo de drivers y comunicaciones; demostraciones de depuración con JTAG/SWD y análisis con osciloscopio/analizador lógico; tutorías para el proyecto final y revisiones de avances."}', '[{"temas": [{"nombre": "Introducción a sistemas embebidos: arquitecturas, restricciones y modelos de ejecución", "horasEstimadas": 1}, {"nombre": "Nuevo tema", "horasEstimadas": 2}], "titulo": "Fundamentos y entorno de desarrollo", "unidad": 1}, {"temas": [{"nombre": "Programación en C/C++ para microcontroladores: estructura de proyectos, manejo de memoria y drivers básicos", "horasEstimadas": 1}, {"nombre": "Python en microcontroladores (MicroPython/CircuitPython) y comunicaciones serie: UART, SPI, I2C", "horasEstimadas": 1}], "titulo": "Programación y manejo de periféricos", "unidad": 2}, {"temas": [{"nombre": "Técnicas de depuración en plataformas embebidas: JTAG/SWD, GDB/OpenOCD; uso de osciloscopio y analizador lógico; integración y pruebas del sistema", "horasEstimadas": 1}], "titulo": "Depuración, pruebas e integración", "unidad": 3}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "usage": {"input_tokens": 1158, "total_tokens": 3636, "output_tokens": 2478, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 1600}}, "responseId": "resp_0f157e45c1eb391200699f98bebf9c819395176225457b2391", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Programación en C/C++ y Python para microcontroladores, manejo de periféricos, comunicaciones serie y técnicas de depuración en plataformas embebidas."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-26 00:50:04.132967+00', '2026-02-27 15:00:17.205153+00', 4, 8, 'borrador', '[]'), + ('784a2af2-8828-4c96-992d-339ede5e5b92', '3ebc1d1c-e950-4a6e-948f-bb89efa40e77', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'MKT-EXP305', 'Diseño experimental y pruebas A/B para mercados', 'TRONCAL', 5, NULL, NULL, NULL, '{"ciclo": "Troncal", "clave_de_la_asignatura": "MKT-EXP305", "criterios_de_evaluacion": "Participación y actividades en clase: 10%; Cuestionarios y ejercicios prácticos: 15%; Tareas y laboratorios de implementación: 20%; Examen parcial teórico-práctico: 20%; Proyecto final (diseño, ejecución simulada/real y reporte de resultados): 35%. Total: 100%.", "fines_de_aprendizaje_o_formacion": "Formar profesionales capaces de diseñar, implementar y analizar experimentos y pruebas A/B en contextos de marketing digital para optimizar campañas y decisiones comerciales. El estudiante será competente en definir métricas relevantes, calcular tamaños de muestra, ejecutar pruebas en entornos reales, analizar resultados aplicando métodos estadísticos (frecuentistas y bayesianos), identificar y controlar sesgos, y aplicar criterios éticos y regulatorios en experimentación con usuarios.", "modalidades_tecnologicas_e_informaticas": "Uso de plataformas de experimentación (p. ej. Optimizely, VWO, LaunchDarkly), herramientas de analítica (Google Analytics, Mixpanel), entornos de análisis estadístico (R, Python/Jupyter), bases de datos y pipelines ETL, control de versiones (Git), plataformas de visualización (Tableau, Power BI) y herramientas colaborativas (Slack, Google Workspace). Para la modalidad mixta o a distancia se requerirá conexión estable, entorno virtual de laboratorios y acceso a datos de prueba anonimizados.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas de artículos y guías técnicas, resolución de ejercicios de cálculo de potencia y análisis estadístico, implementación de pruebas en entornos de laboratorio, preparación del proyecto final (diseño experimental, recolección/uso de datos simulados o reales, análisis e informe), revisión por pares y estudio de casos de la literatura.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Diseño experimental y pruebas A/B para mercados", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales sobre teoría y casos; sesiones prácticas guiadas en laboratorio para instrumentación y análisis; talleres de diseño de experimentos y revisión crítica; sesiones de equipo para desarrollo del proyecto final; presentaciones y defensa de proyectos con retroalimentación."}', '[{"temas": [{"nombre": "Introducción a los experimentos y pruebas A/B: objetivos y casos de uso", "horasEstimadas": 2}, {"nombre": "Métricas clave y definición de KPI para pruebas", "horasEstimadas": 2}, {"nombre": "Calidad de datos y preparación para experimentos", "horasEstimadas": 2}], "titulo": "Fundamentos de experimentación en marketing", "unidad": 1}, {"temas": [{"nombre": "Principios de aleatorización y asignación de unidades", "horasEstimadas": 3}, {"nombre": "Diseños factoriales, multivariantes y segmentación", "horasEstimadas": 3}, {"nombre": "Tamaño de muestra y potencia estadística", "horasEstimadas": 2}, {"nombre": "Bloqueo, estratificación y manejo de covariables", "horasEstimadas": 2}, {"nombre": "Pruebas piloto y validación previa", "horasEstimadas": 2}], "titulo": "Diseño experimental", "unidad": 2}, {"temas": [{"nombre": "Arquitectura de experimentación: front-end, back-end y flags", "horasEstimadas": 3}, {"nombre": "Instrumentación y seguimiento: eventos, cohortes y atribución", "horasEstimadas": 3}, {"nombre": "Asignación de tráfico, ramp-up y control de calidad en producción", "horasEstimadas": 2}, {"nombre": "Integración con pipelines de datos y testing automatizado", "horasEstimadas": 2}], "titulo": "Implementación de pruebas A/B en plataformas", "unidad": 3}, {"temas": [{"nombre": "Planteamiento de hipótesis, pruebas de significancia y errores tipo I/II", "horasEstimadas": 3}, {"nombre": "Intervalos de confianza, tamaños del efecto y métricas prácticas", "horasEstimadas": 3}, {"nombre": "Métodos bayesianos y comparativa con enfoques frecuentistas", "horasEstimadas": 2}, {"nombre": "Corrección por comparaciones múltiples y control del FDR", "horasEstimadas": 2}, {"nombre": "Pruebas secuenciales, stopping rules y problemas de peeking", "horasEstimadas": 2}], "titulo": "Análisis estadístico de resultados", "unidad": 4}, {"temas": [{"nombre": "Fuentes de sesgo: desviaciones de selección y supervivencia", "horasEstimadas": 2}, {"nombre": "Confusores, spillover y efectos indirectos", "horasEstimadas": 2}, {"nombre": "Violaciones de supuestos y diagnóstico de datos experimentales", "horasEstimadas": 2}, {"nombre": "Modelos de inferencia causal y análisis de uplift", "horasEstimadas": 2}], "titulo": "Validez, sesgos y causalidad", "unidad": 5}, {"temas": [{"nombre": "Ética en pruebas con usuarios: consentimiento, privacidad y daño mínimo", "horasEstimadas": 2}, {"nombre": "Cumplimiento normativo y manejo seguro de datos", "horasEstimadas": 2}, {"nombre": "Estudios de caso: campañas optimizadas y lecciones aprendidas", "horasEstimadas": 1}, {"nombre": "Presentación y defensa del proyecto final", "horasEstimadas": 1}], "titulo": "Aspectos éticos, regulatorios y casos aplicados", "unidad": 6}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "responseId": "resp_0940d0c7754514fe0069a1e6954bb481a088e6aaeffbbe102e"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Métodos de diseño experimental, pruebas A/B y análisis de resultados para optimizar campañas; incluye validación estadística, control de sesgos y ética en pruebas con usuarios."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-02-27 18:46:42.854824+00', '2026-02-27 18:48:32.596303+00', 54, 72, 'borrador', '[]'), + ('f4c16a62-3b5c-486e-b263-cd1c5fd57046', '3ebc1d1c-e950-4a6e-948f-bb89efa40e77', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'MKT-VIS304', 'Visualización avanzada de datos para marketing', 'OBLIGATORIA', 4, NULL, NULL, NULL, '{"ciclo": "6", "clave_de_la_asignatura": "MKT-VIS304", "criterios_de_evaluacion": "Proyecto final (dashboard interactivo aplicado a un caso de marketing) 50%; Actividades prácticas y entregables semanales (mini-dashboards, ejercicios de diseño) 30%; Presentación y defensa del proyecto 10%; Participación y evaluaciones formativas (críticas de pares, quizzes) 10%. Total: 100%", "fines_de_aprendizaje_o_formacion": "Que el estudiante diseñe, implemente y valide visualizaciones interactivas y dashboards orientados a marketing capaces de comunicar insights de mercado y apoyar decisiones comerciales. Desarrollará habilidades para seleccionar representaciones gráficas adecuadas, aplicar principios de usabilidad, integrar datos de diversas fuentes y optimizar visualizaciones para distintos públicos y canales.", "modalidades_tecnologicas_e_informaticas": "Uso de plataformas y herramientas: Tableau Desktop/Server, Power BI, bibliotecas web (Plotly, D3.js), Python (Pandas, Plotly, Altair) y/o R (ggplot2, Shiny). Entorno virtual de aprendizaje (LMS) para entrega y retroalimentación, repositorio de código (Git/GitHub), navegador web moderno, acceso a bases de datos de marketing (CSV/SQL/APIs) y servicios de hospedaje para despliegue de dashboards. Recursos multimedia para demostraciones y software de control de versiones para trabajo colaborativo.", "actividades_de_aprendizaje_independientes": "Revisión de lecturas y casos de estudio sobre visualización y storytelling; tutoriales prácticos en Tableau/Power BI y bibliotecas web; implementación de ejercicios guiados y retos de optimización; elaboración y refinamiento del proyecto final; análisis de datasets de marketing y preparación de materiales para la presentación.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Visualización avanzada de datos para marketing", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales cortas sobre principios de diseño y narrativa; sesiones prácticas guiadas en laboratorio para construcción de dashboards; talleres de usabilidad y pruebas de usuario; revisiones críticas de trabajos en clase (crítica guiada); tutorías para acompañar el desarrollo del proyecto final y presentación de casos reales del sector."}', '[{"temas": [{"nombre": "Percepción visual, encuadres y narrativa de datos para insights de mercado", "horasEstimadas": 1}], "titulo": "Principios de visualización y storytelling aplicado al marketing", "unidad": 1}, {"temas": [{"nombre": "Diseño y desarrollo de dashboards interactivos con Tableau, Power BI y bibliotecas web (Plotly/D3)", "horasEstimadas": 1}], "titulo": "Herramientas y técnicas interactivas", "unidad": 2}, {"temas": [{"nombre": "Métricas de usabilidad, pruebas A/B, performance y publicación en entornos comerciales", "horasEstimadas": 1}], "titulo": "Evaluación, optimización y despliegue de visualizaciones para la toma de decisiones", "unidad": 3}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "responseId": "resp_027a42aa035d66610069a1e3b1ba808190808204bd46d69fc9"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Técnicas y herramientas para diseñar visualizaciones interactivas y dashboards que comuniquen insights de mercado y apoyen la toma de decisiones."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-02-27 18:34:22.194933+00', '2026-02-27 18:50:18.843151+00', 3, 6, 'borrador', '[]'), + ('ab4cf9d3-cacb-4a27-81e6-eebe6f2bf182', '3ebc1d1c-e950-4a6e-948f-bb89efa40e77', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'MKT-SOC320', 'Escucha social y análisis de redes', 'OBLIGATORIA', 6, NULL, NULL, NULL, '{"ciclo": "Sexto ciclo", "clave_de_la_asignatura": "MKT-SOC320", "criterios_de_evaluacion": "Proyecto final integrado con reporte técnico y dashboard (30%); Prácticas y ejercicios de laboratorio (25%); Examen parcial teórico-práctico (15%); Presentación y defensa del estudio de caso (15%); Participación, tareas y entregables individuales (15%). Total 100%.", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura, el estudiante será capaz de diseñar y operar procesos de escucha social, seleccionar y configurar fuentes y herramientas de monitoreo, aplicar técnicas de procesamiento de texto y análisis de sentimiento, construir y analizar redes sociales para detectar comunidades e influenciadores, y generar insights accionables presentados en reportes y dashboards. Además, integrará criterios de calidad y prácticas éticas en la recolección y análisis de datos para apoyar la toma de decisiones en marketing y comunicación.", "modalidades_tecnologicas_e_informaticas": "Empleo de plataformas de monitoreo y escucha (p. ej., Brandwatch, Talkwalker, Hootsuite, herramientas con API), APIs públicas (X/Twitter, Reddit u otras según disponibilidad), software de análisis y scripting (Python con librerías como pandas, scikit-learn, spaCy, NetworkX; o R con tidyverse y igraph), herramientas de visualización (Gephi, Tableau, Power BI o librerías de Python/R), entornos de desarrollo colaborativo (Jupyter Notebooks, Git/GitHub) y servicios en la nube para procesamiento y almacenamiento. Se privilegiará el uso de datasets reales y entornos que permitan reproducibilidad y control de accesos por privacidad.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas y revisión de artículos técnicos; preparación y limpieza de conjuntos de datos; desarrollo de scripts de preprocesamiento y modelos de sentimiento; análisis exploratorio de redes y visualizaciones; elaboración de informes parciales; preparación del proyecto final (recolección de datos, análisis, dashboard y reporte escrito); reflexión crítica sobre ética y sesgos en casos reales.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Escucha social y análisis de redes", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales sobre conceptos y metodologías; sesiones prácticas guiadas en laboratorio para configuración de herramientas y desarrollo de scripts; talleres de visualización y construcción de dashboards; sesiones de análisis de casos reales con discusión dirigida; tutorías para avance del proyecto final; presentaciones y defensa de trabajos con retroalimentación del académico."}', '[{"temas": [{"nombre": "Panorama de la escucha social: objetivos y alcances", "horasEstimadas": 2}, {"nombre": "Actores, canales y ecosistema mediático (medios tradicionales vs. digitales)", "horasEstimadas": 2}, {"nombre": "Indicadores y KPIs para monitoreo y análisis", "horasEstimadas": 2}], "titulo": "Fundamentos de escucha social y métricas clave", "unidad": 1}, {"temas": [{"nombre": "Fuentes relevantes: redes sociales, foros, blogs y medios", "horasEstimadas": 3}, {"nombre": "Herramientas y plataformas de monitoreo: configuración y uso básico", "horasEstimadas": 3}, {"nombre": "Consideraciones de muestreo, representatividad y sesgos de datos", "horasEstimadas": 2}], "titulo": "Fuentes de datos y recolección", "unidad": 2}, {"temas": [{"nombre": "Preprocesamiento de texto: tokenización, lematización y normalización", "horasEstimadas": 3}, {"nombre": "Detección de idioma, manejo de jerga y emojis", "horasEstimadas": 2}, {"nombre": "Técnicas de análisis de sentimiento: enfoques lexicón vs. ML/Deep Learning", "horasEstimadas": 3}, {"nombre": "Extracción de tópicos y reconocimiento de entidades para enriquecer insights", "horasEstimadas": 2}], "titulo": "Procesamiento de texto y análisis de sentimiento", "unidad": 3}, {"temas": [{"nombre": "Representación de redes: nodos, enlaces y estructuras básicas", "horasEstimadas": 2}, {"nombre": "Construcción de grafos a partir de interacciones y menciones", "horasEstimadas": 2}, {"nombre": "Métricas de red: centralidad, densidad y cohesión", "horasEstimadas": 2}, {"nombre": "Algoritmos de detección de comunidades e identificación de clústeres temáticos", "horasEstimadas": 2}], "titulo": "Análisis de redes y detección de comunidades", "unidad": 4}, {"temas": [{"nombre": "Visualización de series temporales, temas y sentimiento", "horasEstimadas": 3}, {"nombre": "Visualización de redes y storytelling con grafos", "horasEstimadas": 3}, {"nombre": "Construcción de dashboards y elaboración de reportes accionables", "horasEstimadas": 2}], "titulo": "Visualización, reporting y generación de insights accionables", "unidad": 5}, {"temas": [{"nombre": "Control de calidad: verificación, validación y métricas de desempeño", "horasEstimadas": 2}, {"nombre": "Privacidad, sesgos y consideraciones éticas en escucha social", "horasEstimadas": 3}, {"nombre": "Estudio de caso integrado: análisis completo y presentación de resultados", "horasEstimadas": 3}], "titulo": "Calidad, ética y aplicación práctica integrada", "unidad": 6}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "responseId": "resp_0499d1061d3902900069a1e7b34a5c819e89ca861058ebd55c"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Técnicas y herramientas para monitoreo de medios y redes, análisis de sentimiento y detección de comunidades; generación de insights accionables con criterios de calidad y ética."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-02-27 18:51:30.065311+00', '2026-02-27 18:52:33.470628+00', 48, 96, 'borrador', '[]'), + ('2f5cf4c4-2f5d-4508-a520-adb340a709d2', '3ebc1d1c-e950-4a6e-948f-bb89efa40e77', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'MKT-ATR311', 'Modelos de atribución omnicanal y optimización', 'OPTATIVA', 6, NULL, NULL, NULL, '{"ciclo": "Optativa", "clave_de_la_asignatura": "MKT-ATR311", "criterios_de_evaluacion": "Proyecto final de modelado y optimización omnicanal (40%); Laboratorios prácticos y entregables de modelado (30%); Evaluaciones parciales y quizzes sobre conceptos y métodos (20%); Participación en clase, discusión de casos y asistencia (10%). Total: 100%.", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura, el estudiante comprenderá y aplicará métodos estadísticos y de machine learning para atribuir conversiones entre canales, estimar ROI y diseñar estrategias de optimización de presupuesto publicitario en entornos omnicanal. Podrá preparar y limpiar datos multifuente, seleccionar y entrenar modelos de atribución, validar resultados, interpretar métricas de desempeño y proponer asignaciones de presupuesto basadas en evidencia para mejorar la eficiencia publicitaria. Esta formación contribuye al perfil de egreso orientado a la analítica de marketing y la toma de decisiones basada en datos.", "modalidades_tecnologicas_e_informaticas": "Se emplearán herramientas y recursos tecnológicos como Python (pandas, scikit-learn, statsmodels), R (opcional), entornos Jupyter/Colab, plataformas de visualización (Tableau, Power BI, matplotlib/seaborn), acceso a APIs de plataformas publicitarias (Google Ads, Meta), sistemas de gestión de datos (CSV/Parquet, bases de datos SQL), entornos de cómputo en la nube para procesamiento y, cuando sea necesario, herramientas para experimentación y A/B testing. Para la modalidad mixta o no escolarizada, se requerirá acceso estable a internet, repositorios Git y entorno de ejecución remoto.", "actividades_de_aprendizaje_independientes": "Se estiman 8 horas independientes para: revisión de lecturas y artículos académicos sobre modelos de atribución; prácticas de limpieza y preparación de datasets omnicanal; implementación y ajuste de modelos estadísticos y de ML; análisis e interpretación de resultados; preparación del proyecto final de optimización de presupuesto; participación en foros y revisión de materiales complementarios.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Modelos de atribución omnicanal y optimización", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Durante las 4 horas académicas se desarrollarán clases magistrales sobre teoría y métodos, sesiones guiadas de laboratorio con datasets reales o simulados, análisis de casos prácticos de atribución omnicanal, demostraciones de implementación de modelos y tutoría directa para el proyecto final; además se promoverán discusiones críticas sobre limitaciones y consideraciones éticas en el uso de datos."}', '[{"temas": [{"nombre": "Fundamentos de atribución: objetivos, métricas clave y limitaciones", "horasEstimadas": 1}, {"nombre": "Fuentes de datos, tracking omnicanal y limpieza/preprocesamiento", "horasEstimadas": 1}], "titulo": "Fundamentos y preparación de datos para atribución omnicanal", "unidad": 1}, {"temas": [{"nombre": "Modelos estadísticos y de machine learning para atribución (Markov, regresión, uplift, modelos basados en eventos)", "horasEstimadas": 1}, {"nombre": "Medición de ROI, validación de modelos y métodos de optimización de presupuesto omnicanal", "horasEstimadas": 1}], "titulo": "Modelado y optimización de presupuesto", "unidad": 2}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "responseId": "resp_0484fafb6df3c7340069a2183cc61481938c722b5997bfdfb8"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Métodos estadísticos y de machine learning para atribuir conversiones entre canales, medir ROI y optimizar presupuesto publicitario omnicanal."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-02-27 22:18:34.556337+00', '2026-02-27 22:19:03.904014+00', 4, 8, 'borrador', '[]'), + ('4f147b56-c22c-4363-9db5-5c13d5a9605f', '3ebc1d1c-e950-4a6e-948f-bb89efa40e77', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'MKT-GDP210', 'Gobernanza de datos y privacidad para marketing', 'OBLIGATORIA', 5, NULL, NULL, NULL, '{"ciclo": "6 (Sexto ciclo)", "clave_de_la_asignatura": "MKT-GDP210", "criterios_de_evaluacion": "Proyecto de diseño de política y plan de cumplimiento (30%), Práctica de auditoría de modelo y reporte técnico (25%), Examen teórico sobre marco legal y técnicas (20%), Actividades y participación en clase (10%), Trabajos y estudios de caso independientes (15%). Total: 100%", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura, el estudiante podrá: 1) Identificar y aplicar los marcos legales relevantes para la protección de datos en actividades de marketing. 2) Diseñar y justificar técnicas de anonimización y minimización adecuadas a distintos escenarios de datos de marketing. 3) Implementar mecanismos de gestión de consentimiento y registros de tratamiento conforme a la normativa. 4) Realizar auditorías básicas de modelos predictivos para detectar riesgos de privacidad y sesgos, y proponer medidas correctivas. 5) Elaborar políticas internas de gobernanza de datos que integren cumplimiento legal y buenas prácticas operativas en estudios de mercado y campañas.", "modalidades_tecnologicas_e_informaticas": "Se empleará el Aula virtual (LMS) para distribución de material y evaluaciones; herramientas de análisis de datos y anonimización (p. ej., Python/R con bibliotecas de privacidad, ARX o herramientas equivalentes); plataformas de gestión de consentimiento (CMP), entornos de colaboración (Google Workspace/Office 365), repositorios para documentación de políticas y registros (Git/GitHub o soluciones documentales institucionales) y simuladores o entornos controlados para auditoría de modelos. Se recomienda acceso a navegadores actualizados y conexión estable a internet.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas de legislación y guías (GDPR, CCPA, LOPD); análisis de estudios de caso; ejercicios prácticos de anonimización y pruebas de reidentificación en datasets de ejemplo; elaboración y revisión de borradores de políticas de gobernanza; preparación del proyecto final y del informe de auditoría de modelo.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Gobernanza de datos y privacidad para marketing", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales sobre marco legal y conceptos clave; seminarios de discusión de casos reales; talleres prácticos de anonimización y uso de herramientas; laboratorios para auditoría de modelos y generación de reportes; presentaciones de propuestas de políticas y retroalimentación guiada por el docente."}', '[{"temas": [{"nombre": "Regulaciones internacionales y nacionales (GDPR, LOPD, CCPA) y principios de privacidad aplicables al marketing", "horasEstimadas": 1}], "titulo": "Marco legal y regulatorio para la protección de datos en marketing", "unidad": 1}, {"temas": [{"nombre": "Anonimización, seudonimización, minimización de datos, cifrado y seguridad en almacenamiento/transferencia", "horasEstimadas": 1}], "titulo": "Técnicas y buenas prácticas para protección y anonimización de datos", "unidad": 2}, {"temas": [{"nombre": "Gestión de consentimiento, registros de actividades de tratamiento, auditoría de modelos de ML y diseño/implantación de políticas internas", "horasEstimadas": 1}], "titulo": "Consentimiento, auditoría de modelos y políticas internas de cumplimiento", "unidad": 3}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "responseId": "resp_049e28f94084fd560069a2183c7bd881a1a7560b56b5a6a6b0"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Marco legal y prácticas para protección de datos, anonimización, consentimiento y auditoría de modelos; políticas internas y cumplimiento en estudios de mercado."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-02-27 22:18:34.556337+00', '2026-02-27 22:19:04.437571+00', 3, 6, 'borrador', '[]'), + ('1c375545-4de0-429b-90f4-963155593d8c', 'f35bd838-6df7-4a3b-9fbf-879f9b3e6da9', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'LESE101', 'Fundamentos de inclusión y marco normativo', 'TRONCAL', 6, 7, '32708950-6f54-48e2-b0e2-a205686a2ec7', NULL, '{"ciclo": "1er ciclo (Troncal)", "clave_de_la_asignatura": "LESE101", "criterios_de_evaluacion": "Trabajo final (análisis de caso y plan de inclusión): 30%; Ensayo/monografía sobre marco normativo: 20%; Portfolio de evidencias y adaptaciones prácticas: 20%; Participación en talleres y presentaciones grupales: 15%; Quizzes y evaluaciones parciales: 10%; Asistencia y participación en actividades dirigidas: 5%.", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante comprenderá los principios, políticas y marcos normativos nacionales e internacionales que sustentan la inclusión educativa; será capaz de identificar barreras a la participación y aprendizaje, aplicar criterios éticos y legales en la atención educativa, diseñar adaptaciones y planes de inclusión basados en buenas prácticas (incluyendo DUA y ajustes razonables) y evaluar la implementación de políticas y estrategias en contextos escolares.", "modalidades_tecnologicas_e_informaticas": "Uso de plataforma de gestión del aprendizaje (LMS) para distribución de materiales y evaluaciones; videoconferencias y grabaciones con subtitulado para sesiones síncronas; materiales en formatos accesibles (PDF etiquetado, HTML, audio); compatibilidad con lectores de pantalla; acceso a bases de datos legales y repositorios de recursos inclusivos; herramientas colaborativas (documentos compartidos, foros) y aplicaciones de apoyo (software de comunicación aumentativa, ampliadores de pantalla) para prácticas y evidencias.", "actividades_de_aprendizaje_independientes": "Lectura y análisis de textos legales y convenciones internacionales; elaboración de fichas de lectura y resúmenes críticos; preparación de un ensayo sobre un aspecto normativo; diseño y prueba de adaptaciones curriculares para una unidad didáctica; recopilación de evidencias para el portfolio; reflexión personal en bitácora sobre prácticas inclusivas; investigación y preparación de un breve informe sobre tecnologías de apoyo. (Estimadas 72 horas independientes).", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Fundamentos de inclusión y marco normativo", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales y seminarios sobre marcos normativos y teorías de inclusión; análisis guiado de casos reales y jurisprudencia; talleres prácticos de diseño de adaptaciones y uso de tecnologías de apoyo; simulaciones y role-playing para atención inclusiva; sesiones de retroalimentación sobre trabajos y portfolios; presentaciones y defensa del plan de inclusión en ambiente supervisado."}', '[{"temas": [{"nombre": "Historia y conceptualización de la inclusión escolar", "horasEstimadas": 2}, {"nombre": "Principios y valores de la educación inclusiva", "horasEstimadas": 2}, {"nombre": "Barreras para la participación y aprendizaje", "horasEstimadas": 2}, {"nombre": "Modelos de discapacidad y sus implicaciones educativas", "horasEstimadas": 2}], "titulo": "Introducción a la inclusión educativa", "unidad": 1}, {"temas": [{"nombre": "Convenios y instrumentos internacionales (p. ej., CRPD)", "horasEstimadas": 2}, {"nombre": "Marco constitucional y legislación nacional sobre discapacidad", "horasEstimadas": 2}, {"nombre": "Derechos de niñas, niños y adolescentes con discapacidad en la escuela", "horasEstimadas": 2}, {"nombre": "Ética profesional y responsabilidad institucional", "horasEstimadas": 2}], "titulo": "Derechos humanos y discapacidad", "unidad": 2}, {"temas": [{"nombre": "Políticas educativas y normas sectoriales relacionadas con inclusión", "horasEstimadas": 3}, {"nombre": "Leyes y reglamentos específicos sobre educación inclusiva", "horasEstimadas": 3}, {"nombre": "Accesibilidad universal y ajustes razonables en el contexto escolar", "horasEstimadas": 2}, {"nombre": "Protocolos administrativos y procedimientos de atención educativa", "horasEstimadas": 2}], "titulo": "Marco normativo educativo y políticas públicas", "unidad": 3}, {"temas": [{"nombre": "Detección temprana e identificación de necesidades educativas especiales", "horasEstimadas": 2}, {"nombre": "Diseño Universal para el Aprendizaje (DUA)", "horasEstimadas": 3}, {"nombre": "Adaptaciones curriculares y metodológicas", "horasEstimadas": 2}, {"nombre": "Estrategias de evaluación formativa y sumativa inclusiva", "horasEstimadas": 1}], "titulo": "Identificación de necesidades y evaluación inclusiva", "unidad": 4}, {"temas": [{"nombre": "Metodologías activas y diferenciación instruccional", "horasEstimadas": 3}, {"nombre": "Tecnologías de apoyo y accesibilidad digital en el aula", "horasEstimadas": 2}, {"nombre": "Trabajo colaborativo, mediación y participación familiar", "horasEstimadas": 2}, {"nombre": "Prevención del acoso, estigmatización y promoción de una cultura inclusiva", "horasEstimadas": 1}], "titulo": "Prácticas pedagógicas y recursos para la inclusión", "unidad": 5}, {"temas": [{"nombre": "Elaboración de protocolos y planes de inclusión escolar", "horasEstimadas": 2}, {"nombre": "Monitoreo, evaluación y mejora continua de acciones inclusivas", "horasEstimadas": 2}, {"nombre": "Caso práctico integral: diseño de un plan de inclusión para una escuela", "horasEstimadas": 2}], "titulo": "Implementación y evaluación de estrategias y políticas escolares", "unidad": 6}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "responseId": "resp_041296d54c2725da0069a21b83f3fc819f9cb53cab58c890fc"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Introducción a políticas, leyes y principios de inclusión educativa y derechos de las personas con discapacidad en el contexto escolar."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-02-27 22:32:34.959155+00', '2026-02-27 22:36:50.664531+00', 48, 72, 'borrador', '[]'), + ('36148c21-3825-4e9e-81dd-979bcd2e6563', 'f35bd838-6df7-4a3b-9fbf-879f9b3e6da9', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'LESE105', 'Evaluación formativa y ajustes curriculares', 'TRONCAL', 6, 8, '07a19d6f-a412-4993-b07d-4bc02b3d544a', NULL, '{"ciclo": "Ciclo 5", "clave_de_la_asignatura": "LESE105", "criterios_de_evaluacion": "Participación y actividades en clase (15%); Evidencias formativas periódicas: registros, quizzes y registros de progreso (20%); Portafolio de evidencias con reflexiones y muestras de ajuste (25%); Diseño documentado de un ajuste razonable individual (20%); Proyecto final integrador: plan de ajustes + presentación y defensa (20%). Total 100%.", "fines_de_aprendizaje_o_formacion": "Que el estudiante sea capaz de diseñar, implementar y evaluar procesos de evaluación formativa que permitan identificar progresos y necesidades de aprendizaje, formular indicadores de progreso claros y confiables, y elaborar ajustes curriculares razonables y sostenibles para apoyo individualizado, en colaboración con la comunidad educativa y atendiendo marcos éticos y legales.", "modalidades_tecnologicas_e_informaticas": "Uso de un LMS para entrega y seguimiento (p. ej. Moodle/Canvas), herramientas de recolección de evidencias (Google Forms, apps de portafolio), hojas de cálculo para análisis de progreso (Excel/Sheets), software de visualización básica, plataformas de videoconferencia (Zoom/Microsoft Teams) para trabajo colaborativo y presentaciones, y recursos accesibles (lectores de pantalla, subtítulos) para garantizar inclusión.", "actividades_de_aprendizaje_independientes": "Lecturas orientadas y estudio de marcos conceptuales; elaboración de instrumentos y rúbricas adaptadas; recolección y análisis de evidencias en contextos reales o simulados; mantenimiento del portafolio reflexivo; diseño y revisión del plan de ajuste individual; preparación de la presentación final.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Evaluación formativa y ajustes curriculares", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Sesiones expositivas dirigidas sobre teorías y marcos; talleres prácticos para construcción de instrumentos y rúbricas; análisis guiado de casos reales; microenseñanza y simulaciones con retroalimentación; tutorías para diseño de ajustes; sesiones de presentación y evaluación entre pares."}', '[{"temas": [{"nombre": "Principios y funciones de la evaluación formativa", "horasEstimadas": 3}, {"nombre": "Indicadores de logro y rúbricas para seguimiento continuo", "horasEstimadas": 3}, {"nombre": "Retroalimentación efectiva: tipos y técnicas", "horasEstimadas": 2}], "titulo": "Fundamentos de la evaluación formativa", "unidad": 1}, {"temas": [{"nombre": "Observación sistemática y registros anecdóticos", "horasEstimadas": 2}, {"nombre": "Listas de cotejo y rúbricas adaptadas", "horasEstimadas": 3}, {"nombre": "Instrumentos digitales: formularios, portafolios y apps", "horasEstimadas": 3}], "titulo": "Herramientas e instrumentos para la evaluación continua", "unidad": 2}, {"temas": [{"nombre": "Definición, selección y validación de indicadores", "horasEstimadas": 3}, {"nombre": "Líneas base, escalas de progreso y niveles de desempeño", "horasEstimadas": 3}, {"nombre": "Monitoreo, registro de evidencias y visualización de datos", "horasEstimadas": 2}], "titulo": "Diseño y uso de indicadores de progreso", "unidad": 3}, {"temas": [{"nombre": "Marco legal, ético y principios de inclusión", "horasEstimadas": 2}, {"nombre": "Tipos de ajustes: pedagógicos, metodológicos y de acceso", "horasEstimadas": 3}, {"nombre": "Procedimiento para diseñar ajustes individualizados", "horasEstimadas": 3}], "titulo": "Ajustes curriculares razonables", "unidad": 4}, {"temas": [{"nombre": "Planificación de intervenciones basadas en evidencias", "horasEstimadas": 3}, {"nombre": "Trabajo colaborativo con familias y profesionales", "horasEstimadas": 2}, {"nombre": "Evaluación del impacto y ajustes iterativos", "horasEstimadas": 3}], "titulo": "Intervención, colaboración y seguimiento", "unidad": 5}, {"temas": [{"nombre": "Estudios de caso, simulaciones y microenseñanza", "horasEstimadas": 3}, {"nombre": "Diseño de un plan de ajustes y sistema de evaluación formativa", "horasEstimadas": 3}, {"nombre": "Presentación, retroalimentación y revisión del plan", "horasEstimadas": 2}], "titulo": "Práctica aplicada y proyecto integrador", "unidad": 6}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "responseId": "resp_09d9633fafebbb840069a21b841d98819e981e066e5b0febf5"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Estrategias de evaluación continua, indicadores de progreso y diseño de ajustes razonables para apoyo individualizado."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-02-27 22:32:34.959155+00', '2026-02-27 22:36:52.054462+00', 48, 72, 'borrador', '[]'), + ('9116b6b9-06a0-4eca-ad2a-6134eb4cac08', 'f35bd838-6df7-4a3b-9fbf-879f9b3e6da9', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'LESE104', 'Diseño Universal para el Aprendizaje aplicado', 'OBLIGATORIA', 5, 3, '32708950-6f54-48e2-b0e2-a205686a2ec7', NULL, '{"ciclo": "Cuarto ciclo", "clave_de_la_asignatura": "LESE104", "criterios_de_evaluacion": "Participación y actividades en clase (10%); Tareas y adaptaciones diseñadas (25%); Proyecto final: diseño de unidad/instrumento UDL y su implementación simulada (30%); Portafolio práctico con evidencias y autoevaluación (20%); Reflexión escrita / examen integrador (15%). Total: 100%", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura, el estudiante comprenderá los principios del Diseño Universal para el Aprendizaje y sabrá traducirlos en adaptaciones concretas de materiales, actividades y evaluaciones para facilitar el acceso y la participación de estudiantes con diversidad de necesidades. Podrá evaluar herramientas tecnológicas de apoyo, diseñar unidades didácticas inclusivas basadas en evidencia y proponer medidas de mejora continua que contribuyan al perfil de egreso orientado a la inclusión pedagógica.", "modalidades_tecnologicas_e_informaticas": "Se emplearán plataformas LMS para gestión de contenidos y entrega de evidencias; editores de texto y multimedia accesible; herramientas de subtitulado y transcripción automática; validadores de accesibilidad web; lectores de pantalla y software de ampliación para prácticas; videoconferencia para sesiones síncronas y foros colaborativos; repositorios compartidos y herramientas de autoría (presentaciones, infografías, video).", "actividades_de_aprendizaje_independientes": "Lecturas académicas y guías prácticas sobre UDL; análisis crítico de casos; diseño y conversión de materiales didácticos en formatos accesibles; práctica con tecnologías de apoyo; elaboración de actividades y evaluaciones alternativas; preparación del proyecto final y del portafolio; autoestudio y reflexiones individuales (total estimado de trabajo independiente: 60 horas).", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Diseño Universal para el Aprendizaje aplicado", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales breves sobre fundamentos; talleres prácticos para diseño y adaptación de materiales; sesiones de laboratorio con herramientas de accesibilidad; microenseñanzas y retroalimentación entre pares; análisis de estudios de caso; tutorías orientadas al desarrollo del proyecto final; seminarios sobre políticas y evaluación de impacto."}', '[{"temas": [{"nombre": "Origen, evolución y fundamentos teóricos del UDL", "horasEstimadas": 3}, {"nombre": "Los tres principios de UDL: Representación; Acción y expresión; Compromiso", "horasEstimadas": 4}, {"nombre": "Marco legal, ético y políticas de inclusión educativa relacionadas con UDL", "horasEstimadas": 3}], "titulo": "Fundamentos y marco del Diseño Universal para el Aprendizaje (UDL)", "unidad": 1}, {"temas": [{"nombre": "Alternativas perceptuales: formatos, descripciones y apoyos multimedia", "horasEstimadas": 4}, {"nombre": "Accesibilidad Universal: contrastes, tipografía, navegación y diseño de interfaces", "horasEstimadas": 3}, {"nombre": "Herramientas y recursos para convertir y adaptar materiales (captions, transcripciones, descripciones)", "horasEstimadas": 3}], "titulo": "Aplicación del principio de representación y accesibilidad de contenidos", "unidad": 2}, {"temas": [{"nombre": "Estrategias para diversificar la producción del estudiante: propuestas y herramientas", "horasEstimadas": 4}, {"nombre": "Diseño de evaluaciones inclusivas: rúbricas flexibles y alternativas de demostración de aprendizaje", "horasEstimadas": 3}, {"nombre": "Adaptaciones, andamiaje y modificaciones pedagógicas según necesidades diversas", "horasEstimadas": 3}], "titulo": "Acción/Expresión y evaluación inclusiva", "unidad": 3}, {"temas": [{"nombre": "Integración de tecnologías y tecnologías de apoyo (LMS, lectores de pantalla, software de comunicación)", "horasEstimadas": 3}, {"nombre": "Planificación curricular aplicando UDL: secuencias, proyectos y microenseñanzas", "horasEstimadas": 4}, {"nombre": "Monitoreo y evaluación del impacto de intervenciones UDL; mejora continua y escalamiento", "horasEstimadas": 3}], "titulo": "Implementación, tecnologías de apoyo y evaluación de impacto", "unidad": 4}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "responseId": "resp_0344097da52f91540069a21b842e748192a1aad3fd18ac8c1e"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Principios UDL y su traducción en adaptaciones y recursos para facilitar el acceso y la participación en el currículo."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-02-27 22:32:34.959155+00', '2026-02-27 22:36:14.777204+00', 40, 60, 'borrador', '[]'), + ('23fe97ae-e67a-4d8f-80ce-6dfe5e30d353', 'f35bd838-6df7-4a3b-9fbf-879f9b3e6da9', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'LESE106', 'Comunicación y trabajo con familias', 'OBLIGATORIA', 4, 9, '32708950-6f54-48e2-b0e2-a205686a2ec7', NULL, '{"ciclo": "Ciclo 4", "clave_de_la_asignatura": "LESE106", "criterios_de_evaluacion": "Participación y asistencia: 10%; Talleres prácticos y simulaciones (role-play) y evidencias de mediación: 25%; Proyecto final: diseño e implementación simulada de un plan de vinculación familiar (informe y presentación): 30%; Portafolio de evidencias y reflexiones individuales: 15%; Evaluación teórico-práctica final (casos y análisis): 20%.", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura, el estudiante habrá desarrollado competencias para mediar y comunicar de manera colaborativa con familias, diseñar e implementar estrategias inclusivas de participación familiar en contextos educativos, aplicar técnicas éticas de intervención y mediación, y articular recursos comunitarios para fortalecer el vínculo entre familia y escuela.", "modalidades_tecnologicas_e_informaticas": "Uso de plataforma educativa (LMS) para materiales, foros y entrega de evidencias; videoconferencia (Zoom/Teams) para sesiones y entrevistas simuladas; herramientas de colaboración en línea (Google Docs/Drive); grabación y análisis de video para retroalimentación; encuestas digitales y formularios para diagnóstico familiar; recursos multimedia y bibliografía digital. (Obligatorio para modalidades mixta/no escolarizada).", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas y análisis de casos; reflexiones semanales en bitácora; diseño y ajuste del plan de vinculación familiar; preparación de materiales para talleres; revisión de recursos comunitarios y elaboración de mapa de aliados; grabación y autoevaluación de simulaciones; participación en foros de discusión y estudio colaborativo en línea.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Comunicación y trabajo con familias", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales breves para introducción de conceptos; análisis guiado de casos y discusión en grupo; talleres prácticos y role-plays supervisados; sesiones de mediación simulada con retroalimentación del docente; diseño colectivo de estrategias y retroalimentación en clase; recepción de presentaciones de proyectos y tutoría para el ajuste de intervenciones."}', '[{"temas": [{"nombre": "Principios de la comunicación educativa y modelos de interacción escuela-familia", "horasEstimadas": 3}, {"nombre": "Perspectivas sobre la familia: diversidad, estructuras y roles en el proceso educativo", "horasEstimadas": 2}, {"nombre": "Ética, confidencialidad y límites profesionales en la relación con familias", "horasEstimadas": 1}, {"nombre": "Barreras culturales, lingüísticas y socioeconómicas: reconocimiento e implicaciones", "horasEstimadas": 2}], "titulo": "Fundamentos de la comunicación y el trabajo con familias", "unidad": 1}, {"temas": [{"nombre": "Escucha activa, comunicación empática y comunicación no violenta", "horasEstimadas": 3}, {"nombre": "Técnicas de mediación y resolución de conflictos entre familias y escuela", "horasEstimadas": 3}, {"nombre": "Comunicación digital y uso responsable de tecnologías para el vínculo familia-escuela", "horasEstimadas": 2}], "titulo": "Habilidades de mediación y comunicación colaborativa", "unidad": 2}, {"temas": [{"nombre": "Modelos de participación familiar y diseño de programas de vinculación", "horasEstimadas": 2}, {"nombre": "Diseño y conducción de reuniones efectivas, talleres y actividades participativas", "horasEstimadas": 3}, {"nombre": "Planificación de actividades inclusivas y accesibles para distintos contextos familiares", "horasEstimadas": 2}, {"nombre": "Evaluación de la participación familiar y retroalimentación constructiva", "horasEstimadas": 1}], "titulo": "Estrategias para el involucramiento y la participación familiar", "unidad": 3}, {"temas": [{"nombre": "Diseño de proyectos de intervención para la participación familiar y su seguimiento", "horasEstimadas": 3}, {"nombre": "Simulaciones y role-play: entrevistas, asesorías y mediaciones con familias", "horasEstimadas": 3}, {"nombre": "Recursos comunitarios, redes de apoyo y derivación interinstitucional", "horasEstimadas": 1}, {"nombre": "Reflexión crítica, documentación y elaboración de portafolio profesional", "horasEstimadas": 1}], "titulo": "Aplicación práctica y proyectos de intervención con familias", "unidad": 4}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "responseId": "resp_0bbb8c39234d0e220069a21b8417348192a55e75ee148b4c33"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Habilidades de mediación, comunicación colaborativa y estrategias para involucrar familias en procesos educativos."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-02-27 22:32:34.959155+00', '2026-02-27 22:36:54.00477+00', 32, 48, 'borrador', '[]'), + ('727094e2-c624-4e95-aac5-5d990c672eb9', 'f35bd838-6df7-4a3b-9fbf-879f9b3e6da9', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'LESE103', 'Observación y registro sistemático', 'OBLIGATORIA', 5, 6, '32708950-6f54-48e2-b0e2-a205686a2ec7', NULL, '{"ciclo": "Segundo ciclo", "clave_de_la_asignatura": "LESE103", "criterios_de_evaluacion": "Participación y prácticas en clase: 10%; Diseño de instrumento de observación (proyecto): 20%; Trabajo de campo: bitácoras y registros (observaciones sistemáticas): 30%; Tarea de fiabilidad interobservador y ajuste de instrumentos: 15%; Informe final y presentación de resultados aplicados: 25%.", "fines_de_aprendizaje_o_formacion": "Formar en técnicas y herramientas para diseñar instrumentos de observación, recolectar datos confiables y construir registros válidos que permitan analizar comportamientos en contextos escolares y orientar decisiones pedagógicas basadas en evidencia.", "modalidades_tecnologicas_e_informaticas": "Uso de grabadoras de audio y video, cámaras o dispositivos móviles para registro, aplicaciones móviles y formularios digitales para recolección (apps de registro, formularios en línea), hojas de cálculo para organización de datos, software básico de visualización y almacenamiento seguro en la nube; además de plataformas institucionales para entrega y retroalimentación.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas sobre métodos de observación, práctica individual de toma de notas y codificación de fragmentos de video, realización de observaciones fuera del aula y registro en bitácoras, ingreso y procesamiento básico de datos en hojas de cálculo, preparación del informe de campo y del proyecto de instrumento.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Observación y registro sistemático", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Sesiones magistrales sobre teorías y métodos; demostraciones de instrumentos; talleres guiados de construcción de listas de cotejo y rúbricas; prácticas supervisadas de observación en aula con retroalimentación inmediata; sesiones de codificación conjunta y cálculo de fiabilidad; revisión y asesoría para informes finales."}', '[{"temas": [{"nombre": "Concepto, objetivos y usos de la observación en contextos escolares", "horasEstimadas": 2}, {"nombre": "Consideraciones éticas, consentimiento y confidencialidad", "horasEstimadas": 1}, {"nombre": "Modalidades de observación: participante, no participante, estructurada y no estructurada", "horasEstimadas": 2}, {"nombre": "Criterios para la selección de conductas y unidades de registro", "horasEstimadas": 3}], "titulo": "Fundamentos de la observación sistemática", "unidad": 1}, {"temas": [{"nombre": "Operacionalización de conductas y creación de indicadores observables", "horasEstimadas": 3}, {"nombre": "Listas de cotejo, escalas de valoración y rúbricas: estructura y usos", "horasEstimadas": 3}, {"nombre": "Muestreo de eventos: muestreo temporal, por eventos y por intervalos", "horasEstimadas": 2}, {"nombre": "Construcción de esquemas de codificación y manuales de observación", "horasEstimadas": 2}], "titulo": "Diseño y construcción de instrumentos de registro", "unidad": 2}, {"temas": [{"nombre": "Toma de notas de campo y formatos de registro cualitativo", "horasEstimadas": 2}, {"nombre": "Grabación audio y video: prácticas, permisos y manejo de evidencias", "horasEstimadas": 3}, {"nombre": "Aplicaciones digitales y herramientas para registro y codificación en campo", "horasEstimadas": 2}, {"nombre": "Organización logística de sesiones de observación en aula", "horasEstimadas": 1}], "titulo": "Técnicas de toma de datos y herramientas tecnológicas", "unidad": 3}, {"temas": [{"nombre": "Cálculo y mejora de la fiabilidad interobservador", "horasEstimadas": 2}, {"nombre": "Estrategias para aumentar la validez: triangulación y contraste de fuentes", "horasEstimadas": 2}, {"nombre": "Identificación y reducción de sesgos observacionales; reflexividad", "horasEstimadas": 1}, {"nombre": "Seguridad, almacenamiento y anonimización de datos", "horasEstimadas": 2}], "titulo": "Fiabilidad, validez y calidad del registro", "unidad": 4}, {"temas": [{"nombre": "Organización y codificación de datos para análisis descriptivo", "horasEstimadas": 2}, {"nombre": "Visualización básica de datos y síntesis de hallazgos", "horasEstimadas": 2}, {"nombre": "Elaboración de informes de observación y comunicación de resultados a la comunidad educativa", "horasEstimadas": 2}, {"nombre": "Aplicación de registros para diseño de intervenciones y mejora docente", "horasEstimadas": 1}], "titulo": "Análisis, reporte y uso pedagógico de los registros", "unidad": 5}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "responseId": "resp_0c3d89a6863b4f500069a21b8419088193bb9cfe5bffbb5788"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Técnicas y herramientas para observación, toma de datos y construcción de registros confiables en contextos escolares."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-02-27 22:32:34.959155+00', '2026-03-04 14:52:32.075257+00', 40, 60, 'borrador', '[]'), + ('48e962bd-4dd5-49f5-bc69-d8604d69384b', 'f35bd838-6df7-4a3b-9fbf-879f9b3e6da9', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'LESE102', 'Desarrollo y diversidad neuropsicológica', 'TRONCAL', 6, 4, '32708950-6f54-48e2-b0e2-a205686a2ec7', NULL, '{"ciclo": "Segundo ciclo (TRONCAL)", "clave_de_la_asignatura": "LESE102", "criterios_de_evaluacion": "Exámenes parciales teóricos 25%; Proyecto integrador (evaluación e intervención de caso) 30%; Portafolio con informes neuropsicológicos y análisis de casos 20%; Talleres prácticos y demostraciones 15%; Participación y seminarios dirigidos 10%. Total 100%.", "fines_de_aprendizaje_o_formacion": "Proveer al estudiante de conocimientos y habilidades para comprender las bases neurobiológicas del desarrollo infantil, identificar perfiles neuropsicológicos asociados a discapacidades y trastornos del desarrollo, seleccionar y aplicar instrumentos de evaluación adecuados, y diseñar intervenciones y planes de inclusión basados en evidencia que integren perspectiva familiar e interdisciplinaria.", "modalidades_tecnologicas_e_informaticas": "Uso de plataforma educativa (LMS) para materiales, actividades y foros; videoconferencia para seminarios y supervisión; recursos multimedia (lecturas, cápsulas en video); software de presentación y procesamiento de datos (p. ej., hojas de cálculo, R/SPSS); acceso a baterías de evaluación neuropsicológica informatizadas y bancos de casos clínicos. Para modalidades mixtas o a distancia se garantizará acceso a bibliografía digital, herramientas de evaluación remota y entornos seguros para compartir informes.", "actividades_de_aprendizaje_independientes": "Lecturas críticas de artículos y capítulos; elaboración de informes neuropsicológicos a partir de casos; preparación del proyecto integrador (evaluación y plan de intervención); análisis estadístico básico de datos de evaluación; diarios de reflexión sobre práctica clínica y ética; estudio dirigido para exámenes parciales y preparación de seminarios.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Desarrollo y diversidad neuropsicológica", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales y exposiciones guiadas; análisis y discusión de casos clínicos en grupo; demostraciones y práctica supervisada en la administración de pruebas neuropsicológicas; talleres de interpretación de resultados y elaboración de informes; sesiones de retroalimentación para el proyecto integrador; mesas interdisciplinarias con profesionales invitados."}', '[{"temas": [{"nombre": "Neuroanatomía y bases biológicas del desarrollo cerebral", "horasEstimadas": 6}, {"nombre": "Principios del desarrollo cognitivo, afectivo y social", "horasEstimadas": 4}, {"nombre": "Métodos y medidas en neuropsicología del desarrollo (neuroimagen, evaluaciones conductuales)", "horasEstimadas": 4}], "titulo": "Fundamentos del desarrollo neuropsicológico", "unidad": 1}, {"temas": [{"nombre": "Desarrollo prenatal y primera infancia: impacto en la trayectoria funcional", "horasEstimadas": 4}, {"nombre": "Desarrollo sensoriomotor y funciones ejecutivas emergentes", "horasEstimadas": 4}, {"nombre": "Desarrollo del lenguaje y comunicación: evaluación y indicadores tempranos", "horasEstimadas": 4}], "titulo": "Desarrollo típico: hitos y variabilidad", "unidad": 2}, {"temas": [{"nombre": "Trastorno del espectro autista: características cognitivas y socioemocionales", "horasEstimadas": 4}, {"nombre": "Trastorno por déficit de atención e hiperactividad (TDAH) y alteraciones ejecutivas", "horasEstimadas": 4}, {"nombre": "Discapacidad intelectual y desarrollo adaptativo", "horasEstimadas": 4}, {"nombre": "Trastornos específicos del aprendizaje y perfil neuropsicológico", "horasEstimadas": 4}], "titulo": "Perfiles neuropsicológicos en condiciones de diversidad del desarrollo", "unidad": 3}, {"temas": [{"nombre": "Baterías y pruebas neuropsicológicas: selección, aplicación e interpretación", "horasEstimadas": 3}, {"nombre": "Intervenciones basadas en evidencia: estrategias rehabilitadoras y psicoeducativas", "horasEstimadas": 2}, {"nombre": "Enfoques familiares, interdisciplinarios y consideraciones éticas en la atención", "horasEstimadas": 1}], "titulo": "Evaluación, intervención y modelos de inclusión", "unidad": 4}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "responseId": "resp_0ad723e26f6fb7480069a21b840d6481a086bb4e20a4559492"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Bases del desarrollo infantil y perfiles neuropsicológicos asociados a discapacidades y trastornos del desarrollo."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-02-27 22:32:34.959155+00', '2026-02-27 22:36:16.195357+00', 48, 72, 'borrador', '[]'), + ('60ad87f2-98f1-4282-99de-21448c9157b3', 'f35bd838-6df7-4a3b-9fbf-879f9b3e6da9', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'LESE110', 'Ética profesional y confidencialidad', 'TRONCAL', 3, 9, '32708950-6f54-48e2-b0e2-a205686a2ec7', NULL, '{"ciclo": "Segundo ciclo", "clave_de_la_asignatura": "LESE110", "criterios_de_evaluacion": "Participación y desempeño en clase y talleres (15%), Análisis escritos de casos y trabajos prácticos (30%), Examen teórico sobre fundamentos éticos y normativos (25%), Proyecto final: protocolo institucional de confidencialidad y manejo de datos (20%), Evaluación continua mediante rúbricas de conducta profesional (10%).", "fines_de_aprendizaje_o_formacion": "Que el estudiante comprenda y aplique principios éticos en el ejercicio profesional, identifique y respete la dignidad y derechos de los alumnos, gestione adecuadamente información sensible y desarrolle capacidades para tomar decisiones éticas fundamentadas y diseñar protocolos institucionales que protejan la privacidad y promuevan el trato digno.", "modalidades_tecnologicas_e_informaticas": "Plataforma LMS para entrega y retroalimentación de actividades, entornos seguros para discusión de casos (foros privados), uso de herramientas de ofimática y gestores de documentos con control de acceso, herramientas de cifrado y almacenamiento seguro cuando sea necesario, bibliotecas digitales y recursos en línea, videoconferencia para sesiones síncronas y simulaciones de casos.", "actividades_de_aprendizaje_independientes": "Lectura crítica de textos y normativas, elaboración de diarios reflexivos sobre ética profesional, análisis escrito de casos prácticos, diseño de un borrador de protocolo de confidencialidad, preparación de presentaciones y participación en foros en línea, y autoevaluación mediante rúbricas.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Ética profesional y confidencialidad", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases expositivas interactivas sobre teorías y marcos normativos, seminarios y debates sobre derechos y dignidad, talleres prácticos de manejo de información sensible y uso de herramientas de protección de datos, sesiones de análisis y discusión de casos reales y simulados, role-play para afrontar dilemas éticos, y tutorías para el desarrollo del proyecto final."}', '[{"temas": [{"nombre": "Conceptos básicos de ética y moral aplicados al ejercicio profesional", "horasEstimadas": 2}, {"nombre": "Teorías éticas y su aplicación en la práctica educativa", "horasEstimadas": 2}, {"nombre": "Valores, responsabilidad profesional y códigos de conducta", "horasEstimadas": 2}], "titulo": "Fundamentos de la ética profesional", "unidad": 1}, {"temas": [{"nombre": "Derechos humanos y derechos del estudiante en el contexto educativo", "horasEstimadas": 2}, {"nombre": "Diversidad, inclusión y no discriminación en la práctica docente", "horasEstimadas": 2}, {"nombre": "Límites profesionales y mantenimiento de la dignidad del alumno", "horasEstimadas": 2}], "titulo": "Derechos, dignidad y relación con el estudiante", "unidad": 2}, {"temas": [{"nombre": "Tipos de información sensible y marco normativo aplicable", "horasEstimadas": 2}, {"nombre": "Consentimiento informado, privacidad y principios de minimización de datos", "horasEstimadas": 2}, {"nombre": "Protección y seguridad de la información: buenas prácticas y herramientas", "horasEstimadas": 2}], "titulo": "Confidencialidad y manejo de información sensible", "unidad": 3}, {"temas": [{"nombre": "Modelos y procedimientos para la toma de decisiones éticas", "horasEstimadas": 2}, {"nombre": "Análisis y resolución de dilemas éticos mediante estudio de casos", "horasEstimadas": 3}, {"nombre": "Diseño de políticas, protocolos y líneas de acción institucionales", "horasEstimadas": 1}], "titulo": "Toma de decisiones éticas y protocolos institucionales", "unidad": 4}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "responseId": "resp_063b6ccc8572ce850069a21b842cb8819f99e8b696b7241526"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Principios éticos, manejo de información sensible y toma de decisiones respetuosa de derechos y dignidad del alumno."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-02-27 22:32:34.959155+00', '2026-02-27 22:36:58.913654+00', 24, 36, 'borrador', '[]'), + ('68e057f9-9014-4736-aaa3-ccd6ca51a569', 'f35bd838-6df7-4a3b-9fbf-879f9b3e6da9', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'LESE107', 'Estrategias de apoyo conductual en el aula', 'OBLIGATORIA', 5, 5, '32708950-6f54-48e2-b0e2-a205686a2ec7', NULL, '{"ciclo": "5", "clave_de_la_asignatura": "LESE107", "criterios_de_evaluacion": "Participación y actividades en clase 10%, Prácticas dirigidas y role-play 20%, Informes de evaluación y recolección de datos 20%, Plan de apoyo conductual individual (proyecto) 30%, Examen final teórico-práctico 20% (total 100%)", "fines_de_aprendizaje_o_formacion": "Formar profesionales con competencias para diseñar, implementar y evaluar intervenciones basadas en evidencia para el manejo de conductas en el aula, empleando refuerzo positivo, estrategias proactivas y promoción de habilidades socioemocionales, garantizando prácticas éticas y colaboración con la comunidad educativa.", "modalidades_tecnologicas_e_informaticas": "Plataforma LMS para contenidos y entrega de trabajos, uso de herramientas de videoconferencia para sesiones síncronas, aplicaciones y plantillas digitales para recolección y análisis de datos (hojas de registro, formularios electrónicos), recursos multimedia (videos de modelado), software básico de análisis descriptivo y presentación (hojas de cálculo, presentaciones).", "actividades_de_aprendizaje_independientes": "Lectura crítica de artículos y guías basadas en evidencia; diseño y ajuste de planes de apoyo conductual; recolección y análisis de datos en contextos reales o simulados; reflexión y bitácora de práctica; realización de módulos en línea y preparación de presentaciones y del proyecto final.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Estrategias de apoyo conductual en el aula", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales teórico-prácticas; demostraciones y análisis de casos; sesiones de role-play y retroalimentación; supervisión de prácticas y talleres de diseño de planes de apoyo; seminarios de discusión y trabajo en equipo para elaboración y evaluación de intervenciones."}', '[{"temas": [{"nombre": "Principios básicos del comportamiento y aprendizaje", "horasEstimadas": 2}, {"nombre": "Modelos de intervención y evidencia científica", "horasEstimadas": 2}, {"nombre": "Rol del docente y enfoque centrado en la inclusión", "horasEstimadas": 2}], "titulo": "Fundamentos teóricos y marco conceptual", "unidad": 1}, {"temas": [{"nombre": "Identificación de conductas objetivo y definición operacional", "horasEstimadas": 3}, {"nombre": "Métodos de recolección de datos: ABC, registros y escalas", "horasEstimadas": 3}, {"nombre": "Introducción a la evaluación funcional y análisis funcional básico", "horasEstimadas": 2}], "titulo": "Evaluación funcional del comportamiento y recolección de datos", "unidad": 2}, {"temas": [{"nombre": "Principios del reforzamiento y programación de contingencias", "horasEstimadas": 3}, {"nombre": "Diseño e implementación de economías de fichas y sistemas de refuerzo", "horasEstimadas": 2}, {"nombre": "Reforzamiento diferencial y promoción de conductas alternativas", "horasEstimadas": 3}], "titulo": "Refuerzo positivo y sistemas de apoyo conductual", "unidad": 3}, {"temas": [{"nombre": "Adaptación del ambiente y prevención antecedente", "horasEstimadas": 3}, {"nombre": "Enseñanza de habilidades sociales, autocontrol y resolución de conflictos", "horasEstimadas": 3}, {"nombre": "Procedimientos de desescalada y manejo seguro en el aula", "horasEstimadas": 2}, {"nombre": "Estructuración de rutinas, señales y apoyos visuales", "horasEstimadas": 2}], "titulo": "Estrategias proactivas y enseñanza de habilidades socioemocionales", "unidad": 4}, {"temas": [{"nombre": "Implementación de planes de apoyo conductual y uso de datos para toma de decisiones", "horasEstimadas": 3}, {"nombre": "Trabajo colaborativo con familias y equipos multidisciplinarios", "horasEstimadas": 3}, {"nombre": "Ética, confidencialidad y sensibilidad cultural en intervenciones", "horasEstimadas": 2}], "titulo": "Implementación, monitoreo, colaboración y consideraciones éticas", "unidad": 5}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "responseId": "resp_0f3857d87134e3100069a21b8406088192b58695d7a6fa8d6f"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Intervenciones basadas en evidencia para manejo de conductas, refuerzo positivo y promoción de habilidades socioemocionales."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-02-27 22:32:34.959155+00', '2026-02-27 22:37:08.074937+00', 40, 60, 'borrador', '[]'), + ('b60bdb03-72d2-4ff7-9046-e4d1315077bb', 'f35bd838-6df7-4a3b-9fbf-879f9b3e6da9', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'LESE109', 'Práctica supervisada I: acompañamiento en aula', 'TRONCAL', 6, 2, '07a19d6f-a412-4993-b07d-4bc02b3d544a', NULL, '{"ciclo": "Séptimo ciclo (TRONCAL)", "clave_de_la_asignatura": "LESE109", "criterios_de_evaluacion": "1) Registros y fichas de observación (25%); 2) Evaluación del supervisor institucional (20%); 3) Portafolio de evidencias incluyendo registros y producciones (20%); 4) Informe reflexivo final y propuesta de mejora (20%); 5) Asistencia, cumplimiento de acuerdos y participación en sesiones de retroalimentación (15%).", "fines_de_aprendizaje_o_formacion": "Que el estudiante desarrolle competencias para acompañar prácticas docentes en aula mediante observación sistemática, registro riguroso de evidencias y diseño básico de micro-intervenciones, manteniendo postura ética y profesional; al concluir, el estudiante será capaz de documentar situaciones pedagógicas reales, analizar prácticas docentes con base en evidencias y formular propuestas de mejora coherentes con las necesidades observadas, contribuyendo al logro del perfil de egreso en formación docente.", "modalidades_tecnologicas_e_informaticas": "Uso de plataforma educativa (LMS) para entrega de evidencias y comunicación con el docente supervisor; aplicaciones móviles o tabletas para registro de observación (formularios, grabación de audio/video con consentimiento), hojas de cálculo para sistematización de datos, herramientas de edición de documentos y presentaciones, videoconferencia para sesiones de retroalimentación remotas y repositorio digital para el portafolio.", "actividades_de_aprendizaje_independientes": "Lectura de material teórico sobre observación y acompañamiento; análisis de videos de clases y práctica de registro; preparación de instrumentos y guías de observación; elaboración y revisión del portafolio; redacción del informe reflexivo; estudio de casos y planificación de micro-intervenciones; coordinación previa con docente tutor.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Práctica supervisada I: acompañamiento en aula", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Orientación inicial sobre protocolos y ética; demostración y práctica guiada de uso de instrumentos de observación; acompañamiento en salida a aula y supervisión en tiempo real de sesiones de sombra; sesiones de retroalimentación colectiva e individual con el supervisor; seguimiento y validación de micro-intervenciones; revisión y asesoría para la construcción del portafolio y el informe final."}', '[{"temas": [{"nombre": "Marco conceptual, ético y normativo del acompañamiento en aula", "horasEstimadas": 4}, {"nombre": "Instrumentos y protocolos de observación (fichas, listas de cotejo, rúbricas)", "horasEstimadas": 4}, {"nombre": "Planificación de sesiones de observación y acuerdos con el docente tutor", "horasEstimadas": 4}], "titulo": "Preparación para la práctica de acompañamiento", "unidad": 1}, {"temas": [{"nombre": "Observación libre y toma de registros descriptivos", "horasEstimadas": 8}, {"nombre": "Observación estructurada con listas de cotejo y registros cuantitativos", "horasEstimadas": 8}, {"nombre": "Análisis inicial de prácticas docentes a partir de evidencias", "horasEstimadas": 6}, {"nombre": "Relación, comunicación y postura profesional durante la sombra", "horasEstimadas": 6}], "titulo": "Observación dirigida en contextos reales (sombra)", "unidad": 2}, {"temas": [{"nombre": "Registro sistemático, categorización de evidencias y construcción de casos", "horasEstimadas": 8}, {"nombre": "Diseño de micro-intervenciones de apoyo: objetivos, estrategias y materiales", "horasEstimadas": 8}, {"nombre": "Ejecución supervisada de micro-intervenciones en aula", "horasEstimadas": 6}, {"nombre": "Adaptaciones didácticas y atención a la diversidad en la intervención", "horasEstimadas": 6}], "titulo": "Registros orientados a la intervención y micro-intervenciones", "unidad": 3}, {"temas": [{"nombre": "Sesiones estructuradas de retroalimentación con el docente tutor y supervisor", "horasEstimadas": 4}, {"nombre": "Reflexión crítica escrita y construcción del portafolio de evidencias", "horasEstimadas": 4}, {"nombre": "Evaluación final de la práctica y propuestas de mejora pedagógica", "horasEstimadas": 4}], "titulo": "Retroalimentación, reflexión profesional y cierre de práctica", "unidad": 4}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "responseId": "resp_06274b0d679474830069a21b866bac8195b44ba3ea7a235d09"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Práctica inicial de acompañamiento (sombra) en contextos reales con supervisión y registros orientados a la intervención."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-02-27 22:32:34.959155+00', '2026-02-27 22:36:22.395198+00', 80, 40, 'borrador', '[]'), + ('286c9e42-80df-4c3f-a786-9d1b424aa15f', 'dc286072-c649-43aa-8a2f-aa3ef6166647', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'QFB302', 'Instrumentación Analítica para Aromas (GC-MS y GC-O)', 'TRONCAL', 6, 5, '67cdbce0-04fe-4c19-aba9-c5999076c97c', NULL, '{"ciclo": "Ciclo II", "contenido_tematico": "1. Fundamentos de instrumentación analítica aplicada a aromas\\n1.1. Principios de cromatografía de gases (GC) y cromatografía acoplada a MS\\n1.2. Conceptos de separación, sensibilidad y selectividad\\n2. GC-MS: Instrumentación y operación\\n2.1. Componentes del GC y configuración de la fuente de ionización\\n2.2. Adquisición de datos y procesamiento de espectros\\n2.3. Interpretación básica de espectros y patrones de fragmentación\\n3. GC-Olfactometría (GC-O)\\n3.1. Principios y modalidades de GC-O\\n3.2. Configuración de nariz humana y/o sistemas de detección sensorial\\n4. Preparación de muestras para aromas\\n4.1. Técnicas de extracción y preconcentración (SPME, Headspace)\\n4.2. Consideraciones de matriz, volatilidad y estabilidad de compuestos\\n4.3. Controles, calibración y validación de métodos\\n5. Interpretación de espectros y bases de datos\\n5.1. Lectura de espectros de masas y búsqueda en bibliotecas (NIST, Wiley)\\n5.2. Aprobación de identidades y límites de incertidumbre\\n5.3. Enfoque de aroma-típico y coincidencia entre cromatografía y espectro\\n6. Aplicaciones en análisis de materias aromáticas\\n6.1. Análisis de fragancias, alimentos y bebidas\\n6.2. Correlación entre perfiles GC-MS y percepción sensorial\\n7. Buenas prácticas de laboratorio y seguridad\\n7.1. Seguridad química y manejo de sustancias peligrosas\\n7.2. Mantenimiento de equipos, calibración y gestión de residuos\\n8. Proyecto práctico y evaluación\\n8.1. Diseño de un método GC-MS/GC-O para un aroma objetivo\\n8.2. Informe técnico y presentación de resultados", "clave_de_la_asignatura": "QFB302", "criterios_de_evaluacion": "- Informe de prácticas de laboratorio y reporte: 40%\\n- Examen teórico: 25%\\n- Proyecto de interpretación de espectros y caso de aroma: 20%\\n- Participación, actividades y tareas cortas: 15%", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de diseñar y ejecutar procedimientos de GC-MS y GC-O para caracterizar compuestos aromáticos, preparar muestras adecuadas, interpretar espectros de masas y comparar con bibliotecas, aplicar las técnicas a análisis de materias aromáticas y comunicar los resultados de forma técnica y clara.", "modalidades_tecnologicas_e_informaticas": "- Equipo de GC-MS y GC-O en laboratorio.\\n- Software de adquisición y procesamiento de datos (MassHunter, Xcalibur, OpenChrom).\\n- Bibliotecas de espectros y bases de datos (NIST, Wiley).\\n- Plataforma de gestión de prácticas y reportes, recursos en línea y plataformas de aprendizaje.\\n- Equipos de seguridad y software de simulación educativa.", "actividades_de_aprendizaje_independientes": "- Lecturas dirigidas de capítulos y artículos sobre GC-MS, GC-O y análisis de aromas.\\n- Ejercicios de interpretación de espectros y búsquedas en bibliotecas de espectros.\\n- Análisis de casos de aromas y revisión de literatura científica.\\n- Preparación y entrega de informes de prácticas y un informe final.\\n- Práctica de diseño de método y validación de datos de manera autónoma.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Instrumentación Analítica para Aromas (GC-MS y GC-O)", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "- Sesiones prácticas supervisadas en el laboratorio con GC-MS y GC-O.\\n- Demostraciones de adquisición de datos y procedimientos de muestreo.\\n- Discusión de casos de aromas y resolución de problemas de interpretación.\\n- Tutorías para el diseño de método y revisión de informes.\\n- Control de calidad y evaluación formativa durante las prácticas."}', '[{"temas": [], "titulo": "Nueva Unidad", "unidad": 1}]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1082, "total_tokens": 6626, "output_tokens": 5544, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 4544}}, "responseId": "resp_0a984e2d4052d250006993a011ca8881a39c70ab1b3ef82da2", "conversationId": null}, "iaConfig": {"descripcionEnfoqueAcademico": "Teoría y práctica de GC-MS y GC-O, preparación de muestras, interpretación de espectros y aplicaciones en análisis de materias aromáticas."}, "generado_por": "ai_generate_subject_update_json"}', NULL, NULL, '2026-02-16 22:54:08.826761+00', '2026-03-04 14:43:00.036799+00', 3, 8, 'borrador', '[]'), + ('9a18baa6-0f17-4829-9f5d-faee712035d3', '198c763b-9d97-423b-b13a-5713437fc81b', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'LLSE-310', 'Estrategias de apoyo conductual y socioemocional para sombras', 'OBLIGATORIA', 6, NULL, NULL, NULL, '{"ciclo": "Ciclo 4", "clave_de_la_asignatura": "LLSE-310", "fines_de_aprendizaje_o_formacion": "Formar y aplicar estrategias preventivas y reactivas para apoyo conductual y socioemocional; desarrollar habilidades para intervención positiva; colaborar con docentes y familias para diseñar planes individuales de apoyo; promover entornos escolares seguros y fomentar el bienestar emocional de la comunidad educativa.", "modalidades_tecnologicas_e_informaticas": "La asignatura se imparte en modalidad presencial, con apoyos tecnológicos a través de un entorno de aprendizaje (LMS) para la entrega de materiales, foros de discusión y tareas. Se utilizan herramientas de colaboración (documentos compartidos, pizarras virtuales) y videoconferencias cuando se requiera apoyo remoto. Requisitos: acceso a ordenador o dispositivo móvil y conectividad; instalación de herramientas básicas de ofimática y gestión de archivos.", "actividades_de_aprendizaje_independientes": "Lecturas de fundamentos y casos, análisis crítico de situaciones de aula, elaboración de un plan de intervención conductual y socioemocional para un caso hipotético, registro de progreso y reflexión personal sobre prácticas y resultados. Horas independientes sugeridas: 72.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Estrategias de apoyo conductual y socioemocional para sombras", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Durante las sesiones se realizarán actividades guiadas por el académico, como clases magistrales breves, talleres prácticos, simulaciones de escenarios en aula, observaciones de prácticas reales, revisión de casos y elaboración de planes de intervención, con retroalimentación continua para asegurar la correcta aplicación de estrategias."}', '[{"temas": [{"nombre": "Introducción al apoyo conductual y socioemocional", "horasEstimadas": 6}, {"nombre": "Fundamentos teóricos de intervención positiva", "horasEstimadas": 4}, {"nombre": "Rol de docentes, familias y personal de apoyo", "horasEstimadas": 2}], "titulo": "Fundamentos y marco conceptual", "unidad": 1}, {"temas": [{"nombre": "Diseño de entornos seguros y rutinas positivas", "horasEstimadas": 6}, {"nombre": "Programas de enseñanza de habilidades socioemocionales", "horasEstimadas": 6}, {"nombre": "Monitoreo y registro de progreso", "horasEstimadas": 4}], "titulo": "Estrategias preventivas y promoción del bienestar", "unidad": 2}, {"temas": [{"nombre": "Protocolos de intervención positiva y respuestas conductuales consistentes", "horasEstimadas": 8}, {"nombre": "Técnicas de desescalamiento y manejo de crisis", "horasEstimadas": 6}, {"nombre": "Colaboración con docentes y familias: coordinación, planes de apoyo individualizados", "horasEstimadas": 6}], "titulo": "Intervención reactiva, protocolos y colaboración", "unidad": 3}]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "responseId": "resp_000dce1fec8dbc460069ab1870e4c481a19345ceb046c9c069"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Formular e implementar estrategias preventivas y reactivas para apoyo conductual y socioemocional, técnicas de intervención positiva y protocolos de colaboración con docentes y familias."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-03-06 18:09:51.316484+00', '2026-03-06 18:25:47.848683+00', 48, 72, 'borrador', '[{"criterio": "Participación y asistencia en las sesiones", "porcentaje": 20}, {"criterio": "Tareas y prácticas de intervención aplicadas", "porcentaje": 20}, {"criterio": "Proyecto de intervención conductual y socioemocional", "porcentaje": 40}, {"criterio": "Examen teórico-lógico sobre fundamentos y marcos", "porcentaje": 20}]'), + ('d977175f-e22b-4b1e-b0ed-3d6f048b7929', '26806567-c5ee-404e-8f90-0f0711c21ea0', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'ALF-1', 'Alfabetización digital', 'OBLIGATORIA', 1, 1, NULL, NULL, '{"ciclo": "Ciclo I", "contenido_tematico": "1. Fundamentos de alfabetización digital en el ámbito jurídico; 1.1 Competencias digitales para profesionales del derecho; 1.2 Ética, seguridad y privacidad en entornos digitales legales; 2. Tecnologías aplicadas al derecho; 2.1 Gestión documental y evidencias digitales en procesos judiciales; 2.2 Búsqueda y recuperación de información jurídica con herramientas tecnológicas; 2.3 Firma digital, autenticación y certificaciones en contratos y evidencias; 3. Análisis de datos y jurisprudencia con tecnologías; 3.1 Herramientas de análisis de jurisprudencia y revisión de sentencias; 3.2 Inteligencia artificial y su uso en asesoría e investigación legal: beneficios, límites y consideraciones éticas; 4. Gobernanza de datos y cumplimiento normativo en tecnología legal; 4.1 Protección de datos personales y cumplimiento normativo (p. ej., RGPD); 4.2 Propiedad intelectual y licenciamiento de software legal tech; 5. Prácticas y proyectos de alfabetización digital en escenarios legales; 5.1 Estudio de caso, simulación y proyecto aplicado.", "clave_de_la_asignatura": "ALF-1", "criterios_de_evaluacion": "1) Participación activa en debates y ejercicios (10%). 2) Trabajo práctico con herramientas de derecho tecnológico (40%). 3) Ensayo analítico sobre un caso que involucra tecnología en derecho (20%). 4) Examen o proyecto final que demuestre integración de contenidos (30%).", "fines_de_aprendizaje_o_formacion": "Que el estudiante sea capaz de identificar y usar tecnologías relevantes para la práctica legal (gestión documental, búsquedas jurídicas, firma digital); aplicar criterios de ética y protección de datos en entornos digitales; analizar información jurídica mediante herramientas tecnológicas y elaborar un informe crítico; colaborar y comunicar resultados en equipos con tecnologías legales.", "modalidades_tecnologicas_e_informaticas": "Se utilizarán plataformas de gestión de aprendizaje (LMS), software de gestión documental y evidencia digital, herramientas de búsqueda jurídica, bases de datos legales, software de firma digital, herramientas de análisis de jurisprudencia y IA legal, entornos de colaboración y entornos seguros para manejo de datos. Para modalidades no escolarizada o mixta, se requerirá acceso a estas herramientas en línea.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas sobre fundamentos de alfabetización digital en derecho. Ejercicios prácticos independientes con gestión de documentos legales, búsqueda y análisis de jurisprudencia, ejercicios de firma digital y protección de datos. Desarrollo de un mini-proyecto: selección de una temática jurídica y aplicación de herramientas tecnológicas para elaborar un informe.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Alfabetización digital", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales con ejemplos de casos; talleres prácticos guiados para usar herramientas legales; análisis de casos con evidencia digital; supervisión de proyectos prácticos para aplicar tecnologías legales; revisión y retroalimentación de informes."}', '[{"temas": [{"nombre": "Competencias digitales para profesionales del derecho2", "horasEstimadas": 0}, {"nombre": "Ética, seguridad y privacidad en entornos digitales legales", "horasEstimadas": 0}], "titulo": "Fundamentos de alfabetización digital en el ámbito jurídico", "unidad": 1}, {"temas": [{"nombre": "Gestión documental y evidencias digitales en procesos judiciales", "horasEstimadas": 0}, {"nombre": "Búsqueda y recuperación de información jurídica con herramientas tecnológicas", "horasEstimadas": 0}, {"nombre": "Firma digital, autenticación y certificaciones en contratos y evidencias", "horasEstimadas": 0}], "titulo": "Tecnologías aplicadas al derecho", "unidad": 2}, {"temas": [{"nombre": "Herramientas de análisis de jurisprudencia y revisión de sentencias", "horasEstimadas": 0}, {"nombre": "Inteligencia artificial en asesoría e investigación legal: beneficios, límites y consideraciones éticas", "horasEstimadas": 0}], "titulo": "Análisis de datos y jurisprudencia con tecnologías", "unidad": 3}, {"temas": [{"nombre": "Protección de datos personales y cumplimiento normativo (RGPD y marcos similares)", "horasEstimadas": 0}, {"nombre": "Propiedad intelectual y licenciamiento de software LegalTech", "horasEstimadas": 0}], "titulo": "Gobernanza de datos y cumplimiento normativo en tecnología legal", "unidad": 4}, {"temas": [{"nombre": "Estudio de caso", "horasEstimadas": 0}, {"nombre": "Simulación", "horasEstimadas": 0}, {"nombre": "Proyecto aplicado", "horasEstimadas": 0}], "titulo": "Prácticas y proyectos de alfabetización digital en escenarios legales", "unidad": 5}]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "usage": {"input_tokens": 1090, "total_tokens": 6246, "output_tokens": 5156, "input_tokens_details": {"cached_tokens": 0}, "output_tokens_details": {"reasoning_tokens": 4480}}, "responseId": "resp_0095394ec2fcf063006989fc59494481979355b718b88f0614", "conversationId": null}, "iaConfig": {"instruccionesAdicionalesIA": "No sea de computación sino de tecnologías relacionadas con el derecho.", "descripcionEnfoqueAcademico": "Asignatura acerca de tecnología aplicada al derecho."}, "referencias": {"archivosReferenciaIds": [], "repositoriosReferencia": []}, "generado_por": "ai_generate_subject"}', NULL, NULL, '2026-02-09 15:25:53.89902+00', '2026-03-04 17:09:22.271812+00', NULL, NULL, 'borrador', '[]'), + ('7ea81d9d-df61-407f-afa5-76ca14d91029', 'f35bd838-6df7-4a3b-9fbf-879f9b3e6da9', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'LESE108', 'Tecnologías y recursos educativos accesibles', 'OPTATIVA', 4, 1, '07a19d6f-a412-4993-b07d-4bc02b3d544a', NULL, '{"ciclo": "Optativa", "clave_de_la_asignatura": "LESE108", "criterios_de_evaluacion": "Actividades en clase y participación activa: 15%; Tareas prácticas y adaptaciones de materiales: 25%; Proyecto integrador de recurso accesible: 30%; Evaluación teórica (conceptos y normas): 15%; Portafolio de evidencias y autocorrección: 15%. (Total 100%)", "fines_de_aprendizaje_o_formacion": "Al concluir la asignatura, el estudiante será capaz de identificar y aplicar principios y normas de accesibilidad digital, seleccionar y usar tecnologías asistivas, adaptar y producir materiales educativos accesibles y diseñar recursos que fomenten la autonomía del estudiantado. Contribuye a formar profesionales capaces de integrar prácticas inclusivas en entornos de enseñanza y aprendizaje, garantizando equidad y cumplimiento de estándares técnicos y pedagógicos.", "modalidades_tecnologicas_e_informaticas": "Se emplearán plataformas LMS (Moodle, Canvas), editores de texto y presentaciones (Word, PowerPoint, Google Docs/Slides), herramientas de autoría (H5P, SCORM), software de accesibilidad y lectores de pantalla (NVDA, VoiceOver), herramientas de subtitulado y transcripción automática (Amara, YouTube, auto-caption), validadores y auditorías de accesibilidad (WAVE, axe), herramientas de edición multimedia (Audacity, OBS, editores de video) y entornos de colaboración en línea (Google Workspace, Teams). Se recomienda acceso a navegadores actualizados y a dispositivos con capacidades de lectura de pantalla para actividades prácticas.", "actividades_de_aprendizaje_independientes": "Lecturas sobre normativa y principios de accesibilidad; tutoriales y prácticas con lectores de pantalla y herramientas de subtitulado; adaptación de documentos y presentaciones; creación de un recurso multimedia accesible; pruebas con usuarios o pares y recolección de retroalimentación; preparación del proyecto integrador y portafolio de evidencias. Estimular la autoevaluación y el aprendizaje basado en la resolución de casos reales.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Tecnologías y recursos educativos accesibles", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases magistrales sobre normativa y pedagogía; demostraciones en vivo de tecnologías asistivas; talleres prácticos guiados para adaptar documentos y producir multimedia accesible; sesiones de laboratorio para evaluar accesibilidad con herramientas automatizadas y pruebas manuales; dinámicas de trabajo colaborativo y revisión por pares; asesoría y seguimiento del proyecto integrador; retroalimentación formativa continua."}', '[{"temas": [{"nombre": "Principios básicos de accesibilidad e inclusión", "horasEstimadas": 2}, {"nombre": "Normativa, estándares y pautas (WCAG, eIDAS, legislación educativa)", "horasEstimadas": 3}, {"nombre": "Impacto pedagógico y Diseño Universal para el Aprendizaje (DUA)", "horasEstimadas": 3}], "titulo": "Fundamentos de accesibilidad en educación digital", "unidad": 1}, {"temas": [{"nombre": "Lectores de pantalla y tecnologías asistivas", "horasEstimadas": 3}, {"nombre": "Herramientas de subtitulado, transcripción y audiodescripción", "horasEstimadas": 3}, {"nombre": "Extensiones y software de personalización de la interfaz (contraste, tamaño, navegación)", "horasEstimadas": 2}], "titulo": "Herramientas y tecnologías de apoyo", "unidad": 2}, {"temas": [{"nombre": "Diseño y edición de documentos accesibles (PDF, Word, PowerPoint)", "horasEstimadas": 4}, {"nombre": "Creación de contenidos multimedia accesibles (video, audio, imágenes)", "horasEstimadas": 2}, {"nombre": "Recursos interactivos y evaluaciones accesibles (H5P, SCORM, cuestionarios)", "horasEstimadas": 2}], "titulo": "Adaptación y producción de recursos accesibles", "unidad": 3}, {"temas": [{"nombre": "Evaluación de accesibilidad: auditorías, pruebas de usuario y herramientas automatizadas", "horasEstimadas": 3}, {"nombre": "Estrategias institucionales para la implementación y difusión de buenas prácticas", "horasEstimadas": 3}, {"nombre": "Proyecto integrador: diseño y entrega de un recurso educativo accesible", "horasEstimadas": 2}], "titulo": "Implementación, evaluación y proyecto final", "unidad": 4}]', 'IA', '{"ai": {"model": "gpt-5-mini-2025-08-07", "responseId": "resp_04c9a0ab7c5b3ab00069a21b84410481a1b3ca9c672c24bf1e"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Uso de herramientas y recursos digitales accesibles para adaptar materiales y promover la autonomía del estudiante."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-02-27 22:32:34.959155+00', '2026-03-04 23:37:18.185461+00', 32, 48, 'borrador', '[{"criterio": "asdf", "porcentaje": 2}]'), + ('06fcfb59-876e-42bc-b120-4c0ec118e0f5', 'f35bd838-6df7-4a3b-9fbf-879f9b3e6da9', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'LESE111', 'Mediación y co-enseñanza en contextos inclusivos', 'OBLIGATORIA', 4, NULL, NULL, NULL, '{"ciclo": "Ciclo II", "clave_de_la_asignatura": "LESE111", "fines_de_aprendizaje_o_formacion": "Al finalizar la asignatura, el estudiante será capaz de identificar fundamentos y herramientas de mediación y co-enseñanza en contextos inclusivos, diseñar, implementar y evaluar sesiones co-enseñadas, y colaborar de forma efectiva con docentes titulares y sombras para favorecer la inclusión y el aprendizaje de toda la diversidad del alumnado.", "modalidades_tecnologicas_e_informaticas": "La asignatura se imparte en modalidad presencial con apoyo de plataforma digital (LMS) para difusión de materiales, tareas, foros y evaluación. En formatos no presenciales o híbridos se utilizarán videoconferencias, repositorio de materiales, foros asincrónicos y herramientas de colaboración en la nube.", "actividades_de_aprendizaje_independientes": "Lecturas y revisión de literatura sobre mediación, co-enseñanza e inclusión; análisis de casos y vídeos; diseño de una sesión co-enseñada y elaboración de un portafolio de evidencias; reflexión crítica y autoevaluación.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Mediación y co-enseñanza en contextos inclusivos", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Conducción de sesiones teóricas breves, talleres prácticos, simulacros de mediación y co-enseñanza, revisión de trabajos y feedback formativo, observación de prácticas en aula y discusión guiada de estrategias de mejora."}', '[{"temas": [{"nombre": "Definición y alcance de la mediación educativa", "horasEstimadas": 4}, {"nombre": "Principios de educación inclusiva y equidad", "horasEstimadas": 4}, {"nombre": "Roles y responsabilidades del docente titular y de la sombra en contextos de aula", "horasEstimadas": 4}], "titulo": "Fundamentos de mediación y co-enseñanza", "unidad": 1}, {"temas": [{"nombre": "Habilidades de comunicación en mediación: escucha activa y reformulación", "horasEstimadas": 4}, {"nombre": "Gestión de conflictos y técnicas de resolución en el aula", "horasEstimadas": 4}, {"nombre": "Diseño de sesiones co-enseñadas y actividades inclusivas", "horasEstimadas": 4}], "titulo": "Herramientas de mediación y colaboración", "unidad": 2}, {"temas": [{"nombre": "Planificación de lecciones con co-enseñanza", "horasEstimadas": 4}, {"nombre": "Adaptaciones y apoyos para la diversidad del alumnado", "horasEstimadas": 4}, {"nombre": "Evaluación formativa en contextos inclusivos", "horasEstimadas": 4}], "titulo": "Diseño y gestión de sesiones inclusivas", "unidad": 3}, {"temas": [{"nombre": "Prácticas de mediación en escenario real de aula con sombra", "horasEstimadas": 4}, {"nombre": "Diseño y evaluación de una sesión de co-enseñanza", "horasEstimadas": 4}, {"nombre": "Reflexión, retroalimentación y mejora continua", "horasEstimadas": 4}], "titulo": "Implementación y evaluación de prácticas de mediación", "unidad": 4}]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "responseId": "resp_0f5a9cd43b3e5d460069a8c2b5313c819eb628eaf0c60869c0"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Herramientas y estrategias para la mediación, co-enseñanza y colaboración efectiva entre docente titular y sombra en aulas inclusivas."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-03-04 23:39:31.48737+00', '2026-03-04 23:40:32.281442+00', 48, 32, 'borrador', '[{"criterio": "Participación y desempeño en las actividades de mediación y co-enseñanza", "porcentaje": 25}, {"criterio": "Diseño y planificación de sesiones co-enseñadas en contextos inclusivos", "porcentaje": 25}, {"criterio": "Ejecución y análisis de una sesión de co-enseñanza con evidencia de reflexión", "porcentaje": 25}, {"criterio": "Portafolio de evidencias y reflexión sobre prácticas de mediación y mejora continua", "porcentaje": 25}]'), + ('cbdf9381-a087-4fa1-9465-d3e76f78f275', 'f35bd838-6df7-4a3b-9fbf-879f9b3e6da9', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'LESE112', 'Comunicación aumentativa y alternativa', 'OBLIGATORIA', 4, NULL, NULL, NULL, '{"ciclo": "Ciclo II", "clave_de_la_asignatura": "LESE112", "fines_de_aprendizaje_o_formacion": "Capacitar al estudiantado para evaluar, seleccionar e implementar sistemas de comunicación aumentativa y alternativa (AAC), con foco en favorecer interacción, participación curricular y acceso a contenidos; desarrollar competencias para adaptar herramientas AAC a contextos educativos y necesidades individuales, y promover prácticas éticas y colaborativas entre equipos docentes, familias y especialistas.", "modalidades_tecnologicas_e_informaticas": "Se emplearán plataformas de gestión del aprendizaje (LMS) para materiales y evaluación, herramientas de autoría y diseño de AAC (pictogramas, tableros, software de comunicación), dispositivos de salida/entrada y simuladores; se prioriza accesibilidad, compatibilidad de dispositivos y protección de datos; para modalidades no escolarizadas o mixtas, se utilizarán videoconferencias, entornos virtuales y recursos en la nube.", "actividades_de_aprendizaje_independientes": "Lecturas dirigidas sobre fundamentos de AAC; análisis de casos y comparación de sistemas; elaboración de un informe de selección de un sistema para un caso hipotético; prácticas de simulación en casa con recursos de bajo costo; reflexión crítica y diario de aprendizaje sobre experiencias con AAC.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Comunicación aumentativa y alternativa", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases expositivas breves para sala de teoría; talleres prácticos supervisados para la exploración y selección de sistemas AAC; sesiones de simulación con casos y role-playing; prácticas de observación en entornos educativos; retroalimentación y discusión guiada por el docente."}', '[{"temas": [{"nombre": "Definición y alcance de la AAC", "horasEstimadas": 4}, {"nombre": "Evaluación de necesidades comunicativas", "horasEstimadas": 4}, {"nombre": "Modelos y marcos teóricos de la AAC", "horasEstimadas": 4}], "titulo": "Fundamentos de la Comunicación Aumentativa y Alternativa (AAC)", "unidad": 1}, {"temas": [{"nombre": "Sistemas de símbolos y pictogramas", "horasEstimadas": 4}, {"nombre": "Tecnologías de acceso: controladores, interfaces y dispositivos", "horasEstimadas": 4}, {"nombre": "Sistemas de baja tecnología y no tecnológica", "horasEstimadas": 4}, {"nombre": "Sistemas de alta tecnología y software de comunicación", "horasEstimadas": 4}, {"nombre": "Criterios de selección y adecuación del sistema", "horasEstimadas": 4}], "titulo": "Sistemas AAC y tecnologías", "unidad": 2}, {"temas": [{"nombre": "Planificación de implementación en aula", "horasEstimadas": 4}, {"nombre": "Evaluación formativa y sumativa del uso de AAC", "horasEstimadas": 4}, {"nombre": "Colaboración con familias y equipos multiprofesionales", "horasEstimadas": 4}, {"nombre": "Mantenimiento y actualización de sistemas", "horasEstimadas": 4}], "titulo": "Implementación, evaluación y acceso curricular", "unidad": 3}]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "responseId": "resp_07ee891a26859f000069a8c3e2b1288195a1c19fa2bd01b879"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Capacitar en evaluación, selección e implementación de sistemas de comunicación alternativa y aumentativa para favorecer interacción y acceso curricular de estudiantes con dificultades comunicativas."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-03-04 23:44:32.47023+00', '2026-03-04 23:46:26.716488+00', 48, 64, 'borrador', '[{"criterio": "Portafolio y registro de uso de AAC", "porcentaje": 25}, {"criterio": "Caso de selección y justificación de un sistema AAC", "porcentaje": 20}, {"criterio": "Examen teórico de fundamentos de AAC", "porcentaje": 15}, {"criterio": "Práctica de selección de sistema AAC en simulación", "porcentaje": 20}, {"criterio": "Participación, reflexión crítica y ética profesional", "porcentaje": 20}]'), + ('291d7b5c-beea-494d-b94b-9a37f75fbcc6', '198c763b-9d97-423b-b13a-5713437fc81b', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'LLSE-302', 'Diseño Universal para el Aprendizaje y materiales accesibles', 'TRONCAL', 4, NULL, NULL, NULL, '{"ciclo": "Ciclo 3", "clave_de_la_asignatura": "LLSE-302", "fines_de_aprendizaje_o_formacion": "Aplicar los principios del Diseño Universal para el Aprendizaje (DUA) para crear y adaptar materiales didácticos accesibles que favorezcan la participación y autonomía de estudiantes con necesidades educativas, integrando buenas prácticas de accesibilidad, evaluación formativa y herramientas de apoyo.", "modalidades_tecnologicas_e_informaticas": "Se utilizarán plataformas y herramientas de gestión del aprendizaje (LMS), herramientas de autoría accesible y diseño inclusivo, lectores de pantalla (NVDA, JAWS), navegadores en modos de alto contraste, subtitulación y transcripción, verificación de accesibilidad (WAVE, axe-core) y herramientas de creación de materiales accesibles (texto claro, estructuras semánticas, descripciones de imágenes). Se contemplan entornos presenciales, mixtos o no escolares, con apoyo de tecnología para la inclusión.", "actividades_de_aprendizaje_independientes": "Actividades de aprendizaje independientes incluyen revisión de literatura, estudio de casos, análisis de normativas de accesibilidad y diseño, diseño de materiales prototipo, realización de auditorías de accesibilidad y desarrollo de guías de buenas prácticas. Estas actividades suman aproximadamente 64 horas de trabajo autónomo y complementan las 48 horas de aula.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Diseño Universal para el Aprendizaje y materiales accesibles", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Durante las horas de conducción académica, se realizarán clases magistrales, análisis de casos, talleres prácticos, revisión de proyectos de diseño, asesoría individual y en grupo, y actividades de retroalimentación orientadas a lograr la aplicación de DUA en la creación de materiales accesibles."}', '[{"temas": [{"nombre": "Fundamentos del DUA y principios clave para la enseñanza inclusiva", "horasEstimadas": 6}, {"nombre": "Marco legal, estándares y principios de accesibilidad educativa", "horasEstimadas": 6}], "titulo": "Fundamentos y marco del Diseño Universal para el Aprendizaje (DUA) y accesibilidad", "unidad": 1}, {"temas": [{"nombre": "Diseño de contenidos accesibles: claridad, lenguaje inclusivo y estructuras", "horasEstimadas": 8}, {"nombre": "Estrategias de mediación y uso de medios múltiples (texto, audio, video, imágenes)", "horasEstimadas": 6}, {"nombre": "Evaluaciones y retroalimentación accesibles", "horasEstimadas": 4}], "titulo": "Diseño de materiales didácticos accesibles y estrategias de mediación", "unidad": 2}, {"temas": [{"nombre": "Herramientas y tecnologías de apoyo (lectores de pantalla, subtítulos, etc.)", "horasEstimadas": 8}, {"nombre": "Pruebas de accesibilidad y validación con usuarios", "horasEstimadas": 6}, {"nombre": "Plan de implementación institucional y gestión del cambio", "horasEstimadas": 4}], "titulo": "Implementación, validación y herramientas de apoyo para la accesibilidad", "unidad": 3}]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "responseId": "resp_045f8adc23bcf09e0069ab168dec0c81a39d8728e8fb8c9d33"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Aplicación del DUA para crear y adaptar materiales didácticos accesibles que favorezcan la participación y autonomía de estudiantes con necesidades educativas."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-03-06 18:01:48.558777+00', '2026-03-06 18:33:42.718361+00', 48, 64, 'borrador', '[{"criterio": "Participación y asistencia en sesiones teóricas y prácticas", "porcentaje": 20}, {"criterio": "Actividades de aprendizaje independientes y entregables", "porcentaje": 25}, {"criterio": "Proyecto o diseño de materiales accesibles y su portfolio de evidencias", "porcentaje": 40}, {"criterio": "Portafolio de evidencias, reflexiones y autoevaluación", "porcentaje": 15}]'), + ('29a1ac0d-6ed6-49af-9fbc-03ee96b16b4b', '198c763b-9d97-423b-b13a-5713437fc81b', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'LLSE-307', 'Comunicación aumentativa y alternativa para apoyo en aula', 'OBLIGATORIA', 6, NULL, NULL, NULL, '{"ciclo": "Ciclo 2", "clave_de_la_asignatura": "LLSE-307", "fines_de_aprendizaje_o_formacion": "Introducción a sistemas y estrategias de Comunicación Aumentativa y Alternativa (CAA): evaluación, selección de recursos y aplicación en aula para fomentar participación y autonomía del estudiante.", "modalidades_tecnologicas_e_informaticas": "Plataformas de gestión del aprendizaje (LMS), herramientas de CAA (aplicaciones, pictogramas), dispositivos de apoyo y recursos multimedia para enseñanza en aula. Para modalidades no escolarizada o mixta, se deben seleccionar plataformas y recursos compatibles.", "actividades_de_aprendizaje_independientes": "Lecturas, estudio de casos, desarrollo de materiales, diseño de intervenciones, revisión de bibliografía y reflexiones críticas, con un total estimado de 32 horas de aprendizaje independiente.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Comunicación aumentativa y alternativa para apoyo en aula", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Clases teóricas y prácticas supervisadas, talleres guiados, tutorías para el diseño y implementación de estrategias de CAA, y evaluaciones formativas durante las sesiones."}', '[{"temas": [{"nombre": "Definiciones y conceptos clave", "horasEstimadas": 4}, {"nombre": "Evaluación inicial y perfiles de comunicación", "horasEstimadas": 4}, {"nombre": "Modelos de comunicación y participación en contexto escolar", "horasEstimadas": 4}], "titulo": "Fundamentos de CAA y evaluación inicial", "unidad": 1}, {"temas": [{"nombre": "Representaciones y sistemas alternativos de comunicación", "horasEstimadas": 6}, {"nombre": "Dispositivos de asistencia y herramientas de apoyo", "horasEstimadas": 6}, {"nombre": "Selección de recursos para el aula y adaptación didáctica", "horasEstimadas": 6}], "titulo": "Estrategias, recursos y dispositivos de apoyo", "unidad": 2}, {"temas": [{"nombre": "Planificación de intervenciones en el aula", "horasEstimadas": 6}, {"nombre": "Implementación, monitoreo y ajuste pedagógico", "horasEstimadas": 6}, {"nombre": "Evaluación de impacto y sostenibilidad de la CAA", "horasEstimadas": 6}], "titulo": "Aplicación en el aula, intervención y evaluación", "unidad": 3}]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "responseId": "resp_0126e1be2e708bf00069ab1afd3d408190bb163ac9a0b1ea28"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Introducción a sistemas y estrategias de Comunicación Aumentativa y Alternativa (CAA): evaluación, selección de recursos y aplicación en aula para fomentar participación y autonomía del estudiante."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-03-06 18:20:44.192163+00', '2026-03-06 18:21:23.172236+00', 48, 32, 'borrador', '[{"criterio": "Participación y asistencia en clase", "porcentaje": 15}, {"criterio": "Evaluación de conocimientos teóricos (cuestionarios)", "porcentaje": 25}, {"criterio": "Diseño y aplicación de una intervención CAA en aula (proyecto)", "porcentaje": 30}, {"criterio": "Evidencia de reflexión y portafolio (diario de aprendizaje)", "porcentaje": 20}, {"criterio": "Examen final o prueba práctica", "porcentaje": 10}]'), + ('cf5979f3-b49c-42df-8dca-dfb9754110d2', '198c763b-9d97-423b-b13a-5713437fc81b', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'LLSE-301', 'Mediación y acompañamiento como sombra', 'OBLIGATORIA', 6, NULL, NULL, NULL, '{"ciclo": "Ciclo II", "clave_de_la_asignatura": "LLSE-301", "fines_de_aprendizaje_o_formacion": "Formar y capacitar al estudiantado para formular y aplicar estrategias de mediación y apoyo individual en aula regular; técnicas de observación, comunicación con docentes y familias y registro para adaptar el currículo.", "modalidades_tecnologicas_e_informaticas": "Describir los recursos tecnológicos e informáticos que se emplearán para el desarrollo del proceso de enseñanza-aprendizaje: plataforma LMS, herramientas de videoconferencia, software de registro de observaciones, plantillas digitales para plan de mediación, y repositorio de recursos.", "actividades_de_aprendizaje_independientes": "Lecturas estratégicas; análisis de casos; revisión de literatura de mediación educativa; diario de mediación de 64 horas de aprendizaje independiente; elaboración de un portafolio de estrategias de mediación.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Mediación y acompañamiento como sombra", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "En el tiempo de clase, se realizarán exposiciones, talleres prácticos, simulaciones de mediación, análisis de casos y sesiones de observación guiada en aula o simuladores; el académico guiará la selección de casos, el registro de observaciones y la reflexión crítica."}', '[{"temas": [{"nombre": "Definiciones y principios de mediación educativa", "horasEstimadas": 4}, {"nombre": "Rol del mediador y del acompañante en el aula", "horasEstimadas": 4}, {"nombre": "Observación y registro de interacciones en el aula", "horasEstimadas": 4}], "titulo": "Fundamentos de la mediación educativa", "unidad": 1}, {"temas": [{"nombre": "Estrategias de comunicación y manejo de conflictos", "horasEstimadas": 4}, {"nombre": "Colaboración con docentes y familias", "horasEstimadas": 4}, {"nombre": "Diseño de apoyos curriculares y adaptaciones", "horasEstimadas": 4}], "titulo": "Estrategias de mediación y acompañamiento en aula regular", "unidad": 2}, {"temas": [{"nombre": "Registro y seguimiento de intervenciones", "horasEstimadas": 4}, {"nombre": "Ética, privacidad y confidencialidad", "horasEstimadas": 4}, {"nombre": "Evaluación de impacto y ajuste curricular", "horasEstimadas": 4}], "titulo": "Registro, evaluación y ética profesional", "unidad": 3}, {"temas": [{"nombre": "Diseño de plan de mediación para un caso", "horasEstimadas": 4}, {"nombre": "Implementación de la mediación: observación y ajuste", "horasEstimadas": 4}, {"nombre": "Análisis de resultados y reporte final", "horasEstimadas": 4}], "titulo": "Aplicación práctica de mediación en el aula", "unidad": 4}]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "responseId": "resp_0118fe00f4b84d210069ab156da2e08197a285a011650200be"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Formular y aplicar estrategias de mediación y apoyo individual en aula regular; técnicas de observación, comunicación con docentes y familias y registro para adaptar el currículo."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-03-06 17:56:59.973104+00', '2026-03-06 18:29:07.062514+00', 48, 64, 'borrador', '[{"criterio": "Participación y asistencia en las sesiones de mediación y acompañamiento", "porcentaje": 25}, {"criterio": "Análisis de casos y registro de observación", "porcentaje": 25}, {"criterio": "Diseño e implementación de un plan de mediación", "porcentaje": 30}, {"criterio": "Reflexiones críticas y portafolio de aprendizaje independiente", "porcentaje": 20}]'), + ('626d1fab-1056-4a1f-8861-a93cea5fbdd3', '198c763b-9d97-423b-b13a-5713437fc81b', '7856e9cc-9ac1-4a31-b93a-0624d4c5e1de', 'LLSE-305', 'Colaboración familia-escuela para intervención inclusiva', 'OBLIGATORIA', 6, NULL, NULL, NULL, '{"ciclo": "Ciclo 3", "clave_de_la_asignatura": "LLSE-305", "fines_de_aprendizaje_o_formacion": "Capacita para coordinar con familias y docentes la co-construcción de planes de apoyo, facilitar comunicación efectiva y seguimiento del progreso del estudiante en contextos escolares inclusivos, promoviendo la participación y el aprendizaje equitativo.", "modalidades_tecnologicas_e_informaticas": "Se emplearán plataformas de gestión de aprendizaje (LMS) para materiales y foros, videoconferencias síncronas (Zoom/Teams) para reuniones con familias y docentes, herramientas colaborativas (Google Workspace o Microsoft 365) para co-diseño de planes, y formatos accesibles (lectura fácil, PDF y documentos editables).", "actividades_de_aprendizaje_independientes": "Lecturas guiadas y revisión de documentos de casos reales; análisis de estudios de caso; elaboración de un plan de intervención hipotético en formato colaborativo; revisión y reflexión de videos o material interactivo; participación asíncrona en foros y entrega de evidencias.", "denominacion_de_la_asignatura_o_unidad_de_aprendizaje": "Colaboración familia-escuela para intervención inclusiva", "actividades_de_aprendizaje_bajo_conduccion_de_un_academico": "Sesiones presenciales o virtuales con el docente para discusión de casos, talleres de co-diseño de planes de apoyo con familias, simulaciones de reuniones de coordinación, retroalimentación y evaluación de avances en proyectos de intervención, y revisión de artefactos (plan de apoyo)."}', '[{"temas": [{"nombre": "Modelo de intervención inclusiva", "horasEstimadas": 6}, {"nombre": "Roles de actores educativos y familiares", "horasEstimadas": 5}, {"nombre": "Comunicación efectiva y construcción de alianzas", "horasEstimadas": 7}], "titulo": "Fundamentos de la colaboración familia-escuela para intervención inclusiva", "unidad": 1}, {"temas": [{"nombre": "Diagnóstico de necesidades y metas de aprendizaje", "horasEstimadas": 6}, {"nombre": "Co-diseño de planes de apoyo con familias", "horasEstimadas": 6}, {"nombre": "Implementación y seguimiento de planes", "horasEstimadas": 6}], "titulo": "Diseño y seguimiento de planes de apoyo", "unidad": 2}, {"temas": [{"nombre": "Instrumentos de registro y monitoreo del progreso", "horasEstimadas": 4}, {"nombre": "Privacidad, consentimiento y ética profesional", "horasEstimadas": 4}, {"nombre": "Casos prácticos y resolución de conflictos", "horasEstimadas": 4}], "titulo": "Herramientas, evaluación y ética", "unidad": 3}]', 'IA', '{"ai": {"model": "gpt-5-nano-2025-08-07", "responseId": "resp_068e7f488c6be0570069ab19dfc3288197ac60ce5175c6f481"}, "iaConfig": {"archivosAdjuntos": [], "instruccionesAdicionalesIA": "", "descripcionEnfoqueAcademico": "Capacita para coordinar con familias y docentes la co‑construcción de planes de apoyo, comunicación efectiva y seguimiento del progreso del estudiante en contextos escolares inclusivos."}, "generado_por": "ai_generate_subject_unified"}', NULL, NULL, '2026-03-06 18:15:58.752831+00', '2026-03-10 13:24:52.84053+00', 48, 72, 'borrador', '[{"criterio": "Participación y colaboración en sesiones de co-diseño", "porcentaje": 23}, {"criterio": "Diseño de un plan de intervención inclusiva con familia", "porcentaje": 35}, {"criterio": "Implementación y seguimiento de un plan en un caso práctico", "porcentaje": 20}, {"criterio": "Análisis crítico de un caso en base a evidencia y ética", "porcentaje": 20}]'); -- -- Data for Name: conversaciones_asignatura; Type: TABLE DATA; Schema: public; Owner: postgres -- +INSERT INTO "public"."conversaciones_asignatura" ("id", "asignatura_id", "openai_conversation_id", "estado", "conversacion_json", "creado_por", "creado_en", "archivado_por", "archivado_en", "intento_archivado") VALUES + ('9d1b3542-dd54-441d-8572-45eeb870eaca', '626d1fab-1056-4a1f-8861-a93cea5fbdd3', 'conv_69af2f9490b481909a71cc99b5c2e9c00ef3008c304ad287', 'ACTIVA', '[{"user": "user", "prompt": "hola", "timestamp": "2026-03-09T20:37:46.584Z"}]', NULL, '2026-03-09 20:37:40.696835+00', NULL, NULL, 0), + ('eb11f9a9-c867-46ec-877e-5482fb61e6a4', '626d1fab-1056-4a1f-8861-a93cea5fbdd3', 'conv_69b056f3fb908196b7e700850e0ee8870b2e34f4a76eef8f', 'ACTIVA', '[]', NULL, '2026-03-10 17:37:56.247442+00', NULL, NULL, 0); -- -- Data for Name: asignatura_mensajes_ia; Type: TABLE DATA; Schema: public; Owner: postgres -- +INSERT INTO "public"."asignatura_mensajes_ia" ("id", "enviado_por", "mensaje", "campos", "respuesta", "is_refusal", "propuesta", "estado", "fecha_creacion", "fecha_actualizacion", "conversacion_asignatura_id") VALUES + ('4af28d9d-e19c-4442-8d27-934d88e93140', '00000000-0000-0000-0000-000000000000', 'hola', '{}', '¡Hola! Soy experto en diseño curricular. ¿En qué puedo ayudarte hoy? Puedo ayudarte a desarrollar planes de estudio, mapear competencias, elaborar sílabos y rúbricas de evaluación, o diseñar una ruta de aprendizaje. Cuéntame el contexto y los objetivos.', false, '{"prompt": "hola", "respuesta": "¡Hola! Soy experto en diseño curricular. ¿En qué puedo ayudarte hoy? Puedo ayudarte a desarrollar planes de estudio, mapear competencias, elaborar sílabos y rúbricas de evaluación, o diseñar una ruta de aprendizaje. Cuéntame el contexto y los objetivos.", "recommendations": []}', 'COMPLETADO', '2026-03-09 20:37:46.657173', '2026-03-09 20:37:46.657173', '9d1b3542-dd54-441d-8572-45eeb870eaca'), + ('d3332ef8-2387-4502-8880-6d6adb2afaff', '00000000-0000-0000-0000-000000000000', 'hola', '{}', NULL, false, NULL, 'PROCESANDO', '2026-03-09 21:20:32.193795', '2026-03-09 21:20:32.193795', '9d1b3542-dd54-441d-8572-45eeb870eaca'), + ('5e0c7a98-36f0-4ba9-a728-e4cf91fb38d9', '00000000-0000-0000-0000-000000000000', 'hola', '{}', '¡Hola! Soy experto en diseño curricular. ¿En qué puedo ayudarte hoy? Puedo ayudarte a diseñar planes de estudio y rutas de aprendizaje, mapear competencias y resultados de aprendizaje, elaborar sílabos y rúbricas de evaluación, y diseñar itinerarios para programas o asignaturas alineados a estándares. Para empezar, cuéntame: ¿nivel educativo, asignatura o programa, duración/créditos y qué objetivos quieres lograr? Si ya tienes un borrador, compártelo y lo ajustamos.', false, '{"respuesta": "¡Hola! Soy experto en diseño curricular. ¿En qué puedo ayudarte hoy? Puedo ayudarte a diseñar planes de estudio y rutas de aprendizaje, mapear competencias y resultados de aprendizaje, elaborar sílabos y rúbricas de evaluación, y diseñar itinerarios para programas o asignaturas alineados a estándares. Para empezar, cuéntame: ¿nivel educativo, asignatura o programa, duración/créditos y qué objetivos quieres lograr? Si ya tienes un borrador, compártelo y lo ajustamos.", "recommendations": []}', 'COMPLETADO', '2026-03-09 21:26:38.70733', '2026-03-09 21:26:38.70733', '9d1b3542-dd54-441d-8572-45eeb870eaca'), + ('2589b80e-0660-4cb4-83af-896d7480a7bf', '00000000-0000-0000-0000-000000000000', 'hola', '{}', '¡Hola! Soy experto en diseño curricular. ¿En qué puedo ayudarte hoy? Podemos diseñar planes de estudio y rutas de aprendizaje; mapear competencias y resultados de aprendizaje; elaborar sílabos y rúbricas de evaluación; y diseñar itinerarios para programas o asignaturas, alineados a estándares. Para empezar, dime: nivel educativo, asignatura o programa, duración/créditos y qué objetivos quieres lograr. Si ya tienes un borrador, compártelo y lo ajustamos.', false, '{"respuesta": "¡Hola! Soy experto en diseño curricular. ¿En qué puedo ayudarte hoy? Podemos diseñar planes de estudio y rutas de aprendizaje; mapear competencias y resultados de aprendizaje; elaborar sílabos y rúbricas de evaluación; y diseñar itinerarios para programas o asignaturas, alineados a estándares. Para empezar, dime: nivel educativo, asignatura o programa, duración/créditos y qué objetivos quieres lograr. Si ya tienes un borrador, compártelo y lo ajustamos.", "recommendations": []}', 'COMPLETADO', '2026-03-09 21:51:16.349656', '2026-03-09 21:51:16.349656', '9d1b3542-dd54-441d-8572-45eeb870eaca'), + ('d6abcc70-10e2-405c-a411-dc17dd8c8605', '00000000-0000-0000-0000-000000000000', 'hola', '{}', '¡Hola! Soy experto en diseño curricular. ¿En qué puedo ayudarte hoy? Puedo ayudarte a: - diseñar planes de estudio y rutas de aprendizaje; - mapear competencias y resultados de aprendizaje; - elaborar sílabos y planes de evaluación; - crear rúbricas de evaluación; - diseñar itinerarios para programas o asignaturas alineados a estándares. Para empezar, cuéntame: nivel educativo, nombre de la asignatura o programa, duración/créditos y los objetivos que quieres lograr. ¿Tienes un borrador que revisar o un contexto específico (estándares, institución, grupo meta)?', false, '{"respuesta": "¡Hola! Soy experto en diseño curricular. ¿En qué puedo ayudarte hoy? Puedo ayudarte a: - diseñar planes de estudio y rutas de aprendizaje; - mapear competencias y resultados de aprendizaje; - elaborar sílabos y planes de evaluación; - crear rúbricas de evaluación; - diseñar itinerarios para programas o asignaturas alineados a estándares. Para empezar, cuéntame: nivel educativo, nombre de la asignatura o programa, duración/créditos y los objetivos que quieres lograr. ¿Tienes un borrador que revisar o un contexto específico (estándares, institución, grupo meta)?", "recommendations": []}', 'COMPLETADO', '2026-03-09 21:52:13.921164', '2026-03-09 21:52:13.921164', '9d1b3542-dd54-441d-8572-45eeb870eaca'), + ('016a1ad1-7420-4b22-a010-1aeda0e8cf26', '00000000-0000-0000-0000-000000000000', 'hola', '{}', '¡Hola! Soy experto en diseño curricular. ¿En qué puedo ayudarte hoy? Puedo ayudarte a diseñar planes de estudio y rutas de aprendizaje, mapear competencias y resultados de aprendizaje, elaborar sílabos y rúbricas de evaluación, y diseñar itinerarios para programas o asignaturas alineados a estándares. Para empezar, cuéntame: nivel educativo, nombre de la asignatura o programa, duración/créditos y los objetivos que quieres lograr. ¿Ya tienes un borrador o un contexto específico?', false, '{"respuesta": "¡Hola! Soy experto en diseño curricular. ¿En qué puedo ayudarte hoy? Puedo ayudarte a diseñar planes de estudio y rutas de aprendizaje, mapear competencias y resultados de aprendizaje, elaborar sílabos y rúbricas de evaluación, y diseñar itinerarios para programas o asignaturas alineados a estándares. Para empezar, cuéntame: nivel educativo, nombre de la asignatura o programa, duración/créditos y los objetivos que quieres lograr. ¿Ya tienes un borrador o un contexto específico?", "recommendations": []}', 'COMPLETADO', '2026-03-09 21:53:51.890301', '2026-03-09 21:53:51.890301', '9d1b3542-dd54-441d-8572-45eeb870eaca'), + ('ef15e54f-8946-4f7d-8801-938ef5a049ee', '00000000-0000-0000-0000-000000000000', 'hola', '{}', '¡Hola! Soy experto en diseño curricular. ¿En qué puedo ayudarte hoy? Puedo ayudarte a diseñar planes de estudio y rutas de aprendizaje, mapear competencias y resultados de aprendizaje, elaborar sílabos y rúbricas de evaluación, y diseñar itinerarios para programas o asignaturas alineados a estándares. Para empezar, dime: nivel educativo, nombre de la asignatura o programa, duración/créditos y los objetivos que quieres lograr. ¿Tienes un borrador o contexto específico?', false, '{"respuesta": "¡Hola! Soy experto en diseño curricular. ¿En qué puedo ayudarte hoy? Puedo ayudarte a diseñar planes de estudio y rutas de aprendizaje, mapear competencias y resultados de aprendizaje, elaborar sílabos y rúbricas de evaluación, y diseñar itinerarios para programas o asignaturas alineados a estándares. Para empezar, dime: nivel educativo, nombre de la asignatura o programa, duración/créditos y los objetivos que quieres lograr. ¿Tienes un borrador o contexto específico?", "recommendations": []}', 'COMPLETADO', '2026-03-09 22:01:48.854521', '2026-03-09 22:01:48.854521', '9d1b3542-dd54-441d-8572-45eeb870eaca'), + ('f0b7032f-25a1-4c77-9986-7f54ffdb0860', '00000000-0000-0000-0000-000000000000', 'mejora este campo :', '{actividades_de_aprendizaje_independientes}', '', false, '{"respuesta": "", "recommendations": [{"aplicada": false, "texto_mejora": "Lecturas dirigidas y síntesis crítica de 2–3 fuentes por unidad, culminando en un resumen analítico. Análisis de casos reales: entrega de informe escrito (800–1200 palabras) o video explicativo (3–5 minutos) que demuestre la aplicación de conceptos. Elaboración de un plan de intervención inclusiva en formato individual, con evidencia de revisión de fuentes y criterios de éxito. Revisión y reflexión de videos o materiales interactivos mediante un diario de aprendizaje de 500–700 palabras, con identificación de fortalezas y áreas de mejora. Participación asincrónica en foros: mínimo 3 aportes por unidad y respuestas a al menos 2 compañeros, citando fuentes cuando corresponda. Desarrollo de artefactos de intervención: plantillas, guías o instrumentos de registro (formatos editables); entrega de al menos 1 artefacto por unidad. Portafolio de evidencias: recopilación de evidencias de aprendizaje (documentos, presentaciones, videos) con índice y breve metacognición. Autoevaluación y evaluación entre pares: uso de rúbrica para autocalificación y revisión entre pares (con comentarios constructivos). Plan de acción para mejora personal: breve plan de seguimiento de competencias al cierre de la unidad.", "campo_afectado": "actividades_de_aprendizaje_independientes"}]}', 'COMPLETADO', '2026-03-09 22:02:09.679459', '2026-03-09 22:02:09.679459', '9d1b3542-dd54-441d-8572-45eeb870eaca'), + ('a9813e44-a323-405e-8efe-d33e44f6e667', '00000000-0000-0000-0000-000000000000', 'mejora este campo', '{modalidades_tecnologicas_e_informaticas}', '', false, '{"respuesta": "", "recommendations": [{"aplicada": false, "texto_mejora": "Se emplearán plataformas de gestión de aprendizaje (LMS) para materiales y foros, videoconferencias síncronas (Zoom/Teams) para reuniones con familias y docentes, herramientas colaborativas (Google Workspace o Microsoft 365) para co-diseño de planes, y formatos accesibles (lectura fácil, PDF y documentos editables).", "campo_afectado": "modalidades_tecnologicas_e_informaticas"}]}', 'COMPLETADO', '2026-03-09 22:04:17.286142', '2026-03-09 22:04:17.286142', '9d1b3542-dd54-441d-8572-45eeb870eaca'), + ('af56073e-af18-497d-9b40-dbb1de86710c', '00000000-0000-0000-0000-000000000000', 'mejora este campo :', '{denominacion_de_la_asignatura_o_unidad_de_aprendizaje}', 'Se utilizarán LMS para la distribución de materiales, foros y entrega de evidencias; videoconferencias síncronas (Zoom/Teams/Meet) con subtítulos e, cuando corresponda, interpretación en lengua de señas para reuniones con familias y docentes; herramientas colaborativas (Google Workspace o Microsoft 365) para co-diseño de planes en tiempo real; y formatos accesibles (Lectura Fácil, lectura de pantalla, PDFs y documentos editables) con opción de descarga para acceso sin conexión. Se garantiza la accesibilidad conforme a WCAG 2.1 AA, privacidad y seguridad de datos, y compatibilidad móvil; también se facilita multilingüismo cuando sea necesario.', false, '{"respuesta": "Se utilizarán LMS para la distribución de materiales, foros y entrega de evidencias; videoconferencias síncronas (Zoom/Teams/Meet) con subtítulos e, cuando corresponda, interpretación en lengua de señas para reuniones con familias y docentes; herramientas colaborativas (Google Workspace o Microsoft 365) para co-diseño de planes en tiempo real; y formatos accesibles (Lectura Fácil, lectura de pantalla, PDFs y documentos editables) con opción de descarga para acceso sin conexión. Se garantiza la accesibilidad conforme a WCAG 2.1 AA, privacidad y seguridad de datos, y compatibilidad móvil; también se facilita multilingüismo cuando sea necesario.", "recommendations": [{"aplicada": false, "texto_mejora": "Colaboración familia-escuela para intervención inclusiva", "campo_afectado": "denominacion_de_la_asignatura_o_unidad_de_aprendizaje"}]}', 'COMPLETADO', '2026-03-09 22:15:33.82767', '2026-03-09 22:15:33.82767', '9d1b3542-dd54-441d-8572-45eeb870eaca'), + ('23dcdb15-96d4-466c-9f41-760b0f22b64d', '00000000-0000-0000-0000-000000000000', 'hola', '{}', '¡Hola! Aquí tienes una versión mejorada del campo Modalidades tecnológicas e informáticas, lista para pegar en tu sílabo: + +Modalidades tecnológicas e informáticas: La asignatura se ofrece a través de plataformas de gestión de aprendizaje (LMS) para distribución de materiales, foros y entrega de evidencias. Las videoconferencias síncronas (Zoom, Teams o Meet) incluirán subtítulos y, cuando sea necesario, interpretación en lengua de señas para reuniones con familias y docentes. Se emplearán herramientas colaborativas (Google Workspace o Microsoft 365) para co-diseño de planes y edición en tiempo real. Los materiales se presentarán en formatos accesibles (Lectura Fácil, lectura de pantalla, PDFs y documentos editables) con opción de descarga para acceso sin conexión. Se garantiza accesibilidad conforme a WCAG 2.1 AA, privacidad y seguridad de datos, y compatibilidad móvil; además, se facilitará multilingüismo cuando sea necesario.', false, '{"respuesta": "¡Hola! Aquí tienes una versión mejorada del campo Modalidades tecnológicas e informáticas, lista para pegar en tu sílabo: \n\nModalidades tecnológicas e informáticas: La asignatura se ofrece a través de plataformas de gestión de aprendizaje (LMS) para distribución de materiales, foros y entrega de evidencias. Las videoconferencias síncronas (Zoom, Teams o Meet) incluirán subtítulos y, cuando sea necesario, interpretación en lengua de señas para reuniones con familias y docentes. Se emplearán herramientas colaborativas (Google Workspace o Microsoft 365) para co-diseño de planes y edición en tiempo real. Los materiales se presentarán en formatos accesibles (Lectura Fácil, lectura de pantalla, PDFs y documentos editables) con opción de descarga para acceso sin conexión. Se garantiza accesibilidad conforme a WCAG 2.1 AA, privacidad y seguridad de datos, y compatibilidad móvil; además, se facilitará multilingüismo cuando sea necesario.", "recommendations": []}', 'COMPLETADO', '2026-03-10 14:37:55.617161', '2026-03-10 14:37:55.617161', '9d1b3542-dd54-441d-8572-45eeb870eaca'), + ('6455e831-89b4-41a7-b436-f66498196d52', '00000000-0000-0000-0000-000000000000', 'hola', '{}', '¡Hola! ¿Qué aspecto de la asignatura LLSE-305 quieres mejorar ahora? Puedo ayudarte a: - pulir un campo específico (p. ej., criterios de evaluación, contenidos, actividades de aprendizaje o modalidades tecnológicas); - consolidar una versión integrada del sílabo; - optimizar la ruta de aprendizaje y el mapeo de competencias; - revisar accesibilidad y multilingüismo; - generar rúbricas y planes de evaluación. ¿Cuál campo quieres priorizar o quieres que te entregue una versión completa actualizada?', false, '{"respuesta": "¡Hola! ¿Qué aspecto de la asignatura LLSE-305 quieres mejorar ahora? Puedo ayudarte a: - pulir un campo específico (p. ej., criterios de evaluación, contenidos, actividades de aprendizaje o modalidades tecnológicas); - consolidar una versión integrada del sílabo; - optimizar la ruta de aprendizaje y el mapeo de competencias; - revisar accesibilidad y multilingüismo; - generar rúbricas y planes de evaluación. ¿Cuál campo quieres priorizar o quieres que te entregue una versión completa actualizada?", "recommendations": []}', 'COMPLETADO', '2026-03-10 16:35:41.159529', '2026-03-10 16:35:41.159529', '9d1b3542-dd54-441d-8572-45eeb870eaca'), + ('4ea55a1c-8405-48ea-8a01-368f96af1fcf', '00000000-0000-0000-0000-000000000000', 'mejora este campo :', '{modalidades_tecnologicas_e_informaticas}', 'Aquí tienes una versión revisada y más completa de la modalidad tecnológica e informáticala para LLSE-305:', false, '{"respuesta": "Aquí tienes una versión revisada y más completa de la modalidad tecnológica e informáticala para LLSE-305:", "recommendations": [{"aplicada": false, "texto_mejora": "Modalidades tecnológicas e informáticas: Se utilizarán plataformas de gestión de aprendizaje (LMS) para la distribución de materiales, foros y entrega de evidencias. Las videoconferencias síncronas (Zoom, Teams o Meet) incluirán subtítulos y, cuando sea necesario, interpretación en lengua de señas para reuniones con familias y docentes. Se emplearán herramientas colaborativas (Google Workspace o Microsoft 365) para co-diseño de planes y edición en tiempo real, con control de versiones y registro de cambios. Los materiales y entregas estarán disponibles en formatos accesibles (Lectura Fácil, lectura de pantalla, PDFs con texto seleccionable y documentos editables) y podrán descargarse para acceso sin conexión. Se garantizará la accesibilidad conforme a WCAG 2.1 AA, la privacidad y seguridad de datos (encriptación en tránsito y en reposo, cumplimiento normativo) y la compatibilidad móvil. Se fomentará el multilingüismo cuando corresponda, y se dispondrán apoyos para necesidades específicas (subtítulos, transcripciones, descripciones de imágenes, etc.).", "campo_afectado": "modalidades_tecnologicas_e_informaticas"}]}', 'COMPLETADO', '2026-03-10 16:36:19.365924', '2026-03-10 16:36:19.365924', '9d1b3542-dd54-441d-8572-45eeb870eaca'), + ('210806c7-a831-4297-8e77-a0035445a627', '00000000-0000-0000-0000-000000000000', 'cual es el contenido de esta asignatura?', '{}', 'Contenido temático de la asignatura LLSE-305 (Colaboración familia-escuela para intervención inclusiva): + +Unidad 1: Fundamentos de la colaboración familia-escuela para intervención inclusiva +- Modelo de intervención inclusiva — 6 h +- Roles de actores educativos y familiares — 5 h +- Comunicación efectiva y construcción de alianzas — 7 h + +Unidad 2: Diseño y seguimiento de planes de apoyo +- Diagnóstico de necesidades y metas de aprendizaje — 6 h +- Co-diseño de planes de apoyo con familias — 6 h +- Implementación y seguimiento de planes — 6 h + +Unidad 3: Herramientas, evaluación y ética +- Instrumentos de registro y monitoreo del progreso — 4 h +- Privacidad, consentimiento y ética profesional — 4 h +- Casos prácticos y resolución de conflictos — 4 h + +Total de horas académicas: 48. Actividades de aprendizaje independientes: 72 h (si aplica, según plan). Si quieres, puedo adaptar este contenido a una versión más breve o detallada por tema.', false, '{"respuesta": "Contenido temático de la asignatura LLSE-305 (Colaboración familia-escuela para intervención inclusiva):\n\nUnidad 1: Fundamentos de la colaboración familia-escuela para intervención inclusiva\n- Modelo de intervención inclusiva — 6 h\n- Roles de actores educativos y familiares — 5 h\n- Comunicación efectiva y construcción de alianzas — 7 h\n\nUnidad 2: Diseño y seguimiento de planes de apoyo\n- Diagnóstico de necesidades y metas de aprendizaje — 6 h\n- Co-diseño de planes de apoyo con familias — 6 h\n- Implementación y seguimiento de planes — 6 h\n\nUnidad 3: Herramientas, evaluación y ética\n- Instrumentos de registro y monitoreo del progreso — 4 h\n- Privacidad, consentimiento y ética profesional — 4 h\n- Casos prácticos y resolución de conflictos — 4 h\n\nTotal de horas académicas: 48. Actividades de aprendizaje independientes: 72 h (si aplica, según plan). Si quieres, puedo adaptar este contenido a una versión más breve o detallada por tema.", "recommendations": []}', 'COMPLETADO', '2026-03-10 17:07:52.963758', '2026-03-10 17:07:52.963758', '9d1b3542-dd54-441d-8572-45eeb870eaca'), + ('79412157-e9e1-4284-ab2e-ae2457a6c6e2', '00000000-0000-0000-0000-000000000000', 'nejora el ', '{ciclo}', '¿A qué campo específico quieres que mejore? Si te parece, te propongo una versión mejorada para el Contenido temático de LLSE-305 (Colaboración familia-escuela para intervención inclusiva): + +Contenido temático (48 h) +Unidad 1: Fundamentos de la colaboración familia-escuela para intervención inclusiva (18 h) +- Modelo de intervención inclusiva (6 h) +- Roles de actores educativos y familiares (5 h) +- Comunicación efectiva y construcción de alianzas (7 h) + +Unidad 2: Diseño y seguimiento de planes de apoyo (18 h) +- Diagnóstico de necesidades y metas de aprendizaje (6 h) +- Co-diseño de planes de apoyo con familias (6 h) +- Implementación y seguimiento de planes (6 h) + +Unidad 3: Herramientas, evaluación y ética (12 h) +- Instrumentos de registro y monitoreo del progreso (4 h) +- Privacidad, consentimiento y ética profesional (4 h) +- Casos prácticos y resolución de conflictos (4 h) + +Total: 48 h de hora presencial/virtual. Observaciones: las horas de aprendizaje independiente se distribuyen en las actividades complementarias y foros, para favorecer la reflexión y la evidencia de aprendizaje. ¿Quieres que ajuste la redacción para un formato más conciso o que lo alinee con estándares específicos?', false, '{"respuesta": "¿A qué campo específico quieres que mejore? Si te parece, te propongo una versión mejorada para el Contenido temático de LLSE-305 (Colaboración familia-escuela para intervención inclusiva):\n\nContenido temático (48 h)\nUnidad 1: Fundamentos de la colaboración familia-escuela para intervención inclusiva (18 h)\n- Modelo de intervención inclusiva (6 h)\n- Roles de actores educativos y familiares (5 h)\n- Comunicación efectiva y construcción de alianzas (7 h)\n\nUnidad 2: Diseño y seguimiento de planes de apoyo (18 h)\n- Diagnóstico de necesidades y metas de aprendizaje (6 h)\n- Co-diseño de planes de apoyo con familias (6 h)\n- Implementación y seguimiento de planes (6 h)\n\nUnidad 3: Herramientas, evaluación y ética (12 h)\n- Instrumentos de registro y monitoreo del progreso (4 h)\n- Privacidad, consentimiento y ética profesional (4 h)\n- Casos prácticos y resolución de conflictos (4 h)\n\nTotal: 48 h de hora presencial/virtual. Observaciones: las horas de aprendizaje independiente se distribuyen en las actividades complementarias y foros, para favorecer la reflexión y la evidencia de aprendizaje. ¿Quieres que ajuste la redacción para un formato más conciso o que lo alinee con estándares específicos?", "recommendations": [{"aplicada": false, "texto_mejora": "Ciclo 3", "campo_afectado": "ciclo"}]}', 'COMPLETADO', '2026-03-10 17:13:51.432364', '2026-03-10 17:13:51.432364', '9d1b3542-dd54-441d-8572-45eeb870eaca'), + ('5110e82d-e778-4d43-b44f-6e761356b8af', '00000000-0000-0000-0000-000000000000', 'mejora este campo ', '{fines_de_aprendizaje_o_formacion}', 'Cambios realizados: reescribí fines_de_aprendizaje_o_formacion para hacerlo SMART y observable, añadiendo capacidades de coordinación con familias y docentes, diseño y seguimiento de planes con metas y criterios de éxito, protección de datos, uso de tecnologías y enfoque de equidad. A continuación, el texto revisado.', false, '{"respuesta": "Cambios realizados: reescribí fines_de_aprendizaje_o_formacion para hacerlo SMART y observable, añadiendo capacidades de coordinación con familias y docentes, diseño y seguimiento de planes con metas y criterios de éxito, protección de datos, uso de tecnologías y enfoque de equidad. A continuación, el texto revisado.", "recommendations": [{"aplicada": false, "texto_mejora": "Al finalizar la asignatura, el estudiante será capaz de coordinar con familias y docentes la co-construcción de planes de apoyo y su seguimiento en contextos escolares inclusivos, promoviendo la participación y el aprendizaje equitativo. Demostrará habilidades de comunicación efectiva, negociación y ética profesional; diseñará e implementará planes de intervención con metas claras y criterios de éxito; registrará y monitoreará progresos respetando la privacidad y la normativa vigente; y utilizará herramientas tecnológicas (LMS, videoconferencias, herramientas de colaboración) para facilitar la coordinación, la obtención de consentimiento y el trabajo colaborativo entre actores educativos.", "campo_afectado": "fines_de_aprendizaje_o_formacion"}]}', 'COMPLETADO', '2026-03-10 17:35:04.517398', '2026-03-10 17:35:04.517398', '9d1b3542-dd54-441d-8572-45eeb870eaca'), + ('e7c8cf91-2de1-46c7-b72b-e9466fcee8d3', '00000000-0000-0000-0000-000000000000', 'hola', '{}', 'Cambios propuestos para mejorar los campos clave de LLSE-305: +- Fines_de_aprendizaje_o_formacion: convertir a resultados observables y medibles (SMART) con indicadores de desempeño. +- Modalidades_tecnologicas_e_informaticas: especificar herramientas, roles, estándares de accesibilidad (WCAG), requisitos de competencia digital, seguridad y planes de contingencia para conectividad. +- Actividades_de_aprendizaje_independientes: detallar entregables, rúbricas, tiempos previstos, y vínculos explícitos con cada resultado de aprendizaje. +- Denominacion_de_la_asignatura_o_unidad_de_aprendizaje: conservar el nombre actual; si se prefiere, estandarizar como ''Colaboración familia-escuela para intervención inclusiva'' enunciado de unidad; considerar una segunda unidad explícita. +- Actividades_de_aprendizaje_bajo_conduccion_de_un_academico: describir secuencias claras (casos, talleres, simulaciones) con artefactos esperados y criterios de evaluación para cada actividad. +- Contenido_tematico: ampliar con temas como Ética y derechos, Privacidad y consentimiento, Equidad y diversidad cultural, Intervención basada en evidencia, Registro y monitoreo, Colaboración con servicios de apoyo, y fundamentos de tecnología educativa; revisar distribución horaria por unidad para reflejar estas adiciones. +- Criterios_de_evaluacion: incluir rúbricas por criterio (niveles de logro: excelente, satisfactorio, básico, insuficiente), especificar evidencias requeridas (plan de intervención, registro de progreso, video de simulación, reflexión escrita) y considerar coevaluación/autoevaluación. +- Horas_academicas: mantener 48 horas de contacto y 72 horas de trabajo independiente, pero distribuirlas de forma equilibrada entre unidades (p. ej., 16h contacto + 24h independiente por unidad).', false, '{"respuesta": "Cambios propuestos para mejorar los campos clave de LLSE-305:\n- Fines_de_aprendizaje_o_formacion: convertir a resultados observables y medibles (SMART) con indicadores de desempeño.\n- Modalidades_tecnologicas_e_informaticas: especificar herramientas, roles, estándares de accesibilidad (WCAG), requisitos de competencia digital, seguridad y planes de contingencia para conectividad.\n- Actividades_de_aprendizaje_independientes: detallar entregables, rúbricas, tiempos previstos, y vínculos explícitos con cada resultado de aprendizaje.\n- Denominacion_de_la_asignatura_o_unidad_de_aprendizaje: conservar el nombre actual; si se prefiere, estandarizar como ''Colaboración familia-escuela para intervención inclusiva'' enunciado de unidad; considerar una segunda unidad explícita.\n- Actividades_de_aprendizaje_bajo_conduccion_de_un_academico: describir secuencias claras (casos, talleres, simulaciones) con artefactos esperados y criterios de evaluación para cada actividad.\n- Contenido_tematico: ampliar con temas como Ética y derechos, Privacidad y consentimiento, Equidad y diversidad cultural, Intervención basada en evidencia, Registro y monitoreo, Colaboración con servicios de apoyo, y fundamentos de tecnología educativa; revisar distribución horaria por unidad para reflejar estas adiciones.\n- Criterios_de_evaluacion: incluir rúbricas por criterio (niveles de logro: excelente, satisfactorio, básico, insuficiente), especificar evidencias requeridas (plan de intervención, registro de progreso, video de simulación, reflexión escrita) y considerar coevaluación/autoevaluación.\n- Horas_academicas: mantener 48 horas de contacto y 72 horas de trabajo independiente, pero distribuirlas de forma equilibrada entre unidades (p. ej., 16h contacto + 24h independiente por unidad).", "recommendations": []}', 'COMPLETADO', '2026-03-10 17:37:56.965002', '2026-03-10 17:37:56.965002', 'eb11f9a9-c867-46ec-877e-5482fb61e6a4'), + ('2a0ef36a-ff3a-467e-9831-a8e027580e72', '00000000-0000-0000-0000-000000000000', 'hola', '{}', 'Cambios propuestos para las áreas clave de LLSE-305: +- Fines_de_aprendizaje_o_formacion: convertir a indicadores SMART con criterios de desempeño observables y medibles para cada resultado de aprendizaje. +- Modalidades_tecnologicas_e_informaticas: detallar herramientas específicas (LMS, videoconferencia, herramientas colaborativas), roles de actores, estándares de accesibilidad (WCAG 2.1 AA), competencia digital requerida, seguridad de datos y planes de contingencia ante conectividad. +- Actividades_de_aprendizaje_independientes: especificar entregables, rúbricas, plazos, y vinculación explícita con cada resultado de aprendizaje. +- Denominacion_de_la_asignatura_o_unidad_de_aprendizaje: mantener el nombre actual, con opción de estandarizar la unidad y/o proponer una segunda unidad explícita. +- Actividades_de_aprendizaje_bajo_conduccion_de_un_academico: definir secuencias claras (casos, talleres, simulaciones) con artefactos esperados y criterios de evaluación por actividad. +- Contenido_tematico: ampliar con temas como Ética y derechos, Privacidad y consentimiento, Equidad y diversidad cultural, Intervención basada en evidencia, Registro y monitoreo, Colaboración con servicios de apoyo, y fundamentos de tecnología educativa; ajustar distribución horaria por unidad para reflejar estas adiciones. +- Criterios_de_evaluacion: incorporar rúbricas por criterio (niveles de logro) y evidencias requeridas (plan de intervención, registro de progreso, video de simulación, reflexión escrita); considerar coevaluación y autoevaluación. +- Horas_academicas: mantener 48 horas de contacto y 72 de trabajo independiente, pero distribuirlas de forma equilibrada entre unidades (ej., 16h contacto + 24h independiente por unidad).', false, '{"respuesta": "Cambios propuestos para las áreas clave de LLSE-305: \n- Fines_de_aprendizaje_o_formacion: convertir a indicadores SMART con criterios de desempeño observables y medibles para cada resultado de aprendizaje. \n- Modalidades_tecnologicas_e_informaticas: detallar herramientas específicas (LMS, videoconferencia, herramientas colaborativas), roles de actores, estándares de accesibilidad (WCAG 2.1 AA), competencia digital requerida, seguridad de datos y planes de contingencia ante conectividad. \n- Actividades_de_aprendizaje_independientes: especificar entregables, rúbricas, plazos, y vinculación explícita con cada resultado de aprendizaje. \n- Denominacion_de_la_asignatura_o_unidad_de_aprendizaje: mantener el nombre actual, con opción de estandarizar la unidad y/o proponer una segunda unidad explícita. \n- Actividades_de_aprendizaje_bajo_conduccion_de_un_academico: definir secuencias claras (casos, talleres, simulaciones) con artefactos esperados y criterios de evaluación por actividad. \n- Contenido_tematico: ampliar con temas como Ética y derechos, Privacidad y consentimiento, Equidad y diversidad cultural, Intervención basada en evidencia, Registro y monitoreo, Colaboración con servicios de apoyo, y fundamentos de tecnología educativa; ajustar distribución horaria por unidad para reflejar estas adiciones. \n- Criterios_de_evaluacion: incorporar rúbricas por criterio (niveles de logro) y evidencias requeridas (plan de intervención, registro de progreso, video de simulación, reflexión escrita); considerar coevaluación y autoevaluación. \n- Horas_academicas: mantener 48 horas de contacto y 72 de trabajo independiente, pero distribuirlas de forma equilibrada entre unidades (ej., 16h contacto + 24h independiente por unidad).", "recommendations": []}', 'COMPLETADO', '2026-03-10 17:41:30.340673', '2026-03-10 17:41:30.340673', 'eb11f9a9-c867-46ec-877e-5482fb61e6a4'), + ('4cdd39ec-034b-4b68-9853-e7cdfe1b8af2', '00000000-0000-0000-0000-000000000000', 'hola', '{}', '¡Hola! Con gusto te ayudo a mejorar la asignatura LLSE-305. Puedo trabajar diferentes áreas, por ejemplo: +- Fines de aprendizaje o formación: convertirlos en indicadores SMART y medibles. +- Contenido temático y distribución horaria por unidades. +- Criterios de evaluación y evidencias (rúbricas, coevaluación, autoevaluación). +- Actividades de aprendizaje (independientes y bajo conducción académica) y sus entregables. +- Denominación de la asignatura y unidad de aprendizaje. +- Modalidades tecnológicas y requisitos (herramientas, accesibilidad, seguridad, planes de contingencia). +- Horas académicas y equilibrio entre horas de contacto y trabajo independiente. +- Aspectos de ética, privacidad, consentimiento y equidad. + +Dime qué área quieres trabajar primero o si tienes otro aspecto en mente. También puedo darte plantillas o ejemplos (por unidad) si así lo prefieres.', false, '{"respuesta": "¡Hola! Con gusto te ayudo a mejorar la asignatura LLSE-305. Puedo trabajar diferentes áreas, por ejemplo: \n- Fines de aprendizaje o formación: convertirlos en indicadores SMART y medibles.\n- Contenido temático y distribución horaria por unidades.\n- Criterios de evaluación y evidencias (rúbricas, coevaluación, autoevaluación).\n- Actividades de aprendizaje (independientes y bajo conducción académica) y sus entregables.\n- Denominación de la asignatura y unidad de aprendizaje.\n- Modalidades tecnológicas y requisitos (herramientas, accesibilidad, seguridad, planes de contingencia).\n- Horas académicas y equilibrio entre horas de contacto y trabajo independiente.\n- Aspectos de ética, privacidad, consentimiento y equidad.\n\nDime qué área quieres trabajar primero o si tienes otro aspecto en mente. También puedo darte plantillas o ejemplos (por unidad) si así lo prefieres.", "recommendations": []}', 'COMPLETADO', '2026-03-10 18:10:51.626688', '2026-03-10 18:10:51.626688', 'eb11f9a9-c867-46ec-877e-5482fb61e6a4'), + ('7ff18336-17f7-4869-afcf-3c3b9a25073d', '00000000-0000-0000-0000-000000000000', 'cual es el sentido de la vida?', '{}', 'Lo siento, no puedo ayudar con preguntas ajenas a la asignatura. Puedo ayudarte a mejorar LLSE-305: por ejemplo, convertir los fines de aprendizaje en indicadores SMART, detallar modalidades tecnológicas y accesibilidad, especificar entregables y rúbricas para las actividades, distribuir horas académicas entre unidades, y ampliar contenidos y criterios de evaluación. ¿Qué área quieres trabajar primero?', true, '{"respuesta": "Lo siento, no puedo ayudar con preguntas ajenas a la asignatura. Puedo ayudarte a mejorar LLSE-305: por ejemplo, convertir los fines de aprendizaje en indicadores SMART, detallar modalidades tecnológicas y accesibilidad, especificar entregables y rúbricas para las actividades, distribuir horas académicas entre unidades, y ampliar contenidos y criterios de evaluación. ¿Qué área quieres trabajar primero?", "recommendations": []}', 'COMPLETADO', '2026-03-10 18:11:38.237555', '2026-03-10 18:11:38.237555', 'eb11f9a9-c867-46ec-877e-5482fb61e6a4'), + ('fcb8c6f0-c409-4ddd-85f4-fe01258a2bbc', '00000000-0000-0000-0000-000000000000', 'mejora este campo :', '{actividades_de_aprendizaje_bajo_conduccion_de_un_academico}', 'Propuesta detallada para mejorar solo el campo activiades_de_aprendizaje_bajo_conduccion_de_un_academico: se traza un flujo claro con objetivos, artefactos y entregables por actividad, aumentando la especificidad y la trazabilidad de las prácticas bajo conducción del académico.', false, '{"respuesta": "Propuesta detallada para mejorar solo el campo activiades_de_aprendizaje_bajo_conduccion_de_un_academico: se traza un flujo claro con objetivos, artefactos y entregables por actividad, aumentando la especificidad y la trazabilidad de las prácticas bajo conducción del académico.", "recommendations": [{"aplicada": false, "texto_mejora": "Propuesta de secuencia de actividades.b1) Sesiones de discusión de casos con guía del docente (casos 1–3): objetivo de aprendizaje: analizar necesidades y acordar criterios de intervención; artefactos esperados: ficha de caso, actas de reunión, notas de discusión; entregable: minutas por sesión; duración estimada: 2 sesiones de 90 minutos cada una. b2) Talleres de co-diseño de planes de apoyo con familias: objetivo de aprendizaje: generar bosquejos de planes de intervención inclusivos; artefactos: plantillas de plan de apoyo, diagramas de flujo de implementación, lista de verificación de colaboración; entregables: borrador de plan de intervención para revisión; duración estimada: 2 sesiones de 120 minutos cada una. b3) Simulaciones de reuniones de coordinación: objetivo de aprendizaje: practicar comunicación, escucha activa y manejo de conflictos; artefactos: grabaciones de simulación, transcripciones, listas de verificación de reunión y minutas; entregables: acta de simulación y reflexión individual; duración estimada: 2 sesiones de 90 minutos cada una. b4) Retroalimentación y seguimiento de avances: objetivo de aprendizaje: consolidar evidencias de progreso; artefactos: bitácora de progreso, informe de avances, rúbrica de retroalimentación (a modo de guía para el docente); entregables: informe de avances y plan de acciones futuras; duración estimada: 3 sesiones de 60 minutos cada una. b5) Revisión de artefactos (artefactos finales del plan) y cierre: objetivo de aprendizaje: verificar consistencia entre diagnóstico, diseño y seguimiento; artefactos: versión final del plan de intervención en formato editable y PDF; entregables: plan final, informe de implementación y evidencia; duración estimada: 1 sesión final de 90 minutos. Notas: estas actividades se organizan para permitir retroalimentación continua del académico y la participación activa de familias y docentes; se sugiere incorporar coevaluación y autoevaluación en la revisión de artefactos cuando corresponda.", "campo_afectado": "actividades_de_aprendizaje_bajo_conduccion_de_un_academico"}]}', 'COMPLETADO', '2026-03-10 18:22:33.095473', '2026-03-10 18:22:33.095473', 'eb11f9a9-c867-46ec-877e-5482fb61e6a4'), + ('2e34e89d-2cc6-4af6-8d8a-095253095668', '00000000-0000-0000-0000-000000000000', 'hola', '{}', '¡Hola! Con gusto te ayudo a mejorar LLSE-305. Puedo trabajar en: - objetivos de aprendizaje (conversión a SMART), - contenidos temáticos y distribución por unidades, - criterios de evaluación y evidencias (rúbricas, coevaluación, autoevaluación), - actividades de aprendizaje (independientes y bajo conducción académica) y sus entregables, - denominación de la asignatura y unidad de aprendizaje, - modalidades tecnológicas y requisitos (accesibilidad, seguridad, planes de contingencia), - horas académicas y equilibrio entre contacto y trabajo independiente, - aspectos de ética, privacidad y equidad. ¿Qué área quieres trabajar primero? También puedo proporcionar plantillas o ejemplos por unidad si lo prefieres.', false, '{"respuesta": "¡Hola! Con gusto te ayudo a mejorar LLSE-305. Puedo trabajar en: - objetivos de aprendizaje (conversión a SMART), - contenidos temáticos y distribución por unidades, - criterios de evaluación y evidencias (rúbricas, coevaluación, autoevaluación), - actividades de aprendizaje (independientes y bajo conducción académica) y sus entregables, - denominación de la asignatura y unidad de aprendizaje, - modalidades tecnológicas y requisitos (accesibilidad, seguridad, planes de contingencia), - horas académicas y equilibrio entre contacto y trabajo independiente, - aspectos de ética, privacidad y equidad. ¿Qué área quieres trabajar primero? También puedo proporcionar plantillas o ejemplos por unidad si lo prefieres.", "recommendations": []}', 'COMPLETADO', '2026-03-10 18:27:05.379922', '2026-03-10 18:27:05.379922', 'eb11f9a9-c867-46ec-877e-5482fb61e6a4'), + ('4fcf4b4a-bbc8-45a9-9adc-504480d9aa56', '00000000-0000-0000-0000-000000000000', 'mejora este campo y ', '{ciclo,modalidades_tecnologicas_e_informaticas}', 'Cambios realizados: el campo de ciclo se actualizó para describir de forma más explícita el enfoque del curso dentro del Ciclo 3 y su relación con la colaboración en educación inclusiva; en modalidades tecnológicas e informáticas se detallan herramientas específicas, roles, estándares de accesibilidad, competencias digitales, seguridad de datos y planes de contingencia para conectividad.', false, '{"respuesta": "Cambios realizados: el campo de ciclo se actualizó para describir de forma más explícita el enfoque del curso dentro del Ciclo 3 y su relación con la colaboración en educación inclusiva; en modalidades tecnológicas e informáticas se detallan herramientas específicas, roles, estándares de accesibilidad, competencias digitales, seguridad de datos y planes de contingencia para conectividad.", "recommendations": [{"aplicada": false, "texto_mejora": "Ciclo 3: Educación inclusiva y colaboración entre familia y escuela", "campo_afectado": "ciclo"}, {"aplicada": false, "texto_mejora": "LMS: Moodle, Canvas o Google Classroom; videoconferencias síncronas: Zoom o Teams; herramientas colaborativas: Google Workspace o Microsoft 365 para co-diseño de planes; formatos accesibles: lectura fácil, PDFs etiquetados y documentos editables; roles y competencias digitales de docentes, familias y estudiantes; estándares de accesibilidad WCAG 2.1 AA; seguridad de datos (cumplimiento de RGPD/FERPA, cifrado, autenticación y control de acceso); planes de contingencia ante conectividad: materiales descargables, grabaciones, acceso offline y alternativas de conectividad (datos móviles, puntos de acceso).", "campo_afectado": "modalidades_tecnologicas_e_informaticas"}]}', 'COMPLETADO', '2026-03-10 18:28:37.11075', '2026-03-10 18:28:37.11075', 'eb11f9a9-c867-46ec-877e-5482fb61e6a4'), + ('52246ea2-b0c7-4271-8da0-9a7ed4162e2f', '00000000-0000-0000-0000-000000000000', 'mejora estos campos : y ', '{ciclo,fines_de_aprendizaje_o_formacion}', 'Resumo los cambios: 1) Actualicé el campo ciclo para describir de forma más explícita el enfoque del curso dentro del Ciclo 3 y su relación con educación inclusiva y colaboración. 2) Transformé fines_de_aprendizaje_o_formacion en resultados de aprendizaje SMART (observables y medibles) con indicadores y plazos claros para cada resultado.', false, '{"respuesta": "Resumo los cambios: 1) Actualicé el campo ciclo para describir de forma más explícita el enfoque del curso dentro del Ciclo 3 y su relación con educación inclusiva y colaboración. 2) Transformé fines_de_aprendizaje_o_formacion en resultados de aprendizaje SMART (observables y medibles) con indicadores y plazos claros para cada resultado.", "recommendations": [{"aplicada": false, "texto_mejora": "Ciclo 3: Educación inclusiva y coordinación entre familias y escuela", "campo_afectado": "ciclo"}, {"aplicada": false, "texto_mejora": "Resultados de aprendizaje SMART propuestos: 1) Coordinar con familias y docentes la co-construcción de planes de apoyo: entregar planes co-diseñados y firmados por las partes dentro de 15 días desde la identificación de necesidades, con evidencias (actas, plantillas) en al menos el 90% de los casos. 2) Facilitar la comunicación efectiva y el seguimiento del progreso: responder a consultas en ≤48 horas; realizar reuniones de seguimiento cada 4 semanas; satisfacción promedio de las partes ≥4.5/5 en encuestas trimestrales. 3) Promover participación y aprendizaje equitativo: aplicar adaptaciones para al menos 80% de los estudiantes y registrar progreso en metas clave; reducir la brecha de logro entre grupos a ≤0.2 desviación estándar al final del ciclo. 4) Incentivar la participación de familias en actividades de co-diseño y revisión: al menos 85% de familias reporta participación activa en las actividades planificadas.", "campo_afectado": "fines_de_aprendizaje_o_formacion"}]}', 'COMPLETADO', '2026-03-10 18:49:09.2761', '2026-03-10 18:49:09.2761', 'eb11f9a9-c867-46ec-877e-5482fb61e6a4'); -- @@ -2395,7 +2496,9 @@ INSERT INTO "public"."cambios_plan" ("id", "plan_estudio_id", "cambiado_por", "c ('6749e872-7c77-4efb-a1bc-b7a23a503cb8', 'f35bd838-6df7-4a3b-9fbf-879f9b3e6da9', NULL, '2026-02-27 22:29:35.027381+00', 'ACTUALIZACION_CAMPO', 'diseno_curricular', NULL, '"Rígido"', NULL), ('abc901f1-7fb9-47d8-a8fe-805f6b0b3569', 'f35bd838-6df7-4a3b-9fbf-879f9b3e6da9', NULL, '2026-02-27 22:29:35.027381+00', 'ACTUALIZACION_CAMPO', 'antecedente_academico', NULL, '"Certificado de Bachillerato o equivalente. Preferentemente procedencia de áreas afines como Ciencias de la Educación, Psicología, Trabajo Social, Pedagogía o áreas de ciencias sociales relacionadas con atención a la infancia y discapacidad."', NULL), ('2598af01-608e-4f2e-8e73-c4e40f6fce00', 'f35bd838-6df7-4a3b-9fbf-879f9b3e6da9', NULL, '2026-02-27 22:29:35.027381+00', 'ACTUALIZACION_CAMPO', 'modalidad_educativa', NULL, '"Mixta"', NULL), - ('27217ea8-84f5-4b95-b0de-26203ee62b09', 'dc286072-c649-43aa-8a2f-aa3ef6166647', NULL, '2026-03-04 15:42:54.388936+00', 'ACTUALIZACION_CAMPO', 'area_de_estudio', '"07 Salud (CMPE 2016, campo amplio)"', '"07 Salud (CMPE 2016). Campo de formación específico: Química Farmacéutica, Farmacotecnia, Cosmética y Perfumería (con énfasis en análisis instrumental, regulación y seguridad sanitaria)."', NULL); + ('27217ea8-84f5-4b95-b0de-26203ee62b09', 'dc286072-c649-43aa-8a2f-aa3ef6166647', NULL, '2026-03-04 15:42:54.388936+00', 'ACTUALIZACION_CAMPO', 'area_de_estudio', '"07 Salud (CMPE 2016, campo amplio)"', '"07 Salud (CMPE 2016). Campo de formación específico: Química Farmacéutica, Farmacotecnia, Cosmética y Perfumería (con énfasis en análisis instrumental, regulación y seguridad sanitaria)."', NULL), + ('e4eaff59-b432-4ecc-ade3-1ef745651726', 'f35bd838-6df7-4a3b-9fbf-879f9b3e6da9', NULL, '2026-03-06 19:59:16.460883+00', 'ACTUALIZACION', 'nombre', '"Licenciatura en Educación Especial como sombra"', '"Educación Especial como sombra"', NULL), + ('db546c6b-5fb5-4f80-b7c5-9d395bf36c81', '198c763b-9d97-423b-b13a-5713437fc81b', NULL, '2026-03-09 16:28:20.394326+00', 'ACTUALIZACION_CAMPO', 'perfil_de_egreso', '"Conocimientos:\n - Marco conceptual de la Educación Especial y modelos de atención a la diversidad.\n - Normativa nacional e internacional sobre inclusión educativa y derechos de las personas con discapacidad.\n - Características del desarrollo infantil y del aprendizaje en educación primaria.\n - Estrategias pedagógicas y adaptaciones curriculares para diversas necesidades educativas.\nHabilidades:\n - Identificar y diagnosticar barreras de aprendizaje en entornos escolares.\n - Diseñar y aplicar adaptaciones curriculares y estrategias de apoyo individualizado.\n - Intervenir como figura de sombra para facilitar la participación y el aprendizaje en aula regular.\n - Colaborar con equipos docentes, familias y profesionales para la elaboración de planes de atención individualizada.\n - Evaluar el progreso del estudiante mediante instrumentos cualitativos y cuantitativos.\nActitudes:\n - Promover una práctica profesional ética, centrada en la dignidad y derechos del estudiantado.\n - Mostrar sensibilidad hacia la diversidad cultural, funcional y socioemocional.\n - Adoptar una postura reflexiva, colaborativa y comprometida con la mejora continua."', '"Conocimientos:\n - Marco conceptual de la Educación Especial y modelos de atención a la diversidad, con énfasis en la figura de sombra como mediadora del aprendizaje en educación primaria.\n - Normativa nacional e internacional sobre inclusión educativa, derechos de las personas con discapacidad y derechos humanos aplicados a contextos escolares.\n - Características del desarrollo infantil y del aprendizaje en educación primaria, con atención a la diversidad cultural y socioemocional.\n - Fundamentos de evaluación formativa, diseño universal para el aprendizaje (DUA) y estrategias de adaptación curricular y de apoyo.\n - Diseño y gestión de entornos de aprendizaje inclusivos, uso de tecnologías de apoyo y técnicas de observación y intervención.\nHabilidades:\n - Identificar, registrar y analizar barreras de aprendizaje y necesidades educativas a partir de observación estructurada y evidencias.\n - Diseñar, adaptar y aplicar intervenciones pedagógicas y apoyos individualizados, incluida la figura de sombra, para promover participación y aprendizaje en aula regular.\n - Planificar y coordinar planes de atención individualizada en colaboración con docentes, familias y equipos de apoyo interprofesional.\n - Facilitar la mediación, la comunicación y la interacción en contextos diversos, promoviendo estrategias DUA y uso responsable de tecnologías.\n - Evaluar el progreso estudiantil con instrumentos cualitativos y cuantitativos y ajustar intervenciones con base en evidencia.\nActitudes:\n - Compromiso ético con la dignidad, derechos y bienestar de las personas con discapacidad; ética profesional, confidencialidad y respeto a la diversidad.\n - Sensibilidad intercultural y socioemocional; respeto a la diversidad y a la dignidad de la persona.\n - Enfoque reflexivo y colaborativo; orientación a la mejora continua, investigación-acción y aprendizaje a lo largo de la vida.\n - Tolerancia, empatía y resiliencia para trabajar en entornos educativos complejos y con comunidades escolares; responsabilidad social y compromiso con la inclusión."', NULL); -- @@ -2409,7 +2512,11 @@ INSERT INTO "public"."conversaciones_plan" ("id", "plan_estudio_id", "openai_con ('11d7a0a7-3f30-48d7-b7f2-be72bfc92291', '54760e2e-406d-483a-962d-875b6d3195fd', 'conv_699f9603b24c8193a6fa476e7903599f03fca6853af1a227', 'ACTIVA', '[{"user": "unknown", "fields": ["antecedente_academico"], "prompt": " Mejora este campo: agrega otras posibilidades de estudios previos\n[Campos: Antecedente académico]", "timestamp": "2026-02-26T00:38:28.764Z"}, {"user": "assistant", "message": "Mejora realizada: se ampliaron las posibilidades de antecedentes académicos para el ingreso, agregando Bachillerato técnico, TSU y licenciaturas afines, además de certificaciones y equivalencias por experiencia.", "refusal": false, "timestamp": "2026-02-26T00:38:50.825Z", "recommendations": [{"aplicada": true, "texto_mejora": "Requisito mínimo: Bachillerato o su equivalente. Se aceptan múltiples trayectorias previas para mayor flexibilidad de ingreso:\n- Bachillerato general con orientación en física-matemáticas, tecnológico o ciencias aplicadas.\n- Bachillerato técnico o tecnológico en áreas afines: electrónica, mecánica, automatización, mecatrónica, informática, sistemas, telecomunicaciones, robótica, control, redes, etc.\n- Técnico Superior Universitario (TSU) o títulos técnicos equivalentes en áreas afines a la ingeniería (electrónica, eléctrica, mecatrónica, automatización, sistemas, telecomunicaciones, computación, control).\n- Licenciaturas o ingenierías afines: Informática, Computación, Ingeniería Electrónica, Ingeniería Eléctrica, Ingeniería de Sistemas/Computación, Ingeniería Mecatrónica, Ingeniería en Control y Automatización, Ingeniería en Teleinformática, Física, Matemáticas aplicadas.\n- Certificaciones técnicas relevantes con reconocimiento institucional que cubran fundamentos de matemática, física y programación (p. ej., redes, PLC, seguridad informática) que sean elegibles para convalidación o equivalencia.\n- Experiencia profesional relevante acompañada de convalidaciones académicas según normativa institucional (si aplica).", "campo_afectado": "antecedente_academico"}]}, {"user": "unknown", "fields": ["antecedente_academico"], "prompt": " no agregues las certificaciones técnicas", "timestamp": "2026-02-26T00:40:23.188Z"}, {"user": "assistant", "message": "Actualización realizada: se eliminaron las certificaciones técnicas de las posibles antecedentes académicos y se mantuvo la flexibilidad de ingreso con Bachillerato general, técnico, TSU, licenciaturas afines y experiencia profesional con convalidadiones.", "refusal": false, "timestamp": "2026-02-26T00:40:34.525Z", "recommendations": [{"aplicada": true, "texto_mejora": "Requisito mínimo: Bachillerato o su equivalente. Se aceptan múltiples trayectorias previas para mayor flexibilidad de ingreso:\n- Bachillerato general con orientación en física-matemáticas, tecnológico o ciencias aplicadas.\n- Bachillerato técnico o tecnológico en áreas afines: electrónica, mecánica, automatización, mecatrónica, informática, sistemas, telecomunicaciones, robótica, control, redes, etc.\n- Técnico Superior Universitario (TSU) o títulos técnicos equivalentes en áreas afines a la ingeniería (electrónica, eléctrica, mecatrónica, automatización, sistemas, telecomunicaciones, computación, control).\n- Licenciaturas o ingenierías afines: Informática, Computación, Ingeniería Electrónica, Ingeniería Eléctrica, Ingeniería de Sistemas/Computación, Ingeniería Mecatrónica, Ingeniería en Control y Automatización, Ingeniería en Teleinformática, Física, Matemáticas aplicadas.\n- Experiencia profesional relevante acompañada de convalidaciones académicas según normativa institucional (si aplica).", "campo_afectado": "antecedente_academico"}]}, {"user": "unknown", "fields": [], "prompt": "dime el sentido de la vida\n", "timestamp": "2026-02-26T01:06:40.384Z"}, {"user": "assistant", "message": "No puedo ayudar con preguntas fuera del plan de estudios. Si quieres, puedo ayudarte a mejorar el plan de Ingeniería Cibernética u ofrecerte recomendaciones académicas relacionadas.", "refusal": true, "timestamp": "2026-02-26T01:06:44.298Z", "recommendations": []}, {"user": "unknown", "fields": [], "prompt": "califica éste plan", "timestamp": "2026-02-26T01:07:28.900Z"}, {"user": "assistant", "message": "Calificación del plan: 8/10. Fortalezas: cobertura integral de fundamentos (control, dinámicos), redes y sistemas embebidos; diseño rígido con curso propedéutico; fines de aprendizaje alineados a necesidades industriales (seguridad, automatización); mecanismos de revisión y actualización curricular; estructura de gobernanza clara. Áreas de mejora y recomendaciones: - Mapear resultados de aprendizaje por asignatura mediante una matriz de competencias y niveles de Bloom. - Definir plan de evaluación detallado: rúbricas, ponderaciones, criterios de logro y política de recuperación. - Especificar proyectos integradores y estancias/prácticas con calendario y criterios de evaluación; considerar rutas de especialización (electivas) en áreas como redes industriales, robótica o IoT seguro. - Incluir plan de apoyo académico, tutoría y medidas de inclusión para diversidad y equidad. - Detallar infraestructura de laboratorios y equipamiento, así como planes de mantenimiento. - Vincular indicadores de calidad (titulación, empleabilidad, satisfacción) al proceso de evaluación periódica y acreditación. - Incorporar aspectos de ética, seguridad, cumplimiento normativo y sostenibilidad en los cursos. - Aclarar el mapa semestral (créditos, prerequisitos, cargas) para facilitar la planificación y convalidaciones. Pasos siguientes: generar la matriz de competencias por asignatura, crear guías de evaluación y rúbricas, detallar el plan de proyectos y prácticas, definir rutas electivas, y preparar el plan de calidad/acreditación. Con mejoras, la calificación podría llegar a 9/10 o más, dependiendo de la claridad y trazabilidad de las métricas.", "refusal": false, "timestamp": "2026-02-26T01:07:53.227Z", "recommendations": []}, {"user": "unknown", "fields": [], "prompt": "hola", "timestamp": "2026-02-26T16:55:34.540Z"}, {"user": "assistant", "message": "No puedo ayudar con preguntas fuera del plan de estudio. Si quieres, puedo ayudarte a mejorar el plan de Ingeniería Cibernética u ofrecer recomendaciones académicas relacionadas.", "refusal": true, "timestamp": "2026-02-26T16:55:40.583Z", "recommendations": []}, {"user": "unknown", "fields": [], "prompt": "hola", "timestamp": "2026-02-26T16:56:00.237Z"}, {"user": "assistant", "message": "No puedo ayudar con preguntas que no estén relacionadas con el plan de estudios. Si quieres, puedo ayudarte a mejorar el plan de Ingeniería Cibernética u ofrecer recomendaciones académicas relacionadas.", "refusal": true, "timestamp": "2026-02-26T16:56:05.597Z", "recommendations": []}, {"user": "unknown", "fields": ["vigencia", "diseno_curricular"], "prompt": " mejora la Vigencia y el Diseño curricular ", "timestamp": "2026-02-26T16:57:34.891Z"}, {"user": "assistant", "message": "Actualización realizada: vigencia extendida a 2026-2031 y diseño curricular Flexible para permitir rutas modulares, electivas y adaptación a tecnologías emergentes. Recomendaciones de implementación: definir módulos y rutas de especialización, establecer créditos flexibles y convalidaciones, garantizar gobernanza para ajustes periódicos y mantener alineación con normativas.", "refusal": false, "timestamp": "2026-02-26T16:57:52.885Z", "recommendations": [{"aplicada": true, "texto_mejora": "2026-2031", "campo_afectado": "vigencia"}, {"aplicada": true, "texto_mejora": "Flexible", "campo_afectado": "diseno_curricular"}]}, {"user": "unknown", "fields": ["diseno_curricular"], "prompt": " no me gusta el diseño curricular", "timestamp": "2026-02-26T16:58:54.620Z"}, {"user": "assistant", "message": "Se ha pasado de un diseño rígido a uno flexible para permitir rutas modulares y adaptaciones tecnológicas. Propuesta de implementación en alto nivel:\n- Mantener un núcleo obligatorio (core) con las asignaturas centrales de teoría de control, redes y seguridad, laboratorio y proyectos integradores.\n- Crear rutas de especialización electivas (electivas obligatorias dentro de la ruta) orientadas a: (a) Ciberseguridad de control y redes; (b) Redes industriales e IoT seguro; (c) Automatización y robótica/ingeniería de movimientos; (d) Sistemas embebidos y plataformas de adquisición.\n- Introducir módulos/paquetes de acreditación con créditos asignados para permitir movilidad entre rutas y validación de contenidos emergentes.\n- Establecer un mecanismo de convalidaciones, ingreso progresivo y revisión anual para ajustar rutas según demanda tecnológica y laboral.\n- Definir gobernanza clara (comité curricular, responsables por ruta, procedimientos de cambios) y un cronograma de implementación (primeros semestres del ciclo 2026-2031).\n- Ampliar la transparencia con una matriz de competencias por asignatura, guías de evaluación por ruta y planes de proyectos específicos.\nSi quieres, puedo proponer tres esquemas detallados de diseño curricular Flexible y acompañarte en la generación de la documentación necesaria.", "refusal": false, "timestamp": "2026-02-26T16:59:12.480Z", "recommendations": [{"aplicada": true, "texto_mejora": "Flexible", "campo_afectado": "diseno_curricular"}]}, {"user": "unknown", "fields": ["diseno_curricular"], "prompt": " haz que sea rígido!!", "timestamp": "2026-02-26T16:59:29.626Z"}, {"user": "assistant", "message": "Actualización realizada: se restableció el diseño curricular rígido. Se mantiene el mapa curricular por semestres, la carga horaria fija y las asignaturas obligatorias; se conservarán criterios de evaluación y convalidaciones acordes al régimen rígido.", "refusal": false, "timestamp": "2026-02-26T16:59:38.305Z", "recommendations": [{"aplicada": true, "texto_mejora": "Rígido", "campo_afectado": "diseno_curricular"}]}, {"user": "unknown", "fields": ["vigencia", "propuesta_de_evaluacion_periodica_del_plan_de_estudios"], "prompt": " haz algo :Propuesta de evaluación periódica del plan de estudios", "timestamp": "2026-02-26T22:12:41.135Z"}, {"user": "assistant", "message": "Propuesta de evaluación periódica elaborada. Incluye periodicidad, instrumentos, metodología, criterios de actualización, productos y roles. Puedo convertir esto en una plantilla formal, una matriz de competencias por asignatura y rúbricas de evaluación si lo deseas.", "refusal": false, "timestamp": "2026-02-26T22:13:11.674Z", "recommendations": [{"aplicada": false, "texto_mejora": "2026-2031", "campo_afectado": "vigencia"}, {"aplicada": false, "texto_mejora": "Propuesta de evaluación periódica del plan de estudios\n- Propósito: Asegurar la pertinencia, calidad y actualización del plan de estudios de Ingeniería Cibernética, en alineación con las necesidades del entorno laboral, normativas y avances tecnológicos.\n- Periodicidad\n - Evaluación anual de indicadores clave y revisión de acciones de mejora (rendimiento de estudiantes, resultados de aprendizaje, satisfacción, empleabilidad, uso de laboratorios, recursos).\n - Evaluación integral cada 3 años para revisión profunda del perfil de egreso, mapa curricular, rutas/electivas, políticas de convalidación y gobernanza.\n - Evaluación orientada a acreditación y cumplimiento normativo, según calendarios institucionales y de organismos externos cuando corresponda.\n- Instrumentos e fuentes de datos\n - Resultados de aprendizaje por asignatura con matriz de competencias y niveles de Bloom; rúbricas de evaluación por asignatura.\n - Indicadores de titulación y empleabilidad (tasa de titulación, tiempo hasta la titulación, tasa de empleo en sector relacionados, ocupaciones, ingresos promedio).\n - Encuestas a estudiantes, egresados y empleadores; grupos focales con actores clave (docentes, estudiantes, industria).\n - Análisis de proyectos integradores, prácticas y estancias profesionales; desempeño de laboratorios y proyectos de investigación aplicada.\n - Análisis de infraestructura y recursos (laboratorios, software, hardware, plataformas de simulación) y su disponibilidad.\n - Indicadores de calidad y equidad (retención, diversidad, permanencia, inclusión).\n- Metodología\n - Revisión de evidencias por el Comité Curricular; priorización de acciones mediante una matriz de impacto y factibilidad.\n - Elaboración de Informe de Mejora Curricular anual con plan de acción, responsables, plazos y recursos requeridos.\n - Mesas de trabajo bianuales con docentes, estudiantes, egresados y representantes de la industria para validar propuestas.\n - Plan de implementación y monitoreo de cambios (con cronograma y seguimiento de hitos). \n - Socialización de resultados y resultados de implementación a la comunidad académica y a la institución.\n- Criterios de actualización\n - Pertinencia ante demandas laborales regionales y tendencias tecnológicas (control, redes, IoT seguro, ciberseguridad, sistemas embebidos).\n - Avances en marcos de calidad educativa, normativas y criterios de acreditación.\n - Resultados de evaluaciones y retroalimentación de empleadores y egresados.\n- Productos\n - Informes de mejora curricular anuales; guías de aprendizaje actualizadas; rúbricas y guías de evaluación por ruta; cronograma de implementación de cambios.\n - Planes de capacitación docente y recursos para su ejecución.\n - Actas y resoluciones institucionales que formalicen cambios al plan de estudios.\n- Roles y responsables\n - Comité curricular (presidente, coordinadores por núcleo de conocimiento y responsables de cada ruta).\n - Dirección de la carrera y Secretaría Técnica para recoger datos, coordinar reuniones y gestionar la documentación.\n - Comité de Empleabilidad y Calidad para vinculación con la industria y evaluación de resultados de empleo.\n- Cronograma resumido\n - Año 1: recopilación de datos, revisión de indicadores y propuesta de mejoras menores.\n - Año 2: validación de propuestas, pilotaje de cambios selectivos y actualización de guías docentes.\n - Año 3: evaluación integral, aprobación institucional y despliegue de cambios; retroalimentación para próximos ciclos.\n - A partir de ahí: ciclo anual de revisión, con informes y ajustes continuos.\n- Indicadores de éxito (sugeridos)\n - Porcentaje de asignaturas con rúbricas y matriz de competencias definida.\n - Tasa de titulación y tiempo hasta la titulación.\n - Empleabilidad y calidad de empleo de egresados.\n - Satisfacción de estudiantes y empleadores.\n - Actualización de laboratorios y software acorde a tecnologías actuales.\n - Participación en proyectos de investigación aplicada y estancias.\n- Documentación de salida\n - Actas del comité, informes de mejora curricular, guías de aprendizaje actualizadas, planes de capacitación y cronogramas de implementación.", "campo_afectado": "propuesta_de_evaluacion_periodica_del_plan_de_estudios"}]}, {"user": "unknown", "fields": [], "prompt": "Sentido de la vida", "timestamp": "2026-02-27T15:02:46.476Z"}, {"user": "assistant", "message": "No puedo ayudar con preguntas fuera del plan de estudios. Si quieres, puedo ayudarte a mejorar el plan de Ingeniería Cibernética u ofrecer recomendaciones académicas relacionadas.", "refusal": true, "timestamp": "2026-02-27T15:02:52.347Z", "recommendations": []}, {"user": "unknown", "fields": ["modalidad_educativa"], "prompt": " mejora el Modalidad educativa del plan Licenciatura en DERECHO", "timestamp": "2026-02-27T15:03:22.210Z"}, {"user": "assistant", "message": "No puedo ayudar con preguntas fuera del plan de estudio actual (Ingeniería Cibernética). Si quieres, puedo ayudarte a mejorar el plan de Ingeniería Cibernética o, si proporcionas el plan de Derecho, puedo asesorarte allí.", "refusal": true, "timestamp": "2026-02-27T15:03:34.296Z", "recommendations": [{"aplicada": true, "texto_mejora": "Escolar", "campo_afectado": "modalidad_educativa"}]}, {"user": "unknown", "fields": ["modalidad_educativa"], "prompt": " mejora el Modalidad educativa del plan Licenciatura en cibernética", "timestamp": "2026-02-27T15:03:44.305Z"}, {"user": "assistant", "message": "Actualización realizada: la modalidad educativa pasa de Escolar a Mixta (presencial y en línea). Mantendremos laboratorios presenciales y sesiones prácticas, complementadas con contenidos en línea y evaluación híbrida; se implementará una plataforma LMS y un plan de capacitación docente para la transición.", "refusal": false, "timestamp": "2026-02-27T15:03:55.162Z", "recommendations": [{"aplicada": true, "texto_mejora": "Mixta", "campo_afectado": "modalidad_educativa"}]}]', NULL, '2026-02-26 00:38:27.898635+00', NULL, NULL, 0, 'Hola'), ('19a971bb-9c5d-4454-9c2d-15372a153a8f', '54760e2e-406d-483a-962d-875b6d3195fd', 'conv_69a07c25a8a0819587cabf22f86f9ec206412f4bfeb982b5', 'ACTIVA', '[{"user": "unknown", "fields": [], "prompt": "dame el sentido de la vida!!", "timestamp": "2026-02-26T17:00:22.815Z"}, {"user": "assistant", "message": "No puedo ayudar con esa pregunta; me enfoco en el plan de estudios de Ingeniería Cibernética. ¿Quieres que revisemos algún aspecto del plan?", "refusal": true, "timestamp": "2026-02-26T17:00:30.493Z", "recommendations": []}, {"user": "unknown", "fields": [], "prompt": "califica mi plan y en una frase dime por qué esa calificación!!", "timestamp": "2026-02-26T17:01:02.383Z"}, {"user": "assistant", "message": "Calificación: 8.7/10, porque el plan está bien fundamentado en teoría de control, sistemas y redes con laboratorios y proyectos integradores y una estructura de evaluación clara, pero su diseño rígido podría beneficiarse de mayor flexibilidad curricular y de una actualización continua en ciberseguridad y tecnologías emergentes.", "refusal": false, "timestamp": "2026-02-26T17:01:26.125Z", "recommendations": []}, {"user": "unknown", "fields": [], "prompt": "Mejora la redacción del objetivo general...", "timestamp": "2026-02-26T17:01:47.840Z"}, {"user": "assistant", "message": "Propuesta de redacción mejorada del objetivo general:\nFormar ingenieros cibernéticos con sólidos fundamentos en teoría de control, sistemas dinámicos, redes y seguridad, para diseñar, implementar, evaluar y mantener soluciones de automatización y control distribuido confiables y seguras, aplicando metodologías de simulación, prototipado y análisis de datos, y trabajando de forma ética e colaborativa en entornos industriales y de servicios.\n\nVariantes de redacción (opcional):\n- Breve: Formar ingenieros cibernéticos capaces de diseñar y garantizar la operación de sistemas de control y redes integradas, con énfasis en seguridad y confiabilidad.\n- Enfoque industrial: Preparar profesionales para aplicar, adaptar y gestionar soluciones de automatización y ciberseguridad en entornos industriales y de servicios, con foco en resultados y mejora continua.\n- Enfoque académico/investigación: Desarrollar ingenieros con habilidades para investigar y desarrollar tecnologías de control, redes y seguridad de sistemas, con capacidad de liderar proyectos de innovación.\n\nIndicadores de logro sugeridos (para apoyar la evaluación del objetivo):\n- Dominio de fundamentos en asignaturas clave (exámenes y proyectos de control, redes y seguridad).\n- Capacidades de diseño y simulación de controladores y sistemas embebidos.\n- Integración de redes y medidas de ciberseguridad en proyectos de automatización.\n- Proyectos finales, prácticas profesionales o estancias que demuestren aplicación real y trabajo interdisciplinario.\n- Demostración de responsabilidad ética y comunicación de resultados técnicos.", "refusal": false, "timestamp": "2026-02-26T17:02:13.636Z", "recommendations": []}, {"user": "unknown", "fields": [], "prompt": "¡¡¡hola mundo!!!", "timestamp": "2026-02-26T17:03:28.357Z"}, {"user": "assistant", "message": "Lo siento, no puedo ayudar con ese mensaje; me enfoco en el plan de estudios de Ingeniería Cibernética. ¿Quieres que revisemos algún aspecto del plan de estudios?", "refusal": true, "timestamp": "2026-02-26T17:03:33.424Z", "recommendations": []}, {"user": "unknown", "fields": [], "prompt": "Hola", "timestamp": "2026-02-27T00:57:41.317Z"}, {"user": "assistant", "message": "Hola. Soy el asistente para mejorar el plan de Ingeniería Cibernética. ¿Quieres que revisemos algún aspecto del plan de estudios?", "refusal": true, "timestamp": "2026-02-27T00:57:46.672Z", "recommendations": []}, {"user": "unknown", "fields": ["diseno_curricular"], "prompt": " Diseño curricular mejora ese campo", "timestamp": "2026-02-27T00:59:23.864Z"}, {"user": "assistant", "message": "Se propuso flexibilizar el diseño curricular: rutas de aprendizaje, asignaturas optativas y créditos por competencias, manteniendo núcleos formativos y proyectos para garantizar competencias y empleabilidad.", "refusal": false, "timestamp": "2026-02-27T00:59:35.919Z", "recommendations": [{"aplicada": true, "texto_mejora": "Flexible", "campo_afectado": "diseno_curricular"}]}]', NULL, '2026-02-26 17:00:21.854699+00', NULL, NULL, 0, 'Chat 2026-02-26'), ('a5211b13-2b8f-4fee-83fc-de4381a3ce14', '6d1ad1d6-f34b-45fe-8b7c-3aef45d84901', 'conv_69a1be5099a48195a66e9373bbb41d6402d208dba76150bc', 'ACTIVA', '[{"user": "unknown", "fields": [], "prompt": "Hola", "timestamp": "2026-02-27T15:54:58.020Z"}, {"user": "assistant", "message": "¡Hola! ¿En qué aspectos del Plan de Estudios Ciencias de la Educación (2026) te gustaría que trabajemos? Puedo ayudarte a afinar el perfil de egreso, la estructura curricular, la carga horaria, las unidades didácticas, las estrategias de evaluación, o la implementación de TIC y de inclusión. Dime qué te interesa y te entrego una propuesta concreta.", "refusal": false, "timestamp": "2026-02-27T15:55:08.032Z", "recommendations": []}, {"user": "unknown", "fields": [], "prompt": "De que trata esta carrera?", "timestamp": "2026-02-27T15:55:31.561Z"}, {"user": "assistant", "message": "La carrera Ciencias de la Educación (Licenciatura) forma docentes y profesionales de la educación atendiendo tanto a la teoría como a la práctica educativa. Se centra en: - fundamentos y teorías de la educación; políticas públicas, evaluación e investigación educativa; - diseño curricular y planificación de unidades didácticas; - implementación de estrategias de enseñanza; - uso de TIC; - evaluación y retroalimentación; - liderazgo y gestión de proyectos; - comunicación eficaz y trabajo en equipo; - actitudes de ética profesional, inclusión y equidad. \n\nEnfoque curricular: por competencias, basado en constructivismo sociocultural; incluye aprendizaje basado en proyectos, prácticas docentes, evaluación auténtica y uso de tecnologías; énfasis en diversidad, inclusión y recursos accesibles.\n\nCaracterísticas prácticas: modalidad escolar en Universidad La Salle México; 9 semestres (ciclos), ciclo de 16 semanas cada uno, carga semanal de 22 horas.\n\nSalida y perfil: al terminar podrás diseñar, implementar y evaluar procesos educativos de calidad, investigar problemáticas educativas y proponer soluciones; roles probables incluyen docente, diseñador curricular, coordinador pedagógico y gestor educativo.\n\nIngreso: Bachillerato concluido (preferentemente en ciencias sociales, humanidades o educación) y cumplir requisitos institucionales.", "refusal": false, "timestamp": "2026-02-27T15:55:47.490Z", "recommendations": []}]', NULL, '2026-02-27 15:54:56.927023+00', NULL, NULL, 0, 'Chat 2026-02-27'), - ('1ba17bd9-7db0-4ff2-86d6-318f3baeb187', 'dc286072-c649-43aa-8a2f-aa3ef6166647', 'conv_69a852bfd2c08197b1fc0e6376667832083d0dc74fd730db', 'ACTIVA', '[]', NULL, '2026-03-04 15:41:52.12048+00', NULL, NULL, 0, 'Chat 2026-03-04'); + ('1ba17bd9-7db0-4ff2-86d6-318f3baeb187', 'dc286072-c649-43aa-8a2f-aa3ef6166647', 'conv_69a852bfd2c08197b1fc0e6376667832083d0dc74fd730db', 'ACTIVA', '[]', NULL, '2026-03-04 15:41:52.12048+00', NULL, NULL, 0, 'Chat 2026-03-04'), + ('367857b4-0617-4436-9da6-f871584018a8', 'f35bd838-6df7-4a3b-9fbf-879f9b3e6da9', 'conv_69ab0c44c06c8194b638f87964b69dfb08abe491dc70d55c', 'ACTIVA', '[]', NULL, '2026-03-06 17:17:56.929687+00', NULL, NULL, 0, 'Chat 2026-03-06'), + ('b396e638-cb65-4b68-bd79-8d11d9933f05', '198c763b-9d97-423b-b13a-5713437fc81b', 'conv_69af0612408881939fc5baf9e84e7e5805c39d4cb2f959a7', 'ACTIVA', '[]', NULL, '2026-03-09 17:40:34.481976+00', NULL, NULL, 0, 'Chat 2026-03-09'), + ('0282d698-00f0-4319-8e6b-5fef763949f6', '198c763b-9d97-423b-b13a-5713437fc81b', 'conv_69ab146dbc6c8194aee014fc24efdfeb0eec0071af1d92d3', 'ACTIVA', '[]', NULL, '2026-03-06 17:52:45.896848+00', NULL, NULL, 0, 'Chat 2026-03-06'), + ('c189bd02-8a4a-43ea-b218-c8acd3e2c29d', '26806567-c5ee-404e-8f90-0f0711c21ea0', 'conv_69b035f52c7c8195b03f0f9f9886607e063c4ccb99b17bae', 'ACTIVA', '[]', NULL, '2026-03-10 15:17:09.35379+00', NULL, NULL, 0, 'Chat 2026-03-10'); -- @@ -2432,7 +2539,36 @@ INSERT INTO "public"."notificaciones" ("id", "usuario_id", "tipo", "payload", "l INSERT INTO "public"."plan_mensajes_ia" ("id", "enviado_por", "mensaje", "campos", "respuesta", "is_refusal", "propuesta", "estado", "fecha_creacion", "fecha_actualizacion", "conversacion_plan_id") VALUES ('a478d7e2-8a89-4781-a5d6-6f4eb3b4f205', '00000000-0000-0000-0000-000000000000', 'hola', '{}', '¡Hola! ¿Cómo puedo ayudarte a mejorar el plan de estudios de Químico Farmacéutico Biólogo (2026)? Puedo trabajar aspectos como diseño curricular, resultados de aprendizaje, evaluación, vinculación con la industria, implementación de estrategias de mejora, entre otros.', false, '{"recommendations": []}', 'COMPLETADO', '2026-03-04 15:42:01.918848', '2026-03-04 15:42:01.918848', '1ba17bd9-7db0-4ff2-86d6-318f3baeb187'), - ('8bed5627-57aa-48aa-899b-6b350ee1c911', '00000000-0000-0000-0000-000000000000', ' Mejora este campo Área de estudio ', '{area_de_estudio}', 'Área de estudio mejorada para reflejar el enfoque del plan: Química Farmacéutico-Biológico con énfasis en perfumería, farmacotecnia y cosmética; mayor precisión y alineación con los fines de aprendizaje y perfil de egreso.', false, '{"recommendations": [{"aplicada": true, "texto_mejora": "07 Salud (CMPE 2016). Campo de formación específico: Química Farmacéutica, Farmacotecnia, Cosmética y Perfumería (con énfasis en análisis instrumental, regulación y seguridad sanitaria).", "campo_afectado": "area_de_estudio"}]}', 'COMPLETADO', '2026-03-04 15:42:45.183288', '2026-03-04 15:42:45.183288', '1ba17bd9-7db0-4ff2-86d6-318f3baeb187'); + ('8bed5627-57aa-48aa-899b-6b350ee1c911', '00000000-0000-0000-0000-000000000000', ' Mejora este campo Área de estudio ', '{area_de_estudio}', 'Área de estudio mejorada para reflejar el enfoque del plan: Química Farmacéutico-Biológico con énfasis en perfumería, farmacotecnia y cosmética; mayor precisión y alineación con los fines de aprendizaje y perfil de egreso.', false, '{"recommendations": [{"aplicada": true, "texto_mejora": "07 Salud (CMPE 2016). Campo de formación específico: Química Farmacéutica, Farmacotecnia, Cosmética y Perfumería (con énfasis en análisis instrumental, regulación y seguridad sanitaria).", "campo_afectado": "area_de_estudio"}]}', 'COMPLETADO', '2026-03-04 15:42:45.183288', '2026-03-04 15:42:45.183288', '1ba17bd9-7db0-4ff2-86d6-318f3baeb187'), + ('dc3bcf0e-f7e4-4305-8dcd-7b3483418369', '00000000-0000-0000-0000-000000000000', 'hola', '{}', NULL, false, NULL, 'PROCESANDO', '2026-03-06 17:17:57.665744', '2026-03-06 17:17:57.665744', '367857b4-0617-4436-9da6-f871584018a8'), + ('356355f4-44c9-4690-93ee-3d4b75904a98', '00000000-0000-0000-0000-000000000000', 'hola', '{}', NULL, false, NULL, 'PROCESANDO', '2026-03-06 17:52:46.623751', '2026-03-06 17:52:46.623751', '0282d698-00f0-4319-8e6b-5fef763949f6'), + ('b1efb46d-7ad0-4913-8cdf-89a59dcb245c', '00000000-0000-0000-0000-000000000000', 'hola', '{}', '¡Hola! ¿En qué aspecto del plan de Licenciatura en Educación Especial como sombra te gustaría profundizar? Puedo darte un resumen general, detallar las asignaturas y su distribución por ciclo, describir el perfil de egreso, explicar las prácticas en aula y la evaluación, o resolver dudas específicas.', false, '{"recommendations": []}', 'COMPLETADO', '2026-03-06 19:05:17.788512', '2026-03-06 19:05:17.788512', '0282d698-00f0-4319-8e6b-5fef763949f6'), + ('c46351f2-5490-417b-86d8-703c312eb763', '00000000-0000-0000-0000-000000000000', ' mejora este campo Área de estudio ', '{area_de_estudio}', 'Área de estudio refinada para representar con mayor claridad el enfoque del plan: formación docente, ciencias de la educación y educación inclusiva/atención a la diversidad (con énfasis en educación especial).', false, '{"recommendations": [{"aplicada": false, "texto_mejora": "Formación docente y ciencias de la educación con énfasis en educación inclusiva, atención a la diversidad y educación especial", "campo_afectado": "area_de_estudio"}]}', 'COMPLETADO', '2026-03-06 19:08:55.167357', '2026-03-06 19:08:55.167357', '0282d698-00f0-4319-8e6b-5fef763949f6'), + ('3a193da8-b74b-4206-8754-8b6f822d0be1', '00000000-0000-0000-0000-000000000000', 'hola', '{}', '¡Hola! ¿En qué aspecto del plan Licenciatura en Educación Especial como sombra te gustaría profundizar? Puedo darte un resumen general, detallar asignaturas por ciclo, describir el perfil de egreso, explicar prácticas en aula y evaluación, o resolver dudas específicas.', false, '{"recommendations": []}', 'COMPLETADO', '2026-03-06 19:21:56.357699', '2026-03-06 19:21:56.357699', '0282d698-00f0-4319-8e6b-5fef763949f6'), + ('bf4abb73-7b12-4162-81be-b371fc614a7d', '00000000-0000-0000-0000-000000000000', 'hola', '{}', '¡Hola! ¿En qué aspecto del plan Licenciatura en Educación Especial como sombra te gustaría profundizar? Puedo darte un resumen general, detallar las asignaturas por ciclo, describir el perfil de egreso, explicar prácticas en aula y la evaluación, o resolver dudas específicas.', false, '{"recommendations": []}', 'COMPLETADO', '2026-03-09 14:42:03.896541', '2026-03-09 14:42:03.896541', '0282d698-00f0-4319-8e6b-5fef763949f6'), + ('6fe5b9e7-da26-4bf1-a28a-15976ff54ecd', '00000000-0000-0000-0000-000000000000', 'hola', '{}', '¡Hola! ¿En qué aspecto del plan Licenciatura en Educación Especial como sombra te gustaría profundizar? Puedo darte un resumen general, detallar las asignaturas por ciclo, describir el perfil de egreso, explicar las prácticas en aula y la evaluación, o resolver dudas específicas.', false, '{"recommendations": []}', 'COMPLETADO', '2026-03-09 15:24:11.642923', '2026-03-09 15:24:11.642923', '0282d698-00f0-4319-8e6b-5fef763949f6'), + ('93787d7e-85b6-493b-a176-8da2c19c53b1', '00000000-0000-0000-0000-000000000000', 'hola', '{}', '¡Hola! ¿En qué aspecto del plan Licenciatura en Educación Especial como sombra te gustaría profundizar? Puedo darte un resumen general, detallar las asignaturas por ciclo, describir el perfil de egreso, explicar las prácticas en aula y la evaluación, o resolver dudas específicas.', false, '{"recommendations": []}', 'COMPLETADO', '2026-03-09 15:24:28.274698', '2026-03-09 15:24:28.274698', '0282d698-00f0-4319-8e6b-5fef763949f6'), + ('57adcc8c-97cb-4aae-b8dc-a79e86ab2e79', '00000000-0000-0000-0000-000000000000', ' mejora este campo Perfil de ingreso ', '{perfil_de_ingreso}', 'Perfil de ingreso mejorado para reflejar condiciones académicas ideales y alineadas con el marco normativo y el enfoque inclusivo.', false, '{"recommendations": [{"aplicada": false, "texto_mejora": "Conocimientos previos:\n - Educación media superior (bachillerato) concluida.\n - Bases generales en psicología del desarrollo y didáctica, con preferencia por áreas afines a la educación o ciencias sociales.\n - Conocimiento básico de normatividad educativa y derechos de las personas con discapacidad (nivel introductorio).\n\nHabilidades:\n - Comunicación clara y eficaz, con capacidad de trabajar en equipo e intercambiar información de forma colegiada.\n - Observación sistemática y registro de conductas y procesos de aprendizaje en contextos educativos.\n - Análisis y síntesis de información; manejo básico de herramientas informáticas y plataformas de aprendizaje.\n - Resolución de problemas y toma de decisiones pedagógicas en contextos de aula.\n\nActitudes y aptitudes:\n - Vocación por el trabajo con infancia y adolescencia; empatía, paciencia, tolerancia y resiliencia.\n - Compromiso ético con la inclusión, la dignidad y los derechos de las personas con discapacidad.\n - Sensibilidad hacia la diversidad cultural, funcional y socioemocional; predisposición a la reflexión profesional y mejora continua.\n - Disposición para realizar prácticas en centros educativos y, cuando aplique, movilidad para estancias de campo.\n\nRequisitos de ingreso:\n - Disposición para cursar asignaturas teóricas y prácticas y para registrar evidencias del aprendizaje.\n - Interés por trabajar en entornos inclusivos y con enfoque en la atención a la diversidad.\n\nNotas: se valora experiencia previa en entornos educativos o comunitarios, pero no es requisito indispensable.\n", "campo_afectado": "perfil_de_ingreso"}]}', 'COMPLETADO', '2026-03-09 15:32:08.651463', '2026-03-09 15:32:08.651463', '0282d698-00f0-4319-8e6b-5fef763949f6'), + ('38f2831f-6209-4098-bcae-aa06aee3c404', '00000000-0000-0000-0000-000000000000', 'hola', '{}', '¡Hola! ¿Quieres que te muestre nuevamente el Perfil de ingreso actualizado, o prefieres que revisemos o mejoremos otro campo del plan (Área de estudio, Perfil de egreso, asignaturas, prácticas o evaluación)?', false, '{"recommendations": []}', 'COMPLETADO', '2026-03-09 15:38:51.626784', '2026-03-09 15:38:51.626784', '0282d698-00f0-4319-8e6b-5fef763949f6'), + ('1d0a8266-5272-4520-82a6-094ee49ff798', '00000000-0000-0000-0000-000000000000', 'hola', '{}', '¡Hola! ¿En qué aspecto del plan Licenciatura en Educación Especial como sombra te gustaría trabajar ahora? Puedo darte un resumen general, detallar asignaturas por ciclo, describir el perfil de egreso, explicar prácticas en aula y la evaluación, o ayudarte con dudas específicas.', false, '{"recommendations": []}', 'COMPLETADO', '2026-03-09 15:45:29.469797', '2026-03-09 15:45:29.469797', '0282d698-00f0-4319-8e6b-5fef763949f6'), + ('554f95c1-7621-498c-869c-088c410ea921', '00000000-0000-0000-0000-000000000000', 'hola', '{}', NULL, false, NULL, 'ERROR', '2026-03-09 16:16:14.536464', '2026-03-09 16:16:14.536464', '0282d698-00f0-4319-8e6b-5fef763949f6'), + ('b6715abb-310c-4f8e-b849-1b1ad3597515', '00000000-0000-0000-0000-000000000000', 'hola', '{}', '¡Hola! ¿En qué aspecto del plan Licenciatura en Educación Especial como sombra te gustaría trabajar ahora? Puedo darte un resumen general, detallar las asignaturas por ciclo, describir el perfil de egreso, explicar las prácticas en aula y la evaluación, o resolver dudas específicas.', false, '{"recommendations": []}', 'COMPLETADO', '2026-03-09 16:25:44.756869', '2026-03-09 16:25:44.756869', '0282d698-00f0-4319-8e6b-5fef763949f6'), + ('7dc45817-6a2b-473e-b9d8-2cb8e1f4174d', '00000000-0000-0000-0000-000000000000', 'hola', '{}', '¡Hola! ¿En qué aspecto del plan Licenciatura en Educación Especial como sombra te gustaría avanzar ahora? Puedo darte un resumen general, detallar las asignaturas por ciclo, describir el perfil de egreso, explicar las prácticas en aula y la evaluación, o resolver dudas específicas.', false, '{"recommendations": []}', 'COMPLETADO', '2026-03-09 16:27:08.993044', '2026-03-09 16:27:08.993044', '0282d698-00f0-4319-8e6b-5fef763949f6'), + ('192c9d73-5992-4dc9-a7f3-61ab351664dc', '00000000-0000-0000-0000-000000000000', ' mejora este campo Perfil de egreso ', '{perfil_de_egreso}', 'Perfil de egreso revisado para reflejar el enfoque de sombra y educación inclusiva en educación primaria, con énfasis en competencias, prácticas éticas y colaboración interprofesional.', false, '{"recommendations": [{"aplicada": true, "texto_mejora": "Conocimientos:\n - Marco conceptual de la Educación Especial y modelos de atención a la diversidad, con énfasis en la figura de sombra como mediadora del aprendizaje en educación primaria.\n - Normativa nacional e internacional sobre inclusión educativa, derechos de las personas con discapacidad y derechos humanos aplicados a contextos escolares.\n - Características del desarrollo infantil y del aprendizaje en educación primaria, con atención a la diversidad cultural y socioemocional.\n - Fundamentos de evaluación formativa, diseño universal para el aprendizaje (DUA) y estrategias de adaptación curricular y de apoyo.\n - Diseño y gestión de entornos de aprendizaje inclusivos, uso de tecnologías de apoyo y técnicas de observación y intervención.\nHabilidades:\n - Identificar, registrar y analizar barreras de aprendizaje y necesidades educativas a partir de observación estructurada y evidencias.\n - Diseñar, adaptar y aplicar intervenciones pedagógicas y apoyos individualizados, incluida la figura de sombra, para promover participación y aprendizaje en aula regular.\n - Planificar y coordinar planes de atención individualizada en colaboración con docentes, familias y equipos de apoyo interprofesional.\n - Facilitar la mediación, la comunicación y la interacción en contextos diversos, promoviendo estrategias DUA y uso responsable de tecnologías.\n - Evaluar el progreso estudiantil con instrumentos cualitativos y cuantitativos y ajustar intervenciones con base en evidencia.\nActitudes:\n - Compromiso ético con la dignidad, derechos y bienestar de las personas con discapacidad; ética profesional, confidencialidad y respeto a la diversidad.\n - Sensibilidad intercultural y socioemocional; respeto a la diversidad y a la dignidad de la persona.\n - Enfoque reflexivo y colaborativo; orientación a la mejora continua, investigación-acción y aprendizaje a lo largo de la vida.\n - Tolerancia, empatía y resiliencia para trabajar en entornos educativos complejos y con comunidades escolares; responsabilidad social y compromiso con la inclusión.", "campo_afectado": "perfil_de_egreso"}]}', 'COMPLETADO', '2026-03-09 16:27:30.352565', '2026-03-09 16:27:30.352565', '0282d698-00f0-4319-8e6b-5fef763949f6'), + ('df91b28c-b678-4178-bded-672c033a7cd5', '00000000-0000-0000-0000-000000000000', 'hola', '{}', '¡Hola! ¿En qué aspecto del plan Licenciatura en Educación Especial como sombra te gustaría avanzar ahora? Puedo darte un resumen, detallar las asignaturas por ciclo, describir el perfil de egreso, explicar prácticas en aula o la evaluación. ¿Qué prefieres revisar?', false, '{"recommendations": []}', 'COMPLETADO', '2026-03-09 16:32:18.033594', '2026-03-09 16:32:18.033594', '0282d698-00f0-4319-8e6b-5fef763949f6'), + ('c98ff612-baef-4cd7-978d-57e09be5dbff', '00000000-0000-0000-0000-000000000000', ' mejora este campo Diseño curricular ', '{diseno_curricular}', 'Se actualizó el Diseño curricular para reflejar un enfoque Flexible dentro de la estructura general. Aunque el plan mantiene un núcleo por competencias y la secuencia de 9 semestres, ahora se enfatizan la modularidad, la flexibilidad de itinerarios (con componentes asincrónicos), y la adaptabilidad de evaluaciones y prácticas en el marco de la modalidad mixta.', false, '{"recommendations": [{"aplicada": false, "texto_mejora": "Flexible", "campo_afectado": "diseno_curricular"}]}', 'COMPLETADO', '2026-03-09 16:45:26.06385', '2026-03-09 16:45:26.06385', '0282d698-00f0-4319-8e6b-5fef763949f6'), + ('0331bd78-59c8-476a-9aa0-8685d8dbeaa1', '00000000-0000-0000-0000-000000000000', 'hola', '{}', '¡Hola! ¿Qué aspecto del plan Licenciatura en Educación Especial como sombra te gustaría revisar o mejorar ahora? Puedo darte un resumen general, detallar las asignaturas por ciclo, describir el perfil de egreso, explicar las prácticas en aula y la evaluación, o resolver dudas específicas.', false, '{"recommendations": []}', 'COMPLETADO', '2026-03-09 16:45:47.57064', '2026-03-09 16:45:47.57064', '0282d698-00f0-4319-8e6b-5fef763949f6'), + ('8e0e9f9c-3a95-41a6-a827-0f72d54df0e1', '00000000-0000-0000-0000-000000000000', ' mejora este campoVigencia ', '{vigencia}', 'Se mejoró el campo Vigencia al proporcionar un periodo explícito (2026-2029) y un mecanismo de revisión/renovación.', false, '{"recommendations": [{"aplicada": false, "texto_mejora": "Vigencia prevista: 2026-2029. Revisión anual por el Comité Académico y renovación de vigencia ante cambios normativos o de currículo.", "campo_afectado": "vigencia"}]}', 'COMPLETADO', '2026-03-09 16:46:15.778013', '2026-03-09 16:46:15.778013', '0282d698-00f0-4319-8e6b-5fef763949f6'), + ('c8643a00-7dd3-4d58-a6c5-2eabf13a6ee3', '00000000-0000-0000-0000-000000000000', 'hola', '{}', '¡Hola! ¿En qué campo del plan te gustaría que trabajemos ahora? Puedo ayudarte a mejorar Vigencia, Diseño curricular, Perfil de egreso, Área de estudio, Perfil de ingreso, Prácticas en aula o Evaluación. Dime cuál y te envío una versión optimizada.', false, '{"recommendations": []}', 'COMPLETADO', '2026-03-09 16:51:53.996936', '2026-03-09 16:51:53.996936', '0282d698-00f0-4319-8e6b-5fef763949f6'), + ('ed6d6951-d30f-453a-8bec-bf99c64ff154', '00000000-0000-0000-0000-000000000000', ' mejora este campo Perfil de ingreso ', '{perfil_de_ingreso}', NULL, false, NULL, 'ERROR', '2026-03-09 16:59:07.530481', '2026-03-09 16:59:07.530481', '0282d698-00f0-4319-8e6b-5fef763949f6'), + ('613ca014-d40a-47d1-9516-95288c306584', '00000000-0000-0000-0000-000000000000', 'hola', '{}', '¡Hola! ¿Con qué campo del plan te gustaría avanzar ahora? Puedo ayudarte a ajustar Vigencia, Área de estudio, Perfil de ingreso, Perfil de egreso, Diseño curricular, Prácticas en aula o Evaluación. Dime qué necesitas.', false, '{"recommendations": []}', 'COMPLETADO', '2026-03-09 17:01:30.027219', '2026-03-09 17:01:30.027219', '0282d698-00f0-4319-8e6b-5fef763949f6'), + ('ce1ee1f8-40e0-40d3-806c-32df04e777b4', '00000000-0000-0000-0000-000000000000', ' mejora este campo Área de estudio ', '{area_de_estudio}', 'Área de estudio refinada para reflejar el enfoque inclusivo y la orientación hacia la Educación Especial y la atención a la diversidad en educación primaria.', false, '{"recommendations": [{"aplicada": false, "texto_mejora": "Formación docente y ciencias de la educación, con énfasis en educación inclusiva, atención a la diversidad y educación especial", "campo_afectado": "area_de_estudio"}]}', 'COMPLETADO', '2026-03-09 17:01:50.183421', '2026-03-09 17:01:50.183421', '0282d698-00f0-4319-8e6b-5fef763949f6'), + ('c232c14a-4fca-439b-866e-b4696d047238', '00000000-0000-0000-0000-000000000000', ' mejora este campo Modalidad educativa ', '{modalidad_educativa}', 'Modalidad educativa actualizada a Mixta, destacando la combinación de sesiones presenciales y componentes virtuales para facilitar el aprendizaje práctico, la inclusión y la flexibilidad de entrega de contenidos.', false, '{"recommendations": [{"aplicada": false, "texto_mejora": "Mixta", "campo_afectado": "modalidad_educativa"}]}', 'COMPLETADO', '2026-03-09 17:15:48.038173', '2026-03-09 17:15:48.038173', '0282d698-00f0-4319-8e6b-5fef763949f6'), + ('0bcc6814-3f63-4131-b5fe-add2812b641d', '00000000-0000-0000-0000-000000000000', 'hola', '{}', '¡Hola! ¿En qué puedo ayudarte con la Licenciatura en Educación Especial como sombra? Puedo explicarte el plan de estudios, materias, prácticas de campo, requisitos de ingreso, modalidad mixta y fechas clave.', false, '{"recommendations": []}', 'COMPLETADO', '2026-03-09 17:40:35.303153', '2026-03-09 17:40:35.303153', 'b396e638-cb65-4b68-bd79-8d11d9933f05'), + ('aab548d2-c2eb-40ff-82d5-ba63b177693c', '00000000-0000-0000-0000-000000000000', 'hola', '{}', '¡Hola! Listo para ayudarte con la Licenciatura en Educación Especial como sombra. ¿Qué parte del plan te gustaría revisar: plan de estudios y asignaturas, modalidad mixta, requisitos de ingreso o fechas clave?', false, '{"recommendations": []}', 'COMPLETADO', '2026-03-09 17:47:07.455442', '2026-03-09 17:47:07.455442', 'b396e638-cb65-4b68-bd79-8d11d9933f05'), + ('8ba99a07-d91e-4a49-9a5a-77702fdf08dc', '00000000-0000-0000-0000-000000000000', 'hola', '{}', '¡Hola! ¿En qué aspecto del plan de la Licenciatura en Educación Especial como sombra te gustaría profundizar? Puedo ayudarte con el plan de estudios, asignaturas, prácticas de campo, requisitos de ingreso, modalidad mixta o fechas clave.', false, '{"recommendations": []}', 'COMPLETADO', '2026-03-09 18:44:16.556976', '2026-03-09 18:44:16.556976', 'b396e638-cb65-4b68-bd79-8d11d9933f05'), + ('199d5049-e655-4286-8d6b-106e9990e06f', '00000000-0000-0000-0000-000000000000', ' nejora este campoÁrea de estudio ', '{area_de_estudio}', 'Se mejoró el Área de estudio para mayor claridad y alineación con CMPE 2016: ahora se especifica el subcampo ''Derecho'' dentro del campo amplio ''Ciencias Sociales y Jurídicas''.', false, '{"recommendations": [{"aplicada": false, "texto_mejora": "Ciencias Sociales y Jurídicas (Derecho)", "campo_afectado": "area_de_estudio"}]}', 'COMPLETADO', '2026-03-10 15:17:10.182065', '2026-03-10 15:17:10.182065', 'c189bd02-8a4a-43ea-b218-c8acd3e2c29d'), + ('006bc4f1-ed6c-46c1-b237-d4cbfce0cf4f', '00000000-0000-0000-0000-000000000000', 'hola', '{}', '¡Hola! ¿Qué parte de la Licenciatura en Educación Especial como sombra quieres revisar primero? Puedo ayudarte con el plan de estudios, asignaturas, prácticas de campo, requisitos de ingreso, modalidad mixta y fechas clave.', false, '{"recommendations": []}', 'COMPLETADO', '2026-03-10 16:35:18.523729', '2026-03-10 16:35:18.523729', 'b396e638-cb65-4b68-bd79-8d11d9933f05'); -- @@ -2588,4 +2724,6 @@ SELECT pg_catalog.setval('"supabase_functions"."hooks_id_seq"', 11, true); -- PostgreSQL database dump complete -- +-- \unrestrict DaVvt3hgGt3BD9jg955NN2CttMO78cFzF8jbj1XddaF61tZgOOnRAqbvdZa3xNt + RESET ALL; From f038ad49143abecd9aa18da6cf3435db72537cb9 Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 20:32:23 +0000 Subject: [PATCH 14/38] =?UTF-8?q?A=C3=B1adir=20.gitea/workflows/update-typ?= =?UTF-8?q?es.yml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/update-types.yml | 41 +++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 .gitea/workflows/update-types.yml diff --git a/.gitea/workflows/update-types.yml b/.gitea/workflows/update-types.yml new file mode 100644 index 0000000..20fd040 --- /dev/null +++ b/.gitea/workflows/update-types.yml @@ -0,0 +1,41 @@ +name: Update database types + +on: + schedule: + - cron: "0 0 * * *" + +jobs: + update: + runs-on: ubuntu-latest + + env: + SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }} + PROJECT_REF: ${{ secrets.SUPABASE_PROJECT_ID }} + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: actions/setup-node@v4 + with: + node-version: 22 + + - run: npm run update-types + + - name: Check for changes + id: git_status + run: | + echo "status=$(git status -s)" >> $GITHUB_OUTPUT + + - name: Commit changes + if: ${{ contains(steps.git_status.outputs.status, ' ') }} + run: | + git add supabase/functions/_shared/database.types.ts + git config user.email "ci@gitea.local" + git config user.name "gitea-actions" + git commit -m "Update database types" + + - name: Push changes + if: ${{ contains(steps.git_status.outputs.status, ' ') }} + run: git push \ No newline at end of file From 8dc1b8dee15c144780693333d4cbee8f046e608c Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 14:35:44 -0600 Subject: [PATCH 15/38] fix: remove invisible character from Json type definition --- supabase/functions/_shared/database.types.ts | 1612 ++++++++++++++++++ 1 file changed, 1612 insertions(+) diff --git a/supabase/functions/_shared/database.types.ts b/supabase/functions/_shared/database.types.ts index a889116..2536c93 100644 --- a/supabase/functions/_shared/database.types.ts +++ b/supabase/functions/_shared/database.types.ts @@ -1610,3 +1610,1615 @@ export const Constants = { }, } as const +export type Json = + | string + | number + | boolean + | null + | { [key: string]: Json | undefined } + | Json[] + +export type Database = { + graphql_public: { + Tables: { + [_ in never]: never + } + Views: { + [_ in never]: never + } + Functions: { + graphql: { + Args: { + extensions?: Json + operationName?: string + query?: string + variables?: Json + } + Returns: Json + } + } + Enums: { + [_ in never]: never + } + CompositeTypes: { + [_ in never]: never + } + } + public: { + Tables: { + archivos: { + Row: { + bytes: number | null + id: string + mime_type: string | null + nombre: string + notas: string | null + openai_file_id: string | null + ruta_storage: string + subido_en: string + subido_por: string | null + temporal: boolean + } + Insert: { + bytes?: number | null + id?: string + mime_type?: string | null + nombre: string + notas?: string | null + openai_file_id?: string | null + ruta_storage: string + subido_en?: string + subido_por?: string | null + temporal?: boolean + } + Update: { + bytes?: number | null + id?: string + mime_type?: string | null + nombre?: string + notas?: string | null + openai_file_id?: string | null + ruta_storage?: string + subido_en?: string + subido_por?: string | null + temporal?: boolean + } + Relationships: [ + { + foreignKeyName: "archivos_subido_por_fkey" + columns: ["subido_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] + }, + ] + } + asignatura_mensajes_ia: { + Row: { + campos: string[] + conversacion_asignatura_id: string + enviado_por: string + estado: Database["public"]["Enums"]["estado_mensaje_ia"] + fecha_actualizacion: string + fecha_creacion: string + id: string + is_refusal: boolean + mensaje: string + propuesta: Json | null + respuesta: string | null + } + Insert: { + campos?: string[] + conversacion_asignatura_id: string + enviado_por?: string + estado?: Database["public"]["Enums"]["estado_mensaje_ia"] + fecha_actualizacion?: string + fecha_creacion?: string + id?: string + is_refusal?: boolean + mensaje: string + propuesta?: Json | null + respuesta?: string | null + } + Update: { + campos?: string[] + conversacion_asignatura_id?: string + enviado_por?: string + estado?: Database["public"]["Enums"]["estado_mensaje_ia"] + fecha_actualizacion?: string + fecha_creacion?: string + id?: string + is_refusal?: boolean + mensaje?: string + propuesta?: Json | null + respuesta?: string | null + } + Relationships: [ + { + foreignKeyName: "asignatura_mensajes_ia_conversacion_asignatura_id_fkey" + columns: ["conversacion_asignatura_id"] + isOneToOne: false + referencedRelation: "conversaciones_asignatura" + referencedColumns: ["id"] + }, + ] + } + asignaturas: { + Row: { + actualizado_en: string + actualizado_por: string | null + asignatura_hash: string | null + codigo: string | null + contenido_tematico: Json + 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 + horas_academicas: number | null + horas_independientes: number | null + id: string + linea_plan_id: string | null + meta_origen: Json + nombre: string + numero_ciclo: number | null + orden_celda: number | null + plan_estudio_id: string + tipo: Database["public"]["Enums"]["tipo_asignatura"] + tipo_origen: Database["public"]["Enums"]["tipo_origen"] | null + } + Insert: { + actualizado_en?: string + actualizado_por?: string | null + asignatura_hash?: string | null + codigo?: string | null + contenido_tematico?: Json + 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 + horas_academicas?: number | null + horas_independientes?: number | null + id?: string + linea_plan_id?: string | null + meta_origen?: Json + nombre: string + numero_ciclo?: number | null + orden_celda?: number | null + plan_estudio_id: string + tipo?: Database["public"]["Enums"]["tipo_asignatura"] + tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null + } + Update: { + actualizado_en?: string + actualizado_por?: string | null + asignatura_hash?: string | null + codigo?: string | null + contenido_tematico?: Json + 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 + horas_academicas?: number | null + horas_independientes?: number | null + id?: string + linea_plan_id?: string | null + meta_origen?: Json + nombre?: string + numero_ciclo?: number | null + orden_celda?: number | null + plan_estudio_id?: string + tipo?: Database["public"]["Enums"]["tipo_asignatura"] + tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null + } + Relationships: [ + { + foreignKeyName: "asignaturas_actualizado_por_fkey" + columns: ["actualizado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] + }, + { + foreignKeyName: "asignaturas_creado_por_fkey" + columns: ["creado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] + }, + { + foreignKeyName: "asignaturas_estructura_id_fkey" + columns: ["estructura_id"] + isOneToOne: false + referencedRelation: "estructuras_asignatura" + referencedColumns: ["id"] + }, + { + foreignKeyName: "asignaturas_estructura_id_fkey" + columns: ["estructura_id"] + isOneToOne: false + referencedRelation: "plantilla_asignatura" + referencedColumns: ["estructura_id"] + }, + { + foreignKeyName: "asignaturas_linea_plan_fk_compuesta" + columns: ["linea_plan_id", "plan_estudio_id"] + isOneToOne: false + referencedRelation: "lineas_plan" + referencedColumns: ["id", "plan_estudio_id"] + }, + { + foreignKeyName: "asignaturas_plan_estudio_id_fkey" + columns: ["plan_estudio_id"] + isOneToOne: false + referencedRelation: "planes_estudio" + referencedColumns: ["id"] + }, + { + foreignKeyName: "asignaturas_plan_estudio_id_fkey" + columns: ["plan_estudio_id"] + isOneToOne: false + referencedRelation: "plantilla_plan" + referencedColumns: ["plan_estudio_id"] + }, + ] + } + bibliografia_asignatura: { + Row: { + actualizado_en: string + asignatura_id: string + biblioteca_item_id: string | null + cita: string + creado_en: string + creado_por: string | null + id: string + tipo: Database["public"]["Enums"]["tipo_bibliografia"] + tipo_fuente: Database["public"]["Enums"]["tipo_fuente_bibliografia"] + } + Insert: { + actualizado_en?: string + asignatura_id: string + biblioteca_item_id?: string | null + cita: string + creado_en?: string + creado_por?: string | null + id?: string + tipo: Database["public"]["Enums"]["tipo_bibliografia"] + tipo_fuente?: Database["public"]["Enums"]["tipo_fuente_bibliografia"] + } + Update: { + actualizado_en?: string + asignatura_id?: string + biblioteca_item_id?: string | null + cita?: string + creado_en?: string + creado_por?: string | null + id?: string + tipo?: Database["public"]["Enums"]["tipo_bibliografia"] + tipo_fuente?: Database["public"]["Enums"]["tipo_fuente_bibliografia"] + } + Relationships: [ + { + foreignKeyName: "bibliografia_asignatura_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "asignaturas" + referencedColumns: ["id"] + }, + { + foreignKeyName: "bibliografia_asignatura_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "plantilla_asignatura" + referencedColumns: ["asignatura_id"] + }, + { + foreignKeyName: "bibliografia_asignatura_creado_por_fkey" + columns: ["creado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] + }, + ] + } + cambios_asignatura: { + Row: { + asignatura_id: string + cambiado_en: string + cambiado_por: string | null + campo: string | null + fuente: Database["public"]["Enums"]["fuente_cambio"] | null + id: string + interaccion_ia_id: string | null + tipo: Database["public"]["Enums"]["tipo_cambio"] + valor_anterior: Json | null + valor_nuevo: Json | null + } + Insert: { + asignatura_id: string + cambiado_en?: string + cambiado_por?: string | null + campo?: string | null + fuente?: Database["public"]["Enums"]["fuente_cambio"] | null + id?: string + interaccion_ia_id?: string | null + tipo: Database["public"]["Enums"]["tipo_cambio"] + valor_anterior?: Json | null + valor_nuevo?: Json | null + } + Update: { + asignatura_id?: string + cambiado_en?: string + cambiado_por?: string | null + campo?: string | null + fuente?: Database["public"]["Enums"]["fuente_cambio"] | null + id?: string + interaccion_ia_id?: string | null + tipo?: Database["public"]["Enums"]["tipo_cambio"] + valor_anterior?: Json | null + valor_nuevo?: Json | null + } + Relationships: [ + { + foreignKeyName: "cambios_asignatura_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "asignaturas" + referencedColumns: ["id"] + }, + { + foreignKeyName: "cambios_asignatura_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "plantilla_asignatura" + referencedColumns: ["asignatura_id"] + }, + { + foreignKeyName: "cambios_asignatura_cambiado_por_fkey" + columns: ["cambiado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] + }, + ] + } + cambios_plan: { + Row: { + cambiado_en: string + cambiado_por: string | null + campo: string | null + id: string + plan_estudio_id: string + response_id: string | null + tipo: Database["public"]["Enums"]["tipo_cambio"] + valor_anterior: Json | null + valor_nuevo: Json | null + } + Insert: { + cambiado_en?: string + cambiado_por?: string | null + campo?: string | null + id?: string + plan_estudio_id: string + response_id?: string | null + tipo: Database["public"]["Enums"]["tipo_cambio"] + valor_anterior?: Json | null + valor_nuevo?: Json | null + } + Update: { + cambiado_en?: string + cambiado_por?: string | null + campo?: string | null + id?: string + plan_estudio_id?: string + response_id?: string | null + tipo?: Database["public"]["Enums"]["tipo_cambio"] + valor_anterior?: Json | null + valor_nuevo?: Json | null + } + Relationships: [ + { + foreignKeyName: "cambios_plan_cambiado_por_fkey" + columns: ["cambiado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] + }, + ] + } + carreras: { + Row: { + activa: boolean + actualizado_en: string + clave_sep: string | null + creado_en: string + facultad_id: string + id: string + nombre: string + nombre_corto: string | null + } + Insert: { + activa?: boolean + actualizado_en?: string + clave_sep?: string | null + creado_en?: string + facultad_id: string + id?: string + nombre: string + nombre_corto?: string | null + } + Update: { + activa?: boolean + actualizado_en?: string + clave_sep?: string | null + creado_en?: string + facultad_id?: string + id?: string + nombre?: string + nombre_corto?: string | null + } + Relationships: [ + { + foreignKeyName: "carreras_facultad_id_fkey" + columns: ["facultad_id"] + isOneToOne: false + referencedRelation: "facultades" + referencedColumns: ["id"] + }, + ] + } + conversaciones_asignatura: { + Row: { + archivado_en: string | null + archivado_por: string | null + asignatura_id: string + conversacion_json: Json + creado_en: string + creado_por: string | null + estado: Database["public"]["Enums"]["estado_conversacion"] + id: string + intento_archivado: number + openai_conversation_id: string + } + Insert: { + archivado_en?: string | null + archivado_por?: string | null + asignatura_id: string + conversacion_json?: Json + creado_en?: string + creado_por?: string | null + estado?: Database["public"]["Enums"]["estado_conversacion"] + id?: string + intento_archivado?: number + openai_conversation_id: string + } + Update: { + archivado_en?: string | null + archivado_por?: string | null + asignatura_id?: string + conversacion_json?: Json + creado_en?: string + creado_por?: string | null + estado?: Database["public"]["Enums"]["estado_conversacion"] + id?: string + intento_archivado?: number + openai_conversation_id?: string + } + Relationships: [ + { + foreignKeyName: "conversaciones_asignatura_archivado_por_fkey" + columns: ["archivado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] + }, + { + foreignKeyName: "conversaciones_asignatura_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "asignaturas" + referencedColumns: ["id"] + }, + { + foreignKeyName: "conversaciones_asignatura_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "plantilla_asignatura" + referencedColumns: ["asignatura_id"] + }, + { + foreignKeyName: "conversaciones_asignatura_creado_por_fkey" + columns: ["creado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] + }, + ] + } + conversaciones_plan: { + Row: { + archivado_en: string | null + archivado_por: string | null + conversacion_json: Json + creado_en: string + creado_por: string | null + estado: Database["public"]["Enums"]["estado_conversacion"] + id: string + intento_archivado: number + nombre: string | null + openai_conversation_id: string + plan_estudio_id: string + } + Insert: { + archivado_en?: string | null + archivado_por?: string | null + conversacion_json?: Json + creado_en?: string + creado_por?: string | null + estado?: Database["public"]["Enums"]["estado_conversacion"] + id?: string + intento_archivado?: number + nombre?: string | null + openai_conversation_id: string + plan_estudio_id: string + } + Update: { + archivado_en?: string | null + archivado_por?: string | null + conversacion_json?: Json + creado_en?: string + creado_por?: string | null + estado?: Database["public"]["Enums"]["estado_conversacion"] + id?: string + intento_archivado?: number + nombre?: string | null + openai_conversation_id?: string + plan_estudio_id?: string + } + Relationships: [ + { + foreignKeyName: "conversaciones_plan_archivado_por_fkey" + columns: ["archivado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] + }, + { + foreignKeyName: "conversaciones_plan_creado_por_fkey" + columns: ["creado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] + }, + { + foreignKeyName: "conversaciones_plan_plan_estudio_id_fkey" + columns: ["plan_estudio_id"] + isOneToOne: false + referencedRelation: "planes_estudio" + referencedColumns: ["id"] + }, + { + foreignKeyName: "conversaciones_plan_plan_estudio_id_fkey" + columns: ["plan_estudio_id"] + isOneToOne: false + referencedRelation: "plantilla_plan" + referencedColumns: ["plan_estudio_id"] + }, + ] + } + estados_plan: { + Row: { + clave: string + es_final: boolean + etiqueta: string + id: string + orden: number + } + Insert: { + clave: string + es_final?: boolean + etiqueta: string + id?: string + orden?: number + } + Update: { + clave?: string + es_final?: boolean + etiqueta?: string + id?: string + orden?: number + } + Relationships: [] + } + estructuras_asignatura: { + Row: { + actualizado_en: string + creado_en: string + definicion: Json + id: string + nombre: string + template_id: string | null + tipo: Database["public"]["Enums"]["tipo_estructura_plan"] | null + } + Insert: { + actualizado_en?: string + creado_en?: string + definicion?: Json + id?: string + nombre: string + template_id?: string | null + tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] | null + } + Update: { + actualizado_en?: string + creado_en?: string + definicion?: Json + id?: string + nombre?: string + template_id?: string | null + tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] | null + } + Relationships: [] + } + estructuras_plan: { + Row: { + actualizado_en: string + creado_en: string + definicion: Json + id: string + nombre: string + template_id: string | null + tipo: Database["public"]["Enums"]["tipo_estructura_plan"] + } + Insert: { + actualizado_en?: string + creado_en?: string + definicion?: Json + id?: string + nombre: string + template_id?: string | null + tipo: Database["public"]["Enums"]["tipo_estructura_plan"] + } + Update: { + actualizado_en?: string + creado_en?: string + definicion?: Json + id?: string + nombre?: string + template_id?: string | null + tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] + } + Relationships: [] + } + facultades: { + Row: { + actualizado_en: string + color: string | null + creado_en: string + icono: string | null + id: string + nombre: string + nombre_corto: string | null + } + Insert: { + actualizado_en?: string + color?: string | null + creado_en?: string + icono?: string | null + id?: string + nombre: string + nombre_corto?: string | null + } + Update: { + actualizado_en?: string + color?: string | null + creado_en?: string + icono?: string | null + id?: string + nombre?: string + nombre_corto?: string | null + } + Relationships: [] + } + interacciones_ia: { + Row: { + aceptada: boolean + asignatura_id: string | null + conversacion_id: string | null + creado_en: string + id: string + ids_archivos: Json + ids_vector_store: Json + modelo: string | null + plan_estudio_id: string | null + prompt: Json + respuesta: Json + rutas_storage: Json + temperatura: number | null + tipo: Database["public"]["Enums"]["tipo_interaccion_ia"] + usuario_id: string | null + } + Insert: { + aceptada?: boolean + asignatura_id?: string | null + conversacion_id?: string | null + creado_en?: string + id?: string + ids_archivos?: Json + ids_vector_store?: Json + modelo?: string | null + plan_estudio_id?: string | null + prompt?: Json + respuesta?: Json + rutas_storage?: Json + temperatura?: number | null + tipo: Database["public"]["Enums"]["tipo_interaccion_ia"] + usuario_id?: string | null + } + Update: { + aceptada?: boolean + asignatura_id?: string | null + conversacion_id?: string | null + creado_en?: string + id?: string + ids_archivos?: Json + ids_vector_store?: Json + modelo?: string | null + plan_estudio_id?: string | null + prompt?: Json + respuesta?: Json + rutas_storage?: Json + temperatura?: number | null + tipo?: Database["public"]["Enums"]["tipo_interaccion_ia"] + usuario_id?: string | null + } + Relationships: [ + { + foreignKeyName: "interacciones_ia_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "asignaturas" + referencedColumns: ["id"] + }, + { + foreignKeyName: "interacciones_ia_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "plantilla_asignatura" + referencedColumns: ["asignatura_id"] + }, + { + foreignKeyName: "interacciones_ia_plan_estudio_id_fkey" + columns: ["plan_estudio_id"] + isOneToOne: false + referencedRelation: "planes_estudio" + referencedColumns: ["id"] + }, + { + foreignKeyName: "interacciones_ia_plan_estudio_id_fkey" + columns: ["plan_estudio_id"] + isOneToOne: false + referencedRelation: "plantilla_plan" + referencedColumns: ["plan_estudio_id"] + }, + { + foreignKeyName: "interacciones_ia_usuario_id_fkey" + columns: ["usuario_id"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] + }, + ] + } + lineas_plan: { + Row: { + actualizado_en: string + area: string | null + creado_en: string + id: string + nombre: string + orden: number + plan_estudio_id: string + } + Insert: { + actualizado_en?: string + area?: string | null + creado_en?: string + id?: string + nombre: string + orden?: number + plan_estudio_id: string + } + Update: { + actualizado_en?: string + area?: string | null + creado_en?: string + id?: string + nombre?: string + orden?: number + plan_estudio_id?: string + } + Relationships: [ + { + foreignKeyName: "lineas_plan_plan_estudio_id_fkey" + columns: ["plan_estudio_id"] + isOneToOne: false + referencedRelation: "planes_estudio" + referencedColumns: ["id"] + }, + { + foreignKeyName: "lineas_plan_plan_estudio_id_fkey" + columns: ["plan_estudio_id"] + isOneToOne: false + referencedRelation: "plantilla_plan" + referencedColumns: ["plan_estudio_id"] + }, + ] + } + notificaciones: { + Row: { + creado_en: string + id: string + leida: boolean + leida_en: string | null + payload: Json + tipo: Database["public"]["Enums"]["tipo_notificacion"] + usuario_id: string + } + Insert: { + creado_en?: string + id?: string + leida?: boolean + leida_en?: string | null + payload?: Json + tipo: Database["public"]["Enums"]["tipo_notificacion"] + usuario_id: string + } + Update: { + creado_en?: string + id?: string + leida?: boolean + leida_en?: string | null + payload?: Json + tipo?: Database["public"]["Enums"]["tipo_notificacion"] + usuario_id?: string + } + Relationships: [ + { + foreignKeyName: "notificaciones_usuario_id_fkey" + columns: ["usuario_id"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] + }, + ] + } + plan_mensajes_ia: { + Row: { + campos: string[] + conversacion_plan_id: string + enviado_por: string + estado: Database["public"]["Enums"]["estado_mensaje_ia"] + fecha_actualizacion: string + fecha_creacion: string + id: string + is_refusal: boolean + mensaje: string + propuesta: Json | null + respuesta: string | null + } + Insert: { + campos?: string[] + conversacion_plan_id: string + enviado_por?: string + estado?: Database["public"]["Enums"]["estado_mensaje_ia"] + fecha_actualizacion?: string + fecha_creacion?: string + id?: string + is_refusal?: boolean + mensaje: string + propuesta?: Json | null + respuesta?: string | null + } + Update: { + campos?: string[] + conversacion_plan_id?: string + enviado_por?: string + estado?: Database["public"]["Enums"]["estado_mensaje_ia"] + fecha_actualizacion?: string + fecha_creacion?: string + id?: string + is_refusal?: boolean + mensaje?: string + propuesta?: Json | null + respuesta?: string | null + } + Relationships: [ + { + foreignKeyName: "plan_mensajes_ia_conversacion_plan_id_fkey" + columns: ["conversacion_plan_id"] + isOneToOne: false + referencedRelation: "conversaciones_plan" + referencedColumns: ["id"] + }, + ] + } + planes_estudio: { + Row: { + activo: boolean + actualizado_en: string + actualizado_por: string | null + carrera_id: string + creado_en: string + creado_por: string | null + datos: Json + estado_actual_id: string | null + estructura_id: string + id: string + meta_origen: Json + nivel: Database["public"]["Enums"]["nivel_plan_estudio"] + nombre: string + nombre_search: string | null + numero_ciclos: number + plan_hash: string | null + tipo_ciclo: Database["public"]["Enums"]["tipo_ciclo"] + tipo_origen: Database["public"]["Enums"]["tipo_origen"] | null + } + Insert: { + activo?: boolean + actualizado_en?: string + actualizado_por?: string | null + carrera_id: string + creado_en?: string + creado_por?: string | null + datos?: Json + estado_actual_id?: string | null + estructura_id: string + id?: string + meta_origen?: Json + nivel: Database["public"]["Enums"]["nivel_plan_estudio"] + nombre: string + nombre_search?: string | null + numero_ciclos: number + plan_hash?: string | null + tipo_ciclo: Database["public"]["Enums"]["tipo_ciclo"] + tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null + } + Update: { + activo?: boolean + actualizado_en?: string + actualizado_por?: string | null + carrera_id?: string + creado_en?: string + creado_por?: string | null + datos?: Json + estado_actual_id?: string | null + estructura_id?: string + id?: string + meta_origen?: Json + nivel?: Database["public"]["Enums"]["nivel_plan_estudio"] + nombre?: string + nombre_search?: string | null + numero_ciclos?: number + plan_hash?: string | null + tipo_ciclo?: Database["public"]["Enums"]["tipo_ciclo"] + tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null + } + Relationships: [ + { + foreignKeyName: "planes_estudio_actualizado_por_fkey" + columns: ["actualizado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] + }, + { + foreignKeyName: "planes_estudio_carrera_id_fkey" + columns: ["carrera_id"] + isOneToOne: false + referencedRelation: "carreras" + referencedColumns: ["id"] + }, + { + foreignKeyName: "planes_estudio_creado_por_fkey" + columns: ["creado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] + }, + { + foreignKeyName: "planes_estudio_estado_actual_id_fkey" + columns: ["estado_actual_id"] + isOneToOne: false + referencedRelation: "estados_plan" + referencedColumns: ["id"] + }, + { + foreignKeyName: "planes_estudio_estructura_id_fkey" + columns: ["estructura_id"] + isOneToOne: false + referencedRelation: "estructuras_plan" + referencedColumns: ["id"] + }, + { + foreignKeyName: "planes_estudio_estructura_id_fkey" + columns: ["estructura_id"] + isOneToOne: false + referencedRelation: "plantilla_plan" + referencedColumns: ["estructura_id"] + }, + ] + } + responsables_asignatura: { + Row: { + asignatura_id: string + creado_en: string + id: string + rol: Database["public"]["Enums"]["rol_responsable_asignatura"] + usuario_id: string + } + Insert: { + asignatura_id: string + creado_en?: string + id?: string + rol?: Database["public"]["Enums"]["rol_responsable_asignatura"] + usuario_id: string + } + Update: { + asignatura_id?: string + creado_en?: string + id?: string + rol?: Database["public"]["Enums"]["rol_responsable_asignatura"] + usuario_id?: string + } + Relationships: [ + { + foreignKeyName: "responsables_asignatura_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "asignaturas" + referencedColumns: ["id"] + }, + { + foreignKeyName: "responsables_asignatura_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "plantilla_asignatura" + referencedColumns: ["asignatura_id"] + }, + { + foreignKeyName: "responsables_asignatura_usuario_id_fkey" + columns: ["usuario_id"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] + }, + ] + } + roles: { + Row: { + clave: string + descripcion: string | null + id: string + nombre: string + } + Insert: { + clave: string + descripcion?: string | null + id?: string + nombre: string + } + Update: { + clave?: string + descripcion?: string | null + id?: string + nombre?: string + } + Relationships: [] + } + tareas_revision: { + Row: { + asignado_a: string + completado_en: string | null + creado_en: string + estado_id: string | null + estatus: Database["public"]["Enums"]["estado_tarea_revision"] + fecha_limite: string | null + id: string + plan_estudio_id: string + rol_id: string | null + } + Insert: { + asignado_a: string + completado_en?: string | null + creado_en?: string + estado_id?: string | null + estatus?: Database["public"]["Enums"]["estado_tarea_revision"] + fecha_limite?: string | null + id?: string + plan_estudio_id: string + rol_id?: string | null + } + Update: { + asignado_a?: string + completado_en?: string | null + creado_en?: string + estado_id?: string | null + estatus?: Database["public"]["Enums"]["estado_tarea_revision"] + fecha_limite?: string | null + id?: string + plan_estudio_id?: string + rol_id?: string | null + } + Relationships: [ + { + foreignKeyName: "tareas_revision_asignado_a_fkey" + columns: ["asignado_a"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] + }, + { + foreignKeyName: "tareas_revision_estado_id_fkey" + columns: ["estado_id"] + isOneToOne: false + referencedRelation: "estados_plan" + referencedColumns: ["id"] + }, + { + foreignKeyName: "tareas_revision_plan_estudio_id_fkey" + columns: ["plan_estudio_id"] + isOneToOne: false + referencedRelation: "planes_estudio" + referencedColumns: ["id"] + }, + { + foreignKeyName: "tareas_revision_plan_estudio_id_fkey" + columns: ["plan_estudio_id"] + isOneToOne: false + referencedRelation: "plantilla_plan" + referencedColumns: ["plan_estudio_id"] + }, + { + foreignKeyName: "tareas_revision_rol_id_fkey" + columns: ["rol_id"] + isOneToOne: false + referencedRelation: "roles" + referencedColumns: ["id"] + }, + ] + } + transiciones_estado_plan: { + Row: { + creado_en: string + desde_estado_id: string + hacia_estado_id: string + id: string + rol_permitido_id: string + } + Insert: { + creado_en?: string + desde_estado_id: string + hacia_estado_id: string + id?: string + rol_permitido_id: string + } + Update: { + creado_en?: string + desde_estado_id?: string + hacia_estado_id?: string + id?: string + rol_permitido_id?: string + } + Relationships: [ + { + foreignKeyName: "transiciones_estado_plan_desde_estado_id_fkey" + columns: ["desde_estado_id"] + isOneToOne: false + referencedRelation: "estados_plan" + referencedColumns: ["id"] + }, + { + foreignKeyName: "transiciones_estado_plan_hacia_estado_id_fkey" + columns: ["hacia_estado_id"] + isOneToOne: false + referencedRelation: "estados_plan" + referencedColumns: ["id"] + }, + { + foreignKeyName: "transiciones_estado_plan_rol_permitido_id_fkey" + columns: ["rol_permitido_id"] + isOneToOne: false + referencedRelation: "roles" + referencedColumns: ["id"] + }, + ] + } + usuarios_app: { + Row: { + actualizado_en: string + creado_en: string + email: string | null + externo: boolean + id: string + nombre_completo: string | null + } + Insert: { + actualizado_en?: string + creado_en?: string + email?: string | null + externo?: boolean + id: string + nombre_completo?: string | null + } + Update: { + actualizado_en?: string + creado_en?: string + email?: string | null + externo?: boolean + id?: string + nombre_completo?: string | null + } + Relationships: [] + } + usuarios_roles: { + Row: { + carrera_id: string | null + creado_en: string + facultad_id: string | null + id: string + rol_id: string + usuario_id: string + } + Insert: { + carrera_id?: string | null + creado_en?: string + facultad_id?: string | null + id?: string + rol_id: string + usuario_id: string + } + Update: { + carrera_id?: string | null + creado_en?: string + facultad_id?: string | null + id?: string + rol_id?: string + usuario_id?: string + } + Relationships: [ + { + foreignKeyName: "usuarios_roles_carrera_id_fkey" + columns: ["carrera_id"] + isOneToOne: false + referencedRelation: "carreras" + referencedColumns: ["id"] + }, + { + foreignKeyName: "usuarios_roles_facultad_id_fkey" + columns: ["facultad_id"] + isOneToOne: false + referencedRelation: "facultades" + referencedColumns: ["id"] + }, + { + foreignKeyName: "usuarios_roles_rol_id_fkey" + columns: ["rol_id"] + isOneToOne: false + referencedRelation: "roles" + referencedColumns: ["id"] + }, + { + foreignKeyName: "usuarios_roles_usuario_id_fkey" + columns: ["usuario_id"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] + }, + ] + } + vector_stores: { + Row: { + creado_en: string + creado_por: string | null + id: string + nombre: string + openai_vector_id: string | null + } + Insert: { + creado_en?: string + creado_por?: string | null + id?: string + nombre: string + openai_vector_id?: string | null + } + Update: { + creado_en?: string + creado_por?: string | null + id?: string + nombre?: string + openai_vector_id?: string | null + } + Relationships: [ + { + foreignKeyName: "vector_stores_creado_por_fkey" + columns: ["creado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] + }, + ] + } + } + Views: { + plantilla_asignatura: { + Row: { + asignatura_id: string | null + estructura_id: string | null + template_id: string | null + } + Relationships: [] + } + plantilla_plan: { + Row: { + estructura_id: string | null + plan_estudio_id: string | null + template_id: string | null + } + Relationships: [] + } + } + Functions: { + append_conversacion_asignatura: { + Args: { p_append: Json; p_id: string } + Returns: undefined + } + append_conversacion_plan: { + Args: { p_append: Json; p_id: string } + Returns: undefined + } + unaccent: { Args: { "": string }; Returns: string } + unaccent_immutable: { Args: { "": string }; Returns: string } + } + Enums: { + estado_asignatura: "borrador" | "revisada" | "aprobada" | "generando" + estado_conversacion: "ACTIVA" | "ARCHIVANDO" | "ARCHIVADA" | "ERROR" + estado_mensaje_ia: "PROCESANDO" | "COMPLETADO" | "ERROR" + estado_tarea_revision: "PENDIENTE" | "COMPLETADA" | "OMITIDA" + fuente_cambio: "HUMANO" | "IA" + nivel_plan_estudio: + | "Licenciatura" + | "Maestría" + | "Doctorado" + | "Especialidad" + | "Diplomado" + | "Otro" + puesto_tipo: + | "vicerrector" + | "director_facultad" + | "secretario_academico" + | "jefe_carrera" + | "profesor" + | "lci" + rol_responsable_asignatura: "PROFESOR_RESPONSABLE" | "COAUTOR" | "REVISOR" + tipo_asignatura: "OBLIGATORIA" | "OPTATIVA" | "TRONCAL" | "OTRA" + tipo_bibliografia: "BASICA" | "COMPLEMENTARIA" + tipo_cambio: + | "ACTUALIZACION_CAMPO" + | "ACTUALIZACION_MAPA" + | "TRANSICION_ESTADO" + | "OTRO" + | "CREACION" + | "ACTUALIZACION" + tipo_ciclo: "Semestre" | "Cuatrimestre" | "Trimestre" | "Otro" + tipo_estructura_plan: "CURRICULAR" | "NO_CURRICULAR" + tipo_fuente_bibliografia: "MANUAL" | "BIBLIOTECA" + tipo_interaccion_ia: "GENERAR" | "MEJORAR_SECCION" | "CHAT" | "OTRA" + tipo_notificacion: + | "PLAN_ASIGNADO" + | "ESTADO_CAMBIADO" + | "TAREA_ASIGNADA" + | "COMENTARIO" + | "OTRA" + tipo_origen: + | "MANUAL" + | "IA" + | "CLONADO_INTERNO" + | "CLONADO_TRADICIONAL" + | "OTRO" + } + CompositeTypes: { + [_ in never]: never + } + } +} + +type DatabaseWithoutInternals = Omit + +type DefaultSchema = DatabaseWithoutInternals[Extract] + +export type Tables< + DefaultSchemaTableNameOrOptions extends + | keyof (DefaultSchema["Tables"] & DefaultSchema["Views"]) + | { schema: keyof DatabaseWithoutInternals }, + TableName extends DefaultSchemaTableNameOrOptions extends { + schema: keyof DatabaseWithoutInternals + } + ? keyof (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] & + DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Views"]) + : never = never, +> = DefaultSchemaTableNameOrOptions extends { + schema: keyof DatabaseWithoutInternals +} + ? (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] & + DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Views"])[TableName] extends { + Row: infer R + } + ? R + : never + : DefaultSchemaTableNameOrOptions extends keyof (DefaultSchema["Tables"] & + DefaultSchema["Views"]) + ? (DefaultSchema["Tables"] & + DefaultSchema["Views"])[DefaultSchemaTableNameOrOptions] extends { + Row: infer R + } + ? R + : never + : never + +export type TablesInsert< + DefaultSchemaTableNameOrOptions extends + | keyof DefaultSchema["Tables"] + | { schema: keyof DatabaseWithoutInternals }, + TableName extends DefaultSchemaTableNameOrOptions extends { + schema: keyof DatabaseWithoutInternals + } + ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] + : never = never, +> = DefaultSchemaTableNameOrOptions extends { + schema: keyof DatabaseWithoutInternals +} + ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends { + Insert: infer I + } + ? I + : never + : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"] + ? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends { + Insert: infer I + } + ? I + : never + : never + +export type TablesUpdate< + DefaultSchemaTableNameOrOptions extends + | keyof DefaultSchema["Tables"] + | { schema: keyof DatabaseWithoutInternals }, + TableName extends DefaultSchemaTableNameOrOptions extends { + schema: keyof DatabaseWithoutInternals + } + ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] + : never = never, +> = DefaultSchemaTableNameOrOptions extends { + schema: keyof DatabaseWithoutInternals +} + ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends { + Update: infer U + } + ? U + : never + : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"] + ? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends { + Update: infer U + } + ? U + : never + : never + +export type Enums< + DefaultSchemaEnumNameOrOptions extends + | keyof DefaultSchema["Enums"] + | { schema: keyof DatabaseWithoutInternals }, + EnumName extends DefaultSchemaEnumNameOrOptions extends { + schema: keyof DatabaseWithoutInternals + } + ? keyof DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"] + : never = never, +> = DefaultSchemaEnumNameOrOptions extends { + schema: keyof DatabaseWithoutInternals +} + ? DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"][EnumName] + : DefaultSchemaEnumNameOrOptions extends keyof DefaultSchema["Enums"] + ? DefaultSchema["Enums"][DefaultSchemaEnumNameOrOptions] + : never + +export type CompositeTypes< + PublicCompositeTypeNameOrOptions extends + | keyof DefaultSchema["CompositeTypes"] + | { schema: keyof DatabaseWithoutInternals }, + CompositeTypeName extends PublicCompositeTypeNameOrOptions extends { + schema: keyof DatabaseWithoutInternals + } + ? keyof DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"] + : never = never, +> = PublicCompositeTypeNameOrOptions extends { + schema: keyof DatabaseWithoutInternals +} + ? DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"][CompositeTypeName] + : PublicCompositeTypeNameOrOptions extends keyof DefaultSchema["CompositeTypes"] + ? DefaultSchema["CompositeTypes"][PublicCompositeTypeNameOrOptions] + : never + +export const Constants = { + graphql_public: { + Enums: {}, + }, + public: { + Enums: { + estado_asignatura: ["borrador", "revisada", "aprobada", "generando"], + estado_conversacion: ["ACTIVA", "ARCHIVANDO", "ARCHIVADA", "ERROR"], + estado_mensaje_ia: ["PROCESANDO", "COMPLETADO", "ERROR"], + estado_tarea_revision: ["PENDIENTE", "COMPLETADA", "OMITIDA"], + fuente_cambio: ["HUMANO", "IA"], + nivel_plan_estudio: [ + "Licenciatura", + "Maestría", + "Doctorado", + "Especialidad", + "Diplomado", + "Otro", + ], + puesto_tipo: [ + "vicerrector", + "director_facultad", + "secretario_academico", + "jefe_carrera", + "profesor", + "lci", + ], + rol_responsable_asignatura: [ + "PROFESOR_RESPONSABLE", + "COAUTOR", + "REVISOR", + ], + tipo_asignatura: ["OBLIGATORIA", "OPTATIVA", "TRONCAL", "OTRA"], + tipo_bibliografia: ["BASICA", "COMPLEMENTARIA"], + tipo_cambio: [ + "ACTUALIZACION_CAMPO", + "ACTUALIZACION_MAPA", + "TRANSICION_ESTADO", + "OTRO", + "CREACION", + "ACTUALIZACION", + ], + tipo_ciclo: ["Semestre", "Cuatrimestre", "Trimestre", "Otro"], + tipo_estructura_plan: ["CURRICULAR", "NO_CURRICULAR"], + tipo_fuente_bibliografia: ["MANUAL", "BIBLIOTECA"], + tipo_interaccion_ia: ["GENERAR", "MEJORAR_SECCION", "CHAT", "OTRA"], + tipo_notificacion: [ + "PLAN_ASIGNADO", + "ESTADO_CAMBIADO", + "TAREA_ASIGNADA", + "COMENTARIO", + "OTRA", + ], + tipo_origen: [ + "MANUAL", + "IA", + "CLONADO_INTERNO", + "CLONADO_TRADICIONAL", + "OTRO", + ], + }, + }, +} as const + From 8409001587d10489d33c5a35746d59df6e5e1688 Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 14:45:09 -0600 Subject: [PATCH 16/38] Implement feature X to enhance user experience and fix bug Y in module Z --- supabase/functions/_shared/database.types.ts | 4052 ++++++------------ 1 file changed, 1230 insertions(+), 2822 deletions(-) diff --git a/supabase/functions/_shared/database.types.ts b/supabase/functions/_shared/database.types.ts index 1fbfecb..d905d96 100644 --- a/supabase/functions/_shared/database.types.ts +++ b/supabase/functions/_shared/database.types.ts @@ -1,3162 +1,1571 @@ -export type Json = - | string - | number - | boolean - | null - | { [key: string]: Json | undefined } - | Json[] - -export type Database = { - graphql_public: { - Tables: { - [_ in never]: never - } - Views: { - [_ in never]: never - } - Functions: { - graphql: { - Args: { - extensions?: Json - operationName?: string - query?: string - variables?: Json - } - Returns: Json - } - } - Enums: { - [_ in never]: never - } - CompositeTypes: { - [_ in never]: never - } - } - public: { - Tables: { - archivos: { - Row: { - bytes: number | null - id: string - mime_type: string | null - nombre: string - notas: string | null - openai_file_id: string | null - ruta_storage: string - subido_en: string - subido_por: string | null - temporal: boolean - } - Insert: { - bytes?: number | null - id?: string - mime_type?: string | null - nombre: string - notas?: string | null - openai_file_id?: string | null - ruta_storage: string - subido_en?: string - subido_por?: string | null - temporal?: boolean - } - Update: { - bytes?: number | null - id?: string - mime_type?: string | null - nombre?: string - notas?: string | null - openai_file_id?: string | null - ruta_storage?: string - subido_en?: string - subido_por?: string | null - temporal?: boolean - } - Relationships: [ - { - foreignKeyName: "archivos_subido_por_fkey" - columns: ["subido_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] - }, - ] - } - asignatura_mensajes_ia: { - Row: { - campos: string[] - conversacion_asignatura_id: string - enviado_por: string - estado: Database["public"]["Enums"]["estado_mensaje_ia"] - fecha_actualizacion: string - fecha_creacion: string - id: string - is_refusal: boolean - mensaje: string - propuesta: Json | null - respuesta: string | null - } - Insert: { - campos?: string[] - conversacion_asignatura_id: string - enviado_por?: string - estado?: Database["public"]["Enums"]["estado_mensaje_ia"] - fecha_actualizacion?: string - fecha_creacion?: string - id?: string - is_refusal?: boolean - mensaje: string - propuesta?: Json | null - respuesta?: string | null - } - Update: { - campos?: string[] - conversacion_asignatura_id?: string - enviado_por?: string - estado?: Database["public"]["Enums"]["estado_mensaje_ia"] - fecha_actualizacion?: string - fecha_creacion?: string - id?: string - is_refusal?: boolean - mensaje?: string - propuesta?: Json | null - respuesta?: string | null - } - Relationships: [ - { - foreignKeyName: "asignatura_mensajes_ia_conversacion_asignatura_id_fkey" - columns: ["conversacion_asignatura_id"] - isOneToOne: false - referencedRelation: "conversaciones_asignatura" - referencedColumns: ["id"] - }, - ] - } - asignaturas: { - Row: { - actualizado_en: string - actualizado_por: string | null - asignatura_hash: string | null - codigo: string | null - contenido_tematico: Json - 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 - horas_academicas: number | null - horas_independientes: number | null - id: string - linea_plan_id: string | null - meta_origen: Json - nombre: string - numero_ciclo: number | null - orden_celda: number | null - plan_estudio_id: string - tipo: Database["public"]["Enums"]["tipo_asignatura"] - tipo_origen: Database["public"]["Enums"]["tipo_origen"] | null - } - Insert: { - actualizado_en?: string - actualizado_por?: string | null - asignatura_hash?: string | null - codigo?: string | null - contenido_tematico?: Json - 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 - horas_academicas?: number | null - horas_independientes?: number | null - id?: string - linea_plan_id?: string | null - meta_origen?: Json - nombre: string - numero_ciclo?: number | null - orden_celda?: number | null - plan_estudio_id: string - tipo?: Database["public"]["Enums"]["tipo_asignatura"] - tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null - } - Update: { - actualizado_en?: string - actualizado_por?: string | null - asignatura_hash?: string | null - codigo?: string | null - contenido_tematico?: Json - 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 - horas_academicas?: number | null - horas_independientes?: number | null - id?: string - linea_plan_id?: string | null - meta_origen?: Json - nombre?: string - numero_ciclo?: number | null - orden_celda?: number | null - plan_estudio_id?: string - tipo?: Database["public"]["Enums"]["tipo_asignatura"] - tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null - } - Relationships: [ - { - foreignKeyName: "asignaturas_actualizado_por_fkey" - columns: ["actualizado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] - }, - { - foreignKeyName: "asignaturas_creado_por_fkey" - columns: ["creado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] - }, - { - foreignKeyName: "asignaturas_estructura_id_fkey" - columns: ["estructura_id"] - isOneToOne: false - referencedRelation: "estructuras_asignatura" - referencedColumns: ["id"] - }, - { - foreignKeyName: "asignaturas_estructura_id_fkey" - columns: ["estructura_id"] - isOneToOne: false - referencedRelation: "plantilla_asignatura" - referencedColumns: ["estructura_id"] - }, - { - foreignKeyName: "asignaturas_linea_plan_fk_compuesta" - columns: ["linea_plan_id", "plan_estudio_id"] - isOneToOne: false - referencedRelation: "lineas_plan" - referencedColumns: ["id", "plan_estudio_id"] - }, - { - foreignKeyName: "asignaturas_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] - isOneToOne: false - referencedRelation: "planes_estudio" - referencedColumns: ["id"] - }, - { - foreignKeyName: "asignaturas_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] - isOneToOne: false - referencedRelation: "plantilla_plan" - referencedColumns: ["plan_estudio_id"] - }, - ] - } - bibliografia_asignatura: { - Row: { - actualizado_en: string - asignatura_id: string - biblioteca_item_id: string | null - cita: string - creado_en: string - creado_por: string | null - id: string - tipo: Database["public"]["Enums"]["tipo_bibliografia"] - tipo_fuente: Database["public"]["Enums"]["tipo_fuente_bibliografia"] - } - Insert: { - actualizado_en?: string - asignatura_id: string - biblioteca_item_id?: string | null - cita: string - creado_en?: string - creado_por?: string | null - id?: string - tipo: Database["public"]["Enums"]["tipo_bibliografia"] - tipo_fuente?: Database["public"]["Enums"]["tipo_fuente_bibliografia"] - } - Update: { - actualizado_en?: string - asignatura_id?: string - biblioteca_item_id?: string | null - cita?: string - creado_en?: string - creado_por?: string | null - id?: string - tipo?: Database["public"]["Enums"]["tipo_bibliografia"] - tipo_fuente?: Database["public"]["Enums"]["tipo_fuente_bibliografia"] - } - Relationships: [ - { - foreignKeyName: "bibliografia_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "asignaturas" - referencedColumns: ["id"] - }, - { - foreignKeyName: "bibliografia_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "plantilla_asignatura" - referencedColumns: ["asignatura_id"] - }, - { - foreignKeyName: "bibliografia_asignatura_creado_por_fkey" - columns: ["creado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] - }, - ] - } - cambios_asignatura: { - Row: { - asignatura_id: string - cambiado_en: string - cambiado_por: string | null - campo: string | null - fuente: Database["public"]["Enums"]["fuente_cambio"] | null - id: string - interaccion_ia_id: string | null - tipo: Database["public"]["Enums"]["tipo_cambio"] - valor_anterior: Json | null - valor_nuevo: Json | null - } - Insert: { - asignatura_id: string - cambiado_en?: string - cambiado_por?: string | null - campo?: string | null - fuente?: Database["public"]["Enums"]["fuente_cambio"] | null - id?: string - interaccion_ia_id?: string | null - tipo: Database["public"]["Enums"]["tipo_cambio"] - valor_anterior?: Json | null - valor_nuevo?: Json | null - } - Update: { - asignatura_id?: string - cambiado_en?: string - cambiado_por?: string | null - campo?: string | null - fuente?: Database["public"]["Enums"]["fuente_cambio"] | null - id?: string - interaccion_ia_id?: string | null - tipo?: Database["public"]["Enums"]["tipo_cambio"] - valor_anterior?: Json | null - valor_nuevo?: Json | null - } - Relationships: [ - { - foreignKeyName: "cambios_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "asignaturas" - referencedColumns: ["id"] - }, - { - foreignKeyName: "cambios_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "plantilla_asignatura" - referencedColumns: ["asignatura_id"] - }, - { - foreignKeyName: "cambios_asignatura_cambiado_por_fkey" - columns: ["cambiado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] - }, - ] - } - cambios_plan: { - Row: { - cambiado_en: string - cambiado_por: string | null - campo: string | null - id: string - plan_estudio_id: string - response_id: string | null - tipo: Database["public"]["Enums"]["tipo_cambio"] - valor_anterior: Json | null - valor_nuevo: Json | null - } - Insert: { - cambiado_en?: string - cambiado_por?: string | null - campo?: string | null - id?: string - plan_estudio_id: string - response_id?: string | null - tipo: Database["public"]["Enums"]["tipo_cambio"] - valor_anterior?: Json | null - valor_nuevo?: Json | null - } - Update: { - cambiado_en?: string - cambiado_por?: string | null - campo?: string | null - id?: string - plan_estudio_id?: string - response_id?: string | null - tipo?: Database["public"]["Enums"]["tipo_cambio"] - valor_anterior?: Json | null - valor_nuevo?: Json | null - } - Relationships: [ - { - foreignKeyName: "cambios_plan_cambiado_por_fkey" - columns: ["cambiado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] - }, - ] - } - carreras: { - Row: { - activa: boolean - actualizado_en: string - clave_sep: string | null - creado_en: string - facultad_id: string - id: string - nombre: string - nombre_corto: string | null - } - Insert: { - activa?: boolean - actualizado_en?: string - clave_sep?: string | null - creado_en?: string - facultad_id: string - id?: string - nombre: string - nombre_corto?: string | null - } - Update: { - activa?: boolean - actualizado_en?: string - clave_sep?: string | null - creado_en?: string - facultad_id?: string - id?: string - nombre?: string - nombre_corto?: string | null - } - Relationships: [ - { - foreignKeyName: "carreras_facultad_id_fkey" - columns: ["facultad_id"] - isOneToOne: false - referencedRelation: "facultades" - referencedColumns: ["id"] - }, - ] - } - conversaciones_asignatura: { - Row: { - archivado_en: string | null - archivado_por: string | null - asignatura_id: string - conversacion_json: Json - creado_en: string - creado_por: string | null - estado: Database["public"]["Enums"]["estado_conversacion"] - id: string - intento_archivado: number - openai_conversation_id: string - } - Insert: { - archivado_en?: string | null - archivado_por?: string | null - asignatura_id: string - conversacion_json?: Json - creado_en?: string - creado_por?: string | null - estado?: Database["public"]["Enums"]["estado_conversacion"] - id?: string - intento_archivado?: number - openai_conversation_id: string - } - Update: { - archivado_en?: string | null - archivado_por?: string | null - asignatura_id?: string - conversacion_json?: Json - creado_en?: string - creado_por?: string | null - estado?: Database["public"]["Enums"]["estado_conversacion"] - id?: string - intento_archivado?: number - openai_conversation_id?: string - } - Relationships: [ - { - foreignKeyName: "conversaciones_asignatura_archivado_por_fkey" - columns: ["archivado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] - }, - { - foreignKeyName: "conversaciones_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "asignaturas" - referencedColumns: ["id"] - }, - { - foreignKeyName: "conversaciones_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "plantilla_asignatura" - referencedColumns: ["asignatura_id"] - }, - { - foreignKeyName: "conversaciones_asignatura_creado_por_fkey" - columns: ["creado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] - }, - ] - } - conversaciones_plan: { - Row: { - archivado_en: string | null - archivado_por: string | null - conversacion_json: Json - creado_en: string - creado_por: string | null - estado: Database["public"]["Enums"]["estado_conversacion"] - id: string - intento_archivado: number - nombre: string | null - openai_conversation_id: string - plan_estudio_id: string - } - Insert: { - archivado_en?: string | null - archivado_por?: string | null - conversacion_json?: Json - creado_en?: string - creado_por?: string | null - estado?: Database["public"]["Enums"]["estado_conversacion"] - id?: string - intento_archivado?: number - nombre?: string | null - openai_conversation_id: string - plan_estudio_id: string - } - Update: { - archivado_en?: string | null - archivado_por?: string | null - conversacion_json?: Json - creado_en?: string - creado_por?: string | null - estado?: Database["public"]["Enums"]["estado_conversacion"] - id?: string - intento_archivado?: number - nombre?: string | null - openai_conversation_id?: string - plan_estudio_id?: string - } - Relationships: [ - { - foreignKeyName: "conversaciones_plan_archivado_por_fkey" - columns: ["archivado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] - }, - { - foreignKeyName: "conversaciones_plan_creado_por_fkey" - columns: ["creado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] - }, - { - foreignKeyName: "conversaciones_plan_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] - isOneToOne: false - referencedRelation: "planes_estudio" - referencedColumns: ["id"] - }, - { - foreignKeyName: "conversaciones_plan_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] - isOneToOne: false - referencedRelation: "plantilla_plan" - referencedColumns: ["plan_estudio_id"] - }, - ] - } - estados_plan: { - Row: { - clave: string - es_final: boolean - etiqueta: string - id: string - orden: number - } - Insert: { - clave: string - es_final?: boolean - etiqueta: string - id?: string - orden?: number - } - Update: { - clave?: string - es_final?: boolean - etiqueta?: string - id?: string - orden?: number - } - Relationships: [] - } - estructuras_asignatura: { - Row: { - actualizado_en: string - creado_en: string - definicion: Json - id: string - nombre: string - template_id: string | null - tipo: Database["public"]["Enums"]["tipo_estructura_plan"] | null - } - Insert: { - actualizado_en?: string - creado_en?: string - definicion?: Json - id?: string - nombre: string - template_id?: string | null - tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] | null - } - Update: { - actualizado_en?: string - creado_en?: string - definicion?: Json - id?: string - nombre?: string - template_id?: string | null - tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] | null - } - Relationships: [] - } - estructuras_plan: { - Row: { - actualizado_en: string - creado_en: string - definicion: Json - id: string - nombre: string - template_id: string | null - tipo: Database["public"]["Enums"]["tipo_estructura_plan"] - } - Insert: { - actualizado_en?: string - creado_en?: string - definicion?: Json - id?: string - nombre: string - template_id?: string | null - tipo: Database["public"]["Enums"]["tipo_estructura_plan"] - } - Update: { - actualizado_en?: string - creado_en?: string - definicion?: Json - id?: string - nombre?: string - template_id?: string | null - tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] - } - Relationships: [] - } - facultades: { - Row: { - actualizado_en: string - color: string | null - creado_en: string - icono: string | null - id: string - nombre: string - nombre_corto: string | null - } - Insert: { - actualizado_en?: string - color?: string | null - creado_en?: string - icono?: string | null - id?: string - nombre: string - nombre_corto?: string | null - } - Update: { - actualizado_en?: string - color?: string | null - creado_en?: string - icono?: string | null - id?: string - nombre?: string - nombre_corto?: string | null - } - Relationships: [] - } - interacciones_ia: { - Row: { - aceptada: boolean - asignatura_id: string | null - conversacion_id: string | null - creado_en: string - id: string - ids_archivos: Json - ids_vector_store: Json - modelo: string | null - plan_estudio_id: string | null - prompt: Json - respuesta: Json - rutas_storage: Json - temperatura: number | null - tipo: Database["public"]["Enums"]["tipo_interaccion_ia"] - usuario_id: string | null - } - Insert: { - aceptada?: boolean - asignatura_id?: string | null - conversacion_id?: string | null - creado_en?: string - id?: string - ids_archivos?: Json - ids_vector_store?: Json - modelo?: string | null - plan_estudio_id?: string | null - prompt?: Json - respuesta?: Json - rutas_storage?: Json - temperatura?: number | null - tipo: Database["public"]["Enums"]["tipo_interaccion_ia"] - usuario_id?: string | null - } - Update: { - aceptada?: boolean - asignatura_id?: string | null - conversacion_id?: string | null - creado_en?: string - id?: string - ids_archivos?: Json - ids_vector_store?: Json - modelo?: string | null - plan_estudio_id?: string | null - prompt?: Json - respuesta?: Json - rutas_storage?: Json - temperatura?: number | null - tipo?: Database["public"]["Enums"]["tipo_interaccion_ia"] - usuario_id?: string | null - } - Relationships: [ - { - foreignKeyName: "interacciones_ia_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "asignaturas" - referencedColumns: ["id"] - }, - { - foreignKeyName: "interacciones_ia_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "plantilla_asignatura" - referencedColumns: ["asignatura_id"] - }, - { - foreignKeyName: "interacciones_ia_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] - isOneToOne: false - referencedRelation: "planes_estudio" - referencedColumns: ["id"] - }, - { - foreignKeyName: "interacciones_ia_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] - isOneToOne: false - referencedRelation: "plantilla_plan" - referencedColumns: ["plan_estudio_id"] - }, - { - foreignKeyName: "interacciones_ia_usuario_id_fkey" - columns: ["usuario_id"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] - }, - ] - } - lineas_plan: { - Row: { - actualizado_en: string - area: string | null - creado_en: string - id: string - nombre: string - orden: number - plan_estudio_id: string - } - Insert: { - actualizado_en?: string - area?: string | null - creado_en?: string - id?: string - nombre: string - orden?: number - plan_estudio_id: string - } - Update: { - actualizado_en?: string - area?: string | null - creado_en?: string - id?: string - nombre?: string - orden?: number - plan_estudio_id?: string - } - Relationships: [ - { - foreignKeyName: "lineas_plan_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] - isOneToOne: false - referencedRelation: "planes_estudio" - referencedColumns: ["id"] - }, - { - foreignKeyName: "lineas_plan_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] - isOneToOne: false - referencedRelation: "plantilla_plan" - referencedColumns: ["plan_estudio_id"] - }, - ] - } - notificaciones: { - Row: { - creado_en: string - id: string - leida: boolean - leida_en: string | null - payload: Json - tipo: Database["public"]["Enums"]["tipo_notificacion"] - usuario_id: string - } - Insert: { - creado_en?: string - id?: string - leida?: boolean - leida_en?: string | null - payload?: Json - tipo: Database["public"]["Enums"]["tipo_notificacion"] - usuario_id: string - } - Update: { - creado_en?: string - id?: string - leida?: boolean - leida_en?: string | null - payload?: Json - tipo?: Database["public"]["Enums"]["tipo_notificacion"] - usuario_id?: string - } - Relationships: [ - { - foreignKeyName: "notificaciones_usuario_id_fkey" - columns: ["usuario_id"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] - }, - ] - } - plan_mensajes_ia: { - Row: { - campos: string[] - conversacion_plan_id: string - enviado_por: string - estado: Database["public"]["Enums"]["estado_mensaje_ia"] - fecha_actualizacion: string - fecha_creacion: string - id: string - is_refusal: boolean - mensaje: string - propuesta: Json | null - respuesta: string | null - } - Insert: { - campos?: string[] - conversacion_plan_id: string - enviado_por?: string - estado?: Database["public"]["Enums"]["estado_mensaje_ia"] - fecha_actualizacion?: string - fecha_creacion?: string - id?: string - is_refusal?: boolean - mensaje: string - propuesta?: Json | null - respuesta?: string | null - } - Update: { - campos?: string[] - conversacion_plan_id?: string - enviado_por?: string - estado?: Database["public"]["Enums"]["estado_mensaje_ia"] - fecha_actualizacion?: string - fecha_creacion?: string - id?: string - is_refusal?: boolean - mensaje?: string - propuesta?: Json | null - respuesta?: string | null - } - Relationships: [ - { - foreignKeyName: "plan_mensajes_ia_conversacion_plan_id_fkey" - columns: ["conversacion_plan_id"] - isOneToOne: false - referencedRelation: "conversaciones_plan" - referencedColumns: ["id"] - }, - ] - } - planes_estudio: { - Row: { - activo: boolean - actualizado_en: string - actualizado_por: string | null - carrera_id: string - creado_en: string - creado_por: string | null - datos: Json - estado_actual_id: string | null - estructura_id: string - id: string - meta_origen: Json - nivel: Database["public"]["Enums"]["nivel_plan_estudio"] - nombre: string - nombre_search: string | null - numero_ciclos: number - plan_hash: string | null - tipo_ciclo: Database["public"]["Enums"]["tipo_ciclo"] - tipo_origen: Database["public"]["Enums"]["tipo_origen"] | null - } - Insert: { - activo?: boolean - actualizado_en?: string - actualizado_por?: string | null - carrera_id: string - creado_en?: string - creado_por?: string | null - datos?: Json - estado_actual_id?: string | null - estructura_id: string - id?: string - meta_origen?: Json - nivel: Database["public"]["Enums"]["nivel_plan_estudio"] - nombre: string - nombre_search?: string | null - numero_ciclos: number - plan_hash?: string | null - tipo_ciclo: Database["public"]["Enums"]["tipo_ciclo"] - tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null - } - Update: { - activo?: boolean - actualizado_en?: string - actualizado_por?: string | null - carrera_id?: string - creado_en?: string - creado_por?: string | null - datos?: Json - estado_actual_id?: string | null - estructura_id?: string - id?: string - meta_origen?: Json - nivel?: Database["public"]["Enums"]["nivel_plan_estudio"] - nombre?: string - nombre_search?: string | null - numero_ciclos?: number - plan_hash?: string | null - tipo_ciclo?: Database["public"]["Enums"]["tipo_ciclo"] - tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null - } - Relationships: [ - { - foreignKeyName: "planes_estudio_actualizado_por_fkey" - columns: ["actualizado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] - }, - { - foreignKeyName: "planes_estudio_carrera_id_fkey" - columns: ["carrera_id"] - isOneToOne: false - referencedRelation: "carreras" - referencedColumns: ["id"] - }, - { - foreignKeyName: "planes_estudio_creado_por_fkey" - columns: ["creado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] - }, - { - foreignKeyName: "planes_estudio_estado_actual_id_fkey" - columns: ["estado_actual_id"] - isOneToOne: false - referencedRelation: "estados_plan" - referencedColumns: ["id"] - }, - { - foreignKeyName: "planes_estudio_estructura_id_fkey" - columns: ["estructura_id"] - isOneToOne: false - referencedRelation: "estructuras_plan" - referencedColumns: ["id"] - }, - { - foreignKeyName: "planes_estudio_estructura_id_fkey" - columns: ["estructura_id"] - isOneToOne: false - referencedRelation: "plantilla_plan" - referencedColumns: ["estructura_id"] - }, - ] - } - responsables_asignatura: { - Row: { - asignatura_id: string - creado_en: string - id: string - rol: Database["public"]["Enums"]["rol_responsable_asignatura"] - usuario_id: string - } - Insert: { - asignatura_id: string - creado_en?: string - id?: string - rol?: Database["public"]["Enums"]["rol_responsable_asignatura"] - usuario_id: string - } - Update: { - asignatura_id?: string - creado_en?: string - id?: string - rol?: Database["public"]["Enums"]["rol_responsable_asignatura"] - usuario_id?: string - } - Relationships: [ - { - foreignKeyName: "responsables_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "asignaturas" - referencedColumns: ["id"] - }, - { - foreignKeyName: "responsables_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "plantilla_asignatura" - referencedColumns: ["asignatura_id"] - }, - { - foreignKeyName: "responsables_asignatura_usuario_id_fkey" - columns: ["usuario_id"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] - }, - ] - } - roles: { - Row: { - clave: string - descripcion: string | null - id: string - nombre: string - } - Insert: { - clave: string - descripcion?: string | null - id?: string - nombre: string - } - Update: { - clave?: string - descripcion?: string | null - id?: string - nombre?: string - } - Relationships: [] - } - tareas_revision: { - Row: { - asignado_a: string - completado_en: string | null - creado_en: string - estado_id: string | null - estatus: Database["public"]["Enums"]["estado_tarea_revision"] - fecha_limite: string | null - id: string - plan_estudio_id: string - rol_id: string | null - } - Insert: { - asignado_a: string - completado_en?: string | null - creado_en?: string - estado_id?: string | null - estatus?: Database["public"]["Enums"]["estado_tarea_revision"] - fecha_limite?: string | null - id?: string - plan_estudio_id: string - rol_id?: string | null - } - Update: { - asignado_a?: string - completado_en?: string | null - creado_en?: string - estado_id?: string | null - estatus?: Database["public"]["Enums"]["estado_tarea_revision"] - fecha_limite?: string | null - id?: string - plan_estudio_id?: string - rol_id?: string | null - } - Relationships: [ - { - foreignKeyName: "tareas_revision_asignado_a_fkey" - columns: ["asignado_a"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] - }, - { - foreignKeyName: "tareas_revision_estado_id_fkey" - columns: ["estado_id"] - isOneToOne: false - referencedRelation: "estados_plan" - referencedColumns: ["id"] - }, - { - foreignKeyName: "tareas_revision_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] - isOneToOne: false - referencedRelation: "planes_estudio" - referencedColumns: ["id"] - }, - { - foreignKeyName: "tareas_revision_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] - isOneToOne: false - referencedRelation: "plantilla_plan" - referencedColumns: ["plan_estudio_id"] - }, - { - foreignKeyName: "tareas_revision_rol_id_fkey" - columns: ["rol_id"] - isOneToOne: false - referencedRelation: "roles" - referencedColumns: ["id"] - }, - ] - } - transiciones_estado_plan: { - Row: { - creado_en: string - desde_estado_id: string - hacia_estado_id: string - id: string - rol_permitido_id: string - } - Insert: { - creado_en?: string - desde_estado_id: string - hacia_estado_id: string - id?: string - rol_permitido_id: string - } - Update: { - creado_en?: string - desde_estado_id?: string - hacia_estado_id?: string - id?: string - rol_permitido_id?: string - } - Relationships: [ - { - foreignKeyName: "transiciones_estado_plan_desde_estado_id_fkey" - columns: ["desde_estado_id"] - isOneToOne: false - referencedRelation: "estados_plan" - referencedColumns: ["id"] - }, - { - foreignKeyName: "transiciones_estado_plan_hacia_estado_id_fkey" - columns: ["hacia_estado_id"] - isOneToOne: false - referencedRelation: "estados_plan" - referencedColumns: ["id"] - }, - { - foreignKeyName: "transiciones_estado_plan_rol_permitido_id_fkey" - columns: ["rol_permitido_id"] - isOneToOne: false - referencedRelation: "roles" - referencedColumns: ["id"] - }, - ] - } - usuarios_app: { - Row: { - actualizado_en: string - creado_en: string - email: string | null - externo: boolean - id: string - nombre_completo: string | null - } - Insert: { - actualizado_en?: string - creado_en?: string - email?: string | null - externo?: boolean - id: string - nombre_completo?: string | null - } - Update: { - actualizado_en?: string - creado_en?: string - email?: string | null - externo?: boolean - id?: string - nombre_completo?: string | null - } - Relationships: [] - } - usuarios_roles: { - Row: { - carrera_id: string | null - creado_en: string - facultad_id: string | null - id: string - rol_id: string - usuario_id: string - } - Insert: { - carrera_id?: string | null - creado_en?: string - facultad_id?: string | null - id?: string - rol_id: string - usuario_id: string - } - Update: { - carrera_id?: string | null - creado_en?: string - facultad_id?: string | null - id?: string - rol_id?: string - usuario_id?: string - } - Relationships: [ - { - foreignKeyName: "usuarios_roles_carrera_id_fkey" - columns: ["carrera_id"] - isOneToOne: false - referencedRelation: "carreras" - referencedColumns: ["id"] - }, - { - foreignKeyName: "usuarios_roles_facultad_id_fkey" - columns: ["facultad_id"] - isOneToOne: false - referencedRelation: "facultades" - referencedColumns: ["id"] - }, - { - foreignKeyName: "usuarios_roles_rol_id_fkey" - columns: ["rol_id"] - isOneToOne: false - referencedRelation: "roles" - referencedColumns: ["id"] - }, - { - foreignKeyName: "usuarios_roles_usuario_id_fkey" - columns: ["usuario_id"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] - }, - ] - } - vector_stores: { - Row: { - creado_en: string - creado_por: string | null - id: string - nombre: string - openai_vector_id: string | null - } - Insert: { - creado_en?: string - creado_por?: string | null - id?: string - nombre: string - openai_vector_id?: string | null - } - Update: { - creado_en?: string - creado_por?: string | null - id?: string - nombre?: string - openai_vector_id?: string | null - } - Relationships: [ - { - foreignKeyName: "vector_stores_creado_por_fkey" - columns: ["creado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] - }, - ] - } - } - Views: { - plantilla_asignatura: { - Row: { - asignatura_id: string | null - estructura_id: string | null - template_id: string | null - } - Relationships: [] - } - plantilla_plan: { - Row: { - estructura_id: string | null - plan_estudio_id: string | null - template_id: string | null - } - Relationships: [] - } - } - Functions: { - append_conversacion_asignatura: { - Args: { p_append: Json; p_id: string } - Returns: undefined - } - append_conversacion_plan: { - Args: { p_append: Json; p_id: string } - Returns: undefined - } - unaccent: { Args: { "": string }; Returns: string } - unaccent_immutable: { Args: { "": string }; Returns: string } - } - Enums: { - estado_asignatura: "borrador" | "revisada" | "aprobada" | "generando" - estado_conversacion: "ACTIVA" | "ARCHIVANDO" | "ARCHIVADA" | "ERROR" - estado_mensaje_ia: "PROCESANDO" | "COMPLETADO" | "ERROR" - estado_tarea_revision: "PENDIENTE" | "COMPLETADA" | "OMITIDA" - fuente_cambio: "HUMANO" | "IA" - nivel_plan_estudio: - | "Licenciatura" - | "Maestría" - | "Doctorado" - | "Especialidad" - | "Diplomado" - | "Otro" - puesto_tipo: - | "vicerrector" - | "director_facultad" - | "secretario_academico" - | "jefe_carrera" - | "profesor" - | "lci" - rol_responsable_asignatura: "PROFESOR_RESPONSABLE" | "COAUTOR" | "REVISOR" - tipo_asignatura: "OBLIGATORIA" | "OPTATIVA" | "TRONCAL" | "OTRA" - tipo_bibliografia: "BASICA" | "COMPLEMENTARIA" - tipo_cambio: - | "ACTUALIZACION_CAMPO" - | "ACTUALIZACION_MAPA" - | "TRANSICION_ESTADO" - | "OTRO" - | "CREACION" - | "ACTUALIZACION" - tipo_ciclo: "Semestre" | "Cuatrimestre" | "Trimestre" | "Otro" - tipo_estructura_plan: "CURRICULAR" | "NO_CURRICULAR" - tipo_fuente_bibliografia: "MANUAL" | "BIBLIOTECA" - tipo_interaccion_ia: "GENERAR" | "MEJORAR_SECCION" | "CHAT" | "OTRA" - tipo_notificacion: - | "PLAN_ASIGNADO" - | "ESTADO_CAMBIADO" - | "TAREA_ASIGNADA" - | "COMENTARIO" - | "OTRA" - tipo_origen: - | "MANUAL" - | "IA" - | "CLONADO_INTERNO" - | "CLONADO_TRADICIONAL" - | "OTRO" - } - CompositeTypes: { - [_ in never]: never - } - } -} - -type DatabaseWithoutInternals = Omit - -type DefaultSchema = DatabaseWithoutInternals[Extract] - -export type Tables< - DefaultSchemaTableNameOrOptions extends - | keyof (DefaultSchema["Tables"] & DefaultSchema["Views"]) - | { schema: keyof DatabaseWithoutInternals }, - TableName extends DefaultSchemaTableNameOrOptions extends { - schema: keyof DatabaseWithoutInternals - } - ? keyof (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] & - DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Views"]) - : never = never, -> = DefaultSchemaTableNameOrOptions extends { - schema: keyof DatabaseWithoutInternals -} - ? (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] & - DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Views"])[TableName] extends { - Row: infer R - } - ? R - : never - : DefaultSchemaTableNameOrOptions extends keyof (DefaultSchema["Tables"] & - DefaultSchema["Views"]) - ? (DefaultSchema["Tables"] & - DefaultSchema["Views"])[DefaultSchemaTableNameOrOptions] extends { - Row: infer R - } - ? R - : never - : never - -export type TablesInsert< - DefaultSchemaTableNameOrOptions extends - | keyof DefaultSchema["Tables"] - | { schema: keyof DatabaseWithoutInternals }, - TableName extends DefaultSchemaTableNameOrOptions extends { - schema: keyof DatabaseWithoutInternals - } - ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] - : never = never, -> = DefaultSchemaTableNameOrOptions extends { - schema: keyof DatabaseWithoutInternals -} - ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends { - Insert: infer I - } - ? I - : never - : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"] - ? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends { - Insert: infer I - } - ? I - : never - : never - -export type TablesUpdate< - DefaultSchemaTableNameOrOptions extends - | keyof DefaultSchema["Tables"] - | { schema: keyof DatabaseWithoutInternals }, - TableName extends DefaultSchemaTableNameOrOptions extends { - schema: keyof DatabaseWithoutInternals - } - ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] - : never = never, -> = DefaultSchemaTableNameOrOptions extends { - schema: keyof DatabaseWithoutInternals -} - ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends { - Update: infer U - } - ? U - : never - : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"] - ? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends { - Update: infer U - } - ? U - : never - : never - -export type Enums< - DefaultSchemaEnumNameOrOptions extends - | keyof DefaultSchema["Enums"] - | { schema: keyof DatabaseWithoutInternals }, - EnumName extends DefaultSchemaEnumNameOrOptions extends { - schema: keyof DatabaseWithoutInternals - } - ? keyof DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"] - : never = never, -> = DefaultSchemaEnumNameOrOptions extends { - schema: keyof DatabaseWithoutInternals -} - ? DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"][EnumName] - : DefaultSchemaEnumNameOrOptions extends keyof DefaultSchema["Enums"] - ? DefaultSchema["Enums"][DefaultSchemaEnumNameOrOptions] - : never - -export type CompositeTypes< - PublicCompositeTypeNameOrOptions extends - | keyof DefaultSchema["CompositeTypes"] - | { schema: keyof DatabaseWithoutInternals }, - CompositeTypeName extends PublicCompositeTypeNameOrOptions extends { - schema: keyof DatabaseWithoutInternals - } - ? keyof DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"] - : never = never, -> = PublicCompositeTypeNameOrOptions extends { - schema: keyof DatabaseWithoutInternals -} - ? DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"][CompositeTypeName] - : PublicCompositeTypeNameOrOptions extends keyof DefaultSchema["CompositeTypes"] - ? DefaultSchema["CompositeTypes"][PublicCompositeTypeNameOrOptions] - : never - -export const Constants = { - graphql_public: { - Enums: {}, - }, - public: { - Enums: { - estado_asignatura: ["borrador", "revisada", "aprobada", "generando"], - estado_conversacion: ["ACTIVA", "ARCHIVANDO", "ARCHIVADA", "ERROR"], - estado_mensaje_ia: ["PROCESANDO", "COMPLETADO", "ERROR"], - estado_tarea_revision: ["PENDIENTE", "COMPLETADA", "OMITIDA"], - fuente_cambio: ["HUMANO", "IA"], - nivel_plan_estudio: [ - "Licenciatura", - "Maestría", - "Doctorado", - "Especialidad", - "Diplomado", - "Otro", - ], - puesto_tipo: [ - "vicerrector", - "director_facultad", - "secretario_academico", - "jefe_carrera", - "profesor", - "lci", - ], - rol_responsable_asignatura: [ - "PROFESOR_RESPONSABLE", - "COAUTOR", - "REVISOR", - ], - tipo_asignatura: ["OBLIGATORIA", "OPTATIVA", "TRONCAL", "OTRA"], - tipo_bibliografia: ["BASICA", "COMPLEMENTARIA"], - tipo_cambio: [ - "ACTUALIZACION_CAMPO", - "ACTUALIZACION_MAPA", - "TRANSICION_ESTADO", - "OTRO", - "CREACION", - "ACTUALIZACION", - ], - tipo_ciclo: ["Semestre", "Cuatrimestre", "Trimestre", "Otro"], - tipo_estructura_plan: ["CURRICULAR", "NO_CURRICULAR"], - tipo_fuente_bibliografia: ["MANUAL", "BIBLIOTECA"], - tipo_interaccion_ia: ["GENERAR", "MEJORAR_SECCION", "CHAT", "OTRA"], - tipo_notificacion: [ - "PLAN_ASIGNADO", - "ESTADO_CAMBIADO", - "TAREA_ASIGNADA", - "COMENTARIO", - "OTRA", - ], - tipo_origen: [ - "MANUAL", - "IA", - "CLONADO_INTERNO", - "CLONADO_TRADICIONAL", - "OTRO", - ], - }, - }, -} as const - export type Json = | string | number | boolean | null | { [key: string]: Json | undefined } - | Json[] + | Json[]; export type Database = { graphql_public: { Tables: { - [_ in never]: never - } + [_ in never]: never; + }; Views: { - [_ in never]: never - } + [_ in never]: never; + }; Functions: { graphql: { Args: { - extensions?: Json - operationName?: string - query?: string - variables?: Json - } - Returns: Json - } - } + extensions?: Json; + operationName?: string; + query?: string; + variables?: Json; + }; + Returns: Json; + }; + }; Enums: { - [_ in never]: never - } + [_ in never]: never; + }; CompositeTypes: { - [_ in never]: never - } - } + [_ in never]: never; + }; + }; public: { Tables: { archivos: { Row: { - bytes: number | null - id: string - mime_type: string | null - nombre: string - notas: string | null - openai_file_id: string | null - ruta_storage: string - subido_en: string - subido_por: string | null - temporal: boolean - } + bytes: number | null; + id: string; + mime_type: string | null; + nombre: string; + notas: string | null; + openai_file_id: string | null; + ruta_storage: string; + subido_en: string; + subido_por: string | null; + temporal: boolean; + }; Insert: { - bytes?: number | null - id?: string - mime_type?: string | null - nombre: string - notas?: string | null - openai_file_id?: string | null - ruta_storage: string - subido_en?: string - subido_por?: string | null - temporal?: boolean - } + bytes?: number | null; + id?: string; + mime_type?: string | null; + nombre: string; + notas?: string | null; + openai_file_id?: string | null; + ruta_storage: string; + subido_en?: string; + subido_por?: string | null; + temporal?: boolean; + }; Update: { - bytes?: number | null - id?: string - mime_type?: string | null - nombre?: string - notas?: string | null - openai_file_id?: string | null - ruta_storage?: string - subido_en?: string - subido_por?: string | null - temporal?: boolean - } + bytes?: number | null; + id?: string; + mime_type?: string | null; + nombre?: string; + notas?: string | null; + openai_file_id?: string | null; + ruta_storage?: string; + subido_en?: string; + subido_por?: string | null; + temporal?: boolean; + }; Relationships: [ { - foreignKeyName: "archivos_subido_por_fkey" - columns: ["subido_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "archivos_subido_por_fkey"; + columns: ["subido_por"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, - ] - } + ]; + }; asignatura_mensajes_ia: { Row: { - campos: string[] - conversacion_asignatura_id: string - enviado_por: string - estado: Database["public"]["Enums"]["estado_mensaje_ia"] - fecha_actualizacion: string - fecha_creacion: string - id: string - is_refusal: boolean - mensaje: string - propuesta: Json | null - respuesta: string | null - } + campos: string[]; + conversacion_asignatura_id: string; + enviado_por: string; + estado: Database["public"]["Enums"]["estado_mensaje_ia"]; + fecha_actualizacion: string; + fecha_creacion: string; + id: string; + is_refusal: boolean; + mensaje: string; + propuesta: Json | null; + respuesta: string | null; + }; Insert: { - campos?: string[] - conversacion_asignatura_id: string - enviado_por?: string - estado?: Database["public"]["Enums"]["estado_mensaje_ia"] - fecha_actualizacion?: string - fecha_creacion?: string - id?: string - is_refusal?: boolean - mensaje: string - propuesta?: Json | null - respuesta?: string | null - } + campos?: string[]; + conversacion_asignatura_id: string; + enviado_por?: string; + estado?: Database["public"]["Enums"]["estado_mensaje_ia"]; + fecha_actualizacion?: string; + fecha_creacion?: string; + id?: string; + is_refusal?: boolean; + mensaje: string; + propuesta?: Json | null; + respuesta?: string | null; + }; Update: { - campos?: string[] - conversacion_asignatura_id?: string - enviado_por?: string - estado?: Database["public"]["Enums"]["estado_mensaje_ia"] - fecha_actualizacion?: string - fecha_creacion?: string - id?: string - is_refusal?: boolean - mensaje?: string - propuesta?: Json | null - respuesta?: string | null - } + campos?: string[]; + conversacion_asignatura_id?: string; + enviado_por?: string; + estado?: Database["public"]["Enums"]["estado_mensaje_ia"]; + fecha_actualizacion?: string; + fecha_creacion?: string; + id?: string; + is_refusal?: boolean; + mensaje?: string; + propuesta?: Json | null; + respuesta?: string | null; + }; Relationships: [ { - foreignKeyName: "asignatura_mensajes_ia_conversacion_asignatura_id_fkey" - columns: ["conversacion_asignatura_id"] - isOneToOne: false - referencedRelation: "conversaciones_asignatura" - referencedColumns: ["id"] + foreignKeyName: + "asignatura_mensajes_ia_conversacion_asignatura_id_fkey"; + columns: ["conversacion_asignatura_id"]; + isOneToOne: false; + referencedRelation: "conversaciones_asignatura"; + referencedColumns: ["id"]; }, - ] - } + ]; + }; asignaturas: { Row: { - actualizado_en: string - actualizado_por: string | null - asignatura_hash: string | null - codigo: string | null - contenido_tematico: Json - 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 - horas_academicas: number | null - horas_independientes: number | null - id: string - linea_plan_id: string | null - meta_origen: Json - nombre: string - numero_ciclo: number | null - orden_celda: number | null - plan_estudio_id: string - tipo: Database["public"]["Enums"]["tipo_asignatura"] - tipo_origen: Database["public"]["Enums"]["tipo_origen"] | null - } + actualizado_en: string; + actualizado_por: string | null; + asignatura_hash: string | null; + codigo: string | null; + contenido_tematico: Json; + 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; + horas_academicas: number | null; + horas_independientes: number | null; + id: string; + linea_plan_id: string | null; + meta_origen: Json; + nombre: string; + numero_ciclo: number | null; + orden_celda: number | null; + plan_estudio_id: string; + tipo: Database["public"]["Enums"]["tipo_asignatura"]; + tipo_origen: Database["public"]["Enums"]["tipo_origen"] | null; + }; Insert: { - actualizado_en?: string - actualizado_por?: string | null - asignatura_hash?: string | null - codigo?: string | null - contenido_tematico?: Json - 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 - horas_academicas?: number | null - horas_independientes?: number | null - id?: string - linea_plan_id?: string | null - meta_origen?: Json - nombre: string - numero_ciclo?: number | null - orden_celda?: number | null - plan_estudio_id: string - tipo?: Database["public"]["Enums"]["tipo_asignatura"] - tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null - } + actualizado_en?: string; + actualizado_por?: string | null; + asignatura_hash?: string | null; + codigo?: string | null; + contenido_tematico?: Json; + 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; + horas_academicas?: number | null; + horas_independientes?: number | null; + id?: string; + linea_plan_id?: string | null; + meta_origen?: Json; + nombre: string; + numero_ciclo?: number | null; + orden_celda?: number | null; + plan_estudio_id: string; + tipo?: Database["public"]["Enums"]["tipo_asignatura"]; + tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null; + }; Update: { - actualizado_en?: string - actualizado_por?: string | null - asignatura_hash?: string | null - codigo?: string | null - contenido_tematico?: Json - 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 - horas_academicas?: number | null - horas_independientes?: number | null - id?: string - linea_plan_id?: string | null - meta_origen?: Json - nombre?: string - numero_ciclo?: number | null - orden_celda?: number | null - plan_estudio_id?: string - tipo?: Database["public"]["Enums"]["tipo_asignatura"] - tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null - } + actualizado_en?: string; + actualizado_por?: string | null; + asignatura_hash?: string | null; + codigo?: string | null; + contenido_tematico?: Json; + 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; + horas_academicas?: number | null; + horas_independientes?: number | null; + id?: string; + linea_plan_id?: string | null; + meta_origen?: Json; + nombre?: string; + numero_ciclo?: number | null; + orden_celda?: number | null; + plan_estudio_id?: string; + tipo?: Database["public"]["Enums"]["tipo_asignatura"]; + tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null; + }; Relationships: [ { - foreignKeyName: "asignaturas_actualizado_por_fkey" - columns: ["actualizado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "asignaturas_actualizado_por_fkey"; + columns: ["actualizado_por"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, { - foreignKeyName: "asignaturas_creado_por_fkey" - columns: ["creado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "asignaturas_creado_por_fkey"; + columns: ["creado_por"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, { - foreignKeyName: "asignaturas_estructura_id_fkey" - columns: ["estructura_id"] - isOneToOne: false - referencedRelation: "estructuras_asignatura" - referencedColumns: ["id"] + foreignKeyName: "asignaturas_estructura_id_fkey"; + columns: ["estructura_id"]; + isOneToOne: false; + referencedRelation: "estructuras_asignatura"; + referencedColumns: ["id"]; }, { - foreignKeyName: "asignaturas_estructura_id_fkey" - columns: ["estructura_id"] - isOneToOne: false - referencedRelation: "plantilla_asignatura" - referencedColumns: ["estructura_id"] + foreignKeyName: "asignaturas_estructura_id_fkey"; + columns: ["estructura_id"]; + isOneToOne: false; + referencedRelation: "plantilla_asignatura"; + referencedColumns: ["estructura_id"]; }, { - foreignKeyName: "asignaturas_linea_plan_fk_compuesta" - columns: ["linea_plan_id", "plan_estudio_id"] - isOneToOne: false - referencedRelation: "lineas_plan" - referencedColumns: ["id", "plan_estudio_id"] + foreignKeyName: "asignaturas_linea_plan_fk_compuesta"; + columns: ["linea_plan_id", "plan_estudio_id"]; + isOneToOne: false; + referencedRelation: "lineas_plan"; + referencedColumns: ["id", "plan_estudio_id"]; }, { - foreignKeyName: "asignaturas_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] - isOneToOne: false - referencedRelation: "planes_estudio" - referencedColumns: ["id"] + foreignKeyName: "asignaturas_plan_estudio_id_fkey"; + columns: ["plan_estudio_id"]; + isOneToOne: false; + referencedRelation: "planes_estudio"; + referencedColumns: ["id"]; }, { - foreignKeyName: "asignaturas_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] - isOneToOne: false - referencedRelation: "plantilla_plan" - referencedColumns: ["plan_estudio_id"] + foreignKeyName: "asignaturas_plan_estudio_id_fkey"; + columns: ["plan_estudio_id"]; + isOneToOne: false; + referencedRelation: "plantilla_plan"; + referencedColumns: ["plan_estudio_id"]; }, - ] - } + ]; + }; bibliografia_asignatura: { Row: { - actualizado_en: string - asignatura_id: string - biblioteca_item_id: string | null - cita: string - creado_en: string - creado_por: string | null - id: string - tipo: Database["public"]["Enums"]["tipo_bibliografia"] - tipo_fuente: Database["public"]["Enums"]["tipo_fuente_bibliografia"] - } + actualizado_en: string; + asignatura_id: string; + biblioteca_item_id: string | null; + cita: string; + creado_en: string; + creado_por: string | null; + id: string; + tipo: Database["public"]["Enums"]["tipo_bibliografia"]; + tipo_fuente: Database["public"]["Enums"]["tipo_fuente_bibliografia"]; + }; Insert: { - actualizado_en?: string - asignatura_id: string - biblioteca_item_id?: string | null - cita: string - creado_en?: string - creado_por?: string | null - id?: string - tipo: Database["public"]["Enums"]["tipo_bibliografia"] - tipo_fuente?: Database["public"]["Enums"]["tipo_fuente_bibliografia"] - } + actualizado_en?: string; + asignatura_id: string; + biblioteca_item_id?: string | null; + cita: string; + creado_en?: string; + creado_por?: string | null; + id?: string; + tipo: Database["public"]["Enums"]["tipo_bibliografia"]; + tipo_fuente?: Database["public"]["Enums"]["tipo_fuente_bibliografia"]; + }; Update: { - actualizado_en?: string - asignatura_id?: string - biblioteca_item_id?: string | null - cita?: string - creado_en?: string - creado_por?: string | null - id?: string - tipo?: Database["public"]["Enums"]["tipo_bibliografia"] - tipo_fuente?: Database["public"]["Enums"]["tipo_fuente_bibliografia"] - } + actualizado_en?: string; + asignatura_id?: string; + biblioteca_item_id?: string | null; + cita?: string; + creado_en?: string; + creado_por?: string | null; + id?: string; + tipo?: Database["public"]["Enums"]["tipo_bibliografia"]; + tipo_fuente?: Database["public"]["Enums"]["tipo_fuente_bibliografia"]; + }; Relationships: [ { - foreignKeyName: "bibliografia_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "asignaturas" - referencedColumns: ["id"] + foreignKeyName: "bibliografia_asignatura_asignatura_id_fkey"; + columns: ["asignatura_id"]; + isOneToOne: false; + referencedRelation: "asignaturas"; + referencedColumns: ["id"]; }, { - foreignKeyName: "bibliografia_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "plantilla_asignatura" - referencedColumns: ["asignatura_id"] + foreignKeyName: "bibliografia_asignatura_asignatura_id_fkey"; + columns: ["asignatura_id"]; + isOneToOne: false; + referencedRelation: "plantilla_asignatura"; + referencedColumns: ["asignatura_id"]; }, { - foreignKeyName: "bibliografia_asignatura_creado_por_fkey" - columns: ["creado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "bibliografia_asignatura_creado_por_fkey"; + columns: ["creado_por"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, - ] - } + ]; + }; cambios_asignatura: { Row: { - asignatura_id: string - cambiado_en: string - cambiado_por: string | null - campo: string | null - fuente: Database["public"]["Enums"]["fuente_cambio"] | null - id: string - interaccion_ia_id: string | null - tipo: Database["public"]["Enums"]["tipo_cambio"] - valor_anterior: Json | null - valor_nuevo: Json | null - } + asignatura_id: string; + cambiado_en: string; + cambiado_por: string | null; + campo: string | null; + fuente: Database["public"]["Enums"]["fuente_cambio"] | null; + id: string; + interaccion_ia_id: string | null; + tipo: Database["public"]["Enums"]["tipo_cambio"]; + valor_anterior: Json | null; + valor_nuevo: Json | null; + }; Insert: { - asignatura_id: string - cambiado_en?: string - cambiado_por?: string | null - campo?: string | null - fuente?: Database["public"]["Enums"]["fuente_cambio"] | null - id?: string - interaccion_ia_id?: string | null - tipo: Database["public"]["Enums"]["tipo_cambio"] - valor_anterior?: Json | null - valor_nuevo?: Json | null - } + asignatura_id: string; + cambiado_en?: string; + cambiado_por?: string | null; + campo?: string | null; + fuente?: Database["public"]["Enums"]["fuente_cambio"] | null; + id?: string; + interaccion_ia_id?: string | null; + tipo: Database["public"]["Enums"]["tipo_cambio"]; + valor_anterior?: Json | null; + valor_nuevo?: Json | null; + }; Update: { - asignatura_id?: string - cambiado_en?: string - cambiado_por?: string | null - campo?: string | null - fuente?: Database["public"]["Enums"]["fuente_cambio"] | null - id?: string - interaccion_ia_id?: string | null - tipo?: Database["public"]["Enums"]["tipo_cambio"] - valor_anterior?: Json | null - valor_nuevo?: Json | null - } + asignatura_id?: string; + cambiado_en?: string; + cambiado_por?: string | null; + campo?: string | null; + fuente?: Database["public"]["Enums"]["fuente_cambio"] | null; + id?: string; + interaccion_ia_id?: string | null; + tipo?: Database["public"]["Enums"]["tipo_cambio"]; + valor_anterior?: Json | null; + valor_nuevo?: Json | null; + }; Relationships: [ { - foreignKeyName: "cambios_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "asignaturas" - referencedColumns: ["id"] + foreignKeyName: "cambios_asignatura_asignatura_id_fkey"; + columns: ["asignatura_id"]; + isOneToOne: false; + referencedRelation: "asignaturas"; + referencedColumns: ["id"]; }, { - foreignKeyName: "cambios_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "plantilla_asignatura" - referencedColumns: ["asignatura_id"] + foreignKeyName: "cambios_asignatura_asignatura_id_fkey"; + columns: ["asignatura_id"]; + isOneToOne: false; + referencedRelation: "plantilla_asignatura"; + referencedColumns: ["asignatura_id"]; }, { - foreignKeyName: "cambios_asignatura_cambiado_por_fkey" - columns: ["cambiado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "cambios_asignatura_cambiado_por_fkey"; + columns: ["cambiado_por"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, - ] - } + ]; + }; cambios_plan: { Row: { - cambiado_en: string - cambiado_por: string | null - campo: string | null - id: string - plan_estudio_id: string - response_id: string | null - tipo: Database["public"]["Enums"]["tipo_cambio"] - valor_anterior: Json | null - valor_nuevo: Json | null - } + cambiado_en: string; + cambiado_por: string | null; + campo: string | null; + id: string; + plan_estudio_id: string; + response_id: string | null; + tipo: Database["public"]["Enums"]["tipo_cambio"]; + valor_anterior: Json | null; + valor_nuevo: Json | null; + }; Insert: { - cambiado_en?: string - cambiado_por?: string | null - campo?: string | null - id?: string - plan_estudio_id: string - response_id?: string | null - tipo: Database["public"]["Enums"]["tipo_cambio"] - valor_anterior?: Json | null - valor_nuevo?: Json | null - } + cambiado_en?: string; + cambiado_por?: string | null; + campo?: string | null; + id?: string; + plan_estudio_id: string; + response_id?: string | null; + tipo: Database["public"]["Enums"]["tipo_cambio"]; + valor_anterior?: Json | null; + valor_nuevo?: Json | null; + }; Update: { - cambiado_en?: string - cambiado_por?: string | null - campo?: string | null - id?: string - plan_estudio_id?: string - response_id?: string | null - tipo?: Database["public"]["Enums"]["tipo_cambio"] - valor_anterior?: Json | null - valor_nuevo?: Json | null - } + cambiado_en?: string; + cambiado_por?: string | null; + campo?: string | null; + id?: string; + plan_estudio_id?: string; + response_id?: string | null; + tipo?: Database["public"]["Enums"]["tipo_cambio"]; + valor_anterior?: Json | null; + valor_nuevo?: Json | null; + }; Relationships: [ { - foreignKeyName: "cambios_plan_cambiado_por_fkey" - columns: ["cambiado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "cambios_plan_cambiado_por_fkey"; + columns: ["cambiado_por"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, - ] - } + ]; + }; carreras: { Row: { - activa: boolean - actualizado_en: string - clave_sep: string | null - creado_en: string - facultad_id: string - id: string - nombre: string - nombre_corto: string | null - } + activa: boolean; + actualizado_en: string; + clave_sep: string | null; + creado_en: string; + facultad_id: string; + id: string; + nombre: string; + nombre_corto: string | null; + }; Insert: { - activa?: boolean - actualizado_en?: string - clave_sep?: string | null - creado_en?: string - facultad_id: string - id?: string - nombre: string - nombre_corto?: string | null - } + activa?: boolean; + actualizado_en?: string; + clave_sep?: string | null; + creado_en?: string; + facultad_id: string; + id?: string; + nombre: string; + nombre_corto?: string | null; + }; Update: { - activa?: boolean - actualizado_en?: string - clave_sep?: string | null - creado_en?: string - facultad_id?: string - id?: string - nombre?: string - nombre_corto?: string | null - } + activa?: boolean; + actualizado_en?: string; + clave_sep?: string | null; + creado_en?: string; + facultad_id?: string; + id?: string; + nombre?: string; + nombre_corto?: string | null; + }; Relationships: [ { - foreignKeyName: "carreras_facultad_id_fkey" - columns: ["facultad_id"] - isOneToOne: false - referencedRelation: "facultades" - referencedColumns: ["id"] + foreignKeyName: "carreras_facultad_id_fkey"; + columns: ["facultad_id"]; + isOneToOne: false; + referencedRelation: "facultades"; + referencedColumns: ["id"]; }, - ] - } + ]; + }; conversaciones_asignatura: { Row: { - archivado_en: string | null - archivado_por: string | null - asignatura_id: string - conversacion_json: Json - creado_en: string - creado_por: string | null - estado: Database["public"]["Enums"]["estado_conversacion"] - id: string - intento_archivado: number - openai_conversation_id: string - } + archivado_en: string | null; + archivado_por: string | null; + asignatura_id: string; + conversacion_json: Json; + creado_en: string; + creado_por: string | null; + estado: Database["public"]["Enums"]["estado_conversacion"]; + id: string; + intento_archivado: number; + openai_conversation_id: string; + }; Insert: { - archivado_en?: string | null - archivado_por?: string | null - asignatura_id: string - conversacion_json?: Json - creado_en?: string - creado_por?: string | null - estado?: Database["public"]["Enums"]["estado_conversacion"] - id?: string - intento_archivado?: number - openai_conversation_id: string - } + archivado_en?: string | null; + archivado_por?: string | null; + asignatura_id: string; + conversacion_json?: Json; + creado_en?: string; + creado_por?: string | null; + estado?: Database["public"]["Enums"]["estado_conversacion"]; + id?: string; + intento_archivado?: number; + openai_conversation_id: string; + }; Update: { - archivado_en?: string | null - archivado_por?: string | null - asignatura_id?: string - conversacion_json?: Json - creado_en?: string - creado_por?: string | null - estado?: Database["public"]["Enums"]["estado_conversacion"] - id?: string - intento_archivado?: number - openai_conversation_id?: string - } + archivado_en?: string | null; + archivado_por?: string | null; + asignatura_id?: string; + conversacion_json?: Json; + creado_en?: string; + creado_por?: string | null; + estado?: Database["public"]["Enums"]["estado_conversacion"]; + id?: string; + intento_archivado?: number; + openai_conversation_id?: string; + }; Relationships: [ { - foreignKeyName: "conversaciones_asignatura_archivado_por_fkey" - columns: ["archivado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "conversaciones_asignatura_archivado_por_fkey"; + columns: ["archivado_por"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, { - foreignKeyName: "conversaciones_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "asignaturas" - referencedColumns: ["id"] + foreignKeyName: "conversaciones_asignatura_asignatura_id_fkey"; + columns: ["asignatura_id"]; + isOneToOne: false; + referencedRelation: "asignaturas"; + referencedColumns: ["id"]; }, { - foreignKeyName: "conversaciones_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "plantilla_asignatura" - referencedColumns: ["asignatura_id"] + foreignKeyName: "conversaciones_asignatura_asignatura_id_fkey"; + columns: ["asignatura_id"]; + isOneToOne: false; + referencedRelation: "plantilla_asignatura"; + referencedColumns: ["asignatura_id"]; }, { - foreignKeyName: "conversaciones_asignatura_creado_por_fkey" - columns: ["creado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "conversaciones_asignatura_creado_por_fkey"; + columns: ["creado_por"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, - ] - } + ]; + }; conversaciones_plan: { Row: { - archivado_en: string | null - archivado_por: string | null - conversacion_json: Json - creado_en: string - creado_por: string | null - estado: Database["public"]["Enums"]["estado_conversacion"] - id: string - intento_archivado: number - nombre: string | null - openai_conversation_id: string - plan_estudio_id: string - } + archivado_en: string | null; + archivado_por: string | null; + conversacion_json: Json; + creado_en: string; + creado_por: string | null; + estado: Database["public"]["Enums"]["estado_conversacion"]; + id: string; + intento_archivado: number; + nombre: string | null; + openai_conversation_id: string; + plan_estudio_id: string; + }; Insert: { - archivado_en?: string | null - archivado_por?: string | null - conversacion_json?: Json - creado_en?: string - creado_por?: string | null - estado?: Database["public"]["Enums"]["estado_conversacion"] - id?: string - intento_archivado?: number - nombre?: string | null - openai_conversation_id: string - plan_estudio_id: string - } + archivado_en?: string | null; + archivado_por?: string | null; + conversacion_json?: Json; + creado_en?: string; + creado_por?: string | null; + estado?: Database["public"]["Enums"]["estado_conversacion"]; + id?: string; + intento_archivado?: number; + nombre?: string | null; + openai_conversation_id: string; + plan_estudio_id: string; + }; Update: { - archivado_en?: string | null - archivado_por?: string | null - conversacion_json?: Json - creado_en?: string - creado_por?: string | null - estado?: Database["public"]["Enums"]["estado_conversacion"] - id?: string - intento_archivado?: number - nombre?: string | null - openai_conversation_id?: string - plan_estudio_id?: string - } + archivado_en?: string | null; + archivado_por?: string | null; + conversacion_json?: Json; + creado_en?: string; + creado_por?: string | null; + estado?: Database["public"]["Enums"]["estado_conversacion"]; + id?: string; + intento_archivado?: number; + nombre?: string | null; + openai_conversation_id?: string; + plan_estudio_id?: string; + }; Relationships: [ { - foreignKeyName: "conversaciones_plan_archivado_por_fkey" - columns: ["archivado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "conversaciones_plan_archivado_por_fkey"; + columns: ["archivado_por"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, { - foreignKeyName: "conversaciones_plan_creado_por_fkey" - columns: ["creado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "conversaciones_plan_creado_por_fkey"; + columns: ["creado_por"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, { - foreignKeyName: "conversaciones_plan_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] - isOneToOne: false - referencedRelation: "planes_estudio" - referencedColumns: ["id"] + foreignKeyName: "conversaciones_plan_plan_estudio_id_fkey"; + columns: ["plan_estudio_id"]; + isOneToOne: false; + referencedRelation: "planes_estudio"; + referencedColumns: ["id"]; }, { - foreignKeyName: "conversaciones_plan_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] - isOneToOne: false - referencedRelation: "plantilla_plan" - referencedColumns: ["plan_estudio_id"] + foreignKeyName: "conversaciones_plan_plan_estudio_id_fkey"; + columns: ["plan_estudio_id"]; + isOneToOne: false; + referencedRelation: "plantilla_plan"; + referencedColumns: ["plan_estudio_id"]; }, - ] - } + ]; + }; estados_plan: { Row: { - clave: string - es_final: boolean - etiqueta: string - id: string - orden: number - } + clave: string; + es_final: boolean; + etiqueta: string; + id: string; + orden: number; + }; Insert: { - clave: string - es_final?: boolean - etiqueta: string - id?: string - orden?: number - } + clave: string; + es_final?: boolean; + etiqueta: string; + id?: string; + orden?: number; + }; Update: { - clave?: string - es_final?: boolean - etiqueta?: string - id?: string - orden?: number - } - Relationships: [] - } + clave?: string; + es_final?: boolean; + etiqueta?: string; + id?: string; + orden?: number; + }; + Relationships: []; + }; estructuras_asignatura: { Row: { - actualizado_en: string - creado_en: string - definicion: Json - id: string - nombre: string - template_id: string | null - tipo: Database["public"]["Enums"]["tipo_estructura_plan"] | null - } + actualizado_en: string; + creado_en: string; + definicion: Json; + id: string; + nombre: string; + template_id: string | null; + tipo: Database["public"]["Enums"]["tipo_estructura_plan"] | null; + }; Insert: { - actualizado_en?: string - creado_en?: string - definicion?: Json - id?: string - nombre: string - template_id?: string | null - tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] | null - } + actualizado_en?: string; + creado_en?: string; + definicion?: Json; + id?: string; + nombre: string; + template_id?: string | null; + tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] | null; + }; Update: { - actualizado_en?: string - creado_en?: string - definicion?: Json - id?: string - nombre?: string - template_id?: string | null - tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] | null - } - Relationships: [] - } + actualizado_en?: string; + creado_en?: string; + definicion?: Json; + id?: string; + nombre?: string; + template_id?: string | null; + tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] | null; + }; + Relationships: []; + }; estructuras_plan: { Row: { - actualizado_en: string - creado_en: string - definicion: Json - id: string - nombre: string - template_id: string | null - tipo: Database["public"]["Enums"]["tipo_estructura_plan"] - } + actualizado_en: string; + creado_en: string; + definicion: Json; + id: string; + nombre: string; + template_id: string | null; + tipo: Database["public"]["Enums"]["tipo_estructura_plan"]; + }; Insert: { - actualizado_en?: string - creado_en?: string - definicion?: Json - id?: string - nombre: string - template_id?: string | null - tipo: Database["public"]["Enums"]["tipo_estructura_plan"] - } + actualizado_en?: string; + creado_en?: string; + definicion?: Json; + id?: string; + nombre: string; + template_id?: string | null; + tipo: Database["public"]["Enums"]["tipo_estructura_plan"]; + }; Update: { - actualizado_en?: string - creado_en?: string - definicion?: Json - id?: string - nombre?: string - template_id?: string | null - tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] - } - Relationships: [] - } + actualizado_en?: string; + creado_en?: string; + definicion?: Json; + id?: string; + nombre?: string; + template_id?: string | null; + tipo?: Database["public"]["Enums"]["tipo_estructura_plan"]; + }; + Relationships: []; + }; facultades: { Row: { - actualizado_en: string - color: string | null - creado_en: string - icono: string | null - id: string - nombre: string - nombre_corto: string | null - } + actualizado_en: string; + color: string | null; + creado_en: string; + icono: string | null; + id: string; + nombre: string; + nombre_corto: string | null; + }; Insert: { - actualizado_en?: string - color?: string | null - creado_en?: string - icono?: string | null - id?: string - nombre: string - nombre_corto?: string | null - } + actualizado_en?: string; + color?: string | null; + creado_en?: string; + icono?: string | null; + id?: string; + nombre: string; + nombre_corto?: string | null; + }; Update: { - actualizado_en?: string - color?: string | null - creado_en?: string - icono?: string | null - id?: string - nombre?: string - nombre_corto?: string | null - } - Relationships: [] - } + actualizado_en?: string; + color?: string | null; + creado_en?: string; + icono?: string | null; + id?: string; + nombre?: string; + nombre_corto?: string | null; + }; + Relationships: []; + }; interacciones_ia: { Row: { - aceptada: boolean - asignatura_id: string | null - conversacion_id: string | null - creado_en: string - id: string - ids_archivos: Json - ids_vector_store: Json - modelo: string | null - plan_estudio_id: string | null - prompt: Json - respuesta: Json - rutas_storage: Json - temperatura: number | null - tipo: Database["public"]["Enums"]["tipo_interaccion_ia"] - usuario_id: string | null - } + aceptada: boolean; + asignatura_id: string | null; + conversacion_id: string | null; + creado_en: string; + id: string; + ids_archivos: Json; + ids_vector_store: Json; + modelo: string | null; + plan_estudio_id: string | null; + prompt: Json; + respuesta: Json; + rutas_storage: Json; + temperatura: number | null; + tipo: Database["public"]["Enums"]["tipo_interaccion_ia"]; + usuario_id: string | null; + }; Insert: { - aceptada?: boolean - asignatura_id?: string | null - conversacion_id?: string | null - creado_en?: string - id?: string - ids_archivos?: Json - ids_vector_store?: Json - modelo?: string | null - plan_estudio_id?: string | null - prompt?: Json - respuesta?: Json - rutas_storage?: Json - temperatura?: number | null - tipo: Database["public"]["Enums"]["tipo_interaccion_ia"] - usuario_id?: string | null - } + aceptada?: boolean; + asignatura_id?: string | null; + conversacion_id?: string | null; + creado_en?: string; + id?: string; + ids_archivos?: Json; + ids_vector_store?: Json; + modelo?: string | null; + plan_estudio_id?: string | null; + prompt?: Json; + respuesta?: Json; + rutas_storage?: Json; + temperatura?: number | null; + tipo: Database["public"]["Enums"]["tipo_interaccion_ia"]; + usuario_id?: string | null; + }; Update: { - aceptada?: boolean - asignatura_id?: string | null - conversacion_id?: string | null - creado_en?: string - id?: string - ids_archivos?: Json - ids_vector_store?: Json - modelo?: string | null - plan_estudio_id?: string | null - prompt?: Json - respuesta?: Json - rutas_storage?: Json - temperatura?: number | null - tipo?: Database["public"]["Enums"]["tipo_interaccion_ia"] - usuario_id?: string | null - } + aceptada?: boolean; + asignatura_id?: string | null; + conversacion_id?: string | null; + creado_en?: string; + id?: string; + ids_archivos?: Json; + ids_vector_store?: Json; + modelo?: string | null; + plan_estudio_id?: string | null; + prompt?: Json; + respuesta?: Json; + rutas_storage?: Json; + temperatura?: number | null; + tipo?: Database["public"]["Enums"]["tipo_interaccion_ia"]; + usuario_id?: string | null; + }; Relationships: [ { - foreignKeyName: "interacciones_ia_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "asignaturas" - referencedColumns: ["id"] + foreignKeyName: "interacciones_ia_asignatura_id_fkey"; + columns: ["asignatura_id"]; + isOneToOne: false; + referencedRelation: "asignaturas"; + referencedColumns: ["id"]; }, { - foreignKeyName: "interacciones_ia_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "plantilla_asignatura" - referencedColumns: ["asignatura_id"] + foreignKeyName: "interacciones_ia_asignatura_id_fkey"; + columns: ["asignatura_id"]; + isOneToOne: false; + referencedRelation: "plantilla_asignatura"; + referencedColumns: ["asignatura_id"]; }, { - foreignKeyName: "interacciones_ia_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] - isOneToOne: false - referencedRelation: "planes_estudio" - referencedColumns: ["id"] + foreignKeyName: "interacciones_ia_plan_estudio_id_fkey"; + columns: ["plan_estudio_id"]; + isOneToOne: false; + referencedRelation: "planes_estudio"; + referencedColumns: ["id"]; }, { - foreignKeyName: "interacciones_ia_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] - isOneToOne: false - referencedRelation: "plantilla_plan" - referencedColumns: ["plan_estudio_id"] + foreignKeyName: "interacciones_ia_plan_estudio_id_fkey"; + columns: ["plan_estudio_id"]; + isOneToOne: false; + referencedRelation: "plantilla_plan"; + referencedColumns: ["plan_estudio_id"]; }, { - foreignKeyName: "interacciones_ia_usuario_id_fkey" - columns: ["usuario_id"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "interacciones_ia_usuario_id_fkey"; + columns: ["usuario_id"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, - ] - } + ]; + }; lineas_plan: { Row: { - actualizado_en: string - area: string | null - creado_en: string - id: string - nombre: string - orden: number - plan_estudio_id: string - } + actualizado_en: string; + area: string | null; + creado_en: string; + id: string; + nombre: string; + orden: number; + plan_estudio_id: string; + }; Insert: { - actualizado_en?: string - area?: string | null - creado_en?: string - id?: string - nombre: string - orden?: number - plan_estudio_id: string - } + actualizado_en?: string; + area?: string | null; + creado_en?: string; + id?: string; + nombre: string; + orden?: number; + plan_estudio_id: string; + }; Update: { - actualizado_en?: string - area?: string | null - creado_en?: string - id?: string - nombre?: string - orden?: number - plan_estudio_id?: string - } + actualizado_en?: string; + area?: string | null; + creado_en?: string; + id?: string; + nombre?: string; + orden?: number; + plan_estudio_id?: string; + }; Relationships: [ { - foreignKeyName: "lineas_plan_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] - isOneToOne: false - referencedRelation: "planes_estudio" - referencedColumns: ["id"] + foreignKeyName: "lineas_plan_plan_estudio_id_fkey"; + columns: ["plan_estudio_id"]; + isOneToOne: false; + referencedRelation: "planes_estudio"; + referencedColumns: ["id"]; }, { - foreignKeyName: "lineas_plan_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] - isOneToOne: false - referencedRelation: "plantilla_plan" - referencedColumns: ["plan_estudio_id"] + foreignKeyName: "lineas_plan_plan_estudio_id_fkey"; + columns: ["plan_estudio_id"]; + isOneToOne: false; + referencedRelation: "plantilla_plan"; + referencedColumns: ["plan_estudio_id"]; }, - ] - } + ]; + }; notificaciones: { Row: { - creado_en: string - id: string - leida: boolean - leida_en: string | null - payload: Json - tipo: Database["public"]["Enums"]["tipo_notificacion"] - usuario_id: string - } + creado_en: string; + id: string; + leida: boolean; + leida_en: string | null; + payload: Json; + tipo: Database["public"]["Enums"]["tipo_notificacion"]; + usuario_id: string; + }; Insert: { - creado_en?: string - id?: string - leida?: boolean - leida_en?: string | null - payload?: Json - tipo: Database["public"]["Enums"]["tipo_notificacion"] - usuario_id: string - } + creado_en?: string; + id?: string; + leida?: boolean; + leida_en?: string | null; + payload?: Json; + tipo: Database["public"]["Enums"]["tipo_notificacion"]; + usuario_id: string; + }; Update: { - creado_en?: string - id?: string - leida?: boolean - leida_en?: string | null - payload?: Json - tipo?: Database["public"]["Enums"]["tipo_notificacion"] - usuario_id?: string - } + creado_en?: string; + id?: string; + leida?: boolean; + leida_en?: string | null; + payload?: Json; + tipo?: Database["public"]["Enums"]["tipo_notificacion"]; + usuario_id?: string; + }; Relationships: [ { - foreignKeyName: "notificaciones_usuario_id_fkey" - columns: ["usuario_id"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "notificaciones_usuario_id_fkey"; + columns: ["usuario_id"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, - ] - } + ]; + }; plan_mensajes_ia: { Row: { - campos: string[] - conversacion_plan_id: string - enviado_por: string - estado: Database["public"]["Enums"]["estado_mensaje_ia"] - fecha_actualizacion: string - fecha_creacion: string - id: string - is_refusal: boolean - mensaje: string - propuesta: Json | null - respuesta: string | null - } + campos: string[]; + conversacion_plan_id: string; + enviado_por: string; + estado: Database["public"]["Enums"]["estado_mensaje_ia"]; + fecha_actualizacion: string; + fecha_creacion: string; + id: string; + is_refusal: boolean; + mensaje: string; + propuesta: Json | null; + respuesta: string | null; + }; Insert: { - campos?: string[] - conversacion_plan_id: string - enviado_por?: string - estado?: Database["public"]["Enums"]["estado_mensaje_ia"] - fecha_actualizacion?: string - fecha_creacion?: string - id?: string - is_refusal?: boolean - mensaje: string - propuesta?: Json | null - respuesta?: string | null - } + campos?: string[]; + conversacion_plan_id: string; + enviado_por?: string; + estado?: Database["public"]["Enums"]["estado_mensaje_ia"]; + fecha_actualizacion?: string; + fecha_creacion?: string; + id?: string; + is_refusal?: boolean; + mensaje: string; + propuesta?: Json | null; + respuesta?: string | null; + }; Update: { - campos?: string[] - conversacion_plan_id?: string - enviado_por?: string - estado?: Database["public"]["Enums"]["estado_mensaje_ia"] - fecha_actualizacion?: string - fecha_creacion?: string - id?: string - is_refusal?: boolean - mensaje?: string - propuesta?: Json | null - respuesta?: string | null - } + campos?: string[]; + conversacion_plan_id?: string; + enviado_por?: string; + estado?: Database["public"]["Enums"]["estado_mensaje_ia"]; + fecha_actualizacion?: string; + fecha_creacion?: string; + id?: string; + is_refusal?: boolean; + mensaje?: string; + propuesta?: Json | null; + respuesta?: string | null; + }; Relationships: [ { - foreignKeyName: "plan_mensajes_ia_conversacion_plan_id_fkey" - columns: ["conversacion_plan_id"] - isOneToOne: false - referencedRelation: "conversaciones_plan" - referencedColumns: ["id"] + foreignKeyName: "plan_mensajes_ia_conversacion_plan_id_fkey"; + columns: ["conversacion_plan_id"]; + isOneToOne: false; + referencedRelation: "conversaciones_plan"; + referencedColumns: ["id"]; }, - ] - } + ]; + }; planes_estudio: { Row: { - activo: boolean - actualizado_en: string - actualizado_por: string | null - carrera_id: string - creado_en: string - creado_por: string | null - datos: Json - estado_actual_id: string | null - estructura_id: string - id: string - meta_origen: Json - nivel: Database["public"]["Enums"]["nivel_plan_estudio"] - nombre: string - nombre_search: string | null - numero_ciclos: number - plan_hash: string | null - tipo_ciclo: Database["public"]["Enums"]["tipo_ciclo"] - tipo_origen: Database["public"]["Enums"]["tipo_origen"] | null - } + activo: boolean; + actualizado_en: string; + actualizado_por: string | null; + carrera_id: string; + creado_en: string; + creado_por: string | null; + datos: Json; + estado_actual_id: string | null; + estructura_id: string; + id: string; + meta_origen: Json; + nivel: Database["public"]["Enums"]["nivel_plan_estudio"]; + nombre: string; + nombre_search: string | null; + numero_ciclos: number; + plan_hash: string | null; + tipo_ciclo: Database["public"]["Enums"]["tipo_ciclo"]; + tipo_origen: Database["public"]["Enums"]["tipo_origen"] | null; + }; Insert: { - activo?: boolean - actualizado_en?: string - actualizado_por?: string | null - carrera_id: string - creado_en?: string - creado_por?: string | null - datos?: Json - estado_actual_id?: string | null - estructura_id: string - id?: string - meta_origen?: Json - nivel: Database["public"]["Enums"]["nivel_plan_estudio"] - nombre: string - nombre_search?: string | null - numero_ciclos: number - plan_hash?: string | null - tipo_ciclo: Database["public"]["Enums"]["tipo_ciclo"] - tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null - } + activo?: boolean; + actualizado_en?: string; + actualizado_por?: string | null; + carrera_id: string; + creado_en?: string; + creado_por?: string | null; + datos?: Json; + estado_actual_id?: string | null; + estructura_id: string; + id?: string; + meta_origen?: Json; + nivel: Database["public"]["Enums"]["nivel_plan_estudio"]; + nombre: string; + nombre_search?: string | null; + numero_ciclos: number; + plan_hash?: string | null; + tipo_ciclo: Database["public"]["Enums"]["tipo_ciclo"]; + tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null; + }; Update: { - activo?: boolean - actualizado_en?: string - actualizado_por?: string | null - carrera_id?: string - creado_en?: string - creado_por?: string | null - datos?: Json - estado_actual_id?: string | null - estructura_id?: string - id?: string - meta_origen?: Json - nivel?: Database["public"]["Enums"]["nivel_plan_estudio"] - nombre?: string - nombre_search?: string | null - numero_ciclos?: number - plan_hash?: string | null - tipo_ciclo?: Database["public"]["Enums"]["tipo_ciclo"] - tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null - } + activo?: boolean; + actualizado_en?: string; + actualizado_por?: string | null; + carrera_id?: string; + creado_en?: string; + creado_por?: string | null; + datos?: Json; + estado_actual_id?: string | null; + estructura_id?: string; + id?: string; + meta_origen?: Json; + nivel?: Database["public"]["Enums"]["nivel_plan_estudio"]; + nombre?: string; + nombre_search?: string | null; + numero_ciclos?: number; + plan_hash?: string | null; + tipo_ciclo?: Database["public"]["Enums"]["tipo_ciclo"]; + tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null; + }; Relationships: [ { - foreignKeyName: "planes_estudio_actualizado_por_fkey" - columns: ["actualizado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "planes_estudio_actualizado_por_fkey"; + columns: ["actualizado_por"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, { - foreignKeyName: "planes_estudio_carrera_id_fkey" - columns: ["carrera_id"] - isOneToOne: false - referencedRelation: "carreras" - referencedColumns: ["id"] + foreignKeyName: "planes_estudio_carrera_id_fkey"; + columns: ["carrera_id"]; + isOneToOne: false; + referencedRelation: "carreras"; + referencedColumns: ["id"]; }, { - foreignKeyName: "planes_estudio_creado_por_fkey" - columns: ["creado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "planes_estudio_creado_por_fkey"; + columns: ["creado_por"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, { - foreignKeyName: "planes_estudio_estado_actual_id_fkey" - columns: ["estado_actual_id"] - isOneToOne: false - referencedRelation: "estados_plan" - referencedColumns: ["id"] + foreignKeyName: "planes_estudio_estado_actual_id_fkey"; + columns: ["estado_actual_id"]; + isOneToOne: false; + referencedRelation: "estados_plan"; + referencedColumns: ["id"]; }, { - foreignKeyName: "planes_estudio_estructura_id_fkey" - columns: ["estructura_id"] - isOneToOne: false - referencedRelation: "estructuras_plan" - referencedColumns: ["id"] + foreignKeyName: "planes_estudio_estructura_id_fkey"; + columns: ["estructura_id"]; + isOneToOne: false; + referencedRelation: "estructuras_plan"; + referencedColumns: ["id"]; }, { - foreignKeyName: "planes_estudio_estructura_id_fkey" - columns: ["estructura_id"] - isOneToOne: false - referencedRelation: "plantilla_plan" - referencedColumns: ["estructura_id"] + foreignKeyName: "planes_estudio_estructura_id_fkey"; + columns: ["estructura_id"]; + isOneToOne: false; + referencedRelation: "plantilla_plan"; + referencedColumns: ["estructura_id"]; }, - ] - } + ]; + }; responsables_asignatura: { Row: { - asignatura_id: string - creado_en: string - id: string - rol: Database["public"]["Enums"]["rol_responsable_asignatura"] - usuario_id: string - } + asignatura_id: string; + creado_en: string; + id: string; + rol: Database["public"]["Enums"]["rol_responsable_asignatura"]; + usuario_id: string; + }; Insert: { - asignatura_id: string - creado_en?: string - id?: string - rol?: Database["public"]["Enums"]["rol_responsable_asignatura"] - usuario_id: string - } + asignatura_id: string; + creado_en?: string; + id?: string; + rol?: Database["public"]["Enums"]["rol_responsable_asignatura"]; + usuario_id: string; + }; Update: { - asignatura_id?: string - creado_en?: string - id?: string - rol?: Database["public"]["Enums"]["rol_responsable_asignatura"] - usuario_id?: string - } + asignatura_id?: string; + creado_en?: string; + id?: string; + rol?: Database["public"]["Enums"]["rol_responsable_asignatura"]; + usuario_id?: string; + }; Relationships: [ { - foreignKeyName: "responsables_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "asignaturas" - referencedColumns: ["id"] + foreignKeyName: "responsables_asignatura_asignatura_id_fkey"; + columns: ["asignatura_id"]; + isOneToOne: false; + referencedRelation: "asignaturas"; + referencedColumns: ["id"]; }, { - foreignKeyName: "responsables_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "plantilla_asignatura" - referencedColumns: ["asignatura_id"] + foreignKeyName: "responsables_asignatura_asignatura_id_fkey"; + columns: ["asignatura_id"]; + isOneToOne: false; + referencedRelation: "plantilla_asignatura"; + referencedColumns: ["asignatura_id"]; }, { - foreignKeyName: "responsables_asignatura_usuario_id_fkey" - columns: ["usuario_id"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "responsables_asignatura_usuario_id_fkey"; + columns: ["usuario_id"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, - ] - } + ]; + }; roles: { Row: { - clave: string - descripcion: string | null - id: string - nombre: string - } + clave: string; + descripcion: string | null; + id: string; + nombre: string; + }; Insert: { - clave: string - descripcion?: string | null - id?: string - nombre: string - } + clave: string; + descripcion?: string | null; + id?: string; + nombre: string; + }; Update: { - clave?: string - descripcion?: string | null - id?: string - nombre?: string - } - Relationships: [] - } + clave?: string; + descripcion?: string | null; + id?: string; + nombre?: string; + }; + Relationships: []; + }; tareas_revision: { Row: { - asignado_a: string - completado_en: string | null - creado_en: string - estado_id: string | null - estatus: Database["public"]["Enums"]["estado_tarea_revision"] - fecha_limite: string | null - id: string - plan_estudio_id: string - rol_id: string | null - } + asignado_a: string; + completado_en: string | null; + creado_en: string; + estado_id: string | null; + estatus: Database["public"]["Enums"]["estado_tarea_revision"]; + fecha_limite: string | null; + id: string; + plan_estudio_id: string; + rol_id: string | null; + }; Insert: { - asignado_a: string - completado_en?: string | null - creado_en?: string - estado_id?: string | null - estatus?: Database["public"]["Enums"]["estado_tarea_revision"] - fecha_limite?: string | null - id?: string - plan_estudio_id: string - rol_id?: string | null - } + asignado_a: string; + completado_en?: string | null; + creado_en?: string; + estado_id?: string | null; + estatus?: Database["public"]["Enums"]["estado_tarea_revision"]; + fecha_limite?: string | null; + id?: string; + plan_estudio_id: string; + rol_id?: string | null; + }; Update: { - asignado_a?: string - completado_en?: string | null - creado_en?: string - estado_id?: string | null - estatus?: Database["public"]["Enums"]["estado_tarea_revision"] - fecha_limite?: string | null - id?: string - plan_estudio_id?: string - rol_id?: string | null - } + asignado_a?: string; + completado_en?: string | null; + creado_en?: string; + estado_id?: string | null; + estatus?: Database["public"]["Enums"]["estado_tarea_revision"]; + fecha_limite?: string | null; + id?: string; + plan_estudio_id?: string; + rol_id?: string | null; + }; Relationships: [ { - foreignKeyName: "tareas_revision_asignado_a_fkey" - columns: ["asignado_a"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "tareas_revision_asignado_a_fkey"; + columns: ["asignado_a"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, { - foreignKeyName: "tareas_revision_estado_id_fkey" - columns: ["estado_id"] - isOneToOne: false - referencedRelation: "estados_plan" - referencedColumns: ["id"] + foreignKeyName: "tareas_revision_estado_id_fkey"; + columns: ["estado_id"]; + isOneToOne: false; + referencedRelation: "estados_plan"; + referencedColumns: ["id"]; }, { - foreignKeyName: "tareas_revision_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] - isOneToOne: false - referencedRelation: "planes_estudio" - referencedColumns: ["id"] + foreignKeyName: "tareas_revision_plan_estudio_id_fkey"; + columns: ["plan_estudio_id"]; + isOneToOne: false; + referencedRelation: "planes_estudio"; + referencedColumns: ["id"]; }, { - foreignKeyName: "tareas_revision_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] - isOneToOne: false - referencedRelation: "plantilla_plan" - referencedColumns: ["plan_estudio_id"] + foreignKeyName: "tareas_revision_plan_estudio_id_fkey"; + columns: ["plan_estudio_id"]; + isOneToOne: false; + referencedRelation: "plantilla_plan"; + referencedColumns: ["plan_estudio_id"]; }, { - foreignKeyName: "tareas_revision_rol_id_fkey" - columns: ["rol_id"] - isOneToOne: false - referencedRelation: "roles" - referencedColumns: ["id"] + foreignKeyName: "tareas_revision_rol_id_fkey"; + columns: ["rol_id"]; + isOneToOne: false; + referencedRelation: "roles"; + referencedColumns: ["id"]; }, - ] - } + ]; + }; transiciones_estado_plan: { Row: { - creado_en: string - desde_estado_id: string - hacia_estado_id: string - id: string - rol_permitido_id: string - } + creado_en: string; + desde_estado_id: string; + hacia_estado_id: string; + id: string; + rol_permitido_id: string; + }; Insert: { - creado_en?: string - desde_estado_id: string - hacia_estado_id: string - id?: string - rol_permitido_id: string - } + creado_en?: string; + desde_estado_id: string; + hacia_estado_id: string; + id?: string; + rol_permitido_id: string; + }; Update: { - creado_en?: string - desde_estado_id?: string - hacia_estado_id?: string - id?: string - rol_permitido_id?: string - } + creado_en?: string; + desde_estado_id?: string; + hacia_estado_id?: string; + id?: string; + rol_permitido_id?: string; + }; Relationships: [ { - foreignKeyName: "transiciones_estado_plan_desde_estado_id_fkey" - columns: ["desde_estado_id"] - isOneToOne: false - referencedRelation: "estados_plan" - referencedColumns: ["id"] + foreignKeyName: "transiciones_estado_plan_desde_estado_id_fkey"; + columns: ["desde_estado_id"]; + isOneToOne: false; + referencedRelation: "estados_plan"; + referencedColumns: ["id"]; }, { - foreignKeyName: "transiciones_estado_plan_hacia_estado_id_fkey" - columns: ["hacia_estado_id"] - isOneToOne: false - referencedRelation: "estados_plan" - referencedColumns: ["id"] + foreignKeyName: "transiciones_estado_plan_hacia_estado_id_fkey"; + columns: ["hacia_estado_id"]; + isOneToOne: false; + referencedRelation: "estados_plan"; + referencedColumns: ["id"]; }, { - foreignKeyName: "transiciones_estado_plan_rol_permitido_id_fkey" - columns: ["rol_permitido_id"] - isOneToOne: false - referencedRelation: "roles" - referencedColumns: ["id"] + foreignKeyName: "transiciones_estado_plan_rol_permitido_id_fkey"; + columns: ["rol_permitido_id"]; + isOneToOne: false; + referencedRelation: "roles"; + referencedColumns: ["id"]; }, - ] - } + ]; + }; usuarios_app: { Row: { - actualizado_en: string - creado_en: string - email: string | null - externo: boolean - id: string - nombre_completo: string | null - } + actualizado_en: string; + creado_en: string; + email: string | null; + externo: boolean; + id: string; + nombre_completo: string | null; + }; Insert: { - actualizado_en?: string - creado_en?: string - email?: string | null - externo?: boolean - id: string - nombre_completo?: string | null - } + actualizado_en?: string; + creado_en?: string; + email?: string | null; + externo?: boolean; + id: string; + nombre_completo?: string | null; + }; Update: { - actualizado_en?: string - creado_en?: string - email?: string | null - externo?: boolean - id?: string - nombre_completo?: string | null - } - Relationships: [] - } + actualizado_en?: string; + creado_en?: string; + email?: string | null; + externo?: boolean; + id?: string; + nombre_completo?: string | null; + }; + Relationships: []; + }; usuarios_roles: { Row: { - carrera_id: string | null - creado_en: string - facultad_id: string | null - id: string - rol_id: string - usuario_id: string - } + carrera_id: string | null; + creado_en: string; + facultad_id: string | null; + id: string; + rol_id: string; + usuario_id: string; + }; Insert: { - carrera_id?: string | null - creado_en?: string - facultad_id?: string | null - id?: string - rol_id: string - usuario_id: string - } + carrera_id?: string | null; + creado_en?: string; + facultad_id?: string | null; + id?: string; + rol_id: string; + usuario_id: string; + }; Update: { - carrera_id?: string | null - creado_en?: string - facultad_id?: string | null - id?: string - rol_id?: string - usuario_id?: string - } + carrera_id?: string | null; + creado_en?: string; + facultad_id?: string | null; + id?: string; + rol_id?: string; + usuario_id?: string; + }; Relationships: [ { - foreignKeyName: "usuarios_roles_carrera_id_fkey" - columns: ["carrera_id"] - isOneToOne: false - referencedRelation: "carreras" - referencedColumns: ["id"] + foreignKeyName: "usuarios_roles_carrera_id_fkey"; + columns: ["carrera_id"]; + isOneToOne: false; + referencedRelation: "carreras"; + referencedColumns: ["id"]; }, { - foreignKeyName: "usuarios_roles_facultad_id_fkey" - columns: ["facultad_id"] - isOneToOne: false - referencedRelation: "facultades" - referencedColumns: ["id"] + foreignKeyName: "usuarios_roles_facultad_id_fkey"; + columns: ["facultad_id"]; + isOneToOne: false; + referencedRelation: "facultades"; + referencedColumns: ["id"]; }, { - foreignKeyName: "usuarios_roles_rol_id_fkey" - columns: ["rol_id"] - isOneToOne: false - referencedRelation: "roles" - referencedColumns: ["id"] + foreignKeyName: "usuarios_roles_rol_id_fkey"; + columns: ["rol_id"]; + isOneToOne: false; + referencedRelation: "roles"; + referencedColumns: ["id"]; }, { - foreignKeyName: "usuarios_roles_usuario_id_fkey" - columns: ["usuario_id"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "usuarios_roles_usuario_id_fkey"; + columns: ["usuario_id"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, - ] - } + ]; + }; vector_stores: { Row: { - creado_en: string - creado_por: string | null - id: string - nombre: string - openai_vector_id: string | null - } + creado_en: string; + creado_por: string | null; + id: string; + nombre: string; + openai_vector_id: string | null; + }; Insert: { - creado_en?: string - creado_por?: string | null - id?: string - nombre: string - openai_vector_id?: string | null - } + creado_en?: string; + creado_por?: string | null; + id?: string; + nombre: string; + openai_vector_id?: string | null; + }; Update: { - creado_en?: string - creado_por?: string | null - id?: string - nombre?: string - openai_vector_id?: string | null - } + creado_en?: string; + creado_por?: string | null; + id?: string; + nombre?: string; + openai_vector_id?: string | null; + }; Relationships: [ { - foreignKeyName: "vector_stores_creado_por_fkey" - columns: ["creado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "vector_stores_creado_por_fkey"; + columns: ["creado_por"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, - ] - } - } + ]; + }; + }; Views: { plantilla_asignatura: { Row: { - asignatura_id: string | null - estructura_id: string | null - template_id: string | null - } - Relationships: [] - } + asignatura_id: string | null; + estructura_id: string | null; + template_id: string | null; + }; + Relationships: []; + }; plantilla_plan: { Row: { - estructura_id: string | null - plan_estudio_id: string | null - template_id: string | null - } - Relationships: [] - } - } + estructura_id: string | null; + plan_estudio_id: string | null; + template_id: string | null; + }; + Relationships: []; + }; + }; Functions: { append_conversacion_asignatura: { - Args: { p_append: Json; p_id: string } - Returns: undefined - } + Args: { p_append: Json; p_id: string }; + Returns: undefined; + }; append_conversacion_plan: { - Args: { p_append: Json; p_id: string } - Returns: undefined - } - unaccent: { Args: { "": string }; Returns: string } - unaccent_immutable: { Args: { "": string }; Returns: string } - } + Args: { p_append: Json; p_id: string }; + Returns: undefined; + }; + unaccent: { Args: { "": string }; Returns: string }; + unaccent_immutable: { Args: { "": string }; Returns: string }; + }; Enums: { - estado_asignatura: "borrador" | "revisada" | "aprobada" | "generando" - estado_conversacion: "ACTIVA" | "ARCHIVANDO" | "ARCHIVADA" | "ERROR" - estado_mensaje_ia: "PROCESANDO" | "COMPLETADO" | "ERROR" - estado_tarea_revision: "PENDIENTE" | "COMPLETADA" | "OMITIDA" - fuente_cambio: "HUMANO" | "IA" + estado_asignatura: "borrador" | "revisada" | "aprobada" | "generando"; + estado_conversacion: "ACTIVA" | "ARCHIVANDO" | "ARCHIVADA" | "ERROR"; + estado_mensaje_ia: "PROCESANDO" | "COMPLETADO" | "ERROR"; + estado_tarea_revision: "PENDIENTE" | "COMPLETADA" | "OMITIDA"; + fuente_cambio: "HUMANO" | "IA"; nivel_plan_estudio: | "Licenciatura" | "Maestría" | "Doctorado" | "Especialidad" | "Diplomado" - | "Otro" + | "Otro"; puesto_tipo: | "vicerrector" | "director_facultad" | "secretario_academico" | "jefe_carrera" | "profesor" - | "lci" - rol_responsable_asignatura: "PROFESOR_RESPONSABLE" | "COAUTOR" | "REVISOR" - tipo_asignatura: "OBLIGATORIA" | "OPTATIVA" | "TRONCAL" | "OTRA" - tipo_bibliografia: "BASICA" | "COMPLEMENTARIA" + | "lci"; + rol_responsable_asignatura: + | "PROFESOR_RESPONSABLE" + | "COAUTOR" + | "REVISOR"; + tipo_asignatura: "OBLIGATORIA" | "OPTATIVA" | "TRONCAL" | "OTRA"; + tipo_bibliografia: "BASICA" | "COMPLEMENTARIA"; tipo_cambio: | "ACTUALIZACION_CAMPO" | "ACTUALIZACION_MAPA" | "TRANSICION_ESTADO" | "OTRO" | "CREACION" - | "ACTUALIZACION" - tipo_ciclo: "Semestre" | "Cuatrimestre" | "Trimestre" | "Otro" - tipo_estructura_plan: "CURRICULAR" | "NO_CURRICULAR" - tipo_fuente_bibliografia: "MANUAL" | "BIBLIOTECA" - tipo_interaccion_ia: "GENERAR" | "MEJORAR_SECCION" | "CHAT" | "OTRA" + | "ACTUALIZACION"; + tipo_ciclo: "Semestre" | "Cuatrimestre" | "Trimestre" | "Otro"; + tipo_estructura_plan: "CURRICULAR" | "NO_CURRICULAR"; + tipo_fuente_bibliografia: "MANUAL" | "BIBLIOTECA"; + tipo_interaccion_ia: "GENERAR" | "MEJORAR_SECCION" | "CHAT" | "OTRA"; tipo_notificacion: | "PLAN_ASIGNADO" | "ESTADO_CAMBIADO" | "TAREA_ASIGNADA" | "COMENTARIO" - | "OTRA" + | "OTRA"; tipo_origen: | "MANUAL" | "IA" | "CLONADO_INTERNO" | "CLONADO_TRADICIONAL" - | "OTRO" - } + | "OTRO"; + }; CompositeTypes: { - [_ in never]: never - } - } -} + [_ in never]: never; + }; + }; +}; -type DatabaseWithoutInternals = Omit +type DatabaseWithoutInternals = Omit; -type DefaultSchema = DatabaseWithoutInternals[Extract] +type DefaultSchema = + DatabaseWithoutInternals[Extract]; export type Tables< DefaultSchemaTableNameOrOptions extends | keyof (DefaultSchema["Tables"] & DefaultSchema["Views"]) | { schema: keyof DatabaseWithoutInternals }, TableName extends DefaultSchemaTableNameOrOptions extends { - schema: keyof DatabaseWithoutInternals - } - ? keyof (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] & - DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Views"]) + schema: keyof DatabaseWithoutInternals; + } ? keyof ( + & DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ + "Tables" + ] + & DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ + "Views" + ] + ) : never = never, > = DefaultSchemaTableNameOrOptions extends { - schema: keyof DatabaseWithoutInternals -} - ? (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] & - DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Views"])[TableName] extends { - Row: infer R - } - ? R - : never - : DefaultSchemaTableNameOrOptions extends keyof (DefaultSchema["Tables"] & - DefaultSchema["Views"]) - ? (DefaultSchema["Tables"] & - DefaultSchema["Views"])[DefaultSchemaTableNameOrOptions] extends { - Row: infer R - } - ? R - : never + schema: keyof DatabaseWithoutInternals; +} ? ( + & DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ + "Tables" + ] + & DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ + "Views" + ] + )[TableName] extends { + Row: infer R; + } ? R + : never + : DefaultSchemaTableNameOrOptions extends keyof ( + & DefaultSchema["Tables"] + & DefaultSchema["Views"] + ) ? ( + & DefaultSchema["Tables"] + & DefaultSchema["Views"] + )[DefaultSchemaTableNameOrOptions] extends { + Row: infer R; + } ? R : never + : never; export type TablesInsert< DefaultSchemaTableNameOrOptions extends | keyof DefaultSchema["Tables"] | { schema: keyof DatabaseWithoutInternals }, TableName extends DefaultSchemaTableNameOrOptions extends { - schema: keyof DatabaseWithoutInternals - } - ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] + schema: keyof DatabaseWithoutInternals; + } ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ + "Tables" + ] : never = never, > = DefaultSchemaTableNameOrOptions extends { - schema: keyof DatabaseWithoutInternals -} - ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends { - Insert: infer I - } - ? I - : never + schema: keyof DatabaseWithoutInternals; +} ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ + "Tables" + ][TableName] extends { + Insert: infer I; + } ? I + : never : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"] ? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends { - Insert: infer I - } - ? I - : never + Insert: infer I; + } ? I : never + : never; export type TablesUpdate< DefaultSchemaTableNameOrOptions extends | keyof DefaultSchema["Tables"] | { schema: keyof DatabaseWithoutInternals }, TableName extends DefaultSchemaTableNameOrOptions extends { - schema: keyof DatabaseWithoutInternals - } - ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] + schema: keyof DatabaseWithoutInternals; + } ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ + "Tables" + ] : never = never, > = DefaultSchemaTableNameOrOptions extends { - schema: keyof DatabaseWithoutInternals -} - ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends { - Update: infer U - } - ? U - : never + schema: keyof DatabaseWithoutInternals; +} ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ + "Tables" + ][TableName] extends { + Update: infer U; + } ? U + : never : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"] ? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends { - Update: infer U - } - ? U - : never + Update: infer U; + } ? U : never + : never; export type Enums< DefaultSchemaEnumNameOrOptions extends | keyof DefaultSchema["Enums"] | { schema: keyof DatabaseWithoutInternals }, EnumName extends DefaultSchemaEnumNameOrOptions extends { - schema: keyof DatabaseWithoutInternals - } - ? keyof DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"] + schema: keyof DatabaseWithoutInternals; + } ? keyof DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]][ + "Enums" + ] : never = never, > = DefaultSchemaEnumNameOrOptions extends { - schema: keyof DatabaseWithoutInternals -} - ? DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"][EnumName] + schema: keyof DatabaseWithoutInternals; +} ? DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"][ + EnumName + ] : DefaultSchemaEnumNameOrOptions extends keyof DefaultSchema["Enums"] ? DefaultSchema["Enums"][DefaultSchemaEnumNameOrOptions] - : never + : never; export type CompositeTypes< PublicCompositeTypeNameOrOptions extends | keyof DefaultSchema["CompositeTypes"] | { schema: keyof DatabaseWithoutInternals }, CompositeTypeName extends PublicCompositeTypeNameOrOptions extends { - schema: keyof DatabaseWithoutInternals - } - ? keyof DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"] + schema: keyof DatabaseWithoutInternals; + } ? keyof DatabaseWithoutInternals[ + PublicCompositeTypeNameOrOptions["schema"] + ]["CompositeTypes"] : never = never, > = PublicCompositeTypeNameOrOptions extends { - schema: keyof DatabaseWithoutInternals -} - ? DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"][CompositeTypeName] - : PublicCompositeTypeNameOrOptions extends keyof DefaultSchema["CompositeTypes"] + schema: keyof DatabaseWithoutInternals; +} ? DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]][ + "CompositeTypes" + ][CompositeTypeName] + : PublicCompositeTypeNameOrOptions extends + keyof DefaultSchema["CompositeTypes"] ? DefaultSchema["CompositeTypes"][PublicCompositeTypeNameOrOptions] - : never + : never; export const Constants = { graphql_public: { @@ -3220,5 +1629,4 @@ export const Constants = { ], }, }, -} as const - +} as const; From 481a1260933f3fde11b98499729a855ea851f7a8 Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 14:53:01 -0600 Subject: [PATCH 17/38] fix: add git diff output to CI error message for better debugging --- .gitea/workflows/ci.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index 3a14df4..58cf700 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -26,5 +26,6 @@ jobs: supabase gen types typescript --local > supabase/functions/_shared/database.types.ts if ! git diff --ignore-space-at-eol --exit-code --quiet supabase/functions/_shared/database.types.ts; then echo "Detected uncommitted changes after build. See diff below:" + git diff exit 1 fi From 0d7c737baf574be6a32068276ac1a8d905b8b930 Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 14:59:30 -0600 Subject: [PATCH 18/38] Implement feature X to enhance user experience and fix bug Y in module Z --- supabase/functions/_shared/database.types.ts | 2440 +++++++++--------- 1 file changed, 1210 insertions(+), 1230 deletions(-) diff --git a/supabase/functions/_shared/database.types.ts b/supabase/functions/_shared/database.types.ts index d905d96..a889116 100644 --- a/supabase/functions/_shared/database.types.ts +++ b/supabase/functions/_shared/database.types.ts @@ -4,1568 +4,1547 @@ export type Json = | boolean | null | { [key: string]: Json | undefined } - | Json[]; + | Json[] export type Database = { graphql_public: { Tables: { - [_ in never]: never; - }; + [_ in never]: never + } Views: { - [_ in never]: never; - }; + [_ in never]: never + } Functions: { graphql: { Args: { - extensions?: Json; - operationName?: string; - query?: string; - variables?: Json; - }; - Returns: Json; - }; - }; + extensions?: Json + operationName?: string + query?: string + variables?: Json + } + Returns: Json + } + } Enums: { - [_ in never]: never; - }; + [_ in never]: never + } CompositeTypes: { - [_ in never]: never; - }; - }; + [_ in never]: never + } + } public: { Tables: { archivos: { Row: { - bytes: number | null; - id: string; - mime_type: string | null; - nombre: string; - notas: string | null; - openai_file_id: string | null; - ruta_storage: string; - subido_en: string; - subido_por: string | null; - temporal: boolean; - }; + bytes: number | null + id: string + mime_type: string | null + nombre: string + notas: string | null + openai_file_id: string | null + ruta_storage: string + subido_en: string + subido_por: string | null + temporal: boolean + } Insert: { - bytes?: number | null; - id?: string; - mime_type?: string | null; - nombre: string; - notas?: string | null; - openai_file_id?: string | null; - ruta_storage: string; - subido_en?: string; - subido_por?: string | null; - temporal?: boolean; - }; + bytes?: number | null + id?: string + mime_type?: string | null + nombre: string + notas?: string | null + openai_file_id?: string | null + ruta_storage: string + subido_en?: string + subido_por?: string | null + temporal?: boolean + } Update: { - bytes?: number | null; - id?: string; - mime_type?: string | null; - nombre?: string; - notas?: string | null; - openai_file_id?: string | null; - ruta_storage?: string; - subido_en?: string; - subido_por?: string | null; - temporal?: boolean; - }; + bytes?: number | null + id?: string + mime_type?: string | null + nombre?: string + notas?: string | null + openai_file_id?: string | null + ruta_storage?: string + subido_en?: string + subido_por?: string | null + temporal?: boolean + } Relationships: [ { - foreignKeyName: "archivos_subido_por_fkey"; - columns: ["subido_por"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "archivos_subido_por_fkey" + columns: ["subido_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, - ]; - }; + ] + } asignatura_mensajes_ia: { Row: { - campos: string[]; - conversacion_asignatura_id: string; - enviado_por: string; - estado: Database["public"]["Enums"]["estado_mensaje_ia"]; - fecha_actualizacion: string; - fecha_creacion: string; - id: string; - is_refusal: boolean; - mensaje: string; - propuesta: Json | null; - respuesta: string | null; - }; + campos: string[] + conversacion_asignatura_id: string + enviado_por: string + estado: Database["public"]["Enums"]["estado_mensaje_ia"] + fecha_actualizacion: string + fecha_creacion: string + id: string + is_refusal: boolean + mensaje: string + propuesta: Json | null + respuesta: string | null + } Insert: { - campos?: string[]; - conversacion_asignatura_id: string; - enviado_por?: string; - estado?: Database["public"]["Enums"]["estado_mensaje_ia"]; - fecha_actualizacion?: string; - fecha_creacion?: string; - id?: string; - is_refusal?: boolean; - mensaje: string; - propuesta?: Json | null; - respuesta?: string | null; - }; + campos?: string[] + conversacion_asignatura_id: string + enviado_por?: string + estado?: Database["public"]["Enums"]["estado_mensaje_ia"] + fecha_actualizacion?: string + fecha_creacion?: string + id?: string + is_refusal?: boolean + mensaje: string + propuesta?: Json | null + respuesta?: string | null + } Update: { - campos?: string[]; - conversacion_asignatura_id?: string; - enviado_por?: string; - estado?: Database["public"]["Enums"]["estado_mensaje_ia"]; - fecha_actualizacion?: string; - fecha_creacion?: string; - id?: string; - is_refusal?: boolean; - mensaje?: string; - propuesta?: Json | null; - respuesta?: string | null; - }; + campos?: string[] + conversacion_asignatura_id?: string + enviado_por?: string + estado?: Database["public"]["Enums"]["estado_mensaje_ia"] + fecha_actualizacion?: string + fecha_creacion?: string + id?: string + is_refusal?: boolean + mensaje?: string + propuesta?: Json | null + respuesta?: string | null + } Relationships: [ { - foreignKeyName: - "asignatura_mensajes_ia_conversacion_asignatura_id_fkey"; - columns: ["conversacion_asignatura_id"]; - isOneToOne: false; - referencedRelation: "conversaciones_asignatura"; - referencedColumns: ["id"]; + foreignKeyName: "asignatura_mensajes_ia_conversacion_asignatura_id_fkey" + columns: ["conversacion_asignatura_id"] + isOneToOne: false + referencedRelation: "conversaciones_asignatura" + referencedColumns: ["id"] }, - ]; - }; + ] + } asignaturas: { Row: { - actualizado_en: string; - actualizado_por: string | null; - asignatura_hash: string | null; - codigo: string | null; - contenido_tematico: Json; - 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; - horas_academicas: number | null; - horas_independientes: number | null; - id: string; - linea_plan_id: string | null; - meta_origen: Json; - nombre: string; - numero_ciclo: number | null; - orden_celda: number | null; - plan_estudio_id: string; - tipo: Database["public"]["Enums"]["tipo_asignatura"]; - tipo_origen: Database["public"]["Enums"]["tipo_origen"] | null; - }; + actualizado_en: string + actualizado_por: string | null + asignatura_hash: string | null + codigo: string | null + contenido_tematico: Json + 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 + horas_academicas: number | null + horas_independientes: number | null + id: string + linea_plan_id: string | null + meta_origen: Json + nombre: string + numero_ciclo: number | null + orden_celda: number | null + plan_estudio_id: string + tipo: Database["public"]["Enums"]["tipo_asignatura"] + tipo_origen: Database["public"]["Enums"]["tipo_origen"] | null + } Insert: { - actualizado_en?: string; - actualizado_por?: string | null; - asignatura_hash?: string | null; - codigo?: string | null; - contenido_tematico?: Json; - 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; - horas_academicas?: number | null; - horas_independientes?: number | null; - id?: string; - linea_plan_id?: string | null; - meta_origen?: Json; - nombre: string; - numero_ciclo?: number | null; - orden_celda?: number | null; - plan_estudio_id: string; - tipo?: Database["public"]["Enums"]["tipo_asignatura"]; - tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null; - }; + actualizado_en?: string + actualizado_por?: string | null + asignatura_hash?: string | null + codigo?: string | null + contenido_tematico?: Json + 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 + horas_academicas?: number | null + horas_independientes?: number | null + id?: string + linea_plan_id?: string | null + meta_origen?: Json + nombre: string + numero_ciclo?: number | null + orden_celda?: number | null + plan_estudio_id: string + tipo?: Database["public"]["Enums"]["tipo_asignatura"] + tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null + } Update: { - actualizado_en?: string; - actualizado_por?: string | null; - asignatura_hash?: string | null; - codigo?: string | null; - contenido_tematico?: Json; - 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; - horas_academicas?: number | null; - horas_independientes?: number | null; - id?: string; - linea_plan_id?: string | null; - meta_origen?: Json; - nombre?: string; - numero_ciclo?: number | null; - orden_celda?: number | null; - plan_estudio_id?: string; - tipo?: Database["public"]["Enums"]["tipo_asignatura"]; - tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null; - }; + actualizado_en?: string + actualizado_por?: string | null + asignatura_hash?: string | null + codigo?: string | null + contenido_tematico?: Json + 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 + horas_academicas?: number | null + horas_independientes?: number | null + id?: string + linea_plan_id?: string | null + meta_origen?: Json + nombre?: string + numero_ciclo?: number | null + orden_celda?: number | null + plan_estudio_id?: string + tipo?: Database["public"]["Enums"]["tipo_asignatura"] + tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null + } Relationships: [ { - foreignKeyName: "asignaturas_actualizado_por_fkey"; - columns: ["actualizado_por"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "asignaturas_actualizado_por_fkey" + columns: ["actualizado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, { - foreignKeyName: "asignaturas_creado_por_fkey"; - columns: ["creado_por"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "asignaturas_creado_por_fkey" + columns: ["creado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, { - foreignKeyName: "asignaturas_estructura_id_fkey"; - columns: ["estructura_id"]; - isOneToOne: false; - referencedRelation: "estructuras_asignatura"; - referencedColumns: ["id"]; + foreignKeyName: "asignaturas_estructura_id_fkey" + columns: ["estructura_id"] + isOneToOne: false + referencedRelation: "estructuras_asignatura" + referencedColumns: ["id"] }, { - foreignKeyName: "asignaturas_estructura_id_fkey"; - columns: ["estructura_id"]; - isOneToOne: false; - referencedRelation: "plantilla_asignatura"; - referencedColumns: ["estructura_id"]; + foreignKeyName: "asignaturas_estructura_id_fkey" + columns: ["estructura_id"] + isOneToOne: false + referencedRelation: "plantilla_asignatura" + referencedColumns: ["estructura_id"] }, { - foreignKeyName: "asignaturas_linea_plan_fk_compuesta"; - columns: ["linea_plan_id", "plan_estudio_id"]; - isOneToOne: false; - referencedRelation: "lineas_plan"; - referencedColumns: ["id", "plan_estudio_id"]; + foreignKeyName: "asignaturas_linea_plan_fk_compuesta" + columns: ["linea_plan_id", "plan_estudio_id"] + isOneToOne: false + referencedRelation: "lineas_plan" + referencedColumns: ["id", "plan_estudio_id"] }, { - foreignKeyName: "asignaturas_plan_estudio_id_fkey"; - columns: ["plan_estudio_id"]; - isOneToOne: false; - referencedRelation: "planes_estudio"; - referencedColumns: ["id"]; + foreignKeyName: "asignaturas_plan_estudio_id_fkey" + columns: ["plan_estudio_id"] + isOneToOne: false + referencedRelation: "planes_estudio" + referencedColumns: ["id"] }, { - foreignKeyName: "asignaturas_plan_estudio_id_fkey"; - columns: ["plan_estudio_id"]; - isOneToOne: false; - referencedRelation: "plantilla_plan"; - referencedColumns: ["plan_estudio_id"]; + foreignKeyName: "asignaturas_plan_estudio_id_fkey" + columns: ["plan_estudio_id"] + isOneToOne: false + referencedRelation: "plantilla_plan" + referencedColumns: ["plan_estudio_id"] }, - ]; - }; + ] + } bibliografia_asignatura: { Row: { - actualizado_en: string; - asignatura_id: string; - biblioteca_item_id: string | null; - cita: string; - creado_en: string; - creado_por: string | null; - id: string; - tipo: Database["public"]["Enums"]["tipo_bibliografia"]; - tipo_fuente: Database["public"]["Enums"]["tipo_fuente_bibliografia"]; - }; + actualizado_en: string + asignatura_id: string + biblioteca_item_id: string | null + cita: string + creado_en: string + creado_por: string | null + id: string + tipo: Database["public"]["Enums"]["tipo_bibliografia"] + tipo_fuente: Database["public"]["Enums"]["tipo_fuente_bibliografia"] + } Insert: { - actualizado_en?: string; - asignatura_id: string; - biblioteca_item_id?: string | null; - cita: string; - creado_en?: string; - creado_por?: string | null; - id?: string; - tipo: Database["public"]["Enums"]["tipo_bibliografia"]; - tipo_fuente?: Database["public"]["Enums"]["tipo_fuente_bibliografia"]; - }; + actualizado_en?: string + asignatura_id: string + biblioteca_item_id?: string | null + cita: string + creado_en?: string + creado_por?: string | null + id?: string + tipo: Database["public"]["Enums"]["tipo_bibliografia"] + tipo_fuente?: Database["public"]["Enums"]["tipo_fuente_bibliografia"] + } Update: { - actualizado_en?: string; - asignatura_id?: string; - biblioteca_item_id?: string | null; - cita?: string; - creado_en?: string; - creado_por?: string | null; - id?: string; - tipo?: Database["public"]["Enums"]["tipo_bibliografia"]; - tipo_fuente?: Database["public"]["Enums"]["tipo_fuente_bibliografia"]; - }; + actualizado_en?: string + asignatura_id?: string + biblioteca_item_id?: string | null + cita?: string + creado_en?: string + creado_por?: string | null + id?: string + tipo?: Database["public"]["Enums"]["tipo_bibliografia"] + tipo_fuente?: Database["public"]["Enums"]["tipo_fuente_bibliografia"] + } Relationships: [ { - foreignKeyName: "bibliografia_asignatura_asignatura_id_fkey"; - columns: ["asignatura_id"]; - isOneToOne: false; - referencedRelation: "asignaturas"; - referencedColumns: ["id"]; + foreignKeyName: "bibliografia_asignatura_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "asignaturas" + referencedColumns: ["id"] }, { - foreignKeyName: "bibliografia_asignatura_asignatura_id_fkey"; - columns: ["asignatura_id"]; - isOneToOne: false; - referencedRelation: "plantilla_asignatura"; - referencedColumns: ["asignatura_id"]; + foreignKeyName: "bibliografia_asignatura_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "plantilla_asignatura" + referencedColumns: ["asignatura_id"] }, { - foreignKeyName: "bibliografia_asignatura_creado_por_fkey"; - columns: ["creado_por"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "bibliografia_asignatura_creado_por_fkey" + columns: ["creado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, - ]; - }; + ] + } cambios_asignatura: { Row: { - asignatura_id: string; - cambiado_en: string; - cambiado_por: string | null; - campo: string | null; - fuente: Database["public"]["Enums"]["fuente_cambio"] | null; - id: string; - interaccion_ia_id: string | null; - tipo: Database["public"]["Enums"]["tipo_cambio"]; - valor_anterior: Json | null; - valor_nuevo: Json | null; - }; + asignatura_id: string + cambiado_en: string + cambiado_por: string | null + campo: string | null + fuente: Database["public"]["Enums"]["fuente_cambio"] | null + id: string + interaccion_ia_id: string | null + tipo: Database["public"]["Enums"]["tipo_cambio"] + valor_anterior: Json | null + valor_nuevo: Json | null + } Insert: { - asignatura_id: string; - cambiado_en?: string; - cambiado_por?: string | null; - campo?: string | null; - fuente?: Database["public"]["Enums"]["fuente_cambio"] | null; - id?: string; - interaccion_ia_id?: string | null; - tipo: Database["public"]["Enums"]["tipo_cambio"]; - valor_anterior?: Json | null; - valor_nuevo?: Json | null; - }; + asignatura_id: string + cambiado_en?: string + cambiado_por?: string | null + campo?: string | null + fuente?: Database["public"]["Enums"]["fuente_cambio"] | null + id?: string + interaccion_ia_id?: string | null + tipo: Database["public"]["Enums"]["tipo_cambio"] + valor_anterior?: Json | null + valor_nuevo?: Json | null + } Update: { - asignatura_id?: string; - cambiado_en?: string; - cambiado_por?: string | null; - campo?: string | null; - fuente?: Database["public"]["Enums"]["fuente_cambio"] | null; - id?: string; - interaccion_ia_id?: string | null; - tipo?: Database["public"]["Enums"]["tipo_cambio"]; - valor_anterior?: Json | null; - valor_nuevo?: Json | null; - }; + asignatura_id?: string + cambiado_en?: string + cambiado_por?: string | null + campo?: string | null + fuente?: Database["public"]["Enums"]["fuente_cambio"] | null + id?: string + interaccion_ia_id?: string | null + tipo?: Database["public"]["Enums"]["tipo_cambio"] + valor_anterior?: Json | null + valor_nuevo?: Json | null + } Relationships: [ { - foreignKeyName: "cambios_asignatura_asignatura_id_fkey"; - columns: ["asignatura_id"]; - isOneToOne: false; - referencedRelation: "asignaturas"; - referencedColumns: ["id"]; + foreignKeyName: "cambios_asignatura_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "asignaturas" + referencedColumns: ["id"] }, { - foreignKeyName: "cambios_asignatura_asignatura_id_fkey"; - columns: ["asignatura_id"]; - isOneToOne: false; - referencedRelation: "plantilla_asignatura"; - referencedColumns: ["asignatura_id"]; + foreignKeyName: "cambios_asignatura_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "plantilla_asignatura" + referencedColumns: ["asignatura_id"] }, { - foreignKeyName: "cambios_asignatura_cambiado_por_fkey"; - columns: ["cambiado_por"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "cambios_asignatura_cambiado_por_fkey" + columns: ["cambiado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, - ]; - }; + ] + } cambios_plan: { Row: { - cambiado_en: string; - cambiado_por: string | null; - campo: string | null; - id: string; - plan_estudio_id: string; - response_id: string | null; - tipo: Database["public"]["Enums"]["tipo_cambio"]; - valor_anterior: Json | null; - valor_nuevo: Json | null; - }; + cambiado_en: string + cambiado_por: string | null + campo: string | null + id: string + plan_estudio_id: string + response_id: string | null + tipo: Database["public"]["Enums"]["tipo_cambio"] + valor_anterior: Json | null + valor_nuevo: Json | null + } Insert: { - cambiado_en?: string; - cambiado_por?: string | null; - campo?: string | null; - id?: string; - plan_estudio_id: string; - response_id?: string | null; - tipo: Database["public"]["Enums"]["tipo_cambio"]; - valor_anterior?: Json | null; - valor_nuevo?: Json | null; - }; + cambiado_en?: string + cambiado_por?: string | null + campo?: string | null + id?: string + plan_estudio_id: string + response_id?: string | null + tipo: Database["public"]["Enums"]["tipo_cambio"] + valor_anterior?: Json | null + valor_nuevo?: Json | null + } Update: { - cambiado_en?: string; - cambiado_por?: string | null; - campo?: string | null; - id?: string; - plan_estudio_id?: string; - response_id?: string | null; - tipo?: Database["public"]["Enums"]["tipo_cambio"]; - valor_anterior?: Json | null; - valor_nuevo?: Json | null; - }; + cambiado_en?: string + cambiado_por?: string | null + campo?: string | null + id?: string + plan_estudio_id?: string + response_id?: string | null + tipo?: Database["public"]["Enums"]["tipo_cambio"] + valor_anterior?: Json | null + valor_nuevo?: Json | null + } Relationships: [ { - foreignKeyName: "cambios_plan_cambiado_por_fkey"; - columns: ["cambiado_por"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "cambios_plan_cambiado_por_fkey" + columns: ["cambiado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, - ]; - }; + ] + } carreras: { Row: { - activa: boolean; - actualizado_en: string; - clave_sep: string | null; - creado_en: string; - facultad_id: string; - id: string; - nombre: string; - nombre_corto: string | null; - }; + activa: boolean + actualizado_en: string + clave_sep: string | null + creado_en: string + facultad_id: string + id: string + nombre: string + nombre_corto: string | null + } Insert: { - activa?: boolean; - actualizado_en?: string; - clave_sep?: string | null; - creado_en?: string; - facultad_id: string; - id?: string; - nombre: string; - nombre_corto?: string | null; - }; + activa?: boolean + actualizado_en?: string + clave_sep?: string | null + creado_en?: string + facultad_id: string + id?: string + nombre: string + nombre_corto?: string | null + } Update: { - activa?: boolean; - actualizado_en?: string; - clave_sep?: string | null; - creado_en?: string; - facultad_id?: string; - id?: string; - nombre?: string; - nombre_corto?: string | null; - }; + activa?: boolean + actualizado_en?: string + clave_sep?: string | null + creado_en?: string + facultad_id?: string + id?: string + nombre?: string + nombre_corto?: string | null + } Relationships: [ { - foreignKeyName: "carreras_facultad_id_fkey"; - columns: ["facultad_id"]; - isOneToOne: false; - referencedRelation: "facultades"; - referencedColumns: ["id"]; + foreignKeyName: "carreras_facultad_id_fkey" + columns: ["facultad_id"] + isOneToOne: false + referencedRelation: "facultades" + referencedColumns: ["id"] }, - ]; - }; + ] + } conversaciones_asignatura: { Row: { - archivado_en: string | null; - archivado_por: string | null; - asignatura_id: string; - conversacion_json: Json; - creado_en: string; - creado_por: string | null; - estado: Database["public"]["Enums"]["estado_conversacion"]; - id: string; - intento_archivado: number; - openai_conversation_id: string; - }; + archivado_en: string | null + archivado_por: string | null + asignatura_id: string + conversacion_json: Json + creado_en: string + creado_por: string | null + estado: Database["public"]["Enums"]["estado_conversacion"] + id: string + intento_archivado: number + openai_conversation_id: string + } Insert: { - archivado_en?: string | null; - archivado_por?: string | null; - asignatura_id: string; - conversacion_json?: Json; - creado_en?: string; - creado_por?: string | null; - estado?: Database["public"]["Enums"]["estado_conversacion"]; - id?: string; - intento_archivado?: number; - openai_conversation_id: string; - }; + archivado_en?: string | null + archivado_por?: string | null + asignatura_id: string + conversacion_json?: Json + creado_en?: string + creado_por?: string | null + estado?: Database["public"]["Enums"]["estado_conversacion"] + id?: string + intento_archivado?: number + openai_conversation_id: string + } Update: { - archivado_en?: string | null; - archivado_por?: string | null; - asignatura_id?: string; - conversacion_json?: Json; - creado_en?: string; - creado_por?: string | null; - estado?: Database["public"]["Enums"]["estado_conversacion"]; - id?: string; - intento_archivado?: number; - openai_conversation_id?: string; - }; + archivado_en?: string | null + archivado_por?: string | null + asignatura_id?: string + conversacion_json?: Json + creado_en?: string + creado_por?: string | null + estado?: Database["public"]["Enums"]["estado_conversacion"] + id?: string + intento_archivado?: number + openai_conversation_id?: string + } Relationships: [ { - foreignKeyName: "conversaciones_asignatura_archivado_por_fkey"; - columns: ["archivado_por"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "conversaciones_asignatura_archivado_por_fkey" + columns: ["archivado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, { - foreignKeyName: "conversaciones_asignatura_asignatura_id_fkey"; - columns: ["asignatura_id"]; - isOneToOne: false; - referencedRelation: "asignaturas"; - referencedColumns: ["id"]; + foreignKeyName: "conversaciones_asignatura_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "asignaturas" + referencedColumns: ["id"] }, { - foreignKeyName: "conversaciones_asignatura_asignatura_id_fkey"; - columns: ["asignatura_id"]; - isOneToOne: false; - referencedRelation: "plantilla_asignatura"; - referencedColumns: ["asignatura_id"]; + foreignKeyName: "conversaciones_asignatura_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "plantilla_asignatura" + referencedColumns: ["asignatura_id"] }, { - foreignKeyName: "conversaciones_asignatura_creado_por_fkey"; - columns: ["creado_por"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "conversaciones_asignatura_creado_por_fkey" + columns: ["creado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, - ]; - }; + ] + } conversaciones_plan: { Row: { - archivado_en: string | null; - archivado_por: string | null; - conversacion_json: Json; - creado_en: string; - creado_por: string | null; - estado: Database["public"]["Enums"]["estado_conversacion"]; - id: string; - intento_archivado: number; - nombre: string | null; - openai_conversation_id: string; - plan_estudio_id: string; - }; + archivado_en: string | null + archivado_por: string | null + conversacion_json: Json + creado_en: string + creado_por: string | null + estado: Database["public"]["Enums"]["estado_conversacion"] + id: string + intento_archivado: number + nombre: string | null + openai_conversation_id: string + plan_estudio_id: string + } Insert: { - archivado_en?: string | null; - archivado_por?: string | null; - conversacion_json?: Json; - creado_en?: string; - creado_por?: string | null; - estado?: Database["public"]["Enums"]["estado_conversacion"]; - id?: string; - intento_archivado?: number; - nombre?: string | null; - openai_conversation_id: string; - plan_estudio_id: string; - }; + archivado_en?: string | null + archivado_por?: string | null + conversacion_json?: Json + creado_en?: string + creado_por?: string | null + estado?: Database["public"]["Enums"]["estado_conversacion"] + id?: string + intento_archivado?: number + nombre?: string | null + openai_conversation_id: string + plan_estudio_id: string + } Update: { - archivado_en?: string | null; - archivado_por?: string | null; - conversacion_json?: Json; - creado_en?: string; - creado_por?: string | null; - estado?: Database["public"]["Enums"]["estado_conversacion"]; - id?: string; - intento_archivado?: number; - nombre?: string | null; - openai_conversation_id?: string; - plan_estudio_id?: string; - }; + archivado_en?: string | null + archivado_por?: string | null + conversacion_json?: Json + creado_en?: string + creado_por?: string | null + estado?: Database["public"]["Enums"]["estado_conversacion"] + id?: string + intento_archivado?: number + nombre?: string | null + openai_conversation_id?: string + plan_estudio_id?: string + } Relationships: [ { - foreignKeyName: "conversaciones_plan_archivado_por_fkey"; - columns: ["archivado_por"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "conversaciones_plan_archivado_por_fkey" + columns: ["archivado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, { - foreignKeyName: "conversaciones_plan_creado_por_fkey"; - columns: ["creado_por"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "conversaciones_plan_creado_por_fkey" + columns: ["creado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, { - foreignKeyName: "conversaciones_plan_plan_estudio_id_fkey"; - columns: ["plan_estudio_id"]; - isOneToOne: false; - referencedRelation: "planes_estudio"; - referencedColumns: ["id"]; + foreignKeyName: "conversaciones_plan_plan_estudio_id_fkey" + columns: ["plan_estudio_id"] + isOneToOne: false + referencedRelation: "planes_estudio" + referencedColumns: ["id"] }, { - foreignKeyName: "conversaciones_plan_plan_estudio_id_fkey"; - columns: ["plan_estudio_id"]; - isOneToOne: false; - referencedRelation: "plantilla_plan"; - referencedColumns: ["plan_estudio_id"]; + foreignKeyName: "conversaciones_plan_plan_estudio_id_fkey" + columns: ["plan_estudio_id"] + isOneToOne: false + referencedRelation: "plantilla_plan" + referencedColumns: ["plan_estudio_id"] }, - ]; - }; + ] + } estados_plan: { Row: { - clave: string; - es_final: boolean; - etiqueta: string; - id: string; - orden: number; - }; + clave: string + es_final: boolean + etiqueta: string + id: string + orden: number + } Insert: { - clave: string; - es_final?: boolean; - etiqueta: string; - id?: string; - orden?: number; - }; + clave: string + es_final?: boolean + etiqueta: string + id?: string + orden?: number + } Update: { - clave?: string; - es_final?: boolean; - etiqueta?: string; - id?: string; - orden?: number; - }; - Relationships: []; - }; + clave?: string + es_final?: boolean + etiqueta?: string + id?: string + orden?: number + } + Relationships: [] + } estructuras_asignatura: { Row: { - actualizado_en: string; - creado_en: string; - definicion: Json; - id: string; - nombre: string; - template_id: string | null; - tipo: Database["public"]["Enums"]["tipo_estructura_plan"] | null; - }; + actualizado_en: string + creado_en: string + definicion: Json + id: string + nombre: string + template_id: string | null + tipo: Database["public"]["Enums"]["tipo_estructura_plan"] | null + } Insert: { - actualizado_en?: string; - creado_en?: string; - definicion?: Json; - id?: string; - nombre: string; - template_id?: string | null; - tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] | null; - }; + actualizado_en?: string + creado_en?: string + definicion?: Json + id?: string + nombre: string + template_id?: string | null + tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] | null + } Update: { - actualizado_en?: string; - creado_en?: string; - definicion?: Json; - id?: string; - nombre?: string; - template_id?: string | null; - tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] | null; - }; - Relationships: []; - }; + actualizado_en?: string + creado_en?: string + definicion?: Json + id?: string + nombre?: string + template_id?: string | null + tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] | null + } + Relationships: [] + } estructuras_plan: { Row: { - actualizado_en: string; - creado_en: string; - definicion: Json; - id: string; - nombre: string; - template_id: string | null; - tipo: Database["public"]["Enums"]["tipo_estructura_plan"]; - }; + actualizado_en: string + creado_en: string + definicion: Json + id: string + nombre: string + template_id: string | null + tipo: Database["public"]["Enums"]["tipo_estructura_plan"] + } Insert: { - actualizado_en?: string; - creado_en?: string; - definicion?: Json; - id?: string; - nombre: string; - template_id?: string | null; - tipo: Database["public"]["Enums"]["tipo_estructura_plan"]; - }; + actualizado_en?: string + creado_en?: string + definicion?: Json + id?: string + nombre: string + template_id?: string | null + tipo: Database["public"]["Enums"]["tipo_estructura_plan"] + } Update: { - actualizado_en?: string; - creado_en?: string; - definicion?: Json; - id?: string; - nombre?: string; - template_id?: string | null; - tipo?: Database["public"]["Enums"]["tipo_estructura_plan"]; - }; - Relationships: []; - }; + actualizado_en?: string + creado_en?: string + definicion?: Json + id?: string + nombre?: string + template_id?: string | null + tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] + } + Relationships: [] + } facultades: { Row: { - actualizado_en: string; - color: string | null; - creado_en: string; - icono: string | null; - id: string; - nombre: string; - nombre_corto: string | null; - }; + actualizado_en: string + color: string | null + creado_en: string + icono: string | null + id: string + nombre: string + nombre_corto: string | null + } Insert: { - actualizado_en?: string; - color?: string | null; - creado_en?: string; - icono?: string | null; - id?: string; - nombre: string; - nombre_corto?: string | null; - }; + actualizado_en?: string + color?: string | null + creado_en?: string + icono?: string | null + id?: string + nombre: string + nombre_corto?: string | null + } Update: { - actualizado_en?: string; - color?: string | null; - creado_en?: string; - icono?: string | null; - id?: string; - nombre?: string; - nombre_corto?: string | null; - }; - Relationships: []; - }; + actualizado_en?: string + color?: string | null + creado_en?: string + icono?: string | null + id?: string + nombre?: string + nombre_corto?: string | null + } + Relationships: [] + } interacciones_ia: { Row: { - aceptada: boolean; - asignatura_id: string | null; - conversacion_id: string | null; - creado_en: string; - id: string; - ids_archivos: Json; - ids_vector_store: Json; - modelo: string | null; - plan_estudio_id: string | null; - prompt: Json; - respuesta: Json; - rutas_storage: Json; - temperatura: number | null; - tipo: Database["public"]["Enums"]["tipo_interaccion_ia"]; - usuario_id: string | null; - }; + aceptada: boolean + asignatura_id: string | null + conversacion_id: string | null + creado_en: string + id: string + ids_archivos: Json + ids_vector_store: Json + modelo: string | null + plan_estudio_id: string | null + prompt: Json + respuesta: Json + rutas_storage: Json + temperatura: number | null + tipo: Database["public"]["Enums"]["tipo_interaccion_ia"] + usuario_id: string | null + } Insert: { - aceptada?: boolean; - asignatura_id?: string | null; - conversacion_id?: string | null; - creado_en?: string; - id?: string; - ids_archivos?: Json; - ids_vector_store?: Json; - modelo?: string | null; - plan_estudio_id?: string | null; - prompt?: Json; - respuesta?: Json; - rutas_storage?: Json; - temperatura?: number | null; - tipo: Database["public"]["Enums"]["tipo_interaccion_ia"]; - usuario_id?: string | null; - }; + aceptada?: boolean + asignatura_id?: string | null + conversacion_id?: string | null + creado_en?: string + id?: string + ids_archivos?: Json + ids_vector_store?: Json + modelo?: string | null + plan_estudio_id?: string | null + prompt?: Json + respuesta?: Json + rutas_storage?: Json + temperatura?: number | null + tipo: Database["public"]["Enums"]["tipo_interaccion_ia"] + usuario_id?: string | null + } Update: { - aceptada?: boolean; - asignatura_id?: string | null; - conversacion_id?: string | null; - creado_en?: string; - id?: string; - ids_archivos?: Json; - ids_vector_store?: Json; - modelo?: string | null; - plan_estudio_id?: string | null; - prompt?: Json; - respuesta?: Json; - rutas_storage?: Json; - temperatura?: number | null; - tipo?: Database["public"]["Enums"]["tipo_interaccion_ia"]; - usuario_id?: string | null; - }; + aceptada?: boolean + asignatura_id?: string | null + conversacion_id?: string | null + creado_en?: string + id?: string + ids_archivos?: Json + ids_vector_store?: Json + modelo?: string | null + plan_estudio_id?: string | null + prompt?: Json + respuesta?: Json + rutas_storage?: Json + temperatura?: number | null + tipo?: Database["public"]["Enums"]["tipo_interaccion_ia"] + usuario_id?: string | null + } Relationships: [ { - foreignKeyName: "interacciones_ia_asignatura_id_fkey"; - columns: ["asignatura_id"]; - isOneToOne: false; - referencedRelation: "asignaturas"; - referencedColumns: ["id"]; + foreignKeyName: "interacciones_ia_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "asignaturas" + referencedColumns: ["id"] }, { - foreignKeyName: "interacciones_ia_asignatura_id_fkey"; - columns: ["asignatura_id"]; - isOneToOne: false; - referencedRelation: "plantilla_asignatura"; - referencedColumns: ["asignatura_id"]; + foreignKeyName: "interacciones_ia_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "plantilla_asignatura" + referencedColumns: ["asignatura_id"] }, { - foreignKeyName: "interacciones_ia_plan_estudio_id_fkey"; - columns: ["plan_estudio_id"]; - isOneToOne: false; - referencedRelation: "planes_estudio"; - referencedColumns: ["id"]; + foreignKeyName: "interacciones_ia_plan_estudio_id_fkey" + columns: ["plan_estudio_id"] + isOneToOne: false + referencedRelation: "planes_estudio" + referencedColumns: ["id"] }, { - foreignKeyName: "interacciones_ia_plan_estudio_id_fkey"; - columns: ["plan_estudio_id"]; - isOneToOne: false; - referencedRelation: "plantilla_plan"; - referencedColumns: ["plan_estudio_id"]; + foreignKeyName: "interacciones_ia_plan_estudio_id_fkey" + columns: ["plan_estudio_id"] + isOneToOne: false + referencedRelation: "plantilla_plan" + referencedColumns: ["plan_estudio_id"] }, { - foreignKeyName: "interacciones_ia_usuario_id_fkey"; - columns: ["usuario_id"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "interacciones_ia_usuario_id_fkey" + columns: ["usuario_id"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, - ]; - }; + ] + } lineas_plan: { Row: { - actualizado_en: string; - area: string | null; - creado_en: string; - id: string; - nombre: string; - orden: number; - plan_estudio_id: string; - }; + actualizado_en: string + area: string | null + creado_en: string + id: string + nombre: string + orden: number + plan_estudio_id: string + } Insert: { - actualizado_en?: string; - area?: string | null; - creado_en?: string; - id?: string; - nombre: string; - orden?: number; - plan_estudio_id: string; - }; + actualizado_en?: string + area?: string | null + creado_en?: string + id?: string + nombre: string + orden?: number + plan_estudio_id: string + } Update: { - actualizado_en?: string; - area?: string | null; - creado_en?: string; - id?: string; - nombre?: string; - orden?: number; - plan_estudio_id?: string; - }; + actualizado_en?: string + area?: string | null + creado_en?: string + id?: string + nombre?: string + orden?: number + plan_estudio_id?: string + } Relationships: [ { - foreignKeyName: "lineas_plan_plan_estudio_id_fkey"; - columns: ["plan_estudio_id"]; - isOneToOne: false; - referencedRelation: "planes_estudio"; - referencedColumns: ["id"]; + foreignKeyName: "lineas_plan_plan_estudio_id_fkey" + columns: ["plan_estudio_id"] + isOneToOne: false + referencedRelation: "planes_estudio" + referencedColumns: ["id"] }, { - foreignKeyName: "lineas_plan_plan_estudio_id_fkey"; - columns: ["plan_estudio_id"]; - isOneToOne: false; - referencedRelation: "plantilla_plan"; - referencedColumns: ["plan_estudio_id"]; + foreignKeyName: "lineas_plan_plan_estudio_id_fkey" + columns: ["plan_estudio_id"] + isOneToOne: false + referencedRelation: "plantilla_plan" + referencedColumns: ["plan_estudio_id"] }, - ]; - }; + ] + } notificaciones: { Row: { - creado_en: string; - id: string; - leida: boolean; - leida_en: string | null; - payload: Json; - tipo: Database["public"]["Enums"]["tipo_notificacion"]; - usuario_id: string; - }; + creado_en: string + id: string + leida: boolean + leida_en: string | null + payload: Json + tipo: Database["public"]["Enums"]["tipo_notificacion"] + usuario_id: string + } Insert: { - creado_en?: string; - id?: string; - leida?: boolean; - leida_en?: string | null; - payload?: Json; - tipo: Database["public"]["Enums"]["tipo_notificacion"]; - usuario_id: string; - }; + creado_en?: string + id?: string + leida?: boolean + leida_en?: string | null + payload?: Json + tipo: Database["public"]["Enums"]["tipo_notificacion"] + usuario_id: string + } Update: { - creado_en?: string; - id?: string; - leida?: boolean; - leida_en?: string | null; - payload?: Json; - tipo?: Database["public"]["Enums"]["tipo_notificacion"]; - usuario_id?: string; - }; + creado_en?: string + id?: string + leida?: boolean + leida_en?: string | null + payload?: Json + tipo?: Database["public"]["Enums"]["tipo_notificacion"] + usuario_id?: string + } Relationships: [ { - foreignKeyName: "notificaciones_usuario_id_fkey"; - columns: ["usuario_id"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "notificaciones_usuario_id_fkey" + columns: ["usuario_id"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, - ]; - }; + ] + } plan_mensajes_ia: { Row: { - campos: string[]; - conversacion_plan_id: string; - enviado_por: string; - estado: Database["public"]["Enums"]["estado_mensaje_ia"]; - fecha_actualizacion: string; - fecha_creacion: string; - id: string; - is_refusal: boolean; - mensaje: string; - propuesta: Json | null; - respuesta: string | null; - }; + campos: string[] + conversacion_plan_id: string + enviado_por: string + estado: Database["public"]["Enums"]["estado_mensaje_ia"] + fecha_actualizacion: string + fecha_creacion: string + id: string + is_refusal: boolean + mensaje: string + propuesta: Json | null + respuesta: string | null + } Insert: { - campos?: string[]; - conversacion_plan_id: string; - enviado_por?: string; - estado?: Database["public"]["Enums"]["estado_mensaje_ia"]; - fecha_actualizacion?: string; - fecha_creacion?: string; - id?: string; - is_refusal?: boolean; - mensaje: string; - propuesta?: Json | null; - respuesta?: string | null; - }; + campos?: string[] + conversacion_plan_id: string + enviado_por?: string + estado?: Database["public"]["Enums"]["estado_mensaje_ia"] + fecha_actualizacion?: string + fecha_creacion?: string + id?: string + is_refusal?: boolean + mensaje: string + propuesta?: Json | null + respuesta?: string | null + } Update: { - campos?: string[]; - conversacion_plan_id?: string; - enviado_por?: string; - estado?: Database["public"]["Enums"]["estado_mensaje_ia"]; - fecha_actualizacion?: string; - fecha_creacion?: string; - id?: string; - is_refusal?: boolean; - mensaje?: string; - propuesta?: Json | null; - respuesta?: string | null; - }; + campos?: string[] + conversacion_plan_id?: string + enviado_por?: string + estado?: Database["public"]["Enums"]["estado_mensaje_ia"] + fecha_actualizacion?: string + fecha_creacion?: string + id?: string + is_refusal?: boolean + mensaje?: string + propuesta?: Json | null + respuesta?: string | null + } Relationships: [ { - foreignKeyName: "plan_mensajes_ia_conversacion_plan_id_fkey"; - columns: ["conversacion_plan_id"]; - isOneToOne: false; - referencedRelation: "conversaciones_plan"; - referencedColumns: ["id"]; + foreignKeyName: "plan_mensajes_ia_conversacion_plan_id_fkey" + columns: ["conversacion_plan_id"] + isOneToOne: false + referencedRelation: "conversaciones_plan" + referencedColumns: ["id"] }, - ]; - }; + ] + } planes_estudio: { Row: { - activo: boolean; - actualizado_en: string; - actualizado_por: string | null; - carrera_id: string; - creado_en: string; - creado_por: string | null; - datos: Json; - estado_actual_id: string | null; - estructura_id: string; - id: string; - meta_origen: Json; - nivel: Database["public"]["Enums"]["nivel_plan_estudio"]; - nombre: string; - nombre_search: string | null; - numero_ciclos: number; - plan_hash: string | null; - tipo_ciclo: Database["public"]["Enums"]["tipo_ciclo"]; - tipo_origen: Database["public"]["Enums"]["tipo_origen"] | null; - }; + activo: boolean + actualizado_en: string + actualizado_por: string | null + carrera_id: string + creado_en: string + creado_por: string | null + datos: Json + estado_actual_id: string | null + estructura_id: string + id: string + meta_origen: Json + nivel: Database["public"]["Enums"]["nivel_plan_estudio"] + nombre: string + nombre_search: string | null + numero_ciclos: number + plan_hash: string | null + tipo_ciclo: Database["public"]["Enums"]["tipo_ciclo"] + tipo_origen: Database["public"]["Enums"]["tipo_origen"] | null + } Insert: { - activo?: boolean; - actualizado_en?: string; - actualizado_por?: string | null; - carrera_id: string; - creado_en?: string; - creado_por?: string | null; - datos?: Json; - estado_actual_id?: string | null; - estructura_id: string; - id?: string; - meta_origen?: Json; - nivel: Database["public"]["Enums"]["nivel_plan_estudio"]; - nombre: string; - nombre_search?: string | null; - numero_ciclos: number; - plan_hash?: string | null; - tipo_ciclo: Database["public"]["Enums"]["tipo_ciclo"]; - tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null; - }; + activo?: boolean + actualizado_en?: string + actualizado_por?: string | null + carrera_id: string + creado_en?: string + creado_por?: string | null + datos?: Json + estado_actual_id?: string | null + estructura_id: string + id?: string + meta_origen?: Json + nivel: Database["public"]["Enums"]["nivel_plan_estudio"] + nombre: string + nombre_search?: string | null + numero_ciclos: number + plan_hash?: string | null + tipo_ciclo: Database["public"]["Enums"]["tipo_ciclo"] + tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null + } Update: { - activo?: boolean; - actualizado_en?: string; - actualizado_por?: string | null; - carrera_id?: string; - creado_en?: string; - creado_por?: string | null; - datos?: Json; - estado_actual_id?: string | null; - estructura_id?: string; - id?: string; - meta_origen?: Json; - nivel?: Database["public"]["Enums"]["nivel_plan_estudio"]; - nombre?: string; - nombre_search?: string | null; - numero_ciclos?: number; - plan_hash?: string | null; - tipo_ciclo?: Database["public"]["Enums"]["tipo_ciclo"]; - tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null; - }; + activo?: boolean + actualizado_en?: string + actualizado_por?: string | null + carrera_id?: string + creado_en?: string + creado_por?: string | null + datos?: Json + estado_actual_id?: string | null + estructura_id?: string + id?: string + meta_origen?: Json + nivel?: Database["public"]["Enums"]["nivel_plan_estudio"] + nombre?: string + nombre_search?: string | null + numero_ciclos?: number + plan_hash?: string | null + tipo_ciclo?: Database["public"]["Enums"]["tipo_ciclo"] + tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null + } Relationships: [ { - foreignKeyName: "planes_estudio_actualizado_por_fkey"; - columns: ["actualizado_por"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "planes_estudio_actualizado_por_fkey" + columns: ["actualizado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, { - foreignKeyName: "planes_estudio_carrera_id_fkey"; - columns: ["carrera_id"]; - isOneToOne: false; - referencedRelation: "carreras"; - referencedColumns: ["id"]; + foreignKeyName: "planes_estudio_carrera_id_fkey" + columns: ["carrera_id"] + isOneToOne: false + referencedRelation: "carreras" + referencedColumns: ["id"] }, { - foreignKeyName: "planes_estudio_creado_por_fkey"; - columns: ["creado_por"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "planes_estudio_creado_por_fkey" + columns: ["creado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, { - foreignKeyName: "planes_estudio_estado_actual_id_fkey"; - columns: ["estado_actual_id"]; - isOneToOne: false; - referencedRelation: "estados_plan"; - referencedColumns: ["id"]; + foreignKeyName: "planes_estudio_estado_actual_id_fkey" + columns: ["estado_actual_id"] + isOneToOne: false + referencedRelation: "estados_plan" + referencedColumns: ["id"] }, { - foreignKeyName: "planes_estudio_estructura_id_fkey"; - columns: ["estructura_id"]; - isOneToOne: false; - referencedRelation: "estructuras_plan"; - referencedColumns: ["id"]; + foreignKeyName: "planes_estudio_estructura_id_fkey" + columns: ["estructura_id"] + isOneToOne: false + referencedRelation: "estructuras_plan" + referencedColumns: ["id"] }, { - foreignKeyName: "planes_estudio_estructura_id_fkey"; - columns: ["estructura_id"]; - isOneToOne: false; - referencedRelation: "plantilla_plan"; - referencedColumns: ["estructura_id"]; + foreignKeyName: "planes_estudio_estructura_id_fkey" + columns: ["estructura_id"] + isOneToOne: false + referencedRelation: "plantilla_plan" + referencedColumns: ["estructura_id"] }, - ]; - }; + ] + } responsables_asignatura: { Row: { - asignatura_id: string; - creado_en: string; - id: string; - rol: Database["public"]["Enums"]["rol_responsable_asignatura"]; - usuario_id: string; - }; + asignatura_id: string + creado_en: string + id: string + rol: Database["public"]["Enums"]["rol_responsable_asignatura"] + usuario_id: string + } Insert: { - asignatura_id: string; - creado_en?: string; - id?: string; - rol?: Database["public"]["Enums"]["rol_responsable_asignatura"]; - usuario_id: string; - }; + asignatura_id: string + creado_en?: string + id?: string + rol?: Database["public"]["Enums"]["rol_responsable_asignatura"] + usuario_id: string + } Update: { - asignatura_id?: string; - creado_en?: string; - id?: string; - rol?: Database["public"]["Enums"]["rol_responsable_asignatura"]; - usuario_id?: string; - }; + asignatura_id?: string + creado_en?: string + id?: string + rol?: Database["public"]["Enums"]["rol_responsable_asignatura"] + usuario_id?: string + } Relationships: [ { - foreignKeyName: "responsables_asignatura_asignatura_id_fkey"; - columns: ["asignatura_id"]; - isOneToOne: false; - referencedRelation: "asignaturas"; - referencedColumns: ["id"]; + foreignKeyName: "responsables_asignatura_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "asignaturas" + referencedColumns: ["id"] }, { - foreignKeyName: "responsables_asignatura_asignatura_id_fkey"; - columns: ["asignatura_id"]; - isOneToOne: false; - referencedRelation: "plantilla_asignatura"; - referencedColumns: ["asignatura_id"]; + foreignKeyName: "responsables_asignatura_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "plantilla_asignatura" + referencedColumns: ["asignatura_id"] }, { - foreignKeyName: "responsables_asignatura_usuario_id_fkey"; - columns: ["usuario_id"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "responsables_asignatura_usuario_id_fkey" + columns: ["usuario_id"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, - ]; - }; + ] + } roles: { Row: { - clave: string; - descripcion: string | null; - id: string; - nombre: string; - }; + clave: string + descripcion: string | null + id: string + nombre: string + } Insert: { - clave: string; - descripcion?: string | null; - id?: string; - nombre: string; - }; + clave: string + descripcion?: string | null + id?: string + nombre: string + } Update: { - clave?: string; - descripcion?: string | null; - id?: string; - nombre?: string; - }; - Relationships: []; - }; + clave?: string + descripcion?: string | null + id?: string + nombre?: string + } + Relationships: [] + } tareas_revision: { Row: { - asignado_a: string; - completado_en: string | null; - creado_en: string; - estado_id: string | null; - estatus: Database["public"]["Enums"]["estado_tarea_revision"]; - fecha_limite: string | null; - id: string; - plan_estudio_id: string; - rol_id: string | null; - }; + asignado_a: string + completado_en: string | null + creado_en: string + estado_id: string | null + estatus: Database["public"]["Enums"]["estado_tarea_revision"] + fecha_limite: string | null + id: string + plan_estudio_id: string + rol_id: string | null + } Insert: { - asignado_a: string; - completado_en?: string | null; - creado_en?: string; - estado_id?: string | null; - estatus?: Database["public"]["Enums"]["estado_tarea_revision"]; - fecha_limite?: string | null; - id?: string; - plan_estudio_id: string; - rol_id?: string | null; - }; + asignado_a: string + completado_en?: string | null + creado_en?: string + estado_id?: string | null + estatus?: Database["public"]["Enums"]["estado_tarea_revision"] + fecha_limite?: string | null + id?: string + plan_estudio_id: string + rol_id?: string | null + } Update: { - asignado_a?: string; - completado_en?: string | null; - creado_en?: string; - estado_id?: string | null; - estatus?: Database["public"]["Enums"]["estado_tarea_revision"]; - fecha_limite?: string | null; - id?: string; - plan_estudio_id?: string; - rol_id?: string | null; - }; + asignado_a?: string + completado_en?: string | null + creado_en?: string + estado_id?: string | null + estatus?: Database["public"]["Enums"]["estado_tarea_revision"] + fecha_limite?: string | null + id?: string + plan_estudio_id?: string + rol_id?: string | null + } Relationships: [ { - foreignKeyName: "tareas_revision_asignado_a_fkey"; - columns: ["asignado_a"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "tareas_revision_asignado_a_fkey" + columns: ["asignado_a"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, { - foreignKeyName: "tareas_revision_estado_id_fkey"; - columns: ["estado_id"]; - isOneToOne: false; - referencedRelation: "estados_plan"; - referencedColumns: ["id"]; + foreignKeyName: "tareas_revision_estado_id_fkey" + columns: ["estado_id"] + isOneToOne: false + referencedRelation: "estados_plan" + referencedColumns: ["id"] }, { - foreignKeyName: "tareas_revision_plan_estudio_id_fkey"; - columns: ["plan_estudio_id"]; - isOneToOne: false; - referencedRelation: "planes_estudio"; - referencedColumns: ["id"]; + foreignKeyName: "tareas_revision_plan_estudio_id_fkey" + columns: ["plan_estudio_id"] + isOneToOne: false + referencedRelation: "planes_estudio" + referencedColumns: ["id"] }, { - foreignKeyName: "tareas_revision_plan_estudio_id_fkey"; - columns: ["plan_estudio_id"]; - isOneToOne: false; - referencedRelation: "plantilla_plan"; - referencedColumns: ["plan_estudio_id"]; + foreignKeyName: "tareas_revision_plan_estudio_id_fkey" + columns: ["plan_estudio_id"] + isOneToOne: false + referencedRelation: "plantilla_plan" + referencedColumns: ["plan_estudio_id"] }, { - foreignKeyName: "tareas_revision_rol_id_fkey"; - columns: ["rol_id"]; - isOneToOne: false; - referencedRelation: "roles"; - referencedColumns: ["id"]; + foreignKeyName: "tareas_revision_rol_id_fkey" + columns: ["rol_id"] + isOneToOne: false + referencedRelation: "roles" + referencedColumns: ["id"] }, - ]; - }; + ] + } transiciones_estado_plan: { Row: { - creado_en: string; - desde_estado_id: string; - hacia_estado_id: string; - id: string; - rol_permitido_id: string; - }; + creado_en: string + desde_estado_id: string + hacia_estado_id: string + id: string + rol_permitido_id: string + } Insert: { - creado_en?: string; - desde_estado_id: string; - hacia_estado_id: string; - id?: string; - rol_permitido_id: string; - }; + creado_en?: string + desde_estado_id: string + hacia_estado_id: string + id?: string + rol_permitido_id: string + } Update: { - creado_en?: string; - desde_estado_id?: string; - hacia_estado_id?: string; - id?: string; - rol_permitido_id?: string; - }; + creado_en?: string + desde_estado_id?: string + hacia_estado_id?: string + id?: string + rol_permitido_id?: string + } Relationships: [ { - foreignKeyName: "transiciones_estado_plan_desde_estado_id_fkey"; - columns: ["desde_estado_id"]; - isOneToOne: false; - referencedRelation: "estados_plan"; - referencedColumns: ["id"]; + foreignKeyName: "transiciones_estado_plan_desde_estado_id_fkey" + columns: ["desde_estado_id"] + isOneToOne: false + referencedRelation: "estados_plan" + referencedColumns: ["id"] }, { - foreignKeyName: "transiciones_estado_plan_hacia_estado_id_fkey"; - columns: ["hacia_estado_id"]; - isOneToOne: false; - referencedRelation: "estados_plan"; - referencedColumns: ["id"]; + foreignKeyName: "transiciones_estado_plan_hacia_estado_id_fkey" + columns: ["hacia_estado_id"] + isOneToOne: false + referencedRelation: "estados_plan" + referencedColumns: ["id"] }, { - foreignKeyName: "transiciones_estado_plan_rol_permitido_id_fkey"; - columns: ["rol_permitido_id"]; - isOneToOne: false; - referencedRelation: "roles"; - referencedColumns: ["id"]; + foreignKeyName: "transiciones_estado_plan_rol_permitido_id_fkey" + columns: ["rol_permitido_id"] + isOneToOne: false + referencedRelation: "roles" + referencedColumns: ["id"] }, - ]; - }; + ] + } usuarios_app: { Row: { - actualizado_en: string; - creado_en: string; - email: string | null; - externo: boolean; - id: string; - nombre_completo: string | null; - }; + actualizado_en: string + creado_en: string + email: string | null + externo: boolean + id: string + nombre_completo: string | null + } Insert: { - actualizado_en?: string; - creado_en?: string; - email?: string | null; - externo?: boolean; - id: string; - nombre_completo?: string | null; - }; + actualizado_en?: string + creado_en?: string + email?: string | null + externo?: boolean + id: string + nombre_completo?: string | null + } Update: { - actualizado_en?: string; - creado_en?: string; - email?: string | null; - externo?: boolean; - id?: string; - nombre_completo?: string | null; - }; - Relationships: []; - }; + actualizado_en?: string + creado_en?: string + email?: string | null + externo?: boolean + id?: string + nombre_completo?: string | null + } + Relationships: [] + } usuarios_roles: { Row: { - carrera_id: string | null; - creado_en: string; - facultad_id: string | null; - id: string; - rol_id: string; - usuario_id: string; - }; + carrera_id: string | null + creado_en: string + facultad_id: string | null + id: string + rol_id: string + usuario_id: string + } Insert: { - carrera_id?: string | null; - creado_en?: string; - facultad_id?: string | null; - id?: string; - rol_id: string; - usuario_id: string; - }; + carrera_id?: string | null + creado_en?: string + facultad_id?: string | null + id?: string + rol_id: string + usuario_id: string + } Update: { - carrera_id?: string | null; - creado_en?: string; - facultad_id?: string | null; - id?: string; - rol_id?: string; - usuario_id?: string; - }; + carrera_id?: string | null + creado_en?: string + facultad_id?: string | null + id?: string + rol_id?: string + usuario_id?: string + } Relationships: [ { - foreignKeyName: "usuarios_roles_carrera_id_fkey"; - columns: ["carrera_id"]; - isOneToOne: false; - referencedRelation: "carreras"; - referencedColumns: ["id"]; + foreignKeyName: "usuarios_roles_carrera_id_fkey" + columns: ["carrera_id"] + isOneToOne: false + referencedRelation: "carreras" + referencedColumns: ["id"] }, { - foreignKeyName: "usuarios_roles_facultad_id_fkey"; - columns: ["facultad_id"]; - isOneToOne: false; - referencedRelation: "facultades"; - referencedColumns: ["id"]; + foreignKeyName: "usuarios_roles_facultad_id_fkey" + columns: ["facultad_id"] + isOneToOne: false + referencedRelation: "facultades" + referencedColumns: ["id"] }, { - foreignKeyName: "usuarios_roles_rol_id_fkey"; - columns: ["rol_id"]; - isOneToOne: false; - referencedRelation: "roles"; - referencedColumns: ["id"]; + foreignKeyName: "usuarios_roles_rol_id_fkey" + columns: ["rol_id"] + isOneToOne: false + referencedRelation: "roles" + referencedColumns: ["id"] }, { - foreignKeyName: "usuarios_roles_usuario_id_fkey"; - columns: ["usuario_id"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "usuarios_roles_usuario_id_fkey" + columns: ["usuario_id"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, - ]; - }; + ] + } vector_stores: { Row: { - creado_en: string; - creado_por: string | null; - id: string; - nombre: string; - openai_vector_id: string | null; - }; + creado_en: string + creado_por: string | null + id: string + nombre: string + openai_vector_id: string | null + } Insert: { - creado_en?: string; - creado_por?: string | null; - id?: string; - nombre: string; - openai_vector_id?: string | null; - }; + creado_en?: string + creado_por?: string | null + id?: string + nombre: string + openai_vector_id?: string | null + } Update: { - creado_en?: string; - creado_por?: string | null; - id?: string; - nombre?: string; - openai_vector_id?: string | null; - }; + creado_en?: string + creado_por?: string | null + id?: string + nombre?: string + openai_vector_id?: string | null + } Relationships: [ { - foreignKeyName: "vector_stores_creado_por_fkey"; - columns: ["creado_por"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "vector_stores_creado_por_fkey" + columns: ["creado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, - ]; - }; - }; + ] + } + } Views: { plantilla_asignatura: { Row: { - asignatura_id: string | null; - estructura_id: string | null; - template_id: string | null; - }; - Relationships: []; - }; + asignatura_id: string | null + estructura_id: string | null + template_id: string | null + } + Relationships: [] + } plantilla_plan: { Row: { - estructura_id: string | null; - plan_estudio_id: string | null; - template_id: string | null; - }; - Relationships: []; - }; - }; + estructura_id: string | null + plan_estudio_id: string | null + template_id: string | null + } + Relationships: [] + } + } Functions: { append_conversacion_asignatura: { - Args: { p_append: Json; p_id: string }; - Returns: undefined; - }; + Args: { p_append: Json; p_id: string } + Returns: undefined + } append_conversacion_plan: { - Args: { p_append: Json; p_id: string }; - Returns: undefined; - }; - unaccent: { Args: { "": string }; Returns: string }; - unaccent_immutable: { Args: { "": string }; Returns: string }; - }; + Args: { p_append: Json; p_id: string } + Returns: undefined + } + unaccent: { Args: { "": string }; Returns: string } + unaccent_immutable: { Args: { "": string }; Returns: string } + } Enums: { - estado_asignatura: "borrador" | "revisada" | "aprobada" | "generando"; - estado_conversacion: "ACTIVA" | "ARCHIVANDO" | "ARCHIVADA" | "ERROR"; - estado_mensaje_ia: "PROCESANDO" | "COMPLETADO" | "ERROR"; - estado_tarea_revision: "PENDIENTE" | "COMPLETADA" | "OMITIDA"; - fuente_cambio: "HUMANO" | "IA"; + estado_asignatura: "borrador" | "revisada" | "aprobada" | "generando" + estado_conversacion: "ACTIVA" | "ARCHIVANDO" | "ARCHIVADA" | "ERROR" + estado_mensaje_ia: "PROCESANDO" | "COMPLETADO" | "ERROR" + estado_tarea_revision: "PENDIENTE" | "COMPLETADA" | "OMITIDA" + fuente_cambio: "HUMANO" | "IA" nivel_plan_estudio: | "Licenciatura" | "Maestría" | "Doctorado" | "Especialidad" | "Diplomado" - | "Otro"; + | "Otro" puesto_tipo: | "vicerrector" | "director_facultad" | "secretario_academico" | "jefe_carrera" | "profesor" - | "lci"; - rol_responsable_asignatura: - | "PROFESOR_RESPONSABLE" - | "COAUTOR" - | "REVISOR"; - tipo_asignatura: "OBLIGATORIA" | "OPTATIVA" | "TRONCAL" | "OTRA"; - tipo_bibliografia: "BASICA" | "COMPLEMENTARIA"; + | "lci" + rol_responsable_asignatura: "PROFESOR_RESPONSABLE" | "COAUTOR" | "REVISOR" + tipo_asignatura: "OBLIGATORIA" | "OPTATIVA" | "TRONCAL" | "OTRA" + tipo_bibliografia: "BASICA" | "COMPLEMENTARIA" tipo_cambio: | "ACTUALIZACION_CAMPO" | "ACTUALIZACION_MAPA" | "TRANSICION_ESTADO" | "OTRO" | "CREACION" - | "ACTUALIZACION"; - tipo_ciclo: "Semestre" | "Cuatrimestre" | "Trimestre" | "Otro"; - tipo_estructura_plan: "CURRICULAR" | "NO_CURRICULAR"; - tipo_fuente_bibliografia: "MANUAL" | "BIBLIOTECA"; - tipo_interaccion_ia: "GENERAR" | "MEJORAR_SECCION" | "CHAT" | "OTRA"; + | "ACTUALIZACION" + tipo_ciclo: "Semestre" | "Cuatrimestre" | "Trimestre" | "Otro" + tipo_estructura_plan: "CURRICULAR" | "NO_CURRICULAR" + tipo_fuente_bibliografia: "MANUAL" | "BIBLIOTECA" + tipo_interaccion_ia: "GENERAR" | "MEJORAR_SECCION" | "CHAT" | "OTRA" tipo_notificacion: | "PLAN_ASIGNADO" | "ESTADO_CAMBIADO" | "TAREA_ASIGNADA" | "COMENTARIO" - | "OTRA"; + | "OTRA" tipo_origen: | "MANUAL" | "IA" | "CLONADO_INTERNO" | "CLONADO_TRADICIONAL" - | "OTRO"; - }; + | "OTRO" + } CompositeTypes: { - [_ in never]: never; - }; - }; -}; + [_ in never]: never + } + } +} -type DatabaseWithoutInternals = Omit; +type DatabaseWithoutInternals = Omit -type DefaultSchema = - DatabaseWithoutInternals[Extract]; +type DefaultSchema = DatabaseWithoutInternals[Extract] export type Tables< DefaultSchemaTableNameOrOptions extends | keyof (DefaultSchema["Tables"] & DefaultSchema["Views"]) | { schema: keyof DatabaseWithoutInternals }, TableName extends DefaultSchemaTableNameOrOptions extends { - schema: keyof DatabaseWithoutInternals; - } ? keyof ( - & DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ - "Tables" - ] - & DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ - "Views" - ] - ) + schema: keyof DatabaseWithoutInternals + } + ? keyof (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] & + DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Views"]) : never = never, > = DefaultSchemaTableNameOrOptions extends { - schema: keyof DatabaseWithoutInternals; -} ? ( - & DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ - "Tables" - ] - & DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ - "Views" - ] - )[TableName] extends { - Row: infer R; - } ? R - : never - : DefaultSchemaTableNameOrOptions extends keyof ( - & DefaultSchema["Tables"] - & DefaultSchema["Views"] - ) ? ( - & DefaultSchema["Tables"] - & DefaultSchema["Views"] - )[DefaultSchemaTableNameOrOptions] extends { - Row: infer R; - } ? R + schema: keyof DatabaseWithoutInternals +} + ? (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] & + DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Views"])[TableName] extends { + Row: infer R + } + ? R + : never + : DefaultSchemaTableNameOrOptions extends keyof (DefaultSchema["Tables"] & + DefaultSchema["Views"]) + ? (DefaultSchema["Tables"] & + DefaultSchema["Views"])[DefaultSchemaTableNameOrOptions] extends { + Row: infer R + } + ? R + : never : never - : never; export type TablesInsert< DefaultSchemaTableNameOrOptions extends | keyof DefaultSchema["Tables"] | { schema: keyof DatabaseWithoutInternals }, TableName extends DefaultSchemaTableNameOrOptions extends { - schema: keyof DatabaseWithoutInternals; - } ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ - "Tables" - ] + schema: keyof DatabaseWithoutInternals + } + ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] : never = never, > = DefaultSchemaTableNameOrOptions extends { - schema: keyof DatabaseWithoutInternals; -} ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ - "Tables" - ][TableName] extends { - Insert: infer I; - } ? I - : never + schema: keyof DatabaseWithoutInternals +} + ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends { + Insert: infer I + } + ? I + : never : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"] ? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends { - Insert: infer I; - } ? I + Insert: infer I + } + ? I + : never : never - : never; export type TablesUpdate< DefaultSchemaTableNameOrOptions extends | keyof DefaultSchema["Tables"] | { schema: keyof DatabaseWithoutInternals }, TableName extends DefaultSchemaTableNameOrOptions extends { - schema: keyof DatabaseWithoutInternals; - } ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ - "Tables" - ] + schema: keyof DatabaseWithoutInternals + } + ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] : never = never, > = DefaultSchemaTableNameOrOptions extends { - schema: keyof DatabaseWithoutInternals; -} ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ - "Tables" - ][TableName] extends { - Update: infer U; - } ? U - : never + schema: keyof DatabaseWithoutInternals +} + ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends { + Update: infer U + } + ? U + : never : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"] ? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends { - Update: infer U; - } ? U + Update: infer U + } + ? U + : never : never - : never; export type Enums< DefaultSchemaEnumNameOrOptions extends | keyof DefaultSchema["Enums"] | { schema: keyof DatabaseWithoutInternals }, EnumName extends DefaultSchemaEnumNameOrOptions extends { - schema: keyof DatabaseWithoutInternals; - } ? keyof DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]][ - "Enums" - ] + schema: keyof DatabaseWithoutInternals + } + ? keyof DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"] : never = never, > = DefaultSchemaEnumNameOrOptions extends { - schema: keyof DatabaseWithoutInternals; -} ? DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"][ - EnumName - ] + schema: keyof DatabaseWithoutInternals +} + ? DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"][EnumName] : DefaultSchemaEnumNameOrOptions extends keyof DefaultSchema["Enums"] ? DefaultSchema["Enums"][DefaultSchemaEnumNameOrOptions] - : never; + : never export type CompositeTypes< PublicCompositeTypeNameOrOptions extends | keyof DefaultSchema["CompositeTypes"] | { schema: keyof DatabaseWithoutInternals }, CompositeTypeName extends PublicCompositeTypeNameOrOptions extends { - schema: keyof DatabaseWithoutInternals; - } ? keyof DatabaseWithoutInternals[ - PublicCompositeTypeNameOrOptions["schema"] - ]["CompositeTypes"] + schema: keyof DatabaseWithoutInternals + } + ? keyof DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"] : never = never, > = PublicCompositeTypeNameOrOptions extends { - schema: keyof DatabaseWithoutInternals; -} ? DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]][ - "CompositeTypes" - ][CompositeTypeName] - : PublicCompositeTypeNameOrOptions extends - keyof DefaultSchema["CompositeTypes"] + schema: keyof DatabaseWithoutInternals +} + ? DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"][CompositeTypeName] + : PublicCompositeTypeNameOrOptions extends keyof DefaultSchema["CompositeTypes"] ? DefaultSchema["CompositeTypes"][PublicCompositeTypeNameOrOptions] - : never; + : never export const Constants = { graphql_public: { @@ -1629,4 +1608,5 @@ export const Constants = { ], }, }, -} as const; +} as const + From 9e5afed71e78be9b8592f6a50df8207bc2558596 Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 21:02:16 +0000 Subject: [PATCH 19/38] Actualizar .gitea/workflows/update-types.yml --- .gitea/workflows/update-types.yml | 47 ++++++++----------------------- 1 file changed, 12 insertions(+), 35 deletions(-) diff --git a/.gitea/workflows/update-types.yml b/.gitea/workflows/update-types.yml index 20fd040..012022b 100644 --- a/.gitea/workflows/update-types.yml +++ b/.gitea/workflows/update-types.yml @@ -1,41 +1,18 @@ name: Update database types - on: - schedule: - - cron: "0 0 * * *" + push: + branches: [ main ] + paths: + - '*.sql' jobs: - update: + build: runs-on: ubuntu-latest - - env: - SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }} - PROJECT_REF: ${{ secrets.SUPABASE_PROJECT_ID }} - + if: github.head_ref != 'supabot**' steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - uses: actions/setup-node@v4 - with: - node-version: 22 - - - run: npm run update-types - - - name: Check for changes - id: git_status - run: | - echo "status=$(git status -s)" >> $GITHUB_OUTPUT - - - name: Commit changes - if: ${{ contains(steps.git_status.outputs.status, ' ') }} - run: | - git add supabase/functions/_shared/database.types.ts - git config user.email "ci@gitea.local" - git config user.name "gitea-actions" - git commit -m "Update database types" - - - name: Push changes - if: ${{ contains(steps.git_status.outputs.status, ' ') }} - run: git push \ No newline at end of file + - uses: lyqht/generate-supabase-db-types-github-action@main + with: + SUPABASE_REF_ID: ${{ secrets.SUPABASE_PROJECT_ID }} + SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }} + DB_PASSWORD: ${{ secrets.SUPABASE_DB_PASSWORD }} + OUTPUT_PATH: db.types.ts \ No newline at end of file From 6301d52990b20cfa606bc0658f6a17eb050d88de Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 21:18:45 +0000 Subject: [PATCH 20/38] Actualizar .gitea/workflows/update-types.yml --- .gitea/workflows/update-types.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/update-types.yml b/.gitea/workflows/update-types.yml index 012022b..7dd163d 100644 --- a/.gitea/workflows/update-types.yml +++ b/.gitea/workflows/update-types.yml @@ -15,4 +15,4 @@ jobs: SUPABASE_REF_ID: ${{ secrets.SUPABASE_PROJECT_ID }} SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }} DB_PASSWORD: ${{ secrets.SUPABASE_DB_PASSWORD }} - OUTPUT_PATH: db.types.ts \ No newline at end of file + OUTPUT_PATH: supabase/functions/_shared/database.types.ts \ No newline at end of file From 47e171a5b861e54f929b0506a0c87b0e1e5dc5e6 Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 15:18:57 -0600 Subject: [PATCH 21/38] fix: add missing newline and comment for trigger testing in migration script --- supabase/migrations/20260310154853_realtime.sql | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/supabase/migrations/20260310154853_realtime.sql b/supabase/migrations/20260310154853_realtime.sql index ab23023..2eba56e 100644 --- a/supabase/migrations/20260310154853_realtime.sql +++ b/supabase/migrations/20260310154853_realtime.sql @@ -4,4 +4,6 @@ alter publication supabase_realtime add table plan_mensajes_ia; alter publication supabase_realtime add table asignaturas; -alter publication supabase_realtime add table planes_estudio; \ No newline at end of file +alter publication supabase_realtime add table planes_estudio; + +-- Comentario para probar el trigger \ No newline at end of file From 4d67eb6b5132962aafc2e2d132662ee25ce3905b Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 21:24:25 +0000 Subject: [PATCH 22/38] Actualizar .gitea/workflows/update-types.yml --- .gitea/workflows/update-types.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitea/workflows/update-types.yml b/.gitea/workflows/update-types.yml index 7dd163d..c7303be 100644 --- a/.gitea/workflows/update-types.yml +++ b/.gitea/workflows/update-types.yml @@ -1,7 +1,8 @@ name: Update database types on: push: - branches: [ main ] + branches: + - main paths: - '*.sql' From 8d4c661c220ba8d87d9c00677e79a421e1e2cb71 Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 21:24:43 +0000 Subject: [PATCH 23/38] Actualizar supabase/migrations/20260310154853_realtime.sql --- supabase/migrations/20260310154853_realtime.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/supabase/migrations/20260310154853_realtime.sql b/supabase/migrations/20260310154853_realtime.sql index 2eba56e..a6b75aa 100644 --- a/supabase/migrations/20260310154853_realtime.sql +++ b/supabase/migrations/20260310154853_realtime.sql @@ -6,4 +6,4 @@ alter publication supabase_realtime add table asignaturas; alter publication supabase_realtime add table planes_estudio; --- Comentario para probar el trigger \ No newline at end of file +-- Comentario para probar el trigger 2 \ No newline at end of file From 3a990147e1b2ff28a79a4289b79cc41149efc2ea Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 21:25:14 +0000 Subject: [PATCH 24/38] Actualizar supabase/data.sql --- supabase/data.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/supabase/data.sql b/supabase/data.sql index 451ac50..3c2178f 100644 --- a/supabase/data.sql +++ b/supabase/data.sql @@ -1,6 +1,6 @@ SET session_replication_role = replica; --- +-- 1 -- PostgreSQL database dump -- From 7d31c6893f215ef043173de426c29f79875d3cdf Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 21:30:45 +0000 Subject: [PATCH 25/38] Actualizar .gitea/workflows/update-types.yml --- .gitea/workflows/update-types.yml | 57 ++++++++++++++++++++++++++----- 1 file changed, 48 insertions(+), 9 deletions(-) diff --git a/.gitea/workflows/update-types.yml b/.gitea/workflows/update-types.yml index c7303be..070f631 100644 --- a/.gitea/workflows/update-types.yml +++ b/.gitea/workflows/update-types.yml @@ -1,19 +1,58 @@ name: Update database types + on: push: branches: - main paths: - - '*.sql' + - supabase/migrations/*.sql jobs: - build: + update: runs-on: ubuntu-latest - if: github.head_ref != 'supabot**' + + env: + SUPABASE_ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }} + PROJECT_REF: ${{ secrets.SUPABASE_PROJECT_ID }} + DB_PASSWORD: ${{ secrets.SUPABASE_DB_PASSWORD }} + steps: - - uses: lyqht/generate-supabase-db-types-github-action@main - with: - SUPABASE_REF_ID: ${{ secrets.SUPABASE_PROJECT_ID }} - SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }} - DB_PASSWORD: ${{ secrets.SUPABASE_DB_PASSWORD }} - OUTPUT_PATH: supabase/functions/_shared/database.types.ts \ No newline at end of file + - name: Checkout repo + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Install Supabase CLI + run: | + curl -L https://github.com/supabase/cli/releases/latest/download/supabase_linux_amd64.tar.gz \ + | tar -xz + sudo mv supabase /usr/local/bin/ + + - name: Generate database types + run: | + supabase gen types typescript \ + --project-id $PROJECT_REF \ + --db-password $DB_PASSWORD \ + > supabase/functions/_shared/database.types.ts + + - name: Check for changes + id: git_status + run: | + if [[ -n "$(git status --porcelain)" ]]; then + echo "changed=true" >> $GITEA_OUTPUT + else + echo "changed=false" >> $GITEA_OUTPUT + fi + + - name: Commit changes + if: steps.git_status.outputs.changed == 'true' + run: | + git config user.name "supabot" + git config user.email "supabot@example.com" + git add supabase/functions/_shared/database.types.ts + git commit -m "chore: update database types" + + - name: Push changes + if: steps.git_status.outputs.changed == 'true' + run: | + git push \ No newline at end of file From ff655e55986cce943d359d0a00522313fe328084 Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 21:31:11 +0000 Subject: [PATCH 26/38] Actualizar supabase/migrations/20260310154853_realtime.sql --- supabase/migrations/20260310154853_realtime.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/supabase/migrations/20260310154853_realtime.sql b/supabase/migrations/20260310154853_realtime.sql index a6b75aa..1e80a82 100644 --- a/supabase/migrations/20260310154853_realtime.sql +++ b/supabase/migrations/20260310154853_realtime.sql @@ -6,4 +6,4 @@ alter publication supabase_realtime add table asignaturas; alter publication supabase_realtime add table planes_estudio; --- Comentario para probar el trigger 2 \ No newline at end of file +-- Comentario para probar el trigger 3 \ No newline at end of file From 241c46a1b881ad5abac77e7c5fce62a7a516c08e Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 21:39:08 +0000 Subject: [PATCH 27/38] Actualizar .gitea/workflows/update-types.yml --- .gitea/workflows/update-types.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.gitea/workflows/update-types.yml b/.gitea/workflows/update-types.yml index 070f631..fd3b1c7 100644 --- a/.gitea/workflows/update-types.yml +++ b/.gitea/workflows/update-types.yml @@ -22,11 +22,9 @@ jobs: with: fetch-depth: 0 - - name: Install Supabase CLI - run: | - curl -L https://github.com/supabase/cli/releases/latest/download/supabase_linux_amd64.tar.gz \ - | tar -xz - sudo mv supabase /usr/local/bin/ + - uses: supabase/setup-cli@v1 + with: + version: latest - name: Generate database types run: | From 13197cc4fdf255bec59227f99a05946330d61152 Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 21:40:22 +0000 Subject: [PATCH 28/38] Actualizar .gitea/workflows/update-types.yml --- .gitea/workflows/update-types.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitea/workflows/update-types.yml b/.gitea/workflows/update-types.yml index fd3b1c7..59491b2 100644 --- a/.gitea/workflows/update-types.yml +++ b/.gitea/workflows/update-types.yml @@ -6,6 +6,7 @@ on: - main paths: - supabase/migrations/*.sql + workflow_dispatch: jobs: update: From 92dd0e5e9e3fef64cea176798c3b286cc0d932a3 Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 21:43:03 +0000 Subject: [PATCH 29/38] Actualizar .gitea/workflows/deploy-functions.yaml --- .gitea/workflows/deploy-functions.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitea/workflows/deploy-functions.yaml b/.gitea/workflows/deploy-functions.yaml index 39f63c4..9292468 100644 --- a/.gitea/workflows/deploy-functions.yaml +++ b/.gitea/workflows/deploy-functions.yaml @@ -4,6 +4,8 @@ on: push: branches: - main + paths: + - 'supabase/functions/**' workflow_dispatch: jobs: @@ -22,4 +24,4 @@ jobs: version: latest - name: Deploy edge function - run: npx supabase@beta functions deploy --project-ref $SUPABASE_PROJECT_ID --use-api + run: npx supabase@beta functions deploy --project-ref $SUPABASE_PROJECT_ID --use-api \ No newline at end of file From ff2cb582718ef3c972dac169a6b102becb628d52 Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 21:44:08 +0000 Subject: [PATCH 30/38] Actualizar .gitea/workflows/production.yaml --- .gitea/workflows/production.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitea/workflows/production.yaml b/.gitea/workflows/production.yaml index 2b42da2..613e2a4 100644 --- a/.gitea/workflows/production.yaml +++ b/.gitea/workflows/production.yaml @@ -4,6 +4,8 @@ on: push: branches: - main + paths: + - 'supabase/**' workflow_dispatch: jobs: From d92308f946e29caafd96a0499235ee3d8eed11e4 Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 21:44:53 +0000 Subject: [PATCH 31/38] Actualizar supabase/functions/_shared/openai-service.ts --- supabase/functions/_shared/openai-service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/supabase/functions/_shared/openai-service.ts b/supabase/functions/_shared/openai-service.ts index 5ebc4f6..6557198 100644 --- a/supabase/functions/_shared/openai-service.ts +++ b/supabase/functions/_shared/openai-service.ts @@ -86,7 +86,7 @@ export class OpenAIService { newOptions.input = arr; } - // Narrow to non-streaming response + // Narrow to non-streaming response const openaiRaw = (await this.openai.responses.create( newOptions as OpenAITypes.OpenAI.Responses.ResponseCreateParamsNonStreaming, )) as OpenAITypes.OpenAI.Responses.Response; From 9be3e1ef1330d06d7881a070ad981903b72f1100 Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 21:45:05 +0000 Subject: [PATCH 32/38] Actualizar supabase/functions/_shared/openai-service.ts --- supabase/functions/_shared/openai-service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/supabase/functions/_shared/openai-service.ts b/supabase/functions/_shared/openai-service.ts index 6557198..a7f1ef2 100644 --- a/supabase/functions/_shared/openai-service.ts +++ b/supabase/functions/_shared/openai-service.ts @@ -1,6 +1,6 @@ // supabase/functions/_shared/openai-service.ts /// -import OpenAI from "npm:openai@6.16.0"; +import OpenAI from "npm:openai@6.16.0" import type * as OpenAITypes from "npm:openai@6.16.0"; // Use non-streaming params to ensure `responses.create` returns a typed Response export type StructuredResponseOptions = From a1d03356c287eca64f44615ddadee83049df3290 Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 21:46:28 +0000 Subject: [PATCH 33/38] Actualizar .gitea/workflows/update-types.yml --- .gitea/workflows/update-types.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.gitea/workflows/update-types.yml b/.gitea/workflows/update-types.yml index 59491b2..5f402a2 100644 --- a/.gitea/workflows/update-types.yml +++ b/.gitea/workflows/update-types.yml @@ -29,10 +29,7 @@ jobs: - name: Generate database types run: | - supabase gen types typescript \ - --project-id $PROJECT_REF \ - --db-password $DB_PASSWORD \ - > supabase/functions/_shared/database.types.ts + supabase gen types typescript --local > supabase/functions/_shared/database.types.ts - name: Check for changes id: git_status From 3ee2e089740c0c626d325651bc9382081328ab2c Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 15:47:06 -0600 Subject: [PATCH 34/38] Tipos --- supabase/functions/_shared/database.types.ts | 2440 +++++++++--------- 1 file changed, 1230 insertions(+), 1210 deletions(-) diff --git a/supabase/functions/_shared/database.types.ts b/supabase/functions/_shared/database.types.ts index a889116..d905d96 100644 --- a/supabase/functions/_shared/database.types.ts +++ b/supabase/functions/_shared/database.types.ts @@ -4,1547 +4,1568 @@ export type Json = | boolean | null | { [key: string]: Json | undefined } - | Json[] + | Json[]; export type Database = { graphql_public: { Tables: { - [_ in never]: never - } + [_ in never]: never; + }; Views: { - [_ in never]: never - } + [_ in never]: never; + }; Functions: { graphql: { Args: { - extensions?: Json - operationName?: string - query?: string - variables?: Json - } - Returns: Json - } - } + extensions?: Json; + operationName?: string; + query?: string; + variables?: Json; + }; + Returns: Json; + }; + }; Enums: { - [_ in never]: never - } + [_ in never]: never; + }; CompositeTypes: { - [_ in never]: never - } - } + [_ in never]: never; + }; + }; public: { Tables: { archivos: { Row: { - bytes: number | null - id: string - mime_type: string | null - nombre: string - notas: string | null - openai_file_id: string | null - ruta_storage: string - subido_en: string - subido_por: string | null - temporal: boolean - } + bytes: number | null; + id: string; + mime_type: string | null; + nombre: string; + notas: string | null; + openai_file_id: string | null; + ruta_storage: string; + subido_en: string; + subido_por: string | null; + temporal: boolean; + }; Insert: { - bytes?: number | null - id?: string - mime_type?: string | null - nombre: string - notas?: string | null - openai_file_id?: string | null - ruta_storage: string - subido_en?: string - subido_por?: string | null - temporal?: boolean - } + bytes?: number | null; + id?: string; + mime_type?: string | null; + nombre: string; + notas?: string | null; + openai_file_id?: string | null; + ruta_storage: string; + subido_en?: string; + subido_por?: string | null; + temporal?: boolean; + }; Update: { - bytes?: number | null - id?: string - mime_type?: string | null - nombre?: string - notas?: string | null - openai_file_id?: string | null - ruta_storage?: string - subido_en?: string - subido_por?: string | null - temporal?: boolean - } + bytes?: number | null; + id?: string; + mime_type?: string | null; + nombre?: string; + notas?: string | null; + openai_file_id?: string | null; + ruta_storage?: string; + subido_en?: string; + subido_por?: string | null; + temporal?: boolean; + }; Relationships: [ { - foreignKeyName: "archivos_subido_por_fkey" - columns: ["subido_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "archivos_subido_por_fkey"; + columns: ["subido_por"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, - ] - } + ]; + }; asignatura_mensajes_ia: { Row: { - campos: string[] - conversacion_asignatura_id: string - enviado_por: string - estado: Database["public"]["Enums"]["estado_mensaje_ia"] - fecha_actualizacion: string - fecha_creacion: string - id: string - is_refusal: boolean - mensaje: string - propuesta: Json | null - respuesta: string | null - } + campos: string[]; + conversacion_asignatura_id: string; + enviado_por: string; + estado: Database["public"]["Enums"]["estado_mensaje_ia"]; + fecha_actualizacion: string; + fecha_creacion: string; + id: string; + is_refusal: boolean; + mensaje: string; + propuesta: Json | null; + respuesta: string | null; + }; Insert: { - campos?: string[] - conversacion_asignatura_id: string - enviado_por?: string - estado?: Database["public"]["Enums"]["estado_mensaje_ia"] - fecha_actualizacion?: string - fecha_creacion?: string - id?: string - is_refusal?: boolean - mensaje: string - propuesta?: Json | null - respuesta?: string | null - } + campos?: string[]; + conversacion_asignatura_id: string; + enviado_por?: string; + estado?: Database["public"]["Enums"]["estado_mensaje_ia"]; + fecha_actualizacion?: string; + fecha_creacion?: string; + id?: string; + is_refusal?: boolean; + mensaje: string; + propuesta?: Json | null; + respuesta?: string | null; + }; Update: { - campos?: string[] - conversacion_asignatura_id?: string - enviado_por?: string - estado?: Database["public"]["Enums"]["estado_mensaje_ia"] - fecha_actualizacion?: string - fecha_creacion?: string - id?: string - is_refusal?: boolean - mensaje?: string - propuesta?: Json | null - respuesta?: string | null - } + campos?: string[]; + conversacion_asignatura_id?: string; + enviado_por?: string; + estado?: Database["public"]["Enums"]["estado_mensaje_ia"]; + fecha_actualizacion?: string; + fecha_creacion?: string; + id?: string; + is_refusal?: boolean; + mensaje?: string; + propuesta?: Json | null; + respuesta?: string | null; + }; Relationships: [ { - foreignKeyName: "asignatura_mensajes_ia_conversacion_asignatura_id_fkey" - columns: ["conversacion_asignatura_id"] - isOneToOne: false - referencedRelation: "conversaciones_asignatura" - referencedColumns: ["id"] + foreignKeyName: + "asignatura_mensajes_ia_conversacion_asignatura_id_fkey"; + columns: ["conversacion_asignatura_id"]; + isOneToOne: false; + referencedRelation: "conversaciones_asignatura"; + referencedColumns: ["id"]; }, - ] - } + ]; + }; asignaturas: { Row: { - actualizado_en: string - actualizado_por: string | null - asignatura_hash: string | null - codigo: string | null - contenido_tematico: Json - 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 - horas_academicas: number | null - horas_independientes: number | null - id: string - linea_plan_id: string | null - meta_origen: Json - nombre: string - numero_ciclo: number | null - orden_celda: number | null - plan_estudio_id: string - tipo: Database["public"]["Enums"]["tipo_asignatura"] - tipo_origen: Database["public"]["Enums"]["tipo_origen"] | null - } + actualizado_en: string; + actualizado_por: string | null; + asignatura_hash: string | null; + codigo: string | null; + contenido_tematico: Json; + 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; + horas_academicas: number | null; + horas_independientes: number | null; + id: string; + linea_plan_id: string | null; + meta_origen: Json; + nombre: string; + numero_ciclo: number | null; + orden_celda: number | null; + plan_estudio_id: string; + tipo: Database["public"]["Enums"]["tipo_asignatura"]; + tipo_origen: Database["public"]["Enums"]["tipo_origen"] | null; + }; Insert: { - actualizado_en?: string - actualizado_por?: string | null - asignatura_hash?: string | null - codigo?: string | null - contenido_tematico?: Json - 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 - horas_academicas?: number | null - horas_independientes?: number | null - id?: string - linea_plan_id?: string | null - meta_origen?: Json - nombre: string - numero_ciclo?: number | null - orden_celda?: number | null - plan_estudio_id: string - tipo?: Database["public"]["Enums"]["tipo_asignatura"] - tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null - } + actualizado_en?: string; + actualizado_por?: string | null; + asignatura_hash?: string | null; + codigo?: string | null; + contenido_tematico?: Json; + 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; + horas_academicas?: number | null; + horas_independientes?: number | null; + id?: string; + linea_plan_id?: string | null; + meta_origen?: Json; + nombre: string; + numero_ciclo?: number | null; + orden_celda?: number | null; + plan_estudio_id: string; + tipo?: Database["public"]["Enums"]["tipo_asignatura"]; + tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null; + }; Update: { - actualizado_en?: string - actualizado_por?: string | null - asignatura_hash?: string | null - codigo?: string | null - contenido_tematico?: Json - 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 - horas_academicas?: number | null - horas_independientes?: number | null - id?: string - linea_plan_id?: string | null - meta_origen?: Json - nombre?: string - numero_ciclo?: number | null - orden_celda?: number | null - plan_estudio_id?: string - tipo?: Database["public"]["Enums"]["tipo_asignatura"] - tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null - } + actualizado_en?: string; + actualizado_por?: string | null; + asignatura_hash?: string | null; + codigo?: string | null; + contenido_tematico?: Json; + 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; + horas_academicas?: number | null; + horas_independientes?: number | null; + id?: string; + linea_plan_id?: string | null; + meta_origen?: Json; + nombre?: string; + numero_ciclo?: number | null; + orden_celda?: number | null; + plan_estudio_id?: string; + tipo?: Database["public"]["Enums"]["tipo_asignatura"]; + tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null; + }; Relationships: [ { - foreignKeyName: "asignaturas_actualizado_por_fkey" - columns: ["actualizado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "asignaturas_actualizado_por_fkey"; + columns: ["actualizado_por"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, { - foreignKeyName: "asignaturas_creado_por_fkey" - columns: ["creado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "asignaturas_creado_por_fkey"; + columns: ["creado_por"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, { - foreignKeyName: "asignaturas_estructura_id_fkey" - columns: ["estructura_id"] - isOneToOne: false - referencedRelation: "estructuras_asignatura" - referencedColumns: ["id"] + foreignKeyName: "asignaturas_estructura_id_fkey"; + columns: ["estructura_id"]; + isOneToOne: false; + referencedRelation: "estructuras_asignatura"; + referencedColumns: ["id"]; }, { - foreignKeyName: "asignaturas_estructura_id_fkey" - columns: ["estructura_id"] - isOneToOne: false - referencedRelation: "plantilla_asignatura" - referencedColumns: ["estructura_id"] + foreignKeyName: "asignaturas_estructura_id_fkey"; + columns: ["estructura_id"]; + isOneToOne: false; + referencedRelation: "plantilla_asignatura"; + referencedColumns: ["estructura_id"]; }, { - foreignKeyName: "asignaturas_linea_plan_fk_compuesta" - columns: ["linea_plan_id", "plan_estudio_id"] - isOneToOne: false - referencedRelation: "lineas_plan" - referencedColumns: ["id", "plan_estudio_id"] + foreignKeyName: "asignaturas_linea_plan_fk_compuesta"; + columns: ["linea_plan_id", "plan_estudio_id"]; + isOneToOne: false; + referencedRelation: "lineas_plan"; + referencedColumns: ["id", "plan_estudio_id"]; }, { - foreignKeyName: "asignaturas_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] - isOneToOne: false - referencedRelation: "planes_estudio" - referencedColumns: ["id"] + foreignKeyName: "asignaturas_plan_estudio_id_fkey"; + columns: ["plan_estudio_id"]; + isOneToOne: false; + referencedRelation: "planes_estudio"; + referencedColumns: ["id"]; }, { - foreignKeyName: "asignaturas_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] - isOneToOne: false - referencedRelation: "plantilla_plan" - referencedColumns: ["plan_estudio_id"] + foreignKeyName: "asignaturas_plan_estudio_id_fkey"; + columns: ["plan_estudio_id"]; + isOneToOne: false; + referencedRelation: "plantilla_plan"; + referencedColumns: ["plan_estudio_id"]; }, - ] - } + ]; + }; bibliografia_asignatura: { Row: { - actualizado_en: string - asignatura_id: string - biblioteca_item_id: string | null - cita: string - creado_en: string - creado_por: string | null - id: string - tipo: Database["public"]["Enums"]["tipo_bibliografia"] - tipo_fuente: Database["public"]["Enums"]["tipo_fuente_bibliografia"] - } + actualizado_en: string; + asignatura_id: string; + biblioteca_item_id: string | null; + cita: string; + creado_en: string; + creado_por: string | null; + id: string; + tipo: Database["public"]["Enums"]["tipo_bibliografia"]; + tipo_fuente: Database["public"]["Enums"]["tipo_fuente_bibliografia"]; + }; Insert: { - actualizado_en?: string - asignatura_id: string - biblioteca_item_id?: string | null - cita: string - creado_en?: string - creado_por?: string | null - id?: string - tipo: Database["public"]["Enums"]["tipo_bibliografia"] - tipo_fuente?: Database["public"]["Enums"]["tipo_fuente_bibliografia"] - } + actualizado_en?: string; + asignatura_id: string; + biblioteca_item_id?: string | null; + cita: string; + creado_en?: string; + creado_por?: string | null; + id?: string; + tipo: Database["public"]["Enums"]["tipo_bibliografia"]; + tipo_fuente?: Database["public"]["Enums"]["tipo_fuente_bibliografia"]; + }; Update: { - actualizado_en?: string - asignatura_id?: string - biblioteca_item_id?: string | null - cita?: string - creado_en?: string - creado_por?: string | null - id?: string - tipo?: Database["public"]["Enums"]["tipo_bibliografia"] - tipo_fuente?: Database["public"]["Enums"]["tipo_fuente_bibliografia"] - } + actualizado_en?: string; + asignatura_id?: string; + biblioteca_item_id?: string | null; + cita?: string; + creado_en?: string; + creado_por?: string | null; + id?: string; + tipo?: Database["public"]["Enums"]["tipo_bibliografia"]; + tipo_fuente?: Database["public"]["Enums"]["tipo_fuente_bibliografia"]; + }; Relationships: [ { - foreignKeyName: "bibliografia_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "asignaturas" - referencedColumns: ["id"] + foreignKeyName: "bibliografia_asignatura_asignatura_id_fkey"; + columns: ["asignatura_id"]; + isOneToOne: false; + referencedRelation: "asignaturas"; + referencedColumns: ["id"]; }, { - foreignKeyName: "bibliografia_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "plantilla_asignatura" - referencedColumns: ["asignatura_id"] + foreignKeyName: "bibliografia_asignatura_asignatura_id_fkey"; + columns: ["asignatura_id"]; + isOneToOne: false; + referencedRelation: "plantilla_asignatura"; + referencedColumns: ["asignatura_id"]; }, { - foreignKeyName: "bibliografia_asignatura_creado_por_fkey" - columns: ["creado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "bibliografia_asignatura_creado_por_fkey"; + columns: ["creado_por"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, - ] - } + ]; + }; cambios_asignatura: { Row: { - asignatura_id: string - cambiado_en: string - cambiado_por: string | null - campo: string | null - fuente: Database["public"]["Enums"]["fuente_cambio"] | null - id: string - interaccion_ia_id: string | null - tipo: Database["public"]["Enums"]["tipo_cambio"] - valor_anterior: Json | null - valor_nuevo: Json | null - } + asignatura_id: string; + cambiado_en: string; + cambiado_por: string | null; + campo: string | null; + fuente: Database["public"]["Enums"]["fuente_cambio"] | null; + id: string; + interaccion_ia_id: string | null; + tipo: Database["public"]["Enums"]["tipo_cambio"]; + valor_anterior: Json | null; + valor_nuevo: Json | null; + }; Insert: { - asignatura_id: string - cambiado_en?: string - cambiado_por?: string | null - campo?: string | null - fuente?: Database["public"]["Enums"]["fuente_cambio"] | null - id?: string - interaccion_ia_id?: string | null - tipo: Database["public"]["Enums"]["tipo_cambio"] - valor_anterior?: Json | null - valor_nuevo?: Json | null - } + asignatura_id: string; + cambiado_en?: string; + cambiado_por?: string | null; + campo?: string | null; + fuente?: Database["public"]["Enums"]["fuente_cambio"] | null; + id?: string; + interaccion_ia_id?: string | null; + tipo: Database["public"]["Enums"]["tipo_cambio"]; + valor_anterior?: Json | null; + valor_nuevo?: Json | null; + }; Update: { - asignatura_id?: string - cambiado_en?: string - cambiado_por?: string | null - campo?: string | null - fuente?: Database["public"]["Enums"]["fuente_cambio"] | null - id?: string - interaccion_ia_id?: string | null - tipo?: Database["public"]["Enums"]["tipo_cambio"] - valor_anterior?: Json | null - valor_nuevo?: Json | null - } + asignatura_id?: string; + cambiado_en?: string; + cambiado_por?: string | null; + campo?: string | null; + fuente?: Database["public"]["Enums"]["fuente_cambio"] | null; + id?: string; + interaccion_ia_id?: string | null; + tipo?: Database["public"]["Enums"]["tipo_cambio"]; + valor_anterior?: Json | null; + valor_nuevo?: Json | null; + }; Relationships: [ { - foreignKeyName: "cambios_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "asignaturas" - referencedColumns: ["id"] + foreignKeyName: "cambios_asignatura_asignatura_id_fkey"; + columns: ["asignatura_id"]; + isOneToOne: false; + referencedRelation: "asignaturas"; + referencedColumns: ["id"]; }, { - foreignKeyName: "cambios_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "plantilla_asignatura" - referencedColumns: ["asignatura_id"] + foreignKeyName: "cambios_asignatura_asignatura_id_fkey"; + columns: ["asignatura_id"]; + isOneToOne: false; + referencedRelation: "plantilla_asignatura"; + referencedColumns: ["asignatura_id"]; }, { - foreignKeyName: "cambios_asignatura_cambiado_por_fkey" - columns: ["cambiado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "cambios_asignatura_cambiado_por_fkey"; + columns: ["cambiado_por"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, - ] - } + ]; + }; cambios_plan: { Row: { - cambiado_en: string - cambiado_por: string | null - campo: string | null - id: string - plan_estudio_id: string - response_id: string | null - tipo: Database["public"]["Enums"]["tipo_cambio"] - valor_anterior: Json | null - valor_nuevo: Json | null - } + cambiado_en: string; + cambiado_por: string | null; + campo: string | null; + id: string; + plan_estudio_id: string; + response_id: string | null; + tipo: Database["public"]["Enums"]["tipo_cambio"]; + valor_anterior: Json | null; + valor_nuevo: Json | null; + }; Insert: { - cambiado_en?: string - cambiado_por?: string | null - campo?: string | null - id?: string - plan_estudio_id: string - response_id?: string | null - tipo: Database["public"]["Enums"]["tipo_cambio"] - valor_anterior?: Json | null - valor_nuevo?: Json | null - } + cambiado_en?: string; + cambiado_por?: string | null; + campo?: string | null; + id?: string; + plan_estudio_id: string; + response_id?: string | null; + tipo: Database["public"]["Enums"]["tipo_cambio"]; + valor_anterior?: Json | null; + valor_nuevo?: Json | null; + }; Update: { - cambiado_en?: string - cambiado_por?: string | null - campo?: string | null - id?: string - plan_estudio_id?: string - response_id?: string | null - tipo?: Database["public"]["Enums"]["tipo_cambio"] - valor_anterior?: Json | null - valor_nuevo?: Json | null - } + cambiado_en?: string; + cambiado_por?: string | null; + campo?: string | null; + id?: string; + plan_estudio_id?: string; + response_id?: string | null; + tipo?: Database["public"]["Enums"]["tipo_cambio"]; + valor_anterior?: Json | null; + valor_nuevo?: Json | null; + }; Relationships: [ { - foreignKeyName: "cambios_plan_cambiado_por_fkey" - columns: ["cambiado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "cambios_plan_cambiado_por_fkey"; + columns: ["cambiado_por"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, - ] - } + ]; + }; carreras: { Row: { - activa: boolean - actualizado_en: string - clave_sep: string | null - creado_en: string - facultad_id: string - id: string - nombre: string - nombre_corto: string | null - } + activa: boolean; + actualizado_en: string; + clave_sep: string | null; + creado_en: string; + facultad_id: string; + id: string; + nombre: string; + nombre_corto: string | null; + }; Insert: { - activa?: boolean - actualizado_en?: string - clave_sep?: string | null - creado_en?: string - facultad_id: string - id?: string - nombre: string - nombre_corto?: string | null - } + activa?: boolean; + actualizado_en?: string; + clave_sep?: string | null; + creado_en?: string; + facultad_id: string; + id?: string; + nombre: string; + nombre_corto?: string | null; + }; Update: { - activa?: boolean - actualizado_en?: string - clave_sep?: string | null - creado_en?: string - facultad_id?: string - id?: string - nombre?: string - nombre_corto?: string | null - } + activa?: boolean; + actualizado_en?: string; + clave_sep?: string | null; + creado_en?: string; + facultad_id?: string; + id?: string; + nombre?: string; + nombre_corto?: string | null; + }; Relationships: [ { - foreignKeyName: "carreras_facultad_id_fkey" - columns: ["facultad_id"] - isOneToOne: false - referencedRelation: "facultades" - referencedColumns: ["id"] + foreignKeyName: "carreras_facultad_id_fkey"; + columns: ["facultad_id"]; + isOneToOne: false; + referencedRelation: "facultades"; + referencedColumns: ["id"]; }, - ] - } + ]; + }; conversaciones_asignatura: { Row: { - archivado_en: string | null - archivado_por: string | null - asignatura_id: string - conversacion_json: Json - creado_en: string - creado_por: string | null - estado: Database["public"]["Enums"]["estado_conversacion"] - id: string - intento_archivado: number - openai_conversation_id: string - } + archivado_en: string | null; + archivado_por: string | null; + asignatura_id: string; + conversacion_json: Json; + creado_en: string; + creado_por: string | null; + estado: Database["public"]["Enums"]["estado_conversacion"]; + id: string; + intento_archivado: number; + openai_conversation_id: string; + }; Insert: { - archivado_en?: string | null - archivado_por?: string | null - asignatura_id: string - conversacion_json?: Json - creado_en?: string - creado_por?: string | null - estado?: Database["public"]["Enums"]["estado_conversacion"] - id?: string - intento_archivado?: number - openai_conversation_id: string - } + archivado_en?: string | null; + archivado_por?: string | null; + asignatura_id: string; + conversacion_json?: Json; + creado_en?: string; + creado_por?: string | null; + estado?: Database["public"]["Enums"]["estado_conversacion"]; + id?: string; + intento_archivado?: number; + openai_conversation_id: string; + }; Update: { - archivado_en?: string | null - archivado_por?: string | null - asignatura_id?: string - conversacion_json?: Json - creado_en?: string - creado_por?: string | null - estado?: Database["public"]["Enums"]["estado_conversacion"] - id?: string - intento_archivado?: number - openai_conversation_id?: string - } + archivado_en?: string | null; + archivado_por?: string | null; + asignatura_id?: string; + conversacion_json?: Json; + creado_en?: string; + creado_por?: string | null; + estado?: Database["public"]["Enums"]["estado_conversacion"]; + id?: string; + intento_archivado?: number; + openai_conversation_id?: string; + }; Relationships: [ { - foreignKeyName: "conversaciones_asignatura_archivado_por_fkey" - columns: ["archivado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "conversaciones_asignatura_archivado_por_fkey"; + columns: ["archivado_por"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, { - foreignKeyName: "conversaciones_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "asignaturas" - referencedColumns: ["id"] + foreignKeyName: "conversaciones_asignatura_asignatura_id_fkey"; + columns: ["asignatura_id"]; + isOneToOne: false; + referencedRelation: "asignaturas"; + referencedColumns: ["id"]; }, { - foreignKeyName: "conversaciones_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "plantilla_asignatura" - referencedColumns: ["asignatura_id"] + foreignKeyName: "conversaciones_asignatura_asignatura_id_fkey"; + columns: ["asignatura_id"]; + isOneToOne: false; + referencedRelation: "plantilla_asignatura"; + referencedColumns: ["asignatura_id"]; }, { - foreignKeyName: "conversaciones_asignatura_creado_por_fkey" - columns: ["creado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "conversaciones_asignatura_creado_por_fkey"; + columns: ["creado_por"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, - ] - } + ]; + }; conversaciones_plan: { Row: { - archivado_en: string | null - archivado_por: string | null - conversacion_json: Json - creado_en: string - creado_por: string | null - estado: Database["public"]["Enums"]["estado_conversacion"] - id: string - intento_archivado: number - nombre: string | null - openai_conversation_id: string - plan_estudio_id: string - } + archivado_en: string | null; + archivado_por: string | null; + conversacion_json: Json; + creado_en: string; + creado_por: string | null; + estado: Database["public"]["Enums"]["estado_conversacion"]; + id: string; + intento_archivado: number; + nombre: string | null; + openai_conversation_id: string; + plan_estudio_id: string; + }; Insert: { - archivado_en?: string | null - archivado_por?: string | null - conversacion_json?: Json - creado_en?: string - creado_por?: string | null - estado?: Database["public"]["Enums"]["estado_conversacion"] - id?: string - intento_archivado?: number - nombre?: string | null - openai_conversation_id: string - plan_estudio_id: string - } + archivado_en?: string | null; + archivado_por?: string | null; + conversacion_json?: Json; + creado_en?: string; + creado_por?: string | null; + estado?: Database["public"]["Enums"]["estado_conversacion"]; + id?: string; + intento_archivado?: number; + nombre?: string | null; + openai_conversation_id: string; + plan_estudio_id: string; + }; Update: { - archivado_en?: string | null - archivado_por?: string | null - conversacion_json?: Json - creado_en?: string - creado_por?: string | null - estado?: Database["public"]["Enums"]["estado_conversacion"] - id?: string - intento_archivado?: number - nombre?: string | null - openai_conversation_id?: string - plan_estudio_id?: string - } + archivado_en?: string | null; + archivado_por?: string | null; + conversacion_json?: Json; + creado_en?: string; + creado_por?: string | null; + estado?: Database["public"]["Enums"]["estado_conversacion"]; + id?: string; + intento_archivado?: number; + nombre?: string | null; + openai_conversation_id?: string; + plan_estudio_id?: string; + }; Relationships: [ { - foreignKeyName: "conversaciones_plan_archivado_por_fkey" - columns: ["archivado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "conversaciones_plan_archivado_por_fkey"; + columns: ["archivado_por"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, { - foreignKeyName: "conversaciones_plan_creado_por_fkey" - columns: ["creado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "conversaciones_plan_creado_por_fkey"; + columns: ["creado_por"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, { - foreignKeyName: "conversaciones_plan_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] - isOneToOne: false - referencedRelation: "planes_estudio" - referencedColumns: ["id"] + foreignKeyName: "conversaciones_plan_plan_estudio_id_fkey"; + columns: ["plan_estudio_id"]; + isOneToOne: false; + referencedRelation: "planes_estudio"; + referencedColumns: ["id"]; }, { - foreignKeyName: "conversaciones_plan_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] - isOneToOne: false - referencedRelation: "plantilla_plan" - referencedColumns: ["plan_estudio_id"] + foreignKeyName: "conversaciones_plan_plan_estudio_id_fkey"; + columns: ["plan_estudio_id"]; + isOneToOne: false; + referencedRelation: "plantilla_plan"; + referencedColumns: ["plan_estudio_id"]; }, - ] - } + ]; + }; estados_plan: { Row: { - clave: string - es_final: boolean - etiqueta: string - id: string - orden: number - } + clave: string; + es_final: boolean; + etiqueta: string; + id: string; + orden: number; + }; Insert: { - clave: string - es_final?: boolean - etiqueta: string - id?: string - orden?: number - } + clave: string; + es_final?: boolean; + etiqueta: string; + id?: string; + orden?: number; + }; Update: { - clave?: string - es_final?: boolean - etiqueta?: string - id?: string - orden?: number - } - Relationships: [] - } + clave?: string; + es_final?: boolean; + etiqueta?: string; + id?: string; + orden?: number; + }; + Relationships: []; + }; estructuras_asignatura: { Row: { - actualizado_en: string - creado_en: string - definicion: Json - id: string - nombre: string - template_id: string | null - tipo: Database["public"]["Enums"]["tipo_estructura_plan"] | null - } + actualizado_en: string; + creado_en: string; + definicion: Json; + id: string; + nombre: string; + template_id: string | null; + tipo: Database["public"]["Enums"]["tipo_estructura_plan"] | null; + }; Insert: { - actualizado_en?: string - creado_en?: string - definicion?: Json - id?: string - nombre: string - template_id?: string | null - tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] | null - } + actualizado_en?: string; + creado_en?: string; + definicion?: Json; + id?: string; + nombre: string; + template_id?: string | null; + tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] | null; + }; Update: { - actualizado_en?: string - creado_en?: string - definicion?: Json - id?: string - nombre?: string - template_id?: string | null - tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] | null - } - Relationships: [] - } + actualizado_en?: string; + creado_en?: string; + definicion?: Json; + id?: string; + nombre?: string; + template_id?: string | null; + tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] | null; + }; + Relationships: []; + }; estructuras_plan: { Row: { - actualizado_en: string - creado_en: string - definicion: Json - id: string - nombre: string - template_id: string | null - tipo: Database["public"]["Enums"]["tipo_estructura_plan"] - } + actualizado_en: string; + creado_en: string; + definicion: Json; + id: string; + nombre: string; + template_id: string | null; + tipo: Database["public"]["Enums"]["tipo_estructura_plan"]; + }; Insert: { - actualizado_en?: string - creado_en?: string - definicion?: Json - id?: string - nombre: string - template_id?: string | null - tipo: Database["public"]["Enums"]["tipo_estructura_plan"] - } + actualizado_en?: string; + creado_en?: string; + definicion?: Json; + id?: string; + nombre: string; + template_id?: string | null; + tipo: Database["public"]["Enums"]["tipo_estructura_plan"]; + }; Update: { - actualizado_en?: string - creado_en?: string - definicion?: Json - id?: string - nombre?: string - template_id?: string | null - tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] - } - Relationships: [] - } + actualizado_en?: string; + creado_en?: string; + definicion?: Json; + id?: string; + nombre?: string; + template_id?: string | null; + tipo?: Database["public"]["Enums"]["tipo_estructura_plan"]; + }; + Relationships: []; + }; facultades: { Row: { - actualizado_en: string - color: string | null - creado_en: string - icono: string | null - id: string - nombre: string - nombre_corto: string | null - } + actualizado_en: string; + color: string | null; + creado_en: string; + icono: string | null; + id: string; + nombre: string; + nombre_corto: string | null; + }; Insert: { - actualizado_en?: string - color?: string | null - creado_en?: string - icono?: string | null - id?: string - nombre: string - nombre_corto?: string | null - } + actualizado_en?: string; + color?: string | null; + creado_en?: string; + icono?: string | null; + id?: string; + nombre: string; + nombre_corto?: string | null; + }; Update: { - actualizado_en?: string - color?: string | null - creado_en?: string - icono?: string | null - id?: string - nombre?: string - nombre_corto?: string | null - } - Relationships: [] - } + actualizado_en?: string; + color?: string | null; + creado_en?: string; + icono?: string | null; + id?: string; + nombre?: string; + nombre_corto?: string | null; + }; + Relationships: []; + }; interacciones_ia: { Row: { - aceptada: boolean - asignatura_id: string | null - conversacion_id: string | null - creado_en: string - id: string - ids_archivos: Json - ids_vector_store: Json - modelo: string | null - plan_estudio_id: string | null - prompt: Json - respuesta: Json - rutas_storage: Json - temperatura: number | null - tipo: Database["public"]["Enums"]["tipo_interaccion_ia"] - usuario_id: string | null - } + aceptada: boolean; + asignatura_id: string | null; + conversacion_id: string | null; + creado_en: string; + id: string; + ids_archivos: Json; + ids_vector_store: Json; + modelo: string | null; + plan_estudio_id: string | null; + prompt: Json; + respuesta: Json; + rutas_storage: Json; + temperatura: number | null; + tipo: Database["public"]["Enums"]["tipo_interaccion_ia"]; + usuario_id: string | null; + }; Insert: { - aceptada?: boolean - asignatura_id?: string | null - conversacion_id?: string | null - creado_en?: string - id?: string - ids_archivos?: Json - ids_vector_store?: Json - modelo?: string | null - plan_estudio_id?: string | null - prompt?: Json - respuesta?: Json - rutas_storage?: Json - temperatura?: number | null - tipo: Database["public"]["Enums"]["tipo_interaccion_ia"] - usuario_id?: string | null - } + aceptada?: boolean; + asignatura_id?: string | null; + conversacion_id?: string | null; + creado_en?: string; + id?: string; + ids_archivos?: Json; + ids_vector_store?: Json; + modelo?: string | null; + plan_estudio_id?: string | null; + prompt?: Json; + respuesta?: Json; + rutas_storage?: Json; + temperatura?: number | null; + tipo: Database["public"]["Enums"]["tipo_interaccion_ia"]; + usuario_id?: string | null; + }; Update: { - aceptada?: boolean - asignatura_id?: string | null - conversacion_id?: string | null - creado_en?: string - id?: string - ids_archivos?: Json - ids_vector_store?: Json - modelo?: string | null - plan_estudio_id?: string | null - prompt?: Json - respuesta?: Json - rutas_storage?: Json - temperatura?: number | null - tipo?: Database["public"]["Enums"]["tipo_interaccion_ia"] - usuario_id?: string | null - } + aceptada?: boolean; + asignatura_id?: string | null; + conversacion_id?: string | null; + creado_en?: string; + id?: string; + ids_archivos?: Json; + ids_vector_store?: Json; + modelo?: string | null; + plan_estudio_id?: string | null; + prompt?: Json; + respuesta?: Json; + rutas_storage?: Json; + temperatura?: number | null; + tipo?: Database["public"]["Enums"]["tipo_interaccion_ia"]; + usuario_id?: string | null; + }; Relationships: [ { - foreignKeyName: "interacciones_ia_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "asignaturas" - referencedColumns: ["id"] + foreignKeyName: "interacciones_ia_asignatura_id_fkey"; + columns: ["asignatura_id"]; + isOneToOne: false; + referencedRelation: "asignaturas"; + referencedColumns: ["id"]; }, { - foreignKeyName: "interacciones_ia_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "plantilla_asignatura" - referencedColumns: ["asignatura_id"] + foreignKeyName: "interacciones_ia_asignatura_id_fkey"; + columns: ["asignatura_id"]; + isOneToOne: false; + referencedRelation: "plantilla_asignatura"; + referencedColumns: ["asignatura_id"]; }, { - foreignKeyName: "interacciones_ia_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] - isOneToOne: false - referencedRelation: "planes_estudio" - referencedColumns: ["id"] + foreignKeyName: "interacciones_ia_plan_estudio_id_fkey"; + columns: ["plan_estudio_id"]; + isOneToOne: false; + referencedRelation: "planes_estudio"; + referencedColumns: ["id"]; }, { - foreignKeyName: "interacciones_ia_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] - isOneToOne: false - referencedRelation: "plantilla_plan" - referencedColumns: ["plan_estudio_id"] + foreignKeyName: "interacciones_ia_plan_estudio_id_fkey"; + columns: ["plan_estudio_id"]; + isOneToOne: false; + referencedRelation: "plantilla_plan"; + referencedColumns: ["plan_estudio_id"]; }, { - foreignKeyName: "interacciones_ia_usuario_id_fkey" - columns: ["usuario_id"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "interacciones_ia_usuario_id_fkey"; + columns: ["usuario_id"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, - ] - } + ]; + }; lineas_plan: { Row: { - actualizado_en: string - area: string | null - creado_en: string - id: string - nombre: string - orden: number - plan_estudio_id: string - } + actualizado_en: string; + area: string | null; + creado_en: string; + id: string; + nombre: string; + orden: number; + plan_estudio_id: string; + }; Insert: { - actualizado_en?: string - area?: string | null - creado_en?: string - id?: string - nombre: string - orden?: number - plan_estudio_id: string - } + actualizado_en?: string; + area?: string | null; + creado_en?: string; + id?: string; + nombre: string; + orden?: number; + plan_estudio_id: string; + }; Update: { - actualizado_en?: string - area?: string | null - creado_en?: string - id?: string - nombre?: string - orden?: number - plan_estudio_id?: string - } + actualizado_en?: string; + area?: string | null; + creado_en?: string; + id?: string; + nombre?: string; + orden?: number; + plan_estudio_id?: string; + }; Relationships: [ { - foreignKeyName: "lineas_plan_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] - isOneToOne: false - referencedRelation: "planes_estudio" - referencedColumns: ["id"] + foreignKeyName: "lineas_plan_plan_estudio_id_fkey"; + columns: ["plan_estudio_id"]; + isOneToOne: false; + referencedRelation: "planes_estudio"; + referencedColumns: ["id"]; }, { - foreignKeyName: "lineas_plan_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] - isOneToOne: false - referencedRelation: "plantilla_plan" - referencedColumns: ["plan_estudio_id"] + foreignKeyName: "lineas_plan_plan_estudio_id_fkey"; + columns: ["plan_estudio_id"]; + isOneToOne: false; + referencedRelation: "plantilla_plan"; + referencedColumns: ["plan_estudio_id"]; }, - ] - } + ]; + }; notificaciones: { Row: { - creado_en: string - id: string - leida: boolean - leida_en: string | null - payload: Json - tipo: Database["public"]["Enums"]["tipo_notificacion"] - usuario_id: string - } + creado_en: string; + id: string; + leida: boolean; + leida_en: string | null; + payload: Json; + tipo: Database["public"]["Enums"]["tipo_notificacion"]; + usuario_id: string; + }; Insert: { - creado_en?: string - id?: string - leida?: boolean - leida_en?: string | null - payload?: Json - tipo: Database["public"]["Enums"]["tipo_notificacion"] - usuario_id: string - } + creado_en?: string; + id?: string; + leida?: boolean; + leida_en?: string | null; + payload?: Json; + tipo: Database["public"]["Enums"]["tipo_notificacion"]; + usuario_id: string; + }; Update: { - creado_en?: string - id?: string - leida?: boolean - leida_en?: string | null - payload?: Json - tipo?: Database["public"]["Enums"]["tipo_notificacion"] - usuario_id?: string - } + creado_en?: string; + id?: string; + leida?: boolean; + leida_en?: string | null; + payload?: Json; + tipo?: Database["public"]["Enums"]["tipo_notificacion"]; + usuario_id?: string; + }; Relationships: [ { - foreignKeyName: "notificaciones_usuario_id_fkey" - columns: ["usuario_id"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "notificaciones_usuario_id_fkey"; + columns: ["usuario_id"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, - ] - } + ]; + }; plan_mensajes_ia: { Row: { - campos: string[] - conversacion_plan_id: string - enviado_por: string - estado: Database["public"]["Enums"]["estado_mensaje_ia"] - fecha_actualizacion: string - fecha_creacion: string - id: string - is_refusal: boolean - mensaje: string - propuesta: Json | null - respuesta: string | null - } + campos: string[]; + conversacion_plan_id: string; + enviado_por: string; + estado: Database["public"]["Enums"]["estado_mensaje_ia"]; + fecha_actualizacion: string; + fecha_creacion: string; + id: string; + is_refusal: boolean; + mensaje: string; + propuesta: Json | null; + respuesta: string | null; + }; Insert: { - campos?: string[] - conversacion_plan_id: string - enviado_por?: string - estado?: Database["public"]["Enums"]["estado_mensaje_ia"] - fecha_actualizacion?: string - fecha_creacion?: string - id?: string - is_refusal?: boolean - mensaje: string - propuesta?: Json | null - respuesta?: string | null - } + campos?: string[]; + conversacion_plan_id: string; + enviado_por?: string; + estado?: Database["public"]["Enums"]["estado_mensaje_ia"]; + fecha_actualizacion?: string; + fecha_creacion?: string; + id?: string; + is_refusal?: boolean; + mensaje: string; + propuesta?: Json | null; + respuesta?: string | null; + }; Update: { - campos?: string[] - conversacion_plan_id?: string - enviado_por?: string - estado?: Database["public"]["Enums"]["estado_mensaje_ia"] - fecha_actualizacion?: string - fecha_creacion?: string - id?: string - is_refusal?: boolean - mensaje?: string - propuesta?: Json | null - respuesta?: string | null - } + campos?: string[]; + conversacion_plan_id?: string; + enviado_por?: string; + estado?: Database["public"]["Enums"]["estado_mensaje_ia"]; + fecha_actualizacion?: string; + fecha_creacion?: string; + id?: string; + is_refusal?: boolean; + mensaje?: string; + propuesta?: Json | null; + respuesta?: string | null; + }; Relationships: [ { - foreignKeyName: "plan_mensajes_ia_conversacion_plan_id_fkey" - columns: ["conversacion_plan_id"] - isOneToOne: false - referencedRelation: "conversaciones_plan" - referencedColumns: ["id"] + foreignKeyName: "plan_mensajes_ia_conversacion_plan_id_fkey"; + columns: ["conversacion_plan_id"]; + isOneToOne: false; + referencedRelation: "conversaciones_plan"; + referencedColumns: ["id"]; }, - ] - } + ]; + }; planes_estudio: { Row: { - activo: boolean - actualizado_en: string - actualizado_por: string | null - carrera_id: string - creado_en: string - creado_por: string | null - datos: Json - estado_actual_id: string | null - estructura_id: string - id: string - meta_origen: Json - nivel: Database["public"]["Enums"]["nivel_plan_estudio"] - nombre: string - nombre_search: string | null - numero_ciclos: number - plan_hash: string | null - tipo_ciclo: Database["public"]["Enums"]["tipo_ciclo"] - tipo_origen: Database["public"]["Enums"]["tipo_origen"] | null - } + activo: boolean; + actualizado_en: string; + actualizado_por: string | null; + carrera_id: string; + creado_en: string; + creado_por: string | null; + datos: Json; + estado_actual_id: string | null; + estructura_id: string; + id: string; + meta_origen: Json; + nivel: Database["public"]["Enums"]["nivel_plan_estudio"]; + nombre: string; + nombre_search: string | null; + numero_ciclos: number; + plan_hash: string | null; + tipo_ciclo: Database["public"]["Enums"]["tipo_ciclo"]; + tipo_origen: Database["public"]["Enums"]["tipo_origen"] | null; + }; Insert: { - activo?: boolean - actualizado_en?: string - actualizado_por?: string | null - carrera_id: string - creado_en?: string - creado_por?: string | null - datos?: Json - estado_actual_id?: string | null - estructura_id: string - id?: string - meta_origen?: Json - nivel: Database["public"]["Enums"]["nivel_plan_estudio"] - nombre: string - nombre_search?: string | null - numero_ciclos: number - plan_hash?: string | null - tipo_ciclo: Database["public"]["Enums"]["tipo_ciclo"] - tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null - } + activo?: boolean; + actualizado_en?: string; + actualizado_por?: string | null; + carrera_id: string; + creado_en?: string; + creado_por?: string | null; + datos?: Json; + estado_actual_id?: string | null; + estructura_id: string; + id?: string; + meta_origen?: Json; + nivel: Database["public"]["Enums"]["nivel_plan_estudio"]; + nombre: string; + nombre_search?: string | null; + numero_ciclos: number; + plan_hash?: string | null; + tipo_ciclo: Database["public"]["Enums"]["tipo_ciclo"]; + tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null; + }; Update: { - activo?: boolean - actualizado_en?: string - actualizado_por?: string | null - carrera_id?: string - creado_en?: string - creado_por?: string | null - datos?: Json - estado_actual_id?: string | null - estructura_id?: string - id?: string - meta_origen?: Json - nivel?: Database["public"]["Enums"]["nivel_plan_estudio"] - nombre?: string - nombre_search?: string | null - numero_ciclos?: number - plan_hash?: string | null - tipo_ciclo?: Database["public"]["Enums"]["tipo_ciclo"] - tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null - } + activo?: boolean; + actualizado_en?: string; + actualizado_por?: string | null; + carrera_id?: string; + creado_en?: string; + creado_por?: string | null; + datos?: Json; + estado_actual_id?: string | null; + estructura_id?: string; + id?: string; + meta_origen?: Json; + nivel?: Database["public"]["Enums"]["nivel_plan_estudio"]; + nombre?: string; + nombre_search?: string | null; + numero_ciclos?: number; + plan_hash?: string | null; + tipo_ciclo?: Database["public"]["Enums"]["tipo_ciclo"]; + tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null; + }; Relationships: [ { - foreignKeyName: "planes_estudio_actualizado_por_fkey" - columns: ["actualizado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "planes_estudio_actualizado_por_fkey"; + columns: ["actualizado_por"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, { - foreignKeyName: "planes_estudio_carrera_id_fkey" - columns: ["carrera_id"] - isOneToOne: false - referencedRelation: "carreras" - referencedColumns: ["id"] + foreignKeyName: "planes_estudio_carrera_id_fkey"; + columns: ["carrera_id"]; + isOneToOne: false; + referencedRelation: "carreras"; + referencedColumns: ["id"]; }, { - foreignKeyName: "planes_estudio_creado_por_fkey" - columns: ["creado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "planes_estudio_creado_por_fkey"; + columns: ["creado_por"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, { - foreignKeyName: "planes_estudio_estado_actual_id_fkey" - columns: ["estado_actual_id"] - isOneToOne: false - referencedRelation: "estados_plan" - referencedColumns: ["id"] + foreignKeyName: "planes_estudio_estado_actual_id_fkey"; + columns: ["estado_actual_id"]; + isOneToOne: false; + referencedRelation: "estados_plan"; + referencedColumns: ["id"]; }, { - foreignKeyName: "planes_estudio_estructura_id_fkey" - columns: ["estructura_id"] - isOneToOne: false - referencedRelation: "estructuras_plan" - referencedColumns: ["id"] + foreignKeyName: "planes_estudio_estructura_id_fkey"; + columns: ["estructura_id"]; + isOneToOne: false; + referencedRelation: "estructuras_plan"; + referencedColumns: ["id"]; }, { - foreignKeyName: "planes_estudio_estructura_id_fkey" - columns: ["estructura_id"] - isOneToOne: false - referencedRelation: "plantilla_plan" - referencedColumns: ["estructura_id"] + foreignKeyName: "planes_estudio_estructura_id_fkey"; + columns: ["estructura_id"]; + isOneToOne: false; + referencedRelation: "plantilla_plan"; + referencedColumns: ["estructura_id"]; }, - ] - } + ]; + }; responsables_asignatura: { Row: { - asignatura_id: string - creado_en: string - id: string - rol: Database["public"]["Enums"]["rol_responsable_asignatura"] - usuario_id: string - } + asignatura_id: string; + creado_en: string; + id: string; + rol: Database["public"]["Enums"]["rol_responsable_asignatura"]; + usuario_id: string; + }; Insert: { - asignatura_id: string - creado_en?: string - id?: string - rol?: Database["public"]["Enums"]["rol_responsable_asignatura"] - usuario_id: string - } + asignatura_id: string; + creado_en?: string; + id?: string; + rol?: Database["public"]["Enums"]["rol_responsable_asignatura"]; + usuario_id: string; + }; Update: { - asignatura_id?: string - creado_en?: string - id?: string - rol?: Database["public"]["Enums"]["rol_responsable_asignatura"] - usuario_id?: string - } + asignatura_id?: string; + creado_en?: string; + id?: string; + rol?: Database["public"]["Enums"]["rol_responsable_asignatura"]; + usuario_id?: string; + }; Relationships: [ { - foreignKeyName: "responsables_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "asignaturas" - referencedColumns: ["id"] + foreignKeyName: "responsables_asignatura_asignatura_id_fkey"; + columns: ["asignatura_id"]; + isOneToOne: false; + referencedRelation: "asignaturas"; + referencedColumns: ["id"]; }, { - foreignKeyName: "responsables_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] - isOneToOne: false - referencedRelation: "plantilla_asignatura" - referencedColumns: ["asignatura_id"] + foreignKeyName: "responsables_asignatura_asignatura_id_fkey"; + columns: ["asignatura_id"]; + isOneToOne: false; + referencedRelation: "plantilla_asignatura"; + referencedColumns: ["asignatura_id"]; }, { - foreignKeyName: "responsables_asignatura_usuario_id_fkey" - columns: ["usuario_id"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "responsables_asignatura_usuario_id_fkey"; + columns: ["usuario_id"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, - ] - } + ]; + }; roles: { Row: { - clave: string - descripcion: string | null - id: string - nombre: string - } + clave: string; + descripcion: string | null; + id: string; + nombre: string; + }; Insert: { - clave: string - descripcion?: string | null - id?: string - nombre: string - } + clave: string; + descripcion?: string | null; + id?: string; + nombre: string; + }; Update: { - clave?: string - descripcion?: string | null - id?: string - nombre?: string - } - Relationships: [] - } + clave?: string; + descripcion?: string | null; + id?: string; + nombre?: string; + }; + Relationships: []; + }; tareas_revision: { Row: { - asignado_a: string - completado_en: string | null - creado_en: string - estado_id: string | null - estatus: Database["public"]["Enums"]["estado_tarea_revision"] - fecha_limite: string | null - id: string - plan_estudio_id: string - rol_id: string | null - } + asignado_a: string; + completado_en: string | null; + creado_en: string; + estado_id: string | null; + estatus: Database["public"]["Enums"]["estado_tarea_revision"]; + fecha_limite: string | null; + id: string; + plan_estudio_id: string; + rol_id: string | null; + }; Insert: { - asignado_a: string - completado_en?: string | null - creado_en?: string - estado_id?: string | null - estatus?: Database["public"]["Enums"]["estado_tarea_revision"] - fecha_limite?: string | null - id?: string - plan_estudio_id: string - rol_id?: string | null - } + asignado_a: string; + completado_en?: string | null; + creado_en?: string; + estado_id?: string | null; + estatus?: Database["public"]["Enums"]["estado_tarea_revision"]; + fecha_limite?: string | null; + id?: string; + plan_estudio_id: string; + rol_id?: string | null; + }; Update: { - asignado_a?: string - completado_en?: string | null - creado_en?: string - estado_id?: string | null - estatus?: Database["public"]["Enums"]["estado_tarea_revision"] - fecha_limite?: string | null - id?: string - plan_estudio_id?: string - rol_id?: string | null - } + asignado_a?: string; + completado_en?: string | null; + creado_en?: string; + estado_id?: string | null; + estatus?: Database["public"]["Enums"]["estado_tarea_revision"]; + fecha_limite?: string | null; + id?: string; + plan_estudio_id?: string; + rol_id?: string | null; + }; Relationships: [ { - foreignKeyName: "tareas_revision_asignado_a_fkey" - columns: ["asignado_a"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "tareas_revision_asignado_a_fkey"; + columns: ["asignado_a"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, { - foreignKeyName: "tareas_revision_estado_id_fkey" - columns: ["estado_id"] - isOneToOne: false - referencedRelation: "estados_plan" - referencedColumns: ["id"] + foreignKeyName: "tareas_revision_estado_id_fkey"; + columns: ["estado_id"]; + isOneToOne: false; + referencedRelation: "estados_plan"; + referencedColumns: ["id"]; }, { - foreignKeyName: "tareas_revision_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] - isOneToOne: false - referencedRelation: "planes_estudio" - referencedColumns: ["id"] + foreignKeyName: "tareas_revision_plan_estudio_id_fkey"; + columns: ["plan_estudio_id"]; + isOneToOne: false; + referencedRelation: "planes_estudio"; + referencedColumns: ["id"]; }, { - foreignKeyName: "tareas_revision_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] - isOneToOne: false - referencedRelation: "plantilla_plan" - referencedColumns: ["plan_estudio_id"] + foreignKeyName: "tareas_revision_plan_estudio_id_fkey"; + columns: ["plan_estudio_id"]; + isOneToOne: false; + referencedRelation: "plantilla_plan"; + referencedColumns: ["plan_estudio_id"]; }, { - foreignKeyName: "tareas_revision_rol_id_fkey" - columns: ["rol_id"] - isOneToOne: false - referencedRelation: "roles" - referencedColumns: ["id"] + foreignKeyName: "tareas_revision_rol_id_fkey"; + columns: ["rol_id"]; + isOneToOne: false; + referencedRelation: "roles"; + referencedColumns: ["id"]; }, - ] - } + ]; + }; transiciones_estado_plan: { Row: { - creado_en: string - desde_estado_id: string - hacia_estado_id: string - id: string - rol_permitido_id: string - } + creado_en: string; + desde_estado_id: string; + hacia_estado_id: string; + id: string; + rol_permitido_id: string; + }; Insert: { - creado_en?: string - desde_estado_id: string - hacia_estado_id: string - id?: string - rol_permitido_id: string - } + creado_en?: string; + desde_estado_id: string; + hacia_estado_id: string; + id?: string; + rol_permitido_id: string; + }; Update: { - creado_en?: string - desde_estado_id?: string - hacia_estado_id?: string - id?: string - rol_permitido_id?: string - } + creado_en?: string; + desde_estado_id?: string; + hacia_estado_id?: string; + id?: string; + rol_permitido_id?: string; + }; Relationships: [ { - foreignKeyName: "transiciones_estado_plan_desde_estado_id_fkey" - columns: ["desde_estado_id"] - isOneToOne: false - referencedRelation: "estados_plan" - referencedColumns: ["id"] + foreignKeyName: "transiciones_estado_plan_desde_estado_id_fkey"; + columns: ["desde_estado_id"]; + isOneToOne: false; + referencedRelation: "estados_plan"; + referencedColumns: ["id"]; }, { - foreignKeyName: "transiciones_estado_plan_hacia_estado_id_fkey" - columns: ["hacia_estado_id"] - isOneToOne: false - referencedRelation: "estados_plan" - referencedColumns: ["id"] + foreignKeyName: "transiciones_estado_plan_hacia_estado_id_fkey"; + columns: ["hacia_estado_id"]; + isOneToOne: false; + referencedRelation: "estados_plan"; + referencedColumns: ["id"]; }, { - foreignKeyName: "transiciones_estado_plan_rol_permitido_id_fkey" - columns: ["rol_permitido_id"] - isOneToOne: false - referencedRelation: "roles" - referencedColumns: ["id"] + foreignKeyName: "transiciones_estado_plan_rol_permitido_id_fkey"; + columns: ["rol_permitido_id"]; + isOneToOne: false; + referencedRelation: "roles"; + referencedColumns: ["id"]; }, - ] - } + ]; + }; usuarios_app: { Row: { - actualizado_en: string - creado_en: string - email: string | null - externo: boolean - id: string - nombre_completo: string | null - } + actualizado_en: string; + creado_en: string; + email: string | null; + externo: boolean; + id: string; + nombre_completo: string | null; + }; Insert: { - actualizado_en?: string - creado_en?: string - email?: string | null - externo?: boolean - id: string - nombre_completo?: string | null - } + actualizado_en?: string; + creado_en?: string; + email?: string | null; + externo?: boolean; + id: string; + nombre_completo?: string | null; + }; Update: { - actualizado_en?: string - creado_en?: string - email?: string | null - externo?: boolean - id?: string - nombre_completo?: string | null - } - Relationships: [] - } + actualizado_en?: string; + creado_en?: string; + email?: string | null; + externo?: boolean; + id?: string; + nombre_completo?: string | null; + }; + Relationships: []; + }; usuarios_roles: { Row: { - carrera_id: string | null - creado_en: string - facultad_id: string | null - id: string - rol_id: string - usuario_id: string - } + carrera_id: string | null; + creado_en: string; + facultad_id: string | null; + id: string; + rol_id: string; + usuario_id: string; + }; Insert: { - carrera_id?: string | null - creado_en?: string - facultad_id?: string | null - id?: string - rol_id: string - usuario_id: string - } + carrera_id?: string | null; + creado_en?: string; + facultad_id?: string | null; + id?: string; + rol_id: string; + usuario_id: string; + }; Update: { - carrera_id?: string | null - creado_en?: string - facultad_id?: string | null - id?: string - rol_id?: string - usuario_id?: string - } + carrera_id?: string | null; + creado_en?: string; + facultad_id?: string | null; + id?: string; + rol_id?: string; + usuario_id?: string; + }; Relationships: [ { - foreignKeyName: "usuarios_roles_carrera_id_fkey" - columns: ["carrera_id"] - isOneToOne: false - referencedRelation: "carreras" - referencedColumns: ["id"] + foreignKeyName: "usuarios_roles_carrera_id_fkey"; + columns: ["carrera_id"]; + isOneToOne: false; + referencedRelation: "carreras"; + referencedColumns: ["id"]; }, { - foreignKeyName: "usuarios_roles_facultad_id_fkey" - columns: ["facultad_id"] - isOneToOne: false - referencedRelation: "facultades" - referencedColumns: ["id"] + foreignKeyName: "usuarios_roles_facultad_id_fkey"; + columns: ["facultad_id"]; + isOneToOne: false; + referencedRelation: "facultades"; + referencedColumns: ["id"]; }, { - foreignKeyName: "usuarios_roles_rol_id_fkey" - columns: ["rol_id"] - isOneToOne: false - referencedRelation: "roles" - referencedColumns: ["id"] + foreignKeyName: "usuarios_roles_rol_id_fkey"; + columns: ["rol_id"]; + isOneToOne: false; + referencedRelation: "roles"; + referencedColumns: ["id"]; }, { - foreignKeyName: "usuarios_roles_usuario_id_fkey" - columns: ["usuario_id"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "usuarios_roles_usuario_id_fkey"; + columns: ["usuario_id"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, - ] - } + ]; + }; vector_stores: { Row: { - creado_en: string - creado_por: string | null - id: string - nombre: string - openai_vector_id: string | null - } + creado_en: string; + creado_por: string | null; + id: string; + nombre: string; + openai_vector_id: string | null; + }; Insert: { - creado_en?: string - creado_por?: string | null - id?: string - nombre: string - openai_vector_id?: string | null - } + creado_en?: string; + creado_por?: string | null; + id?: string; + nombre: string; + openai_vector_id?: string | null; + }; Update: { - creado_en?: string - creado_por?: string | null - id?: string - nombre?: string - openai_vector_id?: string | null - } + creado_en?: string; + creado_por?: string | null; + id?: string; + nombre?: string; + openai_vector_id?: string | null; + }; Relationships: [ { - foreignKeyName: "vector_stores_creado_por_fkey" - columns: ["creado_por"] - isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + foreignKeyName: "vector_stores_creado_por_fkey"; + columns: ["creado_por"]; + isOneToOne: false; + referencedRelation: "usuarios_app"; + referencedColumns: ["id"]; }, - ] - } - } + ]; + }; + }; Views: { plantilla_asignatura: { Row: { - asignatura_id: string | null - estructura_id: string | null - template_id: string | null - } - Relationships: [] - } + asignatura_id: string | null; + estructura_id: string | null; + template_id: string | null; + }; + Relationships: []; + }; plantilla_plan: { Row: { - estructura_id: string | null - plan_estudio_id: string | null - template_id: string | null - } - Relationships: [] - } - } + estructura_id: string | null; + plan_estudio_id: string | null; + template_id: string | null; + }; + Relationships: []; + }; + }; Functions: { append_conversacion_asignatura: { - Args: { p_append: Json; p_id: string } - Returns: undefined - } + Args: { p_append: Json; p_id: string }; + Returns: undefined; + }; append_conversacion_plan: { - Args: { p_append: Json; p_id: string } - Returns: undefined - } - unaccent: { Args: { "": string }; Returns: string } - unaccent_immutable: { Args: { "": string }; Returns: string } - } + Args: { p_append: Json; p_id: string }; + Returns: undefined; + }; + unaccent: { Args: { "": string }; Returns: string }; + unaccent_immutable: { Args: { "": string }; Returns: string }; + }; Enums: { - estado_asignatura: "borrador" | "revisada" | "aprobada" | "generando" - estado_conversacion: "ACTIVA" | "ARCHIVANDO" | "ARCHIVADA" | "ERROR" - estado_mensaje_ia: "PROCESANDO" | "COMPLETADO" | "ERROR" - estado_tarea_revision: "PENDIENTE" | "COMPLETADA" | "OMITIDA" - fuente_cambio: "HUMANO" | "IA" + estado_asignatura: "borrador" | "revisada" | "aprobada" | "generando"; + estado_conversacion: "ACTIVA" | "ARCHIVANDO" | "ARCHIVADA" | "ERROR"; + estado_mensaje_ia: "PROCESANDO" | "COMPLETADO" | "ERROR"; + estado_tarea_revision: "PENDIENTE" | "COMPLETADA" | "OMITIDA"; + fuente_cambio: "HUMANO" | "IA"; nivel_plan_estudio: | "Licenciatura" | "Maestría" | "Doctorado" | "Especialidad" | "Diplomado" - | "Otro" + | "Otro"; puesto_tipo: | "vicerrector" | "director_facultad" | "secretario_academico" | "jefe_carrera" | "profesor" - | "lci" - rol_responsable_asignatura: "PROFESOR_RESPONSABLE" | "COAUTOR" | "REVISOR" - tipo_asignatura: "OBLIGATORIA" | "OPTATIVA" | "TRONCAL" | "OTRA" - tipo_bibliografia: "BASICA" | "COMPLEMENTARIA" + | "lci"; + rol_responsable_asignatura: + | "PROFESOR_RESPONSABLE" + | "COAUTOR" + | "REVISOR"; + tipo_asignatura: "OBLIGATORIA" | "OPTATIVA" | "TRONCAL" | "OTRA"; + tipo_bibliografia: "BASICA" | "COMPLEMENTARIA"; tipo_cambio: | "ACTUALIZACION_CAMPO" | "ACTUALIZACION_MAPA" | "TRANSICION_ESTADO" | "OTRO" | "CREACION" - | "ACTUALIZACION" - tipo_ciclo: "Semestre" | "Cuatrimestre" | "Trimestre" | "Otro" - tipo_estructura_plan: "CURRICULAR" | "NO_CURRICULAR" - tipo_fuente_bibliografia: "MANUAL" | "BIBLIOTECA" - tipo_interaccion_ia: "GENERAR" | "MEJORAR_SECCION" | "CHAT" | "OTRA" + | "ACTUALIZACION"; + tipo_ciclo: "Semestre" | "Cuatrimestre" | "Trimestre" | "Otro"; + tipo_estructura_plan: "CURRICULAR" | "NO_CURRICULAR"; + tipo_fuente_bibliografia: "MANUAL" | "BIBLIOTECA"; + tipo_interaccion_ia: "GENERAR" | "MEJORAR_SECCION" | "CHAT" | "OTRA"; tipo_notificacion: | "PLAN_ASIGNADO" | "ESTADO_CAMBIADO" | "TAREA_ASIGNADA" | "COMENTARIO" - | "OTRA" + | "OTRA"; tipo_origen: | "MANUAL" | "IA" | "CLONADO_INTERNO" | "CLONADO_TRADICIONAL" - | "OTRO" - } + | "OTRO"; + }; CompositeTypes: { - [_ in never]: never - } - } -} + [_ in never]: never; + }; + }; +}; -type DatabaseWithoutInternals = Omit +type DatabaseWithoutInternals = Omit; -type DefaultSchema = DatabaseWithoutInternals[Extract] +type DefaultSchema = + DatabaseWithoutInternals[Extract]; export type Tables< DefaultSchemaTableNameOrOptions extends | keyof (DefaultSchema["Tables"] & DefaultSchema["Views"]) | { schema: keyof DatabaseWithoutInternals }, TableName extends DefaultSchemaTableNameOrOptions extends { - schema: keyof DatabaseWithoutInternals - } - ? keyof (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] & - DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Views"]) + schema: keyof DatabaseWithoutInternals; + } ? keyof ( + & DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ + "Tables" + ] + & DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ + "Views" + ] + ) : never = never, > = DefaultSchemaTableNameOrOptions extends { - schema: keyof DatabaseWithoutInternals -} - ? (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] & - DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Views"])[TableName] extends { - Row: infer R - } - ? R - : never - : DefaultSchemaTableNameOrOptions extends keyof (DefaultSchema["Tables"] & - DefaultSchema["Views"]) - ? (DefaultSchema["Tables"] & - DefaultSchema["Views"])[DefaultSchemaTableNameOrOptions] extends { - Row: infer R - } - ? R - : never + schema: keyof DatabaseWithoutInternals; +} ? ( + & DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ + "Tables" + ] + & DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ + "Views" + ] + )[TableName] extends { + Row: infer R; + } ? R + : never + : DefaultSchemaTableNameOrOptions extends keyof ( + & DefaultSchema["Tables"] + & DefaultSchema["Views"] + ) ? ( + & DefaultSchema["Tables"] + & DefaultSchema["Views"] + )[DefaultSchemaTableNameOrOptions] extends { + Row: infer R; + } ? R : never + : never; export type TablesInsert< DefaultSchemaTableNameOrOptions extends | keyof DefaultSchema["Tables"] | { schema: keyof DatabaseWithoutInternals }, TableName extends DefaultSchemaTableNameOrOptions extends { - schema: keyof DatabaseWithoutInternals - } - ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] + schema: keyof DatabaseWithoutInternals; + } ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ + "Tables" + ] : never = never, > = DefaultSchemaTableNameOrOptions extends { - schema: keyof DatabaseWithoutInternals -} - ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends { - Insert: infer I - } - ? I - : never + schema: keyof DatabaseWithoutInternals; +} ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ + "Tables" + ][TableName] extends { + Insert: infer I; + } ? I + : never : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"] ? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends { - Insert: infer I - } - ? I - : never + Insert: infer I; + } ? I : never + : never; export type TablesUpdate< DefaultSchemaTableNameOrOptions extends | keyof DefaultSchema["Tables"] | { schema: keyof DatabaseWithoutInternals }, TableName extends DefaultSchemaTableNameOrOptions extends { - schema: keyof DatabaseWithoutInternals - } - ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] + schema: keyof DatabaseWithoutInternals; + } ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ + "Tables" + ] : never = never, > = DefaultSchemaTableNameOrOptions extends { - schema: keyof DatabaseWithoutInternals -} - ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends { - Update: infer U - } - ? U - : never + schema: keyof DatabaseWithoutInternals; +} ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ + "Tables" + ][TableName] extends { + Update: infer U; + } ? U + : never : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"] ? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends { - Update: infer U - } - ? U - : never + Update: infer U; + } ? U : never + : never; export type Enums< DefaultSchemaEnumNameOrOptions extends | keyof DefaultSchema["Enums"] | { schema: keyof DatabaseWithoutInternals }, EnumName extends DefaultSchemaEnumNameOrOptions extends { - schema: keyof DatabaseWithoutInternals - } - ? keyof DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"] + schema: keyof DatabaseWithoutInternals; + } ? keyof DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]][ + "Enums" + ] : never = never, > = DefaultSchemaEnumNameOrOptions extends { - schema: keyof DatabaseWithoutInternals -} - ? DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"][EnumName] + schema: keyof DatabaseWithoutInternals; +} ? DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"][ + EnumName + ] : DefaultSchemaEnumNameOrOptions extends keyof DefaultSchema["Enums"] ? DefaultSchema["Enums"][DefaultSchemaEnumNameOrOptions] - : never + : never; export type CompositeTypes< PublicCompositeTypeNameOrOptions extends | keyof DefaultSchema["CompositeTypes"] | { schema: keyof DatabaseWithoutInternals }, CompositeTypeName extends PublicCompositeTypeNameOrOptions extends { - schema: keyof DatabaseWithoutInternals - } - ? keyof DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"] + schema: keyof DatabaseWithoutInternals; + } ? keyof DatabaseWithoutInternals[ + PublicCompositeTypeNameOrOptions["schema"] + ]["CompositeTypes"] : never = never, > = PublicCompositeTypeNameOrOptions extends { - schema: keyof DatabaseWithoutInternals -} - ? DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"][CompositeTypeName] - : PublicCompositeTypeNameOrOptions extends keyof DefaultSchema["CompositeTypes"] + schema: keyof DatabaseWithoutInternals; +} ? DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]][ + "CompositeTypes" + ][CompositeTypeName] + : PublicCompositeTypeNameOrOptions extends + keyof DefaultSchema["CompositeTypes"] ? DefaultSchema["CompositeTypes"][PublicCompositeTypeNameOrOptions] - : never + : never; export const Constants = { graphql_public: { @@ -1608,5 +1629,4 @@ export const Constants = { ], }, }, -} as const - +} as const; From 115c21313574aacc7fdd17c0e8530701fb0faf39 Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 21:48:32 +0000 Subject: [PATCH 35/38] Actualizar .gitea/workflows/production.yaml --- .gitea/workflows/production.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/production.yaml b/.gitea/workflows/production.yaml index 613e2a4..6070554 100644 --- a/.gitea/workflows/production.yaml +++ b/.gitea/workflows/production.yaml @@ -5,7 +5,7 @@ on: branches: - main paths: - - 'supabase/**' + - 'supabase/migrations/**' workflow_dispatch: jobs: From abd7e62998d26b4fb059b07b51a867fb9cad3fe2 Mon Sep 17 00:00:00 2001 From: supabot Date: Tue, 10 Mar 2026 21:49:10 +0000 Subject: [PATCH 36/38] chore: update database types --- supabase/functions/_shared/database.types.ts | 2440 +++++++++--------- 1 file changed, 1210 insertions(+), 1230 deletions(-) diff --git a/supabase/functions/_shared/database.types.ts b/supabase/functions/_shared/database.types.ts index d905d96..a889116 100644 --- a/supabase/functions/_shared/database.types.ts +++ b/supabase/functions/_shared/database.types.ts @@ -4,1568 +4,1547 @@ export type Json = | boolean | null | { [key: string]: Json | undefined } - | Json[]; + | Json[] export type Database = { graphql_public: { Tables: { - [_ in never]: never; - }; + [_ in never]: never + } Views: { - [_ in never]: never; - }; + [_ in never]: never + } Functions: { graphql: { Args: { - extensions?: Json; - operationName?: string; - query?: string; - variables?: Json; - }; - Returns: Json; - }; - }; + extensions?: Json + operationName?: string + query?: string + variables?: Json + } + Returns: Json + } + } Enums: { - [_ in never]: never; - }; + [_ in never]: never + } CompositeTypes: { - [_ in never]: never; - }; - }; + [_ in never]: never + } + } public: { Tables: { archivos: { Row: { - bytes: number | null; - id: string; - mime_type: string | null; - nombre: string; - notas: string | null; - openai_file_id: string | null; - ruta_storage: string; - subido_en: string; - subido_por: string | null; - temporal: boolean; - }; + bytes: number | null + id: string + mime_type: string | null + nombre: string + notas: string | null + openai_file_id: string | null + ruta_storage: string + subido_en: string + subido_por: string | null + temporal: boolean + } Insert: { - bytes?: number | null; - id?: string; - mime_type?: string | null; - nombre: string; - notas?: string | null; - openai_file_id?: string | null; - ruta_storage: string; - subido_en?: string; - subido_por?: string | null; - temporal?: boolean; - }; + bytes?: number | null + id?: string + mime_type?: string | null + nombre: string + notas?: string | null + openai_file_id?: string | null + ruta_storage: string + subido_en?: string + subido_por?: string | null + temporal?: boolean + } Update: { - bytes?: number | null; - id?: string; - mime_type?: string | null; - nombre?: string; - notas?: string | null; - openai_file_id?: string | null; - ruta_storage?: string; - subido_en?: string; - subido_por?: string | null; - temporal?: boolean; - }; + bytes?: number | null + id?: string + mime_type?: string | null + nombre?: string + notas?: string | null + openai_file_id?: string | null + ruta_storage?: string + subido_en?: string + subido_por?: string | null + temporal?: boolean + } Relationships: [ { - foreignKeyName: "archivos_subido_por_fkey"; - columns: ["subido_por"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "archivos_subido_por_fkey" + columns: ["subido_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, - ]; - }; + ] + } asignatura_mensajes_ia: { Row: { - campos: string[]; - conversacion_asignatura_id: string; - enviado_por: string; - estado: Database["public"]["Enums"]["estado_mensaje_ia"]; - fecha_actualizacion: string; - fecha_creacion: string; - id: string; - is_refusal: boolean; - mensaje: string; - propuesta: Json | null; - respuesta: string | null; - }; + campos: string[] + conversacion_asignatura_id: string + enviado_por: string + estado: Database["public"]["Enums"]["estado_mensaje_ia"] + fecha_actualizacion: string + fecha_creacion: string + id: string + is_refusal: boolean + mensaje: string + propuesta: Json | null + respuesta: string | null + } Insert: { - campos?: string[]; - conversacion_asignatura_id: string; - enviado_por?: string; - estado?: Database["public"]["Enums"]["estado_mensaje_ia"]; - fecha_actualizacion?: string; - fecha_creacion?: string; - id?: string; - is_refusal?: boolean; - mensaje: string; - propuesta?: Json | null; - respuesta?: string | null; - }; + campos?: string[] + conversacion_asignatura_id: string + enviado_por?: string + estado?: Database["public"]["Enums"]["estado_mensaje_ia"] + fecha_actualizacion?: string + fecha_creacion?: string + id?: string + is_refusal?: boolean + mensaje: string + propuesta?: Json | null + respuesta?: string | null + } Update: { - campos?: string[]; - conversacion_asignatura_id?: string; - enviado_por?: string; - estado?: Database["public"]["Enums"]["estado_mensaje_ia"]; - fecha_actualizacion?: string; - fecha_creacion?: string; - id?: string; - is_refusal?: boolean; - mensaje?: string; - propuesta?: Json | null; - respuesta?: string | null; - }; + campos?: string[] + conversacion_asignatura_id?: string + enviado_por?: string + estado?: Database["public"]["Enums"]["estado_mensaje_ia"] + fecha_actualizacion?: string + fecha_creacion?: string + id?: string + is_refusal?: boolean + mensaje?: string + propuesta?: Json | null + respuesta?: string | null + } Relationships: [ { - foreignKeyName: - "asignatura_mensajes_ia_conversacion_asignatura_id_fkey"; - columns: ["conversacion_asignatura_id"]; - isOneToOne: false; - referencedRelation: "conversaciones_asignatura"; - referencedColumns: ["id"]; + foreignKeyName: "asignatura_mensajes_ia_conversacion_asignatura_id_fkey" + columns: ["conversacion_asignatura_id"] + isOneToOne: false + referencedRelation: "conversaciones_asignatura" + referencedColumns: ["id"] }, - ]; - }; + ] + } asignaturas: { Row: { - actualizado_en: string; - actualizado_por: string | null; - asignatura_hash: string | null; - codigo: string | null; - contenido_tematico: Json; - 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; - horas_academicas: number | null; - horas_independientes: number | null; - id: string; - linea_plan_id: string | null; - meta_origen: Json; - nombre: string; - numero_ciclo: number | null; - orden_celda: number | null; - plan_estudio_id: string; - tipo: Database["public"]["Enums"]["tipo_asignatura"]; - tipo_origen: Database["public"]["Enums"]["tipo_origen"] | null; - }; + actualizado_en: string + actualizado_por: string | null + asignatura_hash: string | null + codigo: string | null + contenido_tematico: Json + 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 + horas_academicas: number | null + horas_independientes: number | null + id: string + linea_plan_id: string | null + meta_origen: Json + nombre: string + numero_ciclo: number | null + orden_celda: number | null + plan_estudio_id: string + tipo: Database["public"]["Enums"]["tipo_asignatura"] + tipo_origen: Database["public"]["Enums"]["tipo_origen"] | null + } Insert: { - actualizado_en?: string; - actualizado_por?: string | null; - asignatura_hash?: string | null; - codigo?: string | null; - contenido_tematico?: Json; - 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; - horas_academicas?: number | null; - horas_independientes?: number | null; - id?: string; - linea_plan_id?: string | null; - meta_origen?: Json; - nombre: string; - numero_ciclo?: number | null; - orden_celda?: number | null; - plan_estudio_id: string; - tipo?: Database["public"]["Enums"]["tipo_asignatura"]; - tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null; - }; + actualizado_en?: string + actualizado_por?: string | null + asignatura_hash?: string | null + codigo?: string | null + contenido_tematico?: Json + 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 + horas_academicas?: number | null + horas_independientes?: number | null + id?: string + linea_plan_id?: string | null + meta_origen?: Json + nombre: string + numero_ciclo?: number | null + orden_celda?: number | null + plan_estudio_id: string + tipo?: Database["public"]["Enums"]["tipo_asignatura"] + tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null + } Update: { - actualizado_en?: string; - actualizado_por?: string | null; - asignatura_hash?: string | null; - codigo?: string | null; - contenido_tematico?: Json; - 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; - horas_academicas?: number | null; - horas_independientes?: number | null; - id?: string; - linea_plan_id?: string | null; - meta_origen?: Json; - nombre?: string; - numero_ciclo?: number | null; - orden_celda?: number | null; - plan_estudio_id?: string; - tipo?: Database["public"]["Enums"]["tipo_asignatura"]; - tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null; - }; + actualizado_en?: string + actualizado_por?: string | null + asignatura_hash?: string | null + codigo?: string | null + contenido_tematico?: Json + 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 + horas_academicas?: number | null + horas_independientes?: number | null + id?: string + linea_plan_id?: string | null + meta_origen?: Json + nombre?: string + numero_ciclo?: number | null + orden_celda?: number | null + plan_estudio_id?: string + tipo?: Database["public"]["Enums"]["tipo_asignatura"] + tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null + } Relationships: [ { - foreignKeyName: "asignaturas_actualizado_por_fkey"; - columns: ["actualizado_por"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "asignaturas_actualizado_por_fkey" + columns: ["actualizado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, { - foreignKeyName: "asignaturas_creado_por_fkey"; - columns: ["creado_por"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "asignaturas_creado_por_fkey" + columns: ["creado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, { - foreignKeyName: "asignaturas_estructura_id_fkey"; - columns: ["estructura_id"]; - isOneToOne: false; - referencedRelation: "estructuras_asignatura"; - referencedColumns: ["id"]; + foreignKeyName: "asignaturas_estructura_id_fkey" + columns: ["estructura_id"] + isOneToOne: false + referencedRelation: "estructuras_asignatura" + referencedColumns: ["id"] }, { - foreignKeyName: "asignaturas_estructura_id_fkey"; - columns: ["estructura_id"]; - isOneToOne: false; - referencedRelation: "plantilla_asignatura"; - referencedColumns: ["estructura_id"]; + foreignKeyName: "asignaturas_estructura_id_fkey" + columns: ["estructura_id"] + isOneToOne: false + referencedRelation: "plantilla_asignatura" + referencedColumns: ["estructura_id"] }, { - foreignKeyName: "asignaturas_linea_plan_fk_compuesta"; - columns: ["linea_plan_id", "plan_estudio_id"]; - isOneToOne: false; - referencedRelation: "lineas_plan"; - referencedColumns: ["id", "plan_estudio_id"]; + foreignKeyName: "asignaturas_linea_plan_fk_compuesta" + columns: ["linea_plan_id", "plan_estudio_id"] + isOneToOne: false + referencedRelation: "lineas_plan" + referencedColumns: ["id", "plan_estudio_id"] }, { - foreignKeyName: "asignaturas_plan_estudio_id_fkey"; - columns: ["plan_estudio_id"]; - isOneToOne: false; - referencedRelation: "planes_estudio"; - referencedColumns: ["id"]; + foreignKeyName: "asignaturas_plan_estudio_id_fkey" + columns: ["plan_estudio_id"] + isOneToOne: false + referencedRelation: "planes_estudio" + referencedColumns: ["id"] }, { - foreignKeyName: "asignaturas_plan_estudio_id_fkey"; - columns: ["plan_estudio_id"]; - isOneToOne: false; - referencedRelation: "plantilla_plan"; - referencedColumns: ["plan_estudio_id"]; + foreignKeyName: "asignaturas_plan_estudio_id_fkey" + columns: ["plan_estudio_id"] + isOneToOne: false + referencedRelation: "plantilla_plan" + referencedColumns: ["plan_estudio_id"] }, - ]; - }; + ] + } bibliografia_asignatura: { Row: { - actualizado_en: string; - asignatura_id: string; - biblioteca_item_id: string | null; - cita: string; - creado_en: string; - creado_por: string | null; - id: string; - tipo: Database["public"]["Enums"]["tipo_bibliografia"]; - tipo_fuente: Database["public"]["Enums"]["tipo_fuente_bibliografia"]; - }; + actualizado_en: string + asignatura_id: string + biblioteca_item_id: string | null + cita: string + creado_en: string + creado_por: string | null + id: string + tipo: Database["public"]["Enums"]["tipo_bibliografia"] + tipo_fuente: Database["public"]["Enums"]["tipo_fuente_bibliografia"] + } Insert: { - actualizado_en?: string; - asignatura_id: string; - biblioteca_item_id?: string | null; - cita: string; - creado_en?: string; - creado_por?: string | null; - id?: string; - tipo: Database["public"]["Enums"]["tipo_bibliografia"]; - tipo_fuente?: Database["public"]["Enums"]["tipo_fuente_bibliografia"]; - }; + actualizado_en?: string + asignatura_id: string + biblioteca_item_id?: string | null + cita: string + creado_en?: string + creado_por?: string | null + id?: string + tipo: Database["public"]["Enums"]["tipo_bibliografia"] + tipo_fuente?: Database["public"]["Enums"]["tipo_fuente_bibliografia"] + } Update: { - actualizado_en?: string; - asignatura_id?: string; - biblioteca_item_id?: string | null; - cita?: string; - creado_en?: string; - creado_por?: string | null; - id?: string; - tipo?: Database["public"]["Enums"]["tipo_bibliografia"]; - tipo_fuente?: Database["public"]["Enums"]["tipo_fuente_bibliografia"]; - }; + actualizado_en?: string + asignatura_id?: string + biblioteca_item_id?: string | null + cita?: string + creado_en?: string + creado_por?: string | null + id?: string + tipo?: Database["public"]["Enums"]["tipo_bibliografia"] + tipo_fuente?: Database["public"]["Enums"]["tipo_fuente_bibliografia"] + } Relationships: [ { - foreignKeyName: "bibliografia_asignatura_asignatura_id_fkey"; - columns: ["asignatura_id"]; - isOneToOne: false; - referencedRelation: "asignaturas"; - referencedColumns: ["id"]; + foreignKeyName: "bibliografia_asignatura_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "asignaturas" + referencedColumns: ["id"] }, { - foreignKeyName: "bibliografia_asignatura_asignatura_id_fkey"; - columns: ["asignatura_id"]; - isOneToOne: false; - referencedRelation: "plantilla_asignatura"; - referencedColumns: ["asignatura_id"]; + foreignKeyName: "bibliografia_asignatura_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "plantilla_asignatura" + referencedColumns: ["asignatura_id"] }, { - foreignKeyName: "bibliografia_asignatura_creado_por_fkey"; - columns: ["creado_por"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "bibliografia_asignatura_creado_por_fkey" + columns: ["creado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, - ]; - }; + ] + } cambios_asignatura: { Row: { - asignatura_id: string; - cambiado_en: string; - cambiado_por: string | null; - campo: string | null; - fuente: Database["public"]["Enums"]["fuente_cambio"] | null; - id: string; - interaccion_ia_id: string | null; - tipo: Database["public"]["Enums"]["tipo_cambio"]; - valor_anterior: Json | null; - valor_nuevo: Json | null; - }; + asignatura_id: string + cambiado_en: string + cambiado_por: string | null + campo: string | null + fuente: Database["public"]["Enums"]["fuente_cambio"] | null + id: string + interaccion_ia_id: string | null + tipo: Database["public"]["Enums"]["tipo_cambio"] + valor_anterior: Json | null + valor_nuevo: Json | null + } Insert: { - asignatura_id: string; - cambiado_en?: string; - cambiado_por?: string | null; - campo?: string | null; - fuente?: Database["public"]["Enums"]["fuente_cambio"] | null; - id?: string; - interaccion_ia_id?: string | null; - tipo: Database["public"]["Enums"]["tipo_cambio"]; - valor_anterior?: Json | null; - valor_nuevo?: Json | null; - }; + asignatura_id: string + cambiado_en?: string + cambiado_por?: string | null + campo?: string | null + fuente?: Database["public"]["Enums"]["fuente_cambio"] | null + id?: string + interaccion_ia_id?: string | null + tipo: Database["public"]["Enums"]["tipo_cambio"] + valor_anterior?: Json | null + valor_nuevo?: Json | null + } Update: { - asignatura_id?: string; - cambiado_en?: string; - cambiado_por?: string | null; - campo?: string | null; - fuente?: Database["public"]["Enums"]["fuente_cambio"] | null; - id?: string; - interaccion_ia_id?: string | null; - tipo?: Database["public"]["Enums"]["tipo_cambio"]; - valor_anterior?: Json | null; - valor_nuevo?: Json | null; - }; + asignatura_id?: string + cambiado_en?: string + cambiado_por?: string | null + campo?: string | null + fuente?: Database["public"]["Enums"]["fuente_cambio"] | null + id?: string + interaccion_ia_id?: string | null + tipo?: Database["public"]["Enums"]["tipo_cambio"] + valor_anterior?: Json | null + valor_nuevo?: Json | null + } Relationships: [ { - foreignKeyName: "cambios_asignatura_asignatura_id_fkey"; - columns: ["asignatura_id"]; - isOneToOne: false; - referencedRelation: "asignaturas"; - referencedColumns: ["id"]; + foreignKeyName: "cambios_asignatura_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "asignaturas" + referencedColumns: ["id"] }, { - foreignKeyName: "cambios_asignatura_asignatura_id_fkey"; - columns: ["asignatura_id"]; - isOneToOne: false; - referencedRelation: "plantilla_asignatura"; - referencedColumns: ["asignatura_id"]; + foreignKeyName: "cambios_asignatura_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "plantilla_asignatura" + referencedColumns: ["asignatura_id"] }, { - foreignKeyName: "cambios_asignatura_cambiado_por_fkey"; - columns: ["cambiado_por"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "cambios_asignatura_cambiado_por_fkey" + columns: ["cambiado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, - ]; - }; + ] + } cambios_plan: { Row: { - cambiado_en: string; - cambiado_por: string | null; - campo: string | null; - id: string; - plan_estudio_id: string; - response_id: string | null; - tipo: Database["public"]["Enums"]["tipo_cambio"]; - valor_anterior: Json | null; - valor_nuevo: Json | null; - }; + cambiado_en: string + cambiado_por: string | null + campo: string | null + id: string + plan_estudio_id: string + response_id: string | null + tipo: Database["public"]["Enums"]["tipo_cambio"] + valor_anterior: Json | null + valor_nuevo: Json | null + } Insert: { - cambiado_en?: string; - cambiado_por?: string | null; - campo?: string | null; - id?: string; - plan_estudio_id: string; - response_id?: string | null; - tipo: Database["public"]["Enums"]["tipo_cambio"]; - valor_anterior?: Json | null; - valor_nuevo?: Json | null; - }; + cambiado_en?: string + cambiado_por?: string | null + campo?: string | null + id?: string + plan_estudio_id: string + response_id?: string | null + tipo: Database["public"]["Enums"]["tipo_cambio"] + valor_anterior?: Json | null + valor_nuevo?: Json | null + } Update: { - cambiado_en?: string; - cambiado_por?: string | null; - campo?: string | null; - id?: string; - plan_estudio_id?: string; - response_id?: string | null; - tipo?: Database["public"]["Enums"]["tipo_cambio"]; - valor_anterior?: Json | null; - valor_nuevo?: Json | null; - }; + cambiado_en?: string + cambiado_por?: string | null + campo?: string | null + id?: string + plan_estudio_id?: string + response_id?: string | null + tipo?: Database["public"]["Enums"]["tipo_cambio"] + valor_anterior?: Json | null + valor_nuevo?: Json | null + } Relationships: [ { - foreignKeyName: "cambios_plan_cambiado_por_fkey"; - columns: ["cambiado_por"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "cambios_plan_cambiado_por_fkey" + columns: ["cambiado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, - ]; - }; + ] + } carreras: { Row: { - activa: boolean; - actualizado_en: string; - clave_sep: string | null; - creado_en: string; - facultad_id: string; - id: string; - nombre: string; - nombre_corto: string | null; - }; + activa: boolean + actualizado_en: string + clave_sep: string | null + creado_en: string + facultad_id: string + id: string + nombre: string + nombre_corto: string | null + } Insert: { - activa?: boolean; - actualizado_en?: string; - clave_sep?: string | null; - creado_en?: string; - facultad_id: string; - id?: string; - nombre: string; - nombre_corto?: string | null; - }; + activa?: boolean + actualizado_en?: string + clave_sep?: string | null + creado_en?: string + facultad_id: string + id?: string + nombre: string + nombre_corto?: string | null + } Update: { - activa?: boolean; - actualizado_en?: string; - clave_sep?: string | null; - creado_en?: string; - facultad_id?: string; - id?: string; - nombre?: string; - nombre_corto?: string | null; - }; + activa?: boolean + actualizado_en?: string + clave_sep?: string | null + creado_en?: string + facultad_id?: string + id?: string + nombre?: string + nombre_corto?: string | null + } Relationships: [ { - foreignKeyName: "carreras_facultad_id_fkey"; - columns: ["facultad_id"]; - isOneToOne: false; - referencedRelation: "facultades"; - referencedColumns: ["id"]; + foreignKeyName: "carreras_facultad_id_fkey" + columns: ["facultad_id"] + isOneToOne: false + referencedRelation: "facultades" + referencedColumns: ["id"] }, - ]; - }; + ] + } conversaciones_asignatura: { Row: { - archivado_en: string | null; - archivado_por: string | null; - asignatura_id: string; - conversacion_json: Json; - creado_en: string; - creado_por: string | null; - estado: Database["public"]["Enums"]["estado_conversacion"]; - id: string; - intento_archivado: number; - openai_conversation_id: string; - }; + archivado_en: string | null + archivado_por: string | null + asignatura_id: string + conversacion_json: Json + creado_en: string + creado_por: string | null + estado: Database["public"]["Enums"]["estado_conversacion"] + id: string + intento_archivado: number + openai_conversation_id: string + } Insert: { - archivado_en?: string | null; - archivado_por?: string | null; - asignatura_id: string; - conversacion_json?: Json; - creado_en?: string; - creado_por?: string | null; - estado?: Database["public"]["Enums"]["estado_conversacion"]; - id?: string; - intento_archivado?: number; - openai_conversation_id: string; - }; + archivado_en?: string | null + archivado_por?: string | null + asignatura_id: string + conversacion_json?: Json + creado_en?: string + creado_por?: string | null + estado?: Database["public"]["Enums"]["estado_conversacion"] + id?: string + intento_archivado?: number + openai_conversation_id: string + } Update: { - archivado_en?: string | null; - archivado_por?: string | null; - asignatura_id?: string; - conversacion_json?: Json; - creado_en?: string; - creado_por?: string | null; - estado?: Database["public"]["Enums"]["estado_conversacion"]; - id?: string; - intento_archivado?: number; - openai_conversation_id?: string; - }; + archivado_en?: string | null + archivado_por?: string | null + asignatura_id?: string + conversacion_json?: Json + creado_en?: string + creado_por?: string | null + estado?: Database["public"]["Enums"]["estado_conversacion"] + id?: string + intento_archivado?: number + openai_conversation_id?: string + } Relationships: [ { - foreignKeyName: "conversaciones_asignatura_archivado_por_fkey"; - columns: ["archivado_por"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "conversaciones_asignatura_archivado_por_fkey" + columns: ["archivado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, { - foreignKeyName: "conversaciones_asignatura_asignatura_id_fkey"; - columns: ["asignatura_id"]; - isOneToOne: false; - referencedRelation: "asignaturas"; - referencedColumns: ["id"]; + foreignKeyName: "conversaciones_asignatura_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "asignaturas" + referencedColumns: ["id"] }, { - foreignKeyName: "conversaciones_asignatura_asignatura_id_fkey"; - columns: ["asignatura_id"]; - isOneToOne: false; - referencedRelation: "plantilla_asignatura"; - referencedColumns: ["asignatura_id"]; + foreignKeyName: "conversaciones_asignatura_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "plantilla_asignatura" + referencedColumns: ["asignatura_id"] }, { - foreignKeyName: "conversaciones_asignatura_creado_por_fkey"; - columns: ["creado_por"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "conversaciones_asignatura_creado_por_fkey" + columns: ["creado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, - ]; - }; + ] + } conversaciones_plan: { Row: { - archivado_en: string | null; - archivado_por: string | null; - conversacion_json: Json; - creado_en: string; - creado_por: string | null; - estado: Database["public"]["Enums"]["estado_conversacion"]; - id: string; - intento_archivado: number; - nombre: string | null; - openai_conversation_id: string; - plan_estudio_id: string; - }; + archivado_en: string | null + archivado_por: string | null + conversacion_json: Json + creado_en: string + creado_por: string | null + estado: Database["public"]["Enums"]["estado_conversacion"] + id: string + intento_archivado: number + nombre: string | null + openai_conversation_id: string + plan_estudio_id: string + } Insert: { - archivado_en?: string | null; - archivado_por?: string | null; - conversacion_json?: Json; - creado_en?: string; - creado_por?: string | null; - estado?: Database["public"]["Enums"]["estado_conversacion"]; - id?: string; - intento_archivado?: number; - nombre?: string | null; - openai_conversation_id: string; - plan_estudio_id: string; - }; + archivado_en?: string | null + archivado_por?: string | null + conversacion_json?: Json + creado_en?: string + creado_por?: string | null + estado?: Database["public"]["Enums"]["estado_conversacion"] + id?: string + intento_archivado?: number + nombre?: string | null + openai_conversation_id: string + plan_estudio_id: string + } Update: { - archivado_en?: string | null; - archivado_por?: string | null; - conversacion_json?: Json; - creado_en?: string; - creado_por?: string | null; - estado?: Database["public"]["Enums"]["estado_conversacion"]; - id?: string; - intento_archivado?: number; - nombre?: string | null; - openai_conversation_id?: string; - plan_estudio_id?: string; - }; + archivado_en?: string | null + archivado_por?: string | null + conversacion_json?: Json + creado_en?: string + creado_por?: string | null + estado?: Database["public"]["Enums"]["estado_conversacion"] + id?: string + intento_archivado?: number + nombre?: string | null + openai_conversation_id?: string + plan_estudio_id?: string + } Relationships: [ { - foreignKeyName: "conversaciones_plan_archivado_por_fkey"; - columns: ["archivado_por"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "conversaciones_plan_archivado_por_fkey" + columns: ["archivado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, { - foreignKeyName: "conversaciones_plan_creado_por_fkey"; - columns: ["creado_por"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "conversaciones_plan_creado_por_fkey" + columns: ["creado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, { - foreignKeyName: "conversaciones_plan_plan_estudio_id_fkey"; - columns: ["plan_estudio_id"]; - isOneToOne: false; - referencedRelation: "planes_estudio"; - referencedColumns: ["id"]; + foreignKeyName: "conversaciones_plan_plan_estudio_id_fkey" + columns: ["plan_estudio_id"] + isOneToOne: false + referencedRelation: "planes_estudio" + referencedColumns: ["id"] }, { - foreignKeyName: "conversaciones_plan_plan_estudio_id_fkey"; - columns: ["plan_estudio_id"]; - isOneToOne: false; - referencedRelation: "plantilla_plan"; - referencedColumns: ["plan_estudio_id"]; + foreignKeyName: "conversaciones_plan_plan_estudio_id_fkey" + columns: ["plan_estudio_id"] + isOneToOne: false + referencedRelation: "plantilla_plan" + referencedColumns: ["plan_estudio_id"] }, - ]; - }; + ] + } estados_plan: { Row: { - clave: string; - es_final: boolean; - etiqueta: string; - id: string; - orden: number; - }; + clave: string + es_final: boolean + etiqueta: string + id: string + orden: number + } Insert: { - clave: string; - es_final?: boolean; - etiqueta: string; - id?: string; - orden?: number; - }; + clave: string + es_final?: boolean + etiqueta: string + id?: string + orden?: number + } Update: { - clave?: string; - es_final?: boolean; - etiqueta?: string; - id?: string; - orden?: number; - }; - Relationships: []; - }; + clave?: string + es_final?: boolean + etiqueta?: string + id?: string + orden?: number + } + Relationships: [] + } estructuras_asignatura: { Row: { - actualizado_en: string; - creado_en: string; - definicion: Json; - id: string; - nombre: string; - template_id: string | null; - tipo: Database["public"]["Enums"]["tipo_estructura_plan"] | null; - }; + actualizado_en: string + creado_en: string + definicion: Json + id: string + nombre: string + template_id: string | null + tipo: Database["public"]["Enums"]["tipo_estructura_plan"] | null + } Insert: { - actualizado_en?: string; - creado_en?: string; - definicion?: Json; - id?: string; - nombre: string; - template_id?: string | null; - tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] | null; - }; + actualizado_en?: string + creado_en?: string + definicion?: Json + id?: string + nombre: string + template_id?: string | null + tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] | null + } Update: { - actualizado_en?: string; - creado_en?: string; - definicion?: Json; - id?: string; - nombre?: string; - template_id?: string | null; - tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] | null; - }; - Relationships: []; - }; + actualizado_en?: string + creado_en?: string + definicion?: Json + id?: string + nombre?: string + template_id?: string | null + tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] | null + } + Relationships: [] + } estructuras_plan: { Row: { - actualizado_en: string; - creado_en: string; - definicion: Json; - id: string; - nombre: string; - template_id: string | null; - tipo: Database["public"]["Enums"]["tipo_estructura_plan"]; - }; + actualizado_en: string + creado_en: string + definicion: Json + id: string + nombre: string + template_id: string | null + tipo: Database["public"]["Enums"]["tipo_estructura_plan"] + } Insert: { - actualizado_en?: string; - creado_en?: string; - definicion?: Json; - id?: string; - nombre: string; - template_id?: string | null; - tipo: Database["public"]["Enums"]["tipo_estructura_plan"]; - }; + actualizado_en?: string + creado_en?: string + definicion?: Json + id?: string + nombre: string + template_id?: string | null + tipo: Database["public"]["Enums"]["tipo_estructura_plan"] + } Update: { - actualizado_en?: string; - creado_en?: string; - definicion?: Json; - id?: string; - nombre?: string; - template_id?: string | null; - tipo?: Database["public"]["Enums"]["tipo_estructura_plan"]; - }; - Relationships: []; - }; + actualizado_en?: string + creado_en?: string + definicion?: Json + id?: string + nombre?: string + template_id?: string | null + tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] + } + Relationships: [] + } facultades: { Row: { - actualizado_en: string; - color: string | null; - creado_en: string; - icono: string | null; - id: string; - nombre: string; - nombre_corto: string | null; - }; + actualizado_en: string + color: string | null + creado_en: string + icono: string | null + id: string + nombre: string + nombre_corto: string | null + } Insert: { - actualizado_en?: string; - color?: string | null; - creado_en?: string; - icono?: string | null; - id?: string; - nombre: string; - nombre_corto?: string | null; - }; + actualizado_en?: string + color?: string | null + creado_en?: string + icono?: string | null + id?: string + nombre: string + nombre_corto?: string | null + } Update: { - actualizado_en?: string; - color?: string | null; - creado_en?: string; - icono?: string | null; - id?: string; - nombre?: string; - nombre_corto?: string | null; - }; - Relationships: []; - }; + actualizado_en?: string + color?: string | null + creado_en?: string + icono?: string | null + id?: string + nombre?: string + nombre_corto?: string | null + } + Relationships: [] + } interacciones_ia: { Row: { - aceptada: boolean; - asignatura_id: string | null; - conversacion_id: string | null; - creado_en: string; - id: string; - ids_archivos: Json; - ids_vector_store: Json; - modelo: string | null; - plan_estudio_id: string | null; - prompt: Json; - respuesta: Json; - rutas_storage: Json; - temperatura: number | null; - tipo: Database["public"]["Enums"]["tipo_interaccion_ia"]; - usuario_id: string | null; - }; + aceptada: boolean + asignatura_id: string | null + conversacion_id: string | null + creado_en: string + id: string + ids_archivos: Json + ids_vector_store: Json + modelo: string | null + plan_estudio_id: string | null + prompt: Json + respuesta: Json + rutas_storage: Json + temperatura: number | null + tipo: Database["public"]["Enums"]["tipo_interaccion_ia"] + usuario_id: string | null + } Insert: { - aceptada?: boolean; - asignatura_id?: string | null; - conversacion_id?: string | null; - creado_en?: string; - id?: string; - ids_archivos?: Json; - ids_vector_store?: Json; - modelo?: string | null; - plan_estudio_id?: string | null; - prompt?: Json; - respuesta?: Json; - rutas_storage?: Json; - temperatura?: number | null; - tipo: Database["public"]["Enums"]["tipo_interaccion_ia"]; - usuario_id?: string | null; - }; + aceptada?: boolean + asignatura_id?: string | null + conversacion_id?: string | null + creado_en?: string + id?: string + ids_archivos?: Json + ids_vector_store?: Json + modelo?: string | null + plan_estudio_id?: string | null + prompt?: Json + respuesta?: Json + rutas_storage?: Json + temperatura?: number | null + tipo: Database["public"]["Enums"]["tipo_interaccion_ia"] + usuario_id?: string | null + } Update: { - aceptada?: boolean; - asignatura_id?: string | null; - conversacion_id?: string | null; - creado_en?: string; - id?: string; - ids_archivos?: Json; - ids_vector_store?: Json; - modelo?: string | null; - plan_estudio_id?: string | null; - prompt?: Json; - respuesta?: Json; - rutas_storage?: Json; - temperatura?: number | null; - tipo?: Database["public"]["Enums"]["tipo_interaccion_ia"]; - usuario_id?: string | null; - }; + aceptada?: boolean + asignatura_id?: string | null + conversacion_id?: string | null + creado_en?: string + id?: string + ids_archivos?: Json + ids_vector_store?: Json + modelo?: string | null + plan_estudio_id?: string | null + prompt?: Json + respuesta?: Json + rutas_storage?: Json + temperatura?: number | null + tipo?: Database["public"]["Enums"]["tipo_interaccion_ia"] + usuario_id?: string | null + } Relationships: [ { - foreignKeyName: "interacciones_ia_asignatura_id_fkey"; - columns: ["asignatura_id"]; - isOneToOne: false; - referencedRelation: "asignaturas"; - referencedColumns: ["id"]; + foreignKeyName: "interacciones_ia_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "asignaturas" + referencedColumns: ["id"] }, { - foreignKeyName: "interacciones_ia_asignatura_id_fkey"; - columns: ["asignatura_id"]; - isOneToOne: false; - referencedRelation: "plantilla_asignatura"; - referencedColumns: ["asignatura_id"]; + foreignKeyName: "interacciones_ia_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "plantilla_asignatura" + referencedColumns: ["asignatura_id"] }, { - foreignKeyName: "interacciones_ia_plan_estudio_id_fkey"; - columns: ["plan_estudio_id"]; - isOneToOne: false; - referencedRelation: "planes_estudio"; - referencedColumns: ["id"]; + foreignKeyName: "interacciones_ia_plan_estudio_id_fkey" + columns: ["plan_estudio_id"] + isOneToOne: false + referencedRelation: "planes_estudio" + referencedColumns: ["id"] }, { - foreignKeyName: "interacciones_ia_plan_estudio_id_fkey"; - columns: ["plan_estudio_id"]; - isOneToOne: false; - referencedRelation: "plantilla_plan"; - referencedColumns: ["plan_estudio_id"]; + foreignKeyName: "interacciones_ia_plan_estudio_id_fkey" + columns: ["plan_estudio_id"] + isOneToOne: false + referencedRelation: "plantilla_plan" + referencedColumns: ["plan_estudio_id"] }, { - foreignKeyName: "interacciones_ia_usuario_id_fkey"; - columns: ["usuario_id"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "interacciones_ia_usuario_id_fkey" + columns: ["usuario_id"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, - ]; - }; + ] + } lineas_plan: { Row: { - actualizado_en: string; - area: string | null; - creado_en: string; - id: string; - nombre: string; - orden: number; - plan_estudio_id: string; - }; + actualizado_en: string + area: string | null + creado_en: string + id: string + nombre: string + orden: number + plan_estudio_id: string + } Insert: { - actualizado_en?: string; - area?: string | null; - creado_en?: string; - id?: string; - nombre: string; - orden?: number; - plan_estudio_id: string; - }; + actualizado_en?: string + area?: string | null + creado_en?: string + id?: string + nombre: string + orden?: number + plan_estudio_id: string + } Update: { - actualizado_en?: string; - area?: string | null; - creado_en?: string; - id?: string; - nombre?: string; - orden?: number; - plan_estudio_id?: string; - }; + actualizado_en?: string + area?: string | null + creado_en?: string + id?: string + nombre?: string + orden?: number + plan_estudio_id?: string + } Relationships: [ { - foreignKeyName: "lineas_plan_plan_estudio_id_fkey"; - columns: ["plan_estudio_id"]; - isOneToOne: false; - referencedRelation: "planes_estudio"; - referencedColumns: ["id"]; + foreignKeyName: "lineas_plan_plan_estudio_id_fkey" + columns: ["plan_estudio_id"] + isOneToOne: false + referencedRelation: "planes_estudio" + referencedColumns: ["id"] }, { - foreignKeyName: "lineas_plan_plan_estudio_id_fkey"; - columns: ["plan_estudio_id"]; - isOneToOne: false; - referencedRelation: "plantilla_plan"; - referencedColumns: ["plan_estudio_id"]; + foreignKeyName: "lineas_plan_plan_estudio_id_fkey" + columns: ["plan_estudio_id"] + isOneToOne: false + referencedRelation: "plantilla_plan" + referencedColumns: ["plan_estudio_id"] }, - ]; - }; + ] + } notificaciones: { Row: { - creado_en: string; - id: string; - leida: boolean; - leida_en: string | null; - payload: Json; - tipo: Database["public"]["Enums"]["tipo_notificacion"]; - usuario_id: string; - }; + creado_en: string + id: string + leida: boolean + leida_en: string | null + payload: Json + tipo: Database["public"]["Enums"]["tipo_notificacion"] + usuario_id: string + } Insert: { - creado_en?: string; - id?: string; - leida?: boolean; - leida_en?: string | null; - payload?: Json; - tipo: Database["public"]["Enums"]["tipo_notificacion"]; - usuario_id: string; - }; + creado_en?: string + id?: string + leida?: boolean + leida_en?: string | null + payload?: Json + tipo: Database["public"]["Enums"]["tipo_notificacion"] + usuario_id: string + } Update: { - creado_en?: string; - id?: string; - leida?: boolean; - leida_en?: string | null; - payload?: Json; - tipo?: Database["public"]["Enums"]["tipo_notificacion"]; - usuario_id?: string; - }; + creado_en?: string + id?: string + leida?: boolean + leida_en?: string | null + payload?: Json + tipo?: Database["public"]["Enums"]["tipo_notificacion"] + usuario_id?: string + } Relationships: [ { - foreignKeyName: "notificaciones_usuario_id_fkey"; - columns: ["usuario_id"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "notificaciones_usuario_id_fkey" + columns: ["usuario_id"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, - ]; - }; + ] + } plan_mensajes_ia: { Row: { - campos: string[]; - conversacion_plan_id: string; - enviado_por: string; - estado: Database["public"]["Enums"]["estado_mensaje_ia"]; - fecha_actualizacion: string; - fecha_creacion: string; - id: string; - is_refusal: boolean; - mensaje: string; - propuesta: Json | null; - respuesta: string | null; - }; + campos: string[] + conversacion_plan_id: string + enviado_por: string + estado: Database["public"]["Enums"]["estado_mensaje_ia"] + fecha_actualizacion: string + fecha_creacion: string + id: string + is_refusal: boolean + mensaje: string + propuesta: Json | null + respuesta: string | null + } Insert: { - campos?: string[]; - conversacion_plan_id: string; - enviado_por?: string; - estado?: Database["public"]["Enums"]["estado_mensaje_ia"]; - fecha_actualizacion?: string; - fecha_creacion?: string; - id?: string; - is_refusal?: boolean; - mensaje: string; - propuesta?: Json | null; - respuesta?: string | null; - }; + campos?: string[] + conversacion_plan_id: string + enviado_por?: string + estado?: Database["public"]["Enums"]["estado_mensaje_ia"] + fecha_actualizacion?: string + fecha_creacion?: string + id?: string + is_refusal?: boolean + mensaje: string + propuesta?: Json | null + respuesta?: string | null + } Update: { - campos?: string[]; - conversacion_plan_id?: string; - enviado_por?: string; - estado?: Database["public"]["Enums"]["estado_mensaje_ia"]; - fecha_actualizacion?: string; - fecha_creacion?: string; - id?: string; - is_refusal?: boolean; - mensaje?: string; - propuesta?: Json | null; - respuesta?: string | null; - }; + campos?: string[] + conversacion_plan_id?: string + enviado_por?: string + estado?: Database["public"]["Enums"]["estado_mensaje_ia"] + fecha_actualizacion?: string + fecha_creacion?: string + id?: string + is_refusal?: boolean + mensaje?: string + propuesta?: Json | null + respuesta?: string | null + } Relationships: [ { - foreignKeyName: "plan_mensajes_ia_conversacion_plan_id_fkey"; - columns: ["conversacion_plan_id"]; - isOneToOne: false; - referencedRelation: "conversaciones_plan"; - referencedColumns: ["id"]; + foreignKeyName: "plan_mensajes_ia_conversacion_plan_id_fkey" + columns: ["conversacion_plan_id"] + isOneToOne: false + referencedRelation: "conversaciones_plan" + referencedColumns: ["id"] }, - ]; - }; + ] + } planes_estudio: { Row: { - activo: boolean; - actualizado_en: string; - actualizado_por: string | null; - carrera_id: string; - creado_en: string; - creado_por: string | null; - datos: Json; - estado_actual_id: string | null; - estructura_id: string; - id: string; - meta_origen: Json; - nivel: Database["public"]["Enums"]["nivel_plan_estudio"]; - nombre: string; - nombre_search: string | null; - numero_ciclos: number; - plan_hash: string | null; - tipo_ciclo: Database["public"]["Enums"]["tipo_ciclo"]; - tipo_origen: Database["public"]["Enums"]["tipo_origen"] | null; - }; + activo: boolean + actualizado_en: string + actualizado_por: string | null + carrera_id: string + creado_en: string + creado_por: string | null + datos: Json + estado_actual_id: string | null + estructura_id: string + id: string + meta_origen: Json + nivel: Database["public"]["Enums"]["nivel_plan_estudio"] + nombre: string + nombre_search: string | null + numero_ciclos: number + plan_hash: string | null + tipo_ciclo: Database["public"]["Enums"]["tipo_ciclo"] + tipo_origen: Database["public"]["Enums"]["tipo_origen"] | null + } Insert: { - activo?: boolean; - actualizado_en?: string; - actualizado_por?: string | null; - carrera_id: string; - creado_en?: string; - creado_por?: string | null; - datos?: Json; - estado_actual_id?: string | null; - estructura_id: string; - id?: string; - meta_origen?: Json; - nivel: Database["public"]["Enums"]["nivel_plan_estudio"]; - nombre: string; - nombre_search?: string | null; - numero_ciclos: number; - plan_hash?: string | null; - tipo_ciclo: Database["public"]["Enums"]["tipo_ciclo"]; - tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null; - }; + activo?: boolean + actualizado_en?: string + actualizado_por?: string | null + carrera_id: string + creado_en?: string + creado_por?: string | null + datos?: Json + estado_actual_id?: string | null + estructura_id: string + id?: string + meta_origen?: Json + nivel: Database["public"]["Enums"]["nivel_plan_estudio"] + nombre: string + nombre_search?: string | null + numero_ciclos: number + plan_hash?: string | null + tipo_ciclo: Database["public"]["Enums"]["tipo_ciclo"] + tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null + } Update: { - activo?: boolean; - actualizado_en?: string; - actualizado_por?: string | null; - carrera_id?: string; - creado_en?: string; - creado_por?: string | null; - datos?: Json; - estado_actual_id?: string | null; - estructura_id?: string; - id?: string; - meta_origen?: Json; - nivel?: Database["public"]["Enums"]["nivel_plan_estudio"]; - nombre?: string; - nombre_search?: string | null; - numero_ciclos?: number; - plan_hash?: string | null; - tipo_ciclo?: Database["public"]["Enums"]["tipo_ciclo"]; - tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null; - }; + activo?: boolean + actualizado_en?: string + actualizado_por?: string | null + carrera_id?: string + creado_en?: string + creado_por?: string | null + datos?: Json + estado_actual_id?: string | null + estructura_id?: string + id?: string + meta_origen?: Json + nivel?: Database["public"]["Enums"]["nivel_plan_estudio"] + nombre?: string + nombre_search?: string | null + numero_ciclos?: number + plan_hash?: string | null + tipo_ciclo?: Database["public"]["Enums"]["tipo_ciclo"] + tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null + } Relationships: [ { - foreignKeyName: "planes_estudio_actualizado_por_fkey"; - columns: ["actualizado_por"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "planes_estudio_actualizado_por_fkey" + columns: ["actualizado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, { - foreignKeyName: "planes_estudio_carrera_id_fkey"; - columns: ["carrera_id"]; - isOneToOne: false; - referencedRelation: "carreras"; - referencedColumns: ["id"]; + foreignKeyName: "planes_estudio_carrera_id_fkey" + columns: ["carrera_id"] + isOneToOne: false + referencedRelation: "carreras" + referencedColumns: ["id"] }, { - foreignKeyName: "planes_estudio_creado_por_fkey"; - columns: ["creado_por"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "planes_estudio_creado_por_fkey" + columns: ["creado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, { - foreignKeyName: "planes_estudio_estado_actual_id_fkey"; - columns: ["estado_actual_id"]; - isOneToOne: false; - referencedRelation: "estados_plan"; - referencedColumns: ["id"]; + foreignKeyName: "planes_estudio_estado_actual_id_fkey" + columns: ["estado_actual_id"] + isOneToOne: false + referencedRelation: "estados_plan" + referencedColumns: ["id"] }, { - foreignKeyName: "planes_estudio_estructura_id_fkey"; - columns: ["estructura_id"]; - isOneToOne: false; - referencedRelation: "estructuras_plan"; - referencedColumns: ["id"]; + foreignKeyName: "planes_estudio_estructura_id_fkey" + columns: ["estructura_id"] + isOneToOne: false + referencedRelation: "estructuras_plan" + referencedColumns: ["id"] }, { - foreignKeyName: "planes_estudio_estructura_id_fkey"; - columns: ["estructura_id"]; - isOneToOne: false; - referencedRelation: "plantilla_plan"; - referencedColumns: ["estructura_id"]; + foreignKeyName: "planes_estudio_estructura_id_fkey" + columns: ["estructura_id"] + isOneToOne: false + referencedRelation: "plantilla_plan" + referencedColumns: ["estructura_id"] }, - ]; - }; + ] + } responsables_asignatura: { Row: { - asignatura_id: string; - creado_en: string; - id: string; - rol: Database["public"]["Enums"]["rol_responsable_asignatura"]; - usuario_id: string; - }; + asignatura_id: string + creado_en: string + id: string + rol: Database["public"]["Enums"]["rol_responsable_asignatura"] + usuario_id: string + } Insert: { - asignatura_id: string; - creado_en?: string; - id?: string; - rol?: Database["public"]["Enums"]["rol_responsable_asignatura"]; - usuario_id: string; - }; + asignatura_id: string + creado_en?: string + id?: string + rol?: Database["public"]["Enums"]["rol_responsable_asignatura"] + usuario_id: string + } Update: { - asignatura_id?: string; - creado_en?: string; - id?: string; - rol?: Database["public"]["Enums"]["rol_responsable_asignatura"]; - usuario_id?: string; - }; + asignatura_id?: string + creado_en?: string + id?: string + rol?: Database["public"]["Enums"]["rol_responsable_asignatura"] + usuario_id?: string + } Relationships: [ { - foreignKeyName: "responsables_asignatura_asignatura_id_fkey"; - columns: ["asignatura_id"]; - isOneToOne: false; - referencedRelation: "asignaturas"; - referencedColumns: ["id"]; + foreignKeyName: "responsables_asignatura_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "asignaturas" + referencedColumns: ["id"] }, { - foreignKeyName: "responsables_asignatura_asignatura_id_fkey"; - columns: ["asignatura_id"]; - isOneToOne: false; - referencedRelation: "plantilla_asignatura"; - referencedColumns: ["asignatura_id"]; + foreignKeyName: "responsables_asignatura_asignatura_id_fkey" + columns: ["asignatura_id"] + isOneToOne: false + referencedRelation: "plantilla_asignatura" + referencedColumns: ["asignatura_id"] }, { - foreignKeyName: "responsables_asignatura_usuario_id_fkey"; - columns: ["usuario_id"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "responsables_asignatura_usuario_id_fkey" + columns: ["usuario_id"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, - ]; - }; + ] + } roles: { Row: { - clave: string; - descripcion: string | null; - id: string; - nombre: string; - }; + clave: string + descripcion: string | null + id: string + nombre: string + } Insert: { - clave: string; - descripcion?: string | null; - id?: string; - nombre: string; - }; + clave: string + descripcion?: string | null + id?: string + nombre: string + } Update: { - clave?: string; - descripcion?: string | null; - id?: string; - nombre?: string; - }; - Relationships: []; - }; + clave?: string + descripcion?: string | null + id?: string + nombre?: string + } + Relationships: [] + } tareas_revision: { Row: { - asignado_a: string; - completado_en: string | null; - creado_en: string; - estado_id: string | null; - estatus: Database["public"]["Enums"]["estado_tarea_revision"]; - fecha_limite: string | null; - id: string; - plan_estudio_id: string; - rol_id: string | null; - }; + asignado_a: string + completado_en: string | null + creado_en: string + estado_id: string | null + estatus: Database["public"]["Enums"]["estado_tarea_revision"] + fecha_limite: string | null + id: string + plan_estudio_id: string + rol_id: string | null + } Insert: { - asignado_a: string; - completado_en?: string | null; - creado_en?: string; - estado_id?: string | null; - estatus?: Database["public"]["Enums"]["estado_tarea_revision"]; - fecha_limite?: string | null; - id?: string; - plan_estudio_id: string; - rol_id?: string | null; - }; + asignado_a: string + completado_en?: string | null + creado_en?: string + estado_id?: string | null + estatus?: Database["public"]["Enums"]["estado_tarea_revision"] + fecha_limite?: string | null + id?: string + plan_estudio_id: string + rol_id?: string | null + } Update: { - asignado_a?: string; - completado_en?: string | null; - creado_en?: string; - estado_id?: string | null; - estatus?: Database["public"]["Enums"]["estado_tarea_revision"]; - fecha_limite?: string | null; - id?: string; - plan_estudio_id?: string; - rol_id?: string | null; - }; + asignado_a?: string + completado_en?: string | null + creado_en?: string + estado_id?: string | null + estatus?: Database["public"]["Enums"]["estado_tarea_revision"] + fecha_limite?: string | null + id?: string + plan_estudio_id?: string + rol_id?: string | null + } Relationships: [ { - foreignKeyName: "tareas_revision_asignado_a_fkey"; - columns: ["asignado_a"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "tareas_revision_asignado_a_fkey" + columns: ["asignado_a"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, { - foreignKeyName: "tareas_revision_estado_id_fkey"; - columns: ["estado_id"]; - isOneToOne: false; - referencedRelation: "estados_plan"; - referencedColumns: ["id"]; + foreignKeyName: "tareas_revision_estado_id_fkey" + columns: ["estado_id"] + isOneToOne: false + referencedRelation: "estados_plan" + referencedColumns: ["id"] }, { - foreignKeyName: "tareas_revision_plan_estudio_id_fkey"; - columns: ["plan_estudio_id"]; - isOneToOne: false; - referencedRelation: "planes_estudio"; - referencedColumns: ["id"]; + foreignKeyName: "tareas_revision_plan_estudio_id_fkey" + columns: ["plan_estudio_id"] + isOneToOne: false + referencedRelation: "planes_estudio" + referencedColumns: ["id"] }, { - foreignKeyName: "tareas_revision_plan_estudio_id_fkey"; - columns: ["plan_estudio_id"]; - isOneToOne: false; - referencedRelation: "plantilla_plan"; - referencedColumns: ["plan_estudio_id"]; + foreignKeyName: "tareas_revision_plan_estudio_id_fkey" + columns: ["plan_estudio_id"] + isOneToOne: false + referencedRelation: "plantilla_plan" + referencedColumns: ["plan_estudio_id"] }, { - foreignKeyName: "tareas_revision_rol_id_fkey"; - columns: ["rol_id"]; - isOneToOne: false; - referencedRelation: "roles"; - referencedColumns: ["id"]; + foreignKeyName: "tareas_revision_rol_id_fkey" + columns: ["rol_id"] + isOneToOne: false + referencedRelation: "roles" + referencedColumns: ["id"] }, - ]; - }; + ] + } transiciones_estado_plan: { Row: { - creado_en: string; - desde_estado_id: string; - hacia_estado_id: string; - id: string; - rol_permitido_id: string; - }; + creado_en: string + desde_estado_id: string + hacia_estado_id: string + id: string + rol_permitido_id: string + } Insert: { - creado_en?: string; - desde_estado_id: string; - hacia_estado_id: string; - id?: string; - rol_permitido_id: string; - }; + creado_en?: string + desde_estado_id: string + hacia_estado_id: string + id?: string + rol_permitido_id: string + } Update: { - creado_en?: string; - desde_estado_id?: string; - hacia_estado_id?: string; - id?: string; - rol_permitido_id?: string; - }; + creado_en?: string + desde_estado_id?: string + hacia_estado_id?: string + id?: string + rol_permitido_id?: string + } Relationships: [ { - foreignKeyName: "transiciones_estado_plan_desde_estado_id_fkey"; - columns: ["desde_estado_id"]; - isOneToOne: false; - referencedRelation: "estados_plan"; - referencedColumns: ["id"]; + foreignKeyName: "transiciones_estado_plan_desde_estado_id_fkey" + columns: ["desde_estado_id"] + isOneToOne: false + referencedRelation: "estados_plan" + referencedColumns: ["id"] }, { - foreignKeyName: "transiciones_estado_plan_hacia_estado_id_fkey"; - columns: ["hacia_estado_id"]; - isOneToOne: false; - referencedRelation: "estados_plan"; - referencedColumns: ["id"]; + foreignKeyName: "transiciones_estado_plan_hacia_estado_id_fkey" + columns: ["hacia_estado_id"] + isOneToOne: false + referencedRelation: "estados_plan" + referencedColumns: ["id"] }, { - foreignKeyName: "transiciones_estado_plan_rol_permitido_id_fkey"; - columns: ["rol_permitido_id"]; - isOneToOne: false; - referencedRelation: "roles"; - referencedColumns: ["id"]; + foreignKeyName: "transiciones_estado_plan_rol_permitido_id_fkey" + columns: ["rol_permitido_id"] + isOneToOne: false + referencedRelation: "roles" + referencedColumns: ["id"] }, - ]; - }; + ] + } usuarios_app: { Row: { - actualizado_en: string; - creado_en: string; - email: string | null; - externo: boolean; - id: string; - nombre_completo: string | null; - }; + actualizado_en: string + creado_en: string + email: string | null + externo: boolean + id: string + nombre_completo: string | null + } Insert: { - actualizado_en?: string; - creado_en?: string; - email?: string | null; - externo?: boolean; - id: string; - nombre_completo?: string | null; - }; + actualizado_en?: string + creado_en?: string + email?: string | null + externo?: boolean + id: string + nombre_completo?: string | null + } Update: { - actualizado_en?: string; - creado_en?: string; - email?: string | null; - externo?: boolean; - id?: string; - nombre_completo?: string | null; - }; - Relationships: []; - }; + actualizado_en?: string + creado_en?: string + email?: string | null + externo?: boolean + id?: string + nombre_completo?: string | null + } + Relationships: [] + } usuarios_roles: { Row: { - carrera_id: string | null; - creado_en: string; - facultad_id: string | null; - id: string; - rol_id: string; - usuario_id: string; - }; + carrera_id: string | null + creado_en: string + facultad_id: string | null + id: string + rol_id: string + usuario_id: string + } Insert: { - carrera_id?: string | null; - creado_en?: string; - facultad_id?: string | null; - id?: string; - rol_id: string; - usuario_id: string; - }; + carrera_id?: string | null + creado_en?: string + facultad_id?: string | null + id?: string + rol_id: string + usuario_id: string + } Update: { - carrera_id?: string | null; - creado_en?: string; - facultad_id?: string | null; - id?: string; - rol_id?: string; - usuario_id?: string; - }; + carrera_id?: string | null + creado_en?: string + facultad_id?: string | null + id?: string + rol_id?: string + usuario_id?: string + } Relationships: [ { - foreignKeyName: "usuarios_roles_carrera_id_fkey"; - columns: ["carrera_id"]; - isOneToOne: false; - referencedRelation: "carreras"; - referencedColumns: ["id"]; + foreignKeyName: "usuarios_roles_carrera_id_fkey" + columns: ["carrera_id"] + isOneToOne: false + referencedRelation: "carreras" + referencedColumns: ["id"] }, { - foreignKeyName: "usuarios_roles_facultad_id_fkey"; - columns: ["facultad_id"]; - isOneToOne: false; - referencedRelation: "facultades"; - referencedColumns: ["id"]; + foreignKeyName: "usuarios_roles_facultad_id_fkey" + columns: ["facultad_id"] + isOneToOne: false + referencedRelation: "facultades" + referencedColumns: ["id"] }, { - foreignKeyName: "usuarios_roles_rol_id_fkey"; - columns: ["rol_id"]; - isOneToOne: false; - referencedRelation: "roles"; - referencedColumns: ["id"]; + foreignKeyName: "usuarios_roles_rol_id_fkey" + columns: ["rol_id"] + isOneToOne: false + referencedRelation: "roles" + referencedColumns: ["id"] }, { - foreignKeyName: "usuarios_roles_usuario_id_fkey"; - columns: ["usuario_id"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "usuarios_roles_usuario_id_fkey" + columns: ["usuario_id"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, - ]; - }; + ] + } vector_stores: { Row: { - creado_en: string; - creado_por: string | null; - id: string; - nombre: string; - openai_vector_id: string | null; - }; + creado_en: string + creado_por: string | null + id: string + nombre: string + openai_vector_id: string | null + } Insert: { - creado_en?: string; - creado_por?: string | null; - id?: string; - nombre: string; - openai_vector_id?: string | null; - }; + creado_en?: string + creado_por?: string | null + id?: string + nombre: string + openai_vector_id?: string | null + } Update: { - creado_en?: string; - creado_por?: string | null; - id?: string; - nombre?: string; - openai_vector_id?: string | null; - }; + creado_en?: string + creado_por?: string | null + id?: string + nombre?: string + openai_vector_id?: string | null + } Relationships: [ { - foreignKeyName: "vector_stores_creado_por_fkey"; - columns: ["creado_por"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - referencedColumns: ["id"]; + foreignKeyName: "vector_stores_creado_por_fkey" + columns: ["creado_por"] + isOneToOne: false + referencedRelation: "usuarios_app" + referencedColumns: ["id"] }, - ]; - }; - }; + ] + } + } Views: { plantilla_asignatura: { Row: { - asignatura_id: string | null; - estructura_id: string | null; - template_id: string | null; - }; - Relationships: []; - }; + asignatura_id: string | null + estructura_id: string | null + template_id: string | null + } + Relationships: [] + } plantilla_plan: { Row: { - estructura_id: string | null; - plan_estudio_id: string | null; - template_id: string | null; - }; - Relationships: []; - }; - }; + estructura_id: string | null + plan_estudio_id: string | null + template_id: string | null + } + Relationships: [] + } + } Functions: { append_conversacion_asignatura: { - Args: { p_append: Json; p_id: string }; - Returns: undefined; - }; + Args: { p_append: Json; p_id: string } + Returns: undefined + } append_conversacion_plan: { - Args: { p_append: Json; p_id: string }; - Returns: undefined; - }; - unaccent: { Args: { "": string }; Returns: string }; - unaccent_immutable: { Args: { "": string }; Returns: string }; - }; + Args: { p_append: Json; p_id: string } + Returns: undefined + } + unaccent: { Args: { "": string }; Returns: string } + unaccent_immutable: { Args: { "": string }; Returns: string } + } Enums: { - estado_asignatura: "borrador" | "revisada" | "aprobada" | "generando"; - estado_conversacion: "ACTIVA" | "ARCHIVANDO" | "ARCHIVADA" | "ERROR"; - estado_mensaje_ia: "PROCESANDO" | "COMPLETADO" | "ERROR"; - estado_tarea_revision: "PENDIENTE" | "COMPLETADA" | "OMITIDA"; - fuente_cambio: "HUMANO" | "IA"; + estado_asignatura: "borrador" | "revisada" | "aprobada" | "generando" + estado_conversacion: "ACTIVA" | "ARCHIVANDO" | "ARCHIVADA" | "ERROR" + estado_mensaje_ia: "PROCESANDO" | "COMPLETADO" | "ERROR" + estado_tarea_revision: "PENDIENTE" | "COMPLETADA" | "OMITIDA" + fuente_cambio: "HUMANO" | "IA" nivel_plan_estudio: | "Licenciatura" | "Maestría" | "Doctorado" | "Especialidad" | "Diplomado" - | "Otro"; + | "Otro" puesto_tipo: | "vicerrector" | "director_facultad" | "secretario_academico" | "jefe_carrera" | "profesor" - | "lci"; - rol_responsable_asignatura: - | "PROFESOR_RESPONSABLE" - | "COAUTOR" - | "REVISOR"; - tipo_asignatura: "OBLIGATORIA" | "OPTATIVA" | "TRONCAL" | "OTRA"; - tipo_bibliografia: "BASICA" | "COMPLEMENTARIA"; + | "lci" + rol_responsable_asignatura: "PROFESOR_RESPONSABLE" | "COAUTOR" | "REVISOR" + tipo_asignatura: "OBLIGATORIA" | "OPTATIVA" | "TRONCAL" | "OTRA" + tipo_bibliografia: "BASICA" | "COMPLEMENTARIA" tipo_cambio: | "ACTUALIZACION_CAMPO" | "ACTUALIZACION_MAPA" | "TRANSICION_ESTADO" | "OTRO" | "CREACION" - | "ACTUALIZACION"; - tipo_ciclo: "Semestre" | "Cuatrimestre" | "Trimestre" | "Otro"; - tipo_estructura_plan: "CURRICULAR" | "NO_CURRICULAR"; - tipo_fuente_bibliografia: "MANUAL" | "BIBLIOTECA"; - tipo_interaccion_ia: "GENERAR" | "MEJORAR_SECCION" | "CHAT" | "OTRA"; + | "ACTUALIZACION" + tipo_ciclo: "Semestre" | "Cuatrimestre" | "Trimestre" | "Otro" + tipo_estructura_plan: "CURRICULAR" | "NO_CURRICULAR" + tipo_fuente_bibliografia: "MANUAL" | "BIBLIOTECA" + tipo_interaccion_ia: "GENERAR" | "MEJORAR_SECCION" | "CHAT" | "OTRA" tipo_notificacion: | "PLAN_ASIGNADO" | "ESTADO_CAMBIADO" | "TAREA_ASIGNADA" | "COMENTARIO" - | "OTRA"; + | "OTRA" tipo_origen: | "MANUAL" | "IA" | "CLONADO_INTERNO" | "CLONADO_TRADICIONAL" - | "OTRO"; - }; + | "OTRO" + } CompositeTypes: { - [_ in never]: never; - }; - }; -}; + [_ in never]: never + } + } +} -type DatabaseWithoutInternals = Omit; +type DatabaseWithoutInternals = Omit -type DefaultSchema = - DatabaseWithoutInternals[Extract]; +type DefaultSchema = DatabaseWithoutInternals[Extract] export type Tables< DefaultSchemaTableNameOrOptions extends | keyof (DefaultSchema["Tables"] & DefaultSchema["Views"]) | { schema: keyof DatabaseWithoutInternals }, TableName extends DefaultSchemaTableNameOrOptions extends { - schema: keyof DatabaseWithoutInternals; - } ? keyof ( - & DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ - "Tables" - ] - & DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ - "Views" - ] - ) + schema: keyof DatabaseWithoutInternals + } + ? keyof (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] & + DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Views"]) : never = never, > = DefaultSchemaTableNameOrOptions extends { - schema: keyof DatabaseWithoutInternals; -} ? ( - & DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ - "Tables" - ] - & DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ - "Views" - ] - )[TableName] extends { - Row: infer R; - } ? R - : never - : DefaultSchemaTableNameOrOptions extends keyof ( - & DefaultSchema["Tables"] - & DefaultSchema["Views"] - ) ? ( - & DefaultSchema["Tables"] - & DefaultSchema["Views"] - )[DefaultSchemaTableNameOrOptions] extends { - Row: infer R; - } ? R + schema: keyof DatabaseWithoutInternals +} + ? (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] & + DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Views"])[TableName] extends { + Row: infer R + } + ? R + : never + : DefaultSchemaTableNameOrOptions extends keyof (DefaultSchema["Tables"] & + DefaultSchema["Views"]) + ? (DefaultSchema["Tables"] & + DefaultSchema["Views"])[DefaultSchemaTableNameOrOptions] extends { + Row: infer R + } + ? R + : never : never - : never; export type TablesInsert< DefaultSchemaTableNameOrOptions extends | keyof DefaultSchema["Tables"] | { schema: keyof DatabaseWithoutInternals }, TableName extends DefaultSchemaTableNameOrOptions extends { - schema: keyof DatabaseWithoutInternals; - } ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ - "Tables" - ] + schema: keyof DatabaseWithoutInternals + } + ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] : never = never, > = DefaultSchemaTableNameOrOptions extends { - schema: keyof DatabaseWithoutInternals; -} ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ - "Tables" - ][TableName] extends { - Insert: infer I; - } ? I - : never + schema: keyof DatabaseWithoutInternals +} + ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends { + Insert: infer I + } + ? I + : never : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"] ? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends { - Insert: infer I; - } ? I + Insert: infer I + } + ? I + : never : never - : never; export type TablesUpdate< DefaultSchemaTableNameOrOptions extends | keyof DefaultSchema["Tables"] | { schema: keyof DatabaseWithoutInternals }, TableName extends DefaultSchemaTableNameOrOptions extends { - schema: keyof DatabaseWithoutInternals; - } ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ - "Tables" - ] + schema: keyof DatabaseWithoutInternals + } + ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] : never = never, > = DefaultSchemaTableNameOrOptions extends { - schema: keyof DatabaseWithoutInternals; -} ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]][ - "Tables" - ][TableName] extends { - Update: infer U; - } ? U - : never + schema: keyof DatabaseWithoutInternals +} + ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends { + Update: infer U + } + ? U + : never : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"] ? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends { - Update: infer U; - } ? U + Update: infer U + } + ? U + : never : never - : never; export type Enums< DefaultSchemaEnumNameOrOptions extends | keyof DefaultSchema["Enums"] | { schema: keyof DatabaseWithoutInternals }, EnumName extends DefaultSchemaEnumNameOrOptions extends { - schema: keyof DatabaseWithoutInternals; - } ? keyof DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]][ - "Enums" - ] + schema: keyof DatabaseWithoutInternals + } + ? keyof DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"] : never = never, > = DefaultSchemaEnumNameOrOptions extends { - schema: keyof DatabaseWithoutInternals; -} ? DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"][ - EnumName - ] + schema: keyof DatabaseWithoutInternals +} + ? DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"][EnumName] : DefaultSchemaEnumNameOrOptions extends keyof DefaultSchema["Enums"] ? DefaultSchema["Enums"][DefaultSchemaEnumNameOrOptions] - : never; + : never export type CompositeTypes< PublicCompositeTypeNameOrOptions extends | keyof DefaultSchema["CompositeTypes"] | { schema: keyof DatabaseWithoutInternals }, CompositeTypeName extends PublicCompositeTypeNameOrOptions extends { - schema: keyof DatabaseWithoutInternals; - } ? keyof DatabaseWithoutInternals[ - PublicCompositeTypeNameOrOptions["schema"] - ]["CompositeTypes"] + schema: keyof DatabaseWithoutInternals + } + ? keyof DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"] : never = never, > = PublicCompositeTypeNameOrOptions extends { - schema: keyof DatabaseWithoutInternals; -} ? DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]][ - "CompositeTypes" - ][CompositeTypeName] - : PublicCompositeTypeNameOrOptions extends - keyof DefaultSchema["CompositeTypes"] + schema: keyof DatabaseWithoutInternals +} + ? DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"][CompositeTypeName] + : PublicCompositeTypeNameOrOptions extends keyof DefaultSchema["CompositeTypes"] ? DefaultSchema["CompositeTypes"][PublicCompositeTypeNameOrOptions] - : never; + : never export const Constants = { graphql_public: { @@ -1629,4 +1608,5 @@ export const Constants = { ], }, }, -} as const; +} as const + From 6a7550a0d5f44a2ec8081c10cd7fdda11ba1a20c Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 21:51:55 +0000 Subject: [PATCH 37/38] Actualizar .gitea/workflows/production.yaml --- .gitea/workflows/production.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/production.yaml b/.gitea/workflows/production.yaml index 6070554..613e2a4 100644 --- a/.gitea/workflows/production.yaml +++ b/.gitea/workflows/production.yaml @@ -5,7 +5,7 @@ on: branches: - main paths: - - 'supabase/migrations/**' + - 'supabase/**' workflow_dispatch: jobs: From b628adc99a1a96a3404c3de47ae78b38176c7227 Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 10 Mar 2026 21:52:06 +0000 Subject: [PATCH 38/38] Actualizar .gitea/workflows/deploy-functions.yaml --- .gitea/workflows/deploy-functions.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/deploy-functions.yaml b/.gitea/workflows/deploy-functions.yaml index 9292468..b759c08 100644 --- a/.gitea/workflows/deploy-functions.yaml +++ b/.gitea/workflows/deploy-functions.yaml @@ -5,7 +5,7 @@ on: branches: - main paths: - - 'supabase/functions/**' + - 'supabase/**' workflow_dispatch: jobs: