generator client { provider = "prisma-client-js" } datasource db { provider = "postgresql" url = env("DATABASE_URL") directUrl = env("DIRECT_URL") } model Contact { id Int @id @default(autoincrement()) nombre String email String @unique mensaje String createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@index([email, createdAt]) @@map("contact") } model Formulario { id String @id @default(uuid()) @db.Uuid numero_voluntario Int @unique @default(autoincrement()) nombre String segundo_nombre String? apellido String documento_nro String? documento_tipo String? correo String fecha_nacimiento DateTime? @db.Date nacionalidad String? sexo String? direccion String? ciudad String? estado String? pais String? codigo_postal String? telefono String? whatsapp String? profesion String? lugar_trabajo String? nivel_academico String? status String @default("pendiente") form_version String? email_sent_at DateTime? @db.Timestamptz submitted_at DateTime @default(now()) @db.Timestamptz updated_at DateTime @updatedAt @db.Timestamptz respuestas Respuesta[] @@index([correo]) @@index([status]) @@index([pais]) @@index([submitted_at]) @@index([nombre(ops: raw("gin_trgm_ops"))], type: Gin, map: "formularios_nombre_trgm_idx") @@index([apellido(ops: raw("gin_trgm_ops"))], type: Gin, map: "formularios_apellido_trgm_idx") @@index([correo(ops: raw("gin_trgm_ops"))], type: Gin, map: "formularios_correo_trgm_idx") @@index([telefono(ops: raw("gin_trgm_ops"))], type: Gin, map: "formularios_telefono_trgm_idx") @@index([whatsapp(ops: raw("gin_trgm_ops"))], type: Gin, map: "formularios_whatsapp_trgm_idx") @@index([documento_nro(ops: raw("gin_trgm_ops"))], type: Gin, map: "formularios_documento_nro_trgm_idx") @@index([ciudad(ops: raw("gin_trgm_ops"))], type: Gin, map: "formularios_ciudad_trgm_idx") @@index([estado(ops: raw("gin_trgm_ops"))], type: Gin, map: "formularios_estado_trgm_idx") @@index([profesion(ops: raw("gin_trgm_ops"))], type: Gin, map: "formularios_profesion_trgm_idx") @@index([nivel_academico(ops: raw("gin_trgm_ops"))], type: Gin, map: "formularios_nivel_academico_trgm_idx") @@index([nacionalidad(ops: raw("gin_trgm_ops"))], type: Gin, map: "formularios_nacionalidad_trgm_idx") @@map("formularios") } model Respuesta { id String @id @default(uuid()) @db.Uuid formulario_id String @db.Uuid key String value String seccion String @default("") created_at DateTime @default(now()) @db.Timestamptz formulario Formulario @relation(fields: [formulario_id], references: [id], onDelete: Cascade) @@index([formulario_id]) @@index([key]) @@index([seccion]) @@index([value(ops: raw("gin_trgm_ops"))], type: Gin, map: "respuestas_value_trgm_idx") @@map("respuestas") } model Seccion { id String @id @default(uuid()) @db.Uuid title_key String title String? orden Int @default(0) columns Int @default(1) created_at DateTime @default(now()) @db.Timestamptz campos Campo[] @@index([orden]) @@map("secciones") } model Campo { id String @id @default(uuid()) @db.Uuid key String @unique label_key String tipo String seccion_id String? @db.Uuid required Boolean @default(false) orden Int @default(0) options Json? @db.JsonB source String? created_at DateTime @default(now()) @db.Timestamptz seccion Seccion? @relation(fields: [seccion_id], references: [id], onDelete: SetNull) @@index([seccion_id]) @@index([tipo]) @@map("campos") } model FormVersion { id String @id @default(uuid()) @db.Uuid version String config Json @db.JsonB active Boolean @default(false) created_at DateTime @default(now()) @db.Timestamptz @@map("form_versions") } model Admin { id String @id @default(uuid()) @db.Uuid auth_user_id String? @unique @db.Uuid email String @unique username String? @unique nombre String password_hash String? rol String @default("coordinador") activo Boolean @default(true) ultimo_acceso DateTime? @db.Timestamptz created_at DateTime @default(now()) @db.Timestamptz sessions Session[] @@index([email]) @@map("admins") } model Session { id String @id @default(uuid()) @db.Uuid token_hash String @unique admin_id String @db.Uuid expires_at DateTime @db.Timestamptz created_at DateTime @default(now()) @db.Timestamptz admin Admin @relation(fields: [admin_id], references: [id], onDelete: Cascade) @@index([admin_id]) @@map("sessions") }