diff --git a/scripts/update-types.ts b/scripts/update-types.ts index 2124f6a..30ad115 100644 --- a/scripts/update-types.ts +++ b/scripts/update-types.ts @@ -1,6 +1,7 @@ // scripts/update-types.ts -// Uso: -// bun run scripts/update-types.ts +/* Uso: +bun run scripts/update-types.ts +*/ import { $ } from "bun"; console.log("🔄 Generando tipos de Supabase..."); diff --git a/src/components/planes/wizard/PasoBasicosForm/PasoBasicosForm.tsx b/src/components/planes/wizard/PasoBasicosForm/PasoBasicosForm.tsx index 49059b5..f17fa32 100644 --- a/src/components/planes/wizard/PasoBasicosForm/PasoBasicosForm.tsx +++ b/src/components/planes/wizard/PasoBasicosForm/PasoBasicosForm.tsx @@ -1,7 +1,9 @@ -import { TemplateSelectorCard } from './TemplateSelectorCard' - -import type { NivelPlanEstudio, TipoCiclo } from '@/data/types/domain' -import type { CARRERAS } from '@/features/planes/nuevo/catalogs' +import type { + EstructuraPlanRow, + FacultadRow, + NivelPlanEstudio, + TipoCiclo, +} from '@/data/types/domain' import type { NewPlanWizardState } from '@/features/planes/nuevo/types' import { Input } from '@/components/ui/input' @@ -13,31 +15,23 @@ import { SelectTrigger, SelectValue, } from '@/components/ui/select' -import { Separator } from '@/components/ui/separator' import { useCatalogosPlanes } from '@/data/hooks/usePlans' -import { - FACULTADES, - NIVELES, - TIPOS_CICLO, - PLANTILLAS_ANEXO_1, - PLANTILLAS_ANEXO_2, -} from '@/features/planes/nuevo/catalogs' +import { NIVELES, TIPOS_CICLO } from '@/features/planes/nuevo/catalogs' import { cn } from '@/lib/utils' export function PasoBasicosForm({ wizard, onChange, - carrerasFiltradas, }: { wizard: NewPlanWizardState onChange: React.Dispatch> - carrerasFiltradas: typeof CARRERAS }) { const { data: catalogos } = useCatalogosPlanes() // Preferir los catálogos remotos si están disponibles; si no, usar los locales - const facultadesList = catalogos?.facultades ?? FACULTADES - const rawCarreras = catalogos?.carreras ?? carrerasFiltradas + const facultadesList = catalogos?.facultades ?? [] + const rawCarreras = catalogos?.carreras ?? [] + const estructurasPlanList = catalogos?.estructurasPlan ?? [] const filteredCarreras = rawCarreras.filter((c: any) => { const facId = wizard.datosBasicos.facultadId @@ -57,10 +51,15 @@ export function PasoBasicosForm({ placeholder="Ej. Ingeniería en Sistemas (2026)" value={wizard.datosBasicos.nombrePlan} onChange={(e: React.ChangeEvent) => - onChange((w) => ({ - ...w, - datosBasicos: { ...w.datosBasicos, nombrePlan: e.target.value }, - })) + onChange( + (w): NewPlanWizardState => ({ + ...w, + datosBasicos: { + ...w.datosBasicos, + nombrePlan: e.target.value, + }, + }), + ) } className="placeholder:text-muted-foreground/70 font-medium not-italic placeholder:font-normal placeholder:italic" /> @@ -71,14 +70,16 @@ export function PasoBasicosForm({ - onChange((w) => ({ - ...w, - datosBasicos: { ...w.datosBasicos, carreraId: value }, - })) + onChange( + (w): NewPlanWizardState => ({ + ...w, + datosBasicos: { ...w.datosBasicos, carreraId: value }, + }), + ) } disabled={!wizard.datosBasicos.facultadId} > @@ -174,13 +177,15 @@ export function PasoBasicosForm({ + onChange( + (w): NewPlanWizardState => ({ + ...w, + datosBasicos: { + ...w.datosBasicos, + estructuraPlanId: value, + }, + }), + ) + } + > + span]:block! [&>span]:truncate!', + !wizard.datosBasicos.estructuraPlanId + ? 'text-muted-foreground font-normal italic opacity-70' // Es Placeholder + : 'font-medium not-italic', // Tiene Valor (Medium) + )} + > + + + + {estructurasPlanList.map((t: EstructuraPlanRow) => ( + + {t.nombre} + + ))} + + + - + {/*
-
+ */} ) } diff --git a/src/components/planes/wizard/PasoDetallesPanel/FileDropZone.tsx b/src/components/planes/wizard/PasoDetallesPanel/FileDropZone.tsx index 65b9d83..2e70ae1 100644 --- a/src/components/planes/wizard/PasoDetallesPanel/FileDropZone.tsx +++ b/src/components/planes/wizard/PasoDetallesPanel/FileDropZone.tsx @@ -2,13 +2,13 @@ import { Upload, File, X, FileText } from 'lucide-react' import { useState, useCallback, useEffect, useRef } from 'react' import { Button } from '@/components/ui/button' +import { formatFileSize } from '@/features/planes/utils/format-file-size' import { cn } from '@/lib/utils' -interface UploadedFile { - id: string - name: string - size: string - type: string +export interface UploadedFile { + id: string // Necesario para React (key) + file: File // La fuente de verdad (contiene name, size, type) + preview?: string // Opcional: si fueran imágenes } interface FileDropzoneProps { @@ -37,9 +37,7 @@ export function FileDropzone({ typeof crypto !== 'undefined' && 'randomUUID' in crypto ? (crypto as any).randomUUID() : `file-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`, - name: file.name, - size: formatFileSize(file.size), - type: file.name.split('.').pop() || 'file', + file, })) setFiles((prev) => { const room = Math.max(0, maxFiles - prev.length) @@ -97,12 +95,6 @@ export function FileDropzone({ if (onFilesChangeRef.current) onFilesChangeRef.current(files) }, [files]) - const formatFileSize = (bytes: number): string => { - if (bytes < 1024) return bytes + ' B' - if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + ' KB' - return (bytes / (1024 * 1024)).toFixed(1) + ' MB' - } - const getFileIcon = (type: string) => { switch (type.toLowerCase()) { case 'pdf': @@ -170,23 +162,25 @@ export function FileDropzone({ {/* Uploaded files list */} {files.length > 0 && (
- {files.map((file) => ( + {files.map((item) => (
- {getFileIcon(file.type)} + {getFileIcon(item.file.type)}

- {file.name} + {item.file.name} +

+

+ {formatFileSize(item.file.size)}

-

{file.size}

diff --git a/src/components/planes/wizard/PasoDetallesPanel/PasoDetallesPanel.tsx b/src/components/planes/wizard/PasoDetallesPanel/PasoDetallesPanel.tsx index 0d3c7f5..b538938 100644 --- a/src/components/planes/wizard/PasoDetallesPanel/PasoDetallesPanel.tsx +++ b/src/components/planes/wizard/PasoDetallesPanel/PasoDetallesPanel.tsx @@ -1,6 +1,7 @@ import { FileDropzone } from './FileDropZone' import ReferenciasParaIA from './ReferenciasParaIA' +import type { UploadedFile } from './FileDropZone' import type { NewPlanWizardState } from '@/features/planes/nuevo/types' import { Button } from '@/components/ui/button' @@ -116,14 +117,16 @@ export function PasoDetallesPanel({ } }) } - onFilesChange={(files) => - onChange((w) => ({ - ...w, - iaConfig: { - ...(w.iaConfig || ({} as any)), - archivosAdjuntos: files, - }, - })) + onFilesChange={(files: Array) => + onChange( + (w): NewPlanWizardState => ({ + ...w, + iaConfig: { + ...(w.iaConfig || ({} as any)), + archivosAdjuntos: files, + }, + }), + ) } />
diff --git a/src/components/planes/wizard/PasoDetallesPanel/ReferenciasParaIA.tsx b/src/components/planes/wizard/PasoDetallesPanel/ReferenciasParaIA.tsx index 3a68bbe..528e32f 100644 --- a/src/components/planes/wizard/PasoDetallesPanel/ReferenciasParaIA.tsx +++ b/src/components/planes/wizard/PasoDetallesPanel/ReferenciasParaIA.tsx @@ -5,6 +5,8 @@ import BarraBusqueda from '../../BarraBusqueda' import { FileDropzone } from './FileDropZone' +import type { UploadedFile } from './FileDropZone' + import { Checkbox } from '@/components/ui/checkbox' import { Label } from '@/components/ui/label' import { @@ -27,9 +29,7 @@ const ReferenciasParaIA = ({ selectedRepositorioIds?: Array onToggleArchivo?: (id: string, checked: boolean) => void onToggleRepositorio?: (id: string, checked: boolean) => void - onFilesChange?: ( - files: Array<{ id: string; name: string; size: string; type: string }>, - ) => void + onFilesChange?: (files: Array) => void }) => { const [busquedaArchivos, setBusquedaArchivos] = useState('') const [busquedaRepositorios, setBusquedaRepositorios] = useState('') diff --git a/src/components/planes/wizard/PasoResumenCard.tsx b/src/components/planes/wizard/PasoResumenCard.tsx index cc01586..cf4cc47 100644 --- a/src/components/planes/wizard/PasoResumenCard.tsx +++ b/src/components/planes/wizard/PasoResumenCard.tsx @@ -8,12 +8,11 @@ import { CardTitle, } from '@/components/ui/card' import { - PLANTILLAS_ANEXO_1, - PLANTILLAS_ANEXO_2, PLANES_EXISTENTES, ARCHIVOS, REPOSITORIOS, } from '@/features/planes/nuevo/catalogs' +import { formatFileSize } from '@/features/planes/utils/format-file-size' export function PasoResumenCard({ wizard }: { wizard: NewPlanWizardState }) { return ( @@ -32,12 +31,6 @@ export function PasoResumenCard({ wizard }: { wizard: NewPlanWizardState }) { const repositoriosRef = wizard.iaConfig?.repositoriosReferencia ?? [] const adjuntos = wizard.iaConfig?.archivosAdjuntos ?? [] - const plantillaPlan = PLANTILLAS_ANEXO_1.find( - (x) => x.id === wizard.datosBasicos.plantillaPlanId, - ) - const plantillaMapa = PLANTILLAS_ANEXO_2.find( - (x) => x.id === wizard.datosBasicos.plantillaMapaId, - ) const contenido = ( <>
@@ -68,89 +61,56 @@ export function PasoResumenCard({ wizard }: { wizard: NewPlanWizardState }) { {wizard.datosBasicos.tipoCiclo})
-
- - Plantilla plan:{' '} - - - {(plantillaPlan?.name || - wizard.datosBasicos.plantillaPlanId || - '—') + - ' · ' + - (wizard.datosBasicos.plantillaPlanVersion || '—')} - -
-
- - Mapa curricular:{' '} - - - {(plantillaMapa?.name || - wizard.datosBasicos.plantillaMapaId || - '—') + - ' · ' + - (wizard.datosBasicos.plantillaMapaVersion || '—')} - -
Modo: - {wizard.modoCreacion === 'MANUAL' && 'Manual'} - {wizard.modoCreacion === 'IA' && 'Generado con IA'} - {wizard.modoCreacion === 'CLONADO' && - wizard.subModoClonado === 'INTERNO' && + {wizard.tipoOrigen === 'MANUAL' && 'Manual'} + {wizard.tipoOrigen === 'IA' && 'Generado con IA'} + {wizard.tipoOrigen === 'CLONADO_INTERNO' && 'Clonado desde plan del sistema'} - {wizard.modoCreacion === 'CLONADO' && - wizard.subModoClonado === 'TRADICIONAL' && + {wizard.tipoOrigen === 'CLONADO_TRADICIONAL' && 'Importado desde documentos tradicionales'}
- {wizard.modoCreacion === 'CLONADO' && - wizard.subModoClonado === 'INTERNO' && ( -
- - Plan origen:{' '} - - - {(() => { - const p = PLANES_EXISTENTES.find( - (x) => x.id === wizard.clonInterno?.planOrigenId, - ) - return ( - p?.nombre || wizard.clonInterno?.planOrigenId || '—' - ) - })()} - -
- )} - {wizard.modoCreacion === 'CLONADO' && - wizard.subModoClonado === 'TRADICIONAL' && ( -
-
Documentos adjuntos
-
    -
  • - - Word del plan: - {' '} - {wizard.clonTradicional?.archivoWordPlanId?.name || - '—'} -
  • -
  • - - Mapa curricular: - {' '} - {wizard.clonTradicional?.archivoMapaExcelId?.name || - '—'} -
  • -
  • - Asignaturas:{' '} - {wizard.clonTradicional?.archivoAsignaturasExcelId - ?.name || '—'} -
  • -
-
- )} - {wizard.modoCreacion === 'IA' && ( + {wizard.tipoOrigen === 'CLONADO_INTERNO' && ( +
+ Plan origen: + + {(() => { + const p = PLANES_EXISTENTES.find( + (x) => x.id === wizard.clonInterno?.planOrigenId, + ) + return ( + p?.nombre || wizard.clonInterno?.planOrigenId || '—' + ) + })()} + +
+ )} + {wizard.tipoOrigen === 'CLONADO_TRADICIONAL' && ( +
+
Documentos adjuntos
+
    +
  • + Word del plan:{' '} + {wizard.clonTradicional?.archivoWordPlanId?.name || '—'} +
  • +
  • + + Mapa curricular: + {' '} + {wizard.clonTradicional?.archivoMapaExcelId?.name || + '—'} +
  • +
  • + Asignaturas:{' '} + {wizard.clonTradicional?.archivoAsignaturasExcelId + ?.name || '—'} +
  • +
+
+ )} + {wizard.tipoOrigen === 'IA' && (
Enfoque: @@ -208,8 +168,10 @@ export function PasoResumenCard({ wizard }: { wizard: NewPlanWizardState }) {
    {adjuntos.map((f) => (
  • - {f.name}{' '} - · {f.size} + + {f.file.name} + {' '} + · {formatFileSize(f.file.size)}
  • ))}
diff --git a/src/data/api/plans.api.ts b/src/data/api/plans.api.ts index 89c5cf1..a32c4f8 100644 --- a/src/data/api/plans.api.ts +++ b/src/data/api/plans.api.ts @@ -14,6 +14,7 @@ import type { TipoCiclo, UUID, } from "../types/domain"; +import type { UploadedFile } from "@/components/planes/wizard/PasoDetallesPanel/FileDropZone"; const EDGE = { plans_create_manual: "plans_create_manual", @@ -220,6 +221,7 @@ export type AIGeneratePlanInput = { notasAdicionales?: string; archivosReferencia?: Array; repositoriosIds?: Array; + archivosAdjuntos: Array; usarMCP?: boolean; }; }; @@ -339,15 +341,20 @@ export async function plans_get_document( export async function getCatalogos() { const supabase = supabaseBrowser(); - const [facRes, carRes, estRes] = await Promise.all([ - supabase.from("facultades").select("*").order("nombre"), - supabase.from("carreras").select("*").order("nombre"), - supabase.from("estados_plan").select("*").order("orden"), - ]); + const [facultadesRes, carrerasRes, estadosRes, estructurasPlanRes] = + await Promise.all([ + supabase.from("facultades").select("*").order("nombre"), + supabase.from("carreras").select("*").order("nombre"), + supabase.from("estados_plan").select("*").order("orden"), + supabase.from("estructuras_plan").select("*").order("creado_en", { + ascending: true, + }), + ]); return { - facultades: facRes.data ?? [], - carreras: carRes.data ?? [], - estados: estRes.data ?? [], + facultades: facultadesRes.data ?? [], + carreras: carrerasRes.data ?? [], + estados: estadosRes.data ?? [], + estructurasPlan: estructurasPlanRes.data ?? [], }; } diff --git a/src/data/supabase/client.ts b/src/data/supabase/client.ts index 4c31cbe..4dca130 100644 --- a/src/data/supabase/client.ts +++ b/src/data/supabase/client.ts @@ -3,7 +3,7 @@ import { createClient } from "@supabase/supabase-js"; import { getEnv } from "./env"; import type { SupabaseClient } from "@supabase/supabase-js"; -import type { Database } from "src/types/supabase.js"; +import type { Database } from "src/types/supabase"; let _client: SupabaseClient | null = null; diff --git a/src/features/planes/nuevo/NuevoPlanModalContainer.tsx b/src/features/planes/nuevo/NuevoPlanModalContainer.tsx index caafbeb..cb560fe 100644 --- a/src/features/planes/nuevo/NuevoPlanModalContainer.tsx +++ b/src/features/planes/nuevo/NuevoPlanModalContainer.tsx @@ -51,7 +51,6 @@ export default function NuevoPlanModalContainer() { const { wizard, setWizard, - carrerasFiltradas, canContinueDesdeModo, canContinueDesdeBasicos, canContinueDesdeDetalles, @@ -125,7 +124,10 @@ export default function NuevoPlanModalContainer() { {({ methods }) => { const currentIndex = Wizard.utils.getIndex(methods.current.id) + 1 const totalSteps = Wizard.steps.length - const nextStep = Wizard.steps[currentIndex] + const nextStep = Wizard.steps[currentIndex] ?? { + title: '', + description: '', + } return ( <> @@ -154,7 +156,6 @@ export default function NuevoPlanModalContainer() { )} diff --git a/src/features/planes/nuevo/hooks/useNuevoPlanWizard.ts b/src/features/planes/nuevo/hooks/useNuevoPlanWizard.ts index 0700f81..ff25daf 100644 --- a/src/features/planes/nuevo/hooks/useNuevoPlanWizard.ts +++ b/src/features/planes/nuevo/hooks/useNuevoPlanWizard.ts @@ -1,6 +1,4 @@ -import { useMemo, useState } from "react"; - -import { CARRERAS } from "../catalogs"; +import { useState } from "react"; import type { NewPlanWizardState, PlanPreview } from "../types"; import type { NivelPlanEstudio, TipoCiclo } from "@/data/types/domain"; @@ -16,10 +14,7 @@ export function useNuevoPlanWizard() { nivel: "", tipoCiclo: "", numCiclos: undefined, - plantillaPlanId: "", - plantillaPlanVersion: "", - plantillaMapaId: "", - plantillaMapaVersion: "", + estructuraPlanId: null, }, // datosBasicos: { // nombrePlan: "Medicina", @@ -51,11 +46,6 @@ export function useNuevoPlanWizard() { errorMessage: null, }); - const carrerasFiltradas = useMemo(() => { - const fac = wizard.datosBasicos.facultadId; - return fac ? CARRERAS.filter((c) => c.facultadId === fac) : CARRERAS; - }, [wizard.datosBasicos.facultadId]); - const canContinueDesdeModo = wizard.tipoOrigen === "MANUAL" || wizard.tipoOrigen === "IA" || (wizard.tipoOrigen === "CLONADO_INTERNO" || @@ -68,10 +58,7 @@ export function useNuevoPlanWizard() { (wizard.datosBasicos.numCiclos !== undefined && wizard.datosBasicos.numCiclos > 0) && // Requerir ambas plantillas (plan y mapa) con versión - !!wizard.datosBasicos.plantillaPlanId && - !!wizard.datosBasicos.plantillaPlanVersion && - !!wizard.datosBasicos.plantillaMapaId && - !!wizard.datosBasicos.plantillaMapaVersion; + !!wizard.datosBasicos.estructuraPlanId; const canContinueDesdeDetalles = (() => { if (wizard.tipoOrigen === "MANUAL") return true; @@ -130,7 +117,6 @@ export function useNuevoPlanWizard() { return { wizard, setWizard, - carrerasFiltradas, canContinueDesdeModo, canContinueDesdeBasicos, canContinueDesdeDetalles, diff --git a/src/features/planes/nuevo/types.ts b/src/features/planes/nuevo/types.ts index 825715a..61dab10 100644 --- a/src/features/planes/nuevo/types.ts +++ b/src/features/planes/nuevo/types.ts @@ -1,3 +1,4 @@ +import type { UploadedFile } from "@/components/planes/wizard/PasoDetallesPanel/FileDropZone"; import type { NivelPlanEstudio, TipoCiclo, @@ -24,10 +25,7 @@ export type NewPlanWizardState = { tipoCiclo: TipoCiclo | ""; numCiclos: number | undefined; // Selección de plantillas (obligatorias) - plantillaPlanId?: string; - plantillaPlanVersion?: string; - plantillaMapaId?: string; - plantillaMapaVersion?: string; + estructuraPlanId: string | null; }; clonInterno?: { planOrigenId: string | null }; clonTradicional?: { @@ -58,7 +56,7 @@ export type NewPlanWizardState = { archivosReferencia: Array; repositoriosReferencia?: Array; archivosAdjuntos?: Array< - { id: string; name: string; size: string; type: string } + UploadedFile >; }; resumen: { previewPlan?: PlanPreview }; diff --git a/src/features/planes/utils/format-file-size.ts b/src/features/planes/utils/format-file-size.ts new file mode 100644 index 0000000..eaa1379 --- /dev/null +++ b/src/features/planes/utils/format-file-size.ts @@ -0,0 +1,5 @@ +export const formatFileSize = (bytes: number): string => { + if (bytes < 1024) return bytes + " B"; + if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + " KB"; + return (bytes / (1024 * 1024)).toFixed(1) + " MB"; +}; diff --git a/src/routes/__root.tsx b/src/routes/__root.tsx index bb05b48..df2ae01 100644 --- a/src/routes/__root.tsx +++ b/src/routes/__root.tsx @@ -30,4 +30,29 @@ export const Route = createRootRouteWithContext()({ /> ), + + errorComponent: ({ error, reset }) => { + return ( +
+

+ ¡Ups! Algo salió mal +

+

+ Ocurrió un error inesperado al cargar esta sección. +

+ + {/* Opcional: Mostrar el detalle técnico en desarrollo */} +
+          {error.message}
+        
+ + +
+ ) + }, }) diff --git a/src/types/supabase.ts b/src/types/supabase.ts index 8165023..5a68cce 100644 --- a/src/types/supabase.ts +++ b/src/types/supabase.ts @@ -4,1210 +4,1234 @@ export type Json = | boolean | null | { [key: string]: Json | undefined } - | Json[] + | 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; + 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; + }; 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; + 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; + }; 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; + 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; + }; 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_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"]; }, - ] - } + ]; + }; 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; + interaccion_ia_id: string | null; + plan_estudio_id: string; + 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; + interaccion_ia_id?: string | null; + plan_estudio_id: string; + 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; + interaccion_ia_id?: string | null; + plan_estudio_id?: string; + 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"] + 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 - tipo: Database["public"]["Enums"]["tipo_estructura_plan"] - version: string | null - } + 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 - tipo: Database["public"]["Enums"]["tipo_estructura_plan"] - version?: string | null - } + 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 - tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] - version?: string | 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"]; + }; + 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_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"]; }, - ] - } + ]; + }; 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; + 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; + }; 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; + 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; + }; 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; + 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; + }; 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"]; }, - ] - } + ]; + }; 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_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 - } + [_ in never]: never; + }; 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" + | "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" | "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" + | "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"; 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: { @@ -1240,7 +1264,12 @@ export const Constants = { ], tipo_asignatura: ["OBLIGATORIA", "OPTATIVA", "TRONCAL", "OTRA"], tipo_bibliografia: ["BASICA", "COMPLEMENTARIA"], - tipo_cambio: ["ACTUALIZACION_CAMPO", "ACTUALIZACION_MAPA", "OTRO"], + 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"], @@ -1261,4 +1290,4 @@ export const Constants = { ], }, }, -} as const +} as const;