generator client {
  provider        = "prisma-client-js"
  previewFeatures = ["views"]
}

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

model alumnos {
  correo               String                 @id @db.VarChar(50)
  nombre               String                 @db.VarChar(30)
  apellido             String                 @db.VarChar(30)
  nivel_ingles         alumnos_nivel_ingles
  grados_grupos_id     Int
  grados_grupos        grados_grupos          @relation(fields: [grados_grupos_id], references: [id], map: "Alumnos_grados_grupos_id_fkey")
  evaluaciones_alumnos evaluaciones_alumnos[]
  evaluaciones_padres  evaluaciones_padres[]

  @@index([grados_grupos_id], map: "Alumnos_grados_grupos_id_fkey")
}

model clases {
  id                   Int                    @id @default(autoincrement())
  materia_id           Int
  trabajador_correo    String                 @db.VarChar(50)
  grado_grupo_id       Int
  grados_grupos        grados_grupos          @relation(fields: [grado_grupo_id], references: [id], map: "Clases_grado_grupo_id_fkey")
  materias             materias               @relation(fields: [materia_id], references: [id], map: "Clases_materia_id_fkey")
  trabajadores         trabajadores           @relation(fields: [trabajador_correo], references: [correo], map: "Clases_trabajador_correo_fkey")
  evaluaciones_alumnos evaluaciones_alumnos[]

  @@index([grado_grupo_id], map: "Clases_grado_grupo_id_fkey")
  @@index([materia_id], map: "Clases_materia_id_fkey")
  @@index([trabajador_correo], map: "Clases_trabajador_correo_fkey")
}

model departamentos {
  id                        Int                         @id @default(autoincrement())
  nombre                    String                      @unique(map: "Departamentos_nombre_key") @db.VarChar(30)
  tipo                      departamentos_tipo
  url_foto                  String                      @db.VarChar(250)
  evaluado_padres           Int                         @default(0) @db.TinyInt
  evaluaciones_padres       evaluaciones_padres[]
  evaluaciones_trabajadores evaluaciones_trabajadores[]
  preguntas_departamento    preguntas_departamento[]
  trabajadores              trabajadores[]
}

model evaluaciones_alumnos {
  id                            Int                             @id @default(autoincrement())
  alumno_correo                 String                          @db.VarChar(50)
  clase_id                      Int
  fecha_evaluacion              DateTime                        @default(now()) @db.Timestamp(6)
  comentario                    String?                         @db.VarChar(250)
  alumnos                       alumnos                         @relation(fields: [alumno_correo], references: [correo], map: "EvaluacionesAlumnos_alumno_correo_fkey")
  clases                        clases                          @relation(fields: [clase_id], references: [id], map: "EvaluacionesAlumnos_clase_id_fkey")
  respuestas_evaluacion_alumnos respuestas_evaluacion_alumnos[]

  @@index([alumno_correo], map: "EvaluacionesAlumnos_alumno_correo_idx")
  @@index([clase_id], map: "EvaluacionesAlumnos_clase_id_idx")
}

model evaluaciones_padres {
  id                           Int                            @id @default(autoincrement())
  departamento_id              Int
  alumno_correo                String                         @db.VarChar(50)
  fecha_evaluacion             DateTime                       @default(now()) @db.Timestamp(6)
  comentario                   String?                        @db.VarChar(250)
  alumnos                      alumnos                        @relation(fields: [alumno_correo], references: [correo], map: "EvaluacionesPadres_alumno_correo_fkey")
  departamentos                departamentos                  @relation(fields: [departamento_id], references: [id], map: "EvaluacionesPadres_departamento_id_fkey")
  respuestas_evaluacion_padres respuestas_evaluacion_padres[]

  @@index([alumno_correo], map: "EvaluacionesPadres_alumno_correo_fkey")
  @@index([departamento_id], map: "EvaluacionesPadres_departamento_id_idx")
}

model evaluaciones_trabajadores {
  id                                                                     Int                                  @id @default(autoincrement())
  evaluator_correo                                                       String                               @db.VarChar(50)
  target_trabajador                                                      String?                              @db.VarChar(50)
  target_departamento                                                    Int?
  fecha_evaluacion                                                       DateTime                             @default(now()) @db.Timestamp(6)
  comentario                                                             String?                              @db.VarChar(250)
  trabajadores_evaluaciones_trabajadores_evaluator_correoTotrabajadores  trabajadores                         @relation("evaluaciones_trabajadores_evaluator_correoTotrabajadores", fields: [evaluator_correo], references: [correo], map: "EvaluacionesTrabajadores_evaluator_correo_fkey")
  departamentos                                                          departamentos?                       @relation(fields: [target_departamento], references: [id], map: "EvaluacionesTrabajadores_target_departamento_fkey")
  trabajadores_evaluaciones_trabajadores_target_trabajadorTotrabajadores trabajadores?                        @relation("evaluaciones_trabajadores_target_trabajadorTotrabajadores", fields: [target_trabajador], references: [correo], map: "EvaluacionesTrabajadores_target_trabajador_fkey")
  respuestas_evaluacion_trabajadores                                     respuestas_evaluacion_trabajadores[]

  @@index([evaluator_correo], map: "EvaluacionesTrabajadores_evaluator_correo_idx")
  @@index([target_departamento], map: "EvaluacionesTrabajadores_target_departamento_idx")
  @@index([target_trabajador], map: "EvaluacionesTrabajadores_target_trabajador_idx")
}

model grados_grupos {
  id      Int                 @id @default(autoincrement())
  grado   Int
  grupo   String              @db.Char(1)
  nivel   grados_grupos_nivel
  alumnos alumnos[]
  clases  clases[]

  @@unique([grado, grupo, nivel], map: "GradosGrupos_grado_grupo_nivel_key")
}

model materias {
  id     Int      @id @default(autoincrement())
  nombre String   @unique(map: "Materias_nombre_key") @db.VarChar(30)
  clases clases[]
}

model preguntas {
  id                                 Int                                  @id @default(autoincrement())
  texto                              String                               @db.VarChar(150)
  audiencia                          preguntas_audiencia
  nivel                              preguntas_nivel?
  respuestas_evaluacion_alumnos      respuestas_evaluacion_alumnos[]
  respuestas_evaluacion_padres       respuestas_evaluacion_padres[]
  respuestas_evaluacion_trabajadores respuestas_evaluacion_trabajadores[]
  secciones_preguntas                secciones_preguntas[]

  @@unique([texto, audiencia, nivel], map: "Preguntas_texto_audiencia_nivel_key")
}

model preguntas_departamento {
  id                     Int                 @id @default(autoincrement())
  departamentos_id       Int
  secciones_preguntas_id Int
  departamentos          departamentos       @relation(fields: [departamentos_id], references: [id], map: "PreguntasDepartamento_departamentos_id_fkey")
  secciones_preguntas    secciones_preguntas @relation(fields: [secciones_preguntas_id], references: [id], map: "PreguntasDepartamento_secciones_preguntas_id_fkey")

  @@index([departamentos_id], map: "PreguntasDepartamento_departamentos_id_fkey")
  @@index([secciones_preguntas_id], map: "PreguntasDepartamento_secciones_preguntas_id_fkey")
}

model respuestas_evaluacion_alumnos {
  id                   Int                  @id @default(autoincrement())
  evaluacion_id        Int
  pregunta_id          Int
  puntaje              Int
  evaluaciones_alumnos evaluaciones_alumnos @relation(fields: [evaluacion_id], references: [id], map: "RespuestasEvaluacionAlumnos_evaluacion_id_fkey")
  preguntas            preguntas            @relation(fields: [pregunta_id], references: [id], map: "RespuestasEvaluacionAlumnos_pregunta_id_fkey")

  @@index([evaluacion_id], map: "RespuestasEvaluacionAlumnos_evaluacion_id_fkey")
  @@index([pregunta_id], map: "RespuestasEvaluacionAlumnos_pregunta_id_fkey")
}

model respuestas_evaluacion_padres {
  id                  Int                 @id @default(autoincrement())
  evaluacion_id       Int
  pregunta_id         Int
  puntaje             Int
  evaluaciones_padres evaluaciones_padres @relation(fields: [evaluacion_id], references: [id], map: "RespuestasEvaluacionPadres_evaluacion_id_fkey")
  preguntas           preguntas           @relation(fields: [pregunta_id], references: [id], map: "RespuestasEvaluacionPadres_pregunta_id_fkey")

  @@index([evaluacion_id], map: "RespuestasEvaluacionPadres_evaluacion_id_fkey")
  @@index([pregunta_id], map: "RespuestasEvaluacionPadres_pregunta_id_fkey")
}

model respuestas_evaluacion_trabajadores {
  id                        Int                       @id @default(autoincrement())
  evaluacion_id             Int
  pregunta_id               Int
  puntaje                   Int
  evaluaciones_trabajadores evaluaciones_trabajadores @relation(fields: [evaluacion_id], references: [id], map: "RespuestasEvaluacionTrabajadores_evaluacion_id_fkey")
  preguntas                 preguntas                 @relation(fields: [pregunta_id], references: [id], map: "RespuestasEvaluacionTrabajadores_pregunta_id_fkey")

  @@index([evaluacion_id], map: "RespuestasEvaluacionTrabajadores_evaluacion_id_fkey")
  @@index([pregunta_id], map: "RespuestasEvaluacionTrabajadores_pregunta_id_fkey")
}

model roles {
  id           Int            @id @default(autoincrement())
  nombre       String         @db.VarChar(30)
  subrol       String?        @db.VarChar(30)
  trabajadores trabajadores[]

  @@unique([nombre, subrol], map: "Roles_nombre_subrol_key")
}

model secciones {
  id                  Int                   @id @default(autoincrement())
  nombre              String                @unique(map: "Secciones_nombre_key") @db.VarChar(50)
  secciones_preguntas secciones_preguntas[]
}

model secciones_preguntas {
  id                     Int                      @id @default(autoincrement())
  seccion_id             Int
  pregunta_id            Int
  preguntas_departamento preguntas_departamento[]
  preguntas              preguntas                @relation(fields: [pregunta_id], references: [id], map: "SeccionesPreguntas_pregunta_id_fkey")
  secciones              secciones                @relation(fields: [seccion_id], references: [id], map: "SeccionesPreguntas_seccion_id_fkey")

  @@index([pregunta_id], map: "SeccionesPreguntas_pregunta_id_fkey")
  @@index([seccion_id], map: "SeccionesPreguntas_seccion_id_fkey")
}

model sistema_accesos {
  id                 Int                 @id @default(autoincrement())
  tipo               sistemaaccesos_tipo
  activo             Boolean             @default(false)
  fecha_modificacion DateTime            @default(now()) @db.Timestamp(6)
}

model trabajadores {
  correo                                                                              String                      @id @db.VarChar(50)
  nombre                                                                              String                      @db.VarChar(30)
  apellido                                                                            String                      @db.VarChar(30)
  url_foto                                                                            String                      @db.VarChar(250)
  departamento_id                                                                     Int
  rol_id                                                                              Int
  clases                                                                              clases[]
  evaluaciones_trabajadores_evaluaciones_trabajadores_evaluator_correoTotrabajadores  evaluaciones_trabajadores[] @relation("evaluaciones_trabajadores_evaluator_correoTotrabajadores")
  evaluaciones_trabajadores_evaluaciones_trabajadores_target_trabajadorTotrabajadores evaluaciones_trabajadores[] @relation("evaluaciones_trabajadores_target_trabajadorTotrabajadores")
  departamentos                                                                       departamentos               @relation(fields: [departamento_id], references: [id], map: "Trabajadores_departamentoId_fkey")
  roles                                                                               roles                       @relation(fields: [rol_id], references: [id], map: "Trabajadores_rolId_fkey")

  @@index([departamento_id], map: "Trabajadores_departamentoId_fkey")
  @@index([rol_id], map: "Trabajadores_rolId_fkey")
}

model usuarios_sistema {
  correo         String               @id @unique(map: "UsuariosSistema_correo_key") @db.VarChar(50)
  nombre         String               @db.VarChar(50)
  apellido       String               @db.VarChar(30)
  rol            usuarios_sistema_rol
  fecha_creacion DateTime             @default(now()) @db.Timestamp(6)
}

view vista_alumnos_info {
  correo       String                          @unique @db.VarChar(50)
  nombre       String                          @db.VarChar(30)
  apellido     String                          @db.VarChar(30)
  nivel_ingles vista_alumnos_info_nivel_ingles
  grado        Int?
  grupo        String?                         @db.Char(1)
  nivel        vista_alumnos_info_nivel?
}

view vista_alumnos_all_info {
  correo           String                              @unique @db.VarChar(50)
  nombre           String                              @db.VarChar(30)
  apellido         String                              @db.VarChar(30)
  nivel_ingles     vista_alumnos_all_info_nivel_ingles
  grados_grupos_id Int?                                @default(0)
  grado            Int?
  grupo            String?                             @db.Char(1)
  nivel            vista_alumnos_all_info_nivel?
}

view vista_trabajadores_all_info {
  correo              String                                @unique @db.VarChar(50)
  nombre              String                                @db.VarChar(30)
  apellido            String                                @db.VarChar(30)
  url_foto            String                                @db.VarChar(250)
  rol_id              Int?                                  @default(0)
  rol_nombre          String?                               @db.VarChar(30)
  departamento_id     Int?                                  @default(0)
  departamento_nombre String?                               @db.VarChar(30)
  departamento_tipo   vista_trabajadores_departamento_tipo?

}

view vista_trabajadores_info {
  correo            String                              @unique @db.VarChar(50)
  nombre            String                              @db.VarChar(30)
  apellido          String                              @db.VarChar(30)
  url_foto          String                              @db.VarChar(250)
  rol               String                              @db.VarChar(30)
  departamento      String                              @db.VarChar(30)
  tipo_departamento trabajadores_info_tipo_departamento
}

enum sistemaaccesos_tipo {
  alumno
  trabajador
  padre
}

enum departamentos_tipo {
  general
  consejo
}

enum preguntas_audiencia {
  alumno
  docente
  coordinador
  consejo
  padre
}

enum grados_grupos_nivel {
  primaria
  secundaria
  preparatoria
}

enum usuarios_sistema_rol {
  admin
  superadmin
}

enum alumnos_nivel_ingles {
  A1
  A2
  B1
  B1plus @map("B1+")
  B2
  C1
  C2
}

enum preguntas_nivel {
  primaria
  secundaria
  preparatoria
}

enum vista_alumnos_all_info_nivel_ingles {
  A1
  A2
  B1
  B1plus @map("B1+")
  B2
  C1
  C2
}

enum vista_alumnos_info_nivel_ingles {
  A1
  A2
  B1
  B1plus @map("B1+")
  B2
  C1
  C2
}

enum trabajadores_info_tipo_departamento {
  general
  consejo
}

enum vista_alumnos_info_nivel {
  primaria
  secundaria
  preparatoria
}

enum vista_alumnos_all_info_nivel {
  primaria
  secundaria
  preparatoria
}

enum vista_trabajadores_departamento_tipo {
  general
  consejo
}
