From 1acb18711ff5fbd7cf86b2e92e44b2b64b26eae0 Mon Sep 17 00:00:00 2001 From: Guillermo Arrieta Medina Date: Tue, 3 Feb 2026 15:10:09 -0600 Subject: [PATCH] =?UTF-8?q?Reintegraci=C3=B3n=20con=20main.=20Correcci?= =?UTF-8?q?=C3=B3n=20de=20errores=20de=20fetch.=20Sincronizaci=C3=B3n=20co?= =?UTF-8?q?n=20la=20base=20de=20datos=20remota?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/data/api/plans.api.ts | 2 +- src/data/api/subjects.api.ts | 20 +- .../$planId/_detalle/asignaturas/index.tsx | 34 +- .../$planId/asignaturas/$asignaturaId.tsx | 4 +- src/types/supabase.ts | 2079 +++++++++-------- 5 files changed, 1086 insertions(+), 1053 deletions(-) diff --git a/src/data/api/plans.api.ts b/src/data/api/plans.api.ts index ff40312..206f25c 100644 --- a/src/data/api/plans.api.ts +++ b/src/data/api/plans.api.ts @@ -165,7 +165,7 @@ export async function plan_asignaturas_list( const { data, error } = await supabase .from('asignaturas') .select( - 'id,plan_estudio_id,estructura_id,facultad_propietaria_id,codigo,nombre,tipo,creditos,horas_semana,numero_ciclo,linea_plan_id,orden_celda,datos,contenido_tematico,tipo_origen,meta_origen,creado_por,actualizado_por,creado_en,actualizado_en', + 'id,plan_estudio_id,estructura_id,codigo,nombre,tipo,creditos,horas_independientes,horas_academicas,numero_ciclo,linea_plan_id,orden_celda,datos,contenido_tematico,tipo_origen,meta_origen,creado_por,actualizado_por,creado_en,actualizado_en', ) .eq('plan_estudio_id', planId) .order('numero_ciclo', { ascending: true, nullsFirst: false }) diff --git a/src/data/api/subjects.api.ts b/src/data/api/subjects.api.ts index cfd6a67..3754ef6 100644 --- a/src/data/api/subjects.api.ts +++ b/src/data/api/subjects.api.ts @@ -1,6 +1,9 @@ import { supabaseBrowser } from '../supabase/client' import { invokeEdge } from '../supabase/invokeEdge' + import { throwIfError, requireData } from './_helpers' + +import type { DocumentoResult } from './plans.api' import type { Asignatura, BibliografiaAsignatura, @@ -8,7 +11,6 @@ import type { TipoAsignatura, UUID, } from '../types/domain' -import type { DocumentoResult } from './plans.api' const EDGE = { subjects_create_manual: 'subjects_create_manual', @@ -32,7 +34,7 @@ export async function subjects_get(subjectId: UUID): Promise { .from('asignaturas') .select( ` - id,plan_estudio_id,estructura_id,facultad_propietaria_id,codigo,nombre,tipo,creditos,horas_semana,numero_ciclo,linea_plan_id,orden_celda,datos,contenido_tematico,tipo_origen,meta_origen,creado_por,actualizado_por,creado_en,actualizado_en, + id,plan_estudio_id,estructura_id,codigo,nombre,tipo,creditos,horas_independientes,horas_academicas,numero_ciclo,linea_plan_id,orden_celda,datos,contenido_tematico,tipo_origen,meta_origen,creado_por,actualizado_por,creado_en,actualizado_en, planes_estudio( id,carrera_id,estructura_id,nombre,nivel,tipo_ciclo,numero_ciclos,datos,estado_actual_id,activo,tipo_origen,meta_origen,creado_por,actualizado_por,creado_en,actualizado_en, carreras(id,facultad_id,nombre,nombre_corto,clave_sep,activa, facultades(id,nombre,nombre_corto,color,icono)) @@ -49,7 +51,7 @@ export async function subjects_get(subjectId: UUID): Promise { export async function subjects_history( subjectId: UUID, -): Promise { +): Promise> { const supabase = supabaseBrowser() const { data, error } = await supabase .from('cambios_asignatura') @@ -65,7 +67,7 @@ export async function subjects_history( export async function subjects_bibliografia_list( subjectId: UUID, -): Promise { +): Promise> { const supabase = supabaseBrowser() const { data, error } = await supabase .from('bibliografia_asignatura') @@ -112,9 +114,9 @@ export async function ai_generate_subject(payload: { iaConfig: { descripcionEnfoque: string notasAdicionales?: string - archivosExistentesIds?: UUID[] - repositoriosIds?: UUID[] - archivosAdhocIds?: UUID[] + archivosExistentesIds?: Array + repositoriosIds?: Array + archivosAdhocIds?: Array usarMCP?: boolean } }): Promise { @@ -145,7 +147,7 @@ export async function subjects_clone_from_existing(payload: { export async function subjects_import_from_file(payload: { planId: UUID archivoWordAsignaturaId: UUID - archivosAdicionalesIds?: UUID[] + archivosAdicionalesIds?: Array }): Promise { return invokeEdge(EDGE.subjects_import_from_file, payload) } @@ -175,7 +177,7 @@ export async function subjects_update_fields( export async function subjects_update_contenido( subjectId: UUID, - unidades: any[], + unidades: Array, ): Promise { return invokeEdge(EDGE.subjects_update_contenido, { subjectId, diff --git a/src/routes/planes/$planId/_detalle/asignaturas/index.tsx b/src/routes/planes/$planId/_detalle/asignaturas/index.tsx index d2fbc59..4e9aade 100644 --- a/src/routes/planes/$planId/_detalle/asignaturas/index.tsx +++ b/src/routes/planes/$planId/_detalle/asignaturas/index.tsx @@ -10,7 +10,7 @@ import { } from 'lucide-react' import { useState, useMemo } from 'react' -import type { Asignatura } from '@/types/plan' +import type { Asignatura, AsignaturaStatus, TipoAsignatura } from '@/types/plan' import { Badge } from '@/components/ui/badge' import { Button } from '@/components/ui/button' @@ -33,17 +33,24 @@ import { import { usePlanAsignaturas, usePlanLineas } from '@/data' // --- Configuración de Estilos --- -const statusConfig: Record = { +const statusConfig: Record< + AsignaturaStatus, + { label: string; className: string } +> = { borrador: { label: 'Borrador', className: 'bg-slate-100 text-slate-600' }, revisada: { label: 'Revisada', className: 'bg-amber-100 text-amber-700' }, aprobada: { label: 'Aprobada', className: 'bg-emerald-100 text-emerald-700' }, } -const tipoConfig: Record = { - obligatoria: { label: 'Obligatoria', className: 'bg-blue-100 text-blue-700' }, - optativa: { label: 'Optativa', className: 'bg-purple-100 text-purple-700' }, - troncal: { label: 'Troncal', className: 'bg-slate-100 text-slate-700' }, -} +const tipoConfig: Record = + { + obligatoria: { + label: 'Obligatoria', + className: 'bg-blue-100 text-blue-700', + }, + optativa: { label: 'Optativa', className: 'bg-purple-100 text-purple-700' }, + troncal: { label: 'Troncal', className: 'bg-slate-100 text-slate-700' }, + } // --- Mapeadores de API --- const mapAsignaturas = (asigApi: Array = []): Array => { @@ -59,10 +66,13 @@ const mapAsignaturas = (asigApi: Array = []): Array => { estado: 'borrador', // O el campo que venga de tu API hd: Math.floor((asig.horas_semana ?? 0) / 2), hi: Math.ceil((asig.horas_semana ?? 0) / 2), + prerrequisitos: Array.isArray(asig.prerrequisitos) + ? asig.prerrequisitos + : [], })) } -export const Route = createFileRoute('/planes/$planId/_detalle/asignaturas')({ +export const Route = createFileRoute('/planes/$planId/_detalle/asignaturas/')({ component: AsignaturasPage, }) @@ -272,17 +282,17 @@ function AsignaturasPage() { - {tipoConfig[asignatura.tipo]?.label} + {tipoConfig[asignatura.tipo].label} - {statusConfig[asignatura.estado]?.label} + {statusConfig[asignatura.estado].label} diff --git a/src/routes/planes/$planId/asignaturas/$asignaturaId.tsx b/src/routes/planes/$planId/asignaturas/$asignaturaId.tsx index 6a9a5d6..bfa039d 100644 --- a/src/routes/planes/$planId/asignaturas/$asignaturaId.tsx +++ b/src/routes/planes/$planId/asignaturas/$asignaturaId.tsx @@ -1,6 +1,6 @@ import { createFileRoute, notFound } from '@tanstack/react-router' -import MateriaDetailPage from '@/components/asignaturas/detalle/MateriaDetailPage' +import AsignaturaDetailPage from '@/components/asignaturas/detalle/AsignaturaDetailPage' import { NotFoundPage } from '@/components/ui/NotFoundPage' import { subjects_get } from '@/data/api/subjects.api' import { qk } from '@/data/query/keys' @@ -38,7 +38,7 @@ function RouteComponent() { return (
- +
) } diff --git a/src/types/supabase.ts b/src/types/supabase.ts index 5a68cce..48e2cc9 100644 --- a/src/types/supabase.ts +++ b/src/types/supabase.ts @@ -4,1234 +4,1253 @@ export type Json = | boolean | null | { [key: string]: Json | undefined } - | Array; + | Array export type Database = { // Allows to automatically instantiate createClient with right options // instead of createClient(URL, KEY) __InternalSupabase: { - PostgrestVersion: "12.2.3 (519615d)"; - }; + PostgrestVersion: '12.2.3 (519615d)' + } 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'] }, - ]; - }; + ] + } asignaturas: { Row: { - actualizado_en: string; - actualizado_por: string | null; - codigo: string | null; - contenido_tematico: Json; - creado_en: string; - creado_por: string | null; - creditos: number; - datos: Json; - estructura_id: string | null; - facultad_propietaria_id: string | null; - horas_semana: 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 + datos: Json + 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; - codigo?: string | null; - contenido_tematico?: Json; - creado_en?: string; - creado_por?: string | null; - creditos: number; - datos?: Json; - estructura_id?: string | null; - facultad_propietaria_id?: string | null; - horas_semana?: 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 + datos?: Json + 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; - codigo?: string | null; - contenido_tematico?: Json; - creado_en?: string; - creado_por?: string | null; - creditos?: number; - datos?: Json; - estructura_id?: string | null; - facultad_propietaria_id?: string | null; - horas_semana?: 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 + datos?: Json + 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_facultad_propietaria_id_fkey"; - columns: ["facultad_propietaria_id"]; - isOneToOne: false; - referencedRelation: "facultades"; - referencedColumns: ["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'] }, - ]; - }; + ] + } 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_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_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; - interaccion_ia_id: string | null; - plan_estudio_id: string; - 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; - interaccion_ia_id?: string | null; - plan_estudio_id: string; - 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; - interaccion_ia_id?: string | null; - plan_estudio_id?: string; - 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'] }, - { - foreignKeyName: "cambios_plan_plan_estudio_id_fkey"; - columns: ["plan_estudio_id"]; - isOneToOne: false; - referencedRelation: "planes_estudio"; - 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'] }, - ]; - }; + ] + } 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; - version: string | null; - }; + actualizado_en: string + creado_en: string + definicion: Json + id: string + nombre: string + version: string | null + } Insert: { - actualizado_en?: string; - creado_en?: string; - definicion?: Json; - id?: string; - nombre: string; - version?: string | null; - }; + actualizado_en?: string + creado_en?: string + definicion?: Json + id?: string + nombre: string + version?: string | null + } Update: { - actualizado_en?: string; - creado_en?: string; - definicion?: Json; - id?: string; - nombre?: string; - version?: string | null; - }; - Relationships: []; - }; + actualizado_en?: string + creado_en?: string + definicion?: Json + id?: string + nombre?: string + version?: string | 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_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_usuario_id_fkey"; - columns: ["usuario_id"]; - isOneToOne: false; - referencedRelation: "usuarios_app"; - 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; - }; + 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'] + }, + ] + } 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'] }, - ]; - }; + ] + } 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; - 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 + conversation_id: string | null + 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; - 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 + conversation_id?: string | null + 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; - 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 + conversation_id?: string | null + 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'] + }, + ] + } 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_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_rol_id_fkey"; - columns: ["rol_id"]; - isOneToOne: false; - referencedRelation: "roles"; - 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; - }; + 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: { - [_ in never]: never; - }; + plantilla_plan: { + Row: { + estructura_id: string | null + plan_estudio_id: string | null + template_id: string | null + } + Relationships: [] + } + } Functions: { - unaccent: { Args: { "": string }; Returns: string }; - unaccent_immutable: { Args: { "": string }; Returns: string }; - }; + unaccent: { Args: { '': string }; Returns: string } + unaccent_immutable: { Args: { '': string }; Returns: string } + } Enums: { - estado_tarea_revision: "PENDIENTE" | "COMPLETADA" | "OMITIDA"; - fuente_cambio: "HUMANO" | "IA"; + estado_tarea_revision: 'PENDIENTE' | 'COMPLETADA' | 'OMITIDA' + fuente_cambio: 'HUMANO' | 'IA' nivel_plan_estudio: - | "Licenciatura" - | "Maestría" - | "Doctorado" - | "Especialidad" - | "Diplomado" - | "Otro"; + | '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"; + | '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"; - 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_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"; + | 'PLAN_ASIGNADO' + | 'ESTADO_CAMBIADO' + | 'TAREA_ASIGNADA' + | 'COMENTARIO' + | 'OTRA' tipo_origen: - | "MANUAL" - | "IA" - | "CLONADO_INTERNO" - | "CLONADO_TRADICIONAL" - | "OTRO"; - }; + | 'MANUAL' + | 'IA' + | 'CLONADO_INTERNO' + | 'CLONADO_TRADICIONAL' + | '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"]) + | 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"] + | 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 - : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"] - ? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends { - Insert: infer I; - } ? I + 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 - : never; export type TablesUpdate< DefaultSchemaTableNameOrOptions extends - | keyof DefaultSchema["Tables"] + | 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 - : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"] - ? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends { - Update: infer U; - } ? U + 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 - : never; export type Enums< DefaultSchemaEnumNameOrOptions extends - | keyof DefaultSchema["Enums"] + | 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 - ] - : DefaultSchemaEnumNameOrOptions extends keyof DefaultSchema["Enums"] - ? DefaultSchema["Enums"][DefaultSchemaEnumNameOrOptions] - : never; + 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"] + | 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"] - ? DefaultSchema["CompositeTypes"][PublicCompositeTypeNameOrOptions] - : never; + schema: keyof DatabaseWithoutInternals +} + ? DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions['schema']]['CompositeTypes'][CompositeTypeName] + : PublicCompositeTypeNameOrOptions extends keyof DefaultSchema['CompositeTypes'] + ? DefaultSchema['CompositeTypes'][PublicCompositeTypeNameOrOptions] + : never export const Constants = { graphql_public: { @@ -1239,55 +1258,57 @@ export const Constants = { }, public: { Enums: { - estado_tarea_revision: ["PENDIENTE", "COMPLETADA", "OMITIDA"], - fuente_cambio: ["HUMANO", "IA"], + estado_tarea_revision: ['PENDIENTE', 'COMPLETADA', 'OMITIDA'], + fuente_cambio: ['HUMANO', 'IA'], nivel_plan_estudio: [ - "Licenciatura", - "Maestría", - "Doctorado", - "Especialidad", - "Diplomado", - "Otro", + 'Licenciatura', + 'Maestría', + 'Doctorado', + 'Especialidad', + 'Diplomado', + 'Otro', ], puesto_tipo: [ - "vicerrector", - "director_facultad", - "secretario_academico", - "jefe_carrera", - "profesor", - "lci", + 'vicerrector', + 'director_facultad', + 'secretario_academico', + 'jefe_carrera', + 'profesor', + 'lci', ], rol_responsable_asignatura: [ - "PROFESOR_RESPONSABLE", - "COAUTOR", - "REVISOR", + 'PROFESOR_RESPONSABLE', + 'COAUTOR', + 'REVISOR', ], - tipo_asignatura: ["OBLIGATORIA", "OPTATIVA", "TRONCAL", "OTRA"], - tipo_bibliografia: ["BASICA", "COMPLEMENTARIA"], + tipo_asignatura: ['OBLIGATORIA', 'OPTATIVA', 'TRONCAL', 'OTRA'], + tipo_bibliografia: ['BASICA', 'COMPLEMENTARIA'], tipo_cambio: [ - "ACTUALIZACION_CAMPO", - "ACTUALIZACION_MAPA", - "TRANSICION_ESTADO", - "OTRO", + '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_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", + 'PLAN_ASIGNADO', + 'ESTADO_CAMBIADO', + 'TAREA_ASIGNADA', + 'COMENTARIO', + 'OTRA', ], tipo_origen: [ - "MANUAL", - "IA", - "CLONADO_INTERNO", - "CLONADO_TRADICIONAL", - "OTRO", + 'MANUAL', + 'IA', + 'CLONADO_INTERNO', + 'CLONADO_TRADICIONAL', + 'OTRO', ], }, }, -} as const; +} as const