// Escuela de Futbol Lobezno - Prisma Schema
// Sistema de Gestión Integral para Escuelas de Fútbol

generator client {
    provider = "prisma-client-js"
    binaryTargets = ["native", "linux-musl-arm64-openssl-3.0.x"]
    output = "/home/ubuntu/escuela_futbol_lobezno/nextjs_space/node_modules/.prisma/client"
}

datasource db {
    provider = "Mysql"
    url      = env("DATABASE_URL")
}

// ==========================================
// AUTENTICACIÓN (NextAuth.js)
// ==========================================

model Account {
  id                String  @id @default(cuid())
  userId            String
  type              String
  provider          String
  providerAccountId String
  refresh_token     String? @db.Text
  access_token      String? @db.Text
  expires_at        Int?
  token_type        String?
  scope             String?
  id_token          String? @db.Text
  session_state     String?

  user User @relation(fields: [userId], references: [id], onDelete: Cascade)

  @@unique([provider, providerAccountId])
}

model Session {
  id           String   @id @default(cuid())
  sessionToken String   @unique
  userId       String
  expires      DateTime
  user         User     @relation(fields: [userId], references: [id], onDelete: Cascade)
}

model VerificationToken {
  identifier String
  token      String   @unique
  expires    DateTime

  @@unique([identifier, token])
}

// User model for NextAuth compatibility
model User {
  id            String    @id @default(cuid())
  name          String?
  email         String    @unique
  emailVerified DateTime?
  image         String?
  password      String?   // Para login local
  rut           String?   @unique
  rol           String?   // COORDINADOR, PROFESOR, NO_PROFESOR, ALUMNO
  escuelaId     String?
  activo        Boolean   @default(true)
  accounts      Account[]
  sessions      Session[]

  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

// ==========================================
// ENTIDADES PRINCIPALES
// ==========================================

model Escuela {
  id             String   @id @default(cuid())
  nombre         String
  direccionCalle String
  direccionNumero String
  direccionDepto String?
  direccionComuna String
  direccionRegion String
  telefono       String
  email          String
  logo           String?
  fechaCreacion  DateTime @default(now())
  activa         Boolean  @default(true)
  
  // Configuración de la escuela
  mesesActivos      String[] // ["1", "2", "3", ...]
  mesesInactivos    String[]
  categorias        String[] // Años de nacimiento
  modalidadesPago   String[] // ["MATRICULA", "POR_CLASE", "MENSUAL", "SEMESTRAL"]
  
  // Relaciones
  usuarios              Usuario[]
  eventos               Evento[]
  campeonatos           Campeonato[]
  equipamientos         Equipamiento[]
  registrosFinancieros  RegistroFinanciero[]
  
  @@map("escuelas")
}

enum RolUsuario {
  COORDINADOR
  PROFESOR
  NO_PROFESOR
  ALUMNO
}

enum PiernaHabil {
  DERECHO
  IZQUIERDO
  AMBAS
}

enum ModalidadPago {
  MATRICULA
  POR_CLASE
  MENSUAL
  SEMESTRAL
}

enum EstadoPago {
  SIN_DEUDA
  PENDIENTE
  PARCIAL
}

model Usuario {
  id                String      @id @default(cuid())
  escuelaId         String
  rut               String      @unique
  nombres           String
  apellidos         String
  nombreCorto       String      // Nombre + Apellido
  fechaNacimiento   DateTime
  telefono          String[]
  email             String      @unique
  direccionCalle    String
  direccionNumero   String
  direccionDepto    String?
  direccionComuna   String
  direccionRegion   String
  foto              String?
  rol               RolUsuario
  clave             String      // Hash bcrypt
  activo            Boolean     @default(true)
  fechaIngreso      DateTime    @default(now())
  
  // Relaciones
  escuela           Escuela     @relation(fields: [escuelaId], references: [id])
  
  // Relaciones específicas por rol
  alumno                    Alumno?
  profesor                  Profesor?
  noProfesor                NoProfesor?
  apoderado                 Apoderado?
  
  // Evaluaciones como evaluador
  evaluacionesFisicas       EvaluacionFisica[]   @relation("EvaluadorFisico")
  evaluacionesDeportivas    EvaluacionDeportiva[] @relation("EvaluadorDeportivo")
  objetivosCreados          ObjetivosIndividuales[] @relation("ProfesorObjetivos")
  
  // Asistencias
  asistencias               Asistencia[]
  
  // Alineaciones creadas
  alineacionesCreadas       Alineacion[]         @relation("CreadorAlineacion")
  
  // Eventos creados
  eventosCreados            Evento[]             @relation("CreadorEvento")
  
  // Registros financieros
  registrosFinancieros      RegistroFinanciero[] @relation("RegistradoPor")
  
  @@map("usuarios")
}

model Alumno {
  id              String   @id @default(cuid())
  usuarioId       String   @unique
  apodo           String?
  categoria       String   // Año de nacimiento
  apoderadoId     String
  
  // Características Físicas
  peso                    Float?
  altura                  Float?
  piernaHabil            PiernaHabil?
  tallaCamiseta          String?
  tallaPantalon          String?
  largoPie               Float?
  
  // Características Posicionales
  posicionPrincipal      String?
  posicionesSecundarias  String[]
  modalidadesFutbol11    String[]
  modalidadesFutbol9     String[]
  modalidadesFutbol7     String[]
  modalidadesFutbol5     String[]
  
  // Datos de Salud
  centroSaludNombre           String?
  centroSaludUbicacion        String?
  alergias                    String?
  condicionesPreexistentes    String?
  lesiones                    String?
  electrocardiogramaFecha     DateTime?
  electrocardiogramaArchivo   String?
  seguroEscolar              Boolean   @default(false)
  
  // Financiero
  modalidadPago       ModalidadPago?
  estadoPagoMatricula EstadoPago        @default(PENDIENTE)
  
  // Evaluaciones
  puntajeDeportivo            Float?            @default(0)
  ultimaEvaluacionFisica      DateTime?
  ultimaEvaluacionDeportiva   DateTime?
  
  // Relaciones
  usuario                 Usuario                 @relation(fields: [usuarioId], references: [id])
  apoderado               Apoderado               @relation(fields: [apoderadoId], references: [id])
  evaluacionesFisicas     EvaluacionFisica[]      @relation("AlumnoEvaluado")
  evaluacionesDeportivas  EvaluacionDeportiva[]   @relation("AlumnoEvaluado")
  objetivos               ObjetivosIndividuales[] @relation("AlumnoObjetivos")
  pagos                   PagoDetalle[]
  
  // Campeonatos
  campeonatos             Campeonato[]            @relation("JugadoresCampeonato")
  estadisticasCampeonato  EstadisticaCampeonato[]
  
  // Contactos de emergencia
  contactosEmergencia     ContactoEmergencia[]
  
  // Fichas de partido
  participacionesPartido  JugadorPartido[]
  golesAnotados           GolPartido[]
  tarjetasRecibidas       TarjetaPartido[]
  
  @@map("alumnos")
}

model Apoderado {
  id                  String   @id @default(cuid())
  usuarioId           String?  @unique // Puede ser el mismo usuario si >15 años
  nombres             String
  apellidos           String
  rut                 String   @unique
  fechaNacimiento     DateTime
  direccionCalle      String
  direccionNumero     String
  direccionDepto      String?
  direccionComuna     String
  direccionRegion     String
  telefono            String[]
  email               String[]
  relacionConAlumno   String   // "Padre", "Madre", "Hermano", "Tutor", "Otro"
  
  // Contacto de emergencia
  otroContactoNombre    String?
  otroContactoTelefono  String?
  
  // Relaciones
  usuario             Usuario?  @relation(fields: [usuarioId], references: [id])
  alumnos             Alumno[]
  
  @@map("apoderados")
}

model Profesor {
  id                      String   @id @default(cuid())
  usuarioId               String   @unique
  categoriasACargo        String[] // Años que entrena
  
  // Datos académicos
  titulos                 String[] // JSON serializado
  
  // Contacto de emergencia
  contactoEmergenciaNombre    String?
  contactoEmergenciaTelefono  String?
  
  // Centro de salud
  centroSaludNombre       String?
  centroSaludUbicacion    String?
  
  // Estadísticas
  asistenciaEntrenamientos  Int @default(0)
  asistenciaAmistosos       Int @default(0)
  asistenciaCampeonatos     Int @default(0)
  
  // Relaciones
  usuario                 Usuario     @relation(fields: [usuarioId], references: [id])
  campeonatos             Campeonato[] @relation("CuerpoTecnico")
  
  @@map("profesores")
}

model NoProfesor {
  id                      String   @id @default(cuid())
  usuarioId               String   @unique
  cargo                   String   // "Tesorero", "Asistente", etc.
  
  // Contacto de emergencia
  contactoEmergenciaNombre    String?
  contactoEmergenciaTelefono  String?
  
  // Centro de salud
  centroSaludNombre       String?
  centroSaludUbicacion    String?
  
  // Estadísticas
  asistenciaEntrenamientos  Int @default(0)
  asistenciaAmistosos       Int @default(0)
  asistenciaCampeonatos     Int @default(0)
  
  // Relaciones
  usuario                 Usuario @relation(fields: [usuarioId], references: [id])
  
  @@map("no_profesores")
}

// ==========================================
// EVENTOS Y ASISTENCIAS
// ==========================================

enum TipoEvento {
  ENTRENAMIENTO
  AMISTOSO
  CAMPEONATO
}

enum EstadoEvento {
  PROGRAMADO
  EN_CURSO
  FINALIZADO
  CANCELADO
}

model Evento {
  id              String        @id @default(cuid())
  escuelaId       String
  tipo            TipoEvento
  descripcion     String
  fecha           DateTime
  hora            String
  lugar           String?
  categorias      String[]      // Categorías participantes
  
  // Configuración según tipo
  tipoCancha         String?    // "COMPLETA", "MEDIA", "CUARTO"
  jugadoresPorLado   Int?
  numeroEquipos      Int?
  campeonatoId       String?
  plantelId          String?
  rival              String?
  
  creadorId       String
  estado          EstadoEvento  @default(PROGRAMADO)
  fechaCreacion   DateTime      @default(now())
  
  // Relaciones
  escuela         Escuela       @relation(fields: [escuelaId], references: [id])
  creador         Usuario       @relation("CreadorEvento", fields: [creadorId], references: [id])
  asistencias     Asistencia[]
  alineacion      Alineacion?
  fichaPartido    FichaPartido?
  registrosFinancieros RegistroFinanciero[]
  
  @@map("eventos")
}

model Asistencia {
  id              String    @id @default(cuid())
  eventoId        String
  usuarioId       String
  presente        Boolean   @default(false)
  fecha           DateTime  @default(now())
  
  // Para alumnos en eventos de pago
  pagoMonto       Float?
  pagoFecha       DateTime?
  
  // Para invitados
  esInvitado      Boolean   @default(false)
  nombreInvitado  String?
  categoriaInvitado String?
  
  // Relaciones
  evento          Evento    @relation(fields: [eventoId], references: [id])
  usuario         Usuario?  @relation(fields: [usuarioId], references: [id])
  
  @@map("asistencias")
}

// ==========================================
// EVALUACIONES
// ==========================================

model EvaluacionFisica {
  id              String   @id @default(cuid())
  alumnoId        String
  evaluadorId     String
  fecha           DateTime @default(now())
  
  // Test de Agilidad (10 posturas)
  postura1        Boolean  @default(false)
  postura2        Boolean  @default(false)
  postura3        Boolean  @default(false)
  postura4        Boolean  @default(false)
  postura5        Boolean  @default(false)
  postura6        Boolean  @default(false)
  postura7        Boolean  @default(false)
  postura8        Boolean  @default(false)
  postura9        Boolean  @default(false)
  postura10       Boolean  @default(false)
  puntajeAgilidad Int      @default(0)
  
  // Test de Velocidad 15m
  tiempoVelocidad   Float?
  puntajeVelocidad  Float? @default(0)
  
  // Test de Saltabilidad Vertical
  alturaVertical    Float?
  puntajeVertical   Float? @default(0)
  
  // Test de Salto Horizontal
  distanciaHorizontal Float?
  puntajeHorizontal   Float? @default(0)
  
  puntajeTotal    Float? @default(0)
  observaciones   String?
  
  // Relaciones
  alumno          Alumno  @relation("AlumnoEvaluado", fields: [alumnoId], references: [id])
  evaluador       Usuario @relation("EvaluadorFisico", fields: [evaluadorId], references: [id])
  
  @@map("evaluaciones_fisicas")
}

model EvaluacionDeportiva {
  id                  String   @id @default(cuid())
  alumnoId            String
  evaluadorId         String
  fecha               DateTime @default(now())
  
  // Criterios (escala 1-5)
  tecnica             Float    @default(1)
  fuerza              Float    @default(1)
  ataque              Float    @default(1)
  defensa             Float    @default(1)
  resistencia         Float    @default(1)
  velocidad           Float    @default(1)
  
  puntajeTotal        Float    @default(1)
  
  // Posiciones preferentes
  posicionesPreferentes String[]
  observaciones       String?
  
  // Relaciones
  alumno              Alumno   @relation("AlumnoEvaluado", fields: [alumnoId], references: [id])
  evaluador           Usuario  @relation("EvaluadorDeportivo", fields: [evaluadorId], references: [id])
  
  @@map("evaluaciones_deportivas")
}

// ==========================================
// OBJETIVOS INDIVIDUALES
// ==========================================

enum TipoObjetivo {
  TACTICO
  TECNICO
  PSICOLOGICO
}

model ObjetivosIndividuales {
  id                    String        @id @default(cuid())
  alumnoId              String
  profesorId            String
  tipo                  TipoObjetivo
  
  objetivoFinal         String
  objetivoInicial       String
  objetivosIntermedios  String[]      // Máximo 3
  
  fechaCreacion         DateTime      @default(now())
  fechaActualizacion    DateTime      @updatedAt
  progreso              Int           @default(0) // 0-100%
  completado            Boolean       @default(false)
  
  // Relaciones
  alumno                Alumno        @relation("AlumnoObjetivos", fields: [alumnoId], references: [id])
  profesor              Usuario       @relation("ProfesorObjetivos", fields: [profesorId], references: [id])
  
  @@map("objetivos_individuales")
}

// ==========================================
// ALINEACIONES
// ==========================================

model Alineacion {
  id                  String   @id @default(cuid())
  eventoId            String   @unique
  creadorId           String
  tipo                TipoEvento
  
  // Configuración
  tipoCancha          String   // "COMPLETA", "MEDIA", "CUARTO"
  jugadoresPorLado    Int
  formacion           String   // "4-4-2", "4-3-3", etc.
  
  // Equipos (JSON serializado)
  equipos             String?  // Para entrenamientos
  titulares           String?  // Para partidos
  suplentes           String?  // Para partidos
  
  considerarAsistencia Boolean @default(false)
  fechaCreacion       DateTime @default(now())
  
  // Relaciones
  evento              Evento   @relation(fields: [eventoId], references: [id])
  creador             Usuario  @relation("CreadorAlineacion", fields: [creadorId], references: [id])
  
  @@map("alineaciones")
}

// ==========================================
// CAMPEONATOS
// ==========================================

model Campeonato {
  id              String   @id @default(cuid())
  escuelaId       String
  nombre          String
  categoria       String
  fechaInicio     DateTime
  fechaFin        DateTime
  organizador     String
  activo          Boolean  @default(true)
  
  // Relaciones
  escuela         Escuela  @relation(fields: [escuelaId], references: [id])
  jugadores       Alumno[] @relation("JugadoresCampeonato")
  cuerpoTecnico   Profesor[] @relation("CuerpoTecnico")
  partidos        PartidoCampeonato[]
  
  @@map("campeonatos")
}

model PartidoCampeonato {
  id                String   @id @default(cuid())
  campeonatoId      String
  fecha             DateTime
  rival             String
  
  // Resultado
  golesAFavor       Int?
  golesEnContra     Int?
  
  // Relaciones
  campeonato        Campeonato @relation(fields: [campeonatoId], references: [id])
  estadisticas      EstadisticaCampeonato[]
  
  @@map("partidos_campeonato")
}

model EstadisticaCampeonato {
  id                  String   @id @default(cuid())
  partidoId           String
  alumnoId            String
  minutosJugados      Int      @default(0)
  goles               Int      @default(0)
  asistencias         Int      @default(0)
  tarjetasAmarillas   Int      @default(0)
  tarjetasRojas       Int      @default(0)
  
  // Relaciones
  partido             PartidoCampeonato @relation(fields: [partidoId], references: [id])
  alumno              Alumno            @relation(fields: [alumnoId], references: [id])
  
  @@map("estadisticas_campeonato")
}

// ==========================================
// FINANZAS
// ==========================================

enum TipoFinanciero {
  INGRESO
  EGRESO
}

model RegistroFinanciero {
  id              String         @id @default(cuid())
  escuelaId       String
  tipo            TipoFinanciero
  categoria       String
  concepto        String
  monto           Float
  fecha           DateTime
  mes             Int            // 1-12
  ano             Int
  
  // Relaciones opcionales
  eventoId        String?
  alumnoId        String?
  usuarioId       String?
  
  metodoPago      String?
  comprobante     String?
  registradoPor   String
  
  // Relaciones
  escuela         Escuela        @relation(fields: [escuelaId], references: [id])
  evento          Evento?        @relation(fields: [eventoId], references: [id])
  registrador     Usuario        @relation("RegistradoPor", fields: [registradoPor], references: [id])
  
  @@map("registros_financieros")
}

model PagoDetalle {
  id          String   @id @default(cuid())
  alumnoId    String
  fecha       DateTime @default(now())
  monto       Float
  concepto    String
  metodoPago  String
  
  // Relaciones
  alumno      Alumno   @relation(fields: [alumnoId], references: [id])
  
  @@map("pagos_detalle")
}

// ==========================================
// EMERGENCIAS Y CENTROS DE SALUD
// ==========================================

model CentroSalud {
  id                String   @id @default(cuid())
  escuelaId         String
  nombre            String
  direccion         String
  telefono          String
  telefonoUrgencia  String?
  horarioAtencion   String?
  tipoAtencion      String   // "HOSPITAL", "CLINICA", "CESFAM", "SAPU"
  activo            Boolean  @default(true)
  
  @@map("centros_salud")
}

model ContactoEmergencia {
  id                String   @id @default(cuid())
  alumnoId          String
  nombre            String
  relacion          String   // "Padre", "Madre", "Tutor", "Abuelo", etc.
  telefonoPrincipal String
  telefonoSecundario String?
  email             String?
  esPrincipal       Boolean  @default(false)
  
  // Relaciones
  alumno            Alumno   @relation(fields: [alumnoId], references: [id], onDelete: Cascade)
  
  @@map("contactos_emergencia")
}

// ==========================================
// FICHA DE PARTIDO
// ==========================================

enum ResultadoPartido {
  VICTORIA
  EMPATE
  DERROTA
  PENDIENTE
}

model FichaPartido {
  id                String          @id @default(cuid())
  eventoId          String          @unique
  categoria         String
  rival             String
  fecha             DateTime
  lugar             String
  
  // Resultado
  golesAFavor       Int             @default(0)
  golesEnContra     Int             @default(0)
  resultado         ResultadoPartido @default(PENDIENTE)
  
  // Configuración
  formacion         String          // "4-3-3", "4-4-2", etc.
  tipoPartido       String          // "AMISTOSO", "CAMPEONATO"
  
  // Observaciones
  observaciones     String?
  
  creadorId         String
  fechaCreacion     DateTime        @default(now())
  
  // Relaciones
  evento            Evento          @relation(fields: [eventoId], references: [id])
  jugadores         JugadorPartido[]
  goles             GolPartido[]
  tarjetas          TarjetaPartido[]
  
  @@map("fichas_partido")
}

model JugadorPartido {
  id                String        @id @default(cuid())
  fichaPartidoId    String
  alumnoId          String
  esTitular         Boolean       @default(false)
  posicion          String
  numeroCamiseta    Int?
  minutosJugados    Int           @default(0)
  minutoEntrada     Int?
  minutoSalida      Int?
  
  // Relaciones
  fichaPartido      FichaPartido  @relation(fields: [fichaPartidoId], references: [id], onDelete: Cascade)
  alumno            Alumno        @relation(fields: [alumnoId], references: [id])
  
  @@map("jugadores_partido")
}

model GolPartido {
  id                String        @id @default(cuid())
  fichaPartidoId    String
  alumnoId          String
  minuto            Int
  tipoGol           String        // "JUGADA", "PENAL", "TIRO_LIBRE", "AUTOGOL"
  asistenciaId      String?       // ID del alumno que asistió
  
  // Relaciones
  fichaPartido      FichaPartido  @relation(fields: [fichaPartidoId], references: [id], onDelete: Cascade)
  alumno            Alumno        @relation(fields: [alumnoId], references: [id])
  
  @@map("goles_partido")
}

model TarjetaPartido {
  id                String        @id @default(cuid())
  fichaPartidoId    String
  alumnoId          String
  minuto            Int
  tipo              String        // "AMARILLA", "ROJA"
  motivo            String?
  
  // Relaciones
  fichaPartido      FichaPartido  @relation(fields: [fichaPartidoId], references: [id], onDelete: Cascade)
  alumno            Alumno        @relation(fields: [alumnoId], references: [id])
  
  @@map("tarjetas_partido")
}

// ==========================================
// PLANIFICACIÓN ANUAL
// ==========================================

enum TipoPlanificacion {
  ENTRENAMIENTO
  PARTIDO_AMISTOSO
  CAMPEONATO
  EVALUACION
  EVENTO_ESPECIAL
  RECESO
}

enum EstadoPlanificacion {
  PLANIFICADO
  CONFIRMADO
  EN_CURSO
  COMPLETADO
  CANCELADO
}

model PlanificacionAnual {
  id                String              @id @default(cuid())
  escuelaId         String
  ano               Int
  mes               Int                 // 1-12
  semana            Int?                // 1-52
  categoria         String
  
  tipo              TipoPlanificacion
  titulo            String
  descripcion       String?
  
  fechaInicio       DateTime
  fechaFin          DateTime?
  
  lugar             String?
  responsableId     String?
  
  estado            EstadoPlanificacion @default(PLANIFICADO)
  
  // Para campeonatos
  campeonatoId      String?
  
  // Observaciones
  observaciones     String?
  
  creadorId         String
  fechaCreacion     DateTime            @default(now())
  fechaActualizacion DateTime           @updatedAt
  
  @@map("planificacion_anual")
}

// ==========================================
// EQUIPAMIENTO
// ==========================================

enum EstadoEquipamiento {
  NUEVO
  BUENO
  REGULAR
  MALO
}

model Equipamiento {
  id                String             @id @default(cuid())
  escuelaId         String
  tipo              String             // "Balón", "Cono", "Peto", "Uniforme", etc.
  descripcion       String
  cantidad          Int
  estado            EstadoEquipamiento @default(NUEVO)
  fechaAdquisicion  DateTime
  costo             Float
  ubicacion         String?
  
  // Relaciones
  escuela           Escuela            @relation(fields: [escuelaId], references: [id])
  asignaciones      AsignacionEquipamiento[]
  
  @@map("equipamientos")
}

model AsignacionEquipamiento {
  id              String      @id @default(cuid())
  equipamientoId  String
  usuarioId       String
  fecha           DateTime    @default(now())
  cantidad        Int
  devuelto        Boolean     @default(false)
  
  // Relaciones
  equipamiento    Equipamiento @relation(fields: [equipamientoId], references: [id])
  
  @@map("asignaciones_equipamiento")
}

// ==========================================
// CMS - GESTIÓN DE CONTENIDO WEB
// ==========================================

enum TipoContenido {
  HERO_TITULO
  HERO_SUBTITULO
  HERO_DESCRIPCION
  SECCION_TITULO
  SECCION_DESCRIPCION
  FEATURE_CARD
  NOTICIA
  ANUNCIO
  CONTACTO
  REDES_SOCIALES
}

model ContenidoWeb {
  id              String        @id @default(cuid())
  escuelaId       String
  tipo            TipoContenido
  clave           String        // Identificador único por tipo (ej: "hero_main", "feature_1")
  titulo          String?
  contenido       String?       @db.Text
  icono           String?       // Nombre del icono de lucide-react
  enlace          String?       // URL opcional
  orden           Int           @default(0)
  activo          Boolean       @default(true)
  
  // Metadata
  creadorId       String
  fechaCreacion   DateTime      @default(now())
  fechaActualizacion DateTime   @updatedAt
  
  @@unique([escuelaId, tipo, clave])
  @@map("contenido_web")
}

// ==========================================
// DOCUMENTOS Y REPORTES
// ==========================================

enum TipoDocumento {
  REPORTE_ALUMNO
  REPORTE_ASISTENCIA
  REPORTE_EVALUACION
  REPORTE_FINANCIERO
  REPORTE_CAMPEONATO
  CERTIFICADO
  FICHA_MEDICA
  CONSTANCIA
}

enum EstadoDocumento {
  GENERANDO
  COMPLETADO
  ERROR
}

model Documento {
  id              String          @id @default(cuid())
  escuelaId       String
  tipo            TipoDocumento
  titulo          String
  descripcion     String?
  
  // Filtros usados para generar el documento
  filtros         Json?           // {alumnoId, fechaInicio, fechaFin, categoria, etc}
  
  // Archivo generado
  archivoUrl      String?
  formato         String          @default("PDF") // PDF, EXCEL, etc
  
  estado          EstadoDocumento @default(GENERANDO)
  
  // Metadata
  generadoPor     String
  fechaGeneracion DateTime        @default(now())
  
  @@map("documentos")
}
